This commit is contained in:
2025-07-21 15:23:50 +08:00
parent e2f75ff3ad
commit 9dfcda7687
31 changed files with 1001 additions and 240 deletions

View File

@@ -0,0 +1,274 @@
import ApiFetch from "@/lib/api-fetch";
import { Prisma } from "@prisma/client";
import { toast } from "react-toastify";
import { proxy } from "valtio";
import { z } from "zod";
const templateFilosofiTriHitaForm = z.object({
judul: z.string().min(3, "Judul minimal 3 karakter"),
deskripsi: z.string().min(3, "Deskripsi minimal 3 karakter"),
});
type FilosofiTriHitaForm = Prisma.FilosofiTriHitaGetPayload<{
select: {
id: true;
judul: true;
deskripsi: true;
};
}>;
const stateFilosofiTriHita = proxy({
findById: {
data: null as FilosofiTriHitaForm | null,
loading: false,
initialize() {
stateFilosofiTriHita.findById.data = {
id: "",
judul: "",
deskripsi: "",
} as FilosofiTriHitaForm;
},
async load(id: string) {
try {
stateFilosofiTriHita.findById.loading = true;
const res =
await ApiFetch.api.lingkungan.konservasiadatbali.filosofitrihitakarana[
"find-by-id"
].get({
query: { id },
});
if (res.status === 200) {
stateFilosofiTriHita.findById.data = res.data?.data ?? null;
} else {
toast.error("Gagal mengambil data filosofi tri hita karana");
}
} catch (error) {
console.error((error as Error).message);
toast.error(
"Terjadi kesalahan saat mengambil data filosofi tri hita karana"
);
} finally {
stateFilosofiTriHita.findById.loading = false;
}
},
},
update: {
loading: false,
async save(data: FilosofiTriHitaForm) {
const cek = templateFilosofiTriHitaForm.safeParse(data);
if (!cek.success) {
const errors = cek.error.issues
.map((issue) => `${issue.path.join(".")}: ${issue.message}`)
.join(", ");
toast.error(`Form tidak valid: ${errors}`);
return;
}
try {
stateFilosofiTriHita.update.loading = true;
const res =
await ApiFetch.api.lingkungan.konservasiadatbali.filosofitrihitakarana[
"update"
].post(data);
if (res.status === 200) {
toast.success("Data filosofi tri hita karana berhasil diubah");
await stateFilosofiTriHita.findById.load(data.id);
} else {
toast.error("Gagal mengubah data filosofi tri hita karana");
}
} catch (error) {
console.error((error as Error).message);
toast.error(
"Terjadi kesalahan saat mengubah data filosofi tri hita karana"
);
} finally {
stateFilosofiTriHita.update.loading = false;
}
},
},
});
const templateNilaiKonservasiAdatForm = z.object({
judul: z.string().min(3, "Judul minimal 3 karakter"),
deskripsi: z.string().min(3, "Deskripsi minimal 3 karakter"),
});
type NilaiKonservasiAdatForm = Prisma.NilaiKonservasiAdatGetPayload<{
select: {
id: true;
judul: true;
deskripsi: true;
};
}>;
const stateNilaiKonservasiAdat = proxy({
findById: {
data: null as NilaiKonservasiAdatForm | null,
loading: false,
initialize() {
stateNilaiKonservasiAdat.findById.data = {
id: "",
judul: "",
deskripsi: "",
} as NilaiKonservasiAdatForm;
},
async load(id: string) {
try {
stateNilaiKonservasiAdat.findById.loading = true;
const res =
await ApiFetch.api.lingkungan.konservasiadatbali.nilaikonservasiadatbali[
"find-by-id"
].get({
query: { id },
});
if (res.status === 200) {
stateNilaiKonservasiAdat.findById.data = res.data?.data ?? null;
} else {
toast.error("Gagal mengambil data nilai konservasi adat");
}
} catch (error) {
console.error((error as Error).message);
toast.error(
"Terjadi kesalahan saat mengambil data nilai konservasi adat"
);
} finally {
stateNilaiKonservasiAdat.findById.loading = false;
}
},
},
update: {
loading: false,
async save(data: NilaiKonservasiAdatForm) {
const cek = templateNilaiKonservasiAdatForm.safeParse(data);
if (!cek.success) {
const errors = cek.error.issues
.map((issue) => `${issue.path.join(".")}: ${issue.message}`)
.join(", ");
toast.error(`Form tidak valid: ${errors}`);
return;
}
try {
stateNilaiKonservasiAdat.update.loading = true;
const res =
await ApiFetch.api.lingkungan.konservasiadatbali.nilaikonservasiadatbali[
"update"
].post(data);
if (res.status === 200) {
toast.success("Data nilai konservasi adat berhasil diubah");
await stateNilaiKonservasiAdat.findById.load(data.id);
} else {
toast.error("Gagal mengubah data nilai konservasi adat");
}
} catch (error) {
console.error((error as Error).message);
toast.error(
"Terjadi kesalahan saat mengubah data nilai konservasi adat"
);
} finally {
stateNilaiKonservasiAdat.update.loading = false;
}
},
},
});
const templateBentukKonservasiBerdasarkanAdatForm = z.object({
judul: z.string().min(3, "Judul minimal 3 karakter"),
deskripsi: z.string().min(3, "Deskripsi minimal 3 karakter"),
});
type BentukKonservasiBerdasarkanAdatForm =
Prisma.BentukKonservasiBerdasarkanAdatGetPayload<{
select: {
id: true;
judul: true;
deskripsi: true;
};
}>;
const stateBentukKonservasiBerdasarkanAdat = proxy({
findById: {
data: null as BentukKonservasiBerdasarkanAdatForm | null,
loading: false,
initialize() {
stateBentukKonservasiBerdasarkanAdat.findById.data = {
id: "",
judul: "",
deskripsi: "",
} as BentukKonservasiBerdasarkanAdatForm;
},
async load(id: string) {
try {
stateBentukKonservasiBerdasarkanAdat.findById.loading = true;
const res =
await ApiFetch.api.lingkungan.konservasiadatbali.bentukkonservasiberdasarkanadat[
"find-by-id"
].get({
query: { id },
});
if (res.status === 200) {
stateBentukKonservasiBerdasarkanAdat.findById.data =
res.data?.data ?? null;
} else {
toast.error(
"Gagal mengambil data bentuk konservasi berdasarkan adat"
);
}
} catch (error) {
console.error((error as Error).message);
toast.error(
"Terjadi kesalahan saat mengambil data bentuk konservasi berdasarkan adat"
);
} finally {
stateBentukKonservasiBerdasarkanAdat.findById.loading = false;
}
},
},
update: {
loading: false,
async save(data: BentukKonservasiBerdasarkanAdatForm) {
const cek = templateBentukKonservasiBerdasarkanAdatForm.safeParse(data);
if (!cek.success) {
const errors = cek.error.issues
.map((issue) => `${issue.path.join(".")}: ${issue.message}`)
.join(", ");
toast.error(`Form tidak valid: ${errors}`);
return;
}
try {
stateBentukKonservasiBerdasarkanAdat.update.loading = true;
const res =
await ApiFetch.api.lingkungan.konservasiadatbali.bentukkonservasiberdasarkanadat[
"update"
].post(data);
if (res.status === 200) {
toast.success(
"Data bentuk konservasi berdasarkan adat berhasil diubah"
);
await stateBentukKonservasiBerdasarkanAdat.findById.load(data.id);
} else {
toast.error("Gagal mengubah data bentuk konservasi berdasarkan adat");
}
} catch (error) {
console.error((error as Error).message);
toast.error(
"Terjadi kesalahan saat mengubah data bentuk konservasi berdasarkan adat"
);
} finally {
stateBentukKonservasiBerdasarkanAdat.update.loading = false;
}
},
},
});
const stateKonservasiAdatBali = proxy({
stateFilosofiTriHita,
stateNilaiKonservasiAdat,
stateBentukKonservasiBerdasarkanAdat,
});
export default stateKonservasiAdatBali;