upd: api kategori pengajuan surat

Deskripsi:
- menambahkan link tambah disetiap kategori
- perbaikan list kategori karena berubah struktur

NO Issues
This commit is contained in:
2025-12-22 17:38:45 +08:00
parent 91a3dfdb5d
commit da86f5f10a
2 changed files with 38 additions and 24 deletions

View File

@@ -11,10 +11,9 @@ import {
Modal, Modal,
Stack, Stack,
Table, Table,
TagsInput,
Text, Text,
Title, Title,
Tooltip, Tooltip
} from "@mantine/core"; } from "@mantine/core";
import { useDisclosure, useShallowEffect } from "@mantine/hooks"; import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import { IconEdit, IconEye, IconPlus, IconTrash } from "@tabler/icons-react"; import { IconEdit, IconEye, IconPlus, IconTrash } from "@tabler/icons-react";
@@ -44,13 +43,13 @@ export default function KategoriPelayananSurat({
const [dataChoose, setDataChoose] = useState({ const [dataChoose, setDataChoose] = useState({
id: "", id: "",
name: "", name: "",
syaratDokumen: [{ name: "", desc: "" }], syaratDokumen: [{ key: "", name: "", desc: "" }],
dataText: [""], dataPelengkap: [{ key: "", name: "", desc: "" }],
}); });
const [dataTambah, setDataTambah] = useState({ const [dataTambah, setDataTambah] = useState({
name: "", name: "",
syaratDokumen: [{ name: "", desc: "" }], syaratDokumen: [{ key: "", name: "", desc: "" }],
dataText: [""], dataPelengkap: [{ key: "", name: "", desc: "" }],
}); });
useShallowEffect(() => { useShallowEffect(() => {
@@ -60,8 +59,8 @@ export default function KategoriPelayananSurat({
async function handleCreate() { async function handleCreate() {
try { try {
setBtnLoading(true); setBtnLoading(true);
const cleanedDataText = dataTambah.dataText const cleanedDataText = dataTambah.dataPelengkap
.map((v) => v.trim()) .map((v) => v.name.trim())
.filter((v) => v !== ""); .filter((v) => v !== "");
const cleanedSyarat = dataTambah.syaratDokumen const cleanedSyarat = dataTambah.syaratDokumen
.map((item) => ({ .map((item) => ({
@@ -82,8 +81,8 @@ export default function KategoriPelayananSurat({
closeTambah(); closeTambah();
setDataTambah({ setDataTambah({
name: "", name: "",
syaratDokumen: [{ name: "", desc: "" }], syaratDokumen: [{ key: "", name: "", desc: "" }],
dataText: [""], dataPelengkap: [{ key: "", name: "", desc: "" }],
}); });
notification({ notification({
title: "Success", title: "Success",
@@ -112,8 +111,8 @@ export default function KategoriPelayananSurat({
async function handleEdit() { async function handleEdit() {
try { try {
setBtnLoading(true); setBtnLoading(true);
const cleanedDataText = dataChoose.dataText const cleanedDataText = dataChoose.dataPelengkap
.map((v) => v.trim()) .map((v) => v.name.trim())
.filter((v) => v !== ""); .filter((v) => v !== "");
const cleanedSyarat = dataChoose.syaratDokumen const cleanedSyarat = dataChoose.syaratDokumen
.map((item) => ({ .map((item) => ({
@@ -191,7 +190,7 @@ export default function KategoriPelayananSurat({
function handleAddSyarat() { function handleAddSyarat() {
setDataChoose({ setDataChoose({
...dataChoose, ...dataChoose,
syaratDokumen: [...dataChoose.syaratDokumen, { name: "", desc: "" }], syaratDokumen: [...dataChoose.syaratDokumen, { key: "", name: "", desc: "" }],
}); });
} }
@@ -204,7 +203,7 @@ export default function KategoriPelayananSurat({
function handleEditSyarat( function handleEditSyarat(
index: number, index: number,
data: { name: string; desc: string }, data: { key: string; name: string; desc: string },
) { ) {
setDataChoose({ setDataChoose({
...dataChoose, ...dataChoose,
@@ -233,15 +232,15 @@ export default function KategoriPelayananSurat({
} }
/> />
</Input.Wrapper> </Input.Wrapper>
<TagsInput {/* <TagsInput
label="Data Pelengkap" label="Data Pelengkap"
placeholder="Tambah data pelengkap" placeholder="Tambah data pelengkap"
splitChars={[","]} splitChars={[","]}
value={dataChoose.dataText} value={dataChoose.dataPelengkap}
onChange={(value) => onChange={(value) =>
setDataChoose({ ...dataChoose, dataText: value }) setDataChoose({ ...dataChoose, dataPelengkap: value })
} }
/> /> */}
<Flex direction={"column"} gap={"md"}> <Flex direction={"column"} gap={"md"}>
<Group> <Group>
<Text size="sm" c={"white"}> <Text size="sm" c={"white"}>
@@ -295,6 +294,7 @@ export default function KategoriPelayananSurat({
value={v.name} value={v.name}
onChange={(e) => onChange={(e) =>
handleEditSyarat(i, { handleEditSyarat(i, {
key: v.key,
name: e.target.value, name: e.target.value,
desc: v.desc, desc: v.desc,
}) })
@@ -308,6 +308,7 @@ export default function KategoriPelayananSurat({
value={v.desc} value={v.desc}
onChange={(e) => onChange={(e) =>
handleEditSyarat(i, { handleEditSyarat(i, {
key: v.key,
name: v.name, name: v.name,
desc: e.target.value, desc: e.target.value,
}) })
@@ -347,7 +348,7 @@ export default function KategoriPelayananSurat({
} }
/> />
</Input.Wrapper> </Input.Wrapper>
<TagsInput {/* <TagsInput
label="Data Pelengkap" label="Data Pelengkap"
placeholder="Tambah data pelengkap" placeholder="Tambah data pelengkap"
splitChars={[","]} splitChars={[","]}
@@ -355,7 +356,7 @@ export default function KategoriPelayananSurat({
onChange={(value) => onChange={(value) =>
setDataTambah({ ...dataTambah, dataText: value }) setDataTambah({ ...dataTambah, dataText: value })
} }
/> /> */}
<Flex direction={"column"} gap={"md"}> <Flex direction={"column"} gap={"md"}>
<Group> <Group>
<Text size="sm" c={"white"}> <Text size="sm" c={"white"}>
@@ -372,7 +373,7 @@ export default function KategoriPelayananSurat({
...dataTambah, ...dataTambah,
syaratDokumen: [ syaratDokumen: [
...dataTambah.syaratDokumen, ...dataTambah.syaratDokumen,
{ name: "", desc: "" }, { key: "", name: "", desc: "" },
], ],
}); });
}} }}
@@ -524,8 +525,8 @@ export default function KategoriPelayananSurat({
Data Pelengkap Data Pelengkap
</Text> </Text>
<List> <List>
{dataChoose?.dataText?.map((v: any) => ( {dataChoose?.dataPelengkap?.map((v: any) => (
<List.Item key={v.id}>{v}</List.Item> <List.Item key={v.id}>{v.name}</List.Item>
))} ))}
</List> </List>
</Flex> </Flex>

View File

@@ -5,6 +5,7 @@ import { getLastUpdated } from "../lib/get-last-updated"
import { generateNoPengajuanSurat } from "../lib/no-pengajuan-surat" import { generateNoPengajuanSurat } from "../lib/no-pengajuan-surat"
import { isValidPhone, normalizePhoneNumber } from "../lib/normalizePhone" import { isValidPhone, normalizePhoneNumber } from "../lib/normalizePhone"
import { prisma } from "../lib/prisma" import { prisma } from "../lib/prisma"
import { toSlug } from "../lib/slug_converter"
const PelayananRoute = new Elysia({ const PelayananRoute = new Elysia({
@@ -20,9 +21,21 @@ const PelayananRoute = new Elysia({
}, },
orderBy: { orderBy: {
name: "asc" name: "asc"
},
select: {
id: true,
name: true,
syaratDokumen: true,
dataPelengkap: true,
} }
}) })
return data
const dataFix = data.map(item => ({
...item,
link: `${process.env.BUN_PUBLIC_BASE_URL}/darmasaba/surat?jenis=${toSlug(item.name)}`
}));
return dataFix
}, { }, {
detail: { detail: {
summary: "List Kategori Pelayanan Surat", summary: "List Kategori Pelayanan Surat",