import {
  createSelector,
  MemoizedSelector,
} from '@ngrx/store';

import { hasValue } from './empty.util';

/**
 * Export a function to return a subset of the state by key
 */
export function keySelector<T, V>(parentSelector, subState: string, key: string): MemoizedSelector<T, V> {
  return createSelector(parentSelector, (state: T) => {
    if (hasValue(state) && hasValue(state[subState])) {
      return state[subState][key];
    } else {
      return undefined;
    }
  });
}
/**
 * Export a function to return a subset of the state
 */
export function subStateSelector<T, V>(parentSelector, subState: string): MemoizedSelector<T, V> {
  return createSelector(parentSelector, (state: T) => {
    if (hasValue(state) && hasValue(state[subState])) {
      return state[subState];
    } else {
      return undefined;
    }
  });
}