fix: project

Deskripsi:
- update loading di semua modal konfirmasi disetiap fitur project
- update order by name anggota saat tambah anggota project
- update padding saat tidak ada tugas

- menambahkan kode 500 di api agar mempermudah maintenance

No Issuess
This commit is contained in:
amel
2024-10-21 13:11:10 +08:00
parent 7db8a81040
commit 02cf4700f5
9 changed files with 68 additions and 31 deletions

View File

@@ -16,6 +16,7 @@ export default function AddDetailTaskProject() {
const router = useRouter()
const [name, setName] = useState("")
const [openModal, setOpenModal] = useState(false)
const [loadingModal, setLoadingModal] = useState(false)
const param = useParams<{ id: string }>()
const tema = useHookstate(TEMA)
const [touched, setTouched] = useState({
@@ -38,6 +39,7 @@ export default function AddDetailTaskProject() {
async function onSubmit() {
try {
setLoadingModal(true)
const res = await funCreateDetailProject(param.id, {
name,
dateStart: (value[0] != null) ? value[0] : new Date,
@@ -50,7 +52,6 @@ export default function AddDetailTaskProject() {
id: param.id,
}])
toast.success(res.message)
setOpenModal(false)
router.push(`/project/${param.id}`)
} else {
toast.error(res.message)
@@ -58,6 +59,9 @@ export default function AddDetailTaskProject() {
} catch (error) {
console.error(error)
toast.error("Gagal menambahkan tugas, coba lagi nanti")
} finally {
setOpenModal(false)
setLoadingModal(false)
}
}
@@ -148,13 +152,14 @@ export default function AddDetailTaskProject() {
</Box>
<LayoutModal opened={openModal} onClose={() => setOpenModal(false)}
<LayoutModal loading={loadingModal} opened={openModal} onClose={() => setOpenModal(false)}
description="Apakah Anda yakin ingin menambahkan tugas?"
onYes={(val) => {
if (val) {
onSubmit()
} else {
setOpenModal(false)
}
setOpenModal(false)
}} />
</Box>
);

View File

@@ -18,6 +18,7 @@ import { useWibuRealtime } from "wibu-realtime";
export default function AddFileDetailProject() {
const router = useRouter()
const [loadingModal, setLoadingModal] = useState(false)
const [openModal, setOpenModal] = useState(false)
const [fileForm, setFileForm] = useState<any[]>([])
const [listFile, setListFile] = useState<IListFileTaskProject[]>([])
@@ -57,6 +58,7 @@ export default function AddFileDetailProject() {
async function onSubmit() {
try {
setLoadingModal(true)
const fd = new FormData();
for (let i = 0; i < fileForm.length; i++) {
fd.append(`file${i}`, fileForm[i]);
@@ -79,6 +81,9 @@ export default function AddFileDetailProject() {
} catch (error) {
console.error(error)
toast.error("Gagal menambahkan file, coba lagi nanti");
} finally {
setOpenModal(false)
setLoadingModal(false)
}
}
@@ -183,13 +188,14 @@ export default function AddFileDetailProject() {
</Stack>
</LayoutDrawer>
<LayoutModal opened={openModal} onClose={() => setOpenModal(false)}
<LayoutModal loading={loadingModal} opened={openModal} onClose={() => setOpenModal(false)}
description="Apakah Anda yakin ingin menambahkan file?"
onYes={(val) => {
if (val) {
onSubmit()
} else {
setOpenModal(false)
}
setOpenModal(false)
}} />
</Box>

View File

@@ -27,7 +27,8 @@ export default function AddMemberDetailProject() {
const [onClickSearch, setOnClickSearch] = useState(false)
const [searchQuery, setSearchQuery] = useState('')
const tema = useHookstate(TEMA)
const isMobile2 = useMediaQuery("(max-width: 438px)");
const isMobile2 = useMediaQuery("(max-width: 438px)")
const [loadingModal, setLoadingModal] = useState(false)
const [dataRealTime, setDataRealtime] = useWibuRealtime({
WIBU_REALTIME_TOKEN: keyWibu,
project: "sdm"
@@ -102,6 +103,7 @@ export default function AddMemberDetailProject() {
async function onSubmit() {
try {
setLoadingModal(true)
const res = await funAddMemberProject(param.id, { member: selectedFiles });
if (res.success) {
setDataRealtime([{
@@ -116,6 +118,9 @@ export default function AddMemberDetailProject() {
} catch (error) {
console.error(error)
toast.error("Gagal menambahkan anggota, coba lagi nanti");
} finally {
setOpenModal(false)
setLoadingModal(true)
}
}
@@ -307,13 +312,14 @@ export default function AddMemberDetailProject() {
}
</Box>
<LayoutModal opened={openModal} onClose={() => setOpenModal(false)}
<LayoutModal loading={loadingModal} opened={openModal} onClose={() => setOpenModal(false)}
description="Apakah Anda yakin ingin menambahkan anggota?"
onYes={(val) => {
if (val) {
onSubmit()
} else {
setOpenModal(false)
}
setOpenModal(false)
}} />
</Box>
);

View File

@@ -18,6 +18,7 @@ export default function ListAnggotaDetailProject() {
const [isData, setData] = useState<IDataMemberProject[]>([])
const param = useParams<{ id: string }>()
const [loading, setLoading] = useState(true)
const [loadingDelete, setLoadingDelete] = useState(false)
const [openDrawer, setOpenDrawer] = useState(false)
const [isOpenModal, setOpenModal] = useState(false)
const [dataChoose, setDataChoose] = useState({ id: '', name: '' })
@@ -76,6 +77,7 @@ export default function ListAnggotaDetailProject() {
async function onSubmit() {
try {
setLoadingDelete(true)
const res = await funDeleteMemberProject(param.id, { idUser: dataChoose.id });
if (res.success) {
setDataRealtime([{
@@ -92,6 +94,9 @@ export default function ListAnggotaDetailProject() {
} catch (error) {
console.error(error);
toast.error("Gagal menghapus anggota Kegiatan, coba lagi nanti");
} finally {
setOpenModal(false)
setLoadingDelete(false)
}
}
@@ -129,7 +134,7 @@ export default function ListAnggotaDetailProject() {
</Box>
))
:
isData.length === 0 ? <Text>Tidak ada anggota</Text> :
isData.length === 0 ? <Text c={"dimmed"} ta={"center"}>Tidak ada anggota</Text> :
isData.map((v, i) => {
return (
<Box key={i}>
@@ -198,13 +203,14 @@ export default function ListAnggotaDetailProject() {
</Box>
</LayoutDrawer>
<LayoutModal opened={isOpenModal} onClose={() => setOpenModal(false)}
<LayoutModal loading={loadingDelete} opened={isOpenModal} onClose={() => setOpenModal(false)}
description="Apakah Anda yakin ingin mengeluarkan anggota?"
onYes={(val) => {
if (val) {
onSubmit()
} else {
setOpenModal(false)
}
setOpenModal(false)
}} />
</Box>

View File

@@ -17,6 +17,7 @@ export default function ListFileDetailProject() {
const [isData, setData] = useState<IDataFileProject[]>([])
const param = useParams<{ id: string }>()
const [loading, setLoading] = useState(true)
const [loadingDelete, setLoadingDelete] = useState(false)
const [idData, setIdData] = useState('')
const [idStorage, setIdStorage] = useState('')
const [nameData, setNameData] = useState('')
@@ -76,6 +77,7 @@ export default function ListFileDetailProject() {
async function onDelete() {
try {
setLoadingDelete(true)
const res = await funDeleteFileProject(idData);
if (res.success) {
setDataRealtime([{
@@ -93,6 +95,9 @@ export default function ListFileDetailProject() {
} catch (error) {
console.error(error);
toast.error("Gagal menghapus file, coba lagi nanti");
} finally {
setOpenModal(false)
setLoadingDelete(false)
}
}
@@ -128,7 +133,7 @@ export default function ListFileDetailProject() {
</Box>
))
:
isData.length === 0 ? <Text>Tidak ada file</Text> :
isData.length === 0 ? <Text c={"dimmed"} ta={"center"}>Tidak ada file</Text> :
isData.map((item, index) => {
return (
<Box
@@ -225,13 +230,14 @@ export default function ListFileDetailProject() {
</LayoutDrawer>
<LayoutModal opened={isOpenModal} onClose={() => setOpenModal(false)}
<LayoutModal loading={loadingDelete} opened={isOpenModal} onClose={() => setOpenModal(false)}
description="Apakah Anda yakin ingin menghapus file ini? File yang dihapus tidak dapat dikembalikan"
onYes={(val) => {
if (val) {
onDelete()
} else {
setOpenModal(false)
}
setOpenModal(false)
}} />
<LayoutModalViewFile opened={isOpenModalView} onClose={() => setOpenModalView(false)} file={idStorage} extension={isExtension} fitur='project' />

View File

@@ -24,6 +24,7 @@ export default function ListTugasDetailProject() {
const [statusData, setStatusData] = useState(0)
const [openDrawerStatus, setOpenDrawerStatus] = useState(false)
const [isOpenModal, setOpenModal] = useState(false)
const [loadingDelete, setLoadingDelete] = useState(false)
const router = useRouter()
const tema = useHookstate(TEMA)
const [reason, setReason] = useState("")
@@ -75,6 +76,7 @@ export default function ListTugasDetailProject() {
async function onDelete() {
try {
setLoadingDelete(true)
const res = await funDeleteDetailProject(idData, { idProject: param.id });
if (res.success) {
setDataRealtime([{
@@ -92,6 +94,9 @@ export default function ListTugasDetailProject() {
} catch (error) {
console.error(error);
toast.error("Gagal hapus tugas Kegiatan, coba lagi nanti");
} finally {
setOpenModal(false)
setLoadingDelete(false)
}
}
@@ -138,7 +143,6 @@ export default function ListTugasDetailProject() {
style={{
borderRadius: 10,
border: `1px solid ${"#D6D8F6"}`,
// padding: 10,
}}
pl={20}
pr={20}
@@ -149,7 +153,7 @@ export default function ListTugasDetailProject() {
<SkeletonDetailListTugasTask />
</Box>
</> :
isData.length === 0 ? <Text>Tidak ada tugas</Text> :
isData.length === 0 ? <Text py={20} c={"dimmed"} ta={"center"}>Tidak ada tugas</Text> :
isData.map((item, index) => {
return (
<Box key={index}>
@@ -256,13 +260,14 @@ export default function ListTugasDetailProject() {
</Box>
</LayoutDrawer>
<LayoutModal opened={isOpenModal} onClose={() => setOpenModal(false)}
description="Apakah Anda yakin ingin menghapus Tahapan Tugas ini?"
<LayoutModal loading={loadingDelete} opened={isOpenModal} onClose={() => setOpenModal(false)}
description="Apakah Anda yakin ingin menghapus tahapan tugas ini?"
onYes={(val) => {
if (val) {
onDelete()
} else {
setOpenModal(false)
}
setOpenModal(false)
}} />
<LayoutDrawer opened={openDrawerStatus} title={'Status'} onClose={() => setOpenDrawerStatus(false)}>

View File

@@ -89,7 +89,7 @@ export default function ProgressDetailProject() {
<>
<Box mt={10}>
{loading ? "" :
reason !== null ?
(reason !== null && reason != "") ?
(
<Box mb={10}>
<Box p={15} bg={"#FFF2CD"} style={{