From 5bc702928bd11eafb2708b6bf23255287168a250 Mon Sep 17 00:00:00 2001 From: amel Date: Mon, 10 Mar 2025 15:18:28 +0800 Subject: [PATCH] upd: task divisi Deskripsi: - list task divisi - create task divisi - detail task divisi - tambah tugas task divisi - tambah file tasi divisi - edit task divisi - pembatalan task divisi No Issues --- app/(application)/_layout.tsx | 1 + .../[id]/(fitur-division)/_layout.tsx | 21 +++ .../task/[detail]/add-file.tsx | 58 ++++++++ .../task/[detail]/add-task.tsx | 74 ++++++++++ .../(fitur-division)/task/[detail]/cancel.tsx | 39 +++++ .../(fitur-division)/task/[detail]/edit.tsx | 39 +++++ .../(fitur-division)/task/[detail]/index.tsx | 35 +++++ .../[id]/(fitur-division)/task/create.tsx | 44 ++++++ .../[id]/(fitur-division)/task/index.tsx | 134 ++++++++++++++++++ components/division/fiturDivisionDetail.tsx | 2 + components/task/headerTaskDetail.tsx | 70 +++++++++ components/task/headerTaskList.tsx | 29 ++++ 12 files changed, 546 insertions(+) create mode 100644 app/(application)/division/[id]/(fitur-division)/_layout.tsx create mode 100644 app/(application)/division/[id]/(fitur-division)/task/[detail]/add-file.tsx create mode 100644 app/(application)/division/[id]/(fitur-division)/task/[detail]/add-task.tsx create mode 100644 app/(application)/division/[id]/(fitur-division)/task/[detail]/cancel.tsx create mode 100644 app/(application)/division/[id]/(fitur-division)/task/[detail]/edit.tsx create mode 100644 app/(application)/division/[id]/(fitur-division)/task/[detail]/index.tsx create mode 100644 app/(application)/division/[id]/(fitur-division)/task/create.tsx create mode 100644 app/(application)/division/[id]/(fitur-division)/task/index.tsx create mode 100644 components/task/headerTaskDetail.tsx create mode 100644 components/task/headerTaskList.tsx diff --git a/app/(application)/_layout.tsx b/app/(application)/_layout.tsx index c2b02ad..347fa7f 100644 --- a/app/(application)/_layout.tsx +++ b/app/(application)/_layout.tsx @@ -42,6 +42,7 @@ export default function RootLayout() { headerTitleAlign: 'center', headerRight: () => }} /> + diff --git a/app/(application)/division/[id]/(fitur-division)/_layout.tsx b/app/(application)/division/[id]/(fitur-division)/_layout.tsx new file mode 100644 index 0000000..6735e5c --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/_layout.tsx @@ -0,0 +1,21 @@ +import ButtonBackHeader from "@/components/buttonBackHeader" +import HeaderRightTaskList from "@/components/task/headerTaskList" +import { Headers } from "@/constants/Headers" +import { router, Stack } from "expo-router" +import { StatusBar } from "expo-status-bar" + +export default function RootLayout() { + return ( + <> + + { router.back() }} />, + title: 'Tugas Divisi', + headerTitleAlign: 'center', + headerRight: () => + }} /> + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-file.tsx b/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-file.tsx new file mode 100644 index 0000000..3ca0696 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-file.tsx @@ -0,0 +1,58 @@ +import AlertKonfirmasi from "@/components/alertKonfirmasi"; +import BorderBottomItem from "@/components/borderBottomItem"; +import ButtonBackHeader from "@/components/buttonBackHeader"; +import { ButtonForm } from "@/components/buttonForm"; +import ButtonSelect from "@/components/buttonSelect"; +import Styles from "@/constants/Styles"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; +import { router, Stack, useLocalSearchParams } from "expo-router"; +import { SafeAreaView, ScrollView, Text, ToastAndroid, View } from "react-native"; + +export default function TaskDivisionAddFile() { + const { id, detail } = useLocalSearchParams() + return ( + + { router.back() }} />, + headerTitle: 'Tambah File', + headerTitleAlign: 'center', + }} + /> + + + + + File + + } + title="image_pertama.jpg" + titleWeight="normal" + /> + } + title="file_kedua.pdf" + titleWeight="normal" + /> + + + { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin menambahkan data?', + onPress: () => { + ToastAndroid.show('Berhasil menambahkan data', ToastAndroid.SHORT) + router.push('./') + } + }) + }} /> + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-task.tsx b/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-task.tsx new file mode 100644 index 0000000..809adcf --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-task.tsx @@ -0,0 +1,74 @@ +import AlertKonfirmasi from "@/components/alertKonfirmasi"; +import ButtonBackHeader from "@/components/buttonBackHeader"; +import { ButtonForm } from "@/components/buttonForm"; +import { InputForm } from "@/components/inputForm"; +import Styles from "@/constants/Styles"; +import dayjs from "dayjs"; +import { router, Stack, useLocalSearchParams } from "expo-router"; +import { useState } from "react"; +import { SafeAreaView, ScrollView, View, ToastAndroid, Text } from "react-native"; +import DateTimePicker, { DateType, getDefaultStyles } from "react-native-ui-datepicker"; + +export default function TaskDivisionAddTask() { + const { id, detail } = useLocalSearchParams() + const [range, setRange] = useState<{ startDate: DateType; endDate: DateType; }>({ startDate: undefined, endDate: undefined }); + const defaultStyles = getDefaultStyles() + + const from = range.startDate + ? dayjs(range.startDate).format('MMM DD, YYYY') + : ''; + const to = range.endDate ? dayjs(range.endDate).format('MMM DD, YYYY') : ''; + + + return ( + + { router.back() }} />, + headerTitle: 'Tambah Tugas', + headerTitleAlign: 'center', + }} + /> + + + + setRange(param)} + styles={defaultStyles} + /> + + + + Tanggal Mulai * + + {from} + + + + Tanggal Berakhir * + + {to} + + + + + { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin menambahkan data?', + onPress: () => { + ToastAndroid.show('Berhasil menambahkan data', ToastAndroid.SHORT) + router.push('./') + } + }) + }} /> + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/task/[detail]/cancel.tsx b/app/(application)/division/[id]/(fitur-division)/task/[detail]/cancel.tsx new file mode 100644 index 0000000..ac61b1c --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/task/[detail]/cancel.tsx @@ -0,0 +1,39 @@ +import AlertKonfirmasi from "@/components/alertKonfirmasi" +import ButtonBackHeader from "@/components/buttonBackHeader" +import { ButtonForm } from "@/components/buttonForm" +import { InputForm } from "@/components/inputForm" +import Styles from "@/constants/Styles" +import { router, Stack, useLocalSearchParams } from "expo-router" +import { SafeAreaView, ScrollView, ToastAndroid, View } from "react-native" + +export default function TaskDivisionCancel(){ + const { id, detail } = useLocalSearchParams() + return ( + + { router.back() }} />, + headerTitle: 'Pembatalan Tugas', + headerTitleAlign: 'center', + }} + /> + + + + { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin membatalkan tugas? Pembatalan bersifat permanen', + onPress: () => { + ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT) + router.push('./') + } + }) + }} /> + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/task/[detail]/edit.tsx b/app/(application)/division/[id]/(fitur-division)/task/[detail]/edit.tsx new file mode 100644 index 0000000..e4173a9 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/task/[detail]/edit.tsx @@ -0,0 +1,39 @@ +import AlertKonfirmasi from "@/components/alertKonfirmasi"; +import ButtonBackHeader from "@/components/buttonBackHeader"; +import { ButtonForm } from "@/components/buttonForm"; +import { InputForm } from "@/components/inputForm"; +import Styles from "@/constants/Styles"; +import { router, Stack, useLocalSearchParams } from "expo-router"; +import { SafeAreaView, ScrollView, ToastAndroid, View } from "react-native"; + +export default function TaskDivisionEdit() { + const { id, detail } = useLocalSearchParams() + return ( + + { router.back() }} />, + headerTitle: 'Edit Judul Tugas', + headerTitleAlign: 'center', + }} + /> + + + + { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin mengubah data?', + onPress: () => { + ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT) + router.push('./') + } + }) + }} /> + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/task/[detail]/index.tsx b/app/(application)/division/[id]/(fitur-division)/task/[detail]/index.tsx new file mode 100644 index 0000000..74f50a5 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/task/[detail]/index.tsx @@ -0,0 +1,35 @@ +import ButtonBackHeader from "@/components/buttonBackHeader"; +import SectionFile from "@/components/sectionFile"; +import SectionMember from "@/components/sectionMember"; +import SectionProgress from "@/components/sectionProgress"; +import SectionTanggalTugas from "@/components/sectionTanggalTugas"; +import HeaderRightTaskDetail from "@/components/task/headerTaskDetail"; +import Styles from "@/constants/Styles"; +import { router, Stack, useLocalSearchParams } from "expo-router"; +import { SafeAreaView, ScrollView, View } from "react-native"; + +export default function DetailTaskDivision() { + const { id, detail } = useLocalSearchParams() + + + return ( + + { router.back() }} />, + headerTitle: 'Judul Tugas', + headerTitleAlign: 'center', + headerRight: () => , + }} + /> + + + + + + + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/task/create.tsx b/app/(application)/division/[id]/(fitur-division)/task/create.tsx new file mode 100644 index 0000000..083b95d --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/task/create.tsx @@ -0,0 +1,44 @@ +import AlertKonfirmasi from "@/components/alertKonfirmasi"; +import ButtonBackHeader from "@/components/buttonBackHeader"; +import { ButtonForm } from "@/components/buttonForm"; +import ButtonSelect from "@/components/buttonSelect"; +import { InputForm } from "@/components/inputForm"; +import Styles from "@/constants/Styles"; +import { router, Stack, useLocalSearchParams } from "expo-router"; +import { SafeAreaView, ScrollView, ToastAndroid, View } from "react-native"; + +export default function CreateTaskDivision() { + const { id } = useLocalSearchParams() + + return ( + + { router.back() }} />, + headerTitle: `Tambah Tugas`, + headerTitleAlign: 'center', + }} + /> + + + + + + + { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin menambahkan data?', + onPress: () => { + ToastAndroid.show('Berhasil menambahkan data', ToastAndroid.SHORT) + router.push('../task?status=0') + } + }) + }} /> + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/task/index.tsx b/app/(application)/division/[id]/(fitur-division)/task/index.tsx new file mode 100644 index 0000000..b97186b --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/task/index.tsx @@ -0,0 +1,134 @@ +import BorderBottomItem from "@/components/borderBottomItem"; +import ButtonTab from "@/components/buttonTab"; +import InputSearch from "@/components/inputSearch"; +import LabelStatus from "@/components/labelStatus"; +import PaperGridContent from "@/components/paperGridContent"; +import ProgressBar from "@/components/progressBar"; +import { ColorsStatus } from "@/constants/ColorsStatus"; +import Styles from "@/constants/Styles"; +import { AntDesign, Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; +import { router, useLocalSearchParams } from "expo-router"; +import { useState } from "react"; +import { Pressable, SafeAreaView, ScrollView, Text, View } from "react-native"; + +export default function ListTask() { + const { status } = useLocalSearchParams<{ status: string }>() + const [isList, setList] = useState(false) + + return ( + + + + + { router.push('./task?status=0') }} + label="Segera" + icon={} + n={4} /> + { router.push('./task?status=1') }} + label="Dikerjakan" + icon={} + n={4} /> + { router.push('./task?status=2') }} + label="Selesai" + icon={} + n={4} /> + { router.push('./task?status=3') }} + label="Batal" + icon={} + n={4} /> + + + + { setList(!isList) }}> + + + + { + isList + ? + + { }} + borderType="bottom" + icon={ + + + + } + title="Pembangunan Jembatan" + /> + { }} + borderType="bottom" + icon={ + + + + } + title="Pembangunan Jembatan" + /> + { }} + borderType="bottom" + icon={ + + + + } + title="Pembangunan Jembatan" + /> + { }} + borderType="bottom" + icon={ + + + + } + title="Pembangunan Jembatan" + /> + + : + + + { router.push('./task/321') }} content="page" title="Pembangunan Jembatan" headerColor="primary"> + + + 13 Februari 2025 + + + + + + + 13 Februari 2025 + + + + + + + 13 Februari 2025 + + + + + + } + + + + ) +} \ No newline at end of file diff --git a/components/division/fiturDivisionDetail.tsx b/components/division/fiturDivisionDetail.tsx index cbb879d..7fb9336 100644 --- a/components/division/fiturDivisionDetail.tsx +++ b/components/division/fiturDivisionDetail.tsx @@ -3,6 +3,7 @@ import Styles from "@/constants/Styles" import { AntDesign, MaterialIcons, SimpleLineIcons } from "@expo/vector-icons" import { Text, View } from "react-native" import BorderBottomItem from "../borderBottomItem" +import { router } from "expo-router" export default function FiturDivisionDetail() { return ( @@ -21,6 +22,7 @@ export default function FiturDivisionDetail() { title="Tugas" subtitle='15 Tugas' width={28} + onPress={() => {router.push('/division/123/task?status=0')}} /> + { setVisible(true) }} /> + + + } + title="Tambah Tugas" + onPress={() => { + setVisible(false) + router.push(`./${id}/add-task`) + }} + /> + } + title="Tambah File" + onPress={() => { + setVisible(false) + router.push(`./${id}/add-file`) + }} + /> + + } + title="Tambah Anggota" + onPress={() => { + // setVisible(false) + + }} + /> + + + + } + title="Edit" + onPress={() => { + setVisible(false) + router.push(`./${id}/edit`) + }} + /> + } + title="Batal" + onPress={() => { + setVisible(false) + router.push(`./${id}/cancel`) + }} + /> + + + + ) +} \ No newline at end of file diff --git a/components/task/headerTaskList.tsx b/components/task/headerTaskList.tsx new file mode 100644 index 0000000..0936ec9 --- /dev/null +++ b/components/task/headerTaskList.tsx @@ -0,0 +1,29 @@ +import Styles from "@/constants/Styles" +import { AntDesign } from "@expo/vector-icons" +import { useState } from "react" +import { View } from "react-native" +import ButtonMenuHeader from "../buttonMenuHeader" +import DrawerBottom from "../drawerBottom" +import MenuItemRow from "../menuItemRow" +import { router } from "expo-router" + +export default function HeaderRightTaskList() { + const [isVisible, setVisible] = useState(false) + return ( + <> + { setVisible(true) }} /> + + + } + title="Tambah Tugas Divisi" + onPress={() => { + setVisible(false) + router.push('./task/create') + }} + /> + + + + ) +} \ No newline at end of file