From e0c704a6eae8ade51fc8ccec15c361b361ebfab8 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 7 Oct 2024 14:07:44 +0800 Subject: [PATCH] upd: tugas divisi Deskripsi: - validasi tambah tugas divisi - validasi edit tugas diviis No Issues --- src/module/task/ui/create_task.tsx | 85 ++++++++++++++++--------- src/module/task/ui/edit_detail_task.tsx | 33 +++------- src/module/task/ui/edit_task.tsx | 43 ++++++------- 3 files changed, 84 insertions(+), 77 deletions(-) diff --git a/src/module/task/ui/create_task.tsx b/src/module/task/ui/create_task.tsx index f6e5bec..510ffd4 100644 --- a/src/module/task/ui/create_task.tsx +++ b/src/module/task/ui/create_task.tsx @@ -1,25 +1,24 @@ "use client"; import { keyWibu, LayoutDrawer, LayoutNavbarNew, TEMA } from "@/module/_global"; -import { Avatar, Box, Button, Center, Divider, Flex, Grid, Group, Input, rem, SimpleGrid, Stack, Text, TextInput } from "@mantine/core"; +import LayoutModal from "@/module/_global/layout/layout_modal"; +import { useHookstate } from "@hookstate/core"; +import { Avatar, Box, Button, Divider, Flex, Grid, Group, rem, SimpleGrid, Stack, Text, TextInput } from "@mantine/core"; +import { Dropzone } from '@mantine/dropzone'; +import { useMediaQuery } from "@mantine/hooks"; +import _ from "lodash"; import { useParams, useRouter } from "next/navigation"; -import React, { useRef, useState } from "react"; +import { useRef, useState } from "react"; +import toast from "react-hot-toast"; +import { FaTrash } from "react-icons/fa6"; import { IoIosArrowDropright } from "react-icons/io"; -import { BsFiletypeCsv } from "react-icons/bs"; +import { useWibuRealtime } from "wibu-realtime"; +import { funCreateTask } from "../lib/api_task"; +import { IFormDateTask, IFormMemberTask, IListFileTask } from "../lib/type_task"; +import { globalMemberTask } from "../lib/val_task"; +import ViewDateEndTask from "./create_date_end_task"; import CreateUsersProject from "./create_users_project"; import ResultsDateAndTask from "./results_date-and_task"; import ResultsFile from "./results_file"; -import { useHookstate } from "@hookstate/core"; -import { globalMemberTask } from "../lib/val_task"; -import ViewDateEndTask from "./create_date_end_task"; -import { IFormDateTask, IFormMemberTask, IListFileTask } from "../lib/type_task"; -import { Dropzone } from '@mantine/dropzone'; -import toast from "react-hot-toast"; -import _ from "lodash"; -import { FaTrash } from "react-icons/fa6"; -import LayoutModal from "@/module/_global/layout/layout_modal"; -import { funCreateTask } from "../lib/api_task"; -import { useMediaQuery } from "@mantine/hooks"; -import { useWibuRealtime } from "wibu-realtime"; export default function CreateTask() { const router = useRouter() @@ -44,8 +43,6 @@ export default function CreateTask() { const tema = useHookstate(TEMA) const [touched, setTouched] = useState({ title: false, - task: false, - member: false }); const [data, setData] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, @@ -103,6 +100,44 @@ export default function CreateTask() { } + function onCheck() { + const cek = checkAll() + if (!cek) + return false + + if (dataTask.length == 0) + return toast.error("Error! silahkan tambahkan tugas") + + if (memberValue.length == 0) + return toast.error("Error! silahkan pilih anggota") + + setOpenModal(true) + } + + + function checkAll() { + let nilai = true + if (title === "") { + setTouched(touched => ({ ...touched, title: true })) + nilai = false + } + return nilai + } + + + function onValidation(kategori: string, val: string) { + if (kategori == 'title') { + setTitle(val) + if (val === "") { + setTouched({ ...touched, title: true }) + } else { + setTouched({ ...touched, title: false }) + } + } + } + + + if (openTugas) return { setOpenTugas(false) }} onSet={(val) => { setDataTask([...dataTask, val]) setOpenTugas(false) @@ -127,11 +162,7 @@ export default function CreateTask() { size="md" label="Judul Tugas" value={title} - onChange={(e) => { - setTitle(e.target.value) - setTouched({ ...touched, title: false }) - }} - onBlur={() => setTouched({ ...touched, title: true })} + onChange={(e) => { onValidation('title', e.target.value) }} required error={ touched.title && ( @@ -291,15 +322,7 @@ export default function CreateTask() { bg={tema.get().utama} size="lg" radius={30} fullWidth - onClick={() => { - if ( - title !== "" - ) { - setOpenModal(true) - } else { - toast.error("Semua form harus diisi") - } - }}> + onClick={() => { onCheck() }}> Simpan diff --git a/src/module/task/ui/edit_detail_task.tsx b/src/module/task/ui/edit_detail_task.tsx index 926fd9c..d8bbd36 100644 --- a/src/module/task/ui/edit_detail_task.tsx +++ b/src/module/task/ui/edit_detail_task.tsx @@ -1,28 +1,15 @@ "use client"; import { LayoutNavbarNew, TEMA } from "@/module/_global"; -import { - Avatar, - Box, - Button, - Flex, - Group, - Input, - rem, - SimpleGrid, - Skeleton, - Stack, - Text, - TextInput, -} from "@mantine/core"; -import React, { useState } from "react"; -import { DatePicker } from "@mantine/dates"; -import { useParams, useRouter } from "next/navigation"; -import toast from "react-hot-toast"; -import moment from "moment"; -import { funEditDetailTask, funGetDetailTask } from "../lib/api_task"; -import { useShallowEffect } from "@mantine/hooks"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { useHookstate } from "@hookstate/core"; +import { Box, Button, Group, rem, SimpleGrid, Skeleton, Stack, Text, TextInput } from "@mantine/core"; +import { DatePicker } from "@mantine/dates"; +import { useShallowEffect } from "@mantine/hooks"; +import moment from "moment"; +import { useParams, useRouter } from "next/navigation"; +import { useState } from "react"; +import toast from "react-hot-toast"; +import { funEditDetailTask, funGetDetailTask } from "../lib/api_task"; export default function EditDetailTask() { @@ -185,10 +172,10 @@ export default function EditDetailTask() { touched.title && (title == "" ? "Error! harus memasukkan Judul Tahapan" : "" ) - } + } onChange={(e) => { onValidation('title', e.target.value) - }} + }} /> } diff --git a/src/module/task/ui/edit_task.tsx b/src/module/task/ui/edit_task.tsx index 9e9bb25..6aae983 100644 --- a/src/module/task/ui/edit_task.tsx +++ b/src/module/task/ui/edit_task.tsx @@ -1,22 +1,13 @@ "use client"; import { LayoutNavbarNew, TEMA } from "@/module/_global"; -import { - Box, - Button, - Input, - rem, - Skeleton, - Stack, - Textarea, - TextInput, -} from "@mantine/core"; -import React, { useState } from "react"; -import { useParams, useRouter } from "next/navigation"; -import toast from "react-hot-toast"; import LayoutModal from "@/module/_global/layout/layout_modal"; -import { funEditTask, funGetTaskDivisionById } from "../lib/api_task"; -import { useShallowEffect } from "@mantine/hooks"; import { useHookstate } from "@hookstate/core"; +import { Box, Button, rem, Skeleton, Stack, TextInput } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useParams, useRouter } from "next/navigation"; +import { useState } from "react"; +import toast from "react-hot-toast"; +import { funEditTask, funGetTaskDivisionById } from "../lib/api_task"; export default function EditTask() { @@ -31,12 +22,22 @@ export default function EditTask() { }); function onVerification() { - if (title == "") - return toast.error("Error! harus memasukkan judul tugas") - + if (Object.values(touched).some((v) => v == true)) + return false setOpenModal(true) } + function onValidation(kategori: string, val: string) { + if (kategori == 'title') { + setTitle(val) + if (val === "") { + setTouched({ ...touched, title: true }) + } else { + setTouched({ ...touched, title: false }) + } + } + } + async function onSubmit() { try { const res = await funEditTask(param.detail, { title }) @@ -96,16 +97,12 @@ export default function EditTask() { label="Judul Tugas" size="md" value={title} - onChange={(e) => { - setTitle(e.target.value) - setTouched({ ...touched, title: false }) - }} + onChange={(e) => { onValidation('title', e.target.value)}} error={ touched.title && ( title == "" ? "Error! harus memasukkan judul tugas" : null ) } - onBlur={() => setTouched({ ...touched, title: true })} /> }