diff --git a/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-member.tsx b/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-member.tsx
index d212b12..8739115 100644
--- a/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-member.tsx
+++ b/app/(application)/division/[id]/(fitur-division)/task/[detail]/add-member.tsx
@@ -74,6 +74,22 @@ export default function AddMemberTask() {
}
}
+ const availableData = data.filter((item: any) => !dataOld.some((i: any) => i.idUser == item.idUser))
+ const isAllSelected = availableData.length > 0 && availableData.every((item: any) =>
+ selectMember.some((s: any) => s.idUser == item.idUser)
+ )
+
+ function handleSelectAll() {
+ if (isAllSelected) {
+ setSelectMember([])
+ } else {
+ const newMembers = availableData
+ .filter((item: any) => !selectMember.some((s: any) => s.idUser == item.idUser))
+ .map((item: any) => ({ idUser: item.idUser, name: item.name, img: item.img }))
+ setSelectMember([...selectMember, ...newMembers])
+ }
+ }
+
async function handleAddMember() {
try {
setLoading(true)
@@ -159,6 +175,15 @@ export default function AddMemberTask() {
showsVerticalScrollIndicator={false}
>
+ {availableData.length > 0 && (
+
+ {isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'}
+ {isAllSelected && }
+
+ )}
{
data.length > 0 ?
data.map((item: any, index: any) => {
diff --git a/app/(application)/division/[id]/(fitur-division)/task/create/member.tsx b/app/(application)/division/[id]/(fitur-division)/task/create/member.tsx
index 1567d06..eefb79d 100644
--- a/app/(application)/division/[id]/(fitur-division)/task/create/member.tsx
+++ b/app/(application)/division/[id]/(fitur-division)/task/create/member.tsx
@@ -54,6 +54,21 @@ export default function AddMemberCreateTask() {
}
}
+ const isAllSelected = data.length > 0 && data.every((item: any) =>
+ selectMember.some((s: any) => s.idUser == item.idUser)
+ )
+
+ function handleSelectAll() {
+ if (isAllSelected) {
+ setSelectMember([])
+ } else {
+ const newMembers = data
+ .filter((item: any) => !selectMember.some((s: any) => s.idUser == item.idUser))
+ .map((item: any) => ({ idUser: item.idUser, name: item.name, img: item.img }))
+ setSelectMember([...selectMember, ...newMembers])
+ }
+ }
+
async function handleAddMember() {
try {
dispatch(setMemberChoose(selectMember))
@@ -127,6 +142,15 @@ export default function AddMemberCreateTask() {
showsVerticalScrollIndicator={false}
>
+ {data.length > 0 && (
+
+ {isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'}
+ {isAllSelected && }
+
+ )}
{
data.length > 0 ?
data.map((item: any, index: any) => {
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) => {
diff --git a/app/(application)/notification.tsx b/app/(application)/notification.tsx
index 6346a4b..d8e2fa3 100644
--- a/app/(application)/notification.tsx
+++ b/app/(application)/notification.tsx
@@ -84,7 +84,7 @@ export default function Notification() {
}
const parseDate = (str: string) => {
const [d, m, y] = str.split(' ')
- return new Date(Number(y), BULAN[m] ?? 0, Number(d)).getTime()
+ return new Date(Number(y), BULAN[m?.toUpperCase()] ?? 0, Number(d)).getTime()
}
const groups: Record = {}
diff --git a/app/(application)/project/[id]/add-member.tsx b/app/(application)/project/[id]/add-member.tsx
index 10af1ab..4aaddaa 100644
--- a/app/(application)/project/[id]/add-member.tsx
+++ b/app/(application)/project/[id]/add-member.tsx
@@ -78,6 +78,22 @@ export default function AddMemberProject() {
}
}
+ 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)
@@ -160,6 +176,15 @@ export default function AddMemberProject() {
showsVerticalScrollIndicator={false}
style={[Styles.h100, { backgroundColor: colors.background }]}
>
+ {availableData.length > 0 && (
+
+ {isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'}
+ {isAllSelected && }
+
+ )}
{
data.length > 0 ?
diff --git a/app/(application)/project/create/member.tsx b/app/(application)/project/create/member.tsx
index fbba5a1..170b3d6 100644
--- a/app/(application)/project/create/member.tsx
+++ b/app/(application)/project/create/member.tsx
@@ -61,6 +61,21 @@ export default function AddMemberCreateProject() {
}
}
+ 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() {
try {
dispatch(setMemberChoose(selectMember))
@@ -134,6 +149,15 @@ export default function AddMemberCreateProject() {
style={[Styles.h100, Styles.flex1, { backgroundColor: colors.background }]}
>
+ {data.length > 0 && (
+
+ {isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'}
+ {isAllSelected && }
+
+ )}
{
data.length > 0 ?
data.map((item: any, index: any) => {
diff --git a/components/home/carouselHome2.tsx b/components/home/carouselHome2.tsx
index 8381596..0bed747 100644
--- a/components/home/carouselHome2.tsx
+++ b/components/home/carouselHome2.tsx
@@ -67,9 +67,8 @@ export default function CaraouselHome2({ refreshing }: { refreshing: boolean })
diff --git a/components/itemSectionTanggalTugas.tsx b/components/itemSectionTanggalTugas.tsx
index 423a94c..d4b84fb 100644
--- a/components/itemSectionTanggalTugas.tsx
+++ b/components/itemSectionTanggalTugas.tsx
@@ -97,7 +97,7 @@ export default function ItemSectionTanggalTugas({ status, title, dateStart, date
borderWidth: 1,
borderColor: colors.icon + '18',
backgroundColor: colors.card,
- marginBottom: 10,
+ marginBottom: 0,
}}
>
{/* Accent bar kiri */}
diff --git a/components/modalSelectMultiple.tsx b/components/modalSelectMultiple.tsx
index ebebbd7..2d8b628 100644
--- a/components/modalSelectMultiple.tsx
+++ b/components/modalSelectMultiple.tsx
@@ -128,6 +128,35 @@ export default function ModalSelectMultiple({ open, close, title, category, choo
};
+ const groupsWithDivisions = data.filter((group: any) => group.Division?.length > 0)
+ const isAllSelected = category === 'choose-division'
+ ? groupsWithDivisions.length > 0 && groupsWithDivisions.every((group: any) =>
+ checked[group.id]?.length === group.Division?.length
+ )
+ : data.length > 0 && selectedDivision.length === data.length
+
+ const handleSelectAll = () => {
+ if (category === 'choose-division') {
+ if (isAllSelected) {
+ setChecked({})
+ } else {
+ const newChecked: CheckedState = {}
+ data.forEach((group: any) => {
+ if (group.Division?.length > 0) {
+ newChecked[group.id] = group.Division.map((d: any) => d.id)
+ }
+ })
+ setChecked(newChecked)
+ }
+ } else {
+ if (isAllSelected) {
+ setSelectedDivision([])
+ } else {
+ setSelectedDivision(data.map((d: any) => ({ id: d.id, name: d.name })))
+ }
+ }
+ }
+
const handleSubmit = () => {
if (category == "choose-division") {
const selectedGroups: GroupData[] = [];
@@ -154,25 +183,32 @@ export default function ModalSelectMultiple({ open, close, title, category, choo
{
category == 'share-division' ?
<>
- {
- data.map((item: any, index: number) => {
- return (
- {
- handleDivisionClick(index)
- }}>
- {item.name}
- {
- selectedDivision.some((i: any) => i.id == item.id)
- ?
- : <>>
- }
-
- )
- })
- }
+
+ {isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'}
+ {isAllSelected && }
+
+ {data.map((item: any, index: number) => {
+ return (
+ {
+ handleDivisionClick(index)
+ }}>
+ {item.name}
+ {
+ selectedDivision.some((i: any) => i.id == item.id)
+ ?
+ : <>>
+ }
+
+ )
+ })}
>
:
- data.map((item: any, index: number) => {
+ <>
+
+ {isAllSelected ? 'Batalkan Semua' : 'Pilih Semua'}
+ {isAllSelected && }
+
+ {data.map((item: any, index: number) => {
return (
{ handleGroupCheck(item.id) }}>
@@ -199,7 +235,8 @@ export default function ModalSelectMultiple({ open, close, title, category, choo
}
)
- })
+ })}
+ >
}
@@ -207,4 +244,4 @@ export default function ModalSelectMultiple({ open, close, title, category, choo
)
-}
\ No newline at end of file
+}
diff --git a/components/project/sectionFile.tsx b/components/project/sectionFile.tsx
index 58cf85b..1f062e7 100644
--- a/components/project/sectionFile.tsx
+++ b/components/project/sectionFile.tsx
@@ -127,7 +127,7 @@ export default function SectionFile({ status, member, refreshing }: { status: nu
<>
- File
+ File
{loading ? (
diff --git a/components/project/sectionMember.tsx b/components/project/sectionMember.tsx
index 5a4dd99..e7aae90 100644
--- a/components/project/sectionMember.tsx
+++ b/components/project/sectionMember.tsx
@@ -74,7 +74,7 @@ export default function SectionMember({ status, refreshing }: { status: number |
return (
<>
-
+
Anggota
{!loading && data.length > 0 && (
{data.length} orang
diff --git a/components/project/sectionTanggalTugas.tsx b/components/project/sectionTanggalTugas.tsx
index 21534ad..dd2e1c4 100644
--- a/components/project/sectionTanggalTugas.tsx
+++ b/components/project/sectionTanggalTugas.tsx
@@ -174,9 +174,9 @@ export default function SectionTanggalTugasProject({ status, member, refreshing,
return (
<>
-
- Tanggal & Tugas
-
+
+ Tanggal & Tugas
+
{loading
? arrSkeleton.map((_, index) => )
: data.length > 0
diff --git a/components/task/sectionFileTask.tsx b/components/task/sectionFileTask.tsx
index 8fa002e..8e82d54 100644
--- a/components/task/sectionFileTask.tsx
+++ b/components/task/sectionFileTask.tsx
@@ -153,7 +153,7 @@ export default function SectionFileTask({ refreshing, isMemberDivision }: { refr
<>
- File
+ File
{loading ? (
{arrSkeleton.map((_, index) => (
diff --git a/components/task/sectionMemberTask.tsx b/components/task/sectionMemberTask.tsx
index 54209b7..8d6948e 100644
--- a/components/task/sectionMemberTask.tsx
+++ b/components/task/sectionMemberTask.tsx
@@ -100,7 +100,7 @@ export default function SectionMemberTask({ refreshing, isAdminDivision }: { ref
return (
<>
-
+
Anggota
{!loading && data.length > 0 && (
{data.length} orang
diff --git a/components/task/sectionTanggalTugasTask.tsx b/components/task/sectionTanggalTugasTask.tsx
index 9783abf..22a3381 100644
--- a/components/task/sectionTanggalTugasTask.tsx
+++ b/components/task/sectionTanggalTugasTask.tsx
@@ -172,9 +172,9 @@ export default function SectionTanggalTugasTask({ refreshing, isMemberDivision,
return (
<>
-
- Tanggal & Tugas
-
+
+ Tanggal & Tugas
+
{loading
? arrSkeleton.map((_, index) => )
: data.length > 0