import React, { useMemo } from 'react'; import type { ReactElement, ReactNode } from 'react'; import { useTranslation } from 'next-i18next'; import { useCustomTitle } from '~/pages/utils/page-title-customization'; import { AdminPageFrame } from './AdminPageFrame'; import type { AnyUnstatedContainer, AdminCommonProps } from './types'; import { useUnstatedContainers } from './use-unstated-container'; export interface AdminLayoutOptions
{
title: string | ((props: P, t: (k: string) => string) => string);
containerFactories?: Array<() => Promise (options: AdminLayoutOptions ) {
return function getLayout(page: ReactElement ): ReactNode {
const Wrapper: React.FC = () => {
const { t } = useTranslation('admin');
const rawTitle = typeof options.title === 'function' ? options.title(page.props, t) : options.title;
const title = useCustomTitle(rawTitle);
const factories = useMemo(() => options.containerFactories ?? [], []);
const containers = useUnstatedContainers(factories);
return (