From 223e1c8d00ff47ec35a323999e2094295e063b22 Mon Sep 17 00:00:00 2001 From: Akalanka Perera Date: Sat, 8 Jun 2024 12:27:09 +0530 Subject: [PATCH] Feat: added flag to disable category deletion if there are reserved seats --- .../controls/select/seats/categorizer.tsx | 126 ++++++++++-------- src/types/index.ts | 2 + 2 files changed, 71 insertions(+), 57 deletions(-) diff --git a/src/components/controls/select/seats/categorizer.tsx b/src/components/controls/select/seats/categorizer.tsx index 811100a..b19bac5 100644 --- a/src/components/controls/select/seats/categorizer.tsx +++ b/src/components/controls/select/seats/categorizer.tsx @@ -8,7 +8,7 @@ import { Input, Popover, PopoverContent, PopoverTrigger } from "@/components/cor import { dataAttributes } from "@/constants"; import { store } from "@/store"; import { addCategory, deleteCategory, updateCategory, updateSeats } from "@/store/reducers/editor"; -import { ISTKProps } from "@/types"; +import { ISTKProps, SeatStatus } from "@/types"; import { Callout, Caption, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../../core"; const onAddCategory = () => store.dispatch(addCategory(undefined)); @@ -29,7 +29,7 @@ type IControlProps = Pick; const Categorizer = ({ firstElement, selectedElementIds, options }: IControlProps & Record) => { const categories = useSelector((state: any) => state.editor.categories); const sections = useSelector((state: any) => state.editor.sections); - + const seats = useSelector((state: any) => state.editor.seats); return ( <>
@@ -54,65 +54,77 @@ const Categorizer = ({ firstElement, selectedElementIds, options }: IControlProp
- {categories.map((category) => ( -
- onUpdateCategory({ ...category, color: e.target.value })} - /> - onUpdateCategory({ ...category, textColor: e.target.value })} - /> - onUpdateCategory({ ...category, name: e.target.value })} - /> - - - { + const displayDisabledDelete = + options?.disableCategoryDeleteIfReserved && + seats?.some( + (seat: any) => + seat.category === category.id && + (seat.status === SeatStatus.Reserved || seat.status === SeatStatus.Locked) + ); + return ( +
+ onUpdateCategory({ ...category, color: e.target.value })} + /> + onUpdateCategory({ ...category, textColor: e.target.value })} + /> + onUpdateCategory({ ...category, name: e.target.value })} + /> + + + + + + {sections.map((section) => ( + + {section.id !== "0" && ( +
+ )} + {section.name} + + ))} + + + {!options?.disableCategoryDelete && ( + onDeleteCategory(category.id)} /> - - - {sections.map((section) => ( - - {section.id !== "0" && ( -
- )} - {section.name} - - ))} - - - {!options?.disableCategoryDelete && ( - onDeleteCategory(category.id)} - /> - )} -
- ))} + )} +
+ ); + })}
diff --git a/src/types/index.ts b/src/types/index.ts index f00d9ce..577698e 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -87,6 +87,8 @@ export interface ISTKProps { /** Overrides the default input placeholder at the top left corner of the screen */ locationInputPlaceholder?: string; disableCategoryDelete?: boolean; + /** Disables category deletion if there are reserved seats falling under the category */ + disableCategoryDeleteIfReserved?: boolean; disableSectionDelete?: boolean; }; plugins?: IPlugins;