upd : update pengajuan surat
deskripsi: - update type form pada tambah dan update pengajuan surat - tampilan klo tidak ada data yg dicari pada update pengajuan surat - update seeder category pengajuan surat No Issues
This commit is contained in:
1
bun.lock
1
bun.lock
@@ -22,6 +22,7 @@
|
|||||||
"@types/lodash": "^4.17.20",
|
"@types/lodash": "^4.17.20",
|
||||||
"@types/uuid": "^11.0.0",
|
"@types/uuid": "^11.0.0",
|
||||||
"add": "^2.0.6",
|
"add": "^2.0.6",
|
||||||
|
"dayjs": "^1.11.19",
|
||||||
"echarts": "^6.0.0",
|
"echarts": "^6.0.0",
|
||||||
"echarts-for-react": "^3.0.5",
|
"echarts-for-react": "^3.0.5",
|
||||||
"elysia": "^1.4.15",
|
"elysia": "^1.4.15",
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
"@types/lodash": "^4.17.20",
|
"@types/lodash": "^4.17.20",
|
||||||
"@types/uuid": "^11.0.0",
|
"@types/uuid": "^11.0.0",
|
||||||
"add": "^2.0.6",
|
"add": "^2.0.6",
|
||||||
|
"dayjs": "^1.11.19",
|
||||||
"echarts": "^6.0.0",
|
"echarts": "^6.0.0",
|
||||||
"echarts-for-react": "^3.0.5",
|
"echarts-for-react": "^3.0.5",
|
||||||
"elysia": "^1.4.15",
|
"elysia": "^1.4.15",
|
||||||
|
|||||||
51
src/components/NotFoundPengajuanSurat.tsx
Normal file
51
src/components/NotFoundPengajuanSurat.tsx
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
import {
|
||||||
|
Button,
|
||||||
|
Center,
|
||||||
|
Group,
|
||||||
|
Stack,
|
||||||
|
Text,
|
||||||
|
Title
|
||||||
|
} from "@mantine/core"
|
||||||
|
import { IconSearch } from "@tabler/icons-react"
|
||||||
|
|
||||||
|
export function DataNotFound({
|
||||||
|
onRetry,
|
||||||
|
backTo
|
||||||
|
}: {
|
||||||
|
onRetry?: () => void
|
||||||
|
backTo?: () => void
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<Center mih={320}>
|
||||||
|
<Stack align="center" gap="sm">
|
||||||
|
<IconSearch size={64} opacity={0.5} />
|
||||||
|
|
||||||
|
<Title order={4}>Data Pengajuan Tidak Ditemukan</Title>
|
||||||
|
|
||||||
|
<Text size="sm" c="dimmed" ta="center" maw={380}>
|
||||||
|
Kami tidak dapat menemukan data pengajuan dengan nomor pengajuan yg diinputkan. Silakan periksa kembali data Anda.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Group mt="md">
|
||||||
|
{/* {onRetry && (
|
||||||
|
<Button
|
||||||
|
variant="light"
|
||||||
|
leftSection={<IconSearch size={16} />}
|
||||||
|
onClick={onRetry}
|
||||||
|
>
|
||||||
|
Cari Ulang
|
||||||
|
</Button>
|
||||||
|
)} */}
|
||||||
|
|
||||||
|
<Button
|
||||||
|
variant="outline"
|
||||||
|
// leftSection={<IconArrowLeft size={16} />}
|
||||||
|
onClick={backTo}
|
||||||
|
>
|
||||||
|
Cari Kembali
|
||||||
|
</Button>
|
||||||
|
</Group>
|
||||||
|
</Stack>
|
||||||
|
</Center>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { enumAgama, enumJenisKelamin, enumStatusHidup, enumStatusPerkawinan } from "./valueEnum";
|
||||||
|
|
||||||
export const categoryPelayananSurat = [
|
export const categoryPelayananSurat = [
|
||||||
{
|
{
|
||||||
id: "skbedabiodata",
|
id: "skbedabiodata",
|
||||||
@@ -21,17 +23,43 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
|
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
|
||||||
{ key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP" },
|
{ key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP", type: "text" },
|
||||||
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon" },
|
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon", type: "text" },
|
||||||
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon" },
|
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon", type: "date" },
|
||||||
{ key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemohon" },
|
{
|
||||||
{ key: "alamat", name: "Alamat", desc: "Alamat lengkap tempat tinggal" },
|
key: "jenis_kelamin",
|
||||||
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon" },
|
name: "Jenis Kelamin",
|
||||||
{ key: "dokumen", name: "Nama Dokumen", desc: "Jenis dokumen yang mengalami perbedaan biodata (cth : ijazah, sertifikat, dll)" },
|
desc: "Jenis kelamin pemohon",
|
||||||
{ key: "data_dokumen", name: "Data Dokumen", desc: "Data dokumen yg berbeda (cth : nama, tempat lahir, tanggal lahir, jenis kelamin, alamat, pekerjaan)" },
|
type: "enum",
|
||||||
{ key: "dokumen_a", name: "Data pada Dokumen A", desc: "Data biodata yang tertulis pada dokumen pertama" },
|
options: enumJenisKelamin
|
||||||
{ key: "dokumen_b", name: "Data pada Dokumen B", desc: "Data biodata yang tertulis pada dokumen kedua" }
|
},
|
||||||
|
{ key: "alamat", name: "Alamat", desc: "Alamat lengkap tempat tinggal", type: "text" },
|
||||||
|
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon", type: "text" },
|
||||||
|
{
|
||||||
|
key: "dokumen",
|
||||||
|
name: "Nama Dokumen",
|
||||||
|
desc: "Jenis dokumen yang mengalami perbedaan biodata (cth : ijazah, sertifikat, dll)",
|
||||||
|
type: "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "data_dokumen",
|
||||||
|
name: "Data Dokumen",
|
||||||
|
desc: "Data dokumen yg berbeda (cth : nama, tempat lahir, tanggal lahir, jenis kelamin, alamat, pekerjaan)",
|
||||||
|
type: "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "dokumen_a",
|
||||||
|
name: "Data pada Dokumen A",
|
||||||
|
desc: "Data biodata yang tertulis pada dokumen pertama",
|
||||||
|
type: "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "dokumen_b",
|
||||||
|
name: "Data pada Dokumen B",
|
||||||
|
desc: "Data biodata yang tertulis pada dokumen kedua",
|
||||||
|
type: "text"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -56,14 +84,26 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
|
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
|
||||||
{ key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP" },
|
{ key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP", type: "text" },
|
||||||
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon" },
|
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon", type: "text" },
|
||||||
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon" },
|
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon", type: "date" },
|
||||||
{ key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemohon" },
|
{
|
||||||
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
|
key: "jenis_kelamin",
|
||||||
{ key: "agama", name: "Agama", desc: "Agama pemohon" },
|
name: "Jenis Kelamin",
|
||||||
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon" }
|
desc: "Jenis kelamin pemohon",
|
||||||
|
type: "enum",
|
||||||
|
options: enumJenisKelamin
|
||||||
|
},
|
||||||
|
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
|
||||||
|
{
|
||||||
|
key: "agama",
|
||||||
|
name: "Agama",
|
||||||
|
desc: "Agama pemohon",
|
||||||
|
type: "enum",
|
||||||
|
options: enumAgama
|
||||||
|
},
|
||||||
|
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon", type: "text" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -88,12 +128,12 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nama_organisasi", name: "Nama Organisasi", desc: "Nama resmi organisasi" },
|
{ key: "nama_organisasi", name: "Nama Organisasi", desc: "Nama resmi organisasi", type: "text" },
|
||||||
{ key: "jenis_organisasi", name: "Jenis Organisasi", desc: "Jenis atau bentuk organisasi" },
|
{ key: "jenis_organisasi", name: "Jenis Organisasi", desc: "Jenis atau bentuk organisasi", type: "text" },
|
||||||
{ key: "alamat_organisasi", name: "Alamat Organisasi", desc: "Alamat sekretariat organisasi" },
|
{ key: "alamat_organisasi", name: "Alamat Organisasi", desc: "Alamat sekretariat organisasi", type: "text" },
|
||||||
{ key: "no_telepon", name: "Nomor Telepon", desc: "Nomor telepon organisasi" },
|
{ key: "no_telepon", name: "Nomor Telepon", desc: "Nomor telepon organisasi", type: "text" },
|
||||||
{ key: "nama_pimpinan", name: "Nama Pimpinan", desc: "Nama pimpinan organisasi" },
|
{ key: "nama_pimpinan", name: "Nama Pimpinan", desc: "Nama pimpinan organisasi", type: "text" },
|
||||||
{ key: "keperluan", name: "Keperluan", desc: "Keperluan pembuatan surat" }
|
{ key: "keperluan", name: "Keperluan", desc: "Keperluan pembuatan surat", type: "text" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -113,28 +153,35 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nama_anak", name: "Nama Anak", desc: "Nama bayi/anak" },
|
{ key: "nama_anak", name: "Nama Anak", desc: "Nama bayi/anak", type: "text" },
|
||||||
{ key: "tanggal_lahir_anak", name: "Tanggal Lahir Anak", desc: "Tanggal lahir anak" },
|
{ key: "tanggal_lahir_anak", name: "Tanggal Lahir Anak", desc: "Tanggal lahir anak", type: "date" },
|
||||||
{ key: "pukul_lahir", name: "Pukul Lahir", desc: "Waktu kelahiran anak" },
|
{ key: "pukul_lahir", name: "Pukul Lahir", desc: "Waktu kelahiran anak", type: "text" },
|
||||||
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat kelahiran anak" },
|
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat kelahiran anak", type: "text" },
|
||||||
{ key: "jenis_kelamin", name: "Jenis Kelamin Anak", desc: "Jenis kelamin anak" },
|
{
|
||||||
{ key: "anak_ke", name: "Anak Ke-", desc: "Urutan kelahiran anak" },
|
key: "jenis_kelamin",
|
||||||
{ key: "nik_ibu", name: "NIK Ibu", desc: "NIK ibu kandung" },
|
name: "Jenis Kelamin Anak",
|
||||||
{ key: "nama_ibu", name: "Nama Ibu", desc: "Nama lengkap ibu" },
|
desc: "Jenis kelamin anak",
|
||||||
{ key: "tempat_lahir_ibu", name: "Tempat Lahir Ibu", desc: "Tempat lahir ibu kandung" },
|
type: "enum",
|
||||||
{ key: "tanggal_lahir_ibu", name: "Tanggal Lahir Ibu", desc: "Tanggal lahir ibu kandung" },
|
options: enumJenisKelamin
|
||||||
{ key: "pekerjaan_ibu", name: "Pekerjaan Ibu", desc: "Pekerjaan ibu kandung" },
|
},
|
||||||
{ key: "alamat_ibu", name: "Alamat Ibu", desc: "Alamat ibu kandung" },
|
{ key: "anak_ke", name: "Anak Ke-", desc: "Urutan kelahiran anak", type: "number" },
|
||||||
{ key: "nama_ayah", name: "Nama Ayah", desc: "Nama lengkap ayah" },
|
{ key: "nik_ibu", name: "NIK Ibu", desc: "NIK ibu kandung", type: "number" },
|
||||||
{ key: "nik_ayah", name: "NIK Ayah", desc: "NIK ayah kandung" },
|
{ key: "nama_ibu", name: "Nama Ibu", desc: "Nama lengkap ibu", type: "text" },
|
||||||
{ key: "tempat_lahir_ayah", name: "Tempat Lahir Ayah", desc: "Tempat lahir ayah kandung" },
|
{ key: "tempat_lahir_ibu", name: "Tempat Lahir Ibu", desc: "Tempat lahir ibu kandung", type: "text" },
|
||||||
{ key: "tanggal_lahir_ayah", name: "Tanggal Lahir Ayah", desc: "Tanggal lahir ayah kandung" },
|
{ key: "tanggal_lahir_ibu", name: "Tanggal Lahir Ibu", desc: "Tanggal lahir ibu kandung", type: "date" },
|
||||||
{ key: "pekerjaan_ayah", name: "Pekerjaan Ayah", desc: "Pekerjaan ayah kandung" },
|
{ key: "pekerjaan_ibu", name: "Pekerjaan Ibu", desc: "Pekerjaan ibu kandung", type: "text" },
|
||||||
{ key: "alamat_ayah", name: "Alamat Ayah", desc: "Alamat ayah kandung" },
|
{ key: "alamat_ibu", name: "Alamat Ibu", desc: "Alamat ibu kandung", type: "text" },
|
||||||
{ key: "nama_pelapor", name: "Nama Pelapor", desc: "Nama pihak yang melaporkan" },
|
{ key: "nama_ayah", name: "Nama Ayah", desc: "Nama lengkap ayah", type: "text" },
|
||||||
{ key: "hubungan_pelapor", name: "Hubungan Pelapor", desc: "Hubungan pelapor dengan anak" },
|
{ key: "nik_ayah", name: "NIK Ayah", desc: "NIK ayah kandung", type: "number" },
|
||||||
{ key: "alamat_pelapor", name: "Alamat Pelapor", desc: "Alamat pelapor" }
|
{ key: "tempat_lahir_ayah", name: "Tempat Lahir Ayah", desc: "Tempat lahir ayah kandung", type: "text" },
|
||||||
|
{ key: "tanggal_lahir_ayah", name: "Tanggal Lahir Ayah", desc: "Tanggal lahir ayah kandung", type: "date" },
|
||||||
|
{ key: "pekerjaan_ayah", name: "Pekerjaan Ayah", desc: "Pekerjaan ayah kandung", type: "text" },
|
||||||
|
{ key: "alamat_ayah", name: "Alamat Ayah", desc: "Alamat ayah kandung", type: "text" },
|
||||||
|
{ key: "nama_pelapor", name: "Nama Pelapor", desc: "Nama pihak yang melaporkan", type: "text" },
|
||||||
|
{ key: "hubungan_pelapor", name: "Hubungan Pelapor", desc: "Hubungan pelapor dengan anak", type: "text" },
|
||||||
|
{ key: "alamat_pelapor", name: "Alamat Pelapor", desc: "Alamat pelapor", type: "text" }
|
||||||
]
|
]
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "skkelakuanbaik",
|
id: "skkelakuanbaik",
|
||||||
@@ -153,16 +200,29 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
|
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
|
||||||
{ key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP" },
|
{ key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP", type: "text" },
|
||||||
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir" },
|
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir", type: "text" },
|
||||||
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir" },
|
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir", type: "date" },
|
||||||
{ key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemohon" },
|
{
|
||||||
{ key: "agama", name: "Agama", desc: "Agama pemohon" },
|
key: "jenis_kelamin",
|
||||||
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
|
name: "Jenis Kelamin",
|
||||||
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon" },
|
desc: "Jenis kelamin pemohon",
|
||||||
{ key: "polsek", name: "Polsek Tujuan", desc: "Polsek tujuan pembuatan SKCK" }
|
type: "enum",
|
||||||
|
options: enumJenisKelamin
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "agama",
|
||||||
|
name: "Agama",
|
||||||
|
desc: "Agama pemohon",
|
||||||
|
type: "enum",
|
||||||
|
options: enumAgama
|
||||||
|
},
|
||||||
|
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
|
||||||
|
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon", type: "text" },
|
||||||
|
{ key: "polsek", name: "Polsek Tujuan", desc: "Polsek tujuan pembuatan SKCK", type: "text" }
|
||||||
]
|
]
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "skkematian",
|
id: "skkematian",
|
||||||
@@ -186,21 +246,27 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nik_pelapor", name: "NIK Pelapor", desc: "Nomor Induk Kependudukan pelapor" },
|
{ key: "nik_pelapor", name: "NIK Pelapor", desc: "Nomor Induk Kependudukan pelapor", type: "number" },
|
||||||
{ key: "nama_pelapor", name: "Nama Pelapor", desc: "Nama lengkap pelapor" },
|
{ key: "nama_pelapor", name: "Nama Pelapor", desc: "Nama lengkap pelapor", type: "text" },
|
||||||
{ key: "pekerjaan_pelapor", name: "Pekerjaan Pelapor", desc: "Pekerjaan pelapor" },
|
{ key: "pekerjaan_pelapor", name: "Pekerjaan Pelapor", desc: "Pekerjaan pelapor", type: "text" },
|
||||||
{ key: "alamat_pelapor", name: "Alamat Pelapor", desc: "Alamat tempat tinggal pelapor" },
|
{ key: "alamat_pelapor", name: "Alamat Pelapor", desc: "Alamat tempat tinggal pelapor", type: "text" },
|
||||||
{ key: "hubungan_pelapor", name: "Hubungan dengan Almarhum", desc: "Hubungan pelapor dengan almarhum" },
|
{ key: "hubungan_pelapor", name: "Hubungan dengan Almarhum", desc: "Hubungan pelapor dengan almarhum", type: "text" },
|
||||||
{ key: "nama_almarhum", name: "Nama Almarhum", desc: "Nama lengkap almarhum" },
|
{ key: "nama_almarhum", name: "Nama Almarhum", desc: "Nama lengkap almarhum", type: "text" },
|
||||||
{ key: "nik_almarhum", name: "NIK Almarhum", desc: "Nomor Induk Kependudukan almarhum" },
|
{ key: "nik_almarhum", name: "NIK Almarhum", desc: "Nomor Induk Kependudukan almarhum", type: "number" },
|
||||||
{ key: "tempat_lahir_almarhum", name: "Tempat Lahir Almarhum", desc: "Tempat lahir almarhum" },
|
{ key: "tempat_lahir_almarhum", name: "Tempat Lahir Almarhum", desc: "Tempat lahir almarhum", type: "text" },
|
||||||
{ key: "tanggal_lahir_almarhum", name: "Tanggal Lahir Almarhum", desc: "Tanggal lahir almarhum" },
|
{ key: "tanggal_lahir_almarhum", name: "Tanggal Lahir Almarhum", desc: "Tanggal lahir almarhum", type: "date" },
|
||||||
{ key: "alamat_almarhum", name: "Alamat Almarhum", desc: "Alamat terakhir almarhum" },
|
{ key: "alamat_almarhum", name: "Alamat Almarhum", desc: "Alamat terakhir almarhum", type: "text" },
|
||||||
{ key: "agama_almarhum", name: "Agama Almarhum", desc: "Agama almarhum" },
|
{
|
||||||
{ key: "tanggal_kematian", name: "Tanggal Kematian", desc: "Tanggal meninggal dunia" },
|
key: "agama_almarhum",
|
||||||
{ key: "waktu_kematian", name: "Waktu Kematian", desc: "Waktu meninggal dunia" },
|
name: "Agama Almarhum",
|
||||||
{ key: "tempat_kematian", name: "Tempat Kematian", desc: "Tempat meninggal dunia" },
|
desc: "Agama almarhum",
|
||||||
{ key: "penyebab_kematian", name: "Penyebab Kematian", desc: "Penyebab meninggal dunia" }
|
type: "enum",
|
||||||
|
options: enumAgama
|
||||||
|
},
|
||||||
|
{ key: "tanggal_kematian", name: "Tanggal Kematian", desc: "Tanggal meninggal dunia", type: "date" },
|
||||||
|
{ key: "waktu_kematian", name: "Waktu Kematian", desc: "Waktu meninggal dunia", type: "text" },
|
||||||
|
{ key: "tempat_kematian", name: "Tempat Kematian", desc: "Tempat meninggal dunia", type: "text" },
|
||||||
|
{ key: "penyebab_kematian", name: "Penyebab Kematian", desc: "Penyebab meninggal dunia", type: "text" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -225,14 +291,20 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nama", name: "Nama Lengkap", desc: "Nama pemohon" },
|
{ key: "nama", name: "Nama Lengkap", desc: "Nama pemohon", type: "text" },
|
||||||
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir" },
|
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir", type: "text" },
|
||||||
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir" },
|
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir", type: "date" },
|
||||||
{ key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemohon" },
|
{
|
||||||
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
|
key: "jenis_kelamin",
|
||||||
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon/orang tua" },
|
name: "Jenis Kelamin",
|
||||||
{ key: "penghasilan", name: "Penghasilan", desc: "Jumlah penghasilan per bulan" },
|
desc: "Jenis kelamin pemohon",
|
||||||
{ key: "alasan", name: "Alasan Permohonan", desc: "Alasan pengajuan surat penghasilan" }
|
type: "enum",
|
||||||
|
options: enumJenisKelamin
|
||||||
|
},
|
||||||
|
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
|
||||||
|
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon/orang tua", type: "text" },
|
||||||
|
{ key: "penghasilan", name: "Penghasilan", desc: "Jumlah penghasilan per bulan", type: "number" },
|
||||||
|
{ key: "alasan", name: "Alasan Permohonan", desc: "Alasan pengajuan surat penghasilan", type: "text" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -262,18 +334,18 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
|
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
|
||||||
{ key: "nama_pemilik", name: "Nama Pemilik", desc: "Nama pemilik usaha" },
|
{ key: "nama_pemilik", name: "Nama Pemilik", desc: "Nama pemilik usaha", type: "text" },
|
||||||
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir" },
|
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir", type: "text" },
|
||||||
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir" },
|
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir", type: "date" },
|
||||||
{ key: "alamat_pemilik", name: "Alamat Pemilik", desc: "Alamat pemilik usaha" },
|
{ key: "alamat_pemilik", name: "Alamat Pemilik", desc: "Alamat pemilik usaha", type: "text" },
|
||||||
{ key: "nama_usaha", name: "Nama Usaha", desc: "Nama usaha" },
|
{ key: "nama_usaha", name: "Nama Usaha", desc: "Nama usaha", type: "text" },
|
||||||
{ key: "bidang_usaha", name: "Bidang Usaha", desc: "Bidang atau jenis usaha" },
|
{ key: "bidang_usaha", name: "Bidang Usaha", desc: "Bidang atau jenis usaha", type: "text" },
|
||||||
{ key: "alamat_usaha", name: "Alamat Usaha", desc: "Alamat lokasi usaha" },
|
{ key: "alamat_usaha", name: "Alamat Usaha", desc: "Alamat lokasi usaha", type: "text" },
|
||||||
{ key: "status_tempat", name: "Status Tempat Usaha", desc: "Status kepemilikan tempat usaha" },
|
{ key: "status_tempat", name: "Status Tempat Usaha", desc: "Status kepemilikan tempat usaha", type: "text" },
|
||||||
{ key: "luas_usaha", name: "Luas Tempat Usaha", desc: "Luas tempat usaha (m²)" },
|
{ key: "luas_usaha", name: "Luas Tempat Usaha", desc: "Luas tempat usaha (m²)", type: "number" },
|
||||||
{ key: "jumlah_karyawan", name: "Jumlah Karyawan", desc: "Jumlah tenaga kerja" },
|
{ key: "jumlah_karyawan", name: "Jumlah Karyawan", desc: "Jumlah tenaga kerja", type: "number" },
|
||||||
{ key: "tujuan", name: "Tujuan Pembuatan Surat", desc: "Tujuan pembuatan surat keterangan" }
|
{ key: "tujuan", name: "Tujuan Pembuatan Surat", desc: "Tujuan pembuatan surat keterangan", type: "text" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -293,36 +365,12 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{
|
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan pemohon", type: "number" },
|
||||||
key: "nik",
|
{ key: "nama", name: "Nama Lengkap", desc: "Nama lengkap pemohon", type: "text" },
|
||||||
name: "NIK",
|
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon", type: "text" },
|
||||||
desc: "Nomor Induk Kependudukan pemohon"
|
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon", type: "date" },
|
||||||
},
|
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal pemohon", type: "text" },
|
||||||
{
|
{ key: "alasan", name: "Alasan Permohonan", desc: "Alasan pengajuan Surat Keterangan Tidak Mampu", type: "text" }
|
||||||
key: "nama",
|
|
||||||
name: "Nama Lengkap",
|
|
||||||
desc: "Nama lengkap pemohon"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "tempat_lahir",
|
|
||||||
name: "Tempat Lahir",
|
|
||||||
desc: "Tempat lahir pemohon"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "tanggal_lahir",
|
|
||||||
name: "Tanggal Lahir",
|
|
||||||
desc: "Tanggal lahir pemohon"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "alamat",
|
|
||||||
name: "Alamat",
|
|
||||||
desc: "Alamat tempat tinggal pemohon"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "alasan",
|
|
||||||
name: "Alasan Permohonan",
|
|
||||||
desc: "Alasan pengajuan Surat Keterangan Tidak Mampu"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -347,17 +395,35 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nama", name: "Nama Lengkap", desc: "Nama pemilik usaha" },
|
{ key: "nama", name: "Nama Lengkap", desc: "Nama pemilik usaha", type: "text" },
|
||||||
{ key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemilik usaha" },
|
{
|
||||||
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir" },
|
key: "jenis_kelamin",
|
||||||
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir" },
|
name: "Jenis Kelamin",
|
||||||
{ key: "negara", name: "Kewarganegaraan", desc: "Kewarganegaraan pemilik usaha" },
|
desc: "Jenis kelamin pemilik usaha",
|
||||||
{ key: "agama", name: "Agama", desc: "Agama pemilik usaha" },
|
type: "enum",
|
||||||
{ key: "status_perkawinan", name: "Status Perkawinan", desc: "Status perkawinan" },
|
options: enumJenisKelamin
|
||||||
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
|
},
|
||||||
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemilik usaha" },
|
{ key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir", type: "text" },
|
||||||
{ key: "jenis_usaha", name: "Jenis Usaha", desc: "Jenis usaha yang dijalankan" },
|
{ key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir", type: "date" },
|
||||||
{ key: "alamat_usaha", name: "Alamat Usaha", desc: "Alamat lokasi usaha" }
|
{ key: "negara", name: "Kewarganegaraan", desc: "Kewarganegaraan pemilik usaha", type: "text" },
|
||||||
|
{
|
||||||
|
key: "agama",
|
||||||
|
name: "Agama",
|
||||||
|
desc: "Agama pemilik usaha",
|
||||||
|
type: "enum",
|
||||||
|
options: enumAgama
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "status_perkawinan",
|
||||||
|
name: "Status Perkawinan",
|
||||||
|
desc: "Status perkawinan",
|
||||||
|
type: "enum",
|
||||||
|
options: enumStatusPerkawinan
|
||||||
|
},
|
||||||
|
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
|
||||||
|
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemilik usaha", type: "text" },
|
||||||
|
{ key: "jenis_usaha", name: "Jenis Usaha", desc: "Jenis usaha yang dijalankan", type: "text" },
|
||||||
|
{ key: "alamat_usaha", name: "Alamat Usaha", desc: "Alamat lokasi usaha", type: "text" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -377,17 +443,37 @@ export const categoryPelayananSurat = [
|
|||||||
],
|
],
|
||||||
dataText: [],
|
dataText: [],
|
||||||
dataPelengkap: [
|
dataPelengkap: [
|
||||||
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
|
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
|
||||||
{ key: "nama", name: "Nama Lengkap", desc: "Nama anak" },
|
{ key: "nama", name: "Nama Lengkap", desc: "Nama anak", type: "text" },
|
||||||
{ key: "tempat_lahir", name: "Tempat Lahir Anak", desc: "Tempat lahir anak" },
|
{ key: "tempat_lahir", name: "Tempat Lahir Anak", desc: "Tempat lahir anak", type: "text" },
|
||||||
{ key: "tanggal_lahir", name: "Tanggal Lahir Anak", desc: "Tanggal lahir anak" },
|
{ key: "tanggal_lahir", name: "Tanggal Lahir Anak", desc: "Tanggal lahir anak", type: "date" },
|
||||||
{ key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin anak" },
|
{
|
||||||
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
|
key: "jenis_kelamin",
|
||||||
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan (jika ada)" },
|
name: "Jenis Kelamin",
|
||||||
{ key: "nama_ayah", name: "Nama Ayah", desc: "Nama ayah kandung" },
|
desc: "Jenis kelamin anak",
|
||||||
{ key: "status_ayah", name: "Status Ayah", desc: "Status ayah (hidup / meninggal)" },
|
type: "enum",
|
||||||
{ key: "nama_ibu", name: "Nama Ibu", desc: "Nama ibu kandung" },
|
options: enumJenisKelamin
|
||||||
{ key: "status_ibu", name: "Status Ibu", desc: "Status ibu (hidup / meninggal)" }
|
},
|
||||||
|
{ key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
|
||||||
|
{ key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan (jika ada)", type: "text" },
|
||||||
|
|
||||||
|
{ key: "nama_ayah", name: "Nama Ayah", desc: "Nama ayah kandung", type: "text" },
|
||||||
|
{
|
||||||
|
key: "status_ayah",
|
||||||
|
name: "Status Ayah",
|
||||||
|
desc: "Status ayah (hidup / meninggal)",
|
||||||
|
type: "enum",
|
||||||
|
options: enumStatusHidup
|
||||||
|
},
|
||||||
|
{ key: "nama_ibu", name: "Nama Ibu", desc: "Nama ibu kandung", type: "text" },
|
||||||
|
{
|
||||||
|
key: "status_ibu",
|
||||||
|
name: "Status Ibu",
|
||||||
|
desc: "Status ibu (hidup / meninggal)",
|
||||||
|
type: "enum",
|
||||||
|
options: enumStatusHidup
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
25
src/lib/valueEnum.ts
Normal file
25
src/lib/valueEnum.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
export const enumJenisKelamin = [
|
||||||
|
{ label: "Laki-laki", value: "Laki-laki" },
|
||||||
|
{ label: "Perempuan", value: "Perempuan" }
|
||||||
|
];
|
||||||
|
|
||||||
|
export const enumAgama = [
|
||||||
|
{ label: "Islam", value: "Islam" },
|
||||||
|
{ label: "Kristen", value: "Kristen" },
|
||||||
|
{ label: "Katolik", value: "Katolik" },
|
||||||
|
{ label: "Hindu", value: "Hindu" },
|
||||||
|
{ label: "Buddha", value: "Buddha" },
|
||||||
|
{ label: "Konghucu", value: "Konghucu" }
|
||||||
|
];
|
||||||
|
|
||||||
|
export const enumStatusHidup = [
|
||||||
|
{ label: "Hidup", value: "Hidup" },
|
||||||
|
{ label: "Meninggal", value: "Meninggal" }
|
||||||
|
];
|
||||||
|
|
||||||
|
export const enumStatusPerkawinan = [
|
||||||
|
{ label: "Belum Kawin", value: "Belum Kawin" },
|
||||||
|
{ label: "Kawin", value: "Kawin" },
|
||||||
|
{ label: "Cerai Hidup", value: "Cerai Hidup" },
|
||||||
|
{ label: "Cerai Mati", value: "Cerai Mati" }
|
||||||
|
];
|
||||||
@@ -22,13 +22,19 @@ import {
|
|||||||
TextInput,
|
TextInput,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
|
import { DateInput } from "@mantine/dates";
|
||||||
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
|
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
|
||||||
import {
|
import {
|
||||||
IconBuildingCommunity,
|
IconBuildingCommunity,
|
||||||
|
IconCategory,
|
||||||
|
IconFiles,
|
||||||
IconInfoCircle,
|
IconInfoCircle,
|
||||||
IconUpload,
|
IconNotes,
|
||||||
IconUser,
|
IconPhone,
|
||||||
|
IconUpload
|
||||||
} from "@tabler/icons-react";
|
} from "@tabler/icons-react";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import "dayjs/locale/id";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { useLocation, useNavigate } from "react-router-dom";
|
import { useLocation, useNavigate } from "react-router-dom";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
@@ -310,44 +316,15 @@ export default function FormSurat() {
|
|||||||
</div>
|
</div>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
<Badge radius="sm">Form Length: 3 Sections</Badge>
|
<Badge radius="sm">Form Length: 4 Sections</Badge>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Stack gap="lg">
|
<Stack gap="lg">
|
||||||
{/* Header Section */}
|
|
||||||
<FormSection
|
<FormSection
|
||||||
title="Pemohon"
|
title="Jenis Surat Pengajuan"
|
||||||
icon={<IconUser size={16} />}
|
icon={<IconCategory size={16} />}
|
||||||
description="Informasi identitas pemohon"
|
|
||||||
>
|
>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.Col span={6}>
|
|
||||||
<TextInput
|
|
||||||
label={<FieldLabel label="Nama" hint="Nama pemohon" />}
|
|
||||||
placeholder="Budi Setiawan"
|
|
||||||
value={formSurat.nama}
|
|
||||||
onChange={(e) =>
|
|
||||||
validationForm({ key: "nama", value: e.target.value })
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</Grid.Col>
|
|
||||||
|
|
||||||
<Grid.Col span={6}>
|
|
||||||
<TextInput
|
|
||||||
label={
|
|
||||||
<FieldLabel
|
|
||||||
label="Nomor Telephone"
|
|
||||||
hint="Nomor telephone yang dapat dihubungi / terhubung dengan whatsapp"
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
placeholder="08123456789"
|
|
||||||
value={formSurat.phone}
|
|
||||||
onChange={(e) =>
|
|
||||||
validationForm({ key: "phone", value: e.target.value })
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</Grid.Col>
|
|
||||||
|
|
||||||
<Grid.Col span={12}>
|
<Grid.Col span={12}>
|
||||||
<Select
|
<Select
|
||||||
label={
|
label={
|
||||||
@@ -371,16 +348,92 @@ export default function FormSurat() {
|
|||||||
</Grid>
|
</Grid>
|
||||||
</FormSection>
|
</FormSection>
|
||||||
|
|
||||||
|
|
||||||
|
{/* Kontak Section */}
|
||||||
|
<FormSection
|
||||||
|
title="Kontak"
|
||||||
|
icon={<IconPhone size={16} />}
|
||||||
|
description="Informasi kontak yg dapat dihubungi"
|
||||||
|
>
|
||||||
|
<Grid>
|
||||||
|
<Grid.Col span={6}>
|
||||||
|
<TextInput
|
||||||
|
label={<FieldLabel label="Nama" hint="Nama kontak" />}
|
||||||
|
placeholder="Budi Setiawan"
|
||||||
|
value={formSurat.nama}
|
||||||
|
onChange={(e) =>
|
||||||
|
validationForm({ key: "nama", value: e.target.value })
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Grid.Col>
|
||||||
|
|
||||||
|
<Grid.Col span={6}>
|
||||||
|
<TextInput
|
||||||
|
label={
|
||||||
|
<FieldLabel
|
||||||
|
label="Nomor Telephone"
|
||||||
|
hint="Nomor telephone yang dapat dihubungi / terhubung dengan whatsapp"
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
placeholder="08123456789"
|
||||||
|
value={formSurat.phone}
|
||||||
|
onChange={(e) =>
|
||||||
|
validationForm({ key: "phone", value: e.target.value })
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Grid.Col>
|
||||||
|
</Grid>
|
||||||
|
</FormSection>
|
||||||
|
|
||||||
{jenisSuratFix.id != "" && dataSurat && dataSurat.dataPelengkap && (
|
{jenisSuratFix.id != "" && dataSurat && dataSurat.dataPelengkap && (
|
||||||
<>
|
<>
|
||||||
<FormSection
|
<FormSection
|
||||||
title="Data Pelengkap"
|
title="Data Yang Diperlukan"
|
||||||
description="Data pelengkap yang diperlukan"
|
description="Data yang diperlukan untuk mengajukan surat"
|
||||||
|
icon={<IconNotes size={16} />}
|
||||||
>
|
>
|
||||||
<Grid>
|
<Grid>
|
||||||
{dataSurat.dataPelengkap.map((item: any, index: number) => (
|
{dataSurat.dataPelengkap.map((item: any, index: number) => (
|
||||||
<Grid.Col span={6} key={index}>
|
<Grid.Col span={6} key={index}>
|
||||||
|
{
|
||||||
|
item.type == "enum"
|
||||||
|
?
|
||||||
|
<Select
|
||||||
|
label={
|
||||||
|
<FieldLabel label={item.name} hint={item.desc} />
|
||||||
|
}
|
||||||
|
data={item.options ?? []}
|
||||||
|
placeholder={item.name}
|
||||||
|
onChange={(e) => {
|
||||||
|
validationForm({
|
||||||
|
key: "dataPelengkap",
|
||||||
|
value: { key: item.key, value: e }
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
value={formSurat.dataPelengkap.find((n: any) => n.key == item.key)?.value}
|
||||||
|
/>
|
||||||
|
: item.type == "date"
|
||||||
|
?
|
||||||
|
<DateInput
|
||||||
|
locale="id"
|
||||||
|
valueFormat="DD MMMM YYYY"
|
||||||
|
label={
|
||||||
|
<FieldLabel label={item.name} hint={item.desc} />
|
||||||
|
}
|
||||||
|
placeholder={item.name}
|
||||||
|
onChange={(e) => {
|
||||||
|
const formatted = e
|
||||||
|
? dayjs(e).locale("id").format("DD MMMM YYYY")
|
||||||
|
: "";
|
||||||
|
validationForm({
|
||||||
|
key: "dataPelengkap",
|
||||||
|
value: { key: item.key, value: formatted },
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
:
|
||||||
<TextInput
|
<TextInput
|
||||||
|
type={item.type}
|
||||||
label={
|
label={
|
||||||
<FieldLabel label={item.name} hint={item.desc} />
|
<FieldLabel label={item.name} hint={item.desc} />
|
||||||
}
|
}
|
||||||
@@ -397,6 +450,8 @@ export default function FormSurat() {
|
|||||||
)?.value
|
)?.value
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
}
|
||||||
|
|
||||||
</Grid.Col>
|
</Grid.Col>
|
||||||
))}
|
))}
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -405,6 +460,7 @@ export default function FormSurat() {
|
|||||||
<FormSection
|
<FormSection
|
||||||
title="Syarat Dokumen"
|
title="Syarat Dokumen"
|
||||||
description="Syarat dokumen yang diperlukan"
|
description="Syarat dokumen yang diperlukan"
|
||||||
|
icon={<IconFiles size={16} />}
|
||||||
>
|
>
|
||||||
<Grid>
|
<Grid>
|
||||||
{dataSurat.syaratDokumen.map((item: any, index: number) => (
|
{dataSurat.syaratDokumen.map((item: any, index: number) => (
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import FullScreenLoading from "@/components/FullScreenLoading";
|
import FullScreenLoading from "@/components/FullScreenLoading";
|
||||||
import ModalFile from "@/components/ModalFile";
|
import ModalFile from "@/components/ModalFile";
|
||||||
|
import { DataNotFound } from "@/components/NotFoundPengajuanSurat";
|
||||||
import notification from "@/components/notificationGlobal";
|
import notification from "@/components/notificationGlobal";
|
||||||
import SuccessPengajuan from "@/components/SuccessPengajuanSurat";
|
import SuccessPengajuan from "@/components/SuccessPengajuanSurat";
|
||||||
import apiFetch from "@/lib/apiFetch";
|
import apiFetch from "@/lib/apiFetch";
|
||||||
|
import { parseTanggalID } from "@/server/lib/stringToDate";
|
||||||
import {
|
import {
|
||||||
ActionIcon,
|
ActionIcon,
|
||||||
Alert,
|
Alert,
|
||||||
@@ -18,17 +20,23 @@ import {
|
|||||||
Grid,
|
Grid,
|
||||||
Group,
|
Group,
|
||||||
Modal,
|
Modal,
|
||||||
|
Select,
|
||||||
Stack,
|
Stack,
|
||||||
Text,
|
Text,
|
||||||
TextInput,
|
TextInput,
|
||||||
Tooltip
|
Tooltip
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
|
import { DateInput } from "@mantine/dates";
|
||||||
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
|
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
|
||||||
import {
|
import {
|
||||||
IconBuildingCommunity,
|
IconBuildingCommunity,
|
||||||
|
IconFiles,
|
||||||
IconInfoCircle,
|
IconInfoCircle,
|
||||||
|
IconNotes,
|
||||||
IconUpload
|
IconUpload
|
||||||
} from "@tabler/icons-react";
|
} from "@tabler/icons-react";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import "dayjs/locale/id";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { useLocation, useNavigate } from "react-router-dom";
|
import { useLocation, useNavigate } from "react-router-dom";
|
||||||
@@ -72,12 +80,15 @@ export default function UpdateDataSurat() {
|
|||||||
const { search } = useLocation();
|
const { search } = useLocation();
|
||||||
const query = new URLSearchParams(search);
|
const query = new URLSearchParams(search);
|
||||||
const noPengajuan = query.get("pengajuan");
|
const noPengajuan = query.get("pengajuan");
|
||||||
|
const [found, setFound] = useState(true);
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container size="md" w={"100%"}>
|
<Container size="md" w={"100%"}>
|
||||||
<Box>
|
<Box>
|
||||||
<Stack gap="lg">
|
<Stack gap="lg">
|
||||||
|
{
|
||||||
|
found &&
|
||||||
<Group justify="space-between" align="center" mt={"lg"}>
|
<Group justify="space-between" align="center" mt={"lg"}>
|
||||||
<Group align="center">
|
<Group align="center">
|
||||||
<IconBuildingCommunity size={28} />
|
<IconBuildingCommunity size={28} />
|
||||||
@@ -91,15 +102,19 @@ export default function UpdateDataSurat() {
|
|||||||
</div>
|
</div>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
|
}
|
||||||
<Stack gap="lg" mb="lg">
|
<Stack gap="lg" mb="lg">
|
||||||
{
|
{
|
||||||
!noPengajuan ? (
|
!noPengajuan ? (
|
||||||
<SearchData />
|
<SearchData />
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
<DataUpdate noPengajuan={noPengajuan} />
|
found ? (
|
||||||
|
<DataUpdate noPengajuan={noPengajuan} onValidate={(e) => { setFound(e) }} />
|
||||||
|
) : (
|
||||||
|
<DataNotFound backTo={() => navigate("/darmasaba/update-data-surat")} />
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
</Stack>
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Box>
|
</Box>
|
||||||
@@ -338,7 +353,7 @@ function SearchData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
|
function DataUpdate({ noPengajuan, onValidate }: { noPengajuan: string, onValidate: (e: boolean) => void }) {
|
||||||
const [opened, { open, close }] = useDisclosure(false)
|
const [opened, { open, close }] = useDisclosure(false)
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const [sukses, setSukses] = useState(false)
|
const [sukses, setSukses] = useState(false)
|
||||||
@@ -356,20 +371,23 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
|
|||||||
try {
|
try {
|
||||||
const res = await apiFetch.api.pelayanan["detail-data"].post({ nomerPengajuan: noPengajuan });
|
const res = await apiFetch.api.pelayanan["detail-data"].post({ nomerPengajuan: noPengajuan });
|
||||||
if (res.data && res.data.success === true) {
|
if (res.data && res.data.success === true) {
|
||||||
|
onValidate(true)
|
||||||
setDataPelengkap(res.data.dataPelengkap || []);
|
setDataPelengkap(res.data.dataPelengkap || []);
|
||||||
setDataSyaratDokumen(res.data.syaratDokumen || []);
|
setDataSyaratDokumen(res.data.syaratDokumen || []);
|
||||||
setDataPengajuan(res.data.pengajuan || {});
|
setDataPengajuan(res.data.pengajuan || {});
|
||||||
|
|
||||||
setStatus(res.data.pengajuan && 'status' in res.data.pengajuan ? res.data.pengajuan.status : "");
|
setStatus(res.data.pengajuan && 'status' in res.data.pengajuan ? res.data.pengajuan.status : "");
|
||||||
} else {
|
} else {
|
||||||
notification({
|
// notification({
|
||||||
title: "Error",
|
// title: "Error",
|
||||||
message: res.data?.message || "Gagal memuat data",
|
// message: res.data?.message || "Gagal memuat data",
|
||||||
type: "error",
|
// type: "error",
|
||||||
});
|
// });
|
||||||
|
onValidate(false)
|
||||||
setDataPelengkap([]);
|
setDataPelengkap([]);
|
||||||
setDataSyaratDokumen([]);
|
setDataSyaratDokumen([]);
|
||||||
setDataPengajuan({});
|
setDataPengajuan({});
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching data:', error);
|
console.error('Error fetching data:', error);
|
||||||
@@ -559,13 +577,59 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
|
|||||||
&& <Alert variant="light" color="yellow" radius="lg" title={`Data pengajuan surat ini tidak dapat diupdate karena berstatus ${status}.`} icon={<span style={{ fontSize: '1.2rem' }}>⚠</span>} />
|
&& <Alert variant="light" color="yellow" radius="lg" title={`Data pengajuan surat ini tidak dapat diupdate karena berstatus ${status}.`} icon={<span style={{ fontSize: '1.2rem' }}>⚠</span>} />
|
||||||
}
|
}
|
||||||
<FormSection
|
<FormSection
|
||||||
title="Data Pelengkap"
|
title="Data Yang Diperlukan"
|
||||||
description="Data pelengkap yang diperlukan"
|
description="Data yang diperlukan"
|
||||||
|
icon={<IconNotes size={16} />}
|
||||||
>
|
>
|
||||||
<Grid>
|
<Grid>
|
||||||
{dataPelengkap.map((item: any, index: number) => (
|
{dataPelengkap.map((item: any, index: number) => (
|
||||||
<Grid.Col span={6} key={index}>
|
<Grid.Col span={6} key={index}>
|
||||||
<TextInput
|
{
|
||||||
|
item.type == "enum"
|
||||||
|
?
|
||||||
|
<Select
|
||||||
|
label={
|
||||||
|
<FieldLabel label={item.name} hint={item.desc} />
|
||||||
|
}
|
||||||
|
data={item.options ?? []}
|
||||||
|
placeholder={item.name}
|
||||||
|
onChange={(e) => {
|
||||||
|
validationForm({
|
||||||
|
kategori: "dataPelengkap",
|
||||||
|
value: { id: item.id, key: item.key, value: e }
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
value={formSurat.dataPelengkap.find((n: any) => n.key == item.key)?.value || dataPelengkap.find((n: any) => n.key == item.key)?.value}
|
||||||
|
/>
|
||||||
|
: item.type == "date"
|
||||||
|
?
|
||||||
|
<DateInput
|
||||||
|
locale="id"
|
||||||
|
valueFormat="DD MMMM YYYY"
|
||||||
|
label={
|
||||||
|
<FieldLabel label={item.name} hint={item.desc} />
|
||||||
|
}
|
||||||
|
placeholder={item.name}
|
||||||
|
onChange={(e) => {
|
||||||
|
const formatted = e
|
||||||
|
? dayjs(e).locale("id").format("DD MMMM YYYY")
|
||||||
|
: "";
|
||||||
|
validationForm({
|
||||||
|
kategori: "dataPelengkap",
|
||||||
|
value: { id: item.id, key: item.key, value: formatted },
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
value={
|
||||||
|
formSurat.dataPelengkap.find((n: any) => n.key === item.key)?.value ?
|
||||||
|
parseTanggalID(
|
||||||
|
formSurat.dataPelengkap.find((n: any) => n.key === item.key)?.value
|
||||||
|
) :
|
||||||
|
parseTanggalID(
|
||||||
|
item.value
|
||||||
|
)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
: <TextInput
|
||||||
label={
|
label={
|
||||||
<FieldLabel label={item.name} hint={item.desc} />
|
<FieldLabel label={item.name} hint={item.desc} />
|
||||||
}
|
}
|
||||||
@@ -579,6 +643,7 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
|
|||||||
value={formSurat.dataPelengkap.find((n) => n.id === item.id)?.value ?? dataPelengkap.find((n: any) => n.key == item.key,)?.value}
|
value={formSurat.dataPelengkap.find((n) => n.id === item.id)?.value ?? dataPelengkap.find((n: any) => n.key == item.key,)?.value}
|
||||||
disabled={status != "ditolak" && status != "antrian"}
|
disabled={status != "ditolak" && status != "antrian"}
|
||||||
/>
|
/>
|
||||||
|
}
|
||||||
</Grid.Col>
|
</Grid.Col>
|
||||||
))}
|
))}
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -587,6 +652,7 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
|
|||||||
<FormSection
|
<FormSection
|
||||||
title="Syarat Dokumen"
|
title="Syarat Dokumen"
|
||||||
description="Syarat dokumen yang diperlukan"
|
description="Syarat dokumen yang diperlukan"
|
||||||
|
icon={<IconFiles size={16} />}
|
||||||
>
|
>
|
||||||
<Grid>
|
<Grid>
|
||||||
{dataSyaratDokumen.map((item: any, index: number) => (
|
{dataSyaratDokumen.map((item: any, index: number) => (
|
||||||
@@ -611,7 +677,7 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
|
|||||||
</FormSection>
|
</FormSection>
|
||||||
|
|
||||||
<Group justify="right" mt="md">
|
<Group justify="right" mt="md">
|
||||||
<Button onClick={() => { onChecking() }}>Kirim</Button>
|
<Button onClick={() => { onChecking() }} disabled={status != "ditolak" && status != "antrian"}>Kirim</Button>
|
||||||
</Group>
|
</Group>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
|
|||||||
11
src/server/lib/stringToDate.ts
Normal file
11
src/server/lib/stringToDate.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import dayjs from "dayjs";
|
||||||
|
import customParseFormat from "dayjs/plugin/customParseFormat";
|
||||||
|
import "dayjs/locale/id";
|
||||||
|
dayjs.extend(customParseFormat);
|
||||||
|
|
||||||
|
export function parseTanggalID( value: string ): Date | null {
|
||||||
|
if (!value) return null;
|
||||||
|
|
||||||
|
const parsed = dayjs(value, "DD MMMM YYYY", "id", true);
|
||||||
|
return parsed.isValid() ? parsed.toDate() : null;
|
||||||
|
}
|
||||||
@@ -334,7 +334,6 @@ const PelayananRoute = new Elysia({
|
|||||||
.map(({ order, ...rest }) => rest); // hapus order
|
.map(({ order, ...rest }) => rest); // hapus order
|
||||||
|
|
||||||
|
|
||||||
console.log(dataTextFix)
|
|
||||||
const dataHistory = await prisma.historyPelayanan.findMany({
|
const dataHistory = await prisma.historyPelayanan.findMany({
|
||||||
where: {
|
where: {
|
||||||
idPengajuanLayanan: data?.id,
|
idPengajuanLayanan: data?.id,
|
||||||
@@ -689,6 +688,11 @@ const PelayananRoute = new Elysia({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const dataPelengkapList = (data?.CategoryPelayanan?.dataPelengkap ?? []) as {
|
const dataPelengkapList = (data?.CategoryPelayanan?.dataPelengkap ?? []) as {
|
||||||
|
type: string;
|
||||||
|
options?: {
|
||||||
|
label: string,
|
||||||
|
value: string
|
||||||
|
}[];
|
||||||
name: string;
|
name: string;
|
||||||
desc: string;
|
desc: string;
|
||||||
key: string;
|
key: string;
|
||||||
@@ -711,6 +715,8 @@ const PelayananRoute = new Elysia({
|
|||||||
value: item.value,
|
value: item.value,
|
||||||
desc: ref?.desc ?? "",
|
desc: ref?.desc ?? "",
|
||||||
name: ref?.name ?? "",
|
name: ref?.name ?? "",
|
||||||
|
type: ref?.type ?? "",
|
||||||
|
options: ref?.options ?? [],
|
||||||
order: ref?.order ?? Infinity,
|
order: ref?.order ?? Infinity,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user