@aglyn/plugins-data 1.0.0-beta.234 → 1.0.0-beta.236
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/package.json +10 -10
- package/src/lib/components/dataset-record-filter.d.ts +10 -1
- package/src/lib/components/dataset-record-filter.js +12 -1
- package/src/lib/components/dataset-record-filter.js.map +1 -1
- package/src/lib/components/dataset-schema-dialog.component.js +2 -11
- package/src/lib/components/dataset-schema-dialog.component.js.map +1 -1
- package/src/lib/components/host-datasets-card.component.js +19 -32
- package/src/lib/components/host-datasets-card.component.js.map +1 -1
- package/src/lib/model/dataset-model-core.d.ts +299 -0
- package/src/lib/model/dataset-model-core.js +511 -0
- package/src/lib/model/dataset-model-core.js.map +1 -0
- package/src/lib/model/dataset-models.d.ts +2 -231
- package/src/lib/model/dataset-models.js +16 -392
- package/src/lib/model/dataset-models.js.map +1 -1
- package/src/lib/model/dataset-record-delete-plan.d.ts +60 -0
- package/src/lib/model/dataset-record-delete-plan.js +82 -0
- package/src/lib/model/dataset-record-delete-plan.js.map +1 -0
- package/src/lib/model/datasets.d.ts +2 -39
- package/src/lib/model/datasets.js +5 -77
- package/src/lib/model/datasets.js.map +1 -1
- package/src/lib/server/datasets-route.d.ts +3 -0
- package/src/lib/server/datasets-route.js +146 -3
- package/src/lib/server/datasets-route.js.map +1 -1
|
@@ -40,6 +40,7 @@ import { DatasetRecordDialog } from "./dataset-record-dialog.component.js";
|
|
|
40
40
|
import { datasetRecordFilter, planRecordQuery, recordColumn } from "./dataset-record-filter.js";
|
|
41
41
|
import { coerceDocumentValues, datasetIntegrityUpdate, datasetValueToInput, effectiveDatasetModel, formatDatasetValue, modelFromFieldEntries, validateDocument } from "../model/dataset-models.js";
|
|
42
42
|
import { fillRecordAddresses } from "../record-pages/record-pages.js";
|
|
43
|
+
import { planReferenceFixups, referencingFieldIds, restrictedDeleteMessage } from "../model/dataset-record-delete-plan.js";
|
|
43
44
|
import { datasetDisplayName, parseDatasetFieldEntries } from "../model/datasets.js";
|
|
44
45
|
import { datasetTransferResourceKey } from "../transfer/dataset-transfer-key.js";
|
|
45
46
|
/**
|
|
@@ -861,11 +862,7 @@ export function newDatasetSharingNote(siteOnly) {
|
|
|
861
862
|
* is not consulted; only a server route could close that.
|
|
862
863
|
*/ for (const other of datasets){
|
|
863
864
|
const otherModel = effectiveDatasetModel(other);
|
|
864
|
-
|
|
865
|
-
var _otherModel_fields_fieldId, _otherModel_fields_fieldId_reference, _otherModel_fields_fieldId1;
|
|
866
|
-
return ((_otherModel_fields_fieldId = otherModel.fields[fieldId]) == null ? void 0 : _otherModel_fields_fieldId.type) === 'reference' && ((_otherModel_fields_fieldId1 = otherModel.fields[fieldId]) == null ? void 0 : (_otherModel_fields_fieldId_reference = _otherModel_fields_fieldId1.reference) == null ? void 0 : _otherModel_fields_fieldId_reference.datasetId) === selected.$id;
|
|
867
|
-
});
|
|
868
|
-
if (!referencing.length) continue;
|
|
865
|
+
if (!referencingFieldIds(otherModel, selected.$id).length) continue;
|
|
869
866
|
let snapshot;
|
|
870
867
|
try {
|
|
871
868
|
snapshot = await getDocs(query(collection(firestore, dataScope[0], dataScope[1], 'datasets', other.$id, 'records'), where('referencedIds', 'array-contains', record.$id)));
|
|
@@ -874,18 +871,16 @@ export function newDatasetSharingNote(siteOnly) {
|
|
|
874
871
|
variant: 'error'
|
|
875
872
|
});
|
|
876
873
|
}
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
if (restricted) {
|
|
888
|
-
return void enqueueSnackbar(`Cannot delete: referenced by ${hits.length} document` + `${hits.length === 1 ? '' : 's'} in "${datasetDisplayName(other)}"`, {
|
|
874
|
+
// The verdict is shared with `/api/orgs/datasets` `delete-record`
|
|
875
|
+
// (`planReferenceFixups`): the per-field test keeps the query EXACT,
|
|
876
|
+
// since `referencedIds` is the union across every reference field.
|
|
877
|
+
const plan = planReferenceFixups(otherModel, selected.$id, record.$id, snapshot.docs.map((docSnapshot)=>({
|
|
878
|
+
id: docSnapshot.id,
|
|
879
|
+
values: docSnapshot.get('values')
|
|
880
|
+
})));
|
|
881
|
+
if (plan.kind === 'none') continue;
|
|
882
|
+
if (plan.kind === 'restricted') {
|
|
883
|
+
return void enqueueSnackbar(restrictedDeleteMessage(plan.holders, datasetDisplayName(other)), {
|
|
889
884
|
variant: 'warning',
|
|
890
885
|
persist: false
|
|
891
886
|
});
|
|
@@ -893,22 +888,14 @@ export function newDatasetSharingNote(siteOnly) {
|
|
|
893
888
|
// Chunked under Firestore's 500-writes-per-batch cap. The query is no
|
|
894
889
|
// longer bounded by a page size, so the number of holders is whatever
|
|
895
890
|
// the collection really holds.
|
|
896
|
-
for(let start = 0; start <
|
|
891
|
+
for(let start = 0; start < plan.updates.length; start += 400){
|
|
897
892
|
const batch = writeBatch(firestore);
|
|
898
|
-
for (const
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
values[fieldId] = stored.filter((id)=>id !== record.$id);
|
|
905
|
-
} else if (stored === record.$id) {
|
|
906
|
-
delete values[fieldId];
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
batch.update(hit.ref, _extends({
|
|
910
|
-
values
|
|
911
|
-
}, datasetIntegrityUpdate(otherModel, values, deleteField())));
|
|
893
|
+
for (const update of plan.updates.slice(start, start + 400)){
|
|
894
|
+
const holder = snapshot.docs.find((docSnapshot)=>docSnapshot.id === update.id);
|
|
895
|
+
if (!holder) continue;
|
|
896
|
+
batch.update(holder.ref, _extends({
|
|
897
|
+
values: update.values
|
|
898
|
+
}, datasetIntegrityUpdate(otherModel, update.values, deleteField())));
|
|
912
899
|
}
|
|
913
900
|
await batch.commit();
|
|
914
901
|
}
|