feat(reducers): create ZapRecord in userLists()
- create ZapListRecord - create Zap & ZapList types - add zapped_by in NestedListPath - handle ZAPS_FETCH_SUCCESS action
This commit is contained in:
parent
a9930bc1f1
commit
dbcef52463
|
@ -64,6 +64,7 @@ import {
|
||||||
FAVOURITES_EXPAND_SUCCESS,
|
FAVOURITES_EXPAND_SUCCESS,
|
||||||
DISLIKES_FETCH_SUCCESS,
|
DISLIKES_FETCH_SUCCESS,
|
||||||
REACTIONS_FETCH_SUCCESS,
|
REACTIONS_FETCH_SUCCESS,
|
||||||
|
ZAPS_FETCH_SUCCESS,
|
||||||
} from 'soapbox/actions/interactions';
|
} from 'soapbox/actions/interactions';
|
||||||
import {
|
import {
|
||||||
NOTIFICATIONS_UPDATE,
|
NOTIFICATIONS_UPDATE,
|
||||||
|
@ -90,6 +91,17 @@ const ReactionListRecord = ImmutableRecord({
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const ZapRecord = ImmutableRecord({
|
||||||
|
account: '',
|
||||||
|
zap_comment: '',
|
||||||
|
zap_amount: 0, // in millisats
|
||||||
|
});
|
||||||
|
|
||||||
|
const ZapListRecord = ImmutableRecord({
|
||||||
|
items: ImmutableOrderedSet<Zap>(),
|
||||||
|
isLoading: false,
|
||||||
|
});
|
||||||
|
|
||||||
export const ParticipationRequestRecord = ImmutableRecord({
|
export const ParticipationRequestRecord = ImmutableRecord({
|
||||||
account: '',
|
account: '',
|
||||||
participation_message: null as string | null,
|
participation_message: null as string | null,
|
||||||
|
@ -108,6 +120,7 @@ export const ReducerRecord = ImmutableRecord({
|
||||||
favourited_by: ImmutableMap<string, List>(),
|
favourited_by: ImmutableMap<string, List>(),
|
||||||
disliked_by: ImmutableMap<string, List>(),
|
disliked_by: ImmutableMap<string, List>(),
|
||||||
reactions: ImmutableMap<string, ReactionList>(),
|
reactions: ImmutableMap<string, ReactionList>(),
|
||||||
|
zapped_by: ImmutableMap<string, ZapList>(),
|
||||||
follow_requests: ListRecord(),
|
follow_requests: ListRecord(),
|
||||||
blocks: ListRecord(),
|
blocks: ListRecord(),
|
||||||
mutes: ListRecord(),
|
mutes: ListRecord(),
|
||||||
|
@ -125,10 +138,12 @@ type State = ReturnType<typeof ReducerRecord>;
|
||||||
export type List = ReturnType<typeof ListRecord>;
|
export type List = ReturnType<typeof ListRecord>;
|
||||||
type Reaction = ReturnType<typeof ReactionRecord>;
|
type Reaction = ReturnType<typeof ReactionRecord>;
|
||||||
type ReactionList = ReturnType<typeof ReactionListRecord>;
|
type ReactionList = ReturnType<typeof ReactionListRecord>;
|
||||||
|
type Zap = ReturnType<typeof ZapRecord>;
|
||||||
|
type ZapList = ReturnType<typeof ZapListRecord>;
|
||||||
type ParticipationRequest = ReturnType<typeof ParticipationRequestRecord>;
|
type ParticipationRequest = ReturnType<typeof ParticipationRequestRecord>;
|
||||||
type ParticipationRequestList = ReturnType<typeof ParticipationRequestListRecord>;
|
type ParticipationRequestList = ReturnType<typeof ParticipationRequestListRecord>;
|
||||||
type Items = ImmutableOrderedSet<string>;
|
type Items = ImmutableOrderedSet<string>;
|
||||||
type NestedListPath = ['followers' | 'following' | 'reblogged_by' | 'favourited_by' | 'disliked_by' | 'reactions' | 'pinned' | 'birthday_reminders' | 'familiar_followers' | 'event_participations' | 'event_participation_requests' | 'membership_requests' | 'group_blocks', string];
|
type NestedListPath = ['followers' | 'following' | 'reblogged_by' | 'favourited_by' | 'disliked_by' | 'reactions' | 'pinned' | 'birthday_reminders' | 'familiar_followers' | 'event_participations' | 'event_participation_requests' | 'membership_requests' | 'group_blocks' | 'zapped_by', string];
|
||||||
type ListPath = ['follow_requests' | 'blocks' | 'mutes' | 'directory'];
|
type ListPath = ['follow_requests' | 'blocks' | 'mutes' | 'directory'];
|
||||||
|
|
||||||
const normalizeList = (state: State, path: NestedListPath | ListPath, accounts: APIEntity[], next?: string | null) => {
|
const normalizeList = (state: State, path: NestedListPath | ListPath, accounts: APIEntity[], next?: string | null) => {
|
||||||
|
@ -186,6 +201,13 @@ export default function userLists(state = ReducerRecord(), action: AnyAction) {
|
||||||
accounts: ImmutableOrderedSet(accounts.map((account: APIEntity) => account.id)),
|
accounts: ImmutableOrderedSet(accounts.map((account: APIEntity) => account.id)),
|
||||||
}))),
|
}))),
|
||||||
}));
|
}));
|
||||||
|
case ZAPS_FETCH_SUCCESS:
|
||||||
|
return state.setIn(['zapped_by', action.id], ZapListRecord({
|
||||||
|
items: ImmutableOrderedSet<Zap>(action.zaps.map(({ account, ...zap }: APIEntity) => ZapRecord({
|
||||||
|
...zap,
|
||||||
|
account: account.id,
|
||||||
|
}))),
|
||||||
|
}));
|
||||||
case NOTIFICATIONS_UPDATE:
|
case NOTIFICATIONS_UPDATE:
|
||||||
return action.notification.type === 'follow_request' ? normalizeFollowRequest(state, action.notification) : state;
|
return action.notification.type === 'follow_request' ? normalizeFollowRequest(state, action.notification) : state;
|
||||||
case FOLLOW_REQUESTS_FETCH_SUCCESS:
|
case FOLLOW_REQUESTS_FETCH_SUCCESS:
|
||||||
|
|
Loading…
Reference in New Issue