您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

reducer.js 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // @flow
  2. import { ReducerRegistry } from '../base/redux';
  3. import { PersistenceRegistry } from '../base/storage';
  4. import {
  5. CALENDAR_ACCESS_REQUESTED,
  6. NEW_CALENDAR_ENTRY_LIST,
  7. NEW_KNOWN_DOMAIN
  8. } from './actionTypes';
  9. const DEFAULT_STATE = {
  10. /**
  11. * Note: If features/calendar-sync ever gets persisted, do not persist the
  12. * calendarAccessStatus value as it's needed to remain a runtime value to
  13. * see if we need to re-request the calendar permission from the user.
  14. */
  15. calendarAccessStatus: undefined,
  16. events: [],
  17. knownDomains: []
  18. };
  19. const MAX_DOMAIN_LIST_SIZE = 10;
  20. const STORE_NAME = 'features/calendar-sync';
  21. PersistenceRegistry.register(STORE_NAME, {
  22. knownDomains: true
  23. });
  24. ReducerRegistry.register(
  25. STORE_NAME,
  26. (state = DEFAULT_STATE, action) => {
  27. switch (action.type) {
  28. case CALENDAR_ACCESS_REQUESTED:
  29. return {
  30. ...state,
  31. calendarAccessStatus: action.status
  32. };
  33. case NEW_CALENDAR_ENTRY_LIST:
  34. return {
  35. ...state,
  36. events: action.events
  37. };
  38. case NEW_KNOWN_DOMAIN:
  39. return _maybeAddNewDomain(state, action);
  40. default:
  41. return state;
  42. }
  43. });
  44. /**
  45. * Adds a new domain to the known domain list if not present yet.
  46. *
  47. * @private
  48. * @param {Object} state - The redux state.
  49. * @param {Object} action - The redux action.
  50. * @returns {Object}
  51. */
  52. function _maybeAddNewDomain(state, action) {
  53. let { domainName } = action;
  54. const { knownDomains } = state;
  55. if (domainName && domainName.length) {
  56. domainName = domainName.toLowerCase();
  57. if (knownDomains.indexOf(domainName) === -1) {
  58. knownDomains.push(domainName);
  59. // Ensure the list doesn't exceed a/the maximum size.
  60. knownDomains.splice(0, knownDomains.length - MAX_DOMAIN_LIST_SIZE);
  61. }
  62. }
  63. return {
  64. ...state,
  65. knownDomains
  66. };
  67. }