feat: implement category deletion functionality with confirmation dialog

This commit is contained in:
fredy.siswanto
2025-03-13 11:01:28 +07:00
parent 798896e4ee
commit c89731e124
3 changed files with 108 additions and 10 deletions
+33 -10
View File
@@ -1,8 +1,11 @@
import { PencilSquareIcon, TrashIcon } from '@heroicons/react/20/solid'
import DT, { type Config, type ConfigColumns } from 'datatables.net-dt'
import DataTable, { type DataTableSlots } from 'datatables.net-react'
import { useState } from 'react'
import { Link, useRouteLoaderData } from 'react-router'
import type { TCategoryResponse } from '~/apis/common/get-categories'
import { DialogDelete } from '~/components/dialog/delete'
import { Button } from '~/components/ui/button'
import { UiTable } from '~/components/ui/table'
import { TitleDashboard } from '~/components/ui/title-dashboard'
@@ -12,7 +15,7 @@ export const CategoriesPage = () => {
const loaderData = useRouteLoaderData<typeof loader>(
'routes/_admin.lg-admin._dashboard',
)
const [selectedCategory, setSelectedCategory] = useState<TCategoryResponse>()
DataTable.use(DT)
const dataTable =
loaderData?.categoriesData?.sort((a, b) => {
@@ -55,15 +58,26 @@ export const CategoriesPage = () => {
<pre className="text-sm text-[#7C7C7C]">Kode: {data.code}</pre>
</div>
),
3: (value: string) => (
<Button
as="a"
href={`/lg-admin/categories/update/${value}`}
className="text-md rounded-md"
size="sm"
>
Update Kategori
</Button>
3: (value: string, _type: unknown, data: TCategoryResponse) => (
<div className="flex space-x-2">
<Button
as="a"
href={`/lg-admin/categories/update/${value}`}
size="icon"
title="Update Kategori"
>
<PencilSquareIcon className="h-4 w-4" />
</Button>
<Button
type="button"
size="icon"
variant="newsDanger"
onClick={() => setSelectedCategory(data)}
title="Hapus Kategori"
>
<TrashIcon className="h-4 w-4" />
</Button>
</div>
),
}
const dataOptions: Config = {
@@ -95,6 +109,15 @@ export const CategoriesPage = () => {
slots={dataSlot}
title="Daftar Kategori"
/>
<DialogDelete
selectedId={selectedCategory?.id}
close={() => setSelectedCategory(undefined)}
title="Kategori"
fetcherAction={`/actions/admin/categories/delete/${selectedCategory?.id}`}
>
<p>{selectedCategory?.name}</p>
</DialogDelete>
</div>
)
}