feat: tambah fitur pilih semua pada halaman pilih anggota divisi
This commit is contained in:
@@ -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) => {
|
||||||
|
|||||||
@@ -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) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user