@overmap-ai/core 1.0.71-fields.0 → 1.0.71-fields.10

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.
@@ -2104,17 +2104,6 @@ const selectFormRevisionsOfForm = restructureCreateSelectorWithArgs(
2104
2104
  }
2105
2105
  )
2106
2106
  );
2107
- const selectLatestFormRevisionByForm = createSelector([selectFormRevisionMapping], (revisions) => {
2108
- const latestRevisions = {};
2109
- for (const revision of Object.values(revisions)) {
2110
- const formId = revision.form;
2111
- const currentLatestRevision = latestRevisions[formId];
2112
- if (!currentLatestRevision || currentLatestRevision.revision < revision.revision) {
2113
- latestRevisions[formId] = revision;
2114
- }
2115
- }
2116
- return latestRevisions;
2117
- });
2118
2107
  const formRevisionReducer = formRevisionsSlice.reducer;
2119
2108
  const formAdapter = createModelAdapter((form) => form.offline_id);
2120
2109
  const initialState$n = formAdapter.getInitialState({});
@@ -2139,6 +2128,9 @@ const selectFormMapping = (state) => {
2139
2128
  const selectForms = createSelector([selectFormMapping], (formsMapping) => {
2140
2129
  return Object.values(formsMapping);
2141
2130
  });
2131
+ const selectFormById = (formId) => (state) => {
2132
+ return state.formReducer.instances[formId];
2133
+ };
2142
2134
  const selectFilteredForms = restructureCreateSelectorWithArgs(
2143
2135
  createSelector(
2144
2136
  [
@@ -2164,15 +2156,6 @@ const selectFilteredForms = restructureCreateSelectorWithArgs(
2164
2156
  { memoizeOptions: { equalityCheck: shallowEqual } }
2165
2157
  )
2166
2158
  );
2167
- const selectFormById = (formId) => (state) => {
2168
- return state.formReducer.instances[formId];
2169
- };
2170
- const selectFormsCount = createSelector([selectFormMapping], (formsMapping) => {
2171
- return Object.keys(formsMapping).length;
2172
- });
2173
- const selectGeneralFormCount = createSelector([selectFormMapping], (formsMapping) => {
2174
- return Object.values(formsMapping).length;
2175
- });
2176
2159
  const submissionAdapter = createModelAdapter((submission) => submission.offline_id);
2177
2160
  const initialState$m = submissionAdapter.getInitialState({});
2178
2161
  const formSubmissionSlice = createSlice({
@@ -2234,43 +2217,6 @@ const selectFormSubmissionsOfForm = restructureCreateSelectorWithArgs(
2234
2217
  }
2235
2218
  )
2236
2219
  );
2237
- const selectFormSubmissionsByFormRevisions = createSelector([selectFormRevisionMapping, selectFormSubmissions], (revisions, submissions) => {
2238
- var _a2;
2239
- const submissionMapping = {};
2240
- for (const revisionId in revisions) {
2241
- submissionMapping[revisionId] = [];
2242
- }
2243
- for (const submission of submissions) {
2244
- (_a2 = submissionMapping[submission.form_revision]) == null ? void 0 : _a2.push(submission);
2245
- }
2246
- return submissionMapping;
2247
- });
2248
- const selectSortedFormSubmissionsOfForm = restructureCreateSelectorWithArgs(
2249
- createSelector(
2250
- [
2251
- selectFormRevisionMapping,
2252
- selectFormSubmissionsByFormRevisions,
2253
- (_state, formId) => formId
2254
- ],
2255
- (revisionsMapping, submissionsByRevision, formId) => {
2256
- const submissionsByFormRevisions = {};
2257
- for (const revisionId in revisionsMapping) {
2258
- const revision = revisionsMapping[revisionId];
2259
- const submissionsOfRevision = submissionsByRevision[revisionId];
2260
- if (revision && submissionsOfRevision && revision.form === formId) {
2261
- submissionsByFormRevisions[revisionId] = submissionsOfRevision.sort(
2262
- (a, b) => a.submitted_at < b.submitted_at ? -1 : 1
2263
- );
2264
- }
2265
- }
2266
- return Object.entries(submissionsByFormRevisions).sort((a, b) => {
2267
- const aRevision = revisionsMapping[a[0]];
2268
- const bRevision = revisionsMapping[b[0]];
2269
- return formRevisionSortFn(aRevision, bRevision);
2270
- }).map(([_revisionId, submissions]) => submissions).flat();
2271
- }
2272
- )
2273
- );
2274
2220
  const selectFormSubmissionsOfIssue = restructureCreateSelectorWithArgs(
2275
2221
  createSelector(
2276
2222
  [selectFormSubmissions, (_state, issueId) => issueId],
@@ -3038,56 +2984,14 @@ const selectIssueAssociationsOfAsset = restructureCreateSelectorWithArgs(
3038
2984
  )
3039
2985
  );
3040
2986
  const issueAssociationReducer = issueAssociationSlice.reducer;
3041
- const issueTypeFieldsAdapter = createModelAdapter((fields) => fields.offline_id);
3042
- const initialState$7 = issueTypeFieldsAdapter.getInitialState({});
3043
- const issueTypeFieldsSlice = createSlice({
3044
- name: "issueTypeFields",
3045
- initialState: initialState$7,
3046
- extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$7)),
3047
- reducers: {
3048
- initializeIssueTypeFields: issueTypeFieldsAdapter.initialize,
3049
- addIssueTypeFields: issueTypeFieldsAdapter.addOne,
3050
- addIssueTypeFieldsMany: issueTypeFieldsAdapter.addMany,
3051
- setIssueTypeFields: issueTypeFieldsAdapter.setOne,
3052
- setIssueTypeFieldsMany: issueTypeFieldsAdapter.setMany,
3053
- updateIssueTypeFields: issueTypeFieldsAdapter.updateOne,
3054
- updateIssueTypeFieldsMany: issueTypeFieldsAdapter.updateMany,
3055
- deleteIssueTypeFields: issueTypeFieldsAdapter.deleteOne,
3056
- deleteIssueTypeFieldsMany: issueTypeFieldsAdapter.deleteMany
3057
- }
3058
- });
3059
- const {
3060
- initializeIssueTypeFields,
3061
- addIssueTypeFields,
3062
- addIssueTypeFieldsMany,
3063
- setIssueTypeFields,
3064
- setIssueTypeFieldsMany,
3065
- updateIssueTypeFields,
3066
- updateIssueTypeFieldsMany,
3067
- deleteIssueTypeFields,
3068
- deleteIssueTypeFieldsMany
3069
- } = issueTypeFieldsSlice.actions;
3070
- const selectIssueTypeFieldsMapping = (state) => state.issueTypeFieldsReducer.instances;
3071
- const selectIssueTypeFields = createSelector([selectIssueTypeFieldsMapping], (fieldsMapping) => {
3072
- return Object.values(fieldsMapping);
3073
- });
3074
- const selectIssueTypeFieldsOfIssueType = restructureCreateSelectorWithArgs(
3075
- createSelector([selectIssueTypeFields, (_state, issueTypeId) => issueTypeId], (fields, issueTypeId) => {
3076
- return fallbackToEmptyArray(fields.filter((field) => field.issue_type === issueTypeId));
3077
- })
3078
- );
3079
- const selectIssueTypeFieldsById = (fieldsId) => (state) => {
3080
- return state.issueTypeFieldsReducer.instances[fieldsId];
3081
- };
3082
- const issueTypeFieldsReducer = issueTypeFieldsSlice.reducer;
3083
2987
  const issueTypeFieldValuesAdapter = createModelAdapter(
3084
2988
  (fieldValues) => fieldValues.offline_id
3085
2989
  );
3086
- const initialState$6 = issueTypeFieldValuesAdapter.getInitialState({});
2990
+ const initialState$7 = issueTypeFieldValuesAdapter.getInitialState({});
3087
2991
  const issueTypeFieldValuesSlice = createSlice({
3088
2992
  name: "issueTypeFieldValues",
3089
- initialState: initialState$6,
3090
- extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$6)),
2993
+ initialState: initialState$7,
2994
+ extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$7)),
3091
2995
  reducers: {
3092
2996
  initializeIssueTypeFieldValues: issueTypeFieldValuesAdapter.initialize,
3093
2997
  addIssueTypeFieldValues: issueTypeFieldValuesAdapter.addOne,
@@ -3124,6 +3028,64 @@ const selectIssueTypeFieldValuesById = (fieldValuesId) => (state) => {
3124
3028
  return state.issueTypeFieldValuesReducer.instances[fieldValuesId];
3125
3029
  };
3126
3030
  const issueTypeFieldValuesReducer = issueTypeFieldValuesSlice.reducer;
3031
+ const issueTypeFieldsAdapter = createModelAdapter((fields) => fields.offline_id);
3032
+ const initialState$6 = issueTypeFieldsAdapter.getInitialState({});
3033
+ const issueTypeFieldsSlice = createSlice({
3034
+ name: "issueTypeFields",
3035
+ initialState: initialState$6,
3036
+ extraReducers: (builder) => builder.addCase("RESET", (state) => Object.assign(state, initialState$6)),
3037
+ reducers: {
3038
+ initializeIssueTypeFields: issueTypeFieldsAdapter.initialize,
3039
+ addIssueTypeFields: issueTypeFieldsAdapter.addOne,
3040
+ addIssueTypeFieldsMany: issueTypeFieldsAdapter.addMany,
3041
+ setIssueTypeFields: issueTypeFieldsAdapter.setOne,
3042
+ setIssueTypeFieldsMany: issueTypeFieldsAdapter.setMany,
3043
+ updateIssueTypeFields: issueTypeFieldsAdapter.updateOne,
3044
+ updateIssueTypeFieldsMany: issueTypeFieldsAdapter.updateMany,
3045
+ deleteIssueTypeFields: issueTypeFieldsAdapter.deleteOne,
3046
+ deleteIssueTypeFieldsMany: issueTypeFieldsAdapter.deleteMany
3047
+ }
3048
+ });
3049
+ const {
3050
+ initializeIssueTypeFields,
3051
+ addIssueTypeFields,
3052
+ addIssueTypeFieldsMany,
3053
+ setIssueTypeFields,
3054
+ setIssueTypeFieldsMany,
3055
+ updateIssueTypeFields,
3056
+ updateIssueTypeFieldsMany,
3057
+ deleteIssueTypeFields,
3058
+ deleteIssueTypeFieldsMany
3059
+ } = issueTypeFieldsSlice.actions;
3060
+ const selectIssueTypeFieldsMapping = (state) => state.issueTypeFieldsReducer.instances;
3061
+ const selectIssueTypeFields = createSelector([selectIssueTypeFieldsMapping], (fieldsMapping) => {
3062
+ return Object.values(fieldsMapping);
3063
+ });
3064
+ const selectIssueTypeFieldsOfIssueType = restructureCreateSelectorWithArgs(
3065
+ createSelector([selectIssueTypeFields, (_state, issueTypeId) => issueTypeId], (fields, issueTypeId) => {
3066
+ return fallbackToEmptyArray(fields.filter((field) => field.issue_type === issueTypeId));
3067
+ })
3068
+ );
3069
+ const selectLatestIssueTypeFieldsOfIssueType = restructureCreateSelectorWithArgs(
3070
+ createSelector([selectIssueTypeFields, (_state, id) => id], (fields, id) => {
3071
+ return fields.filter((field) => field.issue_type === id).sort((a, b) => a.submitted_at > b.submitted_at ? -1 : 1)[0];
3072
+ })
3073
+ );
3074
+ const selectIssueTypeValuesOfIssueType = restructureCreateSelectorWithArgs(
3075
+ createSelector(
3076
+ [selectIssueTypeFields, selectIssueTypeFieldValues, (_state, id) => id],
3077
+ (fields, fieldValues, id) => {
3078
+ const fieldsIds = new Set(
3079
+ fields.filter((field) => field.issue_type === id).map((field) => field.offline_id)
3080
+ );
3081
+ return fallbackToEmptyArray(fieldValues.filter((values) => fieldsIds.has(values.fields_revision)));
3082
+ }
3083
+ )
3084
+ );
3085
+ const selectIssueTypeFieldsById = (fieldsId) => (state) => {
3086
+ return state.issueTypeFieldsReducer.instances[fieldsId];
3087
+ };
3088
+ const issueTypeFieldsReducer = issueTypeFieldsSlice.reducer;
3127
3089
  const issueTypeFieldsAttachmentAdapter = createModelAdapter(
3128
3090
  (attachment) => attachment.offline_id
3129
3091
  );
@@ -3264,6 +3226,11 @@ const selectAssetTypeFieldsOfAssetType = restructureCreateSelectorWithArgs(
3264
3226
  return fallbackToEmptyArray(fields.filter((field) => field.asset_type === assetTypeId));
3265
3227
  })
3266
3228
  );
3229
+ const selectLatestAssetTypeFieldsOfAssetType = restructureCreateSelectorWithArgs(
3230
+ createSelector([selectAssetTypeFields, (_state, id) => id], (fields, id) => {
3231
+ return fields.filter((field) => field.asset_type === id).sort((a, b) => a.submitted_at > b.submitted_at ? -1 : 1)[0];
3232
+ })
3233
+ );
3267
3234
  const selectAssetTypeFieldsById = (fieldsId) => (state) => {
3268
3235
  return state.assetTypeFieldsReducer.instances[fieldsId];
3269
3236
  };
@@ -3308,6 +3275,17 @@ const selectAssetTypeFieldValuesOfAsset = restructureCreateSelectorWithArgs(
3308
3275
  return fallbackToEmptyArray(fieldValues.filter((fieldValue) => fieldValue.asset === assetId));
3309
3276
  })
3310
3277
  );
3278
+ const selectAssetTypeValuesOfAssetType = restructureCreateSelectorWithArgs(
3279
+ createSelector(
3280
+ [selectAssetTypeFields, selectAssetTypeFieldValues, (_state, id) => id],
3281
+ (fields, fieldValues, id) => {
3282
+ const fieldsIds = new Set(
3283
+ fields.filter((field) => field.asset_type === id).map((field) => field.offline_id)
3284
+ );
3285
+ return fallbackToEmptyArray(fieldValues.filter((values) => fieldsIds.has(values.fields_revision)));
3286
+ }
3287
+ )
3288
+ );
3311
3289
  const selectAssetTypeFieldValuesById = (fieldValuesId) => (state) => {
3312
3290
  return state.assetTypeFieldValuesReducer.instances[fieldValuesId];
3313
3291
  };
@@ -5299,15 +5277,7 @@ class IssueTypeService extends BaseApiService {
5299
5277
  const promise = this.enqueueRequest({
5300
5278
  method: HttpMethod.POST,
5301
5279
  url: "/issue-types/",
5302
- // Sending only whats needed here
5303
- payload: {
5304
- offline_id: offlineIssueType.offline_id,
5305
- submitted_at: offlineIssueType.submitted_at,
5306
- icon: offlineIssueType.icon,
5307
- color: offlineIssueType.color,
5308
- name: offlineIssueType.name,
5309
- description: offlineIssueType.description
5310
- },
5280
+ payload: offlineIssueType,
5311
5281
  blockers: [],
5312
5282
  blocks: [offlineIssueType.offline_id]
5313
5283
  });
@@ -7394,6 +7364,61 @@ class FormSubmissionAttachmentService extends BaseUploadService {
7394
7364
  this.dispatch(initializeFormSubmissionAttachments(result));
7395
7365
  }
7396
7366
  }
7367
+ class FormRevisionService extends BaseUploadService {
7368
+ add(payload) {
7369
+ var _a2;
7370
+ const { store } = this.client;
7371
+ const state = store.getState();
7372
+ const createdBy = (_a2 = state.userReducer.currentUser) == null ? void 0 : _a2.id;
7373
+ const offlineFormRevision = offline({
7374
+ ...payload,
7375
+ created_by: createdBy,
7376
+ revision: "Pending",
7377
+ submitted_at: (/* @__PURE__ */ new Date()).toISOString()
7378
+ });
7379
+ this.dispatch(addFormRevision(offlineFormRevision));
7380
+ const promise = this.enqueueRequest({
7381
+ description: "Create form revision",
7382
+ method: HttpMethod.POST,
7383
+ url: "/form-revisions/",
7384
+ payload: offlineFormRevision,
7385
+ blockers: [payload.form],
7386
+ blocks: [offlineFormRevision.offline_id]
7387
+ });
7388
+ void promise.then((result) => {
7389
+ this.dispatch(setFormRevision(result));
7390
+ }).catch(() => {
7391
+ this.dispatch(deleteFormRevision(offlineFormRevision.offline_id));
7392
+ });
7393
+ return [offlineFormRevision, promise];
7394
+ }
7395
+ async refreshStore(projectId, organizationId) {
7396
+ let formRevisions = [];
7397
+ const projectFormRevisions = await this.enqueueRequest({
7398
+ description: "Fetch project form revisions",
7399
+ method: HttpMethod.GET,
7400
+ url: "/form-revisions/",
7401
+ queryParams: {
7402
+ project: projectId.toString()
7403
+ },
7404
+ blockers: [projectId.toString()],
7405
+ blocks: []
7406
+ });
7407
+ formRevisions = formRevisions.concat(projectFormRevisions);
7408
+ const organizationFormRevisions = await this.enqueueRequest({
7409
+ description: "Fetch organization form revisions",
7410
+ method: HttpMethod.GET,
7411
+ url: "/form-revisions/",
7412
+ queryParams: {
7413
+ organization: organizationId.toString()
7414
+ },
7415
+ blockers: [organizationId.toString()],
7416
+ blocks: []
7417
+ });
7418
+ formRevisions = formRevisions.concat(organizationFormRevisions);
7419
+ this.dispatch(initializeFormRevisions(formRevisions));
7420
+ }
7421
+ }
7397
7422
  class AssetTypeFieldsAttachmentService extends BaseUploadService {
7398
7423
  async bulkAdd(payloads) {
7399
7424
  var _a2;
@@ -7539,24 +7564,39 @@ class AssetTypeFieldValuesService extends BaseApiService {
7539
7564
  return [offlineAssetTypeFieldValues, promise];
7540
7565
  }
7541
7566
  bulkAdd(payload, batchSize) {
7567
+ var _a2;
7542
7568
  const submittedAt = (/* @__PURE__ */ new Date()).toISOString();
7543
7569
  const { values } = separateFilesFromValues(payload.values);
7544
- const payloadsBatches = chunkArray(payload.payloads, batchSize);
7545
- const bulkAddPayloads = payloadsBatches.map((batch) => {
7546
- return {
7570
+ const offlineAssetTypeFieldValuesMany = [];
7571
+ const batches = chunkArray(payload.payloads, batchSize ?? payload.payloads.length);
7572
+ const batchPayloads = [];
7573
+ for (const batch of batches) {
7574
+ const assetTypeFieldValuesPayloads = [];
7575
+ for (const payload2 of batch) {
7576
+ const offlineAssetTypeFieldValues = offline({
7577
+ ...payload2,
7578
+ values: separateFilesFromValues(payload2.values).values,
7579
+ created_by: (_a2 = this.client.store.getState().userReducer.currentUser) == null ? void 0 : _a2.id,
7580
+ submitted_at: submittedAt
7581
+ });
7582
+ offlineAssetTypeFieldValuesMany.push(offlineAssetTypeFieldValues);
7583
+ assetTypeFieldValuesPayloads.push({
7584
+ offline_id: offlineAssetTypeFieldValues.offline_id,
7585
+ asset: payload2.asset,
7586
+ fields_revision: payload2.fields_revision,
7587
+ published_at: payload2.published_at,
7588
+ values: offlineAssetTypeFieldValues.values
7589
+ });
7590
+ }
7591
+ batchPayloads.push({
7547
7592
  submitted_at: submittedAt,
7548
7593
  values,
7549
- field_values: batch.map((payload2) => {
7550
- const { values: values2 } = separateFilesFromValues(payload2.values);
7551
- return offline({
7552
- ...payload2,
7553
- values: values2
7554
- });
7555
- })
7556
- };
7557
- });
7594
+ field_values: assetTypeFieldValuesPayloads
7595
+ });
7596
+ }
7597
+ this.dispatch(addAssetTypeFieldValuesMany(offlineAssetTypeFieldValuesMany));
7558
7598
  const promises = [];
7559
- for (const payload2 of bulkAddPayloads) {
7599
+ for (const payload2 of batchPayloads) {
7560
7600
  const assetIds = payload2.field_values.map((x) => x.asset);
7561
7601
  const assetTypeFieldsIds = payload2.field_values.map((x) => x.fields_revision);
7562
7602
  const assetTypeFieldValuesIds = payload2.field_values.map((x) => x.offline_id);
@@ -7571,9 +7611,11 @@ class AssetTypeFieldValuesService extends BaseApiService {
7571
7611
  promises.push(promise);
7572
7612
  }
7573
7613
  void Promise.all(promises).then((results) => {
7574
- this.dispatch(addAssetTypeFieldValuesMany(results.flat()));
7614
+ this.dispatch(updateAssetTypeFieldValuesMany(results.flat()));
7615
+ }).catch(() => {
7616
+ this.dispatch(deleteAssetTypeFieldValuesMany(offlineAssetTypeFieldValuesMany.map((x) => x.offline_id)));
7575
7617
  });
7576
- return promises;
7618
+ return [offlineAssetTypeFieldValuesMany, promises];
7577
7619
  }
7578
7620
  update(payload) {
7579
7621
  const { store } = this.client;
@@ -7597,7 +7639,13 @@ class AssetTypeFieldValuesService extends BaseApiService {
7597
7639
  description: "Delete asset type field values",
7598
7640
  method: HttpMethod.PATCH,
7599
7641
  url: `/asset-type-field-values/${payload.offline_id}/`,
7600
- payload,
7642
+ payload: {
7643
+ ...payload,
7644
+ values: {
7645
+ ...assetTypeFieldValues.values,
7646
+ ...values
7647
+ }
7648
+ },
7601
7649
  blockers: [
7602
7650
  updatedAssetTypeFieldValues.offline_id,
7603
7651
  updatedAssetTypeFieldValues.fields_revision,
@@ -7651,54 +7699,63 @@ class AssetTypeFieldValuesService extends BaseApiService {
7651
7699
  }
7652
7700
  }
7653
7701
  class AssetTypeFieldValuesAttachmentService extends BaseUploadService {
7654
- async bulkAdd(payloads) {
7702
+ async bulkAdd(payloads, batchSize) {
7655
7703
  var _a2;
7656
7704
  const submittedAt = (/* @__PURE__ */ new Date()).toISOString();
7657
7705
  const createdBy = (_a2 = this.client.store.getState().userReducer.currentUser) == null ? void 0 : _a2.id;
7658
- const filePayloads = {};
7706
+ const batches = chunkArray(payloads, batchSize ?? payloads.length);
7659
7707
  const offlineAssetTypeFieldValuesAttachments = [];
7660
- const attachmentPayloads = [];
7661
- for (const payload of payloads) {
7662
- const { fieldValuesId, fieldIdentifier, file } = payload;
7663
- const filePayload = await this.getFilePayload(file);
7664
- if (!(filePayload.sha1 in filePayloads))
7665
- filePayloads[filePayload.sha1] = filePayload;
7666
- const offlineAssetTypeFieldValuesAttachment = offline({
7667
- file: URL.createObjectURL(file),
7668
- file_type: file.type,
7669
- file_name: file.name,
7670
- file_sha1: filePayload.sha1,
7671
- created_by: createdBy,
7672
- field_values: fieldValuesId,
7708
+ const batchPayloads = [];
7709
+ for (const batch of batches) {
7710
+ const filePayloads = {};
7711
+ const attachmentPayloads = [];
7712
+ for (const payload of batch) {
7713
+ const { fieldValuesId, fieldIdentifier, file } = payload;
7714
+ const filePayload = await this.getFilePayload(file);
7715
+ if (!(filePayload.sha1 in filePayloads))
7716
+ filePayloads[filePayload.sha1] = filePayload;
7717
+ const offlineAssetTypeFieldValuesAttachment = offline({
7718
+ file: URL.createObjectURL(file),
7719
+ file_type: file.type,
7720
+ file_name: file.name,
7721
+ file_sha1: filePayload.sha1,
7722
+ created_by: createdBy,
7723
+ field_values: fieldValuesId,
7724
+ submitted_at: submittedAt,
7725
+ field_identifier: fieldIdentifier
7726
+ });
7727
+ offlineAssetTypeFieldValuesAttachments.push(offlineAssetTypeFieldValuesAttachment);
7728
+ const attachmentPayload = {
7729
+ offline_id: offlineAssetTypeFieldValuesAttachment.offline_id,
7730
+ file_name: file.name,
7731
+ file_sha1: filePayload.sha1,
7732
+ file_extension: filePayload.extension,
7733
+ field_identifier: fieldIdentifier,
7734
+ field_values: fieldValuesId
7735
+ };
7736
+ attachmentPayloads.push(attachmentPayload);
7737
+ }
7738
+ batchPayloads.push({
7673
7739
  submitted_at: submittedAt,
7674
- field_identifier: fieldIdentifier
7740
+ attachments: attachmentPayloads,
7741
+ files: Object.values(filePayloads)
7675
7742
  });
7676
- offlineAssetTypeFieldValuesAttachments.push(offlineAssetTypeFieldValuesAttachment);
7677
- const attachmentPayload = {
7678
- offline_id: offlineAssetTypeFieldValuesAttachment.offline_id,
7679
- file_name: file.name,
7680
- file_sha1: filePayload.sha1,
7681
- file_extension: filePayload.extension,
7682
- field_identifier: fieldIdentifier,
7683
- field_values: fieldValuesId
7684
- };
7685
- attachmentPayloads.push(attachmentPayload);
7686
7743
  }
7687
7744
  this.dispatch(addAssetTypeFieldValuesAttachments(offlineAssetTypeFieldValuesAttachments));
7688
- const promise = this.enqueueRequest({
7689
- description: "Add asset type field values attachments",
7690
- method: HttpMethod.POST,
7691
- url: "/asset-type-field-values-attachments/bulk/",
7692
- payload: {
7693
- submitted_at: submittedAt,
7694
- attachments: attachmentPayloads,
7695
- files: Object.values(filePayloads)
7696
- },
7697
- blockers: offlineAssetTypeFieldValuesAttachments.map((attachment) => attachment.field_values),
7698
- blocks: offlineAssetTypeFieldValuesAttachments.map((attachment) => attachment.offline_id)
7745
+ const promises = batchPayloads.map((payload) => {
7746
+ return this.enqueueRequest({
7747
+ description: "Add asset type field values attachments",
7748
+ method: HttpMethod.POST,
7749
+ url: "/asset-type-field-values-attachments/bulk/",
7750
+ payload,
7751
+ blockers: payload.attachments.map((payload2) => payload2.field_values),
7752
+ blocks: payload.attachments.map((payload2) => payload2.offline_id)
7753
+ });
7699
7754
  });
7700
- promise.then(({ presigned_urls, attachments }) => {
7701
- this.processPresignedUrls(presigned_urls);
7755
+ Promise.all(promises).then((result) => {
7756
+ for (const res of result)
7757
+ this.processPresignedUrls(res.presigned_urls);
7758
+ const attachments = result.flatMap((res) => res.attachments);
7702
7759
  this.dispatch(updateAssetTypeFieldValuesAttachments(attachments));
7703
7760
  }).catch((error) => {
7704
7761
  this.dispatch(
@@ -7708,7 +7765,10 @@ class AssetTypeFieldValuesAttachmentService extends BaseUploadService {
7708
7765
  );
7709
7766
  throw error;
7710
7767
  });
7711
- return [offlineAssetTypeFieldValuesAttachments, promise.then(({ attachments }) => attachments)];
7768
+ return [
7769
+ offlineAssetTypeFieldValuesAttachments,
7770
+ promises.map((promise) => promise.then(({ attachments }) => attachments))
7771
+ ];
7712
7772
  }
7713
7773
  async bulkDelete(ids) {
7714
7774
  const { store } = this.client;
@@ -7731,7 +7791,7 @@ class AssetTypeFieldValuesAttachmentService extends BaseUploadService {
7731
7791
  }
7732
7792
  async refreshStore(projectId) {
7733
7793
  const result = await this.enqueueRequest({
7734
- description: "Gfet asset type field values attachments",
7794
+ description: "Get asset type field values attachments",
7735
7795
  method: HttpMethod.GET,
7736
7796
  url: "/asset-type-field-values-attachments/",
7737
7797
  queryParams: {
@@ -8002,7 +8062,13 @@ class IssueTypeFieldValuesService extends BaseApiService {
8002
8062
  description: "Update issue type field values",
8003
8063
  method: HttpMethod.PATCH,
8004
8064
  url: `/issue-type-field-values/${payload.offline_id}/`,
8005
- payload,
8065
+ payload: {
8066
+ ...payload,
8067
+ values: {
8068
+ ...issueTypeFieldValues.values,
8069
+ ...values
8070
+ }
8071
+ },
8006
8072
  blockers: [
8007
8073
  updatedIssueTypeFieldValues.offline_id,
8008
8074
  updatedIssueTypeFieldValues.fields_revision,
@@ -8092,6 +8158,7 @@ export {
8092
8158
  EmailVerificationService,
8093
8159
  FileService,
8094
8160
  FormRevisionAttachmentService,
8161
+ FormRevisionService,
8095
8162
  FormService,
8096
8163
  FormSubmissionAttachmentService,
8097
8164
  FormSubmissionService,
@@ -8483,6 +8550,7 @@ export {
8483
8550
  selectAssetTypeFieldsMapping,
8484
8551
  selectAssetTypeFieldsOfAssetType,
8485
8552
  selectAssetTypeStagesMapping,
8553
+ selectAssetTypeValuesOfAssetType,
8486
8554
  selectAssetTypes,
8487
8555
  selectAssetTypesByIds,
8488
8556
  selectAssetTypesMapping,
@@ -8540,14 +8608,11 @@ export {
8540
8608
  selectFormSubmissionAttachmentsMapping,
8541
8609
  selectFormSubmissionById,
8542
8610
  selectFormSubmissions,
8543
- selectFormSubmissionsByFormRevisions,
8544
8611
  selectFormSubmissionsMapping,
8545
8612
  selectFormSubmissionsOfAsset,
8546
8613
  selectFormSubmissionsOfForm,
8547
8614
  selectFormSubmissionsOfIssue,
8548
8615
  selectForms,
8549
- selectFormsCount,
8550
- selectGeneralFormCount,
8551
8616
  selectGeoImageById,
8552
8617
  selectGeoImageMapping,
8553
8618
  selectGeoImages,
@@ -8584,6 +8649,7 @@ export {
8584
8649
  selectIssueTypeFieldsMapping,
8585
8650
  selectIssueTypeFieldsOfIssueType,
8586
8651
  selectIssueTypeMapping,
8652
+ selectIssueTypeValuesOfIssueType,
8587
8653
  selectIssueTypes,
8588
8654
  selectIssueTypesByIds,
8589
8655
  selectIssueTypesOfOrganization,
@@ -8592,8 +8658,9 @@ export {
8592
8658
  selectIssuesByIds,
8593
8659
  selectIssuesOfIssueType,
8594
8660
  selectIssuesOfIssueTypeCount,
8595
- selectLatestFormRevisionByForm,
8661
+ selectLatestAssetTypeFieldsOfAssetType,
8596
8662
  selectLatestFormRevisionOfForm,
8663
+ selectLatestIssueTypeFieldsOfIssueType,
8597
8664
  selectLatestRetryTime,
8598
8665
  selectLicense,
8599
8666
  selectLicenseForProject,
@@ -8630,7 +8697,6 @@ export {
8630
8697
  selectProjectsOfOrganization,
8631
8698
  selectRehydrated,
8632
8699
  selectRootDocuments,
8633
- selectSortedFormSubmissionsOfForm,
8634
8700
  selectSortedOrganizationUsers,
8635
8701
  selectSortedProjectUsers,
8636
8702
  selectStageFormIdsFromStageIds,