From d8d4bce287445e92ebab184aa5f9ae348bf34972 Mon Sep 17 00:00:00 2001 From: Ajay Bura <32841439+ajbura@users.noreply.github.com> Date: Wed, 19 Feb 2025 22:13:29 +1100 Subject: [PATCH] add button to select all room pack as global pack (#2218) --- .../settings/emojis-stickers/GlobalPacks.tsx | 58 ++++++++++++++++++- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/src/app/features/settings/emojis-stickers/GlobalPacks.tsx b/src/app/features/settings/emojis-stickers/GlobalPacks.tsx index 3413ec49..a9288728 100644 --- a/src/app/features/settings/emojis-stickers/GlobalPacks.tsx +++ b/src/app/features/settings/emojis-stickers/GlobalPacks.tsx @@ -79,6 +79,28 @@ function GlobalPackSelector({ }); }; + const addSelected = (adds: PackAddress[]) => { + setSelected((addresses) => { + const newAddresses = Array.from(addresses); + adds.forEach((address) => { + if (newAddresses.find((addr) => packAddressEqual(addr, address))) { + return; + } + newAddresses.push(address); + }); + return newAddresses; + }); + }; + + const removeSelected = (adds: PackAddress[]) => { + setSelected((addresses) => { + const newAddresses = addresses.filter( + (addr) => !adds.find((address) => packAddressEqual(addr, address)) + ); + return newAddresses; + }); + }; + const hasSelected = selected.length > 0; return ( @@ -115,9 +137,35 @@ function GlobalPackSelector({ {Array.from(roomToPacks.entries()).map(([roomId, roomPacks]) => { const room = mx.getRoom(roomId); if (!room) return null; + const roomPackAddresses = roomPacks + .map((pack) => pack.address) + .filter((addr) => addr !== undefined); + const allSelected = roomPackAddresses.every((addr) => + selected.find((address) => packAddressEqual(addr, address)) + ); + return ( - {room.name} + + + {room.name} + + + { + if (allSelected) { + removeSelected(roomPackAddresses); + return; + } + addSelected(roomPackAddresses); + }} + > + {allSelected ? 'Unselect All' : 'Select All'} + + + {roomPacks.map((pack) => { const avatarMxc = pack.getAvatarUrl(ImageUsage.Emoticon); const avatarUrl = avatarMxc @@ -126,7 +174,7 @@ function GlobalPackSelector({ const { address } = pack; if (!address) return null; - const added = selected.find((addr) => packAddressEqual(addr, address)); + const added = !!selected.find((addr) => packAddressEqual(addr, address)); return ( } after={ - toggleSelect(address)} /> + toggleSelect(address)} + /> } />