add: validation for aspect management form modal
This commit is contained in:
parent
6416aeb243
commit
b0a77bb1f2
|
|
@ -93,8 +93,14 @@ export default function AspectFormModal() {
|
|||
|
||||
const handleSubmit = async (values: typeof form.values) => {
|
||||
try {
|
||||
// Name field validation
|
||||
if (values.name.trim() === "") {
|
||||
form.setErrors({ name: "Nama aspek harus diisi" });
|
||||
return;
|
||||
}
|
||||
|
||||
let payload: CreateAspectPayload | EditAspectPayload;
|
||||
|
||||
|
||||
if (formType === "create") {
|
||||
payload = {
|
||||
name: values.name,
|
||||
|
|
@ -108,6 +114,7 @@ export default function AspectFormModal() {
|
|||
};
|
||||
await createAspect(payload);
|
||||
} else if (formType === "edit") {
|
||||
// Add validation for aspect name here
|
||||
payload = {
|
||||
id: values.id,
|
||||
name: values.name,
|
||||
|
|
@ -125,18 +132,30 @@ export default function AspectFormModal() {
|
|||
};
|
||||
await updateAspect(payload);
|
||||
}
|
||||
|
||||
|
||||
queryClient.invalidateQueries({ queryKey: ["management-aspect"] });
|
||||
|
||||
|
||||
notifications.show({
|
||||
message: `Aspek ${formType === "create" ? "berhasil dibuat" : "berhasil diedit"}`,
|
||||
});
|
||||
|
||||
|
||||
navigate({ search: {} });
|
||||
} catch (error) {
|
||||
console.error("Error during submit:", error);
|
||||
|
||||
if (error instanceof Error && error.message === "Aspect name already exists") {
|
||||
notifications.show({
|
||||
message: "Nama aspek sudah ada. Silakan gunakan nama lain.",
|
||||
color: "red",
|
||||
});
|
||||
} else {
|
||||
notifications.show({
|
||||
message: "Terjadi kesalahan saat menyimpan aspek.",
|
||||
color: "red",
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
return (
|
||||
<Modal
|
||||
|
|
@ -152,36 +171,39 @@ export default function AspectFormModal() {
|
|||
label="Nama"
|
||||
{...form.getInputProps("name")}
|
||||
disabled={formType === "detail"}
|
||||
error={form.errors.name}
|
||||
/>
|
||||
|
||||
|
||||
{form.values.subAspects.map((field, index) => (
|
||||
<Group key={index} mt="md" align="center">
|
||||
<TextInput
|
||||
type="text"
|
||||
label={`Sub Aspek ${index + 1}`}
|
||||
value={field.name}
|
||||
onChange={(event) => {
|
||||
const newSubAspects = [...form.values.subAspects];
|
||||
newSubAspects[index] = { ...newSubAspects[index], name: event.target.value };
|
||||
<TextInput
|
||||
type="text"
|
||||
label={`Sub Aspek ${index + 1}`}
|
||||
value={field.name}
|
||||
onChange={(event) => {
|
||||
const newSubAspects = [...form.values.subAspects];
|
||||
newSubAspects[index] = { ...newSubAspects[index], name: event.target.value };
|
||||
form.setValues({ subAspects: newSubAspects });
|
||||
}}
|
||||
disabled={formType === "detail"}
|
||||
style={{ flex: 1 }}
|
||||
/>
|
||||
{formType === "detail" && (
|
||||
<Text>Jumlah Soal: {field.questionCount}</Text>
|
||||
)}
|
||||
{formType !== "detail" && (
|
||||
<Button
|
||||
className="mt-6"
|
||||
variant="outline"
|
||||
onClick={() => {
|
||||
const newSubAspects = form.values.subAspects.filter((_, i) => i !== index);
|
||||
form.setValues({ subAspects: newSubAspects });
|
||||
}}
|
||||
disabled={formType === "detail"}
|
||||
/>
|
||||
{formType === "detail" && (
|
||||
<Text>Jumlah Soal: {field.questionCount}</Text>
|
||||
)}
|
||||
{formType !== "detail" && (
|
||||
<Button
|
||||
variant="outline"
|
||||
onClick={() => {
|
||||
const newSubAspects = form.values.subAspects.filter((_, i) => i !== index);
|
||||
form.setValues({ subAspects: newSubAspects });
|
||||
}}
|
||||
>
|
||||
Hapus
|
||||
</Button>
|
||||
)}
|
||||
</Group>
|
||||
>
|
||||
Hapus
|
||||
</Button>
|
||||
)}
|
||||
</Group>
|
||||
))}
|
||||
|
||||
{formType !== "detail" && (
|
||||
|
|
@ -199,7 +221,7 @@ export default function AspectFormModal() {
|
|||
Tambah Sub Aspek
|
||||
</Button>
|
||||
)}
|
||||
|
||||
|
||||
{/* Buttons */}
|
||||
<Flex justify="flex-end" align="center" gap="lg" mt="lg">
|
||||
<Button
|
||||
|
|
@ -222,5 +244,5 @@ export default function AspectFormModal() {
|
|||
</Flex>
|
||||
</form>
|
||||
</Modal>
|
||||
);
|
||||
);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user