upd: fitur baru project

Deskripsi:
- tampilan list detail tugas project
- tampilan tambah detail tugas project
- tampilan edit detail tugas project
- tampilan form tambah data project > detail tugas
- integrasi api get list detail tugas project
- integrasi api tambah detail tugas project
- integrasi api edit detail tugas project
- integrasi api tambah data project > detail tugas

No Issues
This commit is contained in:
2025-08-20 15:17:10 +08:00
parent b0e959e3e1
commit 72fa18565d
11 changed files with 360 additions and 35 deletions

View File

@@ -1,18 +1,22 @@
import ButtonBackHeader from "@/components/buttonBackHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader";
import { InputForm } from "@/components/inputForm";
import ModalAddDetailTugasProject from "@/components/project/modalAddDetailTugasProject";
import Text from "@/components/Text";
import Styles from "@/constants/Styles";
import { formatDateOnly } from "@/lib/fun_formatDateOnly";
import { getDatesInRange } from "@/lib/fun_getDatesInRange";
import { setTaskCreate } from "@/lib/taskCreate";
import { useHeaderHeight } from '@react-navigation/elements';
import dayjs from "dayjs";
import { router, Stack } from "expo-router";
import 'intl';
import 'intl/locale-data/jsonp/id';
import moment from "moment";
import { useEffect, useState } from "react";
import {
KeyboardAvoidingView,
Platform,
Pressable,
SafeAreaView,
ScrollView,
View
@@ -37,11 +41,12 @@ export default function CreateProjectAddTask() {
})
const [title, setTitle] = useState('');
const taskCreate = useSelector((state: any) => state.taskCreate)
const [dsbButton, setDsbButton] = useState(true)
const [dataDetail, setDataDetail] = useState<any>([])
const [modalDetail, setModalDetail] = useState(false)
const from = range.startDate
? dayjs(range.startDate).format("DD-MM-YYYY")
: "";
const to = range.endDate ? dayjs(range.endDate).format("DD-MM-YYYY") : "";
const from = formatDateOnly(range.startDate, "DD-MM-YYYY");
const to = formatDateOnly(range.endDate, "DD-MM-YYYY");
function checkAll() {
if (from == "" || to == "" || title == "" || title == "null" || error.startDate || error.endDate || error.title) {
@@ -62,18 +67,45 @@ export default function CreateProjectAddTask() {
}
}
function checkButton() {
if (range.startDate == null || range.endDate == null || range.startDate == undefined || range.endDate == undefined) {
setDsbButton(true)
setDataDetail([])
} else {
setDsbButton(false)
const awal = formatDateOnly(range.startDate, "YYYY-MM-DD")
const akhir = formatDateOnly(range.endDate, "YYYY-MM-DD")
const datanya = getDatesInRange(awal, akhir)
setDataDetail(datanya.map((item: any) => ({
date: item,
timeStart: null,
timeEnd: null,
})))
}
}
useEffect(() => {
checkAll()
}, [from, to, title, error])
useEffect(() => {
checkButton()
}, [range])
async function handleCreate() {
try {
const dataDetailFix = dataDetail.map((item: any) => ({
date: moment(item.date, "DD-MM-YYYY").format("YYYY-MM-DD"),
timeStart: item.timeStart,
timeEnd: item.timeEnd,
}))
dispatch(setTaskCreate([...taskCreate, {
title: title,
dateStart: from,
dateEnd: to,
dateStartFix: dayjs(range.startDate).format("YYYY-MM-DD"),
dateEndFix: dayjs(range.endDate).format("YYYY-MM-DD"),
dateStartFix: formatDateOnly(range.startDate, "YYYY-MM-DD"),
dateEndFix: formatDateOnly(range.endDate, "YYYY-MM-DD"),
dataDetail: dataDetailFix
}]))
router.back();
} catch (error) {
@@ -151,6 +183,13 @@ export default function CreateProjectAddTask() {
{
(error.endDate || error.startDate) && <Text style={[Styles.textInformation, Styles.cError, Styles.mt05]}>Tanggal tidak boleh kosong</Text>
}
<Pressable
style={[Styles.btnTab, Styles.btnLainnya, dsbButton && Styles.btnDisabled]}
disabled={dsbButton}
onPress={() => { setModalDetail(true) }}
>
<Text style={[dsbButton ? Styles.cGray : Styles.cWhite]}>Detail</Text>
</Pressable>
</View>
<InputForm
label="Judul Tugas"
@@ -168,6 +207,14 @@ export default function CreateProjectAddTask() {
</View>
</ScrollView>
</KeyboardAvoidingView>
<ModalAddDetailTugasProject
isVisible={modalDetail}
setVisible={setModalDetail}
dataTanggal={dataDetail}
onSubmit={(data) => {
setDataDetail(data)
}}
/>
</SafeAreaView>
);
}