Merge remote-tracking branch 'parent/main' into upstream-20241126
This commit is contained in:
commit
8a075ba4c6
303 changed files with 7495 additions and 4498 deletions
71
app/javascript/mastodon/reducers/antennas.ts
Normal file
71
app/javascript/mastodon/reducers/antennas.ts
Normal file
|
@ -0,0 +1,71 @@
|
|||
import type { Reducer } from '@reduxjs/toolkit';
|
||||
import { Map as ImmutableMap } from 'immutable';
|
||||
|
||||
import { createAntenna, updateAntenna } from 'mastodon/actions/antennas_typed';
|
||||
import type { ApiAntennaJSON } from 'mastodon/api_types/antennas';
|
||||
import { createAntenna as createAntennaFromJSON } from 'mastodon/models/antenna';
|
||||
import type { Antenna } from 'mastodon/models/antenna';
|
||||
|
||||
import {
|
||||
ANTENNA_FETCH_SUCCESS,
|
||||
ANTENNA_FETCH_FAIL,
|
||||
ANTENNAS_FETCH_SUCCESS,
|
||||
ANTENNA_DELETE_SUCCESS,
|
||||
} from '../actions/antennas';
|
||||
|
||||
const initialState = ImmutableMap<string, Antenna | null>();
|
||||
type State = typeof initialState;
|
||||
|
||||
const normalizeAntenna = (state: State, antenna: ApiAntennaJSON) => {
|
||||
let s = state.set(antenna.id, createAntennaFromJSON(antenna));
|
||||
|
||||
const old = state.get(antenna.id);
|
||||
if (old === undefined) {
|
||||
return s;
|
||||
}
|
||||
|
||||
if (old) {
|
||||
s = s.setIn([antenna.id, 'domains'], old.get('domains'));
|
||||
s = s.setIn([antenna.id, 'exclude_domains'], old.get('exclude_domains'));
|
||||
s = s.setIn([antenna.id, 'keywords'], old.get('keywords'));
|
||||
s = s.setIn([antenna.id, 'exclude_keywords'], old.get('exclude_keywords'));
|
||||
s = s.setIn([antenna.id, 'tags'], old.get('tags'));
|
||||
s = s.setIn([antenna.id, 'exclude_tags'], old.get('exclude_tags'));
|
||||
s = s.setIn([antenna.id, 'accounts_count'], old.get('accounts_count'));
|
||||
s = s.setIn([antenna.id, 'domains_count'], old.get('domains_count'));
|
||||
s = s.setIn([antenna.id, 'keywords_count'], old.get('keywords_count'));
|
||||
}
|
||||
return s;
|
||||
};
|
||||
|
||||
const normalizeAntennas = (state: State, antennas: ApiAntennaJSON[]) => {
|
||||
antennas.forEach((antenna) => {
|
||||
state = normalizeAntenna(state, antenna);
|
||||
});
|
||||
|
||||
return state;
|
||||
};
|
||||
|
||||
export const antennasReducer: Reducer<State> = (
|
||||
state = initialState,
|
||||
action,
|
||||
) => {
|
||||
if (
|
||||
createAntenna.fulfilled.match(action) ||
|
||||
updateAntenna.fulfilled.match(action)
|
||||
) {
|
||||
return normalizeAntenna(state, action.payload);
|
||||
} else {
|
||||
switch (action.type) {
|
||||
case ANTENNA_FETCH_SUCCESS:
|
||||
return normalizeAntenna(state, action.antenna as ApiAntennaJSON);
|
||||
case ANTENNAS_FETCH_SUCCESS:
|
||||
return normalizeAntennas(state, action.antennas as ApiAntennaJSON[]);
|
||||
case ANTENNA_DELETE_SUCCESS:
|
||||
case ANTENNA_FETCH_FAIL:
|
||||
return state.set(action.id as string, null);
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue