61 lines
2.0 KiB
TypeScript
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
|