Add <GlobalPreviewDrawer> component
This commit is contained in:
parent
345fe1d67e
commit
8b7b00b7cb
|
|
@ -29,6 +29,7 @@ import {
|
|||
type PluginUIFeature,
|
||||
PluginUIFeatureType
|
||||
} from '../plugins/PluginUIFeature';
|
||||
import GlobalPreviewDrawer from '../previews/GlobalPreviewDrawer';
|
||||
import { Footer } from './Footer';
|
||||
import { Header } from './Header';
|
||||
|
||||
|
|
@ -146,6 +147,7 @@ export default function LayoutComponent() {
|
|||
)}
|
||||
</Flex>
|
||||
<GlobalImporterDrawer />
|
||||
<GlobalPreviewDrawer />
|
||||
</>
|
||||
</ProtectedRoute>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
import { usePreviewDrawerState } from '../../states/PreviewDrawerState';
|
||||
import PreviewDrawer from './PreviewDrawer';
|
||||
|
||||
export default function GlobalPreviewDrawer() {
|
||||
const isOpen = usePreviewDrawerState((state) => state.isOpen);
|
||||
const modelType = usePreviewDrawerState((state) => state.modelType);
|
||||
const instance = usePreviewDrawerState((state) => state.instance);
|
||||
const closePreview = usePreviewDrawerState((state) => state.closePreview);
|
||||
|
||||
if (!isOpen || instance === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<PreviewDrawer
|
||||
modelType={modelType}
|
||||
instance={instance}
|
||||
opened={isOpen}
|
||||
onClose={closePreview}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
import { t } from '@lingui/core/macro';
|
||||
import { Drawer, Stack, Text } from '@mantine/core';
|
||||
|
||||
import { StylishText } from '@lib/components/StylishText';
|
||||
import type { ModelType } from '@lib/index';
|
||||
import { getModelInfo } from '../render/ModelType';
|
||||
|
||||
export default function PreviewDrawer({
|
||||
modelType,
|
||||
instance,
|
||||
opened,
|
||||
onClose
|
||||
}: Readonly<{
|
||||
modelType?: ModelType;
|
||||
instance?: any;
|
||||
opened: boolean;
|
||||
onClose: () => void;
|
||||
}>) {
|
||||
const modelInfo = getModelInfo(instance.model);
|
||||
|
||||
return (
|
||||
<Drawer
|
||||
position='right'
|
||||
size='lg'
|
||||
title={
|
||||
<StylishText size='lg'>
|
||||
TODO - implement actual preview content
|
||||
</StylishText>
|
||||
}
|
||||
opened={opened}
|
||||
onClose={onClose}
|
||||
withCloseButton
|
||||
>
|
||||
<Stack gap='xs'>
|
||||
<Text c='dimmed'>{t`Preview for ${modelInfo.label} #${instance.pk}`}</Text>
|
||||
</Stack>
|
||||
</Drawer>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
import type { ModelType } from '@lib/enums/ModelType';
|
||||
import { create } from 'zustand';
|
||||
|
||||
interface PreviewDrawerStateProps {
|
||||
isOpen: boolean;
|
||||
modelType?: ModelType;
|
||||
instance?: any;
|
||||
openPreview: (modelType: ModelType, instance: any) => void;
|
||||
closePreview: () => void;
|
||||
}
|
||||
|
||||
export const usePreviewDrawerState = create<PreviewDrawerStateProps>()(
|
||||
(set) => ({
|
||||
isOpen: false,
|
||||
instance: null,
|
||||
|
||||
openPreview: (modelType: ModelType, instance: any) => {
|
||||
set({ modelType, instance, isOpen: true });
|
||||
},
|
||||
|
||||
closePreview: () => {
|
||||
set({ modelType: undefined, instance: null, isOpen: false });
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
export function openGlobalPreview(modelType: ModelType, instance: any) {
|
||||
usePreviewDrawerState.getState().openPreview(modelType, instance);
|
||||
}
|
||||
|
||||
export function closeGlobalPreview() {
|
||||
usePreviewDrawerState.getState().closePreview();
|
||||
}
|
||||
|
||||
export function getGlobalPreviewState() {
|
||||
return usePreviewDrawerState.getState();
|
||||
}
|
||||
Loading…
Reference in New Issue