/** * WordPress dependencies */ import { createReduxStore, dispatch, register, controls, } from '@safe-wordpress/data'; /** * External dependencies */ import { keys, pickBy } from 'lodash'; import { differenceInDays, getValue, setValue } from '@nab/utils'; import type { SubscriptionPromoId, WithResolverDispatch, WithResolverSelect, } from '@nab/types'; /** * Internal dependencies */ import reducer from './reducer'; import * as selectors from './selectors'; import * as realActions from './actions'; import * as sideEffects from './side-effects/actions'; import * as resolvers from './side-effects/resolvers'; export * from './types'; const actions = { ...realActions, ...sideEffects }; export const store = createReduxStore( 'nab/account', { reducer, controls, actions: actions as WithResolverDispatch< typeof actions, typeof resolvers >, selectors: selectors as WithResolverSelect< typeof selectors, typeof resolvers >, resolvers, } ); register( store ); updateDismissedPromos(); // ======= // HELPERS // ======= function updateDismissedPromos() { const PROMO_DISMISSAL_COOLDOWN_IN_DAYS = 30; const originalValue = getValue< Record< SubscriptionPromoId, string > >( 'dismissed-promos', {} ); const today = new Date().toISOString(); const value = pickBy( originalValue, ( dismissalDate ) => { const daysSinceDismissal = differenceInDays( dismissalDate, today ); return ( daysSinceDismissal >= 0 && daysSinceDismissal < PROMO_DISMISSAL_COOLDOWN_IN_DAYS ); } ); setValue( 'dismissed-promos', value ); void dispatch( store ).markSubmissionPromosAsDismissed( keys( value ) as unknown as ReadonlyArray< SubscriptionPromoId > ); }