From c7dfc88933896d18e7390acef00e8b86dc57e597 Mon Sep 17 00:00:00 2001 From: Ash Keel Date: Sun, 2 May 2021 17:21:37 +0200 Subject: [PATCH] Add accept/refund in queue --- frontend/src/ui/pages/loyalty/Queue.tsx | 28 +++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/frontend/src/ui/pages/loyalty/Queue.tsx b/frontend/src/ui/pages/loyalty/Queue.tsx index 329734f..b8da525 100644 --- a/frontend/src/ui/pages/loyalty/Queue.tsx +++ b/frontend/src/ui/pages/loyalty/Queue.tsx @@ -1,7 +1,8 @@ import React, { useState } from 'react'; +import { useDispatch } from 'react-redux'; import { RouteComponentProps } from '@reach/router'; import { useModule } from '../../../lib/react-utils'; -import { modules } from '../../../store/api/reducer'; +import { LoyaltyRedeem, modules } from '../../../store/api/reducer'; import PageList from '../../components/PageList'; interface SortingOrder { @@ -14,6 +15,7 @@ export default function LoyaltyRedeemQueuePage( props: RouteComponentProps, ): React.ReactElement { const [redemptions, setRedeemQueue] = useModule(modules.loyaltyRedeemQueue); + const [points, setPoints] = useModule(modules.loyaltyStorage); const [sorting, setSorting] = useState({ key: 'when', @@ -23,6 +25,7 @@ export default function LoyaltyRedeemQueuePage( const [entriesPerPage, setEntriesPerPage] = useState(15); const [page, setPage] = useState(0); const [usernameFilter, setUsernameFilter] = useState(''); + const dispatch = useDispatch(); const changeSort = (key: 'user' | 'when') => { if (sorting.key === key) { @@ -74,6 +77,23 @@ export default function LoyaltyRedeemQueuePage( ); const totalPages = Math.floor(sortedEntries.length / entriesPerPage); + const acceptRedeem = (redeem: LoyaltyRedeem) => { + // Just take the redeem off the list + dispatch(setRedeemQueue(redemptions.filter((r) => r !== redeem))); + }; + + const refundRedeem = (redeem: LoyaltyRedeem) => { + // Give points back to the viewer + dispatch( + setPoints({ + ...points, + [redeem.user]: (points[redeem.user] ?? 0) + redeem.reward.price, + }), + ); + // Take the redeem off the list + dispatch(setRedeemQueue(redemptions.filter((r) => r !== redeem))); + }; + return ( <>

Redemption queue

@@ -132,7 +152,11 @@ export default function LoyaltyRedeemQueuePage( {new Date(redemption.when).toLocaleString()} {redemption.user} {redemption.reward.name} - + + acceptRedeem(redemption)}>Accept + {' 🞄 '} + refundRedeem(redemption)}>Refund + ))}