admin-page-util.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { GetServerSidePropsContext } from 'next';
  2. import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
  3. import {
  4. getServerSideCommonProps, getNextI18NextConfig,
  5. } from '~/pages/utils/commons';
  6. /**
  7. * for Server Side Translations
  8. * @param context
  9. * @param props
  10. * @param namespacesRequired
  11. */
  12. async function injectNextI18NextConfigurations(context: GetServerSidePropsContext, props, namespacesRequired?: string[] | undefined): Promise<void> {
  13. // preload all languages because of language lists in user setting
  14. const nextI18NextConfig = await getNextI18NextConfig(serverSideTranslations, context, namespacesRequired, true);
  15. props._nextI18Next = nextI18NextConfig._nextI18Next;
  16. }
  17. export const retrieveServerSideProps: any = async(
  18. context: GetServerSidePropsContext, injectServerConfigurations?:(context: GetServerSidePropsContext, props) => Promise<void>,
  19. ) => {
  20. const result = await getServerSideCommonProps(context);
  21. // check for presence
  22. // see: https://github.com/vercel/next.js/issues/19271#issuecomment-730006862
  23. if (!('props' in result)) {
  24. throw new Error('invalid getSSP result');
  25. }
  26. const props = result.props;
  27. if (injectServerConfigurations != null) {
  28. await injectServerConfigurations(context, props);
  29. }
  30. await injectNextI18NextConfigurations(context, props, ['admin', 'commons']);
  31. return {
  32. props,
  33. };
  34. };