Compare commits
1 Commits
main
..
03eb3ea3c0
| Author | SHA1 | Date | |
|---|---|---|---|
| 03eb3ea3c0 |
+1
-1
@@ -12,7 +12,7 @@ COPY . /build
|
|||||||
RUN npm run postinstall && npm run generate && npm run lint
|
RUN npm run postinstall && npm run generate && npm run lint
|
||||||
#RUN yarn start:ci & yarn wait && yarn test:cypress
|
#RUN yarn start:ci & yarn wait && yarn test:cypress
|
||||||
|
|
||||||
FROM amd64/nginx:1.30.0@sha256:56b5242e586f44c59e6de3b831207225c810ed23bb22d67e8e0af902a0c2ed88
|
FROM amd64/nginx:1.29.5@sha256:c2a63cf3b2905e3ff73b0746cbd79e4d5b88fb70c56e9ce63d6537c1e5cc68d8
|
||||||
MAINTAINER Joakim Olsson <joakim@unbound.se>
|
MAINTAINER Joakim Olsson <joakim@unbound.se>
|
||||||
|
|
||||||
COPY --from=builder /build/.output/public/ /usr/share/nginx/html/
|
COPY --from=builder /build/.output/public/ /usr/share/nginx/html/
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card flat variant="outlined" rounded="xl">
|
<v-card flat variant="outlined" rounded="xl">
|
||||||
<v-card-title v-if="event.band">
|
<v-card-title v-if="event.band" primary-title>
|
||||||
<h3 class="text-h6 mb-0">
|
<h3 class="headline mb-0">
|
||||||
<v-icon
|
<v-icon
|
||||||
v-if="hasUser"
|
v-if="hasUser"
|
||||||
class="ml-1 mr-1 text-medium-emphasis"
|
class="ml-1 mr-1 text-medium-emphasis"
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
<v-row dense>
|
<v-row dense>
|
||||||
<v-col
|
<v-col
|
||||||
cols="12"
|
cols="12"
|
||||||
|
xs="12"
|
||||||
sm="6"
|
sm="6"
|
||||||
>
|
>
|
||||||
<strong class="mr-1" v-text="t('events.date')" />{{
|
<strong class="mr-1" v-text="t('events.date')" />{{
|
||||||
@@ -24,7 +25,7 @@
|
|||||||
}}
|
}}
|
||||||
({{ weekday }} {{ daysUntil }})
|
({{ weekday }} {{ daysUntil }})
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col v-if="event.time" cols="12" sm="6">
|
<v-col v-if="event.time" cols="12" xs="12" sm="6">
|
||||||
<strong class="mr-1" v-text="t('events.time')" />{{
|
<strong class="mr-1" v-text="t('events.time')" />{{
|
||||||
event.time
|
event.time
|
||||||
}}
|
}}
|
||||||
@@ -33,6 +34,7 @@
|
|||||||
<v-row v-if="event.danceHall" dense>
|
<v-row v-if="event.danceHall" dense>
|
||||||
<v-col
|
<v-col
|
||||||
cols="12"
|
cols="12"
|
||||||
|
xs="12"
|
||||||
sm="6"
|
sm="6"
|
||||||
>
|
>
|
||||||
<strong class="mr-1" v-text="t('events.hall')" />
|
<strong class="mr-1" v-text="t('events.hall')" />
|
||||||
@@ -48,6 +50,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col
|
<v-col
|
||||||
cols="12"
|
cols="12"
|
||||||
|
xs="12"
|
||||||
sm="6"
|
sm="6"
|
||||||
>
|
>
|
||||||
<strong class="mr-1" v-text="t('events.city')" />
|
<strong class="mr-1" v-text="t('events.city')" />
|
||||||
@@ -63,6 +66,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col
|
<v-col
|
||||||
cols="12"
|
cols="12"
|
||||||
|
xs="12"
|
||||||
sm="6"
|
sm="6"
|
||||||
>
|
>
|
||||||
<strong class="mr-1" v-text="t('events.municipality')" />
|
<strong class="mr-1" v-text="t('events.municipality')" />
|
||||||
@@ -80,6 +84,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col
|
<v-col
|
||||||
cols="12"
|
cols="12"
|
||||||
|
xs="12"
|
||||||
sm="6"
|
sm="6"
|
||||||
>
|
>
|
||||||
<strong class="mr-1" v-text="t('events.state')" />
|
<strong class="mr-1" v-text="t('events.state')" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<v-row v-for="event in events" :key="event.id">
|
<v-row v-for="event in events" :key="event.id" wrap>
|
||||||
<v-col cols="12">
|
<v-col xs="12">
|
||||||
<event-card
|
<event-card
|
||||||
:event="event"
|
:event="event"
|
||||||
:has-user="hasUser"
|
:has-user="hasUser"
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<div :key="isAuthenticated ? 'true' : 'false'">
|
<div :key="isAuthenticated ? 'true' : 'false'">
|
||||||
<v-container :key="range" fluid class="app-fade-in">
|
<v-container :key="range" fluid grid-list-md class="app-fade-in">
|
||||||
<v-row v-if="!isAuthenticated">
|
<v-row v-if="!isAuthenticated" wrap>
|
||||||
<v-col cols="12">
|
<v-col xs="12">
|
||||||
<p><b v-text="t('events.login')" /></p>
|
<p><b v-text="t('events.login')" /></p>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row wrap>
|
||||||
<v-col cols="12">
|
<v-col xs="12">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="origin"
|
v-model="origin"
|
||||||
variant="underlined"
|
variant="underlined"
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
:placeholder="t('origins.geolocation')"
|
:placeholder="t('origins.geolocation')"
|
||||||
>
|
>
|
||||||
<template #append>
|
<template #append>
|
||||||
<v-tooltip location="top">
|
<v-tooltip top>
|
||||||
<template #activator="{ props }">
|
<template #activator="{ props }">
|
||||||
<v-icon
|
<v-icon
|
||||||
icon='mdi-crosshairs-gps'
|
icon='mdi-crosshairs-gps'
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
</template>
|
</template>
|
||||||
<template #prepend>
|
<template #prepend>
|
||||||
<v-tooltip v-if="isAuthenticated" location="top">
|
<v-tooltip v-if="isAuthenticated" top>
|
||||||
<template #activator="{ props }">
|
<template #activator="{ props }">
|
||||||
<v-icon
|
<v-icon
|
||||||
icon='mdi-bookmark-plus-outline'
|
icon='mdi-bookmark-plus-outline'
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row wrap>
|
||||||
<v-col>
|
<v-col>
|
||||||
<v-btn-toggle
|
<v-btn-toggle
|
||||||
v-if="smAndUp"
|
v-if="smAndUp"
|
||||||
@@ -65,12 +65,12 @@
|
|||||||
/>
|
/>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row>
|
<v-row wrap>
|
||||||
<v-col cols="12" sm="8">
|
<v-col cols="12" sm="8">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="state.search"
|
v-model="state.search"
|
||||||
variant="underlined"
|
variant="underlined"
|
||||||
append-icon="mdi-magnify"
|
append-outer-icon="mdi-magnify"
|
||||||
:label="t('events.filter')"
|
:label="t('events.filter')"
|
||||||
:placeholder="t('events.filter')"
|
:placeholder="t('events.filter')"
|
||||||
hide-details
|
hide-details
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<v-list-item v-for="item in model" :key="item" :title="item">
|
<v-list-item v-for="item in model" :key="item" :title="item">
|
||||||
<template #prepend>
|
<template #prepend>
|
||||||
<v-list-item-action @click="toggleIgnore(type, item)">
|
<v-list-item-action @click="toggleIgnore(type, item)">
|
||||||
<v-tooltip location="top">
|
<v-tooltip top>
|
||||||
<template #activator="{ props }">
|
<template #activator="{ props }">
|
||||||
<v-icon icon='mdi-delete-outline' v-bind="props" />
|
<v-icon icon='mdi-delete-outline' v-bind="props" />
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div :key="isAuthenticated ? 'true' : 'false'">
|
<div :key="isAuthenticated ? 'true' : 'false'">
|
||||||
<v-container fluid class="app-fade-in">
|
<v-container fluid grid-list-md class="app-fade-in">
|
||||||
<v-row>
|
<v-row wrap>
|
||||||
<v-col cols="12">
|
<v-col cols="12">
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-container fluid>
|
<v-container fluid grid-list-md>
|
||||||
<v-row>
|
<v-row wrap>
|
||||||
<v-col cols="12" sm="12" md="4" lg="4">
|
<v-col xs="12" sm="12" md="4" lg="4">
|
||||||
<list
|
<list
|
||||||
:model="bands || []"
|
:model="bands || []"
|
||||||
title-key="filters.band"
|
title-key="filters.band"
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
:toggle-ignore="toggleIgnore"
|
:toggle-ignore="toggleIgnore"
|
||||||
/>
|
/>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="12" md="4" lg="4">
|
<v-col xs="12" sm="12" md="4" lg="4">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12">
|
<v-col cols="12">
|
||||||
<list
|
<list
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div :key="isAuthenticated ? 'true' : 'false'">
|
<div :key="isAuthenticated ? 'true' : 'false'">
|
||||||
<v-container fluid class="app-fade-in">
|
<v-container fluid grid-list-md class="app-fade-in">
|
||||||
<v-row>
|
<v-layout row wrap>
|
||||||
<v-col cols="12">
|
<v-col xs="12">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="origin"
|
v-model="origin"
|
||||||
variant="underlined"
|
variant="underlined"
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
:placeholder="t('origins.geolocation')"
|
:placeholder="t('origins.geolocation')"
|
||||||
>
|
>
|
||||||
<template #append>
|
<template #append>
|
||||||
<v-tooltip location="top">
|
<v-tooltip top>
|
||||||
<template #activator="{ props }">
|
<template #activator="{ props }">
|
||||||
<v-icon
|
<v-icon
|
||||||
icon='mdi-crosshairs-gps'
|
icon='mdi-crosshairs-gps'
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
</template>
|
</template>
|
||||||
<template #prepend>
|
<template #prepend>
|
||||||
<v-tooltip location="top">
|
<v-tooltip top>
|
||||||
<template #activator="{ props }">
|
<template #activator="{ props }">
|
||||||
<v-icon
|
<v-icon
|
||||||
icon='mdi-bookmark-plus-outline'
|
icon='mdi-bookmark-plus-outline'
|
||||||
@@ -36,10 +36,10 @@
|
|||||||
</template>
|
</template>
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-layout>
|
||||||
<v-row v-for="o in origins" :key="o">
|
<v-layout v-for="o in origins" :key="o" row wrap>
|
||||||
<v-col cols="12">
|
<v-col xs="12">
|
||||||
<v-tooltip location="top">
|
<v-tooltip top>
|
||||||
<template #activator="{ props }">
|
<template #activator="{ props }">
|
||||||
<v-icon
|
<v-icon
|
||||||
icon='mdi-delete-outline'
|
icon='mdi-delete-outline'
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
<span>{{ o }}</span>
|
<span>{{ o }}</span>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-layout>
|
||||||
</v-container>
|
</v-container>
|
||||||
<v-snackbar
|
<v-snackbar
|
||||||
v-model="snackbar.active"
|
v-model="snackbar.active"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-app :key='locale + isAuthenticated'>
|
<v-app :key='locale + isAuthenticated'>
|
||||||
<v-navigation-drawer v-model='nav' temporary>
|
<v-navigation-drawer v-model='nav' temporary app>
|
||||||
<v-list density="compact">
|
<v-list dense>
|
||||||
<v-list-item v-if='isAuthenticated && user' :title='user.name' :prepend-avatar='user.picture' />
|
<v-list-item v-if='isAuthenticated && user' :title='user.name' :prepend-avatar='user.picture' />
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-switch v-model='darkMode' color='primary' :label="t('app.darkMode')" hide-details class='ms-1' />
|
<v-switch v-model='darkMode' color='primary' :label="t('app.darkMode')" hide-details class='ms-1' />
|
||||||
@@ -35,7 +35,7 @@ v-if='isAuthenticated' link :title="t('app.logout')" prepend-icon='mdi-logout'
|
|||||||
@click='doLogout' />
|
@click='doLogout' />
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-navigation-drawer>
|
</v-navigation-drawer>
|
||||||
<v-app-bar scroll-behavior="hide">
|
<v-app-bar app scroll-off-screen>
|
||||||
<v-app-bar-nav-icon @click='nav = !nav' />
|
<v-app-bar-nav-icon @click='nav = !nav' />
|
||||||
<v-toolbar-title :title='title' />
|
<v-toolbar-title :title='title' />
|
||||||
<v-spacer />
|
<v-spacer />
|
||||||
|
|||||||
+1
-13
@@ -18,22 +18,10 @@ const cache = new InMemoryCache({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const STALE_AUTH_ERRORS = new Set([
|
|
||||||
'login_required',
|
|
||||||
'consent_required',
|
|
||||||
'interaction_required',
|
|
||||||
'invalid_grant',
|
|
||||||
'missing_refresh_token',
|
|
||||||
])
|
|
||||||
|
|
||||||
const getToken = async (options: GetTokenSilentlyOptions) => {
|
const getToken = async (options: GetTokenSilentlyOptions) => {
|
||||||
const nuxtApp = useNuxtApp()
|
const nuxtApp = useNuxtApp()
|
||||||
const auth0: Auth0VueClient = nuxtApp.$auth0 as Auth0VueClient
|
const auth0: Auth0VueClient = nuxtApp.$auth0 as Auth0VueClient
|
||||||
return await auth0.getAccessTokenSilently(options).catch((err) => {
|
return await auth0.getAccessTokenSilently(options).catch(() => {
|
||||||
const code = err && typeof err === 'object' && 'error' in err ? (err as { error?: string }).error : undefined
|
|
||||||
if (code && STALE_AUTH_ERRORS.has(code)) {
|
|
||||||
auth0.logout({ openUrl: false }).catch(() => {})
|
|
||||||
}
|
|
||||||
return undefined
|
return undefined
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ spec:
|
|||||||
cpu: 10m
|
cpu: 10m
|
||||||
memory: 10Mi
|
memory: 10Mi
|
||||||
limits:
|
limits:
|
||||||
|
cpu: 300m
|
||||||
memory: 300Mi
|
memory: 300Mi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -66,22 +66,6 @@ export default defineNuxtConfig({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
optimizeDeps: {
|
|
||||||
include: [
|
|
||||||
'@vue/devtools-core',
|
|
||||||
'@vue/devtools-kit',
|
|
||||||
'@auth0/auth0-vue',
|
|
||||||
'@apollo/client/core',
|
|
||||||
'@apollo/client/link/context',
|
|
||||||
'@apollo/client/link/ws',
|
|
||||||
'@apollo/client/utilities',
|
|
||||||
'@opentelemetry/api',
|
|
||||||
'@vue/apollo-composable',
|
|
||||||
'@grafana/faro-web-sdk',
|
|
||||||
'@grafana/faro-web-tracing',
|
|
||||||
'@opentelemetry/instrumentation-fetch',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
resolve: {
|
resolve: {
|
||||||
dedupe: ['pinia'],
|
dedupe: ['pinia'],
|
||||||
},
|
},
|
||||||
|
|||||||
Generated
+7393
-6411
File diff suppressed because it is too large
Load Diff
+32
-30
@@ -16,46 +16,48 @@
|
|||||||
"codegen": "graphql-codegen && eslint graphql/generated/operations.ts --fix"
|
"codegen": "graphql-codegen && eslint graphql/generated/operations.ts --fix"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "20.5.3",
|
"@commitlint/cli": "20.4.1",
|
||||||
"@commitlint/config-conventional": "20.5.3",
|
"@commitlint/config-conventional": "20.4.1",
|
||||||
"@graphql-codegen/cli": "7.0.0",
|
"@graphql-codegen/cli": "6.1.1",
|
||||||
"@graphql-codegen/fragment-matcher": "7.0.0",
|
"@graphql-codegen/fragment-matcher": "6.0.0",
|
||||||
"@graphql-codegen/typescript": "6.0.1",
|
"@graphql-codegen/typescript": "5.0.7",
|
||||||
"@graphql-codegen/typescript-operations": "6.0.1",
|
"@graphql-codegen/typescript-operations": "5.0.7",
|
||||||
"@graphql-codegen/typescript-vue-apollo": "5.0.1",
|
"@graphql-codegen/typescript-vue-apollo": "4.1.2",
|
||||||
"@nuxt/devtools": "3.2.4",
|
"@nuxt/devtools": "3.2.1",
|
||||||
"@nuxt/eslint": "1.15.2",
|
"@nuxt/eslint": "1.15.1",
|
||||||
"@nuxtjs/i18n": "10.3.0",
|
"@nuxtjs/eslint-module": "4.1.0",
|
||||||
"@stylistic/eslint-plugin": "5.10.0",
|
"@nuxtjs/i18n": "10.2.3",
|
||||||
"@vue/test-utils": "2.4.10",
|
"@stylistic/eslint-plugin": "5.8.0",
|
||||||
"esbuild": "0.28.0",
|
"@vue/test-utils": "2.4.6",
|
||||||
"eslint": "10.3.0",
|
"esbuild": "0.27.3",
|
||||||
"eslint-plugin-simple-import-sort": "13.0.0",
|
"eslint": "9.39.2",
|
||||||
"eslint-plugin-vue": "10.9.1",
|
"eslint-plugin-nuxt": "4.0.0",
|
||||||
"nuxt": "4.4.4",
|
"eslint-plugin-simple-import-sort": "12.1.1",
|
||||||
|
"eslint-plugin-vue": "10.7.0",
|
||||||
|
"nuxt": "4.3.1",
|
||||||
"postcss-html": "1.8.1",
|
"postcss-html": "1.8.1",
|
||||||
"sass": "1.99.0",
|
"sass": "1.97.3",
|
||||||
"stylelint": "17.11.0",
|
"stylelint": "17.3.0",
|
||||||
"stylelint-config-recommended-vue": "1.6.1",
|
"stylelint-config-recommended-vue": "1.6.1",
|
||||||
"stylelint-config-standard": "40.0.0",
|
"stylelint-config-standard": "40.0.0",
|
||||||
"typescript": "6.0.3",
|
"typescript": "5.9.3",
|
||||||
"typescript-eslint": "8.59.2",
|
"typescript-eslint": "8.55.0",
|
||||||
"vite-plugin-vuetify": "2.1.3",
|
"vite-plugin-vuetify": "2.1.3",
|
||||||
"vue": "3.5.33",
|
"vue": "3.5.28",
|
||||||
"vue-eslint-parser": "10.4.0",
|
"vue-eslint-parser": "10.3.0",
|
||||||
"vue-router": "5.0.6",
|
"vue-router": "5.0.2",
|
||||||
"vuetify": "4.0.6"
|
"vuetify": "3.11.8"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@apollo/client": "3.14.1",
|
"@apollo/client": "3.14.0",
|
||||||
"@auth0/auth0-vue": "2.6.1",
|
"@auth0/auth0-vue": "2.5.0",
|
||||||
"@grafana/faro-web-sdk": "2.5.0",
|
"@grafana/faro-web-sdk": "2.2.3",
|
||||||
"@grafana/faro-web-tracing": "2.5.0",
|
"@grafana/faro-web-tracing": "2.2.3",
|
||||||
"@mdi/font": "7.4.47",
|
"@mdi/font": "7.4.47",
|
||||||
"@pinia/nuxt": "0.11.3",
|
"@pinia/nuxt": "0.11.3",
|
||||||
"@vue/apollo-composable": "4.2.2",
|
"@vue/apollo-composable": "4.2.2",
|
||||||
"date-fns": "4.1.0",
|
"date-fns": "4.1.0",
|
||||||
"graphql": "16.14.0",
|
"graphql": "16.12.0",
|
||||||
"graphql-tag": "2.12.6",
|
"graphql-tag": "2.12.6",
|
||||||
"pinia": "3.0.4",
|
"pinia": "3.0.4",
|
||||||
"pinia-plugin-persistedstate": "4.7.1",
|
"pinia-plugin-persistedstate": "4.7.1",
|
||||||
|
|||||||
+1
-4
@@ -17,8 +17,5 @@
|
|||||||
"stylelint-config-standard"
|
"stylelint-config-standard"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"constraints": {
|
|
||||||
"node": ">=24"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user