diff --git a/src/components/Drawer.tsx b/src/components/Drawer.tsx
index 17b8a56f..3e2a71a2 100644
--- a/src/components/Drawer.tsx
+++ b/src/components/Drawer.tsx
@@ -15,6 +15,8 @@ interface DrawerProps {
className?: DrawerClassName;
onBackdropClick?: () => void;
closeOnBackdropClick?: boolean;
+ expandedContent?: ReactNode;
+ expandedWidth?: string;
}
type DrawerClassName = {
@@ -36,6 +38,8 @@ const Drawer = ({
className,
onBackdropClick,
closeOnBackdropClick = true,
+ expandedContent,
+ expandedWidth = 'w-[400px]',
}: DrawerProps) => {
const getDrawerClassNames = (): DrawerClassName => {
const baseClassNames = {
@@ -138,14 +142,37 @@ const Drawer = ({
onClick={closeDrawer}
/>
- {/* Sidebar Content */}
+ {/* Sidebar Content - Full height container */}
- {sidebarContent}
+ {/* Primary Sidebar Content */}
+
+ {sidebarContent}
+
+
+ {/* Expanded Drawer (Right side, side-by-side) */}
+ {expandedContent && (
+
+
+ {expandedContent}
+
+
+ )}
diff --git a/src/components/pages/uniformity/UniformityPageWrapper.tsx b/src/components/pages/uniformity/UniformityPageWrapper.tsx
index 4141d094..3871e487 100644
--- a/src/components/pages/uniformity/UniformityPageWrapper.tsx
+++ b/src/components/pages/uniformity/UniformityPageWrapper.tsx
@@ -14,6 +14,7 @@ export default function UniformityPageWrapper({
const pathname = usePathname();
const router = useRouter();
const toggleValidate = useUiStore((s) => s.toggleValidate);
+ const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen);
const isAdd = pathname.includes('/add');
const isEdit = pathname.includes('/detail/edit');
@@ -25,6 +26,7 @@ export default function UniformityPageWrapper({
const unsub = useUiStore.getState().subscribeIsValid((isValid) => {
if (isValid) {
router.push('/uniformity');
+ setExpandedDrawerOpen(false);
}
});
@@ -46,13 +48,16 @@ export default function UniformityPageWrapper({
{
- if (!v) router.push('/uniformity');
+ if (!v) {
+ router.push('/uniformity');
+ setExpandedDrawerOpen(false);
+ }
}}
closeOnBackdropClick={isDetail ? true : false}
onBackdropClick={handleBackdropClick}
variant='right'
zIndex='99999'
- sidebarContent={isOpen && {children}
}
+ sidebarContent={isOpen ? {children}
: null}
/>
>
);
diff --git a/src/components/pages/uniformity/form/ExpandedDrawerForm.tsx b/src/components/pages/uniformity/form/ExpandedDrawerForm.tsx
new file mode 100644
index 00000000..cd27a45d
--- /dev/null
+++ b/src/components/pages/uniformity/form/ExpandedDrawerForm.tsx
@@ -0,0 +1,33 @@
+'use client';
+
+import DrawerHeader from '@/components/helper/drawer/DrawerHeader';
+import { useUiStore } from '@/stores/ui/ui.store';
+
+const ExpandedDrawerForm = () => {
+ const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen);
+
+ const handleClose = () => {
+ setExpandedDrawerOpen(false);
+ };
+
+ return (
+
+ {/* Header */}
+
+
+ {/* Form Section */}
+
+
+
+ );
+};
+
+export default ExpandedDrawerForm;
diff --git a/src/components/pages/uniformity/form/UniformityForm.tsx b/src/components/pages/uniformity/form/UniformityForm.tsx
index 02fa4207..74138b5b 100644
--- a/src/components/pages/uniformity/form/UniformityForm.tsx
+++ b/src/components/pages/uniformity/form/UniformityForm.tsx
@@ -3,6 +3,9 @@
import { useEffect } from 'react';
import DrawerHeader from '@/components/helper/drawer/DrawerHeader';
import { useUiStore } from '@/stores/ui/ui.store';
+import Button from '@/components/Button';
+import { Icon } from '@iconify/react';
+import ExpandedDrawerForm from '@/components/pages/uniformity/form/ExpandedDrawerForm';
interface UniformityFormProps {
formType?: 'add' | 'edit';
@@ -11,6 +14,8 @@ interface UniformityFormProps {
const UniformityForm = ({ formType = 'add' }: UniformityFormProps) => {
const subscribeValidate = useUiStore((s) => s.subscribeValidate);
const setIsValid = useUiStore((s) => s.setIsValid);
+ const expandedDrawerOpen = useUiStore((s) => s.expandedDrawerOpen);
+ const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen);
useEffect(() => {
const unsub = subscribeValidate(() => {
@@ -20,8 +25,13 @@ const UniformityForm = ({ formType = 'add' }: UniformityFormProps) => {
return unsub;
}, []);
+ const handleOpenExpandedDrawer = () => {
+ setExpandedDrawerOpen(true);
+ };
+
return (
- <>
+
+ {/* Primary Drawer Content */}
{/* Header */}
{
onSubmit={(e) => {
e.preventDefault();
}}
- >
+ >
+
+
- >
+
+ {/* Expanded Drawer - shown when open */}
+ {expandedDrawerOpen && }
+
);
};
diff --git a/src/stores/ui/slices/drawer.slice.ts b/src/stores/ui/slices/drawer.slice.ts
index b92b60c3..150eff4d 100644
--- a/src/stores/ui/slices/drawer.slice.ts
+++ b/src/stores/ui/slices/drawer.slice.ts
@@ -37,4 +37,11 @@ export const createDrawerUISlice: StateCreator<
callback(Boolean(state.isValid));
});
},
+
+ expandedDrawerOpen: false,
+ setExpandedDrawerOpen: (open: boolean) => set({ expandedDrawerOpen: open }),
+ toggleExpandedDrawer: () => {
+ const current = get().expandedDrawerOpen;
+ set({ expandedDrawerOpen: !current });
+ },
});
diff --git a/src/types/stores.d.ts b/src/types/stores.d.ts
index 37b252fe..5b4c7c6a 100644
--- a/src/types/stores.d.ts
+++ b/src/types/stores.d.ts
@@ -10,6 +10,9 @@ type DrawerUISlice = {
isValid: boolean;
setIsValid: (v: boolean) => void;
subscribeIsValid: (callback: (isValid: boolean) => void) => () => void;
+ expandedDrawerOpen: boolean;
+ setExpandedDrawerOpen: (open: boolean) => void;
+ toggleExpandedDrawer: () => void;
};
export type UIStore = MainUiSlice & DrawerUISlice;