UNPKG

3.41 kBJavaScriptView Raw
1'use strict';
2
3var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /**
4 * Imports
5 */
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.lookup = exports.destroyEphemeral = exports.createEphemeral = exports.isEphemeral = exports.toEphemeral = undefined;
11
12var _miniHamt = require('mini-hamt');
13
14var hamt = _interopRequireWildcard(_miniHamt);
15
16function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
17
18function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
20/**
21 * Action types
22 */
23
24var CREATE = 'CREATE_EPHEMERAL';
25var DESTROY = 'DESTROY_EPHEMERAL';
26
27/**
28 * Ephemeral state reducer
29 */
30
31function ephemeralReducer() {
32 var state = arguments.length <= 0 || arguments[0] === undefined ? hamt.empty : arguments[0];
33 var action = arguments[1];
34 var _action$meta$ephemera = action.meta.ephemeral;
35 var reducer = _action$meta$ephemera.reducer;
36 var key = _action$meta$ephemera.key;
37
38 switch (action.type) {
39 case CREATE:
40 return hamt.set(state, key, action.payload);
41 case DESTROY:
42 return hamt.del(state, key);
43 default:
44 return hamt.set(state, key, reducer(hamt.get(state, key), action));
45 }
46
47 return state;
48}
49
50/**
51 * Action creators
52 */
53
54function toEphemeral(key, reducer, action) {
55 return _extends({}, action, {
56 meta: _extends({}, action.meta || {}, {
57 ephemeral: {
58 key: key,
59 reducer: reducer
60 }
61 })
62 });
63}
64
65function createEphemeral(key, initialState) {
66 return {
67 type: CREATE,
68 payload: initialState,
69 meta: {
70 ephemeral: { key: key }
71 }
72 };
73}
74
75function destroyEphemeral(key) {
76 return {
77 type: DESTROY,
78 meta: {
79 ephemeral: { key: key }
80 }
81 };
82}
83
84function lookup(state, key) {
85 return hamt.get(state || hamt.empty, key);
86}
87
88/**
89 * Mount reducer
90 */
91
92function mount(prop, reducer) {
93 return function (state, action) {
94 return isEphemeral(action) ? _extends({}, state, _defineProperty({}, prop, ephemeralReducer(state[prop], action))) : reducer(state, action);
95 };
96}
97
98function isEphemeral(action) {
99 return action.meta && action.meta.hasOwnProperty('ephemeral');
100}
101
102/**
103 * Exports
104 */
105
106exports.default = mount;
107exports.toEphemeral = toEphemeral;
108exports.isEphemeral = isEphemeral;
109exports.createEphemeral = createEphemeral;
110exports.destroyEphemeral = destroyEphemeral;
111exports.lookup = lookup;
\No newline at end of file