* break auth panel render into submethods * move var definition * break renderUnathorized into submethods * hide login providers behind dropdown if they are exceed length of 3 * amend dropdown to behave nicely being placed in another dropdown * add style to providers enclosed in dropdown * add provider reducer and actions * add provider save/restore to app flow * place last login provider first in providers list * infer StoreState from combineReducers return type * move collapsed threads retoration to action * fix: provider lost in other * add dynamic threshold depending on window width * fix & add tests
30 lines
879 B
TypeScript
30 lines
879 B
TypeScript
import { Comment } from '@app/common/types';
|
|
import { siteId, url } from '@app/common/settings';
|
|
|
|
import { StoreAction } from '../index';
|
|
import { THREAD_SET_COLLAPSE, THREAD_RESTORE_COLLAPSE_ACTION, THREAD_RESTORE_COLLAPSE } from './types';
|
|
import { saveCollapsedComments, getCollapsedComments } from './utils';
|
|
|
|
export const restoreCollapsedThreads = (): THREAD_RESTORE_COLLAPSE_ACTION => ({
|
|
type: THREAD_RESTORE_COLLAPSE,
|
|
ids: getCollapsedComments(),
|
|
});
|
|
|
|
export const setCollapse = (id: Comment['id'], value: boolean): StoreAction<void> => (dispatch, getState) => {
|
|
dispatch({
|
|
type: THREAD_SET_COLLAPSE,
|
|
id,
|
|
collapsed: value,
|
|
});
|
|
saveCollapsedComments(
|
|
siteId!,
|
|
url!,
|
|
Object.entries(getState().collapsedThreads).reduce((acc: string[], [key, value]) => {
|
|
if (value) {
|
|
acc.push(key);
|
|
}
|
|
return acc;
|
|
}, [])
|
|
);
|
|
};
|