From b4d8543a5f4d9ecd0a332c47a16f775c5d9e35ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Majdand=C5=BEi=C4=87?= Date: Wed, 12 Jun 2024 09:23:24 +0200 Subject: [PATCH] Add simple db transaction controller --- src/lib/components/Header.svelte | 5 +++++ src/lib/database/index.ts | 27 +++++++++++++++++++++++++++ src/lib/store/dbState.ts | 19 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/lib/store/dbState.ts diff --git a/src/lib/components/Header.svelte b/src/lib/components/Header.svelte index aa1d284..d242e31 100644 --- a/src/lib/components/Header.svelte +++ b/src/lib/components/Header.svelte @@ -10,6 +10,8 @@ import { cn } from '$lib/utils' import { location } from 'svelte-spa-router' + import { dbStateStore } from '$lib/store/dbState' + import { DBService } from '$lib/database' // You can structure your links however you'd like, but I like to keep them in an array of objects type Link = { @@ -43,6 +45,9 @@ class="flex space-x-4 text-xl font-bold select-none" on:dragstart|preventDefault > +
T
+
C
+
R
{#each links as { href, label }} { + state.transacting = true + return state + }) + return db.execute('begin transaction') + }, + Commit() { + dbStateStore.update((state) => { + state.transacting = false + return state + }) + return db.execute('commit') + }, + Rollback() { + dbStateStore.update((state) => { + state.transacting = false + return state + }) + return db.execute('rollback') + } +} + +export { DBService } diff --git a/src/lib/store/dbState.ts b/src/lib/store/dbState.ts new file mode 100644 index 0000000..332908d --- /dev/null +++ b/src/lib/store/dbState.ts @@ -0,0 +1,19 @@ +import { writable } from 'svelte/store' + +type DBState = { + transacting: boolean +} + +function createStore() { + const state = { + transacting: false + } + const { subscribe, update, set } = writable(state) + return { + subscribe, + update, + set + } +} + +export const dbStateStore = createStore()