diff --git a/src/components/inventory/views/badge/InventoryBadgeView.tsx b/src/components/inventory/views/badge/InventoryBadgeView.tsx index 37b63c5..71c5e9f 100644 --- a/src/components/inventory/views/badge/InventoryBadgeView.tsx +++ b/src/components/inventory/views/badge/InventoryBadgeView.tsx @@ -1,7 +1,9 @@ +import { DeleteBadgeMessageComposer } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; -import { LocalizeBadgeName, LocalizeText, UnseenItemCategory } from '../../../../api'; +import { FaTrashAlt } from 'react-icons/fa'; +import { LocalizeBadgeName, LocalizeText, SendMessageComposer, UnseenItemCategory } from '../../../../api'; import { LayoutBadgeImageView } from '../../../../common'; -import { useInventoryBadges, useInventoryUnseenTracker } from '../../../../hooks'; +import { useInventoryBadges, useInventoryUnseenTracker, useNotification } from '../../../../hooks'; import { InfiniteGrid, NitroButton } from '../../../../layout'; import { InventoryBadgeItemView } from './InventoryBadgeItemView'; @@ -11,9 +13,24 @@ export const InventoryBadgeView: FC<{ filteredBadgeCodes?: string[] }> = props = const [ isVisible, setIsVisible ] = useState(false); const { badgeCodes = [], activeBadgeCodes = [], selectedBadgeCode = null, isWearingBadge = null, canWearBadges = null, toggleBadge = null, getBadgeId = null, activate = null, deactivate = null } = useInventoryBadges(); const { isUnseen = null, removeUnseen = null } = useInventoryUnseenTracker(); + const { showConfirm = null } = useNotification(); const displayCodes = (filteredBadgeCodes !== null ? filteredBadgeCodes : badgeCodes); + const attemptDeleteBadge = () => + { + if(!selectedBadgeCode) return; + + showConfirm( + LocalizeText('inventory.delete.confirm_delete.info', [ 'furniname', 'amount' ], [ LocalizeBadgeName(selectedBadgeCode), '1' ]), + () => SendMessageComposer(new DeleteBadgeMessageComposer(selectedBadgeCode)), + null, + null, + null, + LocalizeText('inventory.delete.confirm_delete.title') + ); + }; + useEffect(() => { if(!selectedBadgeCode || !isUnseen(UnseenItemCategory.BADGE, getBadgeId(selectedBadgeCode))) return; @@ -61,11 +78,17 @@ export const InventoryBadgeView: FC<{ filteredBadgeCodes?: string[] }> = props = { LocalizeBadgeName(selectedBadgeCode) } - toggleBadge(selectedBadgeCode) }> - { LocalizeText(isWearingBadge(selectedBadgeCode) ? 'inventory.badges.clearbadge' : 'inventory.badges.wearbadge') } - +
+ toggleBadge(selectedBadgeCode) }> + { LocalizeText(isWearingBadge(selectedBadgeCode) ? 'inventory.badges.clearbadge' : 'inventory.badges.wearbadge') } + + + + +
} diff --git a/src/hooks/inventory/useInventoryBadges.ts b/src/hooks/inventory/useInventoryBadges.ts index 8191d13..aebe155 100644 --- a/src/hooks/inventory/useInventoryBadges.ts +++ b/src/hooks/inventory/useInventoryBadges.ts @@ -61,29 +61,24 @@ const useInventoryBadgesState = () => useMessageEvent(BadgesEvent, event => { const parser = event.getParser(); - const badgesToAdd: string[] = []; + const allBadgeCodes = parser.getAllBadgeCodes(); - setBadgeIds(prevValue => + setBadgeIds(() => { - const newValue = new Map(prevValue); + const newValue = new Map(); - parser.getAllBadgeCodes().forEach(code => + allBadgeCodes.forEach(code => { - const exists = badgeCodes.indexOf(code) >= 0; const badgeId = parser.getBadgeId(code); newValue.set(code, badgeId); - - if(exists) return; - - badgesToAdd.push(code); }); return newValue; }); setActiveBadgeCodes(parser.getActiveBadgeCodes()); - setBadgeCodes(prev => [ ...prev, ...badgesToAdd ]); + setBadgeCodes(allBadgeCodes); }); useMessageEvent(BadgeReceivedEvent, event =>