From ead51e5554242ff9ef22aa3c26b0f69a864f6b01 Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Tue, 18 Jun 2024 15:07:54 +0800 Subject: [PATCH 1/2] feat(console): add Ruby app guide --- .changeset/large-gifts-cross.md | 5 + .../assets/docs/guides/generate-metadata.js | 3 +- .../console/src/assets/docs/guides/index.ts | 93 +++++---- .../assets/docs/guides/web-ruby/README.mdx | 193 ++++++++++++++++++ .../assets/docs/guides/web-ruby/config.json | 3 + .../src/assets/docs/guides/web-ruby/index.ts | 12 ++ .../src/assets/docs/guides/web-ruby/logo.webp | Bin 0 -> 29988 bytes 7 files changed, 264 insertions(+), 45 deletions(-) create mode 100644 .changeset/large-gifts-cross.md create mode 100644 packages/console/src/assets/docs/guides/web-ruby/README.mdx create mode 100644 packages/console/src/assets/docs/guides/web-ruby/config.json create mode 100644 packages/console/src/assets/docs/guides/web-ruby/index.ts create mode 100644 packages/console/src/assets/docs/guides/web-ruby/logo.webp diff --git a/.changeset/large-gifts-cross.md b/.changeset/large-gifts-cross.md new file mode 100644 index 000000000..a51e9ea3b --- /dev/null +++ b/.changeset/large-gifts-cross.md @@ -0,0 +1,5 @@ +--- +"@logto/console": minor +--- + +add Ruby app guide diff --git a/packages/console/src/assets/docs/guides/generate-metadata.js b/packages/console/src/assets/docs/guides/generate-metadata.js index a0be81e57..ce3201095 100644 --- a/packages/console/src/assets/docs/guides/generate-metadata.js +++ b/packages/console/src/assets/docs/guides/generate-metadata.js @@ -20,8 +20,7 @@ const data = await Promise.all( return; } - // Add `.png` later - const logo = ['logo.svg'].find((logo) => existsSync(`${directory}/${logo}`)); + const logo = ['logo.webp', 'logo.svg', 'logo.png'].find((logo) => existsSync(`${directory}/${logo}`)); const config = existsSync(`${directory}/config.json`) ? await import(`./${directory}/config.json`, { assert: { type: 'json' } }).then( diff --git a/packages/console/src/assets/docs/guides/index.ts b/packages/console/src/assets/docs/guides/index.ts index a9a4f38a5..97c25d77d 100644 --- a/packages/console/src/assets/docs/guides/index.ts +++ b/packages/console/src/assets/docs/guides/index.ts @@ -2,42 +2,50 @@ import { lazy } from 'react'; +import { type Guide } from './types'; +import webNextAppRouter from './web-next-app-router/index'; +import nativeExpo from './native-expo/index'; +import spaAngular from './spa-angular/index'; +import spaReact from './spa-react/index'; +import m2mGeneral from './m2m-general/index'; +import webExpress from './web-express/index'; +import webNext from './web-next/index'; +import webSveltekit from './web-sveltekit/index'; +import webGo from './web-go/index'; +import webNextAuth from './web-next-auth/index'; +import webJavaSpringBoot from './web-java-spring-boot/index'; +import webGptPlugin from './web-gpt-plugin/index'; +import spaVue from './spa-vue/index'; +import nativeIosSwift from './native-ios-swift/index'; +import nativeAndroid from './native-android/index'; +import spaVanilla from './spa-vanilla/index'; +import webNuxt from './web-nuxt/index'; +import webPhp from './web-php/index'; +import webRuby from './web-ruby/index'; +import spaWebflow from './spa-webflow/index'; +import webWordpress from './web-wordpress/index'; +import webPython from './web-python/index'; +import nativeCapacitor from './native-capacitor/index'; +import webRemix from './web-remix/index'; +import nativeFlutter from './native-flutter/index'; +import webDotnetCore from './web-dotnet-core/index'; +import webDotnetCoreMvc from './web-dotnet-core-mvc/index'; +import webDotnetCoreBlazorServer from './web-dotnet-core-blazor-server/index'; +import webDotnetCoreBlazorWasm from './web-dotnet-core-blazor-wasm/index'; +import webOutline from './web-outline/index'; import apiExpress from './api-express/index'; import apiPython from './api-python/index'; import apiSpringBoot from './api-spring-boot/index'; -import m2mGeneral from './m2m-general/index'; -import nativeAndroid from './native-android/index'; -import nativeCapacitor from './native-capacitor/index'; -import nativeExpo from './native-expo/index'; -import nativeFlutter from './native-flutter/index'; -import nativeIosSwift from './native-ios-swift/index'; -import spaAngular from './spa-angular/index'; -import spaReact from './spa-react/index'; -import spaVanilla from './spa-vanilla/index'; -import spaVue from './spa-vue/index'; -import spaWebflow from './spa-webflow/index'; import thirdPartyOidc from './third-party-oidc/index'; -import { type Guide } from './types'; -import webDotnetCore from './web-dotnet-core/index'; -import webDotnetCoreBlazorServer from './web-dotnet-core-blazor-server/index'; -import webDotnetCoreBlazorWasm from './web-dotnet-core-blazor-wasm/index'; -import webDotnetCoreMvc from './web-dotnet-core-mvc/index'; -import webExpress from './web-express/index'; -import webGo from './web-go/index'; -import webGptPlugin from './web-gpt-plugin/index'; -import webJavaSpringBoot from './web-java-spring-boot/index'; -import webNext from './web-next/index'; -import webNextAppRouter from './web-next-app-router/index'; -import webNextAuth from './web-next-auth/index'; -import webNuxt from './web-nuxt/index'; -import webOutline from './web-outline/index'; -import webPhp from './web-php/index'; -import webPython from './web-python/index'; -import webRemix from './web-remix/index'; -import webSveltekit from './web-sveltekit/index'; -import webWordpress from './web-wordpress/index'; const guides: Readonly = Object.freeze([ + { + order: 1, + id: 'web-next-app-router', + Logo: lazy(async () => import('./web-next-app-router/logo.svg')), + Component: lazy(async () => import('./web-next-app-router/README.mdx')), + metadata: webNextAppRouter, + }, { order: 1.1, id: 'native-expo', @@ -59,13 +67,6 @@ const guides: Readonly = Object.freeze([ Component: lazy(async () => import('./spa-react/README.mdx')), metadata: spaReact, }, - { - order: 1.1, - id: 'web-next-app-router', - Logo: lazy(async () => import('./web-next-app-router/logo.svg')), - Component: lazy(async () => import('./web-next-app-router/README.mdx')), - metadata: webNextAppRouter, - }, { order: 1.2, id: 'm2m-general', @@ -164,6 +165,13 @@ const guides: Readonly = Object.freeze([ Component: lazy(async () => import('./web-php/README.mdx')), metadata: webPhp, }, + { + order: 2, + id: 'web-ruby', + Logo: lazy(async () => import('./web-ruby/logo.webp')), + Component: lazy(async () => import('./web-ruby/README.mdx')), + metadata: webRuby, + }, { order: 2.1, id: 'spa-webflow', @@ -242,33 +250,32 @@ const guides: Readonly = Object.freeze([ metadata: webOutline, }, { - order: Number.POSITIVE_INFINITY, + order: Infinity, id: 'api-express', Logo: lazy(async () => import('./api-express/logo.svg')), Component: lazy(async () => import('./api-express/README.mdx')), metadata: apiExpress, }, { - order: Number.POSITIVE_INFINITY, + order: Infinity, id: 'api-python', Logo: lazy(async () => import('./api-python/logo.svg')), Component: lazy(async () => import('./api-python/README.mdx')), metadata: apiPython, }, { - order: Number.POSITIVE_INFINITY, + order: Infinity, id: 'api-spring-boot', Logo: lazy(async () => import('./api-spring-boot/logo.svg')), Component: lazy(async () => import('./api-spring-boot/README.mdx')), metadata: apiSpringBoot, }, { - order: Number.POSITIVE_INFINITY, + order: Infinity, id: 'third-party-oidc', Logo: lazy(async () => import('./third-party-oidc/logo.svg')), Component: lazy(async () => import('./third-party-oidc/README.mdx')), metadata: thirdPartyOidc, - }, -]); + },]); export default guides; diff --git a/packages/console/src/assets/docs/guides/web-ruby/README.mdx b/packages/console/src/assets/docs/guides/web-ruby/README.mdx new file mode 100644 index 000000000..c94ffd883 --- /dev/null +++ b/packages/console/src/assets/docs/guides/web-ruby/README.mdx @@ -0,0 +1,193 @@ +import UriInputField from '@/mdx-components/UriInputField'; +import InlineNotification from '@/ds-components/InlineNotification'; +import { generateStandardSecret } from '@logto/shared/universal'; +import Steps from '@/mdx-components/Steps'; +import Step from '@/mdx-components/Step'; + + + + + +```bash +bundle add logto +``` + +Or whatever your preferred method of adding gems is. + + + + + + + +The following demonstration is for Ruby on Rails. However, you can apply the same steps to other Ruby frameworks. + + + +In the file where you want to initialize the Logto client (e.g. a base controller or a middleware), add the following code: + +
+  
+    {`require "logto/client"
+
+@client = LogtoClient.new(
+  config: LogtoClient::Config.new(
+    endpoint: "${props.endpoint}",
+    app_id: "${props.app.id}",
+    app_secret: "${props.app.secret}"
+  ),
+  navigate: ->(uri) { a_redirect_method(uri) },
+  storage: LogtoClient::SessionStorage.new(the_session_object)
+)
+end`}
+  
+
+ +For instance, in a Rails controller, the code might look like this: + +
+  
+    {`# app/controllers/sample_controller.rb
+require "logto/client"
+
+class SampleController < ApplicationController
+  before_action :initialize_logto_client
+
+  private
+
+  def initialize_logto_client
+    @client = LogtoClient.new(
+      config: LogtoClient::Config.new(
+        endpoint: "${props.endpoint}",
+        app_id: "${props.app.id}",
+        app_secret: "${props.app.secret}"
+      ),
+      # Allow the client to redirect to other hosts (i.e. your Logto tenant)
+      navigate: ->(uri) { redirect_to(uri, allow_other_host: true) },
+      # Controller has access to the session object
+      storage: LogtoClient::SessionStorage.new(session)
+    )
+  end
+end`}
+  
+
+ +
+ + + +First, let's enter your redirect URI. E.g. `http://localhost:3000/callback`. [Redirect URI](https://www.oauth.com/oauth2-servers/redirect-uris/) is an OAuth 2.0 concept which implies the location should redirect after authentication. + + + +After signing out, it'll be great to redirect user back to your website. For example, add `http://localhost:3000` as the post sign-out redirect URI below. + + + + + + + +

+ Since the redirect URI has been set to {props.redirectUris[0] || 'http://localhost:3000/callback'}, it needs to be handled it in our application. In a Rails controller, you can add the following code: +

+ +
+  
+    {`# app/controllers/sample_controller.rb
+class SampleController < ApplicationController
+  def ${props.redirectUris[0]?.split('/').pop() || 'callback'}
+    @client.handle_sign_in_callback(url: request.original_url)
+  end
+end`}
+  
+
+ +And configure the route in `config/routes.rb`: + +
+  
+    {`Rails.application.routes.draw do
+  get "${new URL(props.redirectUris[0] || 'http://localhost:3000/callback').pathname}", to: "sample#${props.redirectUris[0]?.split('/').pop() || 'callback'}"
+end`}
+  
+
+ +
+ + + +There are various ways to invoke sign-in and sign-out in your application. For example, you can implement two routes in your Rails application: + +
+  
+    {`# app/controllers/sample_controller.rb
+class SampleController < ApplicationController
+  def sign_in
+    @client.sign_in(redirect_uri: request.base_url + "${new URL(props.redirectUris[0] || 'http://localhost:3000/callback').pathname}")
+  end
+
+  def sign_out
+    @client.sign_out(post_logout_redirect_uri: request.base_url)
+  end
+
+  # ...
+end`}
+  
+
+ +```ruby +# config/routes.rb +Rails.application.routes.draw do + get "/sign_in", to: "sample#sign_in" + get "/sign_out", to: "sample#sign_out" + + # ... +end +``` + +Then you can create buttons or links in your views to trigger these actions. For example: + +```erb + +<% if @client.is_authenticated? %> + Sign out +<% else %> + Sign in +<% end %> +``` + +
+ + + +To display the user's information, you can use the `@client.id_token_claims` method. For example, in a view: + +```erb + +<% if @client.is_authenticated? %> +

Welcome, <%= @client.id_token_claims["name"] %>

+<% else %> +

Please sign in

+<% end %> +``` + +Please refer to the `#id_token_claims` method in the [gemdocs](https://gemdocs.org/gems/logto/latest) for more information. + +
+ +
diff --git a/packages/console/src/assets/docs/guides/web-ruby/config.json b/packages/console/src/assets/docs/guides/web-ruby/config.json new file mode 100644 index 000000000..c435a12c1 --- /dev/null +++ b/packages/console/src/assets/docs/guides/web-ruby/config.json @@ -0,0 +1,3 @@ +{ + "order": 2 +} diff --git a/packages/console/src/assets/docs/guides/web-ruby/index.ts b/packages/console/src/assets/docs/guides/web-ruby/index.ts new file mode 100644 index 000000000..a6d01d628 --- /dev/null +++ b/packages/console/src/assets/docs/guides/web-ruby/index.ts @@ -0,0 +1,12 @@ +import { ApplicationType } from '@logto/schemas'; + +import { type GuideMetadata } from '../types'; + +const metadata: Readonly = Object.freeze({ + name: 'Ruby', + description: + 'Ruby is a dynamic, open-source programming language with a focus on simplicity and productivity.', + target: ApplicationType.Traditional, +}); + +export default metadata; diff --git a/packages/console/src/assets/docs/guides/web-ruby/logo.webp b/packages/console/src/assets/docs/guides/web-ruby/logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..5684ca2d161649975668e25fb3d6d25ca01d373a GIT binary patch literal 29988 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 R39gXYl+1DNlyXy<4sA%*xVJRe?b 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 literal 0 HcmV?d00001 From 282f09121920c0490823137dbcaa3b783675da17 Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Tue, 18 Jun 2024 18:23:01 +0800 Subject: [PATCH 2/2] refactor(console): support non-svg logos --- .../assets/docs/guides/generate-metadata.js | 21 +++-- .../docs/guides/{index.ts => index.tsx} | 82 +++++++++--------- .../console/src/assets/docs/guides/types.ts | 5 +- .../src/assets/docs/guides/web-ruby/logo.webp | Bin 29988 -> 33844 bytes packages/console/src/assets/index.d.ts | 10 +++ .../console/src/components/Guide/hooks.ts | 2 +- .../console/src/components/Guide/index.tsx | 6 +- .../components/ApiGuide/index.tsx | 2 +- .../components/AppGuide/index.tsx | 2 +- 9 files changed, 79 insertions(+), 51 deletions(-) rename packages/console/src/assets/docs/guides/{index.ts => index.tsx} (95%) diff --git a/packages/console/src/assets/docs/guides/generate-metadata.js b/packages/console/src/assets/docs/guides/generate-metadata.js index ce3201095..d1ca726d9 100644 --- a/packages/console/src/assets/docs/guides/generate-metadata.js +++ b/packages/console/src/assets/docs/guides/generate-metadata.js @@ -41,20 +41,31 @@ const metadata = data .sort((a, b) => a.order - b.order); const camelCase = (value) => value.replaceAll(/-./g, (x) => x[1].toUpperCase()); -const filename = 'index.ts'; +const filename = 'index.tsx'; await fs.writeFile( filename, "// This is a generated file, don't update manually.\n\nimport { lazy } from 'react';\n\nimport { type Guide } from './types';\n" ); -for (const { name } of metadata) { +for (const { name, logo } of metadata) { // eslint-disable-next-line no-await-in-loop await fs.appendFile(filename, `import ${camelCase(name)} from './${name}/index';\n`); + + if (logo && !logo.endsWith('.svg')) { + // eslint-disable-next-line no-await-in-loop + await fs.appendFile(filename, `import ${camelCase(name)}Logo from './${name}/${logo}';\n`); + } } await fs.appendFile(filename, '\n'); -await fs.appendFile(filename, 'const guides: Readonly = Object.freeze(['); +await fs.appendFile(filename, 'export const guides: Readonly = Object.freeze(['); + +const getLogo = ({ name, logo }) => { + if (!logo) return 'undefined'; + if (logo.endsWith('.svg')) return `lazy(async () => import('./${name}/${logo}'))`; + return `({ className }: { readonly className?: string }) => ${name}`; +}; for (const { name, logo, order } of metadata) { // eslint-disable-next-line no-await-in-loop @@ -64,11 +75,11 @@ for (const { name, logo, order } of metadata) { { order: ${order}, id: '${name}', - Logo: ${logo ? `lazy(async () => import('./${name}/${logo}'))` : 'undefined'}, + Logo: ${getLogo({ name, logo })}, Component: lazy(async () => import('./${name}/README.mdx')), metadata: ${camelCase(name)}, },` ); } -await fs.appendFile(filename, ']);\n\nexport default guides;\n'); +await fs.appendFile(filename, ']);\n'); diff --git a/packages/console/src/assets/docs/guides/index.ts b/packages/console/src/assets/docs/guides/index.tsx similarity index 95% rename from packages/console/src/assets/docs/guides/index.ts rename to packages/console/src/assets/docs/guides/index.tsx index 97c25d77d..ecb36a1d9 100644 --- a/packages/console/src/assets/docs/guides/index.ts +++ b/packages/console/src/assets/docs/guides/index.tsx @@ -2,43 +2,44 @@ import { lazy } from 'react'; -import { type Guide } from './types'; -import webNextAppRouter from './web-next-app-router/index'; -import nativeExpo from './native-expo/index'; -import spaAngular from './spa-angular/index'; -import spaReact from './spa-react/index'; -import m2mGeneral from './m2m-general/index'; -import webExpress from './web-express/index'; -import webNext from './web-next/index'; -import webSveltekit from './web-sveltekit/index'; -import webGo from './web-go/index'; -import webNextAuth from './web-next-auth/index'; -import webJavaSpringBoot from './web-java-spring-boot/index'; -import webGptPlugin from './web-gpt-plugin/index'; -import spaVue from './spa-vue/index'; -import nativeIosSwift from './native-ios-swift/index'; -import nativeAndroid from './native-android/index'; -import spaVanilla from './spa-vanilla/index'; -import webNuxt from './web-nuxt/index'; -import webPhp from './web-php/index'; -import webRuby from './web-ruby/index'; -import spaWebflow from './spa-webflow/index'; -import webWordpress from './web-wordpress/index'; -import webPython from './web-python/index'; -import nativeCapacitor from './native-capacitor/index'; -import webRemix from './web-remix/index'; -import nativeFlutter from './native-flutter/index'; -import webDotnetCore from './web-dotnet-core/index'; -import webDotnetCoreMvc from './web-dotnet-core-mvc/index'; -import webDotnetCoreBlazorServer from './web-dotnet-core-blazor-server/index'; -import webDotnetCoreBlazorWasm from './web-dotnet-core-blazor-wasm/index'; -import webOutline from './web-outline/index'; import apiExpress from './api-express/index'; import apiPython from './api-python/index'; import apiSpringBoot from './api-spring-boot/index'; +import m2mGeneral from './m2m-general/index'; +import nativeAndroid from './native-android/index'; +import nativeCapacitor from './native-capacitor/index'; +import nativeExpo from './native-expo/index'; +import nativeFlutter from './native-flutter/index'; +import nativeIosSwift from './native-ios-swift/index'; +import spaAngular from './spa-angular/index'; +import spaReact from './spa-react/index'; +import spaVanilla from './spa-vanilla/index'; +import spaVue from './spa-vue/index'; +import spaWebflow from './spa-webflow/index'; import thirdPartyOidc from './third-party-oidc/index'; +import { type Guide } from './types'; +import webDotnetCore from './web-dotnet-core/index'; +import webDotnetCoreBlazorServer from './web-dotnet-core-blazor-server/index'; +import webDotnetCoreBlazorWasm from './web-dotnet-core-blazor-wasm/index'; +import webDotnetCoreMvc from './web-dotnet-core-mvc/index'; +import webExpress from './web-express/index'; +import webGo from './web-go/index'; +import webGptPlugin from './web-gpt-plugin/index'; +import webJavaSpringBoot from './web-java-spring-boot/index'; +import webNext from './web-next/index'; +import webNextAppRouter from './web-next-app-router/index'; +import webNextAuth from './web-next-auth/index'; +import webNuxt from './web-nuxt/index'; +import webOutline from './web-outline/index'; +import webPhp from './web-php/index'; +import webPython from './web-python/index'; +import webRemix from './web-remix/index'; +import webRuby from './web-ruby/index'; +import webRubyLogo from './web-ruby/logo.webp'; +import webSveltekit from './web-sveltekit/index'; +import webWordpress from './web-wordpress/index'; -const guides: Readonly = Object.freeze([ +export const guides: Readonly = Object.freeze([ { order: 1, id: 'web-next-app-router', @@ -168,7 +169,9 @@ const guides: Readonly = Object.freeze([ { order: 2, id: 'web-ruby', - Logo: lazy(async () => import('./web-ruby/logo.webp')), + Logo: ({ className }: { readonly className?: string }) => ( + web-ruby + ), Component: lazy(async () => import('./web-ruby/README.mdx')), metadata: webRuby, }, @@ -250,32 +253,31 @@ const guides: Readonly = Object.freeze([ metadata: webOutline, }, { - order: Infinity, + order: Number.POSITIVE_INFINITY, id: 'api-express', Logo: lazy(async () => import('./api-express/logo.svg')), Component: lazy(async () => import('./api-express/README.mdx')), metadata: apiExpress, }, { - order: Infinity, + order: Number.POSITIVE_INFINITY, id: 'api-python', Logo: lazy(async () => import('./api-python/logo.svg')), Component: lazy(async () => import('./api-python/README.mdx')), metadata: apiPython, }, { - order: Infinity, + order: Number.POSITIVE_INFINITY, id: 'api-spring-boot', Logo: lazy(async () => import('./api-spring-boot/logo.svg')), Component: lazy(async () => import('./api-spring-boot/README.mdx')), metadata: apiSpringBoot, }, { - order: Infinity, + order: Number.POSITIVE_INFINITY, id: 'third-party-oidc', Logo: lazy(async () => import('./third-party-oidc/logo.svg')), Component: lazy(async () => import('./third-party-oidc/README.mdx')), metadata: thirdPartyOidc, - },]); - -export default guides; + }, +]); diff --git a/packages/console/src/assets/docs/guides/types.ts b/packages/console/src/assets/docs/guides/types.ts index 5f11825cd..7f0f60cc5 100644 --- a/packages/console/src/assets/docs/guides/types.ts +++ b/packages/console/src/assets/docs/guides/types.ts @@ -40,9 +40,12 @@ export type GuideMetadata = { /** The guide instance to build in the console. */ export type Guide = { + order: number; /** The unique identifier of the guide. */ id: string; - Logo: LazyExoticComponent; + Logo: + | LazyExoticComponent + | ((props: { readonly className?: string }) => JSX.Element); Component: LazyExoticComponent>; metadata: Readonly; }; diff --git a/packages/console/src/assets/docs/guides/web-ruby/logo.webp b/packages/console/src/assets/docs/guides/web-ruby/logo.webp index 5684ca2d161649975668e25fb3d6d25ca01d373a..991a3aa740358db07ea776a35e844dec3c20e870 100644 GIT binary patch literal 33844 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 literal 29988 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 R39gXYl+1DNlyXy<4sA%*xVJRe?b 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 diff --git a/packages/console/src/assets/index.d.ts b/packages/console/src/assets/index.d.ts index 128607d74..e0dfa3aee 100644 --- a/packages/console/src/assets/index.d.ts +++ b/packages/console/src/assets/index.d.ts @@ -4,3 +4,13 @@ declare module '*.svg' { const value: SvgComponent; export default value; } + +declare module '*.png' { + const value: string; + export default value; +} + +declare module '*.webp' { + const value: string; + export default value; +} diff --git a/packages/console/src/components/Guide/hooks.ts b/packages/console/src/components/Guide/hooks.ts index c2bfdd3a2..58e7460c4 100644 --- a/packages/console/src/components/Guide/hooks.ts +++ b/packages/console/src/components/Guide/hooks.ts @@ -1,6 +1,6 @@ import { useCallback, useMemo } from 'react'; -import guides from '@/assets/docs/guides'; +import { guides } from '@/assets/docs/guides'; import { type Guide } from '@/assets/docs/guides/types'; import { thirdPartyAppCategory, diff --git a/packages/console/src/components/Guide/index.tsx b/packages/console/src/components/Guide/index.tsx index b3a696a28..cebd7d168 100644 --- a/packages/console/src/components/Guide/index.tsx +++ b/packages/console/src/components/Guide/index.tsx @@ -3,7 +3,7 @@ import { MDXProvider } from '@mdx-js/react'; import classNames from 'classnames'; import { type LazyExoticComponent, Suspense, createContext, useContext } from 'react'; -import guides from '@/assets/docs/guides'; +import { guides } from '@/assets/docs/guides'; import { type GuideMetadata } from '@/assets/docs/guides/types'; import Button from '@/ds-components/Button'; import CodeEditor from '@/ds-components/CodeEditor'; @@ -17,7 +17,9 @@ import * as styles from './index.module.scss'; export type GuideContextType = { metadata: Readonly; - Logo?: LazyExoticComponent; + Logo?: + | LazyExoticComponent + | ((props: { readonly className?: string }) => JSX.Element); isCompact: boolean; app?: ApplicationResponse; endpoint?: string; diff --git a/packages/console/src/pages/ApiResourceDetails/components/ApiGuide/index.tsx b/packages/console/src/pages/ApiResourceDetails/components/ApiGuide/index.tsx index 6e53a4984..7f0c5c26c 100644 --- a/packages/console/src/pages/ApiResourceDetails/components/ApiGuide/index.tsx +++ b/packages/console/src/pages/ApiResourceDetails/components/ApiGuide/index.tsx @@ -2,7 +2,7 @@ import { type Resource } from '@logto/schemas'; import { conditional } from '@silverhand/essentials'; import { useContext, useMemo } from 'react'; -import guides from '@/assets/docs/guides'; +import { guides } from '@/assets/docs/guides'; import Guide, { GuideContext, type GuideContextType } from '@/components/Guide'; import { AppDataContext } from '@/contexts/AppDataProvider'; import useCustomDomain from '@/hooks/use-custom-domain'; diff --git a/packages/console/src/pages/ApplicationDetails/components/AppGuide/index.tsx b/packages/console/src/pages/ApplicationDetails/components/AppGuide/index.tsx index 6a840b6bd..21b07e340 100644 --- a/packages/console/src/pages/ApplicationDetails/components/AppGuide/index.tsx +++ b/packages/console/src/pages/ApplicationDetails/components/AppGuide/index.tsx @@ -2,7 +2,7 @@ import { type ApplicationResponse } from '@logto/schemas'; import { conditional } from '@silverhand/essentials'; import { useContext, useMemo } from 'react'; -import guides from '@/assets/docs/guides'; +import { guides } from '@/assets/docs/guides'; import Guide, { GuideContext, type GuideContextType } from '@/components/Guide'; import { AppDataContext } from '@/contexts/AppDataProvider'; import useCustomDomain from '@/hooks/use-custom-domain';