@@ -35,8 +35,35 @@ import {getCreateFunction} from '../common/definable.ts';
3535import {objFreeze} from '../common/obj.ts';
3636import {isUndefined} from '../common/other.ts';
3737
38+ const reduceCallbacks = (
39+ callbacks: ((...args: any[]) => any)[],
40+ thing: any,
41+ ...ids: Id[]
42+ ): any =>
43+ arrayReduce(
44+ callbacks,
45+ (current, callback) =>
46+ isUndefined(current) ? current : callback(...ids, current),
47+ thing,
48+ );
49+
50+ const everyCallback = (
51+ callbacks: ((...args: any[]) => boolean)[],
52+ ...ids: Id[]
53+ ): boolean => arrayEvery(callbacks, (callback) => callback(...ids));
54+
3855export const createMiddleware = getCreateFunction(
3956 (store: Store): Middleware => {
57+ const fluent = (actions: () => void): Middleware => {
58+ actions();
59+ return middleware;
60+ };
61+
62+ const addCallback =
63+ <Callback>(callbacks: Callback[]) =>
64+ (callback: Callback): Middleware =>
65+ fluent(() => arrayPush(callbacks, callback));
66+
4067 const willSetContentCallbacks: WillSetContentCallback[] = [];
4168 const willSetTablesCallbacks: WillSetTablesCallback[] = [];
4269 const willSetTableCallbacks: WillSetTableCallback[] = [];
@@ -52,106 +79,50 @@ export const createMiddleware = getCreateFunction(
5279 const willDelValueCallbacks: WillDelValueCallback[] = [];
5380 const willApplyChangesCallbacks: WillApplyChangesCallback[] = [];
5481
55- const willSetContent = (
56- content: Content,
57- ): Content | undefined =>
58- arrayReduce(
59- willSetContentCallbacks,
60- (current, callback) =>
61- isUndefined(current)
62- ? current
63- : callback(current as Content),
64- content as Content | undefined,
65- );
82+ const willSetContent = (content: Content): Content | undefined =>
83+ reduceCallbacks(willSetContentCallbacks, content);
6684
6785 const willSetTables = (tables: Tables): Tables | undefined =>
68- arrayReduce(
69- willSetTablesCallbacks,
70- (current, callback) =>
71- isUndefined(current) ? current : callback(current as Tables),
72- tables as Tables | undefined,
73- );
86+ reduceCallbacks(willSetTablesCallbacks, tables);
7487
7588 const willSetTable = (tableId: Id, table: Table): Table | undefined =>
76- arrayReduce(
77- willSetTableCallbacks,
78- (current, callback) =>
79- isUndefined(current) ? current : callback(tableId, current as Table),
80- table as Table | undefined,
81- );
89+ reduceCallbacks(willSetTableCallbacks, table, tableId);
8290
8391 const willSetRow = (tableId: Id, rowId: Id, row: Row): Row | undefined =>
84- arrayReduce(
85- willSetRowCallbacks,
86- (current, callback) =>
87- isUndefined(current)
88- ? current
89- : callback(tableId, rowId, current as Row),
90- row as Row | undefined,
91- );
92+ reduceCallbacks(willSetRowCallbacks, row, tableId, rowId);
9293
9394 const willSetCell = (
9495 tableId: Id,
9596 rowId: Id,
9697 cellId: Id,
9798 cell: Cell,
9899 ): CellOrUndefined =>
99- arrayReduce(
100- willSetCellCallbacks,
101- (current, callback) =>
102- isUndefined(current)
103- ? current
104- : callback(tableId, rowId, cellId, current as Cell),
105- cell as CellOrUndefined,
106- );
100+ reduceCallbacks(willSetCellCallbacks, cell, tableId, rowId, cellId);
107101
108102 const willSetValues = (values: Values): Values | undefined =>
109- arrayReduce(
110- willSetValuesCallbacks,
111- (current, callback) =>
112- isUndefined(current) ? current : callback(current as Values),
113- values as Values | undefined,
114- );
103+ reduceCallbacks(willSetValuesCallbacks, values);
115104
116105 const willSetValue = (valueId: Id, value: Value): ValueOrUndefined =>
117- arrayReduce(
118- willSetValueCallbacks,
119- (current, callback) =>
120- isUndefined(current) ? current : callback(valueId, current as Value),
121- value as ValueOrUndefined,
122- );
106+ reduceCallbacks(willSetValueCallbacks, value, valueId);
123107
124- const willDelTables = (): boolean =>
125- arrayEvery(willDelTablesCallbacks, (callback) => callback());
108+ const willDelTables = (): boolean => everyCallback(willDelTablesCallbacks);
126109
127110 const willDelTable = (tableId: Id): boolean =>
128- arrayEvery (willDelTableCallbacks, (callback) => callback( tableId) );
111+ everyCallback (willDelTableCallbacks, tableId);
129112
130113 const willDelRow = (tableId: Id, rowId: Id): boolean =>
131- arrayEvery (willDelRowCallbacks, (callback) => callback( tableId, rowId) );
114+ everyCallback (willDelRowCallbacks, tableId, rowId);
132115
133116 const willDelCell = (tableId: Id, rowId: Id, cellId: Id): boolean =>
134- arrayEvery(willDelCellCallbacks, (callback) =>
135- callback(tableId, rowId, cellId),
136- );
117+ everyCallback(willDelCellCallbacks, tableId, rowId, cellId);
137118
138- const willDelValues = (): boolean =>
139- arrayEvery(willDelValuesCallbacks, (callback) => callback());
119+ const willDelValues = (): boolean => everyCallback(willDelValuesCallbacks);
140120
141121 const willDelValue = (valueId: Id): boolean =>
142- arrayEvery (willDelValueCallbacks, (callback) => callback( valueId) );
122+ everyCallback (willDelValueCallbacks, valueId);
143123
144- const willApplyChanges = (
145- changes: Changes,
146- ): Changes | undefined =>
147- arrayReduce(
148- willApplyChangesCallbacks,
149- (current, callback) =>
150- isUndefined(current)
151- ? current
152- : callback(current as Changes),
153- changes as Changes | undefined,
154- );
124+ const willApplyChanges = (changes: Changes): Changes | undefined =>
125+ reduceCallbacks(willApplyChangesCallbacks, changes);
155126
156127 (store as any).setWillCallbacks(
157128 willSetContent,
@@ -172,66 +143,20 @@ export const createMiddleware = getCreateFunction(
172143
173144 const getStore = (): Store => store;
174145
175- const fluent = (actions: () => void): Middleware => {
176- actions();
177- return middleware;
178- };
179-
180- const addWillSetContentCallback = (
181- callback: WillSetContentCallback,
182- ): Middleware =>
183- fluent(() => arrayPush(willSetContentCallbacks, callback));
184-
185- const addWillSetTablesCallback = (
186- callback: WillSetTablesCallback,
187- ): Middleware => fluent(() => arrayPush(willSetTablesCallbacks, callback));
188-
189- const addWillSetTableCallback = (
190- callback: WillSetTableCallback,
191- ): Middleware => fluent(() => arrayPush(willSetTableCallbacks, callback));
192-
193- const addWillSetRowCallback = (callback: WillSetRowCallback): Middleware =>
194- fluent(() => arrayPush(willSetRowCallbacks, callback));
195-
196- const addWillSetCellCallback = (
197- callback: WillSetCellCallback,
198- ): Middleware => fluent(() => arrayPush(willSetCellCallbacks, callback));
199-
200- const addWillSetValuesCallback = (
201- callback: WillSetValuesCallback,
202- ): Middleware => fluent(() => arrayPush(willSetValuesCallbacks, callback));
203-
204- const addWillSetValueCallback = (
205- callback: WillSetValueCallback,
206- ): Middleware => fluent(() => arrayPush(willSetValueCallbacks, callback));
207-
208- const addWillDelTablesCallback = (
209- callback: WillDelTablesCallback,
210- ): Middleware => fluent(() => arrayPush(willDelTablesCallbacks, callback));
211-
212- const addWillDelTableCallback = (
213- callback: WillDelTableCallback,
214- ): Middleware => fluent(() => arrayPush(willDelTableCallbacks, callback));
215-
216- const addWillDelRowCallback = (callback: WillDelRowCallback): Middleware =>
217- fluent(() => arrayPush(willDelRowCallbacks, callback));
218-
219- const addWillDelCellCallback = (
220- callback: WillDelCellCallback,
221- ): Middleware => fluent(() => arrayPush(willDelCellCallbacks, callback));
222-
223- const addWillDelValuesCallback = (
224- callback: WillDelValuesCallback,
225- ): Middleware => fluent(() => arrayPush(willDelValuesCallbacks, callback));
226-
227- const addWillDelValueCallback = (
228- callback: WillDelValueCallback,
229- ): Middleware => fluent(() => arrayPush(willDelValueCallbacks, callback));
230-
231- const addWillApplyChangesCallback = (
232- callback: WillApplyChangesCallback,
233- ): Middleware =>
234- fluent(() => arrayPush(willApplyChangesCallbacks, callback));
146+ const addWillSetContentCallback = addCallback(willSetContentCallbacks);
147+ const addWillSetTablesCallback = addCallback(willSetTablesCallbacks);
148+ const addWillSetTableCallback = addCallback(willSetTableCallbacks);
149+ const addWillSetRowCallback = addCallback(willSetRowCallbacks);
150+ const addWillSetCellCallback = addCallback(willSetCellCallbacks);
151+ const addWillSetValuesCallback = addCallback(willSetValuesCallbacks);
152+ const addWillSetValueCallback = addCallback(willSetValueCallbacks);
153+ const addWillDelTablesCallback = addCallback(willDelTablesCallbacks);
154+ const addWillDelTableCallback = addCallback(willDelTableCallbacks);
155+ const addWillDelRowCallback = addCallback(willDelRowCallbacks);
156+ const addWillDelCellCallback = addCallback(willDelCellCallbacks);
157+ const addWillDelValuesCallback = addCallback(willDelValuesCallbacks);
158+ const addWillDelValueCallback = addCallback(willDelValueCallbacks);
159+ const addWillApplyChangesCallback = addCallback(willApplyChangesCallbacks);
235160
236161 const destroy = (): void => {};
237162
0 commit comments