QC User & Admin Responsive : Menu Kesehatan - Ekonomi

This commit is contained in:
2025-10-03 10:17:06 +08:00
parent 8a6d8ed8db
commit f7fd9be255
55 changed files with 754 additions and 372 deletions

View File

@@ -29,10 +29,11 @@ function EditKontakDaruratKeamanan() {
const kontakState = useProxy(kontakDarurat.kontakDaruratKeamananState);
const [isLoading, setIsLoading] = useState(true);
// Remove the dependency on data in the initial state
const [formData, setFormData] = useState({
name: "",
icon: "" as IconKey | "",
kategoriId: [] as string[],
kategoriId: [] as string[], // Initialize as empty array
});
// Load data dari backend
@@ -41,7 +42,7 @@ function EditKontakDaruratKeamanan() {
try {
setIsLoading(true);
await kontakDarurat.kontakDaruratItem.findMany.load();
const id = params?.id as string;
if (id) {
const data = await kontakState.update.load(id);
@@ -49,7 +50,7 @@ function EditKontakDaruratKeamanan() {
setFormData({
name: data.nama || "",
icon: (data.icon as IconKey) || "",
kategoriId: data.kategoriId || [],
kategoriId: Array.isArray(data.kategoriId) ? data.kategoriId : [],
});
}
}
@@ -134,9 +135,9 @@ function EditKontakDaruratKeamanan() {
data={
Array.isArray(kontakDarurat.kontakDaruratItem.findMany.data)
? kontakDarurat.kontakDaruratItem.findMany.data.map((v) => ({
value: v.id,
label: v.nama,
}))
value: v.id,
label: v.nama,
}))
: []
}
clearable

View File

@@ -48,27 +48,29 @@ function EditLaporanPublik() {
const loadLaporanPublik = async () => {
const id = params?.id as string;
if (!id) return;
try {
const data = await stateLaporan.edit.load(id);
if (data) {
setFormData({
judul: data.judul || '',
lokasi: data.lokasi || '',
tanggalWaktu: data.tanggalWaktu || '',
status: data.status || '',
penanganan: data.penanganan?.[0]?.deskripsi || '',
kronologi: data.kronologi || '',
});
setFormData((prev) => ({
...prev,
judul: data.judul ?? prev.judul,
lokasi: data.lokasi ?? prev.lokasi,
tanggalWaktu: data.tanggalWaktu ?? prev.tanggalWaktu,
status: (data.status as Status) ?? prev.status,
penanganan: data.penanganan?.[0]?.deskripsi ?? prev.penanganan,
kronologi: data.kronologi ?? prev.kronologi,
}));
}
} catch (error) {
console.error('Error loading laporan publik:', error);
console.error("Error loading laporan publik:", error);
toast.error("Gagal mengambil data laporan publik");
}
};
loadLaporanPublik();
}, [params?.id, stateLaporan.edit]);
const handleChange = (field: string, value: string | Status) => {
setFormData((prev) => ({ ...prev, [field]: value }));

View File

@@ -10,6 +10,7 @@ import {
Group,
Paper,
Stack,
Text,
TextInput,
Title,
Tooltip,
@@ -61,9 +62,9 @@ function EditPencegahanKriminalitas() {
const handleChange =
(field: keyof typeof formData) =>
(e: React.ChangeEvent<HTMLInputElement>) => {
setFormData((prev) => ({ ...prev, [field]: e.target.value }));
};
(e: React.ChangeEvent<HTMLInputElement>) => {
setFormData((prev) => ({ ...prev, [field]: e.target.value }));
};
const handleSubmit = async () => {
const converted = convertYoutubeUrlToEmbed(formData.linkVideo);
@@ -128,13 +129,17 @@ function EditPencegahanKriminalitas() {
required
/>
<TextInput
label="Deskripsi Singkat"
placeholder="Masukkan deskripsi singkat"
value={formData.deskripsiSingkat}
onChange={handleChange('deskripsiSingkat')}
required
/>
<Box>
<Text fw="bold" fz="sm" mb={6}>
Deskripsi
</Text>
<EditEditor
value={formData.deskripsiSingkat}
onChange={(val) =>
setFormData((prev) => ({ ...prev, deskripsiSingkat: val }))
}
/>
</Box>
<Box>
<Title order={6} fw="bold" fz="sm" mb={6}>

View File

@@ -90,15 +90,17 @@ function CreatePencegahanKriminalitas() {
/>
{/* Deskripsi Singkat */}
<TextInput
label="Deskripsi Singkat"
placeholder="Masukkan deskripsi singkat"
defaultValue={kriminalitasState.create.form.deskripsiSingkat}
onChange={(e) => {
kriminalitasState.create.form.deskripsiSingkat = e.currentTarget.value;
}}
required
/>
<Box>
<Text fw="bold" fz="sm" mb={6}>
Deskripsi Singkat
</Text>
<CreateEditor
value={kriminalitasState.create.form.deskripsiSingkat}
onChange={(val) => {
kriminalitasState.create.form.deskripsiSingkat = val;
}}
/>
</Box>
{/* Deskripsi Panjang */}
<Box>

View File

@@ -105,9 +105,11 @@ function ListPencegahanKriminalitas({ search }: { search: string }) {
data.map((item) => (
<TableTr key={item.id}>
<TableTd>
<Text fw={500} truncate="end" lineClamp={1}>
<Box w={200}>
<Text fw={500} truncate="end" lineClamp={1}>
{item.judul}
</Text>
</Box>
</TableTd>
<TableTd>
<Box w={200}>