[events] Can send invitations and transfers
This commit is contained in:
parent
43dcd0579e
commit
48aa6c724a
|
@ -15,7 +15,7 @@
|
|||
Uhr
|
||||
</q-card-section>
|
||||
<q-card-actions align="around">
|
||||
<q-btn style="width: 47.5%" color="primary" label="Eintragen" @click="enroll" />
|
||||
<q-btn style="width: 47.5%" color="primary" label="Eintragen" @click="enroll()" />
|
||||
<q-toggle
|
||||
v-model="service.is_backup"
|
||||
style="width: 47.5%"
|
||||
|
@ -29,14 +29,14 @@
|
|||
style="width: 47.5%"
|
||||
color="negative"
|
||||
label="Übertragen"
|
||||
@click="transfer"
|
||||
@click="enroll(true)"
|
||||
/>
|
||||
<q-btn
|
||||
v-if="!iam(service.userid)"
|
||||
style="width: 47.5%"
|
||||
color="secondary"
|
||||
label="Einladen"
|
||||
@click="invite"
|
||||
@click="enroll(false, true)"
|
||||
/>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
|
@ -74,7 +74,7 @@
|
|||
color="white"
|
||||
:text-color="scope.opt.is_backup ? 'primary' : 'secondary'"
|
||||
class="q-ma-none"
|
||||
@remove="remove(scope.opt.userid, scope.removeAtIndex, scope.index)"
|
||||
@remove="remove(scope.opt, scope.removeAtIndex, scope.index)"
|
||||
>
|
||||
<q-avatar :color="scope.opt.is_backup ? 'primary' : 'secondary'" text-color="white">
|
||||
<img
|
||||
|
@ -142,8 +142,15 @@ export default defineComponent({
|
|||
return uid === mainStore.currentUser.userid;
|
||||
}
|
||||
|
||||
async function enroll() {
|
||||
async function enroll(transfer = false, invite = false) {
|
||||
try {
|
||||
dialog.value = false;
|
||||
if (transfer)
|
||||
service.value = Object.assign({}, service.value, {
|
||||
replace: mainStore.currentUser.userid,
|
||||
});
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
||||
else if (invite) delete (<any>service.value).value;
|
||||
const job = await store.updateJob(props.eventId, props.modelValue.id, {
|
||||
user: <FG.Service>service.value,
|
||||
});
|
||||
|
@ -161,11 +168,28 @@ export default defineComponent({
|
|||
}
|
||||
}
|
||||
|
||||
async function remove(userid: string, rem: (i: number) => void, index: number) {
|
||||
if (userid === mainStore.currentUser.userid || hasPermission(PERMISSIONS.ASSIGN_OTHER)) {
|
||||
console.log('YES REM');
|
||||
async function remove(service: FG.Service, rem: (i: number) => void, index: number) {
|
||||
if (
|
||||
service.userid === mainStore.currentUser.userid ||
|
||||
hasPermission(PERMISSIONS.ASSIGN_OTHER)
|
||||
) {
|
||||
rem(index);
|
||||
await signOutFromJob();
|
||||
try {
|
||||
const job = await store.updateJob(props.eventId, props.modelValue.id, {
|
||||
user: Object.assign({}, service, { value: -service.value }),
|
||||
});
|
||||
emit('update:modelValue', job);
|
||||
} catch (error) {
|
||||
console.warn(error);
|
||||
Notify.create({
|
||||
group: false,
|
||||
type: 'negative',
|
||||
message: 'Fehler beim Austragen als Dienst',
|
||||
timeout: 10000,
|
||||
progress: true,
|
||||
actions: [{ icon: 'mdi-close', color: 'white' }],
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -193,37 +217,12 @@ export default defineComponent({
|
|||
return sum < props.modelValue.required_services && !is;
|
||||
});
|
||||
|
||||
async function signOutFromJob() {
|
||||
const newService: FG.Service = {
|
||||
userid: mainStore.currentUser.userid,
|
||||
is_backup: false,
|
||||
value: -1,
|
||||
};
|
||||
try {
|
||||
const job = await store.updateJob(props.eventId, props.modelValue.id, {
|
||||
user: newService,
|
||||
});
|
||||
emit('update:modelValue', job);
|
||||
} catch (error) {
|
||||
console.warn(error);
|
||||
Notify.create({
|
||||
group: false,
|
||||
type: 'negative',
|
||||
message: 'Fehler beim Austragen als Dienst',
|
||||
timeout: 10000,
|
||||
progress: true,
|
||||
actions: [{ icon: 'mdi-close', color: 'white' }],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
enroll,
|
||||
availableUsers,
|
||||
canEdit,
|
||||
isEnrolled,
|
||||
enrolled,
|
||||
signOutFromJob,
|
||||
enrollDialog,
|
||||
canEnroll,
|
||||
remove,
|
||||
|
|
|
@ -2,13 +2,35 @@ import { defineAsyncComponent } from 'vue';
|
|||
import { innerRoutes, privateRoutes } from './routes';
|
||||
import { FG_Plugin } from 'src/plugins';
|
||||
|
||||
interface EventNotification extends FG_Plugin.Notification {
|
||||
data: { type: NotificationType };
|
||||
}
|
||||
|
||||
enum NotificationType {
|
||||
REQUEST = 0x10,
|
||||
ACCEPTED = 0x11,
|
||||
REJECTED = 0x12,
|
||||
}
|
||||
|
||||
function transpile(n: FG.Notification) {
|
||||
const notification = <EventNotification>Object.assign({}, n);
|
||||
if (notification.data.type === NotificationType.REQUEST)
|
||||
notification.accept = () =>
|
||||
new Promise((r) => {
|
||||
console.log('REQUEST ACCEPTED');
|
||||
r();
|
||||
});
|
||||
return notification;
|
||||
}
|
||||
|
||||
const plugin: FG_Plugin.Plugin = {
|
||||
name: 'Events',
|
||||
name: 'events',
|
||||
innerRoutes,
|
||||
internalRoutes: privateRoutes,
|
||||
requiredModules: ['User'],
|
||||
requiredBackendModules: ['events'],
|
||||
version: '0.0.2',
|
||||
notification: transpile,
|
||||
widgets: [
|
||||
{
|
||||
priority: 0,
|
||||
|
|
|
@ -148,7 +148,7 @@ export const useScheduleStore = defineStore({
|
|||
|
||||
async updateJob(eventId: number, jobId: number, service: FG.Service | UserService) {
|
||||
try {
|
||||
const { data } = await api.put<FG.Job>(`/events/${eventId}/jobs/${jobId}`, service);
|
||||
const { data } = await api.put<FG.Job>(`/events/${eventId}/${jobId}`, service);
|
||||
fixJob(data);
|
||||
return data;
|
||||
} catch (error) {
|
||||
|
|
Loading…
Reference in New Issue