UNPKG

@knapsack/app

Version:

Build Design Systems on top of knapsack, by Basalt

68 lines (61 loc) 1.51 kB
import produce from 'immer'; import { KsUserRole, KS_USER_ROLES } from '@knapsack/core'; import { User, getUserInfo } from '../../cloud/user-utils'; import { Action } from './types'; import { KsFeatures } from '../../lib/features'; export interface UserState { role?: KsUserRole; canEdit?: boolean; isLocalDev?: boolean; user?: User; features?: KsFeatures; } const USER_UPDATE = 'knapsack/user/update'; interface UserUpdate extends Action { type: typeof USER_UPDATE; payload: UserState; } function updateUserState(userState: UserState): UserUpdate { return { type: USER_UPDATE, payload: userState, }; } const initialState: UserState = { role: KS_USER_ROLES.anonymous, canEdit: false, isLocalDev: false, }; export function updateUser() { return async (dispatch, getState) => { const state: import('./index').AppState = getState(); const { isLocalDev } = state.userState; const { user, canEdit, role } = await getUserInfo(); // console.log('updateUser', { canEdit, user, role, groups, ksRepoAccess }); dispatch( updateUserState({ user, canEdit: isLocalDev || canEdit, role, }), ); }; } type Actions = UserUpdate; export default function reducer( state = initialState, action: Actions, ): UserState { switch (action.type) { case USER_UPDATE: return { ...state, ...action.payload, }; default: return { ...initialState, ...state, }; } }