@myclub_se/data-access 3.7.1 → 3.7.2
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.
|
@@ -5732,7 +5732,7 @@ class ActivityService {
|
|
|
5732
5732
|
activityId
|
|
5733
5733
|
});
|
|
5734
5734
|
}
|
|
5735
|
-
signUpMemberOpenActivity(memberId, activityId, comment, optionalFees, responses) {
|
|
5735
|
+
signUpMemberOpenActivity(memberId, activityId, comment, optionalFees, responses, guests = []) {
|
|
5736
5736
|
return this.apiService
|
|
5737
5737
|
.updateResource(openActivityFactory, Role.MemberAdmin, MEMBER_OPEN_ACTIVITY_RESPOND_WITH_DATA_PATH, {
|
|
5738
5738
|
memberId,
|
|
@@ -5740,17 +5740,19 @@ class ActivityService {
|
|
|
5740
5740
|
}, {
|
|
5741
5741
|
comment,
|
|
5742
5742
|
optional_fees: optionalFees,
|
|
5743
|
-
responses
|
|
5743
|
+
responses,
|
|
5744
|
+
guests
|
|
5744
5745
|
});
|
|
5745
5746
|
}
|
|
5746
|
-
signUpPublicOpenActivity(activityId, comment, optionalFees, responses) {
|
|
5747
|
+
signUpPublicOpenActivity(activityId, comment, optionalFees, responses, guests = []) {
|
|
5747
5748
|
return this.apiService
|
|
5748
5749
|
.updateResource(openActivityFactory, Role.Public, PUBLIC_OPEN_ACTIVITY_RESPOND_WITH_DATA_PATH, {
|
|
5749
5750
|
activityId
|
|
5750
5751
|
}, {
|
|
5751
5752
|
comment,
|
|
5752
5753
|
optional_fees: optionalFees,
|
|
5753
|
-
responses
|
|
5754
|
+
responses,
|
|
5755
|
+
guests
|
|
5754
5756
|
});
|
|
5755
5757
|
}
|
|
5756
5758
|
updateMemberActivity(memberId, activityInviteId, activityInvite) {
|
|
@@ -8826,61 +8828,45 @@ class ActivityEffects extends ExtraMembersMixin {
|
|
|
8826
8828
|
}
|
|
8827
8829
|
}), catchError((error) => of(updateMemberActivityAttendanceFailureAction({ payload: error })))))));
|
|
8828
8830
|
updateMemberActivityInvite$ = createEffect(() => this.actions$
|
|
8829
|
-
.pipe(ofType(updateMemberActivityInviteAction), exhaustMap(({ payload }) =>
|
|
8830
|
-
|
|
8831
|
-
|
|
8832
|
-
|
|
8833
|
-
|
|
8834
|
-
|
|
8835
|
-
|
|
8831
|
+
.pipe(ofType(updateMemberActivityInviteAction), exhaustMap(({ payload }) => {
|
|
8832
|
+
// New guests are sent inline with the respond request so the backend can
|
|
8833
|
+
// include their guest fees in the invoice it creates on accept. Existing
|
|
8834
|
+
// guests are reconciled (update/delete) before responding, so removed
|
|
8835
|
+
// guests are not invoiced.
|
|
8836
|
+
const existingGuests = payload.activityInvite.guests ?? [];
|
|
8837
|
+
const reconcile$ = payload.guests
|
|
8838
|
+
? reconcileMemberGuests(payload.memberId, payload.activityInvite.id, payload.guests, existingGuests, this.activityService)
|
|
8839
|
+
.pipe(catchError(() => of(null)))
|
|
8840
|
+
: of(null);
|
|
8841
|
+
return reconcile$.pipe(mergeMap(() => this.activityService.updateMemberActivity(payload.memberId, payload.activityInvite.id, { ...payload.activityInvite, guests: newGuests(payload.guests) })
|
|
8842
|
+
.pipe(map((activityInvite) => updateMemberActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(updateMemberActivityInviteFailureAction({ payload: error }))))));
|
|
8843
|
+
})));
|
|
8836
8844
|
updateMemberOpenActivity$ = createEffect(() => this.actions$
|
|
8837
|
-
.pipe(ofType(updateMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpMemberOpenActivity(payload.memberId, payload.activityId, payload.comment, payload.optional_fees, payload.responses)
|
|
8838
|
-
.pipe(
|
|
8839
|
-
const guests = payload.guests ?? [];
|
|
8840
|
-
if (guests.length === 0) {
|
|
8841
|
-
return of(updateMemberOpenActivitySuccessAction({ payload: openActivity }));
|
|
8842
|
-
}
|
|
8843
|
-
// Step 2: fetch activity to find member's invite ID, then add guests
|
|
8844
|
-
return this.activityService.getMemberActivity(payload.memberId, openActivity.id)
|
|
8845
|
-
.pipe(mergeMap((activity) => {
|
|
8846
|
-
const memberInvite = activity.invited_members.find(m => m.member_id === payload.memberId);
|
|
8847
|
-
if (!memberInvite) {
|
|
8848
|
-
return of(updateMemberOpenActivitySuccessAction({ payload: openActivity }));
|
|
8849
|
-
}
|
|
8850
|
-
const guestOps = guests.map(g => this.activityService.addMemberActivityGuest(payload.memberId, memberInvite.id, { name: g.name, comment: g.comment ?? undefined }));
|
|
8851
|
-
return forkJoin(guestOps).pipe(catchError(() => of(null)), map(() => updateMemberOpenActivitySuccessAction({ payload: openActivity })));
|
|
8852
|
-
}), catchError(() => of(updateMemberOpenActivitySuccessAction({ payload: openActivity }))));
|
|
8853
|
-
}), catchError((error) => of(updateMemberOpenActivityFailureAction({ payload: error })))))));
|
|
8845
|
+
.pipe(ofType(updateMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpMemberOpenActivity(payload.memberId, payload.activityId, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
|
|
8846
|
+
.pipe(map((openActivity) => updateMemberOpenActivitySuccessAction({ payload: openActivity })), catchError((error) => of(updateMemberOpenActivityFailureAction({ payload: error })))))));
|
|
8854
8847
|
updatePublicActivityInvite$ = createEffect(() => this.actions$
|
|
8855
|
-
.pipe(ofType(updatePublicActivityInviteAction), exhaustMap(({ payload }) =>
|
|
8856
|
-
.
|
|
8857
|
-
const
|
|
8858
|
-
|
|
8859
|
-
|
|
8860
|
-
|
|
8861
|
-
|
|
8848
|
+
.pipe(ofType(updatePublicActivityInviteAction), exhaustMap(({ payload }) => {
|
|
8849
|
+
const existingGuests = payload.activityInvite.guests ?? [];
|
|
8850
|
+
const reconcile$ = payload.guests
|
|
8851
|
+
? reconcilePublicTokenGuests(payload.activityInvite.id, payload.token, payload.guests, existingGuests, this.activityService)
|
|
8852
|
+
.pipe(catchError(() => of(null)))
|
|
8853
|
+
: of(null);
|
|
8854
|
+
return reconcile$.pipe(mergeMap(() => this.activityService.updatePublicActivityInvite(payload.activityInvite.id, payload.token, { ...payload.activityInvite, guests: newGuests(payload.guests) })
|
|
8855
|
+
.pipe(map((activityInvite) => updatePublicActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(updatePublicActivityInviteFailureAction({ payload: error }))))));
|
|
8856
|
+
})));
|
|
8862
8857
|
updatePublicMemberActivityInvite$ = createEffect(() => this.actions$
|
|
8863
|
-
.pipe(ofType(updatePublicMemberActivityInviteAction), exhaustMap(({ payload }) =>
|
|
8864
|
-
.
|
|
8865
|
-
const
|
|
8866
|
-
|
|
8867
|
-
|
|
8868
|
-
|
|
8869
|
-
|
|
8858
|
+
.pipe(ofType(updatePublicMemberActivityInviteAction), exhaustMap(({ payload }) => {
|
|
8859
|
+
const existingGuests = payload.activityInvite.guests ?? [];
|
|
8860
|
+
const reconcile$ = payload.guests
|
|
8861
|
+
? reconcilePublicTokenGuests(payload.activityInvite.id, payload.activityInvite.token, payload.guests, existingGuests, this.activityService)
|
|
8862
|
+
.pipe(catchError(() => of(null)))
|
|
8863
|
+
: of(null);
|
|
8864
|
+
return reconcile$.pipe(mergeMap(() => this.activityService.updatePublicMemberActivityInvite(payload.activityInvite.id, { ...payload.activityInvite, guests: newGuests(payload.guests) })
|
|
8865
|
+
.pipe(map((activityInvite) => updatePublicMemberActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(updatePublicMemberActivityInviteFailureAction({ payload: error }))))));
|
|
8866
|
+
})));
|
|
8870
8867
|
updatePublicMemberOpenActivity$ = createEffect(() => this.actions$
|
|
8871
|
-
.pipe(ofType(updatePublicMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpPublicOpenActivity(payload.activityId, payload.comment, payload.optional_fees, payload.responses)
|
|
8872
|
-
.pipe(
|
|
8873
|
-
const guests = payload.guests ?? [];
|
|
8874
|
-
if (guests.length === 0) {
|
|
8875
|
-
return of(updatePublicMemberOpenActivitySuccessAction({ payload: openActivity }));
|
|
8876
|
-
}
|
|
8877
|
-
return this.activityService.getPublicOpenActivityGuests(payload.activityId)
|
|
8878
|
-
.pipe(mergeMap((existingCollection) => {
|
|
8879
|
-
const existingGuests = existingCollection.toArray();
|
|
8880
|
-
return reconcilePublicOpenActivityGuests(payload.activityId, guests, existingGuests, this.activityService)
|
|
8881
|
-
.pipe(catchError(() => of(null)), map(() => updatePublicMemberOpenActivitySuccessAction({ payload: openActivity })));
|
|
8882
|
-
}), catchError(() => of(updatePublicMemberOpenActivitySuccessAction({ payload: openActivity }))));
|
|
8883
|
-
}), catchError((error) => of(updatePublicMemberOpenActivityFailureAction({ payload: error })))))));
|
|
8868
|
+
.pipe(ofType(updatePublicMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpPublicOpenActivity(payload.activityId, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
|
|
8869
|
+
.pipe(map((openActivity) => updatePublicMemberOpenActivitySuccessAction({ payload: openActivity })), catchError((error) => of(updatePublicMemberOpenActivityFailureAction({ payload: error })))))));
|
|
8884
8870
|
updateTeamActivity = createEffect(() => this.actions$
|
|
8885
8871
|
.pipe(ofType(updateTeamActivityAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivity(payload.teamId, payload.activity)
|
|
8886
8872
|
.pipe(map((activity) => updateTeamActivitySuccessAction({ payload: activity })), catchError((error) => of(updateTeamActivityFailureAction({ payload: error })))))));
|
|
@@ -8899,11 +8885,17 @@ class ActivityEffects extends ExtraMembersMixin {
|
|
|
8899
8885
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityEffects, decorators: [{
|
|
8900
8886
|
type: Injectable
|
|
8901
8887
|
}] });
|
|
8888
|
+
// New guests (no id yet) are sent inline with the respond request, so the
|
|
8889
|
+
// backend creates them before the invoice and includes their guest fees.
|
|
8890
|
+
function newGuests(guests) {
|
|
8891
|
+
return (guests ?? []).filter(g => !g.id).map(g => ({ name: g.name, comment: g.comment ?? undefined }));
|
|
8892
|
+
}
|
|
8893
|
+
// Updates and deletes of existing guests still use the dedicated guest
|
|
8894
|
+
// endpoints; new guests are sent inline with the respond request instead.
|
|
8902
8895
|
function reconcileMemberGuests(memberId, inviteId, desiredGuests, existingGuests, activityService) {
|
|
8903
8896
|
const existingById = new Map(existingGuests.map(g => [g.id, g]));
|
|
8904
8897
|
const desiredIds = new Set(desiredGuests.filter(g => g.id).map(g => g.id));
|
|
8905
8898
|
const toDelete = existingGuests.filter(g => !desiredIds.has(g.id));
|
|
8906
|
-
const toAdd = desiredGuests.filter(g => !g.id);
|
|
8907
8899
|
const toUpdate = desiredGuests.filter(g => {
|
|
8908
8900
|
if (!g.id)
|
|
8909
8901
|
return false;
|
|
@@ -8912,7 +8904,6 @@ function reconcileMemberGuests(memberId, inviteId, desiredGuests, existingGuests
|
|
|
8912
8904
|
});
|
|
8913
8905
|
const ops = [
|
|
8914
8906
|
...toDelete.map(g => activityService.deleteMemberActivityGuest(memberId, inviteId, g.id)),
|
|
8915
|
-
...toAdd.map(g => activityService.addMemberActivityGuest(memberId, inviteId, { name: g.name, comment: g.comment ?? undefined })),
|
|
8916
8907
|
...toUpdate.map(g => activityService.updateMemberActivityGuest(memberId, inviteId, g.id, { name: g.name, comment: g.comment ?? undefined })),
|
|
8917
8908
|
];
|
|
8918
8909
|
return ops.length > 0 ? forkJoin(ops) : of(null);
|
|
@@ -8921,7 +8912,6 @@ function reconcilePublicTokenGuests(id, token, desiredGuests, existingGuests, ac
|
|
|
8921
8912
|
const existingById = new Map(existingGuests.map(g => [g.id, g]));
|
|
8922
8913
|
const desiredIds = new Set(desiredGuests.filter(g => g.id).map(g => g.id));
|
|
8923
8914
|
const toDelete = existingGuests.filter(g => !desiredIds.has(g.id));
|
|
8924
|
-
const toAdd = desiredGuests.filter(g => !g.id);
|
|
8925
8915
|
const toUpdate = desiredGuests.filter(g => {
|
|
8926
8916
|
if (!g.id)
|
|
8927
8917
|
return false;
|
|
@@ -8930,29 +8920,10 @@ function reconcilePublicTokenGuests(id, token, desiredGuests, existingGuests, ac
|
|
|
8930
8920
|
});
|
|
8931
8921
|
const ops = [
|
|
8932
8922
|
...toDelete.map(g => activityService.deletePublicActivityGuestByToken(id, token, g.id)),
|
|
8933
|
-
...toAdd.map(g => activityService.addPublicActivityGuestByToken(id, token, { name: g.name, comment: g.comment ?? undefined })),
|
|
8934
8923
|
...toUpdate.map(g => activityService.updatePublicActivityGuestByToken(id, token, g.id, { name: g.name, comment: g.comment ?? undefined })),
|
|
8935
8924
|
];
|
|
8936
8925
|
return ops.length > 0 ? forkJoin(ops) : of(null);
|
|
8937
8926
|
}
|
|
8938
|
-
function reconcilePublicOpenActivityGuests(activityId, desiredGuests, existingGuests, activityService) {
|
|
8939
|
-
const existingById = new Map(existingGuests.map(g => [g.id, g]));
|
|
8940
|
-
const desiredIds = new Set(desiredGuests.filter(g => g.id).map(g => g.id));
|
|
8941
|
-
const toDelete = existingGuests.filter(g => !desiredIds.has(g.id));
|
|
8942
|
-
const toAdd = desiredGuests.filter(g => !g.id);
|
|
8943
|
-
const toUpdate = desiredGuests.filter(g => {
|
|
8944
|
-
if (!g.id)
|
|
8945
|
-
return false;
|
|
8946
|
-
const existing = existingById.get(g.id);
|
|
8947
|
-
return existing && (existing.name !== g.name || existing.comment !== g.comment);
|
|
8948
|
-
});
|
|
8949
|
-
const ops = [
|
|
8950
|
-
...toDelete.map(g => activityService.deletePublicOpenActivityGuest(activityId, g.id)),
|
|
8951
|
-
...toAdd.map(g => activityService.addPublicOpenActivityGuest(activityId, { name: g.name, comment: g.comment ?? undefined })),
|
|
8952
|
-
...toUpdate.map(g => activityService.updatePublicOpenActivityGuest(activityId, g.id, { name: g.name, comment: g.comment ?? undefined })),
|
|
8953
|
-
];
|
|
8954
|
-
return ops.length > 0 ? forkJoin(ops) : of(null);
|
|
8955
|
-
}
|
|
8956
8927
|
|
|
8957
8928
|
class AuthEffects {
|
|
8958
8929
|
actions$ = inject(Actions);
|