@overmap-ai/core 1.0.48-tanstack-table.1 → 1.0.49-fix-error-messaging.0

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/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @overmap-ai/core
2
-
3
- The `core` package contains core functionality for the Overmap platform. It is a peer dependency of all other overmap
4
- packages.
1
+ # @overmap-ai/core
2
+
3
+ The `core` package contains core functionality for the Overmap platform. It is a peer dependency of all other overmap
4
+ packages.
@@ -217,18 +217,54 @@ class OutboxCoordinator {
217
217
  this.requestAttemptCounter[uuid] = (this.requestAttemptCounter[uuid] || 0) + 1;
218
218
  }
219
219
  }
220
+ function extractErrorMessage(errorRes, err) {
221
+ if (errorRes == null ? void 0 : errorRes.body) {
222
+ if (typeof errorRes.body === "object") {
223
+ if (typeof errorRes.body.error === "string")
224
+ return errorRes.body.error;
225
+ if (typeof errorRes.body.message === "string")
226
+ return errorRes.body.message;
227
+ try {
228
+ return Object.entries(errorRes.body).map(([key, value]) => {
229
+ if (typeof value === "string") {
230
+ if (key === "non_field_errors")
231
+ return value;
232
+ return `${key}: ${value}`;
233
+ }
234
+ if (Array.isArray(value)) {
235
+ if (key === "non_field_errors")
236
+ return value.join("\n");
237
+ return value.map((v) => `${key}: ${v}`).join("\n");
238
+ }
239
+ return `${key}: ${JSON.stringify(value)}`;
240
+ }).join("\n");
241
+ } catch (e) {
242
+ console.error("Failed to extract error message from response body", e);
243
+ }
244
+ } else if (typeof errorRes.body === "string")
245
+ return errorRes.body;
246
+ } else if (errorRes == null ? void 0 : errorRes.text) {
247
+ return errorRes.text;
248
+ } else if (err instanceof Error) {
249
+ return err.message;
250
+ }
251
+ return void 0;
252
+ }
220
253
  class APIError extends Error {
221
- constructor(message, response, options) {
222
- super(response == null ? void 0 : response.text);
254
+ constructor(options) {
255
+ const unknownMessage = "An unknown error occurred";
256
+ super(unknownMessage);
223
257
  // NOTE: Needs to conform to NetworkError in @redux-offline/redux-offline, which has `status` and `response`.
224
258
  __publicField(this, "status");
225
- __publicField(this, "message");
226
259
  __publicField(this, "response");
260
+ __publicField(this, "message");
227
261
  __publicField(this, "options");
228
- this.message = message;
262
+ const { response, innerError } = options;
263
+ this.message = options.message ?? extractErrorMessage(response, innerError) ?? unknownMessage;
229
264
  this.status = (response == null ? void 0 : response.status) ?? 0;
230
265
  this.response = response;
231
- this.options = options ?? { discard: false };
266
+ options.discard = options.discard ?? false;
267
+ this.options = options;
232
268
  }
233
269
  }
234
270
  class DeferredPromise {
@@ -1610,6 +1646,7 @@ const selectComponents = (state) => {
1610
1646
  }
1611
1647
  return prevComponents;
1612
1648
  };
1649
+ const selectComponentsMapping = (state) => state.componentReducer.components;
1613
1650
  const selectComponentsFromComponentType = (componentTypeId) => (state) => {
1614
1651
  if (!componentTypeId)
1615
1652
  return [];
@@ -1640,16 +1677,14 @@ const selectComponentTypeFromComponents = (state) => {
1640
1677
  }
1641
1678
  return ret;
1642
1679
  };
1643
- const selectComponentsByType = (componentTypeId) => (state) => {
1644
- const components = state.componentReducer.components;
1645
- const componentsOfType = [];
1646
- for (const component of Object.values(components)) {
1647
- if (component.component_type === componentTypeId) {
1648
- componentsOfType.push(component);
1680
+ const selectComponentsByType = restructureCreateSelectorWithArgs(
1681
+ createSelector(
1682
+ [selectComponents, (_state, componentTypeId) => componentTypeId],
1683
+ (components, componentTypeId) => {
1684
+ return components.filter((component) => component.component_type === componentTypeId);
1649
1685
  }
1650
- }
1651
- return componentsOfType;
1652
- };
1686
+ )
1687
+ );
1653
1688
  const selectNumberOfComponentsOfComponentType = (componentTypeId) => (state) => {
1654
1689
  var _a2;
1655
1690
  if (!componentTypeId)
@@ -1839,6 +1874,20 @@ const selectStagesFromComponentTypeIds = restructureCreateSelectorWithArgs(
1839
1874
  }
1840
1875
  )
1841
1876
  );
1877
+ const selectComponentTypeStagesMapping = restructureCreateSelectorWithArgs(
1878
+ createSelector(
1879
+ [selectStageMapping, (_state, componentTypeId) => componentTypeId],
1880
+ (stagesMapping, componentTypeId) => {
1881
+ const componentTypeStagesMapping = {};
1882
+ for (const [stageId, stage] of Object.entries(stagesMapping)) {
1883
+ if (stage.component_type === componentTypeId) {
1884
+ componentTypeStagesMapping[stageId] = stage;
1885
+ }
1886
+ }
1887
+ return componentTypeStagesMapping;
1888
+ }
1889
+ )
1890
+ );
1842
1891
  const selectStagesFromComponentType = restructureCreateSelectorWithArgs(
1843
1892
  createSelector(
1844
1893
  [selectStages, (_state, componentTypeId) => componentTypeId],
@@ -3651,6 +3700,9 @@ const selectUserForm = (formId2) => (state) => {
3651
3700
  return state.userFormReducer.userForms[formId2];
3652
3701
  };
3653
3702
  const selectSubmissionMapping = (state) => state.userFormReducer.submissions;
3703
+ const selectUserFormSubmission = (submissionId) => (state) => {
3704
+ return state.userFormReducer.submissions[submissionId];
3705
+ };
3654
3706
  const selectSubmissions = createSelector([selectSubmissionMapping], (submissions) => Object.values(submissions));
3655
3707
  const selectRevisionMapping = (state) => state.userFormReducer.revisions;
3656
3708
  const selectRevisions = createSelector([selectRevisionMapping], (revisions) => Object.values(revisions));
@@ -3692,6 +3744,23 @@ const selectSubmissionsForComponent = restructureCreateSelectorWithArgs(
3692
3744
  }
3693
3745
  )
3694
3746
  );
3747
+ const selectComponentSubmissionMapping = createSelector(
3748
+ [selectSubmissionMapping, selectComponentsMapping],
3749
+ (submissions, components) => {
3750
+ var _a2;
3751
+ const componentSubmissionMapping = {};
3752
+ for (const componentId in components) {
3753
+ componentSubmissionMapping[componentId] = [];
3754
+ }
3755
+ for (const submissionId in submissions) {
3756
+ const submission = submissions[submissionId];
3757
+ if (submission.component) {
3758
+ (_a2 = componentSubmissionMapping[submission.component]) == null ? void 0 : _a2.push(submission);
3759
+ }
3760
+ }
3761
+ return componentSubmissionMapping;
3762
+ }
3763
+ );
3695
3764
  const selectUserFormMapping = (state) => {
3696
3765
  return state.userFormReducer.userForms;
3697
3766
  };
@@ -4144,35 +4213,6 @@ function extractResponseFromError(error2) {
4144
4213
  }
4145
4214
  return void 0;
4146
4215
  }
4147
- function extractErrorMessage(errorRes, err) {
4148
- if (errorRes == null ? void 0 : errorRes.body) {
4149
- if (typeof errorRes.body === "object") {
4150
- if (typeof errorRes.body.error === "string")
4151
- return errorRes.body.error;
4152
- if (typeof errorRes.body.message === "string")
4153
- return errorRes.body.message;
4154
- try {
4155
- return Object.entries(errorRes.body).map(([key, value]) => {
4156
- if (typeof value === "string") {
4157
- return `${key}: ${value}`;
4158
- }
4159
- if (Array.isArray(value)) {
4160
- return value.map((v) => `${key}: ${v}`).join("\n");
4161
- }
4162
- return `${key}: ${JSON.stringify(value)}`;
4163
- }).join("\n");
4164
- } catch (e) {
4165
- console.error("Failed to extract error message from response body", e);
4166
- }
4167
- } else if (typeof errorRes.body === "string")
4168
- return errorRes.body;
4169
- } else if (errorRes == null ? void 0 : errorRes.text) {
4170
- return errorRes.text;
4171
- } else if (err instanceof Error) {
4172
- return err.message;
4173
- }
4174
- return void 0;
4175
- }
4176
4216
  async function performRequest(action, client) {
4177
4217
  async function checkToken() {
4178
4218
  if (client.auth.tokenIsExpiringSoon()) {
@@ -4275,8 +4315,11 @@ async function performRequest(action, client) {
4275
4315
  console.warn("No signed-in user to sign out.");
4276
4316
  }
4277
4317
  await client.auth.logout();
4278
- throw new APIError("You have been signed out due to inactivity.", errorResponse, {
4279
- discard: true
4318
+ throw new APIError({
4319
+ message: "You have been signed out due to inactivity.",
4320
+ response: errorResponse,
4321
+ discard: true,
4322
+ innerError: error2
4280
4323
  });
4281
4324
  }
4282
4325
  console.debug("Forbidden; renewing tokens and retrying.");
@@ -4284,10 +4327,7 @@ async function performRequest(action, client) {
4284
4327
  console.debug("Successfully renewed tokens; retrying request.");
4285
4328
  return requestToSend.query(queryParams);
4286
4329
  }
4287
- const apiErrorMessage = extractErrorMessage(errorResponse, error2) || "An unexpected error occurred.";
4288
- throw new APIError(apiErrorMessage, errorResponse, {
4289
- discard: discardStatuses.includes(status)
4290
- });
4330
+ throw new APIError({ response: errorResponse, innerError: error2, discard: discardStatuses.includes(status) });
4291
4331
  }
4292
4332
  }
4293
4333
  class MiddlewareChainerPrivate {
@@ -4498,13 +4538,11 @@ class BaseApiService {
4498
4538
  if (response) {
4499
4539
  promise.resolve(response.body);
4500
4540
  } else {
4501
- const error2 = new APIError(
4502
- "Could not get a response from the server.",
4541
+ const error2 = new APIError({
4542
+ message: "Could not get a response from the server.",
4503
4543
  response,
4504
- {
4505
- discard: true
4506
- }
4507
- );
4544
+ discard: true
4545
+ });
4508
4546
  promise.reject(error2);
4509
4547
  }
4510
4548
  };
@@ -4661,7 +4699,7 @@ class AttachmentService extends BaseApiService {
4661
4699
  offline_id,
4662
4700
  project,
4663
4701
  description: description2 ?? "",
4664
- submitted_at: (/* @__PURE__ */ new Date()).getTime() / 1e3,
4702
+ submitted_at: (/* @__PURE__ */ new Date()).toISOString(),
4665
4703
  ...fileProps
4666
4704
  }
4667
4705
  });
@@ -7136,8 +7174,7 @@ class OrganizationAccessService extends BaseApiService {
7136
7174
  blockers: [],
7137
7175
  blocks: []
7138
7176
  });
7139
- const organizationAccesses = result;
7140
- store.dispatch(setOrganizationAccesses(organizationAccesses));
7177
+ store.dispatch(setOrganizationAccesses(result));
7141
7178
  }
7142
7179
  }
7143
7180
  const cachedRequestPromises = {};
@@ -15790,11 +15827,13 @@ export {
15790
15827
  selectCompletedStages,
15791
15828
  selectComponent,
15792
15829
  selectComponentAttachmentMapping,
15830
+ selectComponentSubmissionMapping,
15793
15831
  selectComponentType,
15794
15832
  selectComponentTypeAttachmentMapping,
15795
15833
  selectComponentTypeForm,
15796
15834
  selectComponentTypeFromComponent,
15797
15835
  selectComponentTypeFromComponents,
15836
+ selectComponentTypeStagesMapping,
15798
15837
  selectComponentTypes,
15799
15838
  selectComponentTypesByName,
15800
15839
  selectComponentTypesFromIds,
@@ -15802,6 +15841,7 @@ export {
15802
15841
  selectComponents,
15803
15842
  selectComponentsByType,
15804
15843
  selectComponentsFromComponentType,
15844
+ selectComponentsMapping,
15805
15845
  selectCreateProjectType,
15806
15846
  selectCurrentUser,
15807
15847
  selectDeletedRequests,
@@ -15899,6 +15939,7 @@ export {
15899
15939
  selectUser,
15900
15940
  selectUserForm,
15901
15941
  selectUserFormMapping,
15942
+ selectUserFormSubmission,
15902
15943
  selectUsersAsMapping,
15903
15944
  selectVisibleStatuses,
15904
15945
  selectVisibleUserIds,