Skip to content

Commit 409cc44

Browse files
committed
fix(participations): enhance status update feedback in editable participation components
1 parent 10f98fe commit 409cc44

File tree

2 files changed

+52
-14
lines changed

2 files changed

+52
-14
lines changed

frontend/src/components/companies/EditableCompanyParticipation.vue

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,18 @@
4545
Edit
4646
</Button>
4747
<div v-else class="flex gap-2">
48-
<Button size="sm" :disabled="isSaving" @click="saveChanges">
49-
{{ isSaving ? "Saving..." : "Save" }}
48+
<Button
49+
size="sm"
50+
:disabled="isSaving || isStatusUpdating"
51+
@click="saveChanges"
52+
>
53+
{{
54+
isSaving
55+
? "Saving..."
56+
: isStatusUpdating
57+
? "Updating..."
58+
: "Save"
59+
}}
5060
</Button>
5161
<Button variant="outline" size="sm" @click="cancelEditing">
5262
Cancel
@@ -183,6 +193,7 @@ const props = defineProps<Props>();
183193
const isEditing = ref(false);
184194
const isSaving = ref(false);
185195
const isStatusMenuOpen = ref(false);
196+
const isStatusUpdating = ref(false);
186197
const selectedStatus = ref<ParticipationStatus>(props.participation.status);
187198
188199
const updateMutation = useCompanyParticipationMutation();
@@ -243,9 +254,21 @@ const { data: membersData } = useQuery({
243254
query: () => getAllMembers(),
244255
});
245256
246-
const selectStatus = (status: ParticipationStatus) => {
257+
const selectStatus = async (status: ParticipationStatus) => {
258+
const previous = selectedStatus.value;
247259
selectedStatus.value = status;
248260
isStatusMenuOpen.value = false;
261+
try {
262+
isStatusUpdating.value = true;
263+
statusMutation.companyId.value = props.companyId;
264+
await statusMutation.mutate(status);
265+
} catch (err) {
266+
console.error("Failed to update participation status:", err);
267+
// revert value on error
268+
selectedStatus.value = previous;
269+
} finally {
270+
isStatusUpdating.value = false;
271+
}
249272
};
250273
251274
const startEditing = () => {
@@ -267,10 +290,6 @@ const saveChanges = async () => {
267290
isSaving.value = true;
268291
269292
try {
270-
if (selectedStatus.value !== props.participation.status) {
271-
statusMutation.mutate(selectedStatus.value);
272-
}
273-
274293
const dataToSend = {
275294
...editForm,
276295
confirmed: convertDatetimeLocalToISO(editForm.confirmed!),

frontend/src/components/speakers/EditableSpeakerParticipation.vue

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,18 @@
4444
Edit
4545
</Button>
4646
<div v-else class="flex gap-2">
47-
<Button size="sm" :disabled="isSaving" @click="saveChanges">
48-
{{ isSaving ? "Saving..." : "Save" }}
47+
<Button
48+
size="sm"
49+
:disabled="isSaving || isStatusUpdating"
50+
@click="saveChanges"
51+
>
52+
{{
53+
isSaving
54+
? "Saving..."
55+
: isStatusUpdating
56+
? "Updating..."
57+
: "Save"
58+
}}
4959
</Button>
5060
<Button variant="outline" size="sm" @click="cancelEditing">
5161
Cancel
@@ -217,6 +227,7 @@ const props = defineProps<Props>();
217227
const isEditing = ref(false);
218228
const isSaving = ref(false);
219229
const isStatusMenuOpen = ref(false);
230+
const isStatusUpdating = ref(false);
220231
const selectedStatus = ref<ParticipationStatus>(props.participation.status);
221232
222233
const editForm = reactive<UpdateSpeakerParticipationData>({
@@ -266,10 +277,6 @@ const saveChanges = async () => {
266277
isSaving.value = true;
267278
268279
try {
269-
if (selectedStatus.value !== props.participation.status) {
270-
statusMutation.mutate(selectedStatus.value);
271-
}
272-
273280
updateMutation.mutate(editForm);
274281
isEditing.value = false;
275282
} catch (error) {
@@ -279,9 +286,21 @@ const saveChanges = async () => {
279286
}
280287
};
281288
282-
const selectStatus = (status: ParticipationStatus) => {
289+
const selectStatus = async (status: ParticipationStatus) => {
290+
const previous = selectedStatus.value;
283291
selectedStatus.value = status;
284292
isStatusMenuOpen.value = false;
293+
294+
try {
295+
isStatusUpdating.value = true;
296+
statusMutation.speakerId.value = props.speakerId;
297+
await statusMutation.mutate(status);
298+
} catch (err) {
299+
console.error("Failed to update participation status:", err);
300+
selectedStatus.value = previous;
301+
} finally {
302+
isStatusUpdating.value = false;
303+
}
285304
};
286305
287306
const getEventName = (eventId: number) => {

0 commit comments

Comments
 (0)