From a5c58d0de231b88cccdcd6cfffc8085ef1fffc4e Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Mon, 8 Jun 2026 16:49:16 +0800 Subject: [PATCH] feat: tambah fitur pilih semua pada halaman pilih anggota divisi --- .../division/[id]/add-member.tsx | 27 +++++++++++++++++- .../division/create/add-member.tsx | 28 +++++++++++++++++-- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/app/(application)/division/[id]/add-member.tsx b/app/(application)/division/[id]/add-member.tsx index 1b172c4..ad8205f 100644 --- a/app/(application)/division/[id]/add-member.tsx +++ b/app/(application)/division/[id]/add-member.tsx @@ -77,6 +77,22 @@ export default function AddMemberDivision() { } } + const availableData = data.filter((item: any) => !dataOld.some((i: any) => i.idUser == item.id)) + const isAllSelected = availableData.length > 0 && availableData.every((item: any) => + selectMember.some((s: any) => s.idUser == item.id) + ) + + function handleSelectAll() { + if (isAllSelected) { + setSelectMember([]) + } else { + const newMembers = availableData + .filter((item: any) => !selectMember.some((s: any) => s.idUser == item.id)) + .map((item: any) => ({ idUser: item.id, name: item.name, img: item.img })) + setSelectMember([...selectMember, ...newMembers]) + } + } + async function handleAddMember() { try { setLoading(true) @@ -141,7 +157,7 @@ export default function AddMemberDivision() { selectMember.length > 0 ? - + { selectMember.map((item: any, index: any) => ( + {availableData.length > 0 && ( + + {isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'} + {isAllSelected && } + + )} { data.length > 0 ? data.map((item: any, index: any) => { diff --git a/app/(application)/division/create/add-member.tsx b/app/(application)/division/create/add-member.tsx index 4af4c87..715373b 100644 --- a/app/(application)/division/create/add-member.tsx +++ b/app/(application)/division/create/add-member.tsx @@ -9,8 +9,8 @@ import Styles from "@/constants/Styles"; import { apiGetUser } from "@/lib/api"; import { setFormCreateDivision } from "@/lib/divisionCreate"; import { useAuthSession } from "@/providers/AuthProvider"; -import { AntDesign } from "@expo/vector-icons"; import { useTheme } from "@/providers/ThemeProvider"; +import { AntDesign } from "@expo/vector-icons"; import { router, Stack, useLocalSearchParams } from "expo-router"; import { useEffect, useState } from "react"; import { Pressable, ScrollView, View } from "react-native"; @@ -55,6 +55,21 @@ export default function CreateDivisionAddMember() { } } + const isAllSelected = data.length > 0 && data.every((item: any) => + selectMember.some((s: any) => s.idUser == item.id) + ) + + function handleSelectAll() { + if (isAllSelected) { + setSelectMember([]) + } else { + const newMembers = data + .filter((item: any) => !selectMember.some((s: any) => s.idUser == item.id)) + .map((item: any) => ({ idUser: item.id, name: item.name, img: item.img })) + setSelectMember([...selectMember, ...newMembers]) + } + } + async function handleAddMember() { dispatch(setFormCreateDivision({ ...update, member: selectMember })) router.push(`./add-admin-division`) @@ -93,7 +108,7 @@ export default function CreateDivisionAddMember() { selectMember.length > 0 ? - + { selectMember.map((item: any, index: any) => ( + {data.length > 0 && ( + + {isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'} + {isAllSelected && } + + )} { data.length > 0 ? data.map((item: any, index: any) => {