mirror of
https://github.com/logto-io/logto.git
synced 2025-02-17 22:04:19 -05:00
refactor(console): i18n for documentation url (#3062)
This commit is contained in:
parent
cd3759ce8e
commit
ae09f0cd57
9 changed files with 34 additions and 17 deletions
|
@ -48,7 +48,7 @@ export const useSidebarMenuItems = (): {
|
|||
const {
|
||||
data: { getStartedHidden },
|
||||
} = useUserPreferences();
|
||||
const documentationUrl = useDocumentationUrl();
|
||||
const { documentationSiteUrl } = useDocumentationUrl();
|
||||
|
||||
const sections: SidebarSection[] = [
|
||||
{
|
||||
|
@ -119,7 +119,7 @@ export const useSidebarMenuItems = (): {
|
|||
{
|
||||
Icon: Document,
|
||||
title: 'docs',
|
||||
externalLink: documentationUrl,
|
||||
externalLink: documentationSiteUrl,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
|
|
@ -8,20 +8,23 @@ enum DocumentationLanguage {
|
|||
Chinese = 'zh-CN',
|
||||
}
|
||||
|
||||
const documentationSiteUrl = 'https://docs.logto.io';
|
||||
const documentationSiteRoot = 'https://docs.logto.io';
|
||||
|
||||
const useDocumentationUrl = () => {
|
||||
const {
|
||||
i18n: { language },
|
||||
} = useTranslation();
|
||||
|
||||
const documentationUrl = Object.values<string>(DocumentationLanguage)
|
||||
const documentationSiteUrl = Object.values<string>(DocumentationLanguage)
|
||||
.filter((language) => language !== DocumentationLanguage.English)
|
||||
.includes(language)
|
||||
? `${documentationSiteUrl}/${language.toLocaleLowerCase()}`
|
||||
: documentationSiteUrl;
|
||||
? `${documentationSiteRoot}/${language.toLocaleLowerCase()}`
|
||||
: documentationSiteRoot;
|
||||
|
||||
return documentationUrl;
|
||||
return {
|
||||
documentationSiteUrl,
|
||||
getDocumentationUrl: (pagePath: string) => `${documentationSiteUrl}${pagePath}`,
|
||||
};
|
||||
};
|
||||
|
||||
export default useDocumentationUrl;
|
||||
|
|
|
@ -10,6 +10,7 @@ import FormField from '@/components/FormField';
|
|||
import TextInput from '@/components/TextInput';
|
||||
import UnsavedChangesAlertModal from '@/components/UnsavedChangesAlertModal';
|
||||
import useApi from '@/hooks/use-api';
|
||||
import useDocumentationUrl from '@/hooks/use-documentation-url';
|
||||
|
||||
import type { ApiResourceDetailsOutletContext } from '../types';
|
||||
|
||||
|
@ -18,6 +19,8 @@ const ApiResourceSettings = () => {
|
|||
useOutletContext<ApiResourceDetailsOutletContext>();
|
||||
|
||||
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
|
||||
const { getDocumentationUrl } = useDocumentationUrl();
|
||||
|
||||
const {
|
||||
handleSubmit,
|
||||
register,
|
||||
|
@ -53,7 +56,7 @@ const ApiResourceSettings = () => {
|
|||
<FormCard
|
||||
title="api_resource_details.settings"
|
||||
description="api_resource_details.settings_description"
|
||||
learnMoreLink="https://docs.logto.io/docs/recipes/protect-your-api"
|
||||
learnMoreLink={getDocumentationUrl('/docs/recipes/protect-your-api')}
|
||||
>
|
||||
<FormField isRequired title="api_resources.api_name">
|
||||
<TextInput
|
||||
|
|
|
@ -11,6 +11,7 @@ import { createValidatorForRhf, convertRhfErrorMessage } from '@/components/Mult
|
|||
import MultiTextInputField from '@/components/MultiTextInputField';
|
||||
import TextInput from '@/components/TextInput';
|
||||
import TextLink from '@/components/TextLink';
|
||||
import useDocumentationUrl from '@/hooks/use-documentation-url';
|
||||
import { uriOriginValidator } from '@/utilities/validator';
|
||||
|
||||
import * as styles from '../index.module.scss';
|
||||
|
@ -21,6 +22,7 @@ type Props = {
|
|||
|
||||
const Settings = ({ data }: Props) => {
|
||||
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
|
||||
const { getDocumentationUrl } = useDocumentationUrl();
|
||||
const {
|
||||
control,
|
||||
register,
|
||||
|
@ -41,7 +43,7 @@ const Settings = ({ data }: Props) => {
|
|||
<FormCard
|
||||
title="application_details.settings"
|
||||
description="application_details.settings_description"
|
||||
learnMoreLink="https://docs.logto.io/docs/references/applications"
|
||||
learnMoreLink={getDocumentationUrl('/docs/references/applications')}
|
||||
>
|
||||
<FormField isRequired title="application_details.application_name">
|
||||
<TextInput
|
||||
|
|
|
@ -57,7 +57,7 @@ const ApplicationDetails = () => {
|
|||
const api = useApi();
|
||||
const navigate = useNavigate();
|
||||
const formMethods = useForm<Application & { isAdmin: boolean }>();
|
||||
const documentationUrl = useDocumentationUrl();
|
||||
const { getDocumentationUrl } = useDocumentationUrl();
|
||||
|
||||
const {
|
||||
handleSubmit,
|
||||
|
@ -150,7 +150,7 @@ const ApplicationDetails = () => {
|
|||
onClick={() => {
|
||||
if (data.type === ApplicationType.MachineToMachine) {
|
||||
window.open(
|
||||
`${documentationUrl}/docs/recipes/integrate-logto/machine-to-machine/`,
|
||||
getDocumentationUrl('/docs/recipes/integrate-logto/machine-to-machine'),
|
||||
'_blank'
|
||||
);
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ import DetailsForm from '@/components/DetailsForm';
|
|||
import FormCard from '@/components/FormCard';
|
||||
import UnsavedChangesAlertModal from '@/components/UnsavedChangesAlertModal';
|
||||
import useApi from '@/hooks/use-api';
|
||||
import useDocumentationUrl from '@/hooks/use-documentation-url';
|
||||
import ConnectorForm from '@/pages/Connectors/components/ConnectorForm';
|
||||
import type { ConnectorFormType } from '@/pages/Connectors/types';
|
||||
import { SyncProfileMode } from '@/pages/Connectors/types';
|
||||
|
@ -25,6 +26,7 @@ type Props = {
|
|||
|
||||
const ConnectorContent = ({ isDeleted, connectorData, onConnectorUpdated }: Props) => {
|
||||
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
|
||||
const { getDocumentationUrl } = useDocumentationUrl();
|
||||
const api = useApi();
|
||||
const methods = useForm<ConnectorFormType>({
|
||||
reValidateMode: 'onBlur',
|
||||
|
@ -101,7 +103,7 @@ const ConnectorContent = ({ isDeleted, connectorData, onConnectorUpdated }: Prop
|
|||
<FormCard
|
||||
title="connector_details.settings"
|
||||
description="connector_details.settings_description"
|
||||
learnMoreLink="https://docs.logto.io/docs/references/connectors"
|
||||
learnMoreLink={getDocumentationUrl('/docs/references/connectors')}
|
||||
>
|
||||
<ConnectorForm
|
||||
connectorType={connectorData.type}
|
||||
|
|
|
@ -12,6 +12,7 @@ import FormField from '@/components/FormField';
|
|||
import Select from '@/components/Select';
|
||||
import TextInput from '@/components/TextInput';
|
||||
import TextLink from '@/components/TextLink';
|
||||
import useDocumentationUrl from '@/hooks/use-documentation-url';
|
||||
import { uriValidator, jsonValidator } from '@/utilities/validator';
|
||||
|
||||
import type { ConnectorFormType } from '../../types';
|
||||
|
@ -34,6 +35,7 @@ const ConnectorForm = ({
|
|||
connectorType,
|
||||
}: Props) => {
|
||||
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
|
||||
const { getDocumentationUrl } = useDocumentationUrl();
|
||||
const {
|
||||
control,
|
||||
register,
|
||||
|
@ -110,7 +112,7 @@ const ConnectorForm = ({
|
|||
components={{
|
||||
a: (
|
||||
<TextLink
|
||||
href="https://docs.logto.io/docs/references/connectors/#target"
|
||||
href={getDocumentationUrl('/docs/references/connectors/#target')}
|
||||
target="_blank"
|
||||
onClick={closeTipHandler}
|
||||
/>
|
||||
|
|
|
@ -35,7 +35,7 @@ type GetStartedMetadata = {
|
|||
};
|
||||
|
||||
const useGetStartedMetadata = () => {
|
||||
const documentationUrl = useDocumentationUrl();
|
||||
const { getDocumentationUrl } = useDocumentationUrl();
|
||||
const { configs, updateConfigs } = useConfigs();
|
||||
const theme = useTheme();
|
||||
const isLightMode = theme === AppearanceMode.LightMode;
|
||||
|
@ -123,14 +123,17 @@ const useGetStartedMetadata = () => {
|
|||
isComplete: configs?.furtherReadingsChecked,
|
||||
onClick: () => {
|
||||
void updateConfigs({ furtherReadingsChecked: true });
|
||||
window.open(`${documentationUrl}/docs/tutorials/get-started/further-readings/`, '_blank');
|
||||
window.open(
|
||||
getDocumentationUrl('/docs/tutorials/get-started/further-readings'),
|
||||
'_blank'
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
return metadataItems.filter(({ isHidden }) => !isHidden);
|
||||
}, [
|
||||
documentationUrl,
|
||||
getDocumentationUrl,
|
||||
hideDemo,
|
||||
isLightMode,
|
||||
navigate,
|
||||
|
|
|
@ -12,6 +12,7 @@ import FormField from '@/components/FormField';
|
|||
import TextInput from '@/components/TextInput';
|
||||
import UnsavedChangesAlertModal from '@/components/UnsavedChangesAlertModal';
|
||||
import useApi from '@/hooks/use-api';
|
||||
import useDocumentationUrl from '@/hooks/use-documentation-url';
|
||||
import { safeParseJson } from '@/utilities/json';
|
||||
import { uriValidator } from '@/utilities/validator';
|
||||
|
||||
|
@ -21,6 +22,7 @@ import UserSocialIdentities from './components/UserSocialIdentities';
|
|||
|
||||
const UserSettings = () => {
|
||||
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
|
||||
const { getDocumentationUrl } = useDocumentationUrl();
|
||||
|
||||
const { user, isDeleting, onUserUpdated } = useOutletContext<UserDetailsOutletContext>();
|
||||
|
||||
|
@ -87,7 +89,7 @@ const UserSettings = () => {
|
|||
<FormCard
|
||||
title="user_details.settings"
|
||||
description="user_details.settings_description"
|
||||
learnMoreLink="https://docs.logto.io/docs/references/users"
|
||||
learnMoreLink={getDocumentationUrl('/docs/references/users')}
|
||||
>
|
||||
{getValues('primaryEmail') && (
|
||||
<FormField title="user_details.field_email">
|
||||
|
|
Loading…
Add table
Reference in a new issue