From 850affbd55fee9cd48a82ade94a3a5e60fd737a8 Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Wed, 22 Jan 2025 02:09:56 +0000 Subject: Add version and some icons --- assets/css/main.css | 6 ++-- components/Nav.vue | 16 ++++++--- components/Panel.vue | 58 +++++++++++++++++++++++++++++++ components/Sidebar.vue | 5 +++ components/Version.vue | 26 ++++++++++++++ composables/fetch-favourites.ts | 23 +++++++++++++ composables/fetch-schedule.ts | 24 +++++++++++++ layouts/default.vue | 75 +++++++++++++---------------------------- nuxt.config.ts | 16 +++++++-- pages/agenda.vue | 16 +++------ pages/events.vue | 13 ++++--- pages/login.vue | 19 ++++++++++- pages/register.vue | 13 +++++++ pages/tracks/[slug].vue | 23 ++++++------- pages/tracks/index.vue | 5 ++- stores/error.ts | 1 - 16 files changed, 243 insertions(+), 96 deletions(-) create mode 100644 components/Version.vue create mode 100644 composables/fetch-favourites.ts create mode 100644 composables/fetch-schedule.ts diff --git a/assets/css/main.css b/assets/css/main.css index 1ece5c0..4af7ef0 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -8,11 +8,11 @@ --color-error: #f8d7da; --color-success: #d1e7dd; --color-text: #000; + --color-text-error: #cf2f27; --color-text-muted: #4b5563; + --color-text-muted-light: #6b7280; --color-background-muted: #f3f4f6; --color-background: #fff; - --color-background-error: #cf2f27; - --color-background-error-dark: #c12820; --color-border: #d1d9e0; --color-border-error: #f1aeb5; --color-border-success: #a3cfbb; @@ -84,6 +84,6 @@ ul { span.text-icon { display: flex; - align-items: centerg; + align-items: center; gap: 0.4em; } \ No newline at end of file diff --git a/components/Nav.vue b/components/Nav.vue index 06a0295..280af02 100644 --- a/components/Nav.vue +++ b/components/Nav.vue @@ -1,10 +1,12 @@ @@ -21,6 +39,46 @@ defineProps({ border-radius: 0.5rem; } +.card-title-container { + line-height: 1; + background-color: var(--color-background-muted); + padding: 1rem 1rem; + margin: -1rem -1rem 1rem -1rem; + border-top-left-radius: 0.5rem; + border-top-right-radius: 0.5rem;; + border-bottom: 1px solid var(--color-border); + display: flex; + align-items: center; + gap: 0.5rem; +} + +.card-title { + font-size: 1.5rem; + font-weight: 700; +} + +.breadcrumb { + font-size: 1.2rem; + font-weight: 600; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.breadcrumb > svg { + width: 1.2rem; + height: 1.2rem; + color: var(--color-text-muted); +} + +.breadcrumb > a { + color: var(--color-text-muted); +} + +.breadcrumb > a:hover { + color: var(--color-primary); +} + .normal { background-color: white; border: 0.1rem solid var(--color-border); diff --git a/components/Sidebar.vue b/components/Sidebar.vue index 0dca27a..3d33586 100644 --- a/components/Sidebar.vue +++ b/components/Sidebar.vue @@ -45,6 +45,8 @@ const timeUntilConferenceStart = computed(() => {
Times listed are in local time ({{ scheduleStore.schedule?.conference.timeZoneName }}) + +
@@ -91,6 +93,9 @@ const timeUntilConferenceStart = computed(() => { font-size: var(--text-smaller); color: var(--color-text-muted); margin: 0 1rem; + display: flex; + flex-direction: column; + gap: 0.5rem; } \ No newline at end of file diff --git a/components/Version.vue b/components/Version.vue new file mode 100644 index 0000000..a5bca5e --- /dev/null +++ b/components/Version.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/composables/fetch-favourites.ts b/composables/fetch-favourites.ts new file mode 100644 index 0000000..97b443a --- /dev/null +++ b/composables/fetch-favourites.ts @@ -0,0 +1,23 @@ +export default function useFetchFavourites() { + const favouritesStore = useFavouritesStore(); + const errorStore = useErrorStore(); + const config = useRuntimeConfig(); + + favouritesStore.setStatus('pending') + + useFetch(config.public.baseURL + '/favourites', { + method: 'GET', + server: false, + lazy: true, + onResponseError: ({ response }) => { + favouritesStore.setStatus('idle') + errorStore.setError(response._data.message || 'An unknown error occurred'); + }, + onResponse: ({ response }) => { + if (response._data) { + favouritesStore.setFavourites((response._data as any).data); + } + favouritesStore.setStatus('idle') + }, + }); +} \ No newline at end of file diff --git a/composables/fetch-schedule.ts b/composables/fetch-schedule.ts new file mode 100644 index 0000000..09d0a25 --- /dev/null +++ b/composables/fetch-schedule.ts @@ -0,0 +1,24 @@ +export default function useFetchFavourites() { + 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({ name: 'login', state: { error: 'Sorry, your session has expired' } }); + } else { + errorStore.setError(response._data.message || 'An unknown error occurred'); + } + } + + if (response._data) { + scheduleStore.setSchedule((response._data as any).data.schedule); + } + }, + }); +} \ No newline at end of file diff --git a/layouts/default.vue b/layouts/default.vue index 92641a0..9c477aa 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -1,5 +1,5 @@