Normalize event information

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak 2022-09-05 18:32:35 +02:00
parent df39036129
commit eabab437a7
1 changed files with 24 additions and 0 deletions

View File

@ -21,6 +21,19 @@ import type { Account, Attachment, Card, Emoji, Mention, Poll, EmbeddedEntity }
export type StatusVisibility = 'public' | 'unlisted' | 'private' | 'direct' | 'self'; export type StatusVisibility = 'public' | 'unlisted' | 'private' | 'direct' | 'self';
export type EventJoinMode = 'free' | 'restricted' | 'invite';
export type EventJoinState = 'pending' | 'reject' | 'accept';
export const EventRecord = ImmutableRecord({
name: '',
start_time: null as string | null,
end_time: null as string | null,
join_mode: null as EventJoinMode | null,
participants_count: 0,
location: null as ImmutableMap<string, any> | null,
join_state: null as EventJoinState | null,
});
// https://docs.joinmastodon.org/entities/status/ // https://docs.joinmastodon.org/entities/status/
export const StatusRecord = ImmutableRecord({ export const StatusRecord = ImmutableRecord({
account: null as EmbeddedEntity<Account | ReducerAccount>, account: null as EmbeddedEntity<Account | ReducerAccount>,
@ -55,6 +68,7 @@ export const StatusRecord = ImmutableRecord({
uri: '', uri: '',
url: '', url: '',
visibility: 'public' as StatusVisibility, visibility: 'public' as StatusVisibility,
event: null as ReturnType<typeof EventRecord> | null,
// Internal fields // Internal fields
contentHtml: '', contentHtml: '',
@ -149,6 +163,15 @@ const fixFiltered = (status: ImmutableMap<string, any>) => {
status.delete('filtered'); status.delete('filtered');
}; };
// Normalize event
const normalizeEvent = (status: ImmutableMap<string, any>) => {
if (status.getIn(['pleroma', 'event'])) {
return status.set('event', EventRecord(status.getIn(['pleroma', 'event']) as ImmutableMap<string, any>));
} else {
return status.set('event', null);
}
};
export const normalizeStatus = (status: Record<string, any>) => { export const normalizeStatus = (status: Record<string, any>) => {
return StatusRecord( return StatusRecord(
ImmutableMap(fromJS(status)).withMutations(status => { ImmutableMap(fromJS(status)).withMutations(status => {
@ -161,6 +184,7 @@ export const normalizeStatus = (status: Record<string, any>) => {
addSelfMention(status); addSelfMention(status);
fixQuote(status); fixQuote(status);
fixFiltered(status); fixFiltered(status);
normalizeEvent(status);
}), }),
); );
}; };