diff --git a/client/src/router.ts b/client/src/router.ts index 8d94d4c..806e60d 100644 --- a/client/src/router.ts +++ b/client/src/router.ts @@ -6,8 +6,7 @@ const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', component: TableView }, - { path: '/new-track', component: NewTrackView }, - { path: '/login', component: import('./views/Login.vue') } + { path: '/new-track', component: NewTrackView } // for other pages: // {path: '/', component: import('./views/TableView.vue')} ] diff --git a/client/src/state.ts b/client/src/state.ts index 13e3312..d449b60 100644 --- a/client/src/state.ts +++ b/client/src/state.ts @@ -18,19 +18,9 @@ function dateQuery(date: Date): URLSearchParams { return query } -interface LoggedInUser { - name: string -} - -class AppState { - tracks: Array - state: State - user?: LoggedInUser - - constructor() { - this.tracks = new Array - this.state = State.Unfetched - } +export const state = reactive({ + tracks: new Array, + state: State.Unfetched, streamUpdatesFromServer() { const source = new EventSource("/api/v1/updates") source.addEventListener("open", () => console.debug("opened event source")) @@ -79,17 +69,17 @@ class AppState { window.location = window.location }) window.addEventListener('beforeunload', () => source.close()) - } + }, async repopulate() { this.state = State.Fetching this.tracks = await Track.fetchAll() - } + }, async populate() { if (this.state != State.Unfetched) return await this.repopulate() this.streamUpdatesFromServer() this.state = State.Fetched - } + }, async taskCompleted(track: Track, date: Date): Promise { const query = dateQuery(date) const response: Response = await fetch(`/api/v1/tracks/${track.id}/ticked?${query.toString()}`, { method: "PATCH" }) @@ -99,13 +89,13 @@ class AppState { throw new Error(`error setting tick for track ${track.id} ("${track.name}"): ${response.status} ${response.statusText}`) } return JSON.parse(body) - } + }, async taskMarkedIncomplete(track: Track, date: Date) { const query = dateQuery(date) const { ok, status, statusText } = await fetch(`/api/v1/tracks/${track.id}/all-ticks?${query.toString()}`, { method: 'DELETE' }) if (!ok) error(`error deleting ticks for ${track.id}: ${statusText} (${status})`) - } + }, async addTrack(track: Track): Promise { const response = await fetch('/api/v1/tracks', { method: "POST", @@ -115,11 +105,9 @@ class AppState { if (!response.ok) error(`error submitting track: ${track}: ${response.statusText} (${response.status})`) return response.ok - } + }, async removeTrack(trackID: number) { const response = await fetch(`/api/v1/tracks/${trackID}`, { method: "DELETE" }) if (!response.ok) error(`error deleting track with ID ${trackID}: ${response.statusText} (${response.status})`) } -} - -export const state = reactive(new AppState) +}) diff --git a/client/src/views/Login.vue b/client/src/views/Login.vue deleted file mode 100644 index 2ef2efe..0000000 --- a/client/src/views/Login.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - - \ No newline at end of file