1 Commits

Author SHA1 Message Date
renovate 2f5a11f7bf chore(deps): update dependency vue-router to v5
dancefinder-app / build (pull_request) Failing after 47s
dancefinder-app / deploy-prod (pull_request) Has been skipped
2026-02-02 10:02:26 +00:00
14 changed files with 7618 additions and 6772 deletions
+1 -1
View File
@@ -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.4@sha256:14c54109a4bff01b4163013fc9509e7f097691c8484f5f0c6772d937c0a75a16
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/
+8 -3
View File
@@ -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')" />
+2 -2
View File
@@ -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"
+10 -10
View File
@@ -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
+1 -1
View File
@@ -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>
+6 -6
View File
@@ -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
+10 -10
View File
@@ -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"
+3 -3
View File
@@ -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
View File
@@ -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
}) })
} }
+1
View File
@@ -52,6 +52,7 @@ spec:
cpu: 10m cpu: 10m
memory: 10Mi memory: 10Mi
limits: limits:
cpu: 300m
memory: 300Mi memory: 300Mi
-16
View File
@@ -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'],
}, },
+7542 -6673
View File
File diff suppressed because it is too large Load Diff
+32 -30
View File
@@ -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.0",
"@commitlint/config-conventional": "20.5.3", "@commitlint/config-conventional": "20.4.0",
"@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.1.1",
"@nuxt/eslint": "1.15.2", "@nuxt/eslint": "1.13.0",
"@nuxtjs/i18n": "10.3.0", "@nuxtjs/eslint-module": "4.1.0",
"@stylistic/eslint-plugin": "5.10.0", "@nuxtjs/i18n": "10.2.1",
"@vue/test-utils": "2.4.10", "@stylistic/eslint-plugin": "5.7.1",
"esbuild": "0.28.0", "@vue/test-utils": "2.4.6",
"eslint": "10.3.0", "esbuild": "0.27.2",
"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.0",
"postcss-html": "1.8.1", "postcss-html": "1.8.1",
"sass": "1.99.0", "sass": "1.97.3",
"stylelint": "17.11.0", "stylelint": "17.1.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.54.0",
"vite-plugin-vuetify": "2.1.3", "vite-plugin-vuetify": "2.1.3",
"vue": "3.5.33", "vue": "3.5.27",
"vue-eslint-parser": "10.4.0", "vue-eslint-parser": "10.2.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.2",
"@grafana/faro-web-tracing": "2.5.0", "@grafana/faro-web-tracing": "2.2.2",
"@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
View File
@@ -17,8 +17,5 @@
"stylelint-config-standard" "stylelint-config-standard"
] ]
} }
], ]
"constraints": {
"node": ">=24"
}
} }