File
        
        
        
            
                
                    
                    
                        
                                
                                    | 
                                        
                                        initialTokenStatus
                                     | 
                                
                                
                                    
                                        initialTokenStatus:     "uninitialized" | "loaded" | "empty"
                                     | 
                                
                                    
                                        
                                            Type :     "uninitialized" | "loaded" | "empty"
                                         | 
                                    
                        
                    
                    
            
     
    
        import * as JwtTokenProviderActions from './actions';
import { ClaimMap } from './claim-map';
export type Tokens<C> = { [P in Extract<keyof C, string>]?: string };
export interface JwtTokenProviderState<C = ClaimMap>  {
  initialTokenStatus: 'uninitialized' | 'loaded' | 'empty';
  defaultToken?: string;
  tokens: Tokens<C>;
}
export const initialState: JwtTokenProviderState = {
  initialTokenStatus: 'uninitialized',
  tokens: {},
};
/**
 * @param state
 * @param action
 */
export function jwtTokenProviderReducer<C = ClaimMap>(
  state = initialState,
  action: JwtTokenProviderActions.Actions<C>,
): JwtTokenProviderState {
  switch (action.type) {
    case JwtTokenProviderActions.ActionTypes.InitialTokenExtracted: {
      if (state.initialTokenStatus !== 'uninitialized') {
        return state;
      }
      if (action.token.length === 0) {
        return {
          initialTokenStatus: 'empty',
          tokens: {},
        };
      }
      return {
        initialTokenStatus: 'loaded',
        defaultToken: action.token,
        tokens: {},
      };
    }
    case JwtTokenProviderActions.ActionTypes.StoreToken: {
      const newState: JwtTokenProviderState = {
        ...state,
        tokens: { ...state.tokens },
      };
      if (action.isDefaultToken) {
        newState.defaultToken = action.token;
        newState.tokens = {};
      }
      newState.tokens[action.tokenName] = action.token;
      return newState;
    }
    case JwtTokenProviderActions.ActionTypes.TokenExpired: {
      const newState = {
        ...state,
        tokens: { ...state.tokens },
      };
      if (state.defaultToken && state.defaultToken === action.token) {
        delete newState.defaultToken;
      }
      for (const k in state.tokens) {
        if (state.tokens[k] && state.tokens[k] === action.token) {
          delete newState.tokens[k];
        }
      }
      return newState;
    }
    default: {
      return state;
    }
  }
}