@overmap-ai/core 1.0.35-projects-licensing.11 → 1.0.35-projects-licensing.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.
@@ -2566,6 +2566,20 @@ const projectSlice = createSlice({
2566
2566
  } else {
2567
2567
  throw new Error("Accept project invite: user is not in this project");
2568
2568
  }
2569
+ },
2570
+ updateActiveProjectIssuesCount: (state, action) => {
2571
+ if (state.activeProjectId) {
2572
+ state.projects[state.activeProjectId].issues_count += action.payload;
2573
+ } else {
2574
+ throw new Error("Update issues count: no active project");
2575
+ }
2576
+ },
2577
+ updateActiveProjectFormSubmissionsCount: (state, action) => {
2578
+ if (state.activeProjectId) {
2579
+ state.projects[state.activeProjectId].form_submissions_count += action.payload;
2580
+ } else {
2581
+ throw new Error("Update form submissions count: no active project");
2582
+ }
2569
2583
  }
2570
2584
  }
2571
2585
  });
@@ -2576,7 +2590,9 @@ const {
2576
2590
  setActiveProjectId,
2577
2591
  setCreateProjectType,
2578
2592
  deleteProject,
2579
- acceptProjectInvite
2593
+ acceptProjectInvite,
2594
+ updateActiveProjectIssuesCount,
2595
+ updateActiveProjectFormSubmissionsCount
2580
2596
  } = projectSlice.actions;
2581
2597
  const selectProjects = (state) => state.projectReducer.projects;
2582
2598
  const selectActiveProjectId = (state) => state.projectReducer.activeProjectId;
@@ -2685,13 +2701,19 @@ const selectActiveLicense = createSelector(
2685
2701
  return activeLicense ?? null;
2686
2702
  }
2687
2703
  );
2704
+ const selectLicenseForProject = restructureCreateSelectorWithArgs(
2705
+ createSelector(
2706
+ [selectLicenses, (_state, projectId) => projectId],
2707
+ (licenses, projectId) => Object.values(licenses).find((license) => license.project === projectId) ?? null
2708
+ )
2709
+ );
2688
2710
  const selectActiveStatusLicenses = createSelector(
2689
2711
  [selectLicenses],
2690
2712
  (licenses) => Object.values(licenses).filter((license) => license.is_active)
2691
2713
  );
2692
2714
  const selectLicencesMapping = createSelector(
2693
2715
  [selectLicenses],
2694
- (licenses) => Object.values(licenses).reduce((accum, license) => ({ ...accum, [license.project]: license }), {})
2716
+ (licenses) => Object.values(licenses).filter((license) => license.project).reduce((accum, license) => ({ ...accum, [license.project]: license }), {})
2695
2717
  );
2696
2718
  const licenseReducer = licenseSlice.reducer;
2697
2719
  const initialState$7 = {
@@ -4830,6 +4852,7 @@ class IssueService extends BaseApiService {
4830
4852
  });
4831
4853
  store.dispatch(addIssue(issuePayload));
4832
4854
  store.dispatch(addToRecentIssues(issuePayload.offline_id));
4855
+ store.dispatch(updateActiveProjectIssuesCount(1));
4833
4856
  const promise = this.enqueueRequest({
4834
4857
  description: "Create issue",
4835
4858
  method: HttpMethod.POST,
@@ -4856,6 +4879,7 @@ class IssueService extends BaseApiService {
4856
4879
  });
4857
4880
  }
4858
4881
  store.dispatch(removeIssue(issuePayload.offline_id));
4882
+ store.dispatch(store.dispatch(updateActiveProjectIssuesCount(-1)));
4859
4883
  throw error2;
4860
4884
  });
4861
4885
  return [issuePayload, promise];
@@ -4894,7 +4918,8 @@ class IssueService extends BaseApiService {
4894
4918
  return [fullIssue, promise];
4895
4919
  }
4896
4920
  async remove(id) {
4897
- const state = this.client.store.getState();
4921
+ const { store } = this.client;
4922
+ const state = store.getState();
4898
4923
  const backup = state.issueReducer.issues[id];
4899
4924
  if (!backup) {
4900
4925
  throw new Error(`No issue with id ${id} found in the store`);
@@ -4902,6 +4927,7 @@ class IssueService extends BaseApiService {
4902
4927
  const attachments = Object.values(state.issueReducer.attachments).filter((a) => a.issue_id === id);
4903
4928
  const attachmentsOfIssue = selectPhotoAttachmentsOfIssue(id)(state);
4904
4929
  this.client.store.dispatch(removeIssue(id));
4930
+ store.dispatch(updateActiveProjectIssuesCount(-1));
4905
4931
  if (attachmentsOfIssue) {
4906
4932
  this.client.store.dispatch(removeAttachmentsOfIssue(id));
4907
4933
  }
@@ -4916,6 +4942,7 @@ class IssueService extends BaseApiService {
4916
4942
  } catch (e) {
4917
4943
  this.client.store.dispatch(addIssue(backup));
4918
4944
  this.client.store.dispatch(addAttachments(attachments));
4945
+ store.dispatch(updateActiveProjectIssuesCount(1));
4919
4946
  throw e;
4920
4947
  }
4921
4948
  }
@@ -4991,7 +5018,9 @@ class MainService extends BaseApiService {
4991
5018
  owner_organization: projectData.organization_owner,
4992
5019
  owner_user: projectData.user_owner,
4993
5020
  bounds: projectData.bounds,
4994
- invited: projectData.invited || false
5021
+ invited: projectData.invited || false,
5022
+ issues_count: projectData.issues_count,
5023
+ form_submissions_count: projectData.form_submissions_count
4995
5024
  });
4996
5025
  if (currentProjectId === projectData.id && !projectData.invited) {
4997
5026
  isProjectIdValid = true;
@@ -5322,6 +5351,7 @@ class ProjectService extends BaseApiService {
5322
5351
  if (!project) {
5323
5352
  throw new Error("Expected project to exist");
5324
5353
  }
5354
+ const license = selectLicenseForProject(project.id);
5325
5355
  const activeProjectId = state.projectReducer.activeProjectId;
5326
5356
  if (activeProjectId === projectId) {
5327
5357
  store.dispatch({ type: "project/setActiveProjectId", payload: null });
@@ -5332,6 +5362,9 @@ class ProjectService extends BaseApiService {
5332
5362
  store.dispatch(removeProjectAccessesOfProject(project.id));
5333
5363
  store.dispatch({ type: "rehydrated/setRehydrated", payload: false });
5334
5364
  store.dispatch(deleteProject(project));
5365
+ if (license) {
5366
+ store.dispatch(updateLicense({ ...license, project: null }));
5367
+ }
5335
5368
  try {
5336
5369
  await this.enqueueRequest({
5337
5370
  description: "Delete project",
@@ -5347,6 +5380,9 @@ class ProjectService extends BaseApiService {
5347
5380
  store.dispatch(addOrReplaceProjectFiles(filesToDelete));
5348
5381
  store.dispatch(setActiveProjectId(activeProjectId));
5349
5382
  store.dispatch({ type: "rehydrated/setRehydrated", payload: true });
5383
+ if (license) {
5384
+ store.dispatch(updateLicense({ ...license, project: project.id }));
5385
+ }
5350
5386
  throw e;
5351
5387
  }
5352
5388
  }
@@ -5652,9 +5688,11 @@ class UserFormSubmissionService extends BaseApiService {
5652
5688
  store.dispatch(addUserFormSubmission(offlineResultWithoutFiles));
5653
5689
  void promise.then((result) => {
5654
5690
  store.dispatch(addUserFormSubmission(result));
5691
+ store.dispatch(store.dispatch(updateActiveProjectIssuesCount(1)));
5655
5692
  return result;
5656
5693
  }).catch(() => {
5657
5694
  store.dispatch(deleteUserFormSubmission(payload.offline_id));
5695
+ store.dispatch(store.dispatch(updateActiveProjectIssuesCount(-1)));
5658
5696
  });
5659
5697
  const settledPromise = Promise.all([promise, ...attachFilesPromises]).then(() => promise);
5660
5698
  return [fullOfflineResult, settledPromise];
@@ -5664,6 +5702,7 @@ class UserFormSubmissionService extends BaseApiService {
5664
5702
  const state = store.getState();
5665
5703
  const submission = state.userFormReducer.submissions[submissionId];
5666
5704
  store.dispatch(deleteUserFormSubmission(submissionId));
5705
+ store.dispatch(updateActiveProjectIssuesCount(-1));
5667
5706
  try {
5668
5707
  return await this.enqueueRequest({
5669
5708
  description: "Delete user form submissions",
@@ -5675,6 +5714,7 @@ class UserFormSubmissionService extends BaseApiService {
5675
5714
  } catch (e) {
5676
5715
  if (submission) {
5677
5716
  store.dispatch(addUserFormSubmission(submission));
5717
+ store.dispatch(store.dispatch(updateActiveProjectIssuesCount(1)));
5678
5718
  }
5679
5719
  throw e;
5680
5720
  }
@@ -11709,6 +11749,7 @@ export {
11709
11749
  selectLatestRevisionByFormId,
11710
11750
  selectLicencesMapping,
11711
11751
  selectLicense,
11752
+ selectLicenseForProject,
11712
11753
  selectLicenses,
11713
11754
  selectMainWorkspace,
11714
11755
  selectMapStyle,
@@ -11824,6 +11865,8 @@ export {
11824
11865
  unhideAllCategories,
11825
11866
  unhideCategory,
11826
11867
  updateActiveOrganization,
11868
+ updateActiveProjectFormSubmissionsCount,
11869
+ updateActiveProjectIssuesCount,
11827
11870
  updateAttachment,
11828
11871
  updateComponent,
11829
11872
  updateIssue,