From 7dc858aee27f561d1c01c296aa3e561bb72b3ec1 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Fri, 11 Sep 2020 16:59:29 -0400 Subject: [PATCH] Fix racing condition --- .../data-model/field-detail/field-detail.vue | 9 ++++--- .../routes/data-model/field-detail/store.ts | 24 ++++++++++++------- .../routes/data-model/fields/fields.vue | 2 +- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/src/modules/settings/routes/data-model/field-detail/field-detail.vue b/app/src/modules/settings/routes/data-model/field-detail/field-detail.vue index 6b4a84561f..1cf0bd65f5 100644 --- a/app/src/modules/settings/routes/data-model/field-detail/field-detail.vue +++ b/app/src/modules/settings/routes/data-model/field-detail/field-detail.vue @@ -204,7 +204,8 @@ export default defineComponent({ isEmpty(state.relations[0].one_field) || isEmpty(state.relations[1].many_collection) || isEmpty(state.relations[1].many_field) || - isEmpty(state.relations[1].one_collection) + isEmpty(state.relations[1].one_collection) || + isEmpty(state.relations[1].one_primary) ); } @@ -229,13 +230,15 @@ export default defineComponent({ } await Promise.all( - state.newCollections.map((newCollection: Partial) => { + state.newCollections.map((newCollection: Partial & { $type: string }) => { + delete newCollection.$type; return api.post(`/collections`, newCollection); }) ); await Promise.all( - state.newFields.map((newField: Partial) => { + state.newFields.map((newField: Partial & { $type: string }) => { + delete newField.$type; return api.post(`/fields/${newField.collection}`, newField); }) ); diff --git a/app/src/modules/settings/routes/data-model/field-detail/store.ts b/app/src/modules/settings/routes/data-model/field-detail/store.ts index 5db0dd1294..d194838ec1 100644 --- a/app/src/modules/settings/routes/data-model/field-detail/store.ts +++ b/app/src/modules/settings/routes/data-model/field-detail/store.ts @@ -316,16 +316,13 @@ function initLocalStore( delete state.fieldData.schema; delete state.fieldData.type; - const syncNewCollectionsM2M = throttle(( - [junctionCollection, manyCurrent, manyRelated, relatedCollection], - [oldJunctionCollection, oldManyCurrent, oldManyRelated, oldRelatedCollection] - ) => { - state.newCollections = state.newCollections.filter((col: any) => [junctionCollection, relatedCollection, oldJunctionCollection, oldRelatedCollection].includes(col.collection) === false); - state.newFields = state.newFields - .filter((field: Partial) => [manyCurrent, manyRelated, relatedCollection, oldManyCurrent, oldManyRelated, oldRelatedCollection].includes(field.field) === false); + const syncNewCollectionsM2M = throttle(([junctionCollection, manyCurrent, manyRelated, relatedCollection]) => { + state.newCollections = state.newCollections.filter((col: any) => ['junction', 'related'].includes(col.$type) === false); + state.newFields = state.newFields.filter((field: Partial & { $type: string }) => ['manyCurrent', 'manyRelated'].includes(field.$type) === false); if (collectionExists(junctionCollection) === false) { state.newCollections.push({ + $type: 'junction', collection: junctionCollection, fields: [ { @@ -344,24 +341,33 @@ function initLocalStore( if (fieldExists(junctionCollection, manyCurrent) === false) { state.newFields.push({ + $type: 'manyCurrent', collection: junctionCollection, field: manyCurrent, - type: fieldsStore.getPrimaryKeyFieldForCollection(junctionCollection)?.type, + type: collectionExists(junctionCollection) ? fieldsStore.getPrimaryKeyFieldForCollection(junctionCollection)?.type : 'integer', schema: {}, + meta: { + hidden: true, + } }); } if (fieldExists(junctionCollection, manyRelated) === false) { state.newFields.push({ + $type: 'manyRelated', collection: junctionCollection, field: manyRelated, type: collectionExists(relatedCollection) ? fieldsStore.getPrimaryKeyFieldForCollection(relatedCollection)?.type : 'integer', schema: {}, + meta: { + hidden: true, + } }); } if (collectionExists(relatedCollection) === false) { state.newCollections.push({ + $type: 'related', collection: relatedCollection, fields: [ { @@ -377,6 +383,8 @@ function initLocalStore( ] }) } + + console.log(state.newCollections, state.newFields); }, 50); if (!isExisting) { diff --git a/app/src/modules/settings/routes/data-model/fields/fields.vue b/app/src/modules/settings/routes/data-model/fields/fields.vue index f3db2f5af5..d5e9acd597 100644 --- a/app/src/modules/settings/routes/data-model/fields/fields.vue +++ b/app/src/modules/settings/routes/data-model/fields/fields.vue @@ -1,5 +1,5 @@