From 9e8d558109d1086e6f032fcc1a0cd15f972646db Mon Sep 17 00:00:00 2001 From: Cameron Welter Date: Mon, 1 Feb 2021 19:01:19 +0000 Subject: [PATCH 1/6] I don't want to talk about it. --- src/components/UserDecalPanel/UserDecalPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/UserDecalPanel/UserDecalPanel.js b/src/components/UserDecalPanel/UserDecalPanel.js index ffdc13a5..c57bed32 100644 --- a/src/components/UserDecalPanel/UserDecalPanel.js +++ b/src/components/UserDecalPanel/UserDecalPanel.js @@ -1,6 +1,7 @@ import { useCallback, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' +import { redeemDecal } from '~/store/actions/decals' import { selectCurrentUserId, selectDecalsByUserId, @@ -24,7 +25,6 @@ function UserDetailsPanel () { const handleRedeemDecal = useCallback(async () => { setRedeeming(true) - // eslint-disable-next-line no-undef await dispatch(redeemDecal(userId)) setRedeeming(false) From 9f5f1df741cc00698cfd1ee84cd2b595cd3c90a2 Mon Sep 17 00:00:00 2001 From: Cameron Welter Date: Mon, 1 Feb 2021 19:05:38 +0000 Subject: [PATCH 2/6] fix(decal-actions): ensure proper resource linkage when decal is redeemed --- src/store/actions/decals.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/store/actions/decals.js b/src/store/actions/decals.js index d328a416..c077a7de 100644 --- a/src/store/actions/decals.js +++ b/src/store/actions/decals.js @@ -1,4 +1,7 @@ +import { defineRelationship } from '@fuelrats/web-util/redux-json-api' + import actionTypes from '../actionTypes' +import { createsRelationship, RESOURCE } from '../reducers/frAPIResources' import { frApiRequest } from './services' @@ -12,5 +15,8 @@ export const redeemDecal = (id) => { url: `/users/${id}/decals`, method: 'post', }, + createsRelationship( + defineRelationship({ type: 'users', id }, { decals: [RESOURCE] }), + ), ) } From 359d60b2a048edb33feffc0a7ff7c9b90be3c961 Mon Sep 17 00:00:00 2001 From: Cameron Welter Date: Mon, 1 Feb 2021 19:24:34 +0000 Subject: [PATCH 3/6] feat(users-reducer): add reducer for decrementing eligible decal count --- src/store/reducers/index.js | 2 ++ src/store/reducers/users.js | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/store/reducers/users.js diff --git a/src/store/reducers/index.js b/src/store/reducers/index.js index 6c2acb64..2ccec122 100644 --- a/src/store/reducers/index.js +++ b/src/store/reducers/index.js @@ -11,6 +11,7 @@ import images from './images' import leaderboard from './leaderboard' import pageViews from './pageViews' import session from './session' +import users from './users' import wordpress from './wordpress' @@ -28,6 +29,7 @@ export default chainReducers( leaderboard, pageViews, session, + users, wordpress, }), ], diff --git a/src/store/reducers/users.js b/src/store/reducers/users.js new file mode 100644 index 00000000..ea66fcbd --- /dev/null +++ b/src/store/reducers/users.js @@ -0,0 +1,40 @@ +import { isError } from 'flux-standard-action' +import { produce } from 'immer' + +import safeParseInt from '~/helpers/safeParseInt' + +import actionTypes from '../actionTypes' +import initialState from '../initialState' + +const metaKey = '__decals/decrement' + +const usersReducer = produce((draftState, action) => { + if (isError(action)) { + return + } + + switch (action.type) { + case actionTypes.decals.redeem: + if (action.meta[metaKey]) { + const user = draftState[action.meta[metaKey]] + if (user?.meta) { + user.meta.redeemable = Math.max(safeParseInt(user.meta.redeemable) - 1, 0) + } + } + break + + default: + break + } +}, initialState.users) + + + +export function decrementsEligibleDecals (id) { + return { + [metaKey]: id, + } +} + + +export default usersReducer From 7ffe0c1a3c74c7eeb77460787db99f3948be4575 Mon Sep 17 00:00:00 2001 From: Cameron Welter Date: Mon, 1 Feb 2021 19:25:08 +0000 Subject: [PATCH 4/6] feat(decal-actions): decrement eligible decals for user when redeeming decal --- src/store/actions/decals.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/store/actions/decals.js b/src/store/actions/decals.js index c077a7de..7fadf9d8 100644 --- a/src/store/actions/decals.js +++ b/src/store/actions/decals.js @@ -2,6 +2,7 @@ import { defineRelationship } from '@fuelrats/web-util/redux-json-api' import actionTypes from '../actionTypes' import { createsRelationship, RESOURCE } from '../reducers/frAPIResources' +import { decrementsEligibleDecals } from '../reducers/users' import { frApiRequest } from './services' @@ -18,5 +19,6 @@ export const redeemDecal = (id) => { createsRelationship( defineRelationship({ type: 'users', id }, { decals: [RESOURCE] }), ), + decrementsEligibleDecals(id), ) } From 550d87159ffe8178699f4b59ffd01874b3f8328e Mon Sep 17 00:00:00 2001 From: Cameron Welter Date: Mon, 1 Feb 2021 19:28:48 +0000 Subject: [PATCH 5/6] docs(CHANGELOG): add entry for v2.12.8 --- CHANGELOG.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf83c77e..510f7078 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,8 +23,22 @@ For detailed rules of this file, see [Changelog Rules](#changelog-rules) ### ⚙ Tasks * + [#303]: https://github.com/fuelRats/fuelrats.com/pull/303 -[Unreleased]: https://github.com/FuelRats/fuelrats.com/compare/v2.12.6...HEAD +[Unreleased]: https://github.com/FuelRats/fuelrats.com/compare/v2.12.8...HEAD + + + + + +## [2.12.8][] - 2021-02-01 + +### 🐛 Fixed +* Fix multiple issues with redeeming decals - [#309][] + + +[#309]: https://github.com/fuelRats/fuelrats.com/pull/309 +[2.12.8]: https://github.com/FuelRats/fuelrats.com/compare/v2.12.7...v2.12.8 From 2f0884417ab9d20a5b8dc3a82973bfebeffe27cf Mon Sep 17 00:00:00 2001 From: Cameron Welter Date: Mon, 1 Feb 2021 19:29:02 +0000 Subject: [PATCH 6/6] v2.12.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 867fde3b..d83e2c16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fuelrats.com", - "version": "2.12.7", + "version": "2.12.8", "description": "The primary website of The Fuel Rats!", "main": "dist/server.js", "license": "BSD-3-Clause",