mirror of
https://github.com/lux-tel/websites.git
synced 2026-10-30 20:31:36 +00:00
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import type { GenericModuleProps } from '@/app/mystakes/modules/types';
|
|
import { ModuleDynamicQueryText } from '@/components/ModuleDynamic';
|
|
import type { QUERY_STATUS } from '@/lib/query';
|
|
import { Module, ModuleTitleDynamic, ModuleTooltip } from '@session/ui/components/Module';
|
|
import { useTranslations } from 'next-intl';
|
|
import type { ReactNode } from 'react';
|
|
|
|
export type DynamicModuleCardProps = GenericModuleProps & {
|
|
titleLong: string;
|
|
status: QUERY_STATUS;
|
|
tooltipContent?: ReactNode;
|
|
titleShort?: string;
|
|
fallback?: ReactNode;
|
|
enabled?: boolean;
|
|
refetch: () => Promise<unknown>;
|
|
};
|
|
|
|
export default function DynamicModuleCard({
|
|
size,
|
|
variant,
|
|
tooltipContent,
|
|
titleLong,
|
|
titleShort,
|
|
fallback,
|
|
status,
|
|
enabled,
|
|
refetch,
|
|
children,
|
|
}: DynamicModuleCardProps) {
|
|
const dictShared = useTranslations('modules.shared');
|
|
const dictToast = useTranslations('modules.toast');
|
|
const titleFormat = useTranslations('modules.title');
|
|
|
|
return (
|
|
<Module size={size} variant={variant}>
|
|
{tooltipContent ? <ModuleTooltip>{tooltipContent}</ModuleTooltip> : null}
|
|
<ModuleTitleDynamic
|
|
longText={titleFormat('format', { title: titleLong })}
|
|
shortText={titleShort ? titleFormat('format', { title: titleShort }) : undefined}
|
|
/>
|
|
<ModuleDynamicQueryText
|
|
status={status as QUERY_STATUS}
|
|
fallback={fallback ?? 0}
|
|
enabled={enabled}
|
|
isLarge={size === 'lg'}
|
|
errorFallback={dictShared('error')}
|
|
errorToast={{
|
|
messages: {
|
|
error: dictToast('error', { module: titleLong }),
|
|
refetching: dictToast('refetching'),
|
|
success: dictToast('refetchSuccess', { module: titleLong }),
|
|
},
|
|
refetch,
|
|
}}
|
|
>
|
|
{children}
|
|
</ModuleDynamicQueryText>
|
|
</Module>
|
|
);
|
|
}
|