riducers 1.2.3 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -1
- package/dist/index.js +48 -14
- package/dist/index.js.map +1 -1
- package/esm/index.d.ts +2 -1
- package/esm/index.js +48 -14
- package/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +96 -42
package/dist/index.d.ts
CHANGED
|
@@ -3,9 +3,10 @@ interface ModelObj {
|
|
|
3
3
|
}
|
|
4
4
|
type SortFn = (a: ModelObj, b: ModelObj) => number;
|
|
5
5
|
interface ReducerOpts {
|
|
6
|
-
stateType?:
|
|
6
|
+
stateType?: "list" | "map" | "static" | "mapList";
|
|
7
7
|
sort?: SortFn;
|
|
8
8
|
keyName?: string;
|
|
9
|
+
mapKeyName?: string;
|
|
9
10
|
initialState?: any;
|
|
10
11
|
}
|
|
11
12
|
declare function reducerBuilder(key: string, opts?: ReducerOpts): (state: any, action: {
|
package/dist/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.reducerBuilder = void 0;
|
|
4
4
|
const keySort = (key) => (a, b) => {
|
|
5
|
-
if (typeof a[key] ===
|
|
5
|
+
if (typeof a[key] === "number" && typeof b[key] === "number")
|
|
6
6
|
return a[key] - b[key];
|
|
7
|
-
else if (typeof a[key] ===
|
|
7
|
+
else if (typeof a[key] === "string" && typeof b[key] === "string")
|
|
8
8
|
return a[key].localeCompare(b[key]);
|
|
9
9
|
return 0;
|
|
10
10
|
};
|
|
@@ -62,6 +62,13 @@ const listInsertReducer = (state, action) => {
|
|
|
62
62
|
newState.sort(action === null || action === void 0 ? void 0 : action.sort);
|
|
63
63
|
return newState;
|
|
64
64
|
};
|
|
65
|
+
const listUnshiftReducer = (state, action) => {
|
|
66
|
+
if (!state)
|
|
67
|
+
state = [];
|
|
68
|
+
let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
|
|
69
|
+
let newState = [...resp, ...state];
|
|
70
|
+
return newState;
|
|
71
|
+
};
|
|
65
72
|
const listSortReducer = (state, action) => {
|
|
66
73
|
if (!state)
|
|
67
74
|
state = [];
|
|
@@ -83,6 +90,13 @@ const listDeleteReducer = (state, action) => {
|
|
|
83
90
|
}
|
|
84
91
|
return newState;
|
|
85
92
|
};
|
|
93
|
+
const listShiftReducer = (state) => {
|
|
94
|
+
if (!state || !Array.isArray(state))
|
|
95
|
+
state = [];
|
|
96
|
+
let newState = [...state];
|
|
97
|
+
newState.shift();
|
|
98
|
+
return newState;
|
|
99
|
+
};
|
|
86
100
|
const listReplaceReducer = (state, action) => {
|
|
87
101
|
let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
|
|
88
102
|
resp = resp.map((r) => ({ ...r }));
|
|
@@ -99,13 +113,16 @@ const objReplaceReducer = (state, action) => {
|
|
|
99
113
|
const objDeleteReducer = () => {
|
|
100
114
|
return null;
|
|
101
115
|
};
|
|
102
|
-
const OPS = [
|
|
116
|
+
const OPS = ["insert", "replace", "delete", "clear", "sort"];
|
|
103
117
|
function reducerBuilder(key, opts) {
|
|
104
118
|
var _a;
|
|
105
119
|
let initialState = opts === null || opts === void 0 ? void 0 : opts.initialState;
|
|
106
|
-
let stateType = (_a = opts === null || opts === void 0 ? void 0 : opts.stateType) !== null && _a !== void 0 ? _a :
|
|
107
|
-
let isList = stateType ===
|
|
108
|
-
let isMap = stateType ===
|
|
120
|
+
let stateType = (_a = opts === null || opts === void 0 ? void 0 : opts.stateType) !== null && _a !== void 0 ? _a : "static";
|
|
121
|
+
let isList = stateType === "list";
|
|
122
|
+
let isMap = stateType === "map";
|
|
123
|
+
let isMapList = stateType === "mapList";
|
|
124
|
+
if (isMapList && !(opts === null || opts === void 0 ? void 0 : opts.mapKeyName))
|
|
125
|
+
throw new Error("mapKeyName is required for stateType: mapList");
|
|
109
126
|
if (initialState === undefined) {
|
|
110
127
|
if (isList)
|
|
111
128
|
initialState = [];
|
|
@@ -123,6 +140,8 @@ function reducerBuilder(key, opts) {
|
|
|
123
140
|
return [];
|
|
124
141
|
else if (isMap)
|
|
125
142
|
return {};
|
|
143
|
+
else if (isMapList)
|
|
144
|
+
return {};
|
|
126
145
|
else
|
|
127
146
|
return null;
|
|
128
147
|
}
|
|
@@ -133,6 +152,7 @@ function reducerBuilder(key, opts) {
|
|
|
133
152
|
let op = m[1];
|
|
134
153
|
let payload = action.payload;
|
|
135
154
|
let keyName = (_a = opts === null || opts === void 0 ? void 0 : opts.keyName) !== null && _a !== void 0 ? _a : "id";
|
|
155
|
+
let mapKeyName = opts === null || opts === void 0 ? void 0 : opts.mapKeyName;
|
|
136
156
|
if (isMap && !OPS.includes(op)) {
|
|
137
157
|
if (payload && !Array.isArray(payload)) {
|
|
138
158
|
payload[keyName] = op;
|
|
@@ -146,32 +166,46 @@ function reducerBuilder(key, opts) {
|
|
|
146
166
|
}
|
|
147
167
|
let sort = (_b = action.sort) !== null && _b !== void 0 ? _b : opts === null || opts === void 0 ? void 0 : opts.sort;
|
|
148
168
|
if (op === "insert") {
|
|
149
|
-
if (isList && payload)
|
|
150
|
-
return listInsertReducer(state, { payload, sort, keyName });
|
|
169
|
+
if ((isList || isMapList) && payload)
|
|
170
|
+
return listInsertReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
|
|
151
171
|
else if (isMap && payload)
|
|
152
172
|
return mapInsertReducer(state, { payload, keyName });
|
|
153
173
|
return objInsertReducer(state, { payload });
|
|
154
174
|
}
|
|
175
|
+
else if (op === 'unshift') {
|
|
176
|
+
if (isList && payload)
|
|
177
|
+
return listUnshiftReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
|
|
178
|
+
else {
|
|
179
|
+
console.error(`unshift is only valid for stateType: list or mapList`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
155
182
|
else if (op === "replace") {
|
|
156
|
-
if (isList)
|
|
157
|
-
return listReplaceReducer(state, { payload, sort, keyName });
|
|
183
|
+
if (isList || isMapList)
|
|
184
|
+
return listReplaceReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
|
|
158
185
|
else if (isMap)
|
|
159
186
|
return mapReplaceReducer(state, { payload, keyName });
|
|
160
187
|
return objReplaceReducer(state, { payload });
|
|
161
188
|
}
|
|
162
189
|
else if (op === "delete") {
|
|
163
|
-
if (isList)
|
|
164
|
-
return listDeleteReducer(state, { payload, keyName });
|
|
190
|
+
if (isList || isMapList)
|
|
191
|
+
return listDeleteReducer(state, { payload, keyName, mapKeyName, isMapList });
|
|
165
192
|
else if (isMap)
|
|
166
193
|
return mapDeleteReducer(state, { payload, keyName });
|
|
167
194
|
return objDeleteReducer();
|
|
168
195
|
}
|
|
196
|
+
else if (op === "shift") {
|
|
197
|
+
if (isList || isMapList)
|
|
198
|
+
return listShiftReducer(state);
|
|
199
|
+
else {
|
|
200
|
+
console.error(`unshift is only valid for stateType: list or mapList`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
169
203
|
else if (op === "clear") {
|
|
170
204
|
return initialState;
|
|
171
205
|
}
|
|
172
206
|
else if (op === "sort") {
|
|
173
|
-
if (isList)
|
|
174
|
-
return listSortReducer(state, { sort, keyName });
|
|
207
|
+
if (isList || isMapList)
|
|
208
|
+
return listSortReducer(state, { sort, keyName, mapKeyName, isMapList });
|
|
175
209
|
}
|
|
176
210
|
else {
|
|
177
211
|
console.error(`unknown op (${op}) in action type: ${action.type}. Op should be one of: insert, delete, replace, clear, or sort.`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AA6BA,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE;IAC5D,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SAChF,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvG,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAe,EAAE,MAAiB,EAAE,EAAE;;IAC9D,IAAI,CAAC,KAAK;QAAE,KAAK,GAAG,EAAE,CAAC;IACvB,IAAI,IAAI,GAAe,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzF,IAAI,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;QAClB,IAAI,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAG,MAAM,CAAC,OAAO,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAe,EAAE,MAAiB,EAAE,EAAE;IAC9D,IAAI,CAAC,KAAK;QAAE,KAAK,GAAG,EAAE,CAAC;IACvB,IAAI,IAAI,GAAe,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzF,IAAI,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;QAClB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;KAC1C;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAe,EAAE,MAAiB,EAAE,EAAE;;IAC/D,IAAI,QAAQ,GAAG,EAAS,CAAC;IACzB,IAAI,IAAI,GAAe,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzF,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;QAClB,IAAI,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAG,MAAM,CAAC,OAAO,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAiB,EAAE,MAAkB,EAAE,EAAE;IAClE,IAAI,CAAC,KAAK;QAAE,KAAK,GAAG,EAAE,CAAC;IACvB,IAAI,IAAI,GAAe,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzF,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,IAAI,OAAO,GAAS,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,IAAI,QAAQ,GAAS,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,IAAI,QAAQ,GAAS,OAAO,CAAC,MAAM,CAAC,CAAC,EAAmB,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,IAAI,SAAS,GAAS,OAAO,CAAC,MAAM,CAAC,CAAC,EAAmB,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACzF,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;QACvB,IAAI,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KAC/C;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/E,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;KACtC;IACD,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAiB,EAAE,MAAkB,EAAE,EAAE;IACnE,IAAI,CAAC,KAAK;QAAE,KAAK,GAAG,EAAE,CAAC;IACvB,IAAI,IAAI,GAAe,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzF,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,KAAiB,EAAE,MAAsB,EAAE,EAAE;IACpE,IAAI,CAAC,KAAK;QAAE,KAAK,GAAG,EAAE,CAAC;IACvB,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,IAAI,IAAI,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAiB,EAAE,MAAkB,EAAE,EAAE;IAClE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,GAAG,EAAE,CAAC;IAChD,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,IAAI,IAAI,GAAe,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzF,IAAI,QAAQ,GAAS,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;QAClB,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,IAAI,KAAK,IAAI,CAAC;YAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAC3C;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAE,EAAE;IAC7C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,GAAG,EAAE,CAAC;IAChD,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,KAAiB,EAAE,MAAkB,EAAE,EAAE;IACnE,IAAI,IAAI,GAAe,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzF,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAU,EAAE,MAAwB,EAAE,EAAE;IAChE,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAU,EAAE,MAAwB,EAAE,EAAE;IACjE,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAUF,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7D,SAAS,cAAc,CAAC,GAAW,EAAE,IAAkB;;IACrD,IAAI,YAAY,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC;IACtC,IAAI,SAAS,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,mCAAI,QAAQ,CAAC;IAC5C,IAAI,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;IAClC,IAAI,KAAK,GAAG,SAAS,KAAK,KAAK,CAAC;IAChC,IAAI,SAAS,GAAG,SAAS,KAAK,SAAS,CAAC;IAExC,IAAI,SAAS,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAA;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAErG,IAAI,YAAY,KAAK,SAAS,EAAE;QAC9B,IAAI,MAAM;YAAE,YAAY,GAAG,EAAE,CAAC;aACzB,IAAI,KAAK;YAAE,YAAY,GAAG,EAAE,CAAC;;YAC7B,YAAY,GAAG,IAAI,CAAC;KAC1B;IACD,OAAO,CAAC,KAAU,EAAE,MAAoF,EAAE,EAAE;;QAC1G,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,IAAI,YAAY,KAAK,SAAS;gBAAE,OAAO,YAAY,CAAC;iBAC/C,IAAI,MAAM;gBAAE,OAAO,EAAE,CAAC;iBACtB,IAAI,KAAK;gBAAE,OAAO,EAAE,CAAC;iBACrB,IAAI,SAAS;gBAAE,OAAO,EAAE,CAAC;;gBACzB,OAAO,IAAI,CAAC;SAClB;QACD,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAErB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC7B,IAAI,OAAO,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,mCAAI,IAAI,CAAC;QACpC,IAAI,UAAU,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC;QAElC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAC9B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACtC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACtB,EAAE,GAAG,QAAQ,CAAC;aACf;YACD,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACtB,EAAE,GAAG,QAAQ,CAAC;aACf;SACF;QAED,IAAI,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC;QACrC,IAAI,EAAE,KAAK,QAAQ,EAAE;YAEnB,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,OAAO;gBAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;iBACpH,IAAI,KAAK,IAAI,OAAO;gBAAE,OAAO,gBAAgB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAChF,OAAO,gBAAgB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SAE7C;aAAM,IAAI,EAAE,KAAK,SAAS,EAAE;YAC3B,IAAI,MAAM,IAAI,OAAO;gBAAE,OAAO,kBAAkB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;iBACtG;gBACH,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;aACvE;SACF;aAAM,IAAI,EAAE,KAAK,SAAS,EAAE;YAE3B,IAAI,MAAM,IAAI,SAAS;gBAAE,OAAO,kBAAkB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;iBACxG,IAAI,KAAK;gBAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACtE,OAAO,iBAAiB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SAE9C;aAAM,IAAI,EAAE,KAAK,QAAQ,EAAE;YAE1B,IAAI,MAAM,IAAI,SAAS;gBAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;iBACjG,IAAI,KAAK;gBAAE,OAAO,gBAAgB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACrE,OAAO,gBAAgB,EAAE,CAAC;SAE3B;aAAM,IAAI,EAAE,KAAK,OAAO,EAAE;YACzB,IAAI,MAAM,IAAI,SAAS;gBAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;iBACnD;gBACH,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;aACvE;SAEF;aAAM,IAAI,EAAE,KAAK,OAAO,EAAE;YAEzB,OAAO,YAAY,CAAC;SAErB;aAAM,IAAI,EAAE,KAAK,MAAM,EAAE;YAExB,IAAI,MAAM,IAAI,SAAS;gBAAE,OAAO,eAAe,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;SAElG;aAAM;YAEL,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,qBAAqB,MAAM,CAAC,IAAI,iEAAiE,CAAC,CAAC;SAEnI;QAED,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAEQ,wCAAc"}
|
package/esm/index.d.ts
CHANGED
|
@@ -3,9 +3,10 @@ interface ModelObj {
|
|
|
3
3
|
}
|
|
4
4
|
type SortFn = (a: ModelObj, b: ModelObj) => number;
|
|
5
5
|
interface ReducerOpts {
|
|
6
|
-
stateType?:
|
|
6
|
+
stateType?: "list" | "map" | "static" | "mapList";
|
|
7
7
|
sort?: SortFn;
|
|
8
8
|
keyName?: string;
|
|
9
|
+
mapKeyName?: string;
|
|
9
10
|
initialState?: any;
|
|
10
11
|
}
|
|
11
12
|
declare function reducerBuilder(key: string, opts?: ReducerOpts): (state: any, action: {
|
package/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const keySort = (key) => (a, b) => {
|
|
2
|
-
if (typeof a[key] ===
|
|
2
|
+
if (typeof a[key] === "number" && typeof b[key] === "number")
|
|
3
3
|
return a[key] - b[key];
|
|
4
|
-
else if (typeof a[key] ===
|
|
4
|
+
else if (typeof a[key] === "string" && typeof b[key] === "string")
|
|
5
5
|
return a[key].localeCompare(b[key]);
|
|
6
6
|
return 0;
|
|
7
7
|
};
|
|
@@ -57,6 +57,13 @@ const listInsertReducer = (state, action) => {
|
|
|
57
57
|
newState.sort(action?.sort);
|
|
58
58
|
return newState;
|
|
59
59
|
};
|
|
60
|
+
const listUnshiftReducer = (state, action) => {
|
|
61
|
+
if (!state)
|
|
62
|
+
state = [];
|
|
63
|
+
let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
|
|
64
|
+
let newState = [...resp, ...state];
|
|
65
|
+
return newState;
|
|
66
|
+
};
|
|
60
67
|
const listSortReducer = (state, action) => {
|
|
61
68
|
if (!state)
|
|
62
69
|
state = [];
|
|
@@ -78,6 +85,13 @@ const listDeleteReducer = (state, action) => {
|
|
|
78
85
|
}
|
|
79
86
|
return newState;
|
|
80
87
|
};
|
|
88
|
+
const listShiftReducer = (state) => {
|
|
89
|
+
if (!state || !Array.isArray(state))
|
|
90
|
+
state = [];
|
|
91
|
+
let newState = [...state];
|
|
92
|
+
newState.shift();
|
|
93
|
+
return newState;
|
|
94
|
+
};
|
|
81
95
|
const listReplaceReducer = (state, action) => {
|
|
82
96
|
let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
|
|
83
97
|
resp = resp.map((r) => ({ ...r }));
|
|
@@ -94,12 +108,15 @@ const objReplaceReducer = (state, action) => {
|
|
|
94
108
|
const objDeleteReducer = () => {
|
|
95
109
|
return null;
|
|
96
110
|
};
|
|
97
|
-
const OPS = [
|
|
111
|
+
const OPS = ["insert", "replace", "delete", "clear", "sort"];
|
|
98
112
|
function reducerBuilder(key, opts) {
|
|
99
113
|
let initialState = opts?.initialState;
|
|
100
|
-
let stateType = opts?.stateType ??
|
|
101
|
-
let isList = stateType ===
|
|
102
|
-
let isMap = stateType ===
|
|
114
|
+
let stateType = opts?.stateType ?? "static";
|
|
115
|
+
let isList = stateType === "list";
|
|
116
|
+
let isMap = stateType === "map";
|
|
117
|
+
let isMapList = stateType === "mapList";
|
|
118
|
+
if (isMapList && !opts?.mapKeyName)
|
|
119
|
+
throw new Error("mapKeyName is required for stateType: mapList");
|
|
103
120
|
if (initialState === undefined) {
|
|
104
121
|
if (isList)
|
|
105
122
|
initialState = [];
|
|
@@ -116,6 +133,8 @@ function reducerBuilder(key, opts) {
|
|
|
116
133
|
return [];
|
|
117
134
|
else if (isMap)
|
|
118
135
|
return {};
|
|
136
|
+
else if (isMapList)
|
|
137
|
+
return {};
|
|
119
138
|
else
|
|
120
139
|
return null;
|
|
121
140
|
}
|
|
@@ -126,6 +145,7 @@ function reducerBuilder(key, opts) {
|
|
|
126
145
|
let op = m[1];
|
|
127
146
|
let payload = action.payload;
|
|
128
147
|
let keyName = opts?.keyName ?? "id";
|
|
148
|
+
let mapKeyName = opts?.mapKeyName;
|
|
129
149
|
if (isMap && !OPS.includes(op)) {
|
|
130
150
|
if (payload && !Array.isArray(payload)) {
|
|
131
151
|
payload[keyName] = op;
|
|
@@ -139,32 +159,46 @@ function reducerBuilder(key, opts) {
|
|
|
139
159
|
}
|
|
140
160
|
let sort = action.sort ?? opts?.sort;
|
|
141
161
|
if (op === "insert") {
|
|
142
|
-
if (isList && payload)
|
|
143
|
-
return listInsertReducer(state, { payload, sort, keyName });
|
|
162
|
+
if ((isList || isMapList) && payload)
|
|
163
|
+
return listInsertReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
|
|
144
164
|
else if (isMap && payload)
|
|
145
165
|
return mapInsertReducer(state, { payload, keyName });
|
|
146
166
|
return objInsertReducer(state, { payload });
|
|
147
167
|
}
|
|
168
|
+
else if (op === 'unshift') {
|
|
169
|
+
if (isList && payload)
|
|
170
|
+
return listUnshiftReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
|
|
171
|
+
else {
|
|
172
|
+
console.error(`unshift is only valid for stateType: list or mapList`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
148
175
|
else if (op === "replace") {
|
|
149
|
-
if (isList)
|
|
150
|
-
return listReplaceReducer(state, { payload, sort, keyName });
|
|
176
|
+
if (isList || isMapList)
|
|
177
|
+
return listReplaceReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
|
|
151
178
|
else if (isMap)
|
|
152
179
|
return mapReplaceReducer(state, { payload, keyName });
|
|
153
180
|
return objReplaceReducer(state, { payload });
|
|
154
181
|
}
|
|
155
182
|
else if (op === "delete") {
|
|
156
|
-
if (isList)
|
|
157
|
-
return listDeleteReducer(state, { payload, keyName });
|
|
183
|
+
if (isList || isMapList)
|
|
184
|
+
return listDeleteReducer(state, { payload, keyName, mapKeyName, isMapList });
|
|
158
185
|
else if (isMap)
|
|
159
186
|
return mapDeleteReducer(state, { payload, keyName });
|
|
160
187
|
return objDeleteReducer();
|
|
161
188
|
}
|
|
189
|
+
else if (op === "shift") {
|
|
190
|
+
if (isList || isMapList)
|
|
191
|
+
return listShiftReducer(state);
|
|
192
|
+
else {
|
|
193
|
+
console.error(`unshift is only valid for stateType: list or mapList`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
162
196
|
else if (op === "clear") {
|
|
163
197
|
return initialState;
|
|
164
198
|
}
|
|
165
199
|
else if (op === "sort") {
|
|
166
|
-
if (isList)
|
|
167
|
-
return listSortReducer(state, { sort, keyName });
|
|
200
|
+
if (isList || isMapList)
|
|
201
|
+
return listSortReducer(state, { sort, keyName, mapKeyName, isMapList });
|
|
168
202
|
}
|
|
169
203
|
else {
|
|
170
204
|
console.error(`unknown op (${op}) in action type: ${action.type}. Op should be one of: insert, delete, replace, clear, or sort.`);
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
type Id = number | string;
|
|
3
2
|
|
|
4
3
|
interface ModelObj {
|
|
@@ -11,47 +10,57 @@ interface ListAction {
|
|
|
11
10
|
payload: ModelObj | ModelObj[];
|
|
12
11
|
sort?: SortFn;
|
|
13
12
|
keyName: string;
|
|
13
|
+
mapKeyName?: string;
|
|
14
|
+
isMapList: boolean;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface MapAction {
|
|
18
|
+
payload: ModelObj | ModelObj[];
|
|
19
|
+
sort?: SortFn;
|
|
20
|
+
keyName: string;
|
|
14
21
|
}
|
|
15
22
|
|
|
16
23
|
interface ListSortAction {
|
|
17
24
|
sort?: SortFn;
|
|
18
25
|
keyName: string;
|
|
26
|
+
mapKeyName?: string;
|
|
27
|
+
isMapList: boolean;
|
|
19
28
|
}
|
|
20
29
|
|
|
21
30
|
const keySort = (key: string) => (a: ModelObj, b: ModelObj) => {
|
|
22
|
-
if (typeof a[key] ===
|
|
23
|
-
else if (typeof a[key] ===
|
|
31
|
+
if (typeof a[key] === "number" && typeof b[key] === "number") return a[key] - b[key];
|
|
32
|
+
else if (typeof a[key] === "string" && typeof b[key] === "string") return a[key].localeCompare(b[key]);
|
|
24
33
|
return 0;
|
|
25
34
|
};
|
|
26
35
|
|
|
27
|
-
const mapInsertReducer = (state: ModelObj, action:
|
|
36
|
+
const mapInsertReducer = (state: ModelObj, action: MapAction) => {
|
|
28
37
|
if (!state) state = {};
|
|
29
38
|
let resp: ModelObj[] = Array.isArray(action.payload) ? action.payload : [action.payload];
|
|
30
|
-
let newState = {...state};
|
|
39
|
+
let newState = { ...state };
|
|
31
40
|
for (let i in resp) {
|
|
32
|
-
if (resp[i]?.[action.keyName]) newState[resp[i][action.keyName]] = {...resp[i]};
|
|
41
|
+
if (resp[i]?.[action.keyName]) newState[resp[i][action.keyName]] = { ...resp[i] };
|
|
33
42
|
}
|
|
34
43
|
return newState;
|
|
35
|
-
}
|
|
44
|
+
};
|
|
36
45
|
|
|
37
|
-
const mapDeleteReducer = (state: ModelObj, action:
|
|
46
|
+
const mapDeleteReducer = (state: ModelObj, action: MapAction) => {
|
|
38
47
|
if (!state) state = {};
|
|
39
48
|
let resp: ModelObj[] = Array.isArray(action.payload) ? action.payload : [action.payload];
|
|
40
|
-
let newState = {...state};
|
|
49
|
+
let newState = { ...state };
|
|
41
50
|
for (let i in resp) {
|
|
42
51
|
delete newState[resp[i][action.keyName]];
|
|
43
52
|
}
|
|
44
53
|
return newState;
|
|
45
|
-
}
|
|
54
|
+
};
|
|
46
55
|
|
|
47
|
-
const mapReplaceReducer = (state: ModelObj, action:
|
|
56
|
+
const mapReplaceReducer = (state: ModelObj, action: MapAction) => {
|
|
48
57
|
let newState = {} as any;
|
|
49
58
|
let resp: ModelObj[] = Array.isArray(action.payload) ? action.payload : [action.payload];
|
|
50
59
|
for (let i in resp) {
|
|
51
|
-
if (resp[i]?.[action.keyName]) newState[resp[i][action.keyName]] = {...resp[i]};
|
|
60
|
+
if (resp[i]?.[action.keyName]) newState[resp[i][action.keyName]] = { ...resp[i] };
|
|
52
61
|
}
|
|
53
62
|
return newState;
|
|
54
|
-
}
|
|
63
|
+
};
|
|
55
64
|
|
|
56
65
|
const listInsertReducer = (state: ModelObj[], action: ListAction) => {
|
|
57
66
|
if (!state) state = [];
|
|
@@ -60,12 +69,12 @@ const listInsertReducer = (state: ModelObj[], action: ListAction) => {
|
|
|
60
69
|
let newState = [...state];
|
|
61
70
|
let respMap: Id[] = resp.map((r: any) => r[action.keyName]);
|
|
62
71
|
let stateMap: Id[] = newState.map((r: any) => r[action.keyName]);
|
|
63
|
-
let toInsert: Id[] = respMap.filter((id
|
|
72
|
+
let toInsert: Id[] = respMap.filter((id: number | string) => stateMap.indexOf(id) < 0);
|
|
64
73
|
let toReplace: Id[] = respMap.filter((id: number | string) => stateMap.indexOf(id) >= 0);
|
|
65
74
|
for (let i in toReplace) {
|
|
66
75
|
let stateIndex = stateMap.indexOf(toReplace[i]);
|
|
67
76
|
let respIndex = respMap.indexOf(toReplace[i]);
|
|
68
|
-
newState[stateIndex] = {...resp[respIndex]};
|
|
77
|
+
newState[stateIndex] = { ...resp[respIndex] };
|
|
69
78
|
}
|
|
70
79
|
if (toInsert.length > 0) {
|
|
71
80
|
let inserts = toInsert.map((id: number | string) => resp[respMap.indexOf(id)]);
|
|
@@ -73,6 +82,14 @@ const listInsertReducer = (state: ModelObj[], action: ListAction) => {
|
|
|
73
82
|
}
|
|
74
83
|
if (action?.sort) newState.sort(action?.sort);
|
|
75
84
|
return newState;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const listUnshiftReducer = (state: ModelObj[], action: ListAction) => {
|
|
88
|
+
if (!state) state = [];
|
|
89
|
+
let resp: ModelObj[] = Array.isArray(action.payload) ? action.payload : [action.payload];
|
|
90
|
+
|
|
91
|
+
let newState = [...resp, ...state];
|
|
92
|
+
return newState;
|
|
76
93
|
}
|
|
77
94
|
|
|
78
95
|
const listSortReducer = (state: ModelObj[], action: ListSortAction) => {
|
|
@@ -81,7 +98,7 @@ const listSortReducer = (state: ModelObj[], action: ListSortAction) => {
|
|
|
81
98
|
let sort = action?.sort ? action.sort : keySort(action.keyName);
|
|
82
99
|
newState.sort(sort);
|
|
83
100
|
return newState;
|
|
84
|
-
}
|
|
101
|
+
};
|
|
85
102
|
|
|
86
103
|
const listDeleteReducer = (state: ModelObj[], action: ListAction) => {
|
|
87
104
|
if (!state || !Array.isArray(state)) state = [];
|
|
@@ -94,65 +111,78 @@ const listDeleteReducer = (state: ModelObj[], action: ListAction) => {
|
|
|
94
111
|
if (index >= 0) newState.splice(index, 1);
|
|
95
112
|
}
|
|
96
113
|
return newState;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const listShiftReducer = (state: ModelObj[]) => {
|
|
117
|
+
if (!state || !Array.isArray(state)) state = [];
|
|
118
|
+
let newState = [...state];
|
|
119
|
+
newState.shift();
|
|
120
|
+
return newState;
|
|
97
121
|
}
|
|
98
122
|
|
|
99
123
|
const listReplaceReducer = (state: ModelObj[], action: ListAction) => {
|
|
100
124
|
let resp: ModelObj[] = Array.isArray(action.payload) ? action.payload : [action.payload];
|
|
101
|
-
resp = resp.map((r: any) => ({...r}));
|
|
125
|
+
resp = resp.map((r: any) => ({ ...r }));
|
|
102
126
|
if (action?.sort) resp.sort(action?.sort);
|
|
103
127
|
return resp;
|
|
104
|
-
}
|
|
128
|
+
};
|
|
105
129
|
|
|
106
130
|
const objInsertReducer = (state: any, action: { payload: any }) => {
|
|
107
|
-
return action.payload
|
|
108
|
-
}
|
|
131
|
+
return action.payload;
|
|
132
|
+
};
|
|
109
133
|
|
|
110
134
|
const objReplaceReducer = (state: any, action: { payload: any }) => {
|
|
111
|
-
return action.payload
|
|
112
|
-
}
|
|
135
|
+
return action.payload;
|
|
136
|
+
};
|
|
113
137
|
|
|
114
138
|
const objDeleteReducer = () => {
|
|
115
|
-
return null
|
|
116
|
-
}
|
|
139
|
+
return null;
|
|
140
|
+
};
|
|
117
141
|
|
|
118
142
|
interface ReducerOpts {
|
|
119
|
-
stateType?:
|
|
143
|
+
stateType?: "list" | "map" | "static" | "mapList";
|
|
120
144
|
sort?: SortFn;
|
|
121
145
|
keyName?: string;
|
|
146
|
+
mapKeyName?: string;
|
|
122
147
|
initialState?: any;
|
|
123
148
|
}
|
|
124
149
|
|
|
125
|
-
const OPS = [
|
|
150
|
+
const OPS = ["insert", "replace", "delete", "clear", "sort"];
|
|
126
151
|
function reducerBuilder(key: string, opts?: ReducerOpts) {
|
|
127
152
|
let initialState = opts?.initialState;
|
|
128
|
-
let stateType = opts?.stateType ??
|
|
129
|
-
let isList = stateType ===
|
|
130
|
-
let isMap = stateType ===
|
|
153
|
+
let stateType = opts?.stateType ?? "static";
|
|
154
|
+
let isList = stateType === "list";
|
|
155
|
+
let isMap = stateType === "map";
|
|
156
|
+
let isMapList = stateType === "mapList";
|
|
157
|
+
|
|
158
|
+
if (isMapList && !opts?.mapKeyName) throw new Error("mapKeyName is required for stateType: mapList");
|
|
159
|
+
|
|
131
160
|
if (initialState === undefined) {
|
|
132
161
|
if (isList) initialState = [];
|
|
133
162
|
else if (isMap) initialState = {};
|
|
134
163
|
else initialState = null;
|
|
135
164
|
}
|
|
136
|
-
return (state: any, action: { type: string; payload?: any; sort?: (a: ModelObj, b: ModelObj) => number }) => {
|
|
137
|
-
|
|
165
|
+
return (state: any, action: { type: string; payload?: any; sort?: (a: ModelObj, b: ModelObj) => number }) => {
|
|
138
166
|
if (state === undefined) {
|
|
139
167
|
if (initialState !== undefined) return initialState;
|
|
140
168
|
else if (isList) return [];
|
|
141
169
|
else if (isMap) return {};
|
|
170
|
+
else if (isMapList) return {};
|
|
142
171
|
else return null;
|
|
143
172
|
}
|
|
144
173
|
let rx = new RegExp(`^${key}/([^\/]+)$`);
|
|
145
174
|
let m = action.type.match(rx);
|
|
146
175
|
if (!m) return state;
|
|
147
|
-
|
|
176
|
+
|
|
148
177
|
let op = m[1];
|
|
149
178
|
let payload = action.payload;
|
|
150
179
|
let keyName = opts?.keyName ?? "id";
|
|
180
|
+
let mapKeyName = opts?.mapKeyName;
|
|
151
181
|
|
|
152
182
|
if (isMap && !OPS.includes(op)) {
|
|
153
183
|
if (payload && !Array.isArray(payload)) {
|
|
154
184
|
payload[keyName] = op;
|
|
155
|
-
op = "insert";
|
|
185
|
+
op = "insert";
|
|
156
186
|
}
|
|
157
187
|
if (!payload) {
|
|
158
188
|
payload = {};
|
|
@@ -163,24 +193,48 @@ return (state: any, action: { type: string; payload?: any; sort?: (a: ModelObj,
|
|
|
163
193
|
|
|
164
194
|
let sort = action.sort ?? opts?.sort;
|
|
165
195
|
if (op === "insert") {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
return
|
|
196
|
+
|
|
197
|
+
if ((isList || isMapList) && payload) return listInsertReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
|
|
198
|
+
else if (isMap && payload) return mapInsertReducer(state, { payload, keyName });
|
|
199
|
+
return objInsertReducer(state, { payload });
|
|
200
|
+
|
|
201
|
+
} else if (op === 'unshift') {
|
|
202
|
+
if (isList && payload) return listUnshiftReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
|
|
203
|
+
else {
|
|
204
|
+
console.error(`unshift is only valid for stateType: list or mapList`);
|
|
205
|
+
}
|
|
169
206
|
} else if (op === "replace") {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
return
|
|
207
|
+
|
|
208
|
+
if (isList || isMapList) return listReplaceReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
|
|
209
|
+
else if (isMap) return mapReplaceReducer(state, { payload, keyName });
|
|
210
|
+
return objReplaceReducer(state, { payload });
|
|
211
|
+
|
|
173
212
|
} else if (op === "delete") {
|
|
174
|
-
|
|
175
|
-
|
|
213
|
+
|
|
214
|
+
if (isList || isMapList) return listDeleteReducer(state, { payload, keyName, mapKeyName, isMapList });
|
|
215
|
+
else if (isMap) return mapDeleteReducer(state, { payload, keyName });
|
|
176
216
|
return objDeleteReducer();
|
|
217
|
+
|
|
218
|
+
} else if (op === "shift") {
|
|
219
|
+
if (isList || isMapList) return listShiftReducer(state);
|
|
220
|
+
else {
|
|
221
|
+
console.error(`unshift is only valid for stateType: list or mapList`);
|
|
222
|
+
}
|
|
223
|
+
|
|
177
224
|
} else if (op === "clear") {
|
|
225
|
+
|
|
178
226
|
return initialState;
|
|
227
|
+
|
|
179
228
|
} else if (op === "sort") {
|
|
180
|
-
|
|
229
|
+
|
|
230
|
+
if (isList || isMapList) return listSortReducer(state, { sort, keyName, mapKeyName, isMapList });
|
|
231
|
+
|
|
181
232
|
} else {
|
|
233
|
+
|
|
182
234
|
console.error(`unknown op (${op}) in action type: ${action.type}. Op should be one of: insert, delete, replace, clear, or sort.`);
|
|
235
|
+
|
|
183
236
|
}
|
|
237
|
+
|
|
184
238
|
return state || (isList ? [] : isMap ? {} : null);
|
|
185
239
|
};
|
|
186
240
|
}
|