riducers 1.2.2 → 1.2.4

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 CHANGED
@@ -3,9 +3,10 @@ interface ModelObj {
3
3
  }
4
4
  type SortFn = (a: ModelObj, b: ModelObj) => number;
5
5
  interface ReducerOpts {
6
- stateType?: 'list' | 'map' | 'static';
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] === 'number' && typeof b[key] === 'number')
5
+ if (typeof a[key] === "number" && typeof b[key] === "number")
6
6
  return a[key] - b[key];
7
- else if (typeof a[key] === 'string' && typeof b[key] === 'string')
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
  };
@@ -13,22 +13,22 @@ const mapInsertReducer = (state, action) => {
13
13
  if (!state)
14
14
  state = {};
15
15
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
16
- state = { ...state };
16
+ let newState = { ...state };
17
17
  for (let i in resp) {
18
18
  if ((_a = resp[i]) === null || _a === void 0 ? void 0 : _a[action.keyName])
19
- state[resp[i][action.keyName]] = { ...resp[i] };
19
+ newState[resp[i][action.keyName]] = { ...resp[i] };
20
20
  }
21
- return state;
21
+ return newState;
22
22
  };
23
23
  const mapDeleteReducer = (state, action) => {
24
24
  if (!state)
25
25
  state = {};
26
26
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
27
- state = { ...state };
27
+ let newState = { ...state };
28
28
  for (let i in resp) {
29
- delete state[resp[i][action.keyName]];
29
+ delete newState[resp[i][action.keyName]];
30
30
  }
31
- return state;
31
+ return newState;
32
32
  };
33
33
  const mapReplaceReducer = (state, action) => {
34
34
  var _a;
@@ -44,45 +44,51 @@ const listInsertReducer = (state, action) => {
44
44
  if (!state)
45
45
  state = [];
46
46
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
47
- state = [...state];
47
+ let newState = [...state];
48
48
  let respMap = resp.map((r) => r[action.keyName]);
49
- let stateMap = state.map((r) => r[action.keyName]);
49
+ let stateMap = newState.map((r) => r[action.keyName]);
50
50
  let toInsert = respMap.filter((id) => stateMap.indexOf(id) < 0);
51
51
  let toReplace = respMap.filter((id) => stateMap.indexOf(id) >= 0);
52
52
  for (let i in toReplace) {
53
53
  let stateIndex = stateMap.indexOf(toReplace[i]);
54
54
  let respIndex = respMap.indexOf(toReplace[i]);
55
- state[stateIndex] = { ...resp[respIndex] };
55
+ newState[stateIndex] = { ...resp[respIndex] };
56
56
  }
57
57
  if (toInsert.length > 0) {
58
58
  let inserts = toInsert.map((id) => resp[respMap.indexOf(id)]);
59
- state = [...state, ...inserts];
59
+ newState = [...newState, ...inserts];
60
60
  }
61
61
  if (action === null || action === void 0 ? void 0 : action.sort)
62
- state.sort(action === null || action === void 0 ? void 0 : action.sort);
63
- return state;
62
+ newState.sort(action === null || action === void 0 ? void 0 : action.sort);
63
+ return newState;
64
64
  };
65
65
  const listSortReducer = (state, action) => {
66
66
  if (!state)
67
67
  state = [];
68
- state = [...state];
68
+ let newState = [...state];
69
69
  let sort = (action === null || action === void 0 ? void 0 : action.sort) ? action.sort : keySort(action.keyName);
70
- state.sort(sort);
71
- return [...state];
70
+ newState.sort(sort);
71
+ return newState;
72
72
  };
73
73
  const listDeleteReducer = (state, action) => {
74
- if (!state)
74
+ if (!state || !Array.isArray(state))
75
75
  state = [];
76
- if (Array.isArray(state))
77
- state = [...state];
76
+ let newState = [...state];
78
77
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
79
- let stateMap = state.map((s) => s[action.keyName]);
78
+ let stateMap = newState.map((s) => s[action.keyName]);
80
79
  for (let i in resp) {
81
80
  let index = stateMap.indexOf(resp[i][action.keyName]);
82
81
  if (index >= 0)
83
- state.splice(index, 1);
82
+ newState.splice(index, 1);
84
83
  }
85
- return state;
84
+ return newState;
85
+ };
86
+ const listShiftReducer = (state) => {
87
+ if (!state || !Array.isArray(state))
88
+ state = [];
89
+ let newState = [...state];
90
+ newState.shift();
91
+ return newState;
86
92
  };
87
93
  const listReplaceReducer = (state, action) => {
88
94
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
@@ -100,13 +106,16 @@ const objReplaceReducer = (state, action) => {
100
106
  const objDeleteReducer = () => {
101
107
  return null;
102
108
  };
103
- const OPS = ['insert', 'replace', 'delete', 'clear', 'sort'];
109
+ const OPS = ["insert", "replace", "delete", "clear", "sort"];
104
110
  function reducerBuilder(key, opts) {
105
111
  var _a;
106
112
  let initialState = opts === null || opts === void 0 ? void 0 : opts.initialState;
107
- let stateType = (_a = opts === null || opts === void 0 ? void 0 : opts.stateType) !== null && _a !== void 0 ? _a : 'static';
108
- let isList = stateType === 'list';
109
- let isMap = stateType === 'map';
113
+ let stateType = (_a = opts === null || opts === void 0 ? void 0 : opts.stateType) !== null && _a !== void 0 ? _a : "static";
114
+ let isList = stateType === "list";
115
+ let isMap = stateType === "map";
116
+ let isMapList = stateType === "mapList";
117
+ if (isMapList && !(opts === null || opts === void 0 ? void 0 : opts.mapKeyName))
118
+ throw new Error("mapKeyName is required for stateType: mapList");
110
119
  if (initialState === undefined) {
111
120
  if (isList)
112
121
  initialState = [];
@@ -124,6 +133,8 @@ function reducerBuilder(key, opts) {
124
133
  return [];
125
134
  else if (isMap)
126
135
  return {};
136
+ else if (isMapList)
137
+ return {};
127
138
  else
128
139
  return null;
129
140
  }
@@ -134,6 +145,7 @@ function reducerBuilder(key, opts) {
134
145
  let op = m[1];
135
146
  let payload = action.payload;
136
147
  let keyName = (_a = opts === null || opts === void 0 ? void 0 : opts.keyName) !== null && _a !== void 0 ? _a : "id";
148
+ let mapKeyName = opts === null || opts === void 0 ? void 0 : opts.mapKeyName;
137
149
  if (isMap && !OPS.includes(op)) {
138
150
  if (payload && !Array.isArray(payload)) {
139
151
  payload[keyName] = op;
@@ -147,32 +159,39 @@ function reducerBuilder(key, opts) {
147
159
  }
148
160
  let sort = (_b = action.sort) !== null && _b !== void 0 ? _b : opts === null || opts === void 0 ? void 0 : opts.sort;
149
161
  if (op === "insert") {
150
- if (isList && payload)
151
- return listInsertReducer(state, { payload, sort, keyName });
162
+ if ((isList || isMapList) && payload)
163
+ return listInsertReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
152
164
  else if (isMap && payload)
153
165
  return mapInsertReducer(state, { payload, keyName });
154
166
  return objInsertReducer(state, { payload });
155
167
  }
156
168
  else if (op === "replace") {
157
- if (isList)
158
- return listReplaceReducer(state, { payload, sort, keyName });
169
+ if (isList || isMapList)
170
+ return listReplaceReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
159
171
  else if (isMap)
160
172
  return mapReplaceReducer(state, { payload, keyName });
161
173
  return objReplaceReducer(state, { payload });
162
174
  }
163
175
  else if (op === "delete") {
164
- if (isList)
165
- return listDeleteReducer(state, { payload, keyName });
176
+ if (isList || isMapList)
177
+ return listDeleteReducer(state, { payload, keyName, mapKeyName, isMapList });
166
178
  else if (isMap)
167
179
  return mapDeleteReducer(state, { payload, keyName });
168
180
  return objDeleteReducer();
169
181
  }
182
+ else if (op === "shift") {
183
+ if (isList || isMapList)
184
+ return listShiftReducer(state);
185
+ else {
186
+ console.error(`unshift is only valid for stateType: list or mapList`);
187
+ }
188
+ }
170
189
  else if (op === "clear") {
171
190
  return initialState;
172
191
  }
173
192
  else if (op === "sort") {
174
- if (isList)
175
- return listSortReducer(state, { sort, keyName });
193
+ if (isList || isMapList)
194
+ return listSortReducer(state, { sort, keyName, mapKeyName, isMapList });
176
195
  }
177
196
  else {
178
197
  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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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?: 'list' | 'map' | 'static';
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] === 'number' && typeof b[key] === 'number')
2
+ if (typeof a[key] === "number" && typeof b[key] === "number")
3
3
  return a[key] - b[key];
4
- else if (typeof a[key] === 'string' && typeof b[key] === 'string')
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
  };
@@ -9,22 +9,22 @@ const mapInsertReducer = (state, action) => {
9
9
  if (!state)
10
10
  state = {};
11
11
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
12
- state = { ...state };
12
+ let newState = { ...state };
13
13
  for (let i in resp) {
14
14
  if (resp[i]?.[action.keyName])
15
- state[resp[i][action.keyName]] = { ...resp[i] };
15
+ newState[resp[i][action.keyName]] = { ...resp[i] };
16
16
  }
17
- return state;
17
+ return newState;
18
18
  };
19
19
  const mapDeleteReducer = (state, action) => {
20
20
  if (!state)
21
21
  state = {};
22
22
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
23
- state = { ...state };
23
+ let newState = { ...state };
24
24
  for (let i in resp) {
25
- delete state[resp[i][action.keyName]];
25
+ delete newState[resp[i][action.keyName]];
26
26
  }
27
- return state;
27
+ return newState;
28
28
  };
29
29
  const mapReplaceReducer = (state, action) => {
30
30
  let newState = {};
@@ -39,45 +39,51 @@ const listInsertReducer = (state, action) => {
39
39
  if (!state)
40
40
  state = [];
41
41
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
42
- state = [...state];
42
+ let newState = [...state];
43
43
  let respMap = resp.map((r) => r[action.keyName]);
44
- let stateMap = state.map((r) => r[action.keyName]);
44
+ let stateMap = newState.map((r) => r[action.keyName]);
45
45
  let toInsert = respMap.filter((id) => stateMap.indexOf(id) < 0);
46
46
  let toReplace = respMap.filter((id) => stateMap.indexOf(id) >= 0);
47
47
  for (let i in toReplace) {
48
48
  let stateIndex = stateMap.indexOf(toReplace[i]);
49
49
  let respIndex = respMap.indexOf(toReplace[i]);
50
- state[stateIndex] = { ...resp[respIndex] };
50
+ newState[stateIndex] = { ...resp[respIndex] };
51
51
  }
52
52
  if (toInsert.length > 0) {
53
53
  let inserts = toInsert.map((id) => resp[respMap.indexOf(id)]);
54
- state = [...state, ...inserts];
54
+ newState = [...newState, ...inserts];
55
55
  }
56
56
  if (action?.sort)
57
- state.sort(action?.sort);
58
- return state;
57
+ newState.sort(action?.sort);
58
+ return newState;
59
59
  };
60
60
  const listSortReducer = (state, action) => {
61
61
  if (!state)
62
62
  state = [];
63
- state = [...state];
63
+ let newState = [...state];
64
64
  let sort = action?.sort ? action.sort : keySort(action.keyName);
65
- state.sort(sort);
66
- return [...state];
65
+ newState.sort(sort);
66
+ return newState;
67
67
  };
68
68
  const listDeleteReducer = (state, action) => {
69
- if (!state)
69
+ if (!state || !Array.isArray(state))
70
70
  state = [];
71
- if (Array.isArray(state))
72
- state = [...state];
71
+ let newState = [...state];
73
72
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
74
- let stateMap = state.map((s) => s[action.keyName]);
73
+ let stateMap = newState.map((s) => s[action.keyName]);
75
74
  for (let i in resp) {
76
75
  let index = stateMap.indexOf(resp[i][action.keyName]);
77
76
  if (index >= 0)
78
- state.splice(index, 1);
77
+ newState.splice(index, 1);
79
78
  }
80
- return state;
79
+ return newState;
80
+ };
81
+ const listShiftReducer = (state) => {
82
+ if (!state || !Array.isArray(state))
83
+ state = [];
84
+ let newState = [...state];
85
+ newState.shift();
86
+ return newState;
81
87
  };
82
88
  const listReplaceReducer = (state, action) => {
83
89
  let resp = Array.isArray(action.payload) ? action.payload : [action.payload];
@@ -95,12 +101,15 @@ const objReplaceReducer = (state, action) => {
95
101
  const objDeleteReducer = () => {
96
102
  return null;
97
103
  };
98
- const OPS = ['insert', 'replace', 'delete', 'clear', 'sort'];
104
+ const OPS = ["insert", "replace", "delete", "clear", "sort"];
99
105
  function reducerBuilder(key, opts) {
100
106
  let initialState = opts?.initialState;
101
- let stateType = opts?.stateType ?? 'static';
102
- let isList = stateType === 'list';
103
- let isMap = stateType === 'map';
107
+ let stateType = opts?.stateType ?? "static";
108
+ let isList = stateType === "list";
109
+ let isMap = stateType === "map";
110
+ let isMapList = stateType === "mapList";
111
+ if (isMapList && !opts?.mapKeyName)
112
+ throw new Error("mapKeyName is required for stateType: mapList");
104
113
  if (initialState === undefined) {
105
114
  if (isList)
106
115
  initialState = [];
@@ -117,6 +126,8 @@ function reducerBuilder(key, opts) {
117
126
  return [];
118
127
  else if (isMap)
119
128
  return {};
129
+ else if (isMapList)
130
+ return {};
120
131
  else
121
132
  return null;
122
133
  }
@@ -127,6 +138,7 @@ function reducerBuilder(key, opts) {
127
138
  let op = m[1];
128
139
  let payload = action.payload;
129
140
  let keyName = opts?.keyName ?? "id";
141
+ let mapKeyName = opts?.mapKeyName;
130
142
  if (isMap && !OPS.includes(op)) {
131
143
  if (payload && !Array.isArray(payload)) {
132
144
  payload[keyName] = op;
@@ -140,32 +152,39 @@ function reducerBuilder(key, opts) {
140
152
  }
141
153
  let sort = action.sort ?? opts?.sort;
142
154
  if (op === "insert") {
143
- if (isList && payload)
144
- return listInsertReducer(state, { payload, sort, keyName });
155
+ if ((isList || isMapList) && payload)
156
+ return listInsertReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
145
157
  else if (isMap && payload)
146
158
  return mapInsertReducer(state, { payload, keyName });
147
159
  return objInsertReducer(state, { payload });
148
160
  }
149
161
  else if (op === "replace") {
150
- if (isList)
151
- return listReplaceReducer(state, { payload, sort, keyName });
162
+ if (isList || isMapList)
163
+ return listReplaceReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
152
164
  else if (isMap)
153
165
  return mapReplaceReducer(state, { payload, keyName });
154
166
  return objReplaceReducer(state, { payload });
155
167
  }
156
168
  else if (op === "delete") {
157
- if (isList)
158
- return listDeleteReducer(state, { payload, keyName });
169
+ if (isList || isMapList)
170
+ return listDeleteReducer(state, { payload, keyName, mapKeyName, isMapList });
159
171
  else if (isMap)
160
172
  return mapDeleteReducer(state, { payload, keyName });
161
173
  return objDeleteReducer();
162
174
  }
175
+ else if (op === "shift") {
176
+ if (isList || isMapList)
177
+ return listShiftReducer(state);
178
+ else {
179
+ console.error(`unshift is only valid for stateType: list or mapList`);
180
+ }
181
+ }
163
182
  else if (op === "clear") {
164
183
  return initialState;
165
184
  }
166
185
  else if (op === "sort") {
167
- if (isList)
168
- return listSortReducer(state, { sort, keyName });
186
+ if (isList || isMapList)
187
+ return listSortReducer(state, { sort, keyName, mapKeyName, isMapList });
169
188
  }
170
189
  else {
171
190
  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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "riducers",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "description": "Dynamic reducers with insert, delete, replace, clear, and sort actions on 'id' based list of objects",
5
5
  "main": "dist/index.js",
6
6
  "module": "esm/index.js",
package/src/index.ts CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  type Id = number | string;
3
2
 
4
3
  interface ModelObj {
@@ -11,148 +10,171 @@ 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] === 'number' && typeof b[key] === 'number') return a[key] - b[key];
23
- else if (typeof a[key] === 'string' && typeof b[key] === 'string') return a[key].localeCompare(b[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: ListAction) => {
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
- state = {...state};
39
+ let newState = { ...state };
31
40
  for (let i in resp) {
32
- if (resp[i]?.[action.keyName]) state[resp[i][action.keyName]] = {...resp[i]};
41
+ if (resp[i]?.[action.keyName]) newState[resp[i][action.keyName]] = { ...resp[i] };
33
42
  }
34
- return state;
35
- }
43
+ return newState;
44
+ };
36
45
 
37
- const mapDeleteReducer = (state: ModelObj, action: ListAction) => {
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
- state = {...state};
49
+ let newState = { ...state };
41
50
  for (let i in resp) {
42
- delete state[resp[i][action.keyName]];
51
+ delete newState[resp[i][action.keyName]];
43
52
  }
44
- return state;
45
- }
53
+ return newState;
54
+ };
46
55
 
47
- const mapReplaceReducer = (state: ModelObj, action: ListAction) => {
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 = [];
58
67
  let resp: ModelObj[] = Array.isArray(action.payload) ? action.payload : [action.payload];
59
68
 
60
- state = [...state];
69
+ let newState = [...state];
61
70
  let respMap: Id[] = resp.map((r: any) => r[action.keyName]);
62
- let stateMap: Id[] = state.map((r: any) => r[action.keyName]);
63
- let toInsert: Id[] = respMap.filter((id : number | string) => stateMap.indexOf(id) < 0);
71
+ let stateMap: Id[] = newState.map((r: any) => r[action.keyName]);
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
- state[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)]);
72
- state = [...state, ...inserts];
81
+ newState = [...newState, ...inserts];
73
82
  }
74
- if (action?.sort) state.sort(action?.sort);
75
- return state;
76
- }
83
+ if (action?.sort) newState.sort(action?.sort);
84
+ return newState;
85
+ };
77
86
 
78
87
  const listSortReducer = (state: ModelObj[], action: ListSortAction) => {
79
88
  if (!state) state = [];
80
- state = [...state];
89
+ let newState = [...state];
81
90
  let sort = action?.sort ? action.sort : keySort(action.keyName);
82
- state.sort(sort);
83
- return [...state];
84
- }
91
+ newState.sort(sort);
92
+ return newState;
93
+ };
85
94
 
86
95
  const listDeleteReducer = (state: ModelObj[], action: ListAction) => {
87
- if (!state) state = [];
88
- if (Array.isArray(state)) state = [...state];
96
+ if (!state || !Array.isArray(state)) state = [];
97
+ let newState = [...state];
89
98
  let resp: ModelObj[] = Array.isArray(action.payload) ? action.payload : [action.payload];
90
99
 
91
- let stateMap: Id[] = state.map((s: any) => s[action.keyName]);
100
+ let stateMap: Id[] = newState.map((s: any) => s[action.keyName]);
92
101
  for (let i in resp) {
93
102
  let index = stateMap.indexOf(resp[i][action.keyName]);
94
- if (index >= 0) state.splice(index, 1);
103
+ if (index >= 0) newState.splice(index, 1);
95
104
  }
96
- return state;
105
+ return newState;
106
+ };
107
+
108
+ const listShiftReducer = (state: ModelObj[]) => {
109
+ if (!state || !Array.isArray(state)) state = [];
110
+ let newState = [...state];
111
+ newState.shift();
112
+ return newState;
97
113
  }
98
114
 
99
115
  const listReplaceReducer = (state: ModelObj[], action: ListAction) => {
100
116
  let resp: ModelObj[] = Array.isArray(action.payload) ? action.payload : [action.payload];
101
- resp = resp.map((r: any) => ({...r}));
117
+ resp = resp.map((r: any) => ({ ...r }));
102
118
  if (action?.sort) resp.sort(action?.sort);
103
119
  return resp;
104
- }
120
+ };
105
121
 
106
122
  const objInsertReducer = (state: any, action: { payload: any }) => {
107
- return action.payload
108
- }
123
+ return action.payload;
124
+ };
109
125
 
110
126
  const objReplaceReducer = (state: any, action: { payload: any }) => {
111
- return action.payload
112
- }
127
+ return action.payload;
128
+ };
113
129
 
114
130
  const objDeleteReducer = () => {
115
- return null
116
- }
131
+ return null;
132
+ };
117
133
 
118
134
  interface ReducerOpts {
119
- stateType?: 'list' | 'map' | 'static';
135
+ stateType?: "list" | "map" | "static" | "mapList";
120
136
  sort?: SortFn;
121
137
  keyName?: string;
138
+ mapKeyName?: string;
122
139
  initialState?: any;
123
140
  }
124
141
 
125
- const OPS = ['insert', 'replace', 'delete', 'clear', 'sort'];
142
+ const OPS = ["insert", "replace", "delete", "clear", "sort"];
126
143
  function reducerBuilder(key: string, opts?: ReducerOpts) {
127
144
  let initialState = opts?.initialState;
128
- let stateType = opts?.stateType ?? 'static';
129
- let isList = stateType === 'list';
130
- let isMap = stateType === 'map';
145
+ let stateType = opts?.stateType ?? "static";
146
+ let isList = stateType === "list";
147
+ let isMap = stateType === "map";
148
+ let isMapList = stateType === "mapList";
149
+
150
+ if (isMapList && !opts?.mapKeyName) throw new Error("mapKeyName is required for stateType: mapList");
151
+
131
152
  if (initialState === undefined) {
132
153
  if (isList) initialState = [];
133
154
  else if (isMap) initialState = {};
134
155
  else initialState = null;
135
156
  }
136
- return (state: any, action: { type: string; payload?: any; sort?: (a: ModelObj, b: ModelObj) => number }) => {
137
-
157
+ return (state: any, action: { type: string; payload?: any; sort?: (a: ModelObj, b: ModelObj) => number }) => {
138
158
  if (state === undefined) {
139
159
  if (initialState !== undefined) return initialState;
140
160
  else if (isList) return [];
141
161
  else if (isMap) return {};
162
+ else if (isMapList) return {};
142
163
  else return null;
143
164
  }
144
165
  let rx = new RegExp(`^${key}/([^\/]+)$`);
145
166
  let m = action.type.match(rx);
146
167
  if (!m) return state;
147
-
168
+
148
169
  let op = m[1];
149
170
  let payload = action.payload;
150
171
  let keyName = opts?.keyName ?? "id";
172
+ let mapKeyName = opts?.mapKeyName;
151
173
 
152
174
  if (isMap && !OPS.includes(op)) {
153
175
  if (payload && !Array.isArray(payload)) {
154
176
  payload[keyName] = op;
155
- op = "insert";
177
+ op = "insert";
156
178
  }
157
179
  if (!payload) {
158
180
  payload = {};
@@ -163,24 +185,43 @@ return (state: any, action: { type: string; payload?: any; sort?: (a: ModelObj,
163
185
 
164
186
  let sort = action.sort ?? opts?.sort;
165
187
  if (op === "insert") {
166
- if (isList && payload) return listInsertReducer(state, {payload, sort, keyName});
167
- else if (isMap && payload) return mapInsertReducer(state, {payload, keyName});
168
- return objInsertReducer(state, {payload});
188
+
189
+ if ((isList || isMapList) && payload) return listInsertReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
190
+ else if (isMap && payload) return mapInsertReducer(state, { payload, keyName });
191
+ return objInsertReducer(state, { payload });
192
+
169
193
  } else if (op === "replace") {
170
- if (isList) return listReplaceReducer(state, {payload, sort, keyName});
171
- else if (isMap) return mapReplaceReducer(state, {payload, keyName});
172
- return objReplaceReducer(state, {payload});
194
+
195
+ if (isList || isMapList) return listReplaceReducer(state, { payload, sort, keyName, mapKeyName, isMapList });
196
+ else if (isMap) return mapReplaceReducer(state, { payload, keyName });
197
+ return objReplaceReducer(state, { payload });
198
+
173
199
  } else if (op === "delete") {
174
- if (isList) return listDeleteReducer(state, {payload, keyName});
175
- else if (isMap) return mapDeleteReducer(state, {payload, keyName});
200
+
201
+ if (isList || isMapList) return listDeleteReducer(state, { payload, keyName, mapKeyName, isMapList });
202
+ else if (isMap) return mapDeleteReducer(state, { payload, keyName });
176
203
  return objDeleteReducer();
204
+
205
+ } else if (op === "shift") {
206
+ if (isList || isMapList) return listShiftReducer(state);
207
+ else {
208
+ console.error(`unshift is only valid for stateType: list or mapList`);
209
+ }
210
+
177
211
  } else if (op === "clear") {
212
+
178
213
  return initialState;
214
+
179
215
  } else if (op === "sort") {
180
- if (isList) return listSortReducer(state, {sort, keyName});
216
+
217
+ if (isList || isMapList) return listSortReducer(state, { sort, keyName, mapKeyName, isMapList });
218
+
181
219
  } else {
220
+
182
221
  console.error(`unknown op (${op}) in action type: ${action.type}. Op should be one of: insert, delete, replace, clear, or sort.`);
222
+
183
223
  }
224
+
184
225
  return state || (isList ? [] : isMap ? {} : null);
185
226
  };
186
227
  }