Add account to antenna webui

This commit is contained in:
KMY 2023-04-25 10:30:30 +09:00
parent 69df23d8d9
commit 0d5a6adc43
20 changed files with 644 additions and 1 deletions

View file

@ -0,0 +1,47 @@
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
import {
ANTENNA_ADDER_RESET,
ANTENNA_ADDER_SETUP,
ANTENNA_ADDER_ANTENNAS_FETCH_REQUEST,
ANTENNA_ADDER_ANTENNAS_FETCH_SUCCESS,
ANTENNA_ADDER_ANTENNAS_FETCH_FAIL,
ANTENNA_EDITOR_ADD_ACCOUNT_SUCCESS,
ANTENNA_EDITOR_REMOVE_ACCOUNT_SUCCESS,
} from '../actions/antennas';
const initialState = ImmutableMap({
accountId: null,
antennas: ImmutableMap({
items: ImmutableList(),
loaded: false,
isLoading: false,
}),
});
export default function antennaAdderReducer(state = initialState, action) {
switch(action.type) {
case ANTENNA_ADDER_RESET:
return initialState;
case ANTENNA_ADDER_SETUP:
return state.withMutations(map => {
map.set('accountId', action.account.get('id'));
});
case ANTENNA_ADDER_ANTENNAS_FETCH_REQUEST:
return state.setIn(['antennas', 'isLoading'], true);
case ANTENNA_ADDER_ANTENNAS_FETCH_FAIL:
return state.setIn(['antennas', 'isLoading'], false);
case ANTENNA_ADDER_ANTENNAS_FETCH_SUCCESS:
return state.update('antennas', antennas => antennas.withMutations(map => {
map.set('isLoading', false);
map.set('loaded', true);
map.set('items', ImmutableList(action.antennas.map(item => item.id)));
}));
case ANTENNA_EDITOR_ADD_ACCOUNT_SUCCESS:
return state.updateIn(['antennas', 'items'], antenna => antenna.unshift(action.antennaId));
case ANTENNA_EDITOR_REMOVE_ACCOUNT_SUCCESS:
return state.updateIn(['antennas', 'items'], antenna => antenna.filterNot(item => item === action.antennaId));
default:
return state;
}
}

View file

@ -0,0 +1,36 @@
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
import {
ANTENNA_ACCOUNTS_FETCH_REQUEST,
ANTENNA_ACCOUNTS_FETCH_SUCCESS,
ANTENNA_ACCOUNTS_FETCH_FAIL,
} from '../actions/antennas';
const initialState = ImmutableMap({
antennaId: null,
isSubmitting: false,
isChanged: false,
title: '',
accounts: ImmutableMap({
items: ImmutableList(),
loaded: false,
isLoading: false,
}),
});
export default function antennaEditorReducer(state = initialState, action) {
switch(action.type) {
case ANTENNA_ACCOUNTS_FETCH_REQUEST:
return state.setIn(['accounts', 'isLoading'], true);
case ANTENNA_ACCOUNTS_FETCH_FAIL:
return state.setIn(['accounts', 'isLoading'], false);
case ANTENNA_ACCOUNTS_FETCH_SUCCESS:
return state.update('accounts', accounts => accounts.withMutations(map => {
map.set('isLoading', false);
map.set('loaded', true);
map.set('items', ImmutableList(action.accounts.map(item => item.id)));
}));
default:
return state;
}
}

View file

@ -0,0 +1,25 @@
import {
ANTENNAS_FETCH_SUCCESS,
} from '../actions/antennas';
import { Map as ImmutableMap, fromJS } from 'immutable';
const initialState = ImmutableMap();
const normalizeAntenna = (state, antenna) => state.set(antenna.id, fromJS(antenna));
const normalizeAntennas = (state, antennas) => {
antennas.forEach(antenna => {
state = normalizeAntenna(state, antenna);
});
return state;
};
export default function antennas(state = initialState, action) {
switch(action.type) {
case ANTENNAS_FETCH_SUCCESS:
return normalizeAntennas(state, action.antennas);
default:
return state;
}
}

View file

@ -28,6 +28,9 @@ import custom_emojis from './custom_emojis';
import lists from './lists';
import listEditor from './list_editor';
import listAdder from './list_adder';
import antennas from './antennas';
import antennaEditor from './antenna_editor';
import antennaAdder from './antenna_adder';
import filters from './filters';
import conversations from './conversations';
import suggestions from './suggestions';
@ -74,6 +77,9 @@ const reducers = {
lists,
listEditor,
listAdder,
antennas,
antennaEditor,
antennaAdder,
filters,
conversations,
suggestions,