add: more things

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-07-04 03:35:22 +08:00
parent 72298b86cd
commit b0f40e5133
78 changed files with 2116 additions and 1621 deletions
@@ -5,6 +5,7 @@ import { useUsers } from "@/contexts/AdminUserContext";
import DataTable from "@/components/generic/Table/DataTable";
import { FilterSheet } from "@/components/generic/Sheet/FilterSheet";
import { RestoreDialog } from "@/components/generic/Dialogs/RestoreDialog";
import { PermanentDeleteDialog } from "@/components/generic/Dialogs/PermanentDeleteDialog";
import { buildUserColumns, columnPinning } from "../../config/users/archive/columns.config";
import { buildToolbarActions } from "../../config/users/archive/toolbar.config";
@@ -16,6 +17,8 @@ import { getTimestamp } from "@/utils/timestamp.util";
export default function ArchiveGroupTable() {
const [restoreTarget, setRestoreTarget] = useState(null); // single: row object
const [restoreIds, setRestoreIds] = useState(null); // bulk: array of ids
const [deleteTarget, setDeleteTarget] = useState(null);
const [deleteIds, setDeleteIds] = useState(null);
const tableRefsRef = useRef({ getFilters: () => [], getSort: () => [], resetSelection: () => { } });
const navigate = useNavigate();
@@ -28,7 +31,9 @@ export default function ArchiveGroupTable() {
fetchArchivedUsers,
fetchUserFieldValues,
restoreUser,
restoreUsers
restoreUsers,
permanentlyDeleteUser,
permanentlyDeleteUsers
} = useUsers();
// Shared export config — passed into toolbar + selection configs
@@ -42,6 +47,7 @@ export default function ArchiveGroupTable() {
const rowActions = buildRowActions({
navigate,
onRestore: (row) => setRestoreTarget(row),
onDelete: (row) => setDeleteTarget(row),
});
const toolbarActions = buildToolbarActions({
fetchArchivedUsers, pagination, exportConfig, navigate,
@@ -53,6 +59,8 @@ export default function ArchiveGroupTable() {
exportConfig,
restoreUser: (row) => setRestoreTarget(row),
restoreUsers: (ids) => setRestoreIds(ids),
onDeleteUser: (row) => setDeleteTarget(row),
onDeleteUsers: (ids) => setDeleteIds(ids),
getTableInstance: () => tableRefsRef.current.tableInstance,
});
@@ -65,6 +73,13 @@ export default function ArchiveGroupTable() {
fetchArchivedUsers({ page: 1, limit: pagination.limit });
};
const handleDeleteSuccess = () => {
setDeleteTarget(null);
setDeleteIds(null);
tableRefsRef.current.resetSelection?.();
fetchArchivedUsers({ page: 1, limit: pagination.limit });
};
return (
<>
<DataTable
@@ -117,6 +132,29 @@ export default function ArchiveGroupTable() {
loading={loading}
onSuccess={handleRestoreSuccess}
/>
{/* Single permanent delete */}
<PermanentDeleteDialog
open={!!deleteTarget}
onOpenChange={(v) => !v && setDeleteTarget(null)}
entity={deleteTarget}
entityLabel="User"
getName={(u) => u?.personal_info?.name?.full_name ?? u?.email}
onDelete={(u) => permanentlyDeleteUser(u?.user_id)}
loading={loading}
onSuccess={handleDeleteSuccess}
/>
{/* Bulk permanent delete */}
<PermanentDeleteDialog
open={!!deleteIds}
onOpenChange={(v) => !v && setDeleteIds(null)}
ids={deleteIds ?? []}
entityLabel="User"
onDelete={permanentlyDeleteUsers}
loading={loading}
onSuccess={handleDeleteSuccess}
/>
</>
);
}