diff --git a/src/hooks/heat-info.ts b/src/hooks/heat-info.ts index 2472f2f..17a2cdf 100644 --- a/src/hooks/heat-info.ts +++ b/src/hooks/heat-info.ts @@ -1,6 +1,10 @@ import { type Ref, ref, watch } from 'vue' import { useFetch, useTimeoutPoll } from '@vueuse/core' -import type { ServoCurrentHeatInfoConfig } from './stream-pools' +export interface ServoCurrentHeatInfoConfig { + system: 'servo' + baseUrl: string + competitionId?: number +} export interface ServoHeatInfo { PROGRAM: 'ON' | '' diff --git a/src/router.ts b/src/router.ts index 249e089..b13871b 100644 --- a/src/router.ts +++ b/src/router.ts @@ -8,19 +8,22 @@ const router = createRouter({ { path: '/auth', component: async () => import('./views/Auth.vue') }, { path: '/groups', component: async () => import('./views/Groups.vue'), meta: { authRequired: true, menu: 'Groups', menuOrder: 2 } }, - { path: '/groups/:groupId/live', component: async () => import('./views/Live.vue'), meta: { fullscreen: true, authRequired: true } }, - { path: '/groups/:groupId/on-floor', component: async () => import('./views/OnFloor.vue'), meta: { fullscreen: true, authRequired: true } }, - { path: '/groups/:groupId/next-up', component: async () => import('./views/NextUp.vue'), meta: { fullscreen: true, authRequired: true } }, - { path: '/groups/:groupId/leaderboard', component: async () => import('./views/Leaderboard.vue'), meta: { fullscreen: true, authRequired: true } }, + { path: '/groups/:groupId/live', component: async () => import('./views/ropescore/Live.vue'), meta: { fullscreen: true, authRequired: true } }, + { path: '/groups/:groupId/on-floor', component: async () => import('./views/ropescore/OnFloor.vue'), meta: { fullscreen: true, authRequired: true } }, + { path: '/groups/:groupId/next-up', component: async () => import('./views/ropescore/NextUp.vue'), meta: { fullscreen: true, authRequired: true } }, + { path: '/groups/:groupId/leaderboard', component: async () => import('./views/ropescore/Leaderboard.vue'), meta: { fullscreen: true, authRequired: true } }, - { path: '/device-stream', component: async () => import('./views/DeviceStreamConfig.vue'), meta: { authRequired: true, menu: 'Device Stream', menuOrder: 3 } }, - { path: '/device-stream/live', component: async () => import('./views/DeviceStreamLive.vue'), meta: { fullscreen: true, authRequired: true } }, + { path: '/device-stream', component: async () => import('./views/device-stream/Config.vue'), meta: { authRequired: true, menu: 'Device Stream', menuOrder: 3 } }, + { path: '/device-stream/display', component: async () => import('./views/device-stream/Display.vue'), meta: { fullscreen: true, authRequired: true } }, - { path: '/podium', component: async () => import('./views/PodiumConfig.vue'), meta: { menu: 'Podium', menuOrder: 4 } }, - { path: '/podium/live', component: async () => import('./views/PodiumLive.vue'), meta: { fullscreen: true } }, + { path: '/podium', component: async () => import('./views/podium/Config.vue'), meta: { menu: 'Podium', menuOrder: 4 } }, + { path: '/podium/display', component: async () => import('./views/podium/Display.vue'), meta: { fullscreen: true } }, - { path: '/on-floor-wall/', component: async () => import('./views/OnFloorWallConfig.vue'), meta: { menu: 'On Floor Wall', menuOrder: 5 } }, - { path: '/on-floor-wall/:vendor/:id', component: async () => import('./views/OnFloorWallLive.vue'), meta: { fullscreen: true } } + { path: '/on-floor-wall/', component: async () => import('./views/on-floor-wall/Config.vue'), meta: { menu: 'On Floor Wall', menuOrder: 5 } }, + { path: '/on-floor-wall/display', component: async () => import('./views/on-floor-wall/Display.vue'), meta: { fullscreen: true } }, + + { path: '/qualifiers/', component: async () => import('./views/qualifiers/Config.vue'), meta: { menu: 'Qualifiers', menuOrder: 6 } }, + { path: '/qualifiers/display', component: async () => import('./views/qualifiers/Display.vue'), meta: { fullscreen: true } } ] }) export default router diff --git a/src/views/Groups.vue b/src/views/Groups.vue index 27070ee..3ad649d 100644 --- a/src/views/Groups.vue +++ b/src/views/Groups.vue @@ -16,7 +16,7 @@ - + Live diff --git a/src/views/DeviceStreamConfig.vue b/src/views/device-stream/Config.vue similarity index 97% rename from src/views/DeviceStreamConfig.vue rename to src/views/device-stream/Config.vue index ef95d6d..96551db 100644 --- a/src/views/DeviceStreamConfig.vue +++ b/src/views/device-stream/Config.vue @@ -127,7 +127,7 @@ Screen {{ screenId }}
- + Show Scores @@ -199,15 +199,15 @@ diff --git a/src/views/qualifiers/Display.vue b/src/views/qualifiers/Display.vue new file mode 100644 index 0000000..d02ddc0 --- /dev/null +++ b/src/views/qualifiers/Display.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/src/views/qualifiers/use-qualifiers.ts b/src/views/qualifiers/use-qualifiers.ts new file mode 100644 index 0000000..1c0b89c --- /dev/null +++ b/src/views/qualifiers/use-qualifiers.ts @@ -0,0 +1,23 @@ +import { useLocalStorage } from '@vueuse/core' + +export interface QualifiersSettings { + background?: string + title?: string + subTitle?: string +} + +export interface Qualifier { + id: string + countryCode?: string + names: string[] +} + +const settings = useLocalStorage('rs-qualifiers-settings', {}) +const qualifiers = useLocalStorage('rs-qualifiers', []) + +export function useQualifiers () { + return { + settings, + qualifiers + } +} diff --git a/src/views/Leaderboard.vue b/src/views/ropescore/Leaderboard.vue similarity index 97% rename from src/views/Leaderboard.vue rename to src/views/ropescore/Leaderboard.vue index bb10b29..050a6b7 100644 --- a/src/views/Leaderboard.vue +++ b/src/views/ropescore/Leaderboard.vue @@ -121,13 +121,13 @@