From 3cf91ee256e80e0125f2951d10de63917bf86b1e Mon Sep 17 00:00:00 2001 From: Yashwin Date: Wed, 10 Jun 2026 14:26:40 +0530 Subject: [PATCH] refactor: update NotificationMaster code style, reorganize state management, and enhance pagination functionality --- src/components/shared/Pagination.tsx | 2 +- src/pages/superadmin/NotificationMaster.tsx | 707 ++++++++++++++------ 2 files changed, 488 insertions(+), 221 deletions(-) diff --git a/src/components/shared/Pagination.tsx b/src/components/shared/Pagination.tsx index 931e748..a973e4f 100644 --- a/src/components/shared/Pagination.tsx +++ b/src/components/shared/Pagination.tsx @@ -142,7 +142,7 @@ export const Pagination = ({ createPortal(
+ ) : undefined, }} > -
-
-
+ {viewMode === "categories" ? ( +
+
+
{ - setSearch(val); - setCurrentPage(1); - }} - placeholder="Search categories..." - containerClassName="relative flex-1 max-w-sm" - /> + value={search} + onChange={(val) => { + setSearch(val); + setCurrentPage(1); + }} + placeholder="Search categories..." + containerClassName="relative flex-1 max-w-sm" + /> { placeholder="All Modules" isSearchable /> -
- { - setEditingCategory(null); - resetCategory({ name: '', code: '', description: '', module_id: '' }); - setCategoryModalOpen(true); - }} className="flex gap-2"> - New Category - -
+
+ { + setEditingCategory(null); + resetCategory({ + name: "", + code: "", + description: "", + module_id: "", + }); + setCategoryModalOpen(true); + }} + className="flex gap-2" + > + New Category + +
-
- c.id} /> -
+ {/*
*/} + c.id} + /> + {/*
*/} - { setLimit(l); setCurrentPage(1); }} - /> -
+ { + setLimit(l); + setCurrentPage(1); + }} + /> +
+ ) : ( + <> + c.id} + emptyMessage="No codes registered for this category." + /> + + { + setCodeLimit(l); + setCodePage(1); + }} + /> + + )} {/* Category Modal */} - setCategoryModalOpen(false)} title={editingCategory ? "Edit Category" : "New Category"} maxWidth="lg"> -
-
- - -
- - ({ value: m.id, label: m.name })) - ]} - onValueChange={(val) => setCategoryValue('module_id', val, { shouldValidate: true })} - placeholder="Select a module" - error={categoryErrors.module_id?.message} + setCategoryModalOpen(false)} + title={editingCategory ? "Edit Category" : "New Category"} + maxWidth="lg" + footer={ + <> + + + {editingCategory ? "Update" : "Create"} + + + } + > +
+ + -
- - {editingCategory ? 'Update' : 'Create'} -
+ + ({ value: m.id, label: m.name })), + ]} + onValueChange={(val) => + setCategoryValue("module_id", val, { shouldValidate: true }) + } + placeholder="Select a module" + error={categoryErrors.module_id?.message} + />
- {/* Codes Modal */} - setCodeModalOpen(false)} title={`Event Codes: ${selectedCategory?.name}`} maxWidth="2xl"> -
- {/* ── Add / Edit Code Form ─────────────────────────────────── */} -
-

- {editingCode ? 'Edit Event Code' : 'Add New Event Trigger'} -

+ {/* Code Form Modal */} + { + setCodeFormModalOpen(false); + setEditingCode(null); + setCodeVariables([]); + resetCode({ + code: "", + name: "", + description: "", + default_channels: ["in_app", "email"], + default_priority: "normal", + }); + }} + title={editingCode ? "Edit Event Code" : "Add New Event Trigger"} + maxWidth="lg" + footer={ + <> + + + {editingCode ? "Update Code" : "Add Code"} + + + } + > +
+ + +
+ -
- - -
- + {/* Variables tag input */} + - {/* Variables tag input */} - - -
-
Auto-populates default channels (In-App, Email)
-
- {editingCode && ( - - )} - - {editingCode ? 'Update Code' : 'Add Code'} - -
-
-
- - {/* ── Registered Codes Table ───────────────────────────────── */} -
-

Registered Codes

-
- - - - - - - - - - - {isCodesLoading ? ( - - ) : codes.length === 0 ? ( - - ) : codes.map(c => ( - - - - - - - ))} - -
Trigger CodeNameVariablesActions
Loading codes...
No codes registered for this category.
{c.code}{c.name} -
- {Array.isArray(c.variables) && c.variables.length > 0 - ? c.variables.map((v: string) => ( - {`{{${v}}}`} - )) - : none - } -
-
- - -
-
- - {}} - /> -
+
+ Auto-populates default channels (In-App, Email)
@@ -516,7 +783,7 @@ const NotificationMaster = (): ReactElement => { onConfirm={handleDelete} title={`Delete ${deleteTarget?.type}`} message={`Are you sure you want to delete ${deleteTarget?.name}? This action cannot be undone.`} - itemName={deleteTarget?.name || ''} + itemName={deleteTarget?.name || ""} /> );