aboutsummaryrefslogtreecommitdiffstats
path: root/web/composables
diff options
context:
space:
mode:
Diffstat (limited to 'web/composables')
-rw-r--r--web/composables/api.ts14
-rw-r--r--web/composables/expire-auth.ts8
-rw-r--r--web/composables/fetch-favourites.ts36
-rw-r--r--web/composables/fetch-login.ts6
-rw-r--r--web/composables/fetch-schedule.ts57
-rw-r--r--web/composables/logout.ts15
6 files changed, 93 insertions, 43 deletions
diff --git a/web/composables/api.ts b/web/composables/api.ts
new file mode 100644
index 0000000..7881aff
--- /dev/null
+++ b/web/composables/api.ts
@@ -0,0 +1,14 @@
+export function $api<T>(
+ request: Parameters<typeof $fetch<T>>[0],
+ opts?: Parameters<typeof $fetch<T>>[1],
+) {
+ const authStore = useAuthStore()
+
+ return $fetch<T>(request, {
+ ...opts,
+ headers: {
+ Authorization: authStore.isLoggedIn() ? `Bearer ${authStore.token}` : '',
+ ...opts?.headers,
+ },
+ })
+}
diff --git a/web/composables/expire-auth.ts b/web/composables/expire-auth.ts
new file mode 100644
index 0000000..b0e277e
--- /dev/null
+++ b/web/composables/expire-auth.ts
@@ -0,0 +1,8 @@
+export function expireAuth() {
+ const authStore = useAuthStore()
+
+ authStore.admin = false;
+ authStore.username = null;
+ authStore.token = null;
+ navigateTo({ path: '/login', state: { error: 'Sorry, your session has expired' } });
+} \ No newline at end of file
diff --git a/web/composables/fetch-favourites.ts b/web/composables/fetch-favourites.ts
index e586d5b..965120d 100644
--- a/web/composables/fetch-favourites.ts
+++ b/web/composables/fetch-favourites.ts
@@ -1,23 +1,21 @@
export default function() {
- const favouritesStore = useFavouritesStore();
- const errorStore = useErrorStore();
- const config = useRuntimeConfig();
-
- favouritesStore.setStatus('pending')
+ const conferenceStore = useConferenceStore()
+ const favouritesStore = useFavouritesStore();
+ const errorStore = useErrorStore();
+ const config = useRuntimeConfig();
+
+ favouritesStore.status = 'pending'
- useFetch(config.public.baseURL + '/favourites', {
- method: 'GET',
- server: false,
- lazy: true,
- onResponseError: ({ response }) => {
- favouritesStore.setStatus('idle')
+ return $api(config.public.baseURL + '/favourites/' + conferenceStore.id, {
+ method: 'GET',
+ onResponse: ({ response }) => {
+ favouritesStore.status = 'idle'
+ if (!response.ok) {
errorStore.setError(response._data.message || 'An unknown error occurred');
- },
- onResponse: ({ response }) => {
- if (response._data) {
- favouritesStore.setFavourites((response._data as any).data);
- }
- favouritesStore.setStatus('idle')
- },
- });
+ }
+ if (response._data) {
+ favouritesStore.setFavourites((response._data as any).data);
+ }
+ },
+ });
} \ No newline at end of file
diff --git a/web/composables/fetch-login.ts b/web/composables/fetch-login.ts
index 707a04f..b0b04ba 100644
--- a/web/composables/fetch-login.ts
+++ b/web/composables/fetch-login.ts
@@ -5,7 +5,7 @@ export default function() {
const errorStore = useErrorStore();
const config = useRuntimeConfig();
- loginOptionsStore.setStatus('pending')
+ loginOptionsStore.status = 'pending'
$fetch(config.public.baseURL + '/login', {
method: 'GET',
@@ -17,8 +17,8 @@ export default function() {
}
if (response._data) {
- loginOptionsStore.setLoginOptions((response._data as any).data.options);
- loginOptionsStore.setStatus('idle')
+ loginOptionsStore.loginOptions = (response._data as any).data.options;
+ loginOptionsStore.status = 'idle'
}
},
});
diff --git a/web/composables/fetch-schedule.ts b/web/composables/fetch-schedule.ts
index a0e6fec..5e91954 100644
--- a/web/composables/fetch-schedule.ts
+++ b/web/composables/fetch-schedule.ts
@@ -1,24 +1,39 @@
-export default function() {
- const scheduleStore = useScheduleStore();
- const errorStore = useErrorStore();
- const config = useRuntimeConfig();
-
- useFetch(config.public.baseURL + '/schedule', {
- method: 'GET',
- server: false,
- lazy: true,
- onResponse: ({ response }) => {
- if (!response.ok) {
- if (response.status === 401) {
- navigateTo({ path: '/login', state: { error: 'Sorry, your session has expired' } });
- } else {
- errorStore.setError(response._data.message || 'An unknown error occurred');
- }
- }
+import { useConferenceStore } from "~/stores/conference";
+import { expireAuth } from "./expire-auth";
+
+export default async function() {
+ const conferenceStore = useConferenceStore()
+ const scheduleStore = useScheduleStore();
+ const errorStore = useErrorStore();
+ const config = useRuntimeConfig();
- if (response._data) {
- scheduleStore.setSchedule((response._data as any).data.schedule);
+ scheduleStore.status = 'pending'
+
+ return $api(config.public.baseURL + '/conference/' + conferenceStore.id, {
+ method: 'GET',
+ onResponse: ({ response }) => {
+ if (!response.ok) {
+ if (response.status === 401) {
+ expireAuth()
+ return
+ } else {
+ errorStore.setError(response._data.message || 'An unknown error occurred');
}
- },
- });
+ }
+
+ if (response._data) {
+ let schedule = (response._data as any).data.schedule
+ scheduleStore.setSchedule(schedule);
+
+ conferenceStore.venue = schedule.conference.venue
+ conferenceStore.title = schedule.conference.title
+ conferenceStore.city = schedule.conference.city
+
+ scheduleStore.status = 'idle'
+ }
+ },
+ }).catch(() => {
+ // todo do this better
+ errorStore.setError('An unknown error occurred');
+ });
} \ No newline at end of file
diff --git a/web/composables/logout.ts b/web/composables/logout.ts
new file mode 100644
index 0000000..35b0511
--- /dev/null
+++ b/web/composables/logout.ts
@@ -0,0 +1,15 @@
+export function logout() {
+ const authStore = useAuthStore()
+ const conferenceStore = useConferenceStore()
+ const config = useRuntimeConfig();
+
+ $api(config.public.baseURL + '/logout', { method: 'POST' }).finally(() => {
+ authStore.admin = false;
+ authStore.username = null;
+ authStore.token = null;
+
+ conferenceStore.clear()
+
+ navigateTo({ path: '/login', state: { error: 'You have logged out' } });
+ })
+} \ No newline at end of file