From 071522c43f1015e06df024db8e2b1ba2f17bd584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Keviin=20=C3=85berg=20Kultalahti?= Date: Tue, 23 Mar 2021 12:04:11 +0100 Subject: [PATCH] split out views to separate store --- .../src/builderStore/store/backend/index.js | 1 + .../src/builderStore/store/backend/views.js | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 packages/builder/src/builderStore/store/backend/views.js diff --git a/packages/builder/src/builderStore/store/backend/index.js b/packages/builder/src/builderStore/store/backend/index.js index 303891e33b..441d9d6b5e 100644 --- a/packages/builder/src/builderStore/store/backend/index.js +++ b/packages/builder/src/builderStore/store/backend/index.js @@ -1,5 +1,6 @@ export { database } from "./database" export { tables } from "./tables" +export { views } from "./views" export { permissions } from "./permissions" export { roles } from "./roles" export { datasources } from "./datasources" diff --git a/packages/builder/src/builderStore/store/backend/views.js b/packages/builder/src/builderStore/store/backend/views.js new file mode 100644 index 0000000000..1b98ef9f8a --- /dev/null +++ b/packages/builder/src/builderStore/store/backend/views.js @@ -0,0 +1,49 @@ +import { writable, get } from "svelte/store" +import { tables } from "./" +import api from "../../api" + +function createViewsStore() { + const { subscribe, set, update } = writable({ + list: [], + selected: null + }) + + return { + subscribe, + select: view => { + update(state => ({ + ...state, + selected: view, + })) + tables.select() + }, + delete: async view => { + await api.delete(`/api/views/${view}`) + await tables.fetch() + }, + save: async view => { + const response = await api.post(`/api/views`, view) + const json = await response.json() + + const viewMeta = { + name: view.name, + ...json, + } + + update(state => { + const viewTable = get(tables).list.find( + table => table._id === view.tableId + ) + + if (view.originalName) delete viewTable.views[view.originalName] + viewTable.views[view.name] = viewMeta + + state.tables = state.tables + state.selectedView = viewMeta + return state + }) + }, + } +} + +export const views = createViewsStore()