110 lines
2.8 KiB
JavaScript
110 lines
2.8 KiB
JavaScript
import { writable } from "svelte/store"
|
|
import api from "../api"
|
|
import { getContext } from "svelte"
|
|
|
|
/** TODO: DEMO SOLUTION
|
|
* this section should not be here, it is a quick fix for a demo
|
|
* when we reorg the backend UI, this should disappear
|
|
* **/
|
|
import { CreateEditModelModal } from "components/database/ModelDataTable/modals"
|
|
/** DEMO SOLUTION END **/
|
|
|
|
export const getBackendUiStore = () => {
|
|
const INITIAL_BACKEND_UI_STATE = {
|
|
breadcrumbs: [],
|
|
models: [],
|
|
views: [],
|
|
users: [],
|
|
selectedDatabase: {},
|
|
selectedModel: {},
|
|
}
|
|
|
|
const store = writable(INITIAL_BACKEND_UI_STATE)
|
|
|
|
store.actions = {
|
|
database: {
|
|
select: async db => {
|
|
const modelsResponse = await api.get(`/api/models`)
|
|
const viewsResponse = await api.get(`/api/views`)
|
|
const models = await modelsResponse.json()
|
|
const views = await viewsResponse.json()
|
|
store.update(state => {
|
|
state.selectedDatabase = db
|
|
if (models && models.length > 0) {
|
|
state.selectedModel = models[0]
|
|
state.selectedView = `all_${models[0]._id}`
|
|
}
|
|
state.breadcrumbs = [db.name]
|
|
state.models = models
|
|
state.views = views
|
|
return state
|
|
})
|
|
/** TODO: DEMO SOLUTION**/
|
|
if (!models || models.length === 0) {
|
|
const { open, close } = getContext("simple-modal")
|
|
open(
|
|
CreateEditModelModal,
|
|
{
|
|
onClosed: close,
|
|
},
|
|
{ styleContent: { padding: "0" } }
|
|
)
|
|
}
|
|
/** DEMO SOLUTION END **/
|
|
},
|
|
},
|
|
records: {
|
|
delete: () =>
|
|
store.update(state => {
|
|
state.selectedView = state.selectedView
|
|
return state
|
|
}),
|
|
view: record =>
|
|
store.update(state => {
|
|
state.breadcrumbs = [state.selectedDatabase.name, record._id]
|
|
return state
|
|
}),
|
|
select: record =>
|
|
store.update(state => {
|
|
state.selectedRecord = record
|
|
return state
|
|
}),
|
|
},
|
|
models: {
|
|
create: model =>
|
|
store.update(state => {
|
|
state.models.push(model)
|
|
state.models = state.models
|
|
state.selectedModel = model
|
|
state.selectedView = `all_${model._id}`
|
|
return state
|
|
}),
|
|
},
|
|
views: {
|
|
select: view =>
|
|
store.update(state => {
|
|
state.selectedView = view
|
|
return state
|
|
}),
|
|
},
|
|
users: {
|
|
create: user =>
|
|
store.update(state => {
|
|
state.users.push(user)
|
|
state.users = state.users
|
|
return state
|
|
}),
|
|
},
|
|
}
|
|
|
|
return store
|
|
}
|
|
|
|
// Store Actions
|
|
export const createDatabaseForApp = store => appInstance => {
|
|
store.update(state => {
|
|
state.appInstances.push(appInstance)
|
|
return state
|
|
})
|
|
}
|