diff --git a/src/views/inventory/reducers/InventoryBadgeReducer.tsx b/src/views/inventory/reducers/InventoryBadgeReducer.tsx index c110fd7c..aa92a35a 100644 --- a/src/views/inventory/reducers/InventoryBadgeReducer.tsx +++ b/src/views/inventory/reducers/InventoryBadgeReducer.tsx @@ -1,4 +1,6 @@ +import { SetActivatedBadgesComposer } from 'nitro-renderer'; import { Reducer } from 'react'; +import { SendMessageHook } from '../../../hooks/messages/message-event'; export interface IInventoryBadgeState { @@ -24,6 +26,8 @@ export class InventoryBadgeActions public static SET_NEEDS_UPDATE: string = 'IBDA_SET_NEEDS_UPDATE'; public static SET_BADGE: string = 'IBDA_SET_BADGE'; public static SET_BADGES: string = 'IBDA_SET_BADGES'; + public static ADD_ACTIVE_BADGE: string = 'IBDA_ADD_ACTIVE_BADGE'; + public static REMOVE_ACTIVE_BADGE: string = 'IBDA_REMOVE_ACTIVE_BADGE'; } export const initialInventoryBadge: IInventoryBadgeState = { @@ -65,13 +69,56 @@ export const inventoryBadgeReducer: Reducer= 0) activeBadges.push(badgeCode); } return { ...state, badges, activeBadges }; } + case InventoryBadgeActions.ADD_ACTIVE_BADGE: { + const badgeCode = action.payload.badgeCode; + + if(state.activeBadges.indexOf(badgeCode) >= 0) return state; + + const activeBadges = [ ...state.activeBadges ]; + + activeBadges.push(badgeCode); + + const composer = new SetActivatedBadgesComposer(); + + for(const badgeCode of activeBadges) + { + composer.addActivatedBadge(badgeCode); + } + + SendMessageHook(composer); + + return { ...state, activeBadges }; + } + case InventoryBadgeActions.REMOVE_ACTIVE_BADGE: { + const badgeCode = action.payload.badgeCode; + + const index = state.activeBadges.indexOf(badgeCode); + + if(index === -1) return state; + + const activeBadges = [ ...state.activeBadges ]; + + activeBadges.splice(index, 1); + + const composer = new SetActivatedBadgesComposer(); + + for(const badgeCode of activeBadges) + { + composer.addActivatedBadge(badgeCode); + } + + SendMessageHook(composer); + + return { ...state, activeBadges }; + } default: return state; } diff --git a/src/views/inventory/views/badge/InventoryBadgeView.tsx b/src/views/inventory/views/badge/InventoryBadgeView.tsx index 2f4d30cb..6dc21ff7 100644 --- a/src/views/inventory/views/badge/InventoryBadgeView.tsx +++ b/src/views/inventory/views/badge/InventoryBadgeView.tsx @@ -6,6 +6,7 @@ import { LocalizeText } from '../../../../utils/LocalizeText'; import { BadgeImageView } from '../../../badge-image/BadgeImageView'; import { useInventoryContext } from '../../context/InventoryContext'; import { InventoryBadgeActions } from '../../reducers/InventoryBadgeReducer'; +import { InventoryActiveBadgeResultsView } from './active-results/InventoryActiveBadgeResultsView'; import { InventoryBadgeViewProps } from './InventoryBadgeView.types'; import { InventoryBadgeResultsView } from './results/InventoryBadgeResultsView'; @@ -39,29 +40,60 @@ export const InventoryBadgeView: FC = props => }, [ needsBadgeUpdate, badges, dispatchBadgeState ]); - useEffect(() => + function isWearingBadge(badgeCode: string): boolean { - // update current badge - }, [ badge ]); + return (activeBadges.indexOf(badgeCode) >= 0); + } + + function canWearBadges(): boolean + { + return (activeBadges.length < 5); + } + + function toggleBadge(): void + { + if(isWearingBadge(badge)) + { + dispatchBadgeState({ + type: InventoryBadgeActions.REMOVE_ACTIVE_BADGE, + payload: { + badgeCode: badge + } + }); + } + else + { + if(!canWearBadges()) return; + + dispatchBadgeState({ + type: InventoryBadgeActions.ADD_ACTIVE_BADGE, + payload: { + badgeCode: badge + } + }); + } + } return ( <>
- +
- +

{ LocalizeText('inventory.badges.activebadges') }

+
{ badge && badge.length && -
+

{ LocalizeBadgeName(badge) }

+
}
{ LocalizeText('achievements_score_description', [ 'score' ], [ '0' ]) }
diff --git a/src/views/inventory/views/badge/active-results/InventoryActiveBadgeResultsView.scss b/src/views/inventory/views/badge/active-results/InventoryActiveBadgeResultsView.scss new file mode 100644 index 00000000..1abb450d --- /dev/null +++ b/src/views/inventory/views/badge/active-results/InventoryActiveBadgeResultsView.scss @@ -0,0 +1,2 @@ +.badge-item-container { +} diff --git a/src/views/inventory/views/badge/active-results/InventoryActiveBadgeResultsView.tsx b/src/views/inventory/views/badge/active-results/InventoryActiveBadgeResultsView.tsx new file mode 100644 index 00000000..2fc17b7a --- /dev/null +++ b/src/views/inventory/views/badge/active-results/InventoryActiveBadgeResultsView.tsx @@ -0,0 +1,17 @@ +import { FC } from 'react'; +import { InventoryBadgeItemView } from '../item/InventoryBadgeItemView'; +import { InventoryActiveBadgeResultsViewProps } from './InventoryActiveBadgeResultsView.types'; + +export const InventoryActiveBadgeResultsView: FC = props => +{ + const { badges = [] } = props; + + return ( +
+ { (badges && badges.length && badges.map((code, index) => + { + return + })) || null } +
+ ); +} diff --git a/src/views/inventory/views/badge/active-results/InventoryActiveBadgeResultsView.types.ts b/src/views/inventory/views/badge/active-results/InventoryActiveBadgeResultsView.types.ts new file mode 100644 index 00000000..c9104f7c --- /dev/null +++ b/src/views/inventory/views/badge/active-results/InventoryActiveBadgeResultsView.types.ts @@ -0,0 +1,4 @@ +export interface InventoryActiveBadgeResultsViewProps +{ + badges?: string[]; +} diff --git a/src/views/inventory/views/badge/results/InventoryBadgeResultsView.tsx b/src/views/inventory/views/badge/results/InventoryBadgeResultsView.tsx index da208e4e..b5681cac 100644 --- a/src/views/inventory/views/badge/results/InventoryBadgeResultsView.tsx +++ b/src/views/inventory/views/badge/results/InventoryBadgeResultsView.tsx @@ -4,12 +4,14 @@ import { InventoryBadgeResultsViewProps } from './InventoryBadgeResultsView.type export const InventoryBadgeResultsView: FC = props => { - const { badges = [], cols = 5 } = props; + const { badges = [], activeBadges = [] } = props; return ( -
+
{ (badges && badges.length && badges.map((code, index) => { + if(activeBadges.indexOf(code) >= 0) return null; + return })) || null }
diff --git a/src/views/inventory/views/badge/results/InventoryBadgeResultsView.types.ts b/src/views/inventory/views/badge/results/InventoryBadgeResultsView.types.ts index 6ee0afc2..5856c7b7 100644 --- a/src/views/inventory/views/badge/results/InventoryBadgeResultsView.types.ts +++ b/src/views/inventory/views/badge/results/InventoryBadgeResultsView.types.ts @@ -1,5 +1,5 @@ export interface InventoryBadgeResultsViewProps { badges: string[]; - cols?: number; + activeBadges: string[]; }