feat: tambah fitur pilih semua pada halaman pilih anggota divisi

This commit is contained in:
2026-06-08 16:49:16 +08:00
parent c979a68028
commit a5c58d0de2
2 changed files with 52 additions and 3 deletions

View File

@@ -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() { async function handleAddMember() {
try { try {
setLoading(true) setLoading(true)
@@ -141,7 +157,7 @@ export default function AddMemberDivision() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}> <ScrollView horizontal style={[Styles.mb05, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -162,6 +178,15 @@ export default function AddMemberDivision() {
showsVerticalScrollIndicator={false} showsVerticalScrollIndicator={false}
> >
{availableData.length > 0 && (
<Pressable
style={[Styles.itemSelectModal, { borderColor: colors.icon + '20', paddingTop: 0 }]}
onPress={handleSelectAll}
>
<Text style={[Styles.textMediumSemiBold]}>{isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'}</Text>
{isAllSelected && <AntDesign name="check" size={20} color={colors.text} />}
</Pressable>
)}
{ {
data.length > 0 ? data.length > 0 ?
data.map((item: any, index: any) => { data.map((item: any, index: any) => {

View File

@@ -9,8 +9,8 @@ import Styles from "@/constants/Styles";
import { apiGetUser } from "@/lib/api"; import { apiGetUser } from "@/lib/api";
import { setFormCreateDivision } from "@/lib/divisionCreate"; import { setFormCreateDivision } from "@/lib/divisionCreate";
import { useAuthSession } from "@/providers/AuthProvider"; import { useAuthSession } from "@/providers/AuthProvider";
import { AntDesign } from "@expo/vector-icons";
import { useTheme } from "@/providers/ThemeProvider"; import { useTheme } from "@/providers/ThemeProvider";
import { AntDesign } from "@expo/vector-icons";
import { router, Stack, useLocalSearchParams } from "expo-router"; import { router, Stack, useLocalSearchParams } from "expo-router";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { Pressable, ScrollView, View } from "react-native"; 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() { async function handleAddMember() {
dispatch(setFormCreateDivision({ ...update, member: selectMember })) dispatch(setFormCreateDivision({ ...update, member: selectMember }))
router.push(`./add-admin-division`) router.push(`./add-admin-division`)
@@ -93,7 +108,7 @@ export default function CreateDivisionAddMember() {
selectMember.length > 0 selectMember.length > 0
? ?
<View> <View>
<ScrollView horizontal style={[Styles.mb10, Styles.pv10]} showsHorizontalScrollIndicator={false}> <ScrollView horizontal style={[Styles.mb05, Styles.pv10]} showsHorizontalScrollIndicator={false}>
{ {
selectMember.map((item: any, index: any) => ( selectMember.map((item: any, index: any) => (
<ImageWithLabel <ImageWithLabel
@@ -114,6 +129,15 @@ export default function CreateDivisionAddMember() {
showsVerticalScrollIndicator={false} showsVerticalScrollIndicator={false}
> >
{data.length > 0 && (
<Pressable
style={[Styles.itemSelectModal, { borderColor: colors.icon + '20', paddingTop: 0 }]}
onPress={handleSelectAll}
>
<Text style={[Styles.textMediumSemiBold]}>{isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'}</Text>
{isAllSelected && <AntDesign name="check" size={20} color={colors.text} />}
</Pressable>
)}
{ {
data.length > 0 ? data.length > 0 ?
data.map((item: any, index: any) => { data.map((item: any, index: any) => {