You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

reducer.js 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // @flow
  2. import { ReducerRegistry } from '../redux';
  3. import { PersistenceRegistry } from '../storage';
  4. import { ADD_KNOWN_DOMAINS } from './actionTypes';
  5. const DEFAULT_STATE = [];
  6. const STORE_NAME = 'features/base/domains';
  7. PersistenceRegistry.register(STORE_NAME);
  8. ReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {
  9. switch (action.type) {
  10. case ADD_KNOWN_DOMAINS:
  11. return _addKnownDomain(state, action);
  12. default:
  13. return state;
  14. }
  15. });
  16. /**
  17. * Adds an array of new domains to the known domain list if not present yet.
  18. *
  19. * @param {Object} state - The redux state.
  20. * @param {Object} action - The redux action.
  21. * @private
  22. * @returns {Object}
  23. */
  24. function _addKnownDomain(state, action) {
  25. const { knownDomains: knownDomainsToAdd } = action;
  26. const knownDomains = Array.from(state);
  27. if (Array.isArray(knownDomainsToAdd)) {
  28. for (let knownDomain of knownDomainsToAdd) {
  29. knownDomain = knownDomain.toLowerCase();
  30. if (knownDomains.indexOf(knownDomain) === -1) {
  31. knownDomains.push(knownDomain);
  32. }
  33. }
  34. return knownDomains;
  35. }
  36. return state;
  37. }