diff --git a/packages/console/src/assets/icons/organization-feature-dark.svg b/packages/console/src/assets/icons/organization-feature-dark.svg new file mode 100644 index 000000000..f3f1abbc2 --- /dev/null +++ b/packages/console/src/assets/icons/organization-feature-dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/console/src/assets/icons/organization-feature.svg b/packages/console/src/assets/icons/organization-feature.svg new file mode 100644 index 000000000..9fe3393c4 --- /dev/null +++ b/packages/console/src/assets/icons/organization-feature.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/console/src/assets/icons/permission-feature-dark.svg b/packages/console/src/assets/icons/permission-feature-dark.svg new file mode 100644 index 000000000..ff0005a13 --- /dev/null +++ b/packages/console/src/assets/icons/permission-feature-dark.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/console/src/assets/icons/permission-feature.svg b/packages/console/src/assets/icons/permission-feature.svg new file mode 100644 index 000000000..ab001c524 --- /dev/null +++ b/packages/console/src/assets/icons/permission-feature.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/console/src/assets/icons/rbac-feature-dark.svg b/packages/console/src/assets/icons/rbac-feature-dark.svg new file mode 100644 index 000000000..7e1f68e51 --- /dev/null +++ b/packages/console/src/assets/icons/rbac-feature-dark.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/console/src/assets/icons/rbac-feature.svg b/packages/console/src/assets/icons/rbac-feature.svg new file mode 100644 index 000000000..a32c0bb91 --- /dev/null +++ b/packages/console/src/assets/icons/rbac-feature.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/console/src/assets/images/organization-workflow.webp b/packages/console/src/assets/images/organization-workflow.webp new file mode 100644 index 000000000..5ab89a1dd Binary files /dev/null and b/packages/console/src/assets/images/organization-workflow.webp differ diff --git a/packages/console/src/components/ActionBar/index.module.scss b/packages/console/src/components/ActionBar/index.module.scss index 5c9b84f70..49e766568 100644 --- a/packages/console/src/components/ActionBar/index.module.scss +++ b/packages/console/src/components/ActionBar/index.module.scss @@ -2,6 +2,7 @@ .container { height: 80px; + flex-shrink: 0; .actions { height: 100%; diff --git a/packages/console/src/containers/ConsoleContent/index.tsx b/packages/console/src/containers/ConsoleContent/index.tsx index ef4538947..6376042d2 100644 --- a/packages/console/src/containers/ConsoleContent/index.tsx +++ b/packages/console/src/containers/ConsoleContent/index.tsx @@ -28,6 +28,7 @@ import Mfa from '@/pages/Mfa'; import NotFound from '@/pages/NotFound'; import OrganizationDetails from '@/pages/OrganizationDetails'; import Organizations from '@/pages/Organizations'; +import OrganizationGuide from '@/pages/Organizations/Guide'; import Profile from '@/pages/Profile'; import ChangePasswordModal from '@/pages/Profile/containers/ChangePasswordModal'; import LinkEmailModal from '@/pages/Profile/containers/LinkEmailModal'; @@ -157,6 +158,7 @@ function ConsoleContent() { } /> } /> } /> + } /> )} diff --git a/packages/console/src/pages/Organizations/Guide/Step1/index.module.scss b/packages/console/src/pages/Organizations/Guide/Step1/index.module.scss new file mode 100644 index 000000000..83634dc87 --- /dev/null +++ b/packages/console/src/pages/Organizations/Guide/Step1/index.module.scss @@ -0,0 +1,36 @@ +@use '@/scss/underscore' as _; +@use '@/scss/dimensions' as dim; + +.container { + display: flex; + flex-direction: column; + align-items: center; + gap: _.unit(6); + + .card { + display: flex; + flex-direction: column; + width: 100%; + max-width: dim.$guide-main-content-max-width; + padding: _.unit(12); + gap: _.unit(6); + + .image { + width: 100%; + } + + .icon { + width: 48px; + height: 48px; + flex-shrink: 0; + } + + .title { + font: var(--font-title-1); + } + + .subtitle { + font: var(--font-body-2); + } + } +} diff --git a/packages/console/src/pages/Organizations/Guide/Step1/index.tsx b/packages/console/src/pages/Organizations/Guide/Step1/index.tsx new file mode 100644 index 000000000..953f80d38 --- /dev/null +++ b/packages/console/src/pages/Organizations/Guide/Step1/index.tsx @@ -0,0 +1,44 @@ +import { Theme } from '@logto/schemas'; +import classNames from 'classnames'; +import { useTranslation } from 'react-i18next'; + +import OrganizationFeatureDark from '@/assets/icons/organization-feature-dark.svg'; +import OrganizationFeature from '@/assets/icons/organization-feature.svg'; +import PermissionFeatureDark from '@/assets/icons/permission-feature-dark.svg'; +import PermissionFeature from '@/assets/icons/permission-feature.svg'; +import workflowImage from '@/assets/images/organization-workflow.webp'; +import Card from '@/ds-components/Card'; +import useTheme from '@/hooks/use-theme'; + +import * as styles from './index.module.scss'; + +const icons = { + [Theme.Light]: { OrganizationIcon: OrganizationFeature, PermissionIcon: PermissionFeature }, + [Theme.Dark]: { + OrganizationIcon: OrganizationFeatureDark, + PermissionIcon: PermissionFeatureDark, + }, +}; + +function Step1() { + const { t } = useTranslation(undefined, { keyPrefix: 'admin_console.organizations.guide' }); + const theme = useTheme(); + const { OrganizationIcon, PermissionIcon } = icons[theme]; + + return ( +
+ + +
{t('brief_title')}
+ Organization workflow +
{t('brief_introduction')}
+
+ + +
{t('step_1')}
+
+
+ ); +} + +export default Step1; diff --git a/packages/console/src/pages/Organizations/Guide/index.module.scss b/packages/console/src/pages/Organizations/Guide/index.module.scss new file mode 100644 index 000000000..71998aae6 --- /dev/null +++ b/packages/console/src/pages/Organizations/Guide/index.module.scss @@ -0,0 +1,16 @@ +@use '@/scss/underscore' as _; + +.modalContainer { + height: 100vh; + width: 100vw; + display: flex; + flex-direction: column; + background: var(--color-base); + + .content { + flex: 1; + overflow: hidden; + width: 100%; + padding: _.unit(6); + } +} diff --git a/packages/console/src/pages/Organizations/Guide/index.tsx b/packages/console/src/pages/Organizations/Guide/index.tsx new file mode 100644 index 000000000..0b85dad4b --- /dev/null +++ b/packages/console/src/pages/Organizations/Guide/index.tsx @@ -0,0 +1,57 @@ +import { useCallback, useState } from 'react'; +import Modal from 'react-modal'; + +import ActionBar from '@/components/ActionBar'; +import Button from '@/ds-components/Button'; +import DsModalHeader from '@/ds-components/ModalHeader'; +import OverlayScrollbar from '@/ds-components/OverlayScrollbar'; +import useTenantPathname from '@/hooks/use-tenant-pathname'; +import * as modalStyles from '@/scss/modal.module.scss'; + +import Step1 from './Step1'; +import * as styles from './index.module.scss'; + +const totalSteps = 3; + +function Guide() { + const { navigate } = useTenantPathname(); + const [currentStep, setCurrentStep] = useState(1); + + const onClose = useCallback(() => { + navigate('/organizations'); + }, [navigate]); + + const onClickNext = useCallback(() => { + setCurrentStep(Math.min(currentStep + 1, totalSteps)); + }, [currentStep]); + + const onClickBack = useCallback(() => { + setCurrentStep(Math.max(1, currentStep - 1)); + }, [currentStep]); + + return ( + +
+ + + {currentStep === 1 && } + + + {currentStep === totalSteps && ( +
+
+ ); +} + +export default Guide; diff --git a/packages/phrases/src/locales/de/translation/admin-console/organizations.ts b/packages/phrases/src/locales/de/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/en/translation/admin-console/organizations.ts b/packages/phrases/src/locales/en/translation/admin-console/organizations.ts index 21cb2142c..d74e5e8b5 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/organizations.ts @@ -23,6 +23,31 @@ const organization = { role: 'Role', create_role_placeholder: 'Users with view-only permissions.', search_permission_placeholder: 'Type to search for permissions', + guide: { + title: 'Start with guides', + subtitle: 'Jumpstart your app development process with our guides', + brief_title: "First, let's understand how organizations works in Logto", + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + step_1: 'Step 1: Define organization permissions', + step_2: 'Step 2: Define organization roles', + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + step_3: 'Step 3: Create your first organization', + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + more_next_steps: 'More next steps', + add_members: 'Add members to your organization', + add_members_action: 'Bulk add members and assign roles', + add_enterprise_connector: 'Add enterprise SSO', + add_enterprise_connector_action: 'Set up enterprise SSO', + organization_permissions: 'Organization permissions', + permission_name: 'Permission name', + permissions: 'Permissions', + organization_roles: 'Organization roles', + role_name: 'Role name', + organization_name: 'Organization name', + }, }; export default Object.freeze(organization); diff --git a/packages/phrases/src/locales/es/translation/admin-console/organizations.ts b/packages/phrases/src/locales/es/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/fr/translation/admin-console/organizations.ts b/packages/phrases/src/locales/fr/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/it/translation/admin-console/organizations.ts b/packages/phrases/src/locales/it/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/ja/translation/admin-console/organizations.ts b/packages/phrases/src/locales/ja/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/ko/translation/admin-console/organizations.ts b/packages/phrases/src/locales/ko/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/organizations.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/organizations.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/organizations.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/ru/translation/admin-console/organizations.ts b/packages/phrases/src/locales/ru/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/organizations.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/organizations.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/organizations.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations); diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/organizations.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/organizations.ts index bc7e18af1..63ccfc411 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/organizations.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/organizations.ts @@ -43,6 +43,51 @@ const organizations = { create_role_placeholder: 'Users with view-only permissions.', /** UNTRANSLATED */ search_permission_placeholder: 'Type to search for permissions', + guide: { + /** UNTRANSLATED */ + title: 'Start with guides', + /** UNTRANSLATED */ + subtitle: 'Jumpstart your app development process with our guides', + /** UNTRANSLATED */ + brief_title: "First, let's understand how organizations works in Logto", + /** UNTRANSLATED */ + brief_introduction: + "In a multi-tenant app, it's important to set clear authorization rules to keep each tenant's data separate. Think of each tenant of your product as its own Logto organization, and they should naturally share the same access control template by default. Learn more", + /** UNTRANSLATED */ + step_1: 'Step 1: Define organization permissions', + /** UNTRANSLATED */ + step_2: 'Step 2: Define organization roles', + /** UNTRANSLATED */ + step_2_description: + '"Organization roles" represent a set of roles given to each organization at the start. These roles are determined by the global permissions you have set in previous screen. Similar with org permission, once you finish this setting for the first time, you won’t need to do this every-time you create a new organization.', + /** UNTRANSLATED */ + step_3: 'Step 3: Create your first organization', + /** UNTRANSLATED */ + step_3_description: + "Let's create your first organization. It comes with a unique ID and serves as a container for handling various more business-toward identities, such as partners, customers, and their access control.", + /** UNTRANSLATED */ + more_next_steps: 'More next steps', + /** UNTRANSLATED */ + add_members: 'Add members to your organization', + /** UNTRANSLATED */ + add_members_action: 'Bulk add members and assign roles', + /** UNTRANSLATED */ + add_enterprise_connector: 'Add enterprise SSO', + /** UNTRANSLATED */ + add_enterprise_connector_action: 'Set up enterprise SSO', + /** UNTRANSLATED */ + organization_permissions: 'Organization permissions', + /** UNTRANSLATED */ + permission_name: 'Permission name', + /** UNTRANSLATED */ + permissions: 'Permissions', + /** UNTRANSLATED */ + organization_roles: 'Organization roles', + /** UNTRANSLATED */ + role_name: 'Role name', + /** UNTRANSLATED */ + organization_name: 'Organization name', + }, }; export default Object.freeze(organizations);