Merge branch 'feature/opinionated-sql' of github.com:Budibase/budibase into feature/opinionated-sql
This commit is contained in:
commit
c18cfcf84f
|
@ -37,7 +37,7 @@ Cypress.Commands.add("createApp", name => {
|
||||||
cy.contains("Create app").click()
|
cy.contains("Create app").click()
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
cy.contains("Budibase DB", {
|
cy.get(".selected > .content", {
|
||||||
timeout: 20000,
|
timeout: 20000,
|
||||||
}).should("be.visible")
|
}).should("be.visible")
|
||||||
})
|
})
|
||||||
|
@ -51,7 +51,7 @@ Cypress.Commands.add("deleteApp", () => {
|
||||||
.then(val => {
|
.then(val => {
|
||||||
console.log(val)
|
console.log(val)
|
||||||
if (val.length > 0) {
|
if (val.length > 0) {
|
||||||
cy.get(".hoverable > use").click()
|
cy.get(".title > :nth-child(3) > .spectrum-Icon").click()
|
||||||
cy.contains("Delete").click()
|
cy.contains("Delete").click()
|
||||||
cy.get(".spectrum-Button--warning").click()
|
cy.get(".spectrum-Button--warning").click()
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ Cypress.Commands.add("createTestTableWithData", () => {
|
||||||
|
|
||||||
Cypress.Commands.add("createTable", tableName => {
|
Cypress.Commands.add("createTable", tableName => {
|
||||||
// Enter table name
|
// Enter table name
|
||||||
cy.get("Budibase DB")
|
cy.contains("Budibase DB").click()
|
||||||
cy.contains("Create new table").click()
|
cy.contains("Create new table").click()
|
||||||
cy.get(".spectrum-Modal").within(() => {
|
cy.get(".spectrum-Modal").within(() => {
|
||||||
cy.get("input").first().type(tableName).blur()
|
cy.get("input").first().type(tableName).blur()
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Navigate to new table
|
// Navigate to new table
|
||||||
$goto(`./table/${table._id}`)
|
$goto(`../../table/${table._id}`)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
<script>
|
<script>
|
||||||
import { Button, Heading, Body, Layout, Modal } from "@budibase/bbui"
|
import { Button, Heading, Body, Layout, Modal, Divider } from "@budibase/bbui"
|
||||||
import CreateTableModal from "components/backend/TableNavigator/modals/CreateTableModal.svelte"
|
import CreateTableModal from "components/backend/TableNavigator/modals/CreateTableModal.svelte"
|
||||||
|
import ICONS from "components/backend/DatasourceNavigator/icons"
|
||||||
|
import { tables } from "stores/backend"
|
||||||
|
import { goto } from "@roxi/routify"
|
||||||
|
|
||||||
let modal
|
let modal
|
||||||
</script>
|
</script>
|
||||||
|
@ -9,10 +12,68 @@
|
||||||
<CreateTableModal />
|
<CreateTableModal />
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
<Layout>
|
<section>
|
||||||
<Heading>Budibase Internal DB</Heading>
|
<Layout>
|
||||||
|
<header>
|
||||||
|
<svelte:component
|
||||||
|
this={ICONS.BUDIBASE}
|
||||||
|
height="26"
|
||||||
|
width="26"
|
||||||
|
/>
|
||||||
|
<Heading size="M">Budibase Internal</Heading>
|
||||||
|
</header>
|
||||||
|
<Body size="S" grey lh>Budibase internal tables are part of your app, the data will be stored in your apps context.</Body>
|
||||||
|
<Divider />
|
||||||
|
<Heading size="S">Tables</Heading>
|
||||||
|
<div class="table-list">
|
||||||
|
{#each $tables.list.filter(table => table.type !== "external") as table}
|
||||||
|
<div class="table-list-item" on:click={$goto(`../../table/${table._id}`)}>
|
||||||
|
<Body size="S">{table.name}</Body>
|
||||||
|
{#if table.primaryDisplay}
|
||||||
|
<Body size="S">display column: {table.primaryDisplay}</Body>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<Button cta on:click={modal.show}>Create new table</Button>
|
<Button cta on:click={modal.show}>Create new table</Button>
|
||||||
</div>
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
section {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 640px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
margin: 0 0 var(--spacing-xs) 0;
|
||||||
|
display: flex;
|
||||||
|
gap: var(--spacing-l);
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--spacing-m);
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-list-item {
|
||||||
|
border-radius: var(--border-radius-m);
|
||||||
|
background: var(--background);
|
||||||
|
border: var(--border-dark);
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 2fr 0.75fr 20px;
|
||||||
|
align-items: center;
|
||||||
|
padding: var(--spacing-m);
|
||||||
|
gap: var(--layout-xs);
|
||||||
|
transition: 200ms background ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-list-item:hover {
|
||||||
|
background: var(--grey-1);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -35,6 +35,7 @@ function outputProcessing(rows, table) {
|
||||||
}
|
}
|
||||||
row._id = generateRowIdField(idParts)
|
row._id = generateRowIdField(idParts)
|
||||||
row.tableId = table._id
|
row.tableId = table._id
|
||||||
|
row._rev = "rev"
|
||||||
}
|
}
|
||||||
return rows
|
return rows
|
||||||
}
|
}
|
||||||
|
@ -176,7 +177,6 @@ exports.bulkDestroy = async ctx => {
|
||||||
const appId = ctx.appId
|
const appId = ctx.appId
|
||||||
const { rows } = ctx.request.body
|
const { rows } = ctx.request.body
|
||||||
const tableId = ctx.params.tableId
|
const tableId = ctx.params.tableId
|
||||||
// TODO: this can probably be optimised to a single SQL statement in the future
|
|
||||||
let promises = []
|
let promises = []
|
||||||
for (let row of rows) {
|
for (let row of rows) {
|
||||||
promises.push(
|
promises.push(
|
||||||
|
@ -232,7 +232,7 @@ exports.search = async ctx => {
|
||||||
sort,
|
sort,
|
||||||
paginate: {
|
paginate: {
|
||||||
limit: 1,
|
limit: 1,
|
||||||
page: bookmark + 1,
|
page: (bookmark * limit) + 1,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
hasNextPage = nextRows.length > 0
|
hasNextPage = nextRows.length > 0
|
||||||
|
|
Loading…
Reference in New Issue