Add ability to update views, create views with existing filters and sorting applied
This commit is contained in:
parent
1aea6fce09
commit
8204935dfa
|
@ -1,11 +1,17 @@
|
||||||
<script>
|
<script>
|
||||||
|
import { getContext } from "svelte"
|
||||||
import { Input, notifications, ModalContent } from "@budibase/bbui"
|
import { Input, notifications, ModalContent } from "@budibase/bbui"
|
||||||
import { goto } from "@roxi/routify"
|
import { goto } from "@roxi/routify"
|
||||||
import { viewsV2 } from "stores/backend"
|
import { viewsV2 } from "stores/backend"
|
||||||
import { tables } from "stores/backend"
|
import { tables } from "stores/backend"
|
||||||
|
import { LuceneUtils } from "@budibase/frontend-core"
|
||||||
|
|
||||||
|
const { filter, sort, table } = getContext("grid")
|
||||||
|
|
||||||
|
$: query = LuceneUtils.buildLuceneQuery($filter)
|
||||||
|
$: console.log($table.schema)
|
||||||
|
|
||||||
let name
|
let name
|
||||||
let field
|
|
||||||
|
|
||||||
$: views = Object.keys($tables.selected?.views || {})
|
$: views = Object.keys($tables.selected?.views || {})
|
||||||
$: nameExists = views.includes(name?.trim())
|
$: nameExists = views.includes(name?.trim())
|
||||||
|
@ -16,7 +22,12 @@
|
||||||
const newView = await viewsV2.create({
|
const newView = await viewsV2.create({
|
||||||
name,
|
name,
|
||||||
tableId: $tables.selected._id,
|
tableId: $tables.selected._id,
|
||||||
field,
|
query,
|
||||||
|
sort: {
|
||||||
|
field: $sort.column,
|
||||||
|
order: $sort.order,
|
||||||
|
},
|
||||||
|
columns: $table.schema,
|
||||||
})
|
})
|
||||||
notifications.success(`View ${name} created`)
|
notifications.success(`View ${name} created`)
|
||||||
$goto(`../../view/v2/${newView.id}`)
|
$goto(`../../view/v2/${newView.id}`)
|
||||||
|
|
|
@ -14,7 +14,10 @@ export const createGridWebsocket = context => {
|
||||||
const appId = API.getAppID()
|
const appId = API.getAppID()
|
||||||
socket.emit(
|
socket.emit(
|
||||||
GridSocketEvent.SelectDatasource,
|
GridSocketEvent.SelectDatasource,
|
||||||
{ datasource, appId },
|
{
|
||||||
|
datasource,
|
||||||
|
appId,
|
||||||
|
},
|
||||||
({ users: gridUsers }) => {
|
({ users: gridUsers }) => {
|
||||||
users.set(gridUsers)
|
users.set(gridUsers)
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,8 @@ export const deriveStores = context => {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const createActions = context => {
|
export const createActions = context => {
|
||||||
const { table, columns, stickyColumn, API, dispatch, config } = context
|
const { table, columns, stickyColumn, API, dispatch, config, datasource } =
|
||||||
|
context
|
||||||
|
|
||||||
// Checks if we have a certain column by name
|
// Checks if we have a certain column by name
|
||||||
const hasColumn = column => {
|
const hasColumn = column => {
|
||||||
|
@ -137,12 +138,19 @@ export const createActions = context => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const saveTable = async newTable => {
|
const saveTable = async newTable => {
|
||||||
|
const $config = get(config)
|
||||||
|
const $datasource = get(datasource)
|
||||||
|
|
||||||
// Update local state
|
// Update local state
|
||||||
table.set(newTable)
|
table.set(newTable)
|
||||||
|
|
||||||
// Update server
|
// Update server
|
||||||
if (get(config).canSaveSchema) {
|
if ($config.canSaveSchema) {
|
||||||
|
if ($datasource.type === "table") {
|
||||||
await API.saveTable(newTable)
|
await API.saveTable(newTable)
|
||||||
|
} else if ($datasource.type === "viewV2") {
|
||||||
|
await API.viewV2.update({ ...newTable })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Broadcast change to external state can be updated, as this change
|
// Broadcast change to external state can be updated, as this change
|
||||||
|
|
|
@ -8,11 +8,9 @@ export default class ViewV2Fetch extends DataFetch {
|
||||||
async getDefinition(datasource) {
|
async getDefinition(datasource) {
|
||||||
try {
|
try {
|
||||||
const table = await this.API.fetchTableDefinition(datasource.tableId)
|
const table = await this.API.fetchTableDefinition(datasource.tableId)
|
||||||
const view = Object.values(table.views || {}).find(
|
return Object.values(table.views || {}).find(
|
||||||
view => view.id === datasource.id
|
view => view.id === datasource.id
|
||||||
)
|
)
|
||||||
const { schema } = view
|
|
||||||
return { schema }
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.store.update(state => ({
|
this.store.update(state => ({
|
||||||
...state,
|
...state,
|
||||||
|
|
|
@ -45,6 +45,7 @@ export async function update(tableId: string, view: ViewV2): Promise<ViewV2> {
|
||||||
throw new HTTPError(`View ${view.id} not found in table ${tableId}`, 404)
|
throw new HTTPError(`View ${view.id} not found in table ${tableId}`, 404)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("set to", view)
|
||||||
delete table.views[existingView.name]
|
delete table.views[existingView.name]
|
||||||
table.views[view.name] = view
|
table.views[view.name] = view
|
||||||
await db.put(table)
|
await db.put(table)
|
||||||
|
|
Loading…
Reference in New Issue