w-aura/src/store/paywalls.ts
2024-06-03 16:59:41 +00:00

61 lines
2.0 KiB
TypeScript

import { EPlacementKeys, ResponseGetSuccess } from '@/api/resources/Paywall'
import { createSlice, createSelector } from '@reduxjs/toolkit'
import type { PayloadAction } from '@reduxjs/toolkit'
type TAdditionalParameters = {
isMustUpdate: {
[key in EPlacementKeys]: boolean
};
}
type TPaywalls = {
[key in EPlacementKeys]: ResponseGetSuccess | null;
} & TAdditionalParameters
type IPayloadUpdatePaywall = {
[key in EPlacementKeys]: ResponseGetSuccess
}
const initialState: TPaywalls = {
"aura.placement.main": null,
"aura.placement.redesign.main": null,
"aura.placement.email.marketing": null,
"aura.placement.secret.discount": null,
"aura.placement.palmistry.main": null,
isMustUpdate: {
"aura.placement.main": true,
"aura.placement.redesign.main": true,
"aura.placement.email.marketing": true,
"aura.placement.secret.discount": true,
"aura.placement.palmistry.main": true
},
}
const paywallsSlice = createSlice({
name: 'paywalls',
initialState,
reducers: {
updatePaywall(state, action: PayloadAction<Partial<IPayloadUpdatePaywall>>) {
return { ...state, ...action.payload }
},
updateIsMustUpdate(state, action: PayloadAction<Partial<TAdditionalParameters['isMustUpdate']>>) {
return { ...state, isMustUpdate: { ...state.isMustUpdate, ...action.payload } }
},
resetIsMustUpdate(state) {
return { ...state, isMustUpdate: initialState.isMustUpdate }
}
},
extraReducers: (builder) => builder.addCase('reset', () => initialState),
})
export const { actions } = paywallsSlice
export const selectPaywalls = createSelector(
(state: { paywalls: TPaywalls }) => state.paywalls,
(paywalls) => paywalls
)
export const selectPaywallsIsMustUpdate = createSelector(
(state: { paywalls: TPaywalls }) => state.paywalls.isMustUpdate,
(paywalls) => paywalls
)
export default paywallsSlice.reducer