upd: tugas divisi

Deskripsi:
- validasi tambah tugas divisi
- validasi edit tugas diviis

No Issues
This commit is contained in:
amel
2024-10-07 14:07:44 +08:00
parent 32176560a6
commit e0c704a6ea
3 changed files with 84 additions and 77 deletions

View File

@@ -1,25 +1,24 @@
"use client"; "use client";
import { keyWibu, LayoutDrawer, LayoutNavbarNew, TEMA } from "@/module/_global"; 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 { 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 { 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 CreateUsersProject from "./create_users_project";
import ResultsDateAndTask from "./results_date-and_task"; import ResultsDateAndTask from "./results_date-and_task";
import ResultsFile from "./results_file"; 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() { export default function CreateTask() {
const router = useRouter() const router = useRouter()
@@ -44,8 +43,6 @@ export default function CreateTask() {
const tema = useHookstate(TEMA) const tema = useHookstate(TEMA)
const [touched, setTouched] = useState({ const [touched, setTouched] = useState({
title: false, title: false,
task: false,
member: false
}); });
const [data, setData] = useWibuRealtime({ const [data, setData] = useWibuRealtime({
WIBU_REALTIME_TOKEN: keyWibu, 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 <ViewDateEndTask onClose={(val) => { setOpenTugas(false) }} onSet={(val) => { if (openTugas) return <ViewDateEndTask onClose={(val) => { setOpenTugas(false) }} onSet={(val) => {
setDataTask([...dataTask, val]) setDataTask([...dataTask, val])
setOpenTugas(false) setOpenTugas(false)
@@ -127,11 +162,7 @@ export default function CreateTask() {
size="md" size="md"
label="Judul Tugas" label="Judul Tugas"
value={title} value={title}
onChange={(e) => { onChange={(e) => { onValidation('title', e.target.value) }}
setTitle(e.target.value)
setTouched({ ...touched, title: false })
}}
onBlur={() => setTouched({ ...touched, title: true })}
required required
error={ error={
touched.title && ( touched.title && (
@@ -291,15 +322,7 @@ export default function CreateTask() {
bg={tema.get().utama} bg={tema.get().utama}
size="lg" radius={30} size="lg" radius={30}
fullWidth fullWidth
onClick={() => { onClick={() => { onCheck() }}>
if (
title !== ""
) {
setOpenModal(true)
} else {
toast.error("Semua form harus diisi")
}
}}>
Simpan Simpan
</Button> </Button>
</Box> </Box>

View File

@@ -1,28 +1,15 @@
"use client"; "use client";
import { LayoutNavbarNew, TEMA } from "@/module/_global"; 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 LayoutModal from "@/module/_global/layout/layout_modal";
import { useHookstate } from "@hookstate/core"; 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() { export default function EditDetailTask() {
@@ -185,10 +172,10 @@ export default function EditDetailTask() {
touched.title && touched.title &&
(title == "" ? "Error! harus memasukkan Judul Tahapan" : "" (title == "" ? "Error! harus memasukkan Judul Tahapan" : ""
) )
} }
onChange={(e) => { onChange={(e) => {
onValidation('title', e.target.value) onValidation('title', e.target.value)
}} }}
/> />
} }
</Stack> </Stack>

View File

@@ -1,22 +1,13 @@
"use client"; "use client";
import { LayoutNavbarNew, TEMA } from "@/module/_global"; 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 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 { 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() { export default function EditTask() {
@@ -31,12 +22,22 @@ export default function EditTask() {
}); });
function onVerification() { function onVerification() {
if (title == "") if (Object.values(touched).some((v) => v == true))
return toast.error("Error! harus memasukkan judul tugas") return false
setOpenModal(true) 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() { async function onSubmit() {
try { try {
const res = await funEditTask(param.detail, { title }) const res = await funEditTask(param.detail, { title })
@@ -96,16 +97,12 @@ export default function EditTask() {
label="Judul Tugas" label="Judul Tugas"
size="md" size="md"
value={title} value={title}
onChange={(e) => { onChange={(e) => { onValidation('title', e.target.value)}}
setTitle(e.target.value)
setTouched({ ...touched, title: false })
}}
error={ error={
touched.title && ( touched.title && (
title == "" ? "Error! harus memasukkan judul tugas" : null title == "" ? "Error! harus memasukkan judul tugas" : null
) )
} }
onBlur={() => setTouched({ ...touched, title: true })}
/> />
} }
</Stack> </Stack>