diff --git a/apps/app/public/static/locales/en_US/commons.json b/apps/app/public/static/locales/en_US/commons.json index 3c4a41f028f..75292103da5 100644 --- a/apps/app/public/static/locales/en_US/commons.json +++ b/apps/app/public/static/locales/en_US/commons.json @@ -157,6 +157,6 @@ "publish_transfer_key": "Publish transfer key", "transfer_key_limit": "Transfer keys are valid for 1 hour after issuance.", "once_transfer_key_used": "Once the transfer key is used for transfer, it cannot be used for any other transfer.", - "transfer_to_growi_cloud": "For more details, please click here." + "transfer_to_growi_cloud": "For more details, please click here." } } diff --git a/apps/app/public/static/locales/fr_FR/commons.json b/apps/app/public/static/locales/fr_FR/commons.json index 32a394618e6..fe4ba0dc668 100644 --- a/apps/app/public/static/locales/fr_FR/commons.json +++ b/apps/app/public/static/locales/fr_FR/commons.json @@ -157,6 +157,6 @@ "publish_transfer_key": "Publier la clé de transfert", "transfer_key_limit": "Les clés de transfert sont valides durant une heure.", "once_transfer_key_used": "Les clés de transfert sont à usage unique.", - "transfer_to_growi_cloud": "Pour plus de détails, veuillez cliquer ici." + "transfer_to_growi_cloud": "Pour plus de détails, veuillez cliquer ici." } } diff --git a/apps/app/public/static/locales/ja_JP/commons.json b/apps/app/public/static/locales/ja_JP/commons.json index 5ef93538604..fe569c6301c 100644 --- a/apps/app/public/static/locales/ja_JP/commons.json +++ b/apps/app/public/static/locales/ja_JP/commons.json @@ -159,6 +159,6 @@ "publish_transfer_key": "移行キーを発行する", "transfer_key_limit": "※ 移行キーの有効期限は発行から1時間となります。", "once_transfer_key_used": "※ 移行キーは一度移行に利用するとそれ以降はご利用いただけなくなります。", - "transfer_to_growi_cloud": "※ 詳しくは GROWI お引越し機能をご確認ください。" + "transfer_to_growi_cloud": "※ 詳しくは GROWI お引越し機能をご確認ください。" } } diff --git a/apps/app/src/client/components/Admin/G2GDataTransfer.tsx b/apps/app/src/client/components/Admin/G2GDataTransfer.tsx index 53653080973..8f1e1a12f6b 100644 --- a/apps/app/src/client/components/Admin/G2GDataTransfer.tsx +++ b/apps/app/src/client/components/Admin/G2GDataTransfer.tsx @@ -282,7 +282,7 @@ const G2GDataTransfer = (): JSX.Element => { className="mb-0" // eslint-disable-next-line react/no-danger dangerouslySetInnerHTML={{ - __html: t('commons:g2g_data_transfer.transfer_to_growi_cloud', { documentationUrl: documentationUrl || 'docs.growi.org' }), + __html: t('commons:g2g_data_transfer.transfer_to_growi_cloud', { documentationUrl }), }} /> diff --git a/apps/app/src/client/components/DataTransferForm.tsx b/apps/app/src/client/components/DataTransferForm.tsx index 73980650223..80a72052689 100644 --- a/apps/app/src/client/components/DataTransferForm.tsx +++ b/apps/app/src/client/components/DataTransferForm.tsx @@ -39,7 +39,7 @@ const DataTransferForm = (): JSX.Element => { className="mb-0" // eslint-disable-next-line react/no-danger dangerouslySetInnerHTML={{ - __html: t('g2g_data_transfer.transfer_to_growi_cloud', { documentationUrl: documentationUrl || 'docs.growi.org' }), + __html: t('g2g_data_transfer.transfer_to_growi_cloud', { documentationUrl }), }} /> diff --git a/apps/app/src/pages/admin/data-transfer.page.tsx b/apps/app/src/pages/admin/data-transfer.page.tsx index bb208cb428b..982757f9dd8 100644 --- a/apps/app/src/pages/admin/data-transfer.page.tsx +++ b/apps/app/src/pages/admin/data-transfer.page.tsx @@ -9,8 +9,9 @@ import Head from 'next/head'; import type { Container } from 'unstated'; import { Provider } from 'unstated'; +import type { CrowiRequest } from '~/interfaces/crowi-request'; import type { CommonProps } from '~/pages/utils/commons'; -import { useCurrentUser } from '~/stores-universal/context'; +import { useCurrentUser, useGrowiCloudUri } from '~/stores-universal/context'; import { retrieveServerSideProps } from '../../utils/admin-page-util'; @@ -25,6 +26,7 @@ type Props = CommonProps; const DataTransferPage: NextPage = (props) => { const { t } = useTranslation('commons'); useCurrentUser(props.currentUser ?? null); + useGrowiCloudUri(props.growiCloudUri); const title = t('g2g_data_transfer.data_transfer'); @@ -54,9 +56,15 @@ const DataTransferPage: NextPage = (props) => { ); }; +const injectServerConfigurations = async(context: GetServerSidePropsContext, props: Props): Promise => { + const req: CrowiRequest = context.req as CrowiRequest; + const { crowi } = req; + + props.growiCloudUri = await crowi.configManager.getConfig('crowi', 'app:growiCloudUri'); +}; export const getServerSideProps: GetServerSideProps = async(context: GetServerSidePropsContext) => { - const props = await retrieveServerSideProps(context); + const props = await retrieveServerSideProps(context, injectServerConfigurations); return props; }; diff --git a/apps/app/src/pages/installer.page.tsx b/apps/app/src/pages/installer.page.tsx index 957059dfe75..72b3da418a2 100644 --- a/apps/app/src/pages/installer.page.tsx +++ b/apps/app/src/pages/installer.page.tsx @@ -11,7 +11,7 @@ import Head from 'next/head'; import { NoLoginLayout } from '~/components/Layout/NoLoginLayout'; import type { CrowiRequest } from '~/interfaces/crowi-request'; import { - useCsrfToken, useAppTitle, useSiteUrl, useConfidential, + useCsrfToken, useAppTitle, useSiteUrl, useConfidential, useGrowiCloudUri, } from '~/stores-universal/context'; import type { CommonProps } from './utils/commons'; @@ -57,6 +57,7 @@ const InstallerPage: NextPage = (props: Props) => { useSiteUrl(props.siteUrl); useConfidential(props.confidential); useCsrfToken(props.csrfToken); + useGrowiCloudUri(props.growiCloudUri); const title = generateCustomTitle(props, t('installer.title')); const classNames: string[] = []; diff --git a/apps/app/src/stores-universal/context.tsx b/apps/app/src/stores-universal/context.tsx index bdf619940ec..c32045ddd20 100644 --- a/apps/app/src/stores-universal/context.tsx +++ b/apps/app/src/stores-universal/context.tsx @@ -1,5 +1,3 @@ -import { useCallback, useEffect } from 'react'; - import type EventEmitter from 'events'; import { AcceptedUploadFileType } from '@growi/core'; @@ -286,17 +284,22 @@ export const useAcceptedUploadFileType = (): SWRResponse => { +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export const useGrowiDocumentationUrl = () => { const { data: growiCloudUri } = useGrowiCloudUri(); - const { data: growiAppIdForGrowiCloud } = useGrowiAppIdForGrowiCloud(); - return useSWRImmutable( - ['documentationUrl', growiCloudUri, growiAppIdForGrowiCloud], - ([growiCloudUri, growiAppIdForGrowiCloud]) => { - if (growiCloudUri != null && growiAppIdForGrowiCloud != null) { - return 'growi.cloud/help'; - } - return 'docs.growi.org'; + return useSWR( + ['documentationUrl', growiCloudUri], + ([, growiCloudUri]) => { + const url = growiCloudUri != null + ? new URL('/help', growiCloudUri) + : new URL('https://docs.growi.org'); + return url.toString(); + }, + { + fallbackData: 'https://docs.growi.org', + revalidateOnFocus: false, + revalidateOnReconnect: false, }, ); };