diff --git a/app/(application)/division/[id]/(fitur-division)/calendar/[detail]/edit.tsx b/app/(application)/division/[id]/(fitur-division)/calendar/[detail]/edit.tsx new file mode 100644 index 0000000..0fb34d9 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/calendar/[detail]/edit.tsx @@ -0,0 +1,61 @@ +import AlertKonfirmasi from "@/components/alertKonfirmasi" +import ButtonBackHeader from "@/components/buttonBackHeader" +import { ButtonForm } from "@/components/buttonForm" +import { InputForm } from "@/components/inputForm" +import SelectForm from "@/components/selectForm" +import Styles from "@/constants/Styles" +import { Stack, router } from "expo-router" +import { useState } from "react" +import { SafeAreaView, ScrollView, View, ToastAndroid, Text } from "react-native" + +export default function EditEventCalendar() { + const [chooseGroup, setChooseGroup] = useState({ val: '', label: '' }) + + return ( + + { router.back() }} />, + headerTitle: 'Edit Acara', + headerTitleAlign: 'center', + }} + /> + + + + + + + Waktu Awal* + + --.-- + + + + Waktu Akhir * + + --.-- + + + + + { }} /> + + + { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin menambahkan data?', + onPress: () => { + ToastAndroid.show('Berhasil menambahkan data', ToastAndroid.SHORT) + router.back() + } + }) + }} /> + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/calendar/[detail]/index.tsx b/app/(application)/division/[id]/(fitur-division)/calendar/[detail]/index.tsx new file mode 100644 index 0000000..46a75b3 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/calendar/[detail]/index.tsx @@ -0,0 +1,88 @@ +import BorderBottomItem from "@/components/borderBottomItem" +import ButtonBackHeader from "@/components/buttonBackHeader" +import HeaderRightCalendarDetail from "@/components/calendar/headerCalendarDetail" +import Styles from "@/constants/Styles" +import { MaterialCommunityIcons } from "@expo/vector-icons" +import { router, Stack, useLocalSearchParams } from "expo-router" +import { Image, SafeAreaView, ScrollView, Text, View } from "react-native" + +export default function DetailEventCalendar() { + const { id, detail } = useLocalSearchParams() + + return ( + + { router.back() }} />, + headerTitle: 'Detail Acara', + headerTitleAlign: 'center', + headerRight: () => + }} + /> + + + + + + Rapat Libur Lebaran + + + + 10 Maret 2025 + + + + 07:30 | 09:45 + + + + Acara 1 Kali + + + + meet.com + + + + Rapat persiapan libur panjang lebaran + + + + + + Anggota + Total 4 Anggota + + + + } + title="Amalia Dwi" + subtitle="Dinas - Bendahara" + /> + } + title="Amalia Dwi" + subtitle="Dinas - Bendahara" + /> + } + title="Amalia Dwi" + subtitle="Dinas - Bendahara" + /> + } + title="Amalia Dwi" + subtitle="Dinas - Bendahara" + /> + + + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/calendar/create.tsx b/app/(application)/division/[id]/(fitur-division)/calendar/create.tsx new file mode 100644 index 0000000..11cd0e5 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/calendar/create.tsx @@ -0,0 +1,61 @@ +import AlertKonfirmasi from "@/components/alertKonfirmasi"; +import ButtonBackHeader from "@/components/buttonBackHeader"; +import { ButtonForm } from "@/components/buttonForm"; +import { InputForm } from "@/components/inputForm"; +import SelectForm from "@/components/selectForm"; +import Styles from "@/constants/Styles"; +import { Stack, router } from "expo-router"; +import { useState } from "react"; +import { SafeAreaView, ScrollView, Text, ToastAndroid, View } from "react-native"; + +export default function CalendarDivisionCreate() { + const [chooseGroup, setChooseGroup] = useState({ val: '', label: '' }) + + return ( + + { router.back() }} />, + headerTitle: 'Tambah Acara', + headerTitleAlign: 'center', + }} + /> + + + + + + + Waktu Awal* + + --.-- + + + + Waktu Akhir * + + --.-- + + + + + { }} /> + + + { + 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)/calendar/history.tsx b/app/(application)/division/[id]/(fitur-division)/calendar/history.tsx new file mode 100644 index 0000000..aea8e60 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/calendar/history.tsx @@ -0,0 +1,26 @@ +import ButtonBackHeader from "@/components/buttonBackHeader"; +import ItemHistoryEvent from "@/components/calendar/itemHistoryEvent"; +import InputSearch from "@/components/inputSearch"; +import Styles from "@/constants/Styles"; +import { router, Stack } from "expo-router"; +import { SafeAreaView, ScrollView, Text, View } from "react-native"; + +export default function CalendarHistory(){ + return( + + { router.back() }} />, + headerTitle: 'Riwayat Acara', + headerTitleAlign: 'center', + }} + /> + + + + + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/calendar/index.tsx b/app/(application)/division/[id]/(fitur-division)/calendar/index.tsx new file mode 100644 index 0000000..05dd698 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/calendar/index.tsx @@ -0,0 +1,51 @@ +import ButtonBackHeader from "@/components/buttonBackHeader" +import HeaderRightCalendarList from "@/components/calendar/headerCalendarList" +import EventItem from "@/components/eventItem" +import Styles from "@/constants/Styles" +import { router, Stack } from "expo-router" +import { useState } from "react" +import { SafeAreaView, ScrollView, Text, View } from "react-native" +import DateTimePicker, { CalendarComponents, CalendarDay, DateType, getDefaultStyles } from "react-native-ui-datepicker" + +export default function CalendarDivision() { + const defaultStyles = getDefaultStyles() + const [selected, setSelected] = useState() + const components: CalendarComponents = { + Day: (day: CalendarDay) => amalia, + // Month: (month: CalendarMonth) => + // etc + }; + + return ( + + { router.back() }} />, + headerTitle: 'Kalender', + headerTitleAlign: 'center', + headerRight: () => + }} + /> + + + + setSelected(date)} + styles={defaultStyles} + /> + + + Acara + + {router.push('./calendar/321')}}/> + {router.push('./calendar/321')}}/> + + + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/edit.tsx b/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/edit.tsx new file mode 100644 index 0000000..7a4f413 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/edit.tsx @@ -0,0 +1,38 @@ +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 } from "expo-router"; +import { SafeAreaView, ScrollView, ToastAndroid, View } from "react-native"; + +export default function DiscussionDivisionEdit() { + return ( + + { router.back() }} />, + headerTitle: 'Edit Diskusi', + headerTitleAlign: 'center', + }} + /> + + + + { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin mengubah data?', + onPress: () => { + ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT) + router.back() + } + }) + }} /> + + + + ) +} \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/index.tsx b/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/index.tsx index e9570bb..ba61f66 100644 --- a/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/index.tsx +++ b/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/index.tsx @@ -1,9 +1,154 @@ -import { Text } from "react-native"; +import BorderBottomItem from "@/components/borderBottomItem"; +import ButtonBackHeader from "@/components/buttonBackHeader"; +import HeaderRightDiscussionDetail from "@/components/discussion/headerDiscussionDetail"; +import { InputForm } from "@/components/inputForm"; +import LabelStatus from "@/components/labelStatus"; +import { ColorsStatus } from "@/constants/ColorsStatus"; +import Styles from "@/constants/Styles"; +import { Ionicons, MaterialIcons } from "@expo/vector-icons"; +import { router, Stack, useLocalSearchParams } from "expo-router"; +import { Image, ScrollView, Text, View } from "react-native"; export default function DiscussionDetail() { + const { id, detail } = useLocalSearchParams(); + return ( <> - Detail diskusi + { router.back() }} />, + headerTitle: 'Diskusi', + headerTitleAlign: 'center', + headerRight: () => , + }} + /> + + + + + + + + } + title="Danantara" + subtitle={ + + } + rightTopInfo="3 Jan 2025" + desc="Bagaimana dampak yg dirasakan akibat efisiensi?" + leftBottomInfo={ + + + 15 Komentar + + } + /> + + + } + title="Amalia Dwi" + rightTopInfo="3 Jan 2025" + desc="sangat berdampak dari berbagai sisi" + /> + + } + title="Amalia Dwi" + rightTopInfo="3 Jan 2025" + desc="semua menjadi terbatas.." + /> + + } + title="Amalia Dwi" + rightTopInfo="3 Jan 2025" + desc="semua menjadi terbatas.." + /> + + } + title="Amalia Dwi" + rightTopInfo="3 Jan 2025" + desc="semua menjadi terbatas.." + /> + + } + title="Amalia Dwi" + rightTopInfo="3 Jan 2025" + desc="semua menjadi terbatas.." + /> + + } + title="Amalia Dwi" + rightTopInfo="3 Jan 2025" + desc="semua menjadi terbatas.." + /> + + + } + title="Amalia Dwi" + rightTopInfo="3 Jan 2025" + desc="semua menjadi terbatas.." + /> + + + + + + + + } + /> + + ) } \ No newline at end of file diff --git a/app/(application)/division/[id]/(fitur-division)/document/index.tsx b/app/(application)/division/[id]/(fitur-division)/document/index.tsx new file mode 100644 index 0000000..ad76329 --- /dev/null +++ b/app/(application)/division/[id]/(fitur-division)/document/index.tsx @@ -0,0 +1,39 @@ +import ButtonBackHeader from "@/components/buttonBackHeader" +import HeaderRightDocument from "@/components/document/headerDocument" +import ItemFile from "@/components/document/itemFile" +import Styles from "@/constants/Styles" +import { AntDesign, Ionicons, MaterialCommunityIcons } from "@expo/vector-icons" +import { router, Stack, useLocalSearchParams } from "expo-router" +import { SafeAreaView, ScrollView, Text, View } from "react-native" + +export default function DocumentDivision() { + const { path } = useLocalSearchParams<{ path?: string }>() + + return ( + + { router.back() }} />, + headerTitle: 'Dokumen Divisi', + headerTitleAlign: 'center', + headerRight: () => + }} + /> + + + + home + + folder 1 + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/components/calendar/headerCalendarDetail.tsx b/components/calendar/headerCalendarDetail.tsx new file mode 100644 index 0000000..9cd31b3 --- /dev/null +++ b/components/calendar/headerCalendarDetail.tsx @@ -0,0 +1,58 @@ +import Styles from "@/constants/Styles" +import { Ionicons, MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons" +import { router } from "expo-router" +import { useState } from "react" +import { ToastAndroid, View } from "react-native" +import AlertKonfirmasi from "../alertKonfirmasi" +import ButtonMenuHeader from "../buttonMenuHeader" +import DrawerBottom from "../drawerBottom" +import MenuItemRow from "../menuItemRow" + +type Props = { + id: string | string[] +} + +export default function HeaderRightCalendarDetail({ id }: Props) { + const [isVisible, setVisible] = useState(false) + + return ( + <> + { setVisible(true) }} /> + + + } + title="Tambah Anggota" + onPress={() => { + setVisible(false) + + }} + /> + } + title="Edit" + onPress={() => { + setVisible(false) + router.push(`./${id}/edit`) + }} + /> + } + title="Hapus" + onPress={() => { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin menghapus data?', + onPress: () => { + setVisible(false) + ToastAndroid.show('Berhasil menghapus data', ToastAndroid.SHORT) + router.back() + } + }) + }} + /> + + + + ) +} \ No newline at end of file diff --git a/components/calendar/headerCalendarList.tsx b/components/calendar/headerCalendarList.tsx new file mode 100644 index 0000000..db38f4f --- /dev/null +++ b/components/calendar/headerCalendarList.tsx @@ -0,0 +1,39 @@ +import Styles from "@/constants/Styles" +import { AntDesign, MaterialCommunityIcons } from "@expo/vector-icons" +import { router } from "expo-router" +import { useState } from "react" +import { View } from "react-native" +import ButtonMenuHeader from "../buttonMenuHeader" +import DrawerBottom from "../drawerBottom" +import MenuItemRow from "../menuItemRow" + +export default function HeaderRightCalendarList() { + const [isVisible, setVisible] = useState(false) + + return ( + <> + { setVisible(true) }} /> + + + } + title="Tambah Acara" + onPress={() => { + setVisible(false) + router.push('./calendar/create') + }} + /> + + } + title="Riwayat" + onPress={() => { + setVisible(false) + router.push('./calendar/history') + }} + /> + + + + ) +} \ No newline at end of file diff --git a/components/calendar/itemHistoryEvent.tsx b/components/calendar/itemHistoryEvent.tsx new file mode 100644 index 0000000..6d0edab --- /dev/null +++ b/components/calendar/itemHistoryEvent.tsx @@ -0,0 +1,74 @@ +import { ColorsStatus } from "@/constants/ColorsStatus"; +import Styles from "@/constants/Styles"; +import { Text, View } from "react-native"; + +export default function ItemHistoryEvent() { + return ( + <> + + + 22 Jan + Kamis + + + + Acara 1 + 07:00 | 08:00 + + + Acara 2 + 10:30 | 12:00 + + + + + + 15 Feb + Senin + + + + Acara 1 + 07:00 | 08:00 + + + + + + 15 Feb + Senin + + + + Acara 1 + 07:00 | 08:00 + + + + + + 15 Feb + Senin + + + + Acara 1 + 07:00 | 08:00 + + + + + + 15 Feb + Senin + + + + Acara 1 + 07:00 | 08:00 + + + + + ) +} \ No newline at end of file diff --git a/components/discussion/headerDiscussionDetail.tsx b/components/discussion/headerDiscussionDetail.tsx new file mode 100644 index 0000000..e4d5e51 --- /dev/null +++ b/components/discussion/headerDiscussionDetail.tsx @@ -0,0 +1,63 @@ +import Styles from "@/constants/Styles" +import { MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons" +import { router } from "expo-router" +import { useState } from "react" +import { ToastAndroid, View } from "react-native" +import AlertKonfirmasi from "../alertKonfirmasi" +import ButtonMenuHeader from "../buttonMenuHeader" +import DrawerBottom from "../drawerBottom" +import MenuItemRow from "../menuItemRow" + +type Props = { + id: string | string[] +} + +export default function HeaderRightDiscussionDetail({ id }: Props) { + const [isVisible, setVisible] = useState(false) + + return ( + <> + { setVisible(true) }} /> + + + } + title="Edit" + onPress={() => { + setVisible(false) + router.push(`./${id}/edit`) + }} + /> + } + title="Tutup Diskusi" + onPress={() => { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin menutup diskusi?', + onPress: () => { + setVisible(false) + ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT) + } + }) + }} + /> + } + title="Arsipkan" + onPress={() => { + AlertKonfirmasi({ + title: 'Konfirmasi', + desc: 'Apakah anda yakin ingin mengarsipkan diskusi?', + onPress: () => { + setVisible(false) + ToastAndroid.show('Berhasil mengubah data', ToastAndroid.SHORT) + } + }) + }} + /> + + + + ) +} \ No newline at end of file diff --git a/components/division/fiturDivisionDetail.tsx b/components/division/fiturDivisionDetail.tsx index e46abe0..b1cebd1 100644 --- a/components/division/fiturDivisionDetail.tsx +++ b/components/division/fiturDivisionDetail.tsx @@ -3,9 +3,11 @@ 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" +import { router, useLocalSearchParams } from "expo-router" export default function FiturDivisionDetail() { + const { id } = useLocalSearchParams() + return ( Fitur @@ -22,7 +24,7 @@ export default function FiturDivisionDetail() { title="Tugas" subtitle='15 Tugas' width={28} - onPress={() => {router.push('/division/123/task?status=0')}} + onPress={() => { router.push(`/division/${id}/task?status=0`) }} /> { router.push(`/division/${id}/document`) }} /> @@ -51,7 +54,7 @@ export default function FiturDivisionDetail() { title="Diskusi" subtitle='5 Diskusi' width={28} - onPress={() => {router.push('/division/123/discussion?active=true')}} + onPress={() => { router.push(`/division/${id}/discussion?active=true`) }} /> { router.push(`/division/${id}/calendar`) }} /> diff --git a/components/document/headerDocument.tsx b/components/document/headerDocument.tsx new file mode 100644 index 0000000..092e0ce --- /dev/null +++ b/components/document/headerDocument.tsx @@ -0,0 +1,40 @@ +import Styles from "@/constants/Styles" +import { MaterialCommunityIcons, MaterialIcons } 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" + +type Props = { + id: string | string[] | undefined | null +} + +export default function HeaderRightDocument({ id }: Props) { + const [isVisible, setVisible] = useState(false) + return ( + <> + { setVisible(true) }} /> + + + } + title="Tambah Dokumen" + onPress={() => { + setVisible(false) + }} + /> + + } + title="Upload File" + onPress={() => { + setVisible(false) + }} + /> + + + + ) + +} \ No newline at end of file diff --git a/components/document/itemFile.tsx b/components/document/itemFile.tsx new file mode 100644 index 0000000..241ea9d --- /dev/null +++ b/components/document/itemFile.tsx @@ -0,0 +1,69 @@ +import Styles from "@/constants/Styles"; +import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; +import { Pressable, Text, View } from "react-native"; + + +type Props = { + title: string + category: 'folder' | 'folder-shared' | 'file' | 'file-shared' + dateTime: string + checked?: boolean + onChecked?: () => void + onPress?: () => void +} + +export default function ItemFile({ category, checked, dateTime, title, onChecked, onPress }: Props) { + return ( + + + + { + category == 'folder-shared' + ? + <> + + + + : category == 'file-shared' + ? + <> + + + + : + category == 'folder' + ? + + : + + + } + + + + + + {title} + {dateTime} + + + { + checked + ? + : + } + + + + + + ) +} \ No newline at end of file diff --git a/components/eventItem.tsx b/components/eventItem.tsx index 89f2674..640415d 100644 --- a/components/eventItem.tsx +++ b/components/eventItem.tsx @@ -1,5 +1,5 @@ import Styles from "@/constants/Styles" -import { Text, View } from "react-native" +import { Pressable, Text, View } from "react-native" type Props = { category: 'purple' | 'orange' @@ -7,17 +7,18 @@ type Props = { user: string jamAwal: string jamAkhir: string + onPress?: () => void } -export default function EventItem({ category, title, user, jamAwal, jamAkhir }: Props) { +export default function EventItem({ category, title, user, jamAwal, jamAkhir, onPress }: Props) { return ( - + {jamAwal} - {jamAkhir} {title} Dibuat oleh : {user} - + ) } \ No newline at end of file diff --git a/constants/Styles.ts b/constants/Styles.ts index 578dcd7..f38a95b 100644 --- a/constants/Styles.ts +++ b/constants/Styles.ts @@ -83,9 +83,21 @@ const Styles = StyleSheet.create({ mv15: { marginVertical: 15 }, + mh05: { + marginHorizontal: 5 + }, + mh10: { + marginHorizontal: 10 + }, + mh15: { + marginHorizontal: 15 + }, mv10: { marginVertical: 10 }, + mt02: { + marginTop: 2 + }, mt05: { marginTop: 5 }, @@ -107,6 +119,12 @@ const Styles = StyleSheet.create({ ml10: { marginLeft: 10 }, + ph05: { + paddingHorizontal: 5, + }, + ph10: { + paddingHorizontal: 10, + }, ph15: { paddingHorizontal: 15, }, @@ -122,6 +140,9 @@ const Styles = StyleSheet.create({ p10: { padding: 10 }, + round10: { + borderRadius: 10 + }, round30: { borderRadius: 30 },