codevise/pageflow

View on GitHub
entry_types/paged/packages/pageflow-paged-react/src/collections/createItemSelector.js

Summary

Maintainability
A
35 mins
Test Coverage
import {getItemScopeProperty} from './itemScopeHelpers';

export default function(collectionName, {namespace} = {}) {
  return function({id} = {}) {
    return function(state, props) {
      let modelId = id;
      let namespacedState = state;

      if (namespace) {
        if (!state[namespace]) {
          throw new Error(`Cannot select from unknown namespace ${namespace}.`);
        }

        namespacedState = state[namespace];
      }

      if (!namespacedState[collectionName]) {
        throw new Error(`Cannot select from unknown collection ${collectionName}.`);
      }

      if (typeof id == 'function') {
        modelId = id(state, props);
      }

      modelId = modelId || state[getItemScopeProperty(collectionName)];

      if (!modelId) {
        return null;
      }

      return namespacedState[collectionName].items[modelId];
    };
  };
}