refactor(FE-316,317,438): Move Uniformity feature under production

namespace
This commit is contained in:
rstubryan
2025-12-31 11:17:26 +07:00
parent f3f552bd16
commit a1e8f582ba
28 changed files with 71 additions and 76 deletions
@@ -1,4 +1,4 @@
import UniformityForm from '@/components/pages/uniformity/form/UniformityForm'; import UniformityForm from '@/components/pages/production/uniformity/form/UniformityForm';
const AddUniformity = () => { const AddUniformity = () => {
return <UniformityForm formType='add' />; return <UniformityForm formType='add' />;
@@ -1,6 +1,6 @@
'use client'; 'use client';
import UniformityDetail from '@/components/pages/uniformity/detail/UniformityDetail'; import UniformityDetail from '@/components/pages/production/uniformity/detail/UniformityDetail';
import { isResponseError, isResponseSuccess } from '@/lib/api-helper'; import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
import { UniformityApi } from '@/services/api/uniformity'; import { UniformityApi } from '@/services/api/uniformity';
import { useRouter, useSearchParams } from 'next/navigation'; import { useRouter, useSearchParams } from 'next/navigation';
@@ -1,5 +1,5 @@
import { ReactNode } from 'react'; import { ReactNode } from 'react';
import UniformityPageWrapper from '@/components/pages/uniformity/UniformityPageWrapper'; import UniformityPageWrapper from '@/components/pages/production/uniformity/UniformityPageWrapper';
export default function UniformityLayout({ export default function UniformityLayout({
children, children,
@@ -1,4 +1,4 @@
import UniformityTable from '@/components/pages/uniformity/UniformityTable'; import UniformityTable from '@/components/pages/production/uniformity/UniformityTable';
const Uniformity = () => { const Uniformity = () => {
return <UniformityTable />; return <UniformityTable />;
@@ -1,9 +1,9 @@
import React from 'react'; import React from 'react';
import Card from '@/components/Card'; import Card from '@/components/Card';
import UniformityBarChart from '@/components/pages/uniformity/chart/UniformityBarChart'; import UniformityBarChart from '@/components/pages/production/uniformity/chart/UniformityBarChart';
import UniformityGaugeChart from '@/components/pages/uniformity/chart/UniformityGaugeChart'; import UniformityGaugeChart from '@/components/pages/production/uniformity/chart/UniformityGaugeChart';
import UniformityBarChartSkeleton from '@/components/pages/uniformity/skeleton/UniformityBarChartSkeleton'; import UniformityBarChartSkeleton from '@/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton';
import UniformityGaugeChartSkeleton from '@/components/pages/uniformity/skeleton/UniformityGaugeChartSkeleton'; import UniformityGaugeChartSkeleton from '@/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton';
interface BarChartData { interface BarChartData {
name: string; name: string;
@@ -3,7 +3,7 @@
import { usePathname, useRouter } from 'next/navigation'; import { usePathname, useRouter } from 'next/navigation';
import Drawer from '@/components/Drawer'; import Drawer from '@/components/Drawer';
import React, { ReactNode } from 'react'; import React, { ReactNode } from 'react';
import UniformityTable from '@/components/pages/uniformity/UniformityTable'; import UniformityTable from '@/components/pages/production/uniformity/UniformityTable';
import { useUiStore } from '@/stores/ui/ui.store'; import { useUiStore } from '@/stores/ui/ui.store';
export default function UniformityPageWrapper({ export default function UniformityPageWrapper({
@@ -27,7 +27,7 @@ export default function UniformityPageWrapper({
const handleBackdropClick = () => { const handleBackdropClick = () => {
const unsub = useUiStore.getState().subscribeIsValid((isValid) => { const unsub = useUiStore.getState().subscribeIsValid((isValid) => {
if (isValid) { if (isValid) {
router.push('/uniformity'); router.push('/production/uniformity');
unsub?.(); unsub?.();
setExpandedDrawerOpen(false); setExpandedDrawerOpen(false);
} else { } else {
@@ -42,7 +42,7 @@ export default function UniformityPageWrapper({
<> <>
<div className='w-full p-4'> <div className='w-full p-4'>
<UniformityTable <UniformityTable
refresh={() => !isOpen && router.push('/uniformity')} refresh={() => !isOpen && router.push('/production/uniformity')}
/> />
</div> </div>
@@ -50,7 +50,7 @@ export default function UniformityPageWrapper({
open={isOpen} open={isOpen}
setOpen={(v) => { setOpen={(v) => {
if (!v) { if (!v) {
router.push('/uniformity'); router.push('/production/uniformity');
setExpandedDrawerOpen(false); setExpandedDrawerOpen(false);
} }
}} }}
@@ -7,10 +7,10 @@ import { Icon } from '@iconify/react';
import { ColumnDef, SortingState } from '@tanstack/react-table'; import { ColumnDef, SortingState } from '@tanstack/react-table';
import { cn, formatDate } from '@/lib/helper'; import { cn, formatDate } from '@/lib/helper';
import Button from '@/components/Button'; import Button from '@/components/Button';
import UniformityChart from '@/components/pages/uniformity/UniformityChart'; import UniformityChart from '@/components/pages/production/uniformity/UniformityChart';
import { useTableFilter } from '@/services/hooks/useTableFilter'; import { useTableFilter } from '@/services/hooks/useTableFilter';
import { UniformityApi } from '@/services/api/uniformity'; import { UniformityApi } from '@/services/api/uniformity';
import { type Uniformity } from '@/types/api/uniformity/uniformity'; import { type Uniformity } from '@/types/api/production/uniformity';
import { isResponseSuccess } from '@/lib/api-helper'; import { isResponseSuccess } from '@/lib/api-helper';
import { type BaseApiResponse } from '@/types/api/api-general'; import { type BaseApiResponse } from '@/types/api/api-general';
import Table from '@/components/Table'; import Table from '@/components/Table';
@@ -20,7 +20,7 @@ import { useModal } from '@/components/Modal';
import ConfirmationModal from '@/components/modal/ConfirmationModal'; import ConfirmationModal from '@/components/modal/ConfirmationModal';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
import Card from '@/components/Card'; import Card from '@/components/Card';
import UniformityTableSkeleton from '@/components/pages/uniformity/skeleton/UniformityTableSkeleton'; import UniformityTableSkeleton from '@/components/pages/production/uniformity/skeleton/UniformityTableSkeleton';
import RequirePermission from '@/components/helper/RequirePermission'; import RequirePermission from '@/components/helper/RequirePermission';
import { useUniformityStore } from '@/stores/uniformity/uniformity.store'; import { useUniformityStore } from '@/stores/uniformity/uniformity.store';
import FloatingActionsButton from '@/components/FloatingActionsButton'; import FloatingActionsButton from '@/components/FloatingActionsButton';
@@ -38,20 +38,20 @@ import {
getStatusColor, getStatusColor,
getStatusIndicatorColor, getStatusIndicatorColor,
getStatusText, getStatusText,
} from '@/components/pages/uniformity/uniformity-utils'; } from '@/components/pages/production/uniformity/uniformity-utils';
import { generateUniformityPDF } from '@/components/pages/uniformity/export/UniformityExportPDF'; import { generateUniformityPDF } from '@/components/pages/production/uniformity/export/UniformityExportPDF';
import { generateUniformityExcel } from '@/components/pages/uniformity/export/UniformityExportExcel'; import { generateUniformityExcel } from '@/components/pages/production/uniformity/export/UniformityExportExcel';
import Dropdown from '@/components/Dropdown'; import Dropdown from '@/components/Dropdown';
import Menu from '@/components/menu/Menu'; import Menu from '@/components/menu/Menu';
import MenuItem from '@/components/menu/MenuItem'; import MenuItem from '@/components/menu/MenuItem';
const isUniformityLocked = (uniformity: Uniformity): boolean => { const isUniformityLocked = (uniformity: Uniformity): boolean => {
return ( // Uniformity data is never locked - checkbox is always enabled
uniformity.status === 'Disetujui' || return false;
uniformity.status === 'Ditolak' || };
uniformity.status === 'APPROVED' ||
uniformity.status === 'REJECTED' const canApproveRejectUniformity = (uniformity: Uniformity): boolean => {
); return uniformity.status === 'CREATED' || uniformity.status === 'Pengajuan';
}; };
interface UniformityPreviewData { interface UniformityPreviewData {
@@ -430,7 +430,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => {
singleRejectModal.openModal(); singleRejectModal.openModal();
} }
router.replace('/uniformity', { scroll: false }); router.replace('/production/uniformity', { scroll: false });
} }
} }
} }
@@ -671,7 +671,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => {
const uniformity = uniformities.data.find( const uniformity = uniformities.data.find(
(r) => r.id === parseInt(rowId) (r) => r.id === parseInt(rowId)
); );
if (uniformity && !isUniformityLocked(uniformity)) { if (uniformity) {
newSelection[rowId] = true; newSelection[rowId] = true;
} }
} }
@@ -692,10 +692,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => {
id: 'select', id: 'select',
header: ({ table }) => { header: ({ table }) => {
const allRows = table.getRowModel().rows; const allRows = table.getRowModel().rows;
const selectableRows = allRows.filter((row) => { const selectableRows = allRows;
const uniformity = row.original;
return !isUniformityLocked(uniformity);
});
const hasNoSelectableRows = selectableRows.length === 0; const hasNoSelectableRows = selectableRows.length === 0;
@@ -730,17 +727,14 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => {
); );
}, },
cell: ({ row }) => { cell: ({ row }) => {
const uniformity = row.original;
const isDisabled = isUniformityLocked(uniformity);
return ( return (
<div className={cn({ 'opacity-50': isDisabled })}> <div>
<CheckboxInput <CheckboxInput
name='row' name='row'
checked={row.getIsSelected()} checked={row.getIsSelected()}
indeterminate={row.getIsSomeSelected()} indeterminate={row.getIsSomeSelected()}
onChange={row.getToggleSelectedHandler()} onChange={row.getToggleSelectedHandler()}
disabled={isDisabled} disabled={false}
/> />
</div> </div>
); );
@@ -805,7 +799,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => {
<section className='[&_button]:w-full [&_button]:sm:w-fit [&_button]:last:mt-2 [&_button]:last:sm:mt-0 sm:flex sm:justify-between grid grid-cols-1 sm:gap-0 gap-2'> <section className='[&_button]:w-full [&_button]:sm:w-fit [&_button]:last:mt-2 [&_button]:last:sm:mt-0 sm:flex sm:justify-between grid grid-cols-1 sm:gap-0 gap-2'>
<div className='w-full sm:w-fit flex flex-col sm:flex-row self-start gap-2'> <div className='w-full sm:w-fit flex flex-col sm:flex-row self-start gap-2'>
<RequirePermission permissions='lti.production.uniformity.create'> <RequirePermission permissions='lti.production.uniformity.create'>
<Button color='primary' href='/uniformity/add'> <Button color='primary' href='/production/uniformity/add'>
<Icon icon='ic:round-plus' width={18} height={18} /> <Icon icon='ic:round-plus' width={18} height={18} />
Add Uniformity Add Uniformity
</Button> </Button>
@@ -1196,7 +1190,7 @@ const UniformityTable = ({ refresh }: { refresh?: () => void }) => {
hidden: selectedRowIds.length !== 1, hidden: selectedRowIds.length !== 1,
onClick() { onClick() {
router.push( router.push(
`/uniformity/detail?uniformityId=${selectedRowIds[0]}` `/production/uniformity/detail?uniformityId=${selectedRowIds[0]}`
); );
setRowSelection({}); setRowSelection({});
}, },
@@ -1,4 +1,4 @@
import Badge from '@/components/Badge'; import Badge from '../../../../Badge';
import Card from '@/components/Card'; import Card from '@/components/Card';
import { Icon } from '@iconify/react'; import { Icon } from '@iconify/react';
import { formatNumber } from '@/lib/helper'; import { formatNumber } from '@/lib/helper';
@@ -10,16 +10,16 @@ import Table from '@/components/Table';
import Badge from '@/components/Badge'; import Badge from '@/components/Badge';
import Tooltip from '@/components/Tooltip'; import Tooltip from '@/components/Tooltip';
import RequirePermission from '@/components/helper/RequirePermission'; import RequirePermission from '@/components/helper/RequirePermission';
import { UniformityDetail as UniformityDetailType } from '@/types/api/uniformity/uniformity'; import { UniformityDetail as UniformityDetailType } from '@/types/api/production/uniformity';
import { formatDate } from '@/lib/helper'; import { formatDate } from '@/lib/helper';
import { useUiStore } from '@/stores/ui/ui.store'; import { useUiStore } from '@/stores/ui/ui.store';
import UniformityDetailsPreview from '@/components/pages/uniformity/detail/UniformityDetailsPreview'; import UniformityDetailsPreview from '@/components/pages/production/uniformity/detail/UniformityDetailsPreview';
import { import {
getStatusColor, getStatusColor,
getStatusIndicatorColor, getStatusIndicatorColor,
getStatusText, getStatusText,
} from '@/components/pages/uniformity/uniformity-utils'; } from '@/components/pages/production/uniformity/uniformity-utils';
import { DetailOptionType } from '@/types/api/uniformity/uniformity'; import { DetailOptionType } from '@/types/api/production/uniformity';
interface UniformityDetailProps { interface UniformityDetailProps {
initialValues: UniformityDetailType; initialValues: UniformityDetailType;
@@ -35,11 +35,11 @@ const UniformityDetail: React.FC<UniformityDetailProps> = ({
); );
const handleApprove = () => { const handleApprove = () => {
router.push(`/uniformity?action=approve&id=${initialValues.id}`); router.push(`/production/uniformity?action=approve&id=${initialValues.id}`);
}; };
const handleReject = () => { const handleReject = () => {
router.push(`/uniformity?action=reject&id=${initialValues.id}`); router.push(`/production/uniformity?action=reject&id=${initialValues.id}`);
}; };
const handleViewUniformityDetails = () => { const handleViewUniformityDetails = () => {
@@ -175,7 +175,7 @@ const UniformityDetail: React.FC<UniformityDetailProps> = ({
<section className='w-full h-full bg-white border-l border-gray-200'> <section className='w-full h-full bg-white border-l border-gray-200'>
{/* Header */} {/* Header */}
<DrawerHeader <DrawerHeader
leftIconHref='/uniformity' leftIconHref='/production/uniformity'
subtitle={`Details`} subtitle={`Details`}
subtitleClassName='text-sm text-neutral' subtitleClassName='text-sm text-neutral'
showDivider showDivider
@@ -10,17 +10,17 @@ import {
UniformitySampling, UniformitySampling,
UniformityResult, UniformityResult,
UniformityInfoUmum, UniformityInfoUmum,
} from '@/types/api/uniformity/uniformity'; } from '@/types/api/production/uniformity';
import Table from '@/components/Table'; import Table from '@/components/Table';
import Badge from '@/components/Badge'; import Badge from '@/components/Badge';
import { formatNumber } from '@/lib/helper'; import { formatNumber } from '@/lib/helper';
import { DetailOptionType } from '@/types/api/uniformity/uniformity'; import { DetailOptionType } from '@/types/api/production/uniformity';
import { import {
getWeightStatusColor, getWeightStatusColor,
getWeightStatusIndicatorColor, getWeightStatusIndicatorColor,
getWeightStatusText, getWeightStatusText,
} from '@/components/pages/uniformity/uniformity-utils'; } from '@/components/pages/production/uniformity/uniformity-utils';
import { BodyWeightData } from '@/types/api/uniformity/uniformity'; import { BodyWeightData } from '@/types/api/production/uniformity';
import Button from '@/components/Button'; import Button from '@/components/Button';
import { UniformityApi } from '@/services/api/uniformity'; import { UniformityApi } from '@/services/api/uniformity';
import useSWR from 'swr'; import useSWR from 'swr';
@@ -1,7 +1,7 @@
'use client'; 'use client';
import * as XLSX from 'xlsx'; import * as XLSX from 'xlsx';
import type { Uniformity } from '@/types/api/uniformity/uniformity'; import type { Uniformity } from '@/types/api/production/uniformity';
import { formatDate, formatNumber } from '@/lib/helper'; import { formatDate, formatNumber } from '@/lib/helper';
interface UniformityExportExcelParams { interface UniformityExportExcelParams {
@@ -11,7 +11,7 @@ import {
} from '@react-pdf/renderer'; } from '@react-pdf/renderer';
import { formatDate, formatNumber } from '@/lib/helper'; import { formatDate, formatNumber } from '@/lib/helper';
import type { Uniformity } from '@/types/api/uniformity/uniformity'; import type { Uniformity } from '@/types/api/production/uniformity';
Font.register({ Font.register({
family: 'Helvetica', family: 'Helvetica',
@@ -1,5 +1,5 @@
import * as Yup from 'yup'; import * as Yup from 'yup';
import { Uniformity } from '@/types/api/uniformity/uniformity'; import { Uniformity } from '@/types/api/production/uniformity';
type UniformityFormSchemaType = { type UniformityFormSchemaType = {
date: string; date: string;
@@ -23,7 +23,7 @@ import {
UniformityFormSchema, UniformityFormSchema,
UniformityFormValues, UniformityFormValues,
getUniformityFormInitialValues, getUniformityFormInitialValues,
} from '@/components/pages/uniformity/form/UniformityForm.schema'; } from '@/components/pages/production/uniformity/form/UniformityForm.schema';
import { LocationApi } from '@/services/api/master-data'; import { LocationApi } from '@/services/api/master-data';
import { import {
ProjectFlockApi, ProjectFlockApi,
@@ -34,13 +34,13 @@ import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
import { import {
Uniformity, Uniformity,
VerifyUniformityPayload, VerifyUniformityPayload,
} from '@/types/api/uniformity/uniformity'; } from '@/types/api/production/uniformity';
import { type BaseApiResponse } from '@/types/api/api-general'; import { type BaseApiResponse } from '@/types/api/api-general';
import { ProjectFlockKandangLookup } from '@/types/api/production/project-flock'; import { ProjectFlockKandangLookup } from '@/types/api/production/project-flock';
import { Kandang } from '@/types/api/master-data/kandang'; import { Kandang } from '@/types/api/master-data/kandang';
import UniformityPreviewForm from '@/components/pages/uniformity/form/UniformityPreviewForm'; import UniformityPreviewForm from '@/components/pages/production/uniformity/form/UniformityPreviewForm';
import UniformityResultForm from '@/components/pages/uniformity/form/UniformityResultForm'; import UniformityResultForm from '@/components/pages/production/uniformity/form/UniformityResultForm';
import { generateUniformityTemplate } from '@/components/pages/uniformity/export/UniformityTemplate'; import { generateUniformityTemplate } from '@/components/pages/production/uniformity/export/UniformityTemplate';
import useSWR from 'swr'; import useSWR from 'swr';
import { cn, formatNumber } from '@/lib/helper'; import { cn, formatNumber } from '@/lib/helper';
import Tooltip from '@/components/Tooltip'; import Tooltip from '@/components/Tooltip';
@@ -272,7 +272,7 @@ const UniformityForm = ({
setExpandedDrawerOpen(true); setExpandedDrawerOpen(true);
setUniformityStep('preview'); setUniformityStep('preview');
} else { } else {
router.push('/uniformity'); router.push('/production/uniformity');
} }
}, },
}); });
@@ -435,7 +435,9 @@ const UniformityForm = ({
leftIcon={formType == 'add' ? 'mdi:close' : 'mdi:arrow-left'} leftIcon={formType == 'add' ? 'mdi:close' : 'mdi:arrow-left'}
leftIconSize={24} leftIconSize={24}
leftIconHref={ leftIconHref={
formType == 'add' ? '/uniformity' : `/uniformity/detail` formType == 'add'
? '/production/uniformity'
: `/production/uniformity/detail`
} }
leftIconClassName='hover:text-gray-400' leftIconClassName='hover:text-gray-400'
subtitle={formType == 'add' ? 'Add Uniformity' : 'Update Uniformity'} subtitle={formType == 'add' ? 'Add Uniformity' : 'Update Uniformity'}
@@ -13,7 +13,7 @@ import Table from '@/components/Table';
import { import {
BodyWeightData, BodyWeightData,
UniformityDetailItem, UniformityDetailItem,
} from '@/types/api/uniformity/uniformity'; } from '@/types/api/production/uniformity';
const UniformityPreviewForm = () => { const UniformityPreviewForm = () => {
const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen); const setExpandedDrawerOpen = useUiStore((s) => s.setExpandedDrawerOpen);
@@ -20,12 +20,12 @@ import {
getWeightStatusColor, getWeightStatusColor,
getWeightStatusIndicatorColor, getWeightStatusIndicatorColor,
getWeightStatusText, getWeightStatusText,
} from '@/components/pages/uniformity/uniformity-utils'; } from '@/components/pages/production/uniformity/uniformity-utils';
import { DetailOptionType } from '@/types/api/uniformity/uniformity'; import { DetailOptionType } from '@/types/api/production/uniformity';
import { import {
BodyWeightData, BodyWeightData,
UniformityDetailItem, UniformityDetailItem,
} from '@/types/api/uniformity/uniformity'; } from '@/types/api/production/uniformity';
const UniformityResultForm = () => { const UniformityResultForm = () => {
const router = useRouter(); const router = useRouter();
@@ -82,7 +82,7 @@ const UniformityResultForm = () => {
setIsNextStep(false); setIsNextStep(false);
setUniformityStep('preview'); setUniformityStep('preview');
setVerifyUniformityResult(null); setVerifyUniformityResult(null);
router.push('/uniformity'); router.push('/production/uniformity');
} finally { } finally {
setIsSubmitting(false); setIsSubmitting(false);
} }
+5 -6
View File
@@ -29,6 +29,11 @@ export const MAIN_DRAWER_LINKS: SidebarMenuItem[] = [
text: 'Transfer to Laying', text: 'Transfer to Laying',
link: '/production/transfer-to-laying', link: '/production/transfer-to-laying',
}, },
{
text: 'Uniformity',
link: '/production/uniformity',
permission: ['lti.production.uniformity.list'],
},
], ],
}, },
{ {
@@ -42,12 +47,6 @@ export const MAIN_DRAWER_LINKS: SidebarMenuItem[] = [
link: '/marketing', link: '/marketing',
icon: 'heroicons-outline:currency-dollar', icon: 'heroicons-outline:currency-dollar',
}, },
{
text: 'Uniformity',
link: '/uniformity',
icon: 'heroicons-outline:scale',
permission: ['lti.production.uniformity.list'],
},
{ {
text: 'Keuangan', text: 'Keuangan',
link: '/finance', link: '/finance',
+4 -4
View File
@@ -46,10 +46,10 @@ export const ROUTE_PERMISSIONS: Record<string, string[]> = {
], ],
// Production - Uniformity // Production - Uniformity
'/uniformity/': ['lti.production.uniformity.list'], '/production/uniformity/': ['lti.production.uniformity.list'],
'/uniformity/add/': ['lti.production.uniformity.create'], '/production/uniformity/add/': ['lti.production.uniformity.create'],
'/uniformity/detail/': ['lti.production.uniformity.detail'], '/production/uniformity/detail/': ['lti.production.uniformity.detail'],
'/uniformity/detail/edit/': ['lti.production.uniformity.update'], '/production/uniformity/detail/edit/': ['lti.production.uniformity.update'],
// Purchase // Purchase
'/purchase/': ['lti.purchase.list'], '/purchase/': ['lti.purchase.list'],
+1 -1
View File
@@ -6,7 +6,7 @@ import {
VerifyUniformityPayload, VerifyUniformityPayload,
VerifyUniformityResponse, VerifyUniformityResponse,
CreateUniformityPayload, CreateUniformityPayload,
} from '@/types/api/uniformity/uniformity'; } from '@/types/api/production/uniformity';
export class UniformityApiService extends BaseApiService< export class UniformityApiService extends BaseApiService<
Uniformity, Uniformity,
+1 -1
View File
@@ -3,7 +3,7 @@ import type {
UniformityFormData, UniformityFormData,
UniformityDetail, UniformityDetail,
VerifyUniformityResponse, VerifyUniformityResponse,
} from '@/types/api/uniformity/uniformity'; } from '@/types/api/production/uniformity';
type MainUiSlice = { type MainUiSlice = {
mainDrawerOpen: boolean; mainDrawerOpen: boolean;