From 589068703dc733713f563780568e3b34f6f8162e Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Fri, 1 Aug 2025 17:39:58 +0800 Subject: [PATCH] fix : ios Deskripsi: - tambah edit banner - tambah edit anggota - new folder dokumen divisi - rename file folder dokumen divisi - tambah kalendar divisi > tanggal dan time - edit kalender divisi > tanggal dan time - tambah diskusi umum - multi file pada tambah file project - multi file pada tambah file task divisi No Issues --- app.json | 1 + app/(application)/banner/[id].tsx | 2 +- app/(application)/banner/create.tsx | 2 +- app/(application)/discussion/create.tsx | 6 +++++- app/(application)/discussion/edit/[id].tsx | 1 + .../[id]/(fitur-division)/document/index.tsx | 4 +--- .../task/[detail]/add-file.tsx | 18 ++++++++++-------- .../[id]/(fitur-division)/task/create.tsx | 8 +++++--- app/(application)/edit-profile.tsx | 2 +- app/(application)/member/create.tsx | 11 +++++++++-- app/(application)/member/edit/[id].tsx | 2 +- app/(application)/project/[id]/add-file.tsx | 19 +++++++++++-------- app/(application)/project/create.tsx | 8 +++++--- lib/api.ts | 14 +++++++------- 14 files changed, 59 insertions(+), 39 deletions(-) diff --git a/app.json b/app.json index dabd276..501c0ba 100644 --- a/app.json +++ b/app.json @@ -42,6 +42,7 @@ } ], "expo-font", + "expo-image-picker", "expo-web-browser", [ "@react-native-firebase/app", diff --git a/app/(application)/banner/[id].tsx b/app/(application)/banner/[id].tsx index e38ea96..201c8f0 100644 --- a/app/(application)/banner/[id].tsx +++ b/app/(application)/banner/[id].tsx @@ -34,7 +34,7 @@ export default function EditBanner() { const pickImageAsync = async () => { let result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ["images"], - allowsEditing: true, + allowsEditing: false, quality: 1, aspect: [1535, 450], }); diff --git a/app/(application)/banner/create.tsx b/app/(application)/banner/create.tsx index 31eb152..725e885 100644 --- a/app/(application)/banner/create.tsx +++ b/app/(application)/banner/create.tsx @@ -33,7 +33,7 @@ export default function CreateBanner() { const pickImageAsync = async () => { let result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ["images"], - allowsEditing: true, + allowsEditing: false, quality: 1, aspect: [1535, 450], }); diff --git a/app/(application)/discussion/create.tsx b/app/(application)/discussion/create.tsx index 257218c..e457c71 100644 --- a/app/(application)/discussion/create.tsx +++ b/app/(application)/discussion/create.tsx @@ -84,6 +84,9 @@ export default function CreateDiscussionGeneral() { checkForm(); }, [error, dataForm]); + useEffect(() => { + dispatch(setMemberChoose([])) + }, []) function handleBack() { dispatch(setMemberChoose([])) @@ -101,7 +104,7 @@ export default function CreateDiscussionGeneral() { dispatch(setUpdateDiscussionGeneralDetail(!update)) Toast.show({ type: 'small', text1: 'Berhasil menambahkan data', }) router.back() - }else{ + } else { Toast.show({ type: 'small', text1: response.message, }) } } catch (error) { @@ -171,6 +174,7 @@ export default function CreateDiscussionGeneral() { error={error.desc} errorText="Diskusi tidak boleh kosong" onChange={(val) => { validationForm("desc", val) }} + multiline /> validationForm("desc", val)} + multiline /> diff --git a/app/(application)/division/[id]/(fitur-division)/document/index.tsx b/app/(application)/division/[id]/(fitur-division)/document/index.tsx index 7b4f40d..b599dee 100644 --- a/app/(application)/division/[id]/(fitur-division)/document/index.tsx +++ b/app/(application)/division/[id]/(fitur-division)/document/index.tsx @@ -550,9 +550,7 @@ export default function DocumentDivision() { title="Ganti Nama" isVisible={isRename} setVisible={() => { setRename(false) }} - onSubmit={() => { - handleRename(); - }} + onSubmit={() => { handleRename() }} disableSubmit={bodyRename.name == ""} > 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 index 9da4b3d..36c37a2 100644 --- a/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-file.tsx +++ b/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-file.tsx @@ -36,16 +36,18 @@ export default function TaskDivisionAddFile() { const pickDocumentAsync = async () => { let result = await DocumentPicker.getDocumentAsync({ type: ["*/*"], - multiple: false, + multiple: true, }); if (!result.canceled) { - if (result.assets?.[0].uri) { - const check = await handleCheckFile(result.assets?.[0]); - if (check) { - setFileForm([...fileForm, result.assets?.[0]]); - setListFile([...listFile, result.assets?.[0].name]); - } else { - Toast.show({ type: 'small', text1: 'File sudah ada', }) + for (let i = 0; i < result.assets?.length; i++) { + if (result.assets?.[i].uri) { + const check = await handleCheckFile(result.assets?.[i]); + if (check) { + setFileForm((prev) => [...prev, result.assets?.[i]]); + setListFile((prev) => [...prev, result.assets?.[i].name]); + } else { + Toast.show({ type: 'small', text1: 'File sudah ada', }) + } } } } diff --git a/app/(application)/division/[id]/(fitur-division)/task/create.tsx b/app/(application)/division/[id]/(fitur-division)/task/create.tsx index db44ec5..ebf87ea 100644 --- a/app/(application)/division/[id]/(fitur-division)/task/create.tsx +++ b/app/(application)/division/[id]/(fitur-division)/task/create.tsx @@ -52,11 +52,13 @@ export default function CreateTaskDivision() { const pickDocumentAsync = async () => { let result = await DocumentPicker.getDocumentAsync({ type: ["*/*"], - multiple: false + multiple: true }); if (!result.canceled) { - if (result.assets[0].uri) { - setFileForm([...fileForm, result.assets[0]]) + for (let i = 0; i < result.assets?.length; i++) { + if (result.assets[i].uri) { + setFileForm((prev) => [...prev, result.assets[i]]) + } } } }; diff --git a/app/(application)/edit-profile.tsx b/app/(application)/edit-profile.tsx index aa7cea5..a9687f1 100644 --- a/app/(application)/edit-profile.tsx +++ b/app/(application)/edit-profile.tsx @@ -187,7 +187,7 @@ export default function EditProfile() { const pickImageAsync = async () => { let result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ["images"], - allowsEditing: true, + allowsEditing: false, quality: 1, aspect: [1, 1], }); diff --git a/app/(application)/member/create.tsx b/app/(application)/member/create.tsx index f76801f..6a39a72 100644 --- a/app/(application)/member/create.tsx +++ b/app/(application)/member/create.tsx @@ -36,6 +36,7 @@ export default function CreateMember() { const [chooseGender, setChooseGender] = useState({ val: "", label: "" }); const [selectedImage, setSelectedImage] = useState(undefined); const entityUser = useSelector((state: any) => state.user); + const entities = useSelector((state: any) => state.entities) const [isSelect, setSelect] = useState(false); const [disableBtn, setDisableBtn] = useState(true) const [valChoose, setValChoose] = useState("") @@ -142,6 +143,12 @@ export default function CreateMember() { checkForm() }, [error, dataForm]) + useEffect(() => { + if(entityUser.role !="supadmin" && entityUser.role != "developer"){ + validationForm("group", entities.idGroup, entities.group) + } + }, []) + async function handleCreate() { try { @@ -162,7 +169,7 @@ export default function CreateMember() { fd.append("file", "undefined") } - const response = await apiCreateUser(fd) + const response = await apiCreateUser({data: fd}) if (response.success) { Toast.show({ type: 'small', text1: 'Berhasil menambahkan data', }) dispatch(setUpdateMember(!update)) @@ -179,7 +186,7 @@ export default function CreateMember() { const pickImageAsync = async () => { let result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ["images"], - allowsEditing: true, + allowsEditing: false, quality: 1, aspect: [1, 1], }); diff --git a/app/(application)/member/edit/[id].tsx b/app/(application)/member/edit/[id].tsx index b25575e..53c7183 100644 --- a/app/(application)/member/edit/[id].tsx +++ b/app/(application)/member/edit/[id].tsx @@ -212,7 +212,7 @@ export default function EditMember() { const pickImageAsync = async () => { let result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ["images"], - allowsEditing: true, + allowsEditing: false, quality: 1, aspect: [1, 1], }); diff --git a/app/(application)/project/[id]/add-file.tsx b/app/(application)/project/[id]/add-file.tsx index da7f9eb..93dda52 100644 --- a/app/(application)/project/[id]/add-file.tsx +++ b/app/(application)/project/[id]/add-file.tsx @@ -30,16 +30,19 @@ export default function ProjectAddFile() { const pickDocumentAsync = async () => { let result = await DocumentPicker.getDocumentAsync({ type: ["*/*"], - multiple: false + multiple: true }); + if (!result.canceled) { - if (result.assets?.[0].uri) { - const check = await handleCheckFile(result.assets?.[0]) - if (check) { - setFileForm([...fileForm, result.assets?.[0]]) - setListFile([...listFile, result.assets?.[0].name]) - } else { - Toast.show({ type: 'small', text1: 'File sudah ada', }) + for (let i = 0; i < result.assets?.length; i++) { + if (result.assets?.[i].uri) { + const check = await handleCheckFile(result.assets?.[i]) + if (check) { + setFileForm((prev) => [...prev, result.assets?.[i]]) + setListFile((prev) => [...prev, result.assets?.[i].name]) + } else { + Toast.show({ type: 'small', text1: 'File yg telah terupload tidak bisa diupload ulang', }) + } } } } diff --git a/app/(application)/project/create.tsx b/app/(application)/project/create.tsx index 5d01ac5..b76a956 100644 --- a/app/(application)/project/create.tsx +++ b/app/(application)/project/create.tsx @@ -146,11 +146,13 @@ export default function CreateProject() { const pickDocumentAsync = async () => { let result = await DocumentPicker.getDocumentAsync({ type: ["*/*"], - multiple: false + multiple: true }); if (!result.canceled) { - if (result.assets[0].uri) { - setFileForm([...fileForm, result.assets[0]]) + for (let i = 0; i < result.assets?.length; i++) { + if (result.assets[i].uri) { + setFileForm((prev) => [...prev, result.assets[i]]) + } } } }; diff --git a/lib/api.ts b/lib/api.ts index 800bf23..250c139 100644 --- a/lib/api.ts +++ b/lib/api.ts @@ -150,7 +150,7 @@ export const apiGetUser = async ({ user, active, search, group, page }: { user: }; -export const apiCreateUser = async (data: FormData) => { +export const apiCreateUser = async ({data}: {data: FormData}) => { const response = await api.post('/mobile/user', data, { headers: { 'Content-Type': 'multipart/form-data', @@ -219,7 +219,7 @@ export const apiEditDiscussionGeneral = async (data: { user: string, title: stri }; export const apiCreateDiscussionGeneral = async ({ data }: { data: { idGroup: string, title: string, desc: string, user: string, member: [] } }) => { - const response = await api.post(`/mobile/discussion-general/`, data) + const response = await api.post(`/mobile/discussion-general`, data) return response.data; }; @@ -604,7 +604,7 @@ export const apiGetDocumentInformasi = async ({ user, item, cat }: { user: strin }; export const apiDocumentRename = async (data: { name: string, user: string, id: string, path: string, idDivision: string, extension: string }) => { - const response = await api.put(`/mobile/document/`, data) + const response = await api.put(`/mobile/document`, data) return response.data; }; @@ -614,7 +614,7 @@ export const apiDocumentDelete = async (data: { user: string, data: any[] }) => }; export const apiCreateFolderDocument = async ({ data }: { data: { name: string, path: string, idDivision: string, user: string } }) => { - const response = await api.post(`/mobile/document/`, data) + const response = await api.post(`/mobile/document`, data) return response.data; }; @@ -646,12 +646,12 @@ export const apiShareDocument = async (data: { dataDivision: any[], dataItem: an }; export const apiRegisteredToken = async (data: { user: string, token: string }) => { - const response = await api.post(`/mobile/auth-token/`, data) + const response = await api.post(`/mobile/auth-token`, data) return response.data; }; export const apiUnregisteredToken = async (data: { user: string, token: string }) => { - const response = await api.put(`/mobile/auth-token/`, data) + const response = await api.put(`/mobile/auth-token`, data) return response.data; }; @@ -661,6 +661,6 @@ export const apiGetNotification = async ({ user, page }: { user: string, page?: }; export const apiReadOneNotification = async (data: { user: string, id: string }) => { - const response = await api.put(`/mobile/home/notification/`, data) + const response = await api.put(`/mobile/home/notification`, data) return response.data; }; \ No newline at end of file