diff --git a/app/(application)/discussion/[id].tsx b/app/(application)/discussion/[id].tsx
index 8a16505..6b4d3ea 100644
--- a/app/(application)/discussion/[id].tsx
+++ b/app/(application)/discussion/[id].tsx
@@ -1,5 +1,6 @@
import AlertKonfirmasi from "@/components/alertKonfirmasi";
import BorderBottomItem from "@/components/borderBottomItem";
+import BorderBottomItem2 from "@/components/borderBottomItem2";
import ButtonBackHeader from "@/components/buttonBackHeader";
import HeaderRightDiscussionGeneralDetail from "@/components/discussion_general/headerDiscussionDetail";
import DrawerBottom from "@/components/drawerBottom";
@@ -214,7 +215,7 @@ export default function DetailDiscussionGeneral() {
loading ?
:
- state.memberChoose)
const update = useSelector((state: any) => state.discussionGeneralDetailUpdate)
const [loading, setLoading] = useState(false)
+ const [fileForm, setFileForm] = useState([])
+ const [isModalFile, setModalFile] = useState(false)
+ const [indexDelFile, setIndexDelFile] = useState(0)
const [dataForm, setDataForm] = useState({
idGroup: "",
title: "",
@@ -95,6 +102,25 @@ export default function CreateDiscussionGeneral() {
router.back()
}
+ const pickDocumentAsync = async () => {
+ let result = await DocumentPicker.getDocumentAsync({
+ type: ["*/*"],
+ multiple: true
+ });
+ if (!result.canceled) {
+ for (let i = 0; i < result.assets?.length; i++) {
+ if (result.assets[i].uri) {
+ setFileForm((prev) => [...prev, result.assets[i]])
+ }
+ }
+ }
+ };
+
+ function deleteFile(index: number) {
+ setFileForm([...fileForm.filter((val, i) => i !== index)])
+ setModalFile(false)
+ }
+
async function handleCreate() {
try {
setLoading(true)
@@ -181,6 +207,26 @@ export default function CreateDiscussionGeneral() {
onChange={(val) => { validationForm("desc", val) }}
multiline
/>
+
+ {
+ fileForm.length > 0
+ &&
+
+ File
+ {
+ fileForm.map((item, index) => (
+ 1 ? "bottom" : "none"}
+ icon={}
+ title={item.name}
+ titleWeight="normal"
+ onPress={() => { setIndexDelFile(index); setModalFile(true) }}
+ />
+ ))
+ }
+
+ }
{
@@ -240,6 +286,16 @@ export default function CreateDiscussionGeneral() {
idParent={valSelect == "member" ? chooseGroup.val : ""}
valChoose={valChoose}
/>
+
+
+
+ }
+ title="Hapus"
+ onPress={() => { deleteFile(indexDelFile) }}
+ />
+
+
);
}
diff --git a/app/(application)/discussion/edit/[id].tsx b/app/(application)/discussion/edit/[id].tsx
index d7bd3fa..4271d8e 100644
--- a/app/(application)/discussion/edit/[id].tsx
+++ b/app/(application)/discussion/edit/[id].tsx
@@ -1,10 +1,17 @@
+import Text from "@/components/Text";
+import BorderBottomItem from "@/components/borderBottomItem";
import ButtonBackHeader from "@/components/buttonBackHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader";
+import ButtonSelect from "@/components/buttonSelect";
+import DrawerBottom from "@/components/drawerBottom";
import { InputForm } from "@/components/inputForm";
+import MenuItemRow from "@/components/menuItemRow";
import Styles from "@/constants/Styles";
import { apiEditDiscussionGeneral, apiGetDiscussionGeneralOne } from "@/lib/api";
import { setUpdateDiscussionGeneralDetail } from "@/lib/discussionGeneralDetail";
import { useAuthSession } from "@/providers/AuthProvider";
+import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons";
+import * as DocumentPicker from "expo-document-picker";
import { router, Stack, useLocalSearchParams } from "expo-router";
import { useEffect, useState } from "react";
import { SafeAreaView, ScrollView, View } from "react-native";
@@ -17,6 +24,9 @@ export default function EditDiscussionGeneral() {
const [disableBtn, setDisableBtn] = useState(false)
const dispatch = useDispatch()
const [loading, setLoading] = useState(false)
+ const [fileForm, setFileForm] = useState([])
+ const [isModalFile, setModalFile] = useState(false)
+ const [indexDelFile, setIndexDelFile] = useState(0)
const update = useSelector((state: any) => state.discussionGeneralDetailUpdate)
const [dataForm, setDataForm] = useState({
title: "",
@@ -78,6 +88,25 @@ export default function EditDiscussionGeneral() {
checkForm()
}, [error, dataForm])
+ const pickDocumentAsync = async () => {
+ let result = await DocumentPicker.getDocumentAsync({
+ type: ["*/*"],
+ multiple: true
+ });
+ if (!result.canceled) {
+ for (let i = 0; i < result.assets?.length; i++) {
+ if (result.assets[i].uri) {
+ setFileForm((prev) => [...prev, result.assets[i]])
+ }
+ }
+ }
+ };
+
+ function deleteFile(index: number) {
+ setFileForm([...fileForm.filter((val, i) => i !== index)])
+ setModalFile(false)
+ }
+
async function handleEdit() {
try {
@@ -142,8 +171,38 @@ export default function EditDiscussionGeneral() {
onChange={(val) => validationForm("desc", val)}
multiline
/>
+
+ {
+ fileForm.length > 0
+ &&
+
+ File
+ {
+ fileForm.map((item, index) => (
+ 1 ? "bottom" : "none"}
+ icon={}
+ title={item.name}
+ titleWeight="normal"
+ onPress={() => { setIndexDelFile(index); setModalFile(true) }}
+ />
+ ))
+ }
+
+ }
+
+
+
+ }
+ title="Hapus"
+ onPress={() => { deleteFile(indexDelFile) }}
+ />
+
+
);
}
diff --git a/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/edit.tsx b/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/edit.tsx
index e06d56e..60d1fe5 100644
--- a/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/edit.tsx
+++ b/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/edit.tsx
@@ -1,10 +1,17 @@
+import BorderBottomItem from "@/components/borderBottomItem";
import ButtonBackHeader from "@/components/buttonBackHeader";
import ButtonSaveHeader from "@/components/buttonSaveHeader";
+import ButtonSelect from "@/components/buttonSelect";
+import DrawerBottom from "@/components/drawerBottom";
import { InputForm } from "@/components/inputForm";
+import MenuItemRow from "@/components/menuItemRow";
+import Text from "@/components/Text";
import Styles from "@/constants/Styles";
import { apiEditDiscussion, apiGetDiscussionOne } from "@/lib/api";
import { setUpdateDiscussion } from "@/lib/discussionUpdate";
import { useAuthSession } from "@/providers/AuthProvider";
+import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons";
+import * as DocumentPicker from "expo-document-picker";
import { router, Stack, useLocalSearchParams } from "expo-router";
import { useEffect, useState } from "react";
import { SafeAreaView, ScrollView, View } from "react-native";
@@ -18,6 +25,9 @@ export default function DiscussionDivisionEdit() {
const update = useSelector((state: any) => state.discussionUpdate);
const dispatch = useDispatch();
const [loading, setLoading] = useState(false)
+ const [fileForm, setFileForm] = useState([])
+ const [isModalFile, setModalFile] = useState(false)
+ const [indexDelFile, setIndexDelFile] = useState(0)
async function handleLoad() {
try {
@@ -49,7 +59,7 @@ export default function DiscussionDivisionEdit() {
Toast.show({ type: 'small', text1: 'Berhasil mengubah data', })
dispatch(setUpdateDiscussion({ ...update, data: !update.data }));
router.back();
- }else{
+ } else {
Toast.show({ type: 'small', text1: response.message, })
}
} catch (error) {
@@ -60,6 +70,27 @@ export default function DiscussionDivisionEdit() {
}
}
+ const pickDocumentAsync = async () => {
+ let result = await DocumentPicker.getDocumentAsync({
+ type: ["*/*"],
+ multiple: true
+ });
+ if (!result.canceled) {
+ for (let i = 0; i < result.assets?.length; i++) {
+ if (result.assets[i].uri) {
+ setFileForm((prev) => [...prev, result.assets[i]])
+ }
+ }
+ }
+ };
+
+
+
+ function deleteFile(index: number) {
+ setFileForm([...fileForm.filter((val, i) => i !== index)])
+ setModalFile(false)
+ }
+
return (
+
+
+ {
+ fileForm.length > 0
+ &&
+
+ File
+ {
+ fileForm.map((item, index) => (
+ 1 ? "bottom" : "none"}
+ icon={}
+ title={item.name}
+ titleWeight="normal"
+ onPress={() => { setIndexDelFile(index); setModalFile(true) }}
+ />
+ ))
+ }
+
+ }
+
+
+
+
+ }
+ title="Hapus"
+ onPress={() => { deleteFile(indexDelFile) }}
+ />
+
+
+
);
}
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 1f02b58..12a3132 100644
--- a/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/index.tsx
+++ b/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/index.tsx
@@ -1,5 +1,6 @@
import AlertKonfirmasi from "@/components/alertKonfirmasi";
import BorderBottomItem from "@/components/borderBottomItem";
+import BorderBottomItem2 from "@/components/borderBottomItem2";
import ButtonBackHeader from "@/components/buttonBackHeader";
import HeaderRightDiscussionDetail from "@/components/discussion/headerDiscussionDetail";
import DrawerBottom from "@/components/drawerBottom";
@@ -288,7 +289,7 @@ export default function DiscussionDetail() {
loading ?
:
- ()
const [desc, setDesc] = useState('')
@@ -18,6 +26,29 @@ export default function CreateDiscussionDivision() {
const update = useSelector((state: any) => state.discussionUpdate)
const dispatch = useDispatch();
const [loading, setLoading] = useState(false)
+ const [fileForm, setFileForm] = useState([])
+ const [isModalFile, setModalFile] = useState(false)
+ const [indexDelFile, setIndexDelFile] = useState(0)
+
+ const pickDocumentAsync = async () => {
+ let result = await DocumentPicker.getDocumentAsync({
+ type: ["*/*"],
+ multiple: true
+ });
+ if (!result.canceled) {
+ for (let i = 0; i < result.assets?.length; i++) {
+ if (result.assets[i].uri) {
+ setFileForm((prev) => [...prev, result.assets[i]])
+ }
+ }
+ }
+ };
+
+ function deleteFile(index: number) {
+ setFileForm([...fileForm.filter((val, i) => i !== index)])
+ setModalFile(false)
+ }
+
async function handleCreate() {
try {
@@ -64,8 +95,38 @@ export default function CreateDiscussionDivision() {
onChange={setDesc}
multiline
/>
+
+ {
+ fileForm.length > 0
+ &&
+
+ File
+ {
+ fileForm.map((item, index) => (
+ 1 ? "bottom" : "none"}
+ icon={}
+ title={item.name}
+ titleWeight="normal"
+ onPress={() => { setIndexDelFile(index); setModalFile(true) }}
+ />
+ ))
+ }
+
+ }
+
+
+
+ }
+ title="Hapus"
+ onPress={() => { deleteFile(indexDelFile) }}
+ />
+
+
)
}
\ No newline at end of file
diff --git a/components/borderBottomItem2.tsx b/components/borderBottomItem2.tsx
new file mode 100644
index 0000000..0e2ee6a
--- /dev/null
+++ b/components/borderBottomItem2.tsx
@@ -0,0 +1,111 @@
+import { ColorsStatus } from "@/constants/ColorsStatus";
+import Styles from "@/constants/Styles";
+import { Ionicons } from "@expo/vector-icons";
+import React, { useState } from "react";
+import { Dimensions, Pressable, View } from "react-native";
+import { ScrollView } from "react-native-gesture-handler";
+import Text from "./Text";
+
+type Props = {
+ title?: string
+ subtitle?: string | React.ReactNode
+ icon: React.ReactNode
+ desc?: string
+ rightTopInfo?: string
+ onPress?: () => void
+ onLongPress?: () => void
+ borderType: 'all' | 'bottom' | 'none'
+ leftBottomInfo?: React.ReactNode | string
+ rightBottomInfo?: React.ReactNode | string
+ titleWeight?: 'normal' | 'bold'
+ bgColor?: 'white' | 'transparent'
+ width?: number
+ descEllipsize?: boolean
+ textColor?: string,
+ colorPress?: boolean
+ titleShowAll?: boolean
+}
+
+export default function BorderBottomItem2({ title, subtitle, icon, desc, onPress, onLongPress, rightTopInfo, borderType, leftBottomInfo, rightBottomInfo, titleWeight, bgColor, width, descEllipsize, textColor, colorPress, titleShowAll }: Props) {
+ const lebarDim = Dimensions.get("window").width;
+ const lebar = width ? lebarDim * width / 100 : 'auto';
+ const textColorFix = textColor ? textColor : 'black';
+ const [isTap, setIsTap] = useState(false);
+
+
+ return (
+ setIsTap(true)}
+ onPressOut={() => setIsTap(false)}
+ style={({ pressed }) => [
+ borderType == 'bottom'
+ ? Styles.wrapItemBorderBottom
+ : borderType == 'all'
+ ? Styles.wrapItemBorderAll
+ : Styles.wrapItemBorderNone,
+ bgColor && bgColor == 'white' && ColorsStatus.white,
+ // efek warna saat ditekan (sementara)
+ isTap && colorPress && ColorsStatus.pressedGray,
+ ]}
+ >
+
+ {icon}
+
+
+ {title}
+ {
+ subtitle &&
+ typeof subtitle == "string"
+ ? {subtitle}
+ :
+ {subtitle}
+
+ }
+
+ {
+ rightTopInfo && {rightTopInfo}
+ }
+
+
+
+ {desc && {desc}}
+
+
+
+ Text petama.pdf
+
+
+
+ Text petama.pdf
+
+
+
+ Text petama.pdf
+
+
+
+ Text petama.pdf
+
+
+ {
+ (leftBottomInfo || rightBottomInfo) &&
+ (
+
+ {
+ typeof leftBottomInfo == 'string' ?
+ {leftBottomInfo}
+ :
+ leftBottomInfo
+ }
+ {
+ typeof rightBottomInfo == 'string' ?
+ {rightBottomInfo}
+ :
+ rightBottomInfo
+ }
+
+ )
+ }
+
+ )
+}
\ No newline at end of file
diff --git a/constants/Styles.ts b/constants/Styles.ts
index 4ddf374..f090465 100644
--- a/constants/Styles.ts
+++ b/constants/Styles.ts
@@ -178,6 +178,9 @@ const Styles = StyleSheet.create({
ph20: {
paddingHorizontal: 20,
},
+ pv03: {
+ paddingVertical: 3
+ },
pv05: {
paddingVertical: 5
},