@knotx/data 0.2.10 → 0.2.12

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.cjs CHANGED
@@ -115,6 +115,9 @@ class DataManager {
115
115
  return this.operations$.asObservable();
116
116
  }
117
117
  dispatch(operation) {
118
+ if (operation.type === "batch" && operation.operations.length === 0) {
119
+ return;
120
+ }
118
121
  this.operations$.next(operation);
119
122
  }
120
123
  getDraftDataList(draftId) {
@@ -180,9 +183,16 @@ class DataManager {
180
183
  break;
181
184
  }
182
185
  case "draftOperation": {
183
- const draftDataMap = this.drafts$.value.get(operation.draftId);
184
- if (draftDataMap) {
185
- this.applyOperation(new Proxy(draftDataMap.value, {
186
+ let draftDataMap$ = this.drafts$.value.get(operation.draftId);
187
+ if (!draftDataMap$ && operation.isAutoStart) {
188
+ draftDataMap$ = new rxjs.BehaviorSubject(/* @__PURE__ */ new Map());
189
+ this.drafts$.next(this.drafts$.value.set(operation.draftId, draftDataMap$));
190
+ if (typeof operation.isAutoStart !== "object" || operation.isAutoStart.isSilent !== false) {
191
+ this.currentDraftDataMap$.next(draftDataMap$.value);
192
+ }
193
+ }
194
+ if (draftDataMap$) {
195
+ this.applyOperation(new Proxy(draftDataMap$.value, {
186
196
  get(target, prop) {
187
197
  const draft = target;
188
198
  switch (prop) {
@@ -202,17 +212,17 @@ class DataManager {
202
212
  }
203
213
  }
204
214
  }), operation.operation);
205
- if (this.currentDraftDataMap$.value === draftDataMap.value) {
206
- this.currentDraftDataMap$.next(draftDataMap.value);
215
+ if (this.currentDraftDataMap$.value === draftDataMap$.value) {
216
+ this.currentDraftDataMap$.next(draftDataMap$.value);
207
217
  }
208
218
  }
209
219
  break;
210
220
  }
211
221
  case "commitDraft": {
212
- const draftData = this.drafts$.value.get(operation.draftId);
213
- if (draftData) {
222
+ const draftDataMap$ = this.drafts$.value.get(operation.draftId);
223
+ if (draftDataMap$) {
214
224
  const operations = [];
215
- draftData.value.forEach((data, id) => {
225
+ draftDataMap$.value.forEach((data, id) => {
216
226
  if (data === false) {
217
227
  if (dataMap.has(id)) {
218
228
  operations.push({ type: "remove", id });
@@ -231,12 +241,10 @@ class DataManager {
231
241
  if (operation.isDryRun) {
232
242
  return this.applyOperation(dataMap, { type: "batch", operations });
233
243
  }
234
- if (operations.length > 0) {
235
- this.dispatch({ type: "batch", operations });
236
- }
244
+ this.dispatch({ type: "batch", operations });
237
245
  this.drafts$.value.delete(operation.draftId);
238
246
  this.drafts$.next(this.drafts$.value);
239
- if (this.currentDraftDataMap$.value === draftData.value) {
247
+ if (this.currentDraftDataMap$.value === draftDataMap$.value) {
240
248
  this.currentDraftDataMap$.next(void 0);
241
249
  }
242
250
  }
@@ -245,8 +253,8 @@ class DataManager {
245
253
  case "discardDraft": {
246
254
  this.drafts$.value.delete(operation.draftId);
247
255
  this.drafts$.next(this.drafts$.value);
248
- const draftData = this.drafts$.value.get(operation.draftId);
249
- if (this.currentDraftDataMap$.value === (draftData == null ? void 0 : draftData.value)) {
256
+ const draftDataMap$ = this.drafts$.value.get(operation.draftId);
257
+ if (this.currentDraftDataMap$.value === (draftDataMap$ == null ? void 0 : draftDataMap$.value)) {
250
258
  this.currentDraftDataMap$.next(void 0);
251
259
  }
252
260
  break;
package/dist/index.d.cts CHANGED
@@ -61,6 +61,11 @@ interface DataDraftOperation<T extends IData = IData> {
61
61
  operation: Exclude<DataOperation<T>, {
62
62
  draftId: string;
63
63
  }>;
64
+ /**
65
+ * 是否自动启动草稿,如果为 true,则当草稿不存在时,会自动创建草稿
66
+ * 如果为对象,则自动启动草稿,并透传对应参数
67
+ */
68
+ isAutoStart?: boolean | Omit<DataStartDraftOperation<T>, 'type' | 'draftId'>;
64
69
  }
65
70
  type DataOperation<T extends IData = IData> = DataAddOperation<T> | DataRemoveOperation<T> | DataUpdateOperation<T> | DataBatchOperation<T> | DataStartDraftOperation<T> | DataCommitDraftOperation<T> | DataDiscardDraftOperation<T> | DataDraftOperation<T>;
66
71
  declare class DataManager<TData extends IData = IData, TTag extends string = any> {
package/dist/index.d.mts CHANGED
@@ -61,6 +61,11 @@ interface DataDraftOperation<T extends IData = IData> {
61
61
  operation: Exclude<DataOperation<T>, {
62
62
  draftId: string;
63
63
  }>;
64
+ /**
65
+ * 是否自动启动草稿,如果为 true,则当草稿不存在时,会自动创建草稿
66
+ * 如果为对象,则自动启动草稿,并透传对应参数
67
+ */
68
+ isAutoStart?: boolean | Omit<DataStartDraftOperation<T>, 'type' | 'draftId'>;
64
69
  }
65
70
  type DataOperation<T extends IData = IData> = DataAddOperation<T> | DataRemoveOperation<T> | DataUpdateOperation<T> | DataBatchOperation<T> | DataStartDraftOperation<T> | DataCommitDraftOperation<T> | DataDiscardDraftOperation<T> | DataDraftOperation<T>;
66
71
  declare class DataManager<TData extends IData = IData, TTag extends string = any> {
package/dist/index.d.ts CHANGED
@@ -61,6 +61,11 @@ interface DataDraftOperation<T extends IData = IData> {
61
61
  operation: Exclude<DataOperation<T>, {
62
62
  draftId: string;
63
63
  }>;
64
+ /**
65
+ * 是否自动启动草稿,如果为 true,则当草稿不存在时,会自动创建草稿
66
+ * 如果为对象,则自动启动草稿,并透传对应参数
67
+ */
68
+ isAutoStart?: boolean | Omit<DataStartDraftOperation<T>, 'type' | 'draftId'>;
64
69
  }
65
70
  type DataOperation<T extends IData = IData> = DataAddOperation<T> | DataRemoveOperation<T> | DataUpdateOperation<T> | DataBatchOperation<T> | DataStartDraftOperation<T> | DataCommitDraftOperation<T> | DataDiscardDraftOperation<T> | DataDraftOperation<T>;
66
71
  declare class DataManager<TData extends IData = IData, TTag extends string = any> {
package/dist/index.js CHANGED
@@ -113,6 +113,9 @@ class DataManager {
113
113
  return this.operations$.asObservable();
114
114
  }
115
115
  dispatch(operation) {
116
+ if (operation.type === "batch" && operation.operations.length === 0) {
117
+ return;
118
+ }
116
119
  this.operations$.next(operation);
117
120
  }
118
121
  getDraftDataList(draftId) {
@@ -178,9 +181,16 @@ class DataManager {
178
181
  break;
179
182
  }
180
183
  case "draftOperation": {
181
- const draftDataMap = this.drafts$.value.get(operation.draftId);
182
- if (draftDataMap) {
183
- this.applyOperation(new Proxy(draftDataMap.value, {
184
+ let draftDataMap$ = this.drafts$.value.get(operation.draftId);
185
+ if (!draftDataMap$ && operation.isAutoStart) {
186
+ draftDataMap$ = new BehaviorSubject(/* @__PURE__ */ new Map());
187
+ this.drafts$.next(this.drafts$.value.set(operation.draftId, draftDataMap$));
188
+ if (typeof operation.isAutoStart !== "object" || operation.isAutoStart.isSilent !== false) {
189
+ this.currentDraftDataMap$.next(draftDataMap$.value);
190
+ }
191
+ }
192
+ if (draftDataMap$) {
193
+ this.applyOperation(new Proxy(draftDataMap$.value, {
184
194
  get(target, prop) {
185
195
  const draft = target;
186
196
  switch (prop) {
@@ -200,17 +210,17 @@ class DataManager {
200
210
  }
201
211
  }
202
212
  }), operation.operation);
203
- if (this.currentDraftDataMap$.value === draftDataMap.value) {
204
- this.currentDraftDataMap$.next(draftDataMap.value);
213
+ if (this.currentDraftDataMap$.value === draftDataMap$.value) {
214
+ this.currentDraftDataMap$.next(draftDataMap$.value);
205
215
  }
206
216
  }
207
217
  break;
208
218
  }
209
219
  case "commitDraft": {
210
- const draftData = this.drafts$.value.get(operation.draftId);
211
- if (draftData) {
220
+ const draftDataMap$ = this.drafts$.value.get(operation.draftId);
221
+ if (draftDataMap$) {
212
222
  const operations = [];
213
- draftData.value.forEach((data, id) => {
223
+ draftDataMap$.value.forEach((data, id) => {
214
224
  if (data === false) {
215
225
  if (dataMap.has(id)) {
216
226
  operations.push({ type: "remove", id });
@@ -229,12 +239,10 @@ class DataManager {
229
239
  if (operation.isDryRun) {
230
240
  return this.applyOperation(dataMap, { type: "batch", operations });
231
241
  }
232
- if (operations.length > 0) {
233
- this.dispatch({ type: "batch", operations });
234
- }
242
+ this.dispatch({ type: "batch", operations });
235
243
  this.drafts$.value.delete(operation.draftId);
236
244
  this.drafts$.next(this.drafts$.value);
237
- if (this.currentDraftDataMap$.value === draftData.value) {
245
+ if (this.currentDraftDataMap$.value === draftDataMap$.value) {
238
246
  this.currentDraftDataMap$.next(void 0);
239
247
  }
240
248
  }
@@ -243,8 +251,8 @@ class DataManager {
243
251
  case "discardDraft": {
244
252
  this.drafts$.value.delete(operation.draftId);
245
253
  this.drafts$.next(this.drafts$.value);
246
- const draftData = this.drafts$.value.get(operation.draftId);
247
- if (this.currentDraftDataMap$.value === (draftData == null ? void 0 : draftData.value)) {
254
+ const draftDataMap$ = this.drafts$.value.get(operation.draftId);
255
+ if (this.currentDraftDataMap$.value === (draftDataMap$ == null ? void 0 : draftDataMap$.value)) {
248
256
  this.currentDraftDataMap$.next(void 0);
249
257
  }
250
258
  break;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knotx/data",
3
- "version": "0.2.10",
3
+ "version": "0.2.12",
4
4
  "description": "Data for Knotx",
5
5
  "author": "boenfu",
6
6
  "license": "MIT",
@@ -33,9 +33,9 @@
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/lodash-es": "^4.17.12",
36
- "@knotx/build-config": "0.2.10",
37
- "@knotx/eslint-config": "0.2.10",
38
- "@knotx/typescript-config": "0.2.10"
36
+ "@knotx/build-config": "0.2.12",
37
+ "@knotx/eslint-config": "0.2.12",
38
+ "@knotx/typescript-config": "0.2.12"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "unbuild",