Merge branch 'develop' into feature/multiselect-filters
This commit is contained in:
commit
a702828323
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"packages": [
|
"packages": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/backend-core",
|
"name": "@budibase/backend-core",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"description": "Budibase backend core libraries used in server and worker",
|
"description": "Budibase backend core libraries used in server and worker",
|
||||||
"main": "dist/src/index.js",
|
"main": "dist/src/index.js",
|
||||||
"types": "dist/src/index.d.ts",
|
"types": "dist/src/index.d.ts",
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
"test:watch": "jest --watchAll"
|
"test:watch": "jest --watchAll"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/types": "^1.1.22-alpha.0",
|
"@budibase/types": "^1.1.25-alpha.1",
|
||||||
"@techpass/passport-openidconnect": "0.3.2",
|
"@techpass/passport-openidconnect": "0.3.2",
|
||||||
"aws-sdk": "2.1030.0",
|
"aws-sdk": "2.1030.0",
|
||||||
"bcrypt": "5.0.1",
|
"bcrypt": "5.0.1",
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import BaseCache from "./base"
|
import BaseCache from "./base"
|
||||||
import { getWritethroughClient } from "../redis/init"
|
import { getWritethroughClient } from "../redis/init"
|
||||||
|
import { logWarn } from "../logging"
|
||||||
|
|
||||||
const DEFAULT_WRITE_RATE_MS = 10000
|
const DEFAULT_WRITE_RATE_MS = 10000
|
||||||
let CACHE: BaseCache | null = null
|
let CACHE: BaseCache | null = null
|
||||||
|
@ -51,10 +52,8 @@ export async function put(
|
||||||
if (err.status !== 409) {
|
if (err.status !== 409) {
|
||||||
throw err
|
throw err
|
||||||
} else {
|
} else {
|
||||||
// get the rev, update over it - this is risky, may change in future
|
// Swallow 409s but log them
|
||||||
const readDoc = await db.get(doc._id)
|
logWarn(`Ignoring conflict in write-through cache`)
|
||||||
doc._rev = readDoc._rev
|
|
||||||
await writeDb(doc)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,11 @@ export function logAlert(message: string, e?: any) {
|
||||||
console.error(`bb-alert: ${message} ${errorJson}`)
|
console.error(`bb-alert: ${message} ${errorJson}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function logWarn(message: string) {
|
||||||
|
console.warn(`bb-warn: ${message}`)
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
logAlert,
|
logAlert,
|
||||||
|
logWarn,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/bbui",
|
"name": "@budibase/bbui",
|
||||||
"description": "A UI solution used in the different Budibase projects.",
|
"description": "A UI solution used in the different Budibase projects.",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"svelte": "src/index.js",
|
"svelte": "src/index.js",
|
||||||
"module": "dist/bbui.es.js",
|
"module": "dist/bbui.es.js",
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@adobe/spectrum-css-workflow-icons": "^1.2.1",
|
"@adobe/spectrum-css-workflow-icons": "^1.2.1",
|
||||||
"@budibase/string-templates": "^1.1.22-alpha.0",
|
"@budibase/string-templates": "^1.1.25-alpha.1",
|
||||||
"@spectrum-css/actionbutton": "^1.0.1",
|
"@spectrum-css/actionbutton": "^1.0.1",
|
||||||
"@spectrum-css/actiongroup": "^1.0.1",
|
"@spectrum-css/actiongroup": "^1.0.1",
|
||||||
"@spectrum-css/avatar": "^3.0.2",
|
"@spectrum-css/avatar": "^3.0.2",
|
||||||
|
|
|
@ -26,5 +26,9 @@
|
||||||
<style>
|
<style>
|
||||||
.tooltip {
|
.tooltip {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
|
background: var(--spectrum-global-color-gray-500);
|
||||||
|
}
|
||||||
|
.spectrum-Tooltip-tip {
|
||||||
|
border-top-color: var(--spectrum-global-color-gray-500);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -57,6 +57,7 @@ filterTests(["smoke", "all"], () => {
|
||||||
cy.visit(`${Cypress.config().baseUrl}/builder`, { timeout: 5000})
|
cy.visit(`${Cypress.config().baseUrl}/builder`, { timeout: 5000})
|
||||||
cy.get(interact.SPECTRUM_SIDENAV).contains("Users").click()
|
cy.get(interact.SPECTRUM_SIDENAV).contains("Users").click()
|
||||||
cy.get(interact.SPECTRUM_TABLE, { timeout: 1000 }).contains("bbuser").click()
|
cy.get(interact.SPECTRUM_TABLE, { timeout: 1000 }).contains("bbuser").click()
|
||||||
|
cy.get(interact.SPECTRUM_HEADING).contains("bbuser", { timeout: 2000})
|
||||||
for (let i = 0; i < 3; i++) {
|
for (let i = 0; i < 3; i++) {
|
||||||
cy.get(interact.SPECTRUM_TABLE, { timeout: 3000})
|
cy.get(interact.SPECTRUM_TABLE, { timeout: 3000})
|
||||||
.eq(1)
|
.eq(1)
|
||||||
|
|
|
@ -150,7 +150,9 @@ filterTests(["all"], () => {
|
||||||
cy.get("@query").its("response.statusCode").should("eq", 200)
|
cy.get("@query").its("response.statusCode").should("eq", 200)
|
||||||
cy.get("@query").its("response.body").should("not.be.empty")
|
cy.get("@query").its("response.body").should("not.be.empty")
|
||||||
// Save query
|
// Save query
|
||||||
|
cy.intercept("**/queries").as("saveQuery")
|
||||||
cy.get(".spectrum-Button").contains("Save Query").click({ force: true })
|
cy.get(".spectrum-Button").contains("Save Query").click({ force: true })
|
||||||
|
cy.wait("@saveQuery")
|
||||||
cy.get(".spectrum-Tabs-content", { timeout: 2000 }).should("contain", queryName)
|
cy.get(".spectrum-Tabs-content", { timeout: 2000 }).should("contain", queryName)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ filterTests(['smoke', 'all'], () => {
|
||||||
})
|
})
|
||||||
cy.get(interact.SPECTRUM_MODAL).within(() => {
|
cy.get(interact.SPECTRUM_MODAL).within(() => {
|
||||||
// Enter app name before revert
|
// Enter app name before revert
|
||||||
cy.get("input").type("Cypress Tests")
|
cy.get(interact.SPECTRUM_TEXTFIELD_INPUT).type("Cypress Tests")
|
||||||
cy.intercept('**/revert').as('revertApp')
|
cy.intercept('**/revert').as('revertApp')
|
||||||
// Click Revert
|
// Click Revert
|
||||||
cy.get(interact.SPECTRUM_BUTTON).contains("Revert").click({ force: true })
|
cy.get(interact.SPECTRUM_BUTTON).contains("Revert").click({ force: true })
|
||||||
|
|
|
@ -289,7 +289,7 @@ Cypress.Commands.add("updateAppName", (changedName, noName) => {
|
||||||
})
|
})
|
||||||
|
|
||||||
Cypress.Commands.add("publishApp", resolvedAppPath => {
|
Cypress.Commands.add("publishApp", resolvedAppPath => {
|
||||||
//Assumes you have navigated to an application first
|
// Assumes you have navigated to an application first
|
||||||
cy.get(".toprightnav button.spectrum-Button")
|
cy.get(".toprightnav button.spectrum-Button")
|
||||||
.contains("Publish")
|
.contains("Publish")
|
||||||
.click({ force: true })
|
.click({ force: true })
|
||||||
|
@ -301,7 +301,7 @@ Cypress.Commands.add("publishApp", resolvedAppPath => {
|
||||||
cy.wait(1000)
|
cy.wait(1000)
|
||||||
})
|
})
|
||||||
|
|
||||||
//Verify that the app url is presented correctly to the user
|
// Verify that the app url is presented correctly to the user
|
||||||
cy.get(".spectrum-Modal [data-cy='deploy-app-success-modal']")
|
cy.get(".spectrum-Modal [data-cy='deploy-app-success-modal']")
|
||||||
.should("be.visible")
|
.should("be.visible")
|
||||||
.within(() => {
|
.within(() => {
|
||||||
|
@ -422,7 +422,12 @@ Cypress.Commands.add("createTable", (tableName, initialTable) => {
|
||||||
cy.get("input", { timeout: 2000 }).first().type(tableName).blur()
|
cy.get("input", { timeout: 2000 }).first().type(tableName).blur()
|
||||||
cy.get(".spectrum-ButtonGroup").contains("Create").click()
|
cy.get(".spectrum-ButtonGroup").contains("Create").click()
|
||||||
})
|
})
|
||||||
cy.contains(tableName).should("be.visible")
|
// Ensure modal has closed and table is created
|
||||||
|
cy.get(".spectrum-Modal").should("not.exist")
|
||||||
|
cy.get(".spectrum-Tabs-content", { timeout: 1000 }).should(
|
||||||
|
"contain",
|
||||||
|
tableName
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
Cypress.Commands.add("createTestTableWithData", () => {
|
Cypress.Commands.add("createTestTableWithData", () => {
|
||||||
|
@ -514,7 +519,8 @@ Cypress.Commands.add("searchAndAddComponent", component => {
|
||||||
cy.get(".spectrum-Button").contains("Component").click({ force: true })
|
cy.get(".spectrum-Button").contains("Component").click({ force: true })
|
||||||
|
|
||||||
// Search and add component
|
// Search and add component
|
||||||
cy.get(".spectrum-Textfield-input").wait(500).clear().type(component)
|
cy.wait(500)
|
||||||
|
cy.get(".spectrum-Textfield-input").clear().type(component)
|
||||||
cy.get(".body").within(() => {
|
cy.get(".body").within(() => {
|
||||||
cy.get(".component")
|
cy.get(".component")
|
||||||
.contains(new RegExp("^" + component + "$"), { timeout: 3000 })
|
.contains(new RegExp("^" + component + "$"), { timeout: 3000 })
|
||||||
|
|
|
@ -108,6 +108,7 @@ export const CONTAINER = ".container"
|
||||||
export const REGENERATE = ".regenerate"
|
export const REGENERATE = ".regenerate"
|
||||||
export const SPECTRUM_DIALOG_CONTENT = ".spectrum-Dialog-content"
|
export const SPECTRUM_DIALOG_CONTENT = ".spectrum-Dialog-content"
|
||||||
export const SPECTRUM_ICON = ".spectrum-Icon"
|
export const SPECTRUM_ICON = ".spectrum-Icon"
|
||||||
|
export const SPECTRUM_HEADING = ".spectrum-Heading"
|
||||||
|
|
||||||
//createView
|
//createView
|
||||||
export const SPECTRUM_MENU_ITEM_LABEL = ".spectrum-Menu-itemLabel"
|
export const SPECTRUM_MENU_ITEM_LABEL = ".spectrum-Menu-itemLabel"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/builder",
|
"name": "@budibase/builder",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -69,10 +69,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/bbui": "^1.1.22-alpha.0",
|
"@budibase/bbui": "^1.1.25-alpha.1",
|
||||||
"@budibase/client": "^1.1.22-alpha.0",
|
"@budibase/client": "^1.1.25-alpha.1",
|
||||||
"@budibase/frontend-core": "^1.1.22-alpha.0",
|
"@budibase/frontend-core": "^1.1.25-alpha.1",
|
||||||
"@budibase/string-templates": "^1.1.22-alpha.0",
|
"@budibase/string-templates": "^1.1.25-alpha.1",
|
||||||
"@sentry/browser": "5.19.1",
|
"@sentry/browser": "5.19.1",
|
||||||
"@spectrum-css/page": "^3.0.1",
|
"@spectrum-css/page": "^3.0.1",
|
||||||
"@spectrum-css/vars": "^3.0.1",
|
"@spectrum-css/vars": "^3.0.1",
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import { createLocalStorageStore } from "@budibase/frontend-core"
|
import { Constants, createLocalStorageStore } from "@budibase/frontend-core"
|
||||||
|
|
||||||
export const getThemeStore = () => {
|
export const getThemeStore = () => {
|
||||||
const themeElement = document.documentElement
|
const themeElement = document.documentElement
|
||||||
|
|
||||||
const initialValue = {
|
const initialValue = {
|
||||||
theme: "darkest",
|
theme: "darkest",
|
||||||
options: ["lightest", "light", "dark", "darkest", "nord"],
|
|
||||||
}
|
}
|
||||||
const store = createLocalStorageStore("bb-theme", initialValue)
|
const store = createLocalStorageStore("bb-theme", initialValue)
|
||||||
|
|
||||||
|
@ -17,11 +16,14 @@ export const getThemeStore = () => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
state.options.forEach(option => {
|
Constants.ThemeOptions.forEach(option => {
|
||||||
themeElement.classList.toggle(
|
themeElement.classList.toggle(
|
||||||
`spectrum--${option}`,
|
`spectrum--${option}`,
|
||||||
option === state.theme
|
option === state.theme
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Ensure darkest is always added as this is the base class for custom
|
||||||
|
// themes
|
||||||
themeElement.classList.add("spectrum--darkest")
|
themeElement.classList.add("spectrum--darkest")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -52,8 +52,9 @@
|
||||||
x => x.blockToLoop === block.id
|
x => x.blockToLoop === block.id
|
||||||
)
|
)
|
||||||
|
|
||||||
$: setPermissions(role)
|
$: isAppAction = block?.stepId === TriggerStepID.APP
|
||||||
$: getPermissions(automationId)
|
$: isAppAction && setPermissions(role)
|
||||||
|
$: isAppAction && getPermissions(automationId)
|
||||||
|
|
||||||
async function setPermissions(role) {
|
async function setPermissions(role) {
|
||||||
if (!role || !automationId) {
|
if (!role || !automationId) {
|
||||||
|
@ -238,7 +239,7 @@
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if block.stepId === TriggerStepID.APP}
|
{#if isAppAction}
|
||||||
<Label>Role</Label>
|
<Label>Role</Label>
|
||||||
<RoleSelect bind:value={role} />
|
<RoleSelect bind:value={role} />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
@ -5,6 +5,8 @@ import "@spectrum-css/vars/dist/spectrum-darkest.css"
|
||||||
import "@spectrum-css/vars/dist/spectrum-dark.css"
|
import "@spectrum-css/vars/dist/spectrum-dark.css"
|
||||||
import "@spectrum-css/vars/dist/spectrum-light.css"
|
import "@spectrum-css/vars/dist/spectrum-light.css"
|
||||||
import "@spectrum-css/vars/dist/spectrum-lightest.css"
|
import "@spectrum-css/vars/dist/spectrum-lightest.css"
|
||||||
|
import "@budibase/frontend-core/src/themes/nord.css"
|
||||||
|
import "@budibase/frontend-core/src/themes/midnight.css"
|
||||||
import "@spectrum-css/page/dist/index-vars.css"
|
import "@spectrum-css/page/dist/index-vars.css"
|
||||||
import "./global.css"
|
import "./global.css"
|
||||||
import { suppressWarnings } from "./helpers/warnings"
|
import { suppressWarnings } from "./helpers/warnings"
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
import { setContext } from "svelte"
|
import { setContext } from "svelte"
|
||||||
import DNDPositionIndicator from "./DNDPositionIndicator.svelte"
|
import DNDPositionIndicator from "./DNDPositionIndicator.svelte"
|
||||||
import { DropPosition } from "./dndStore"
|
import { DropPosition } from "./dndStore"
|
||||||
|
import { notifications } from "@budibase/bbui"
|
||||||
|
|
||||||
let scrollRef
|
let scrollRef
|
||||||
|
|
||||||
|
@ -55,6 +56,15 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const onDrop = async () => {
|
||||||
|
try {
|
||||||
|
await dndStore.actions.drop()
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
notifications.error("Error saving component")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Set scroll context so components can invoke scrolling when selected
|
// Set scroll context so components can invoke scrolling when selected
|
||||||
setContext("scroll", {
|
setContext("scroll", {
|
||||||
scrollTo,
|
scrollTo,
|
||||||
|
@ -83,6 +93,7 @@
|
||||||
opened
|
opened
|
||||||
scrollable
|
scrollable
|
||||||
icon="WebPage"
|
icon="WebPage"
|
||||||
|
on:drop={onDrop}
|
||||||
>
|
>
|
||||||
<ScreenslotDropdownMenu component={$selectedScreen?.props} />
|
<ScreenslotDropdownMenu component={$selectedScreen?.props} />
|
||||||
</NavItem>
|
</NavItem>
|
||||||
|
|
|
@ -139,9 +139,10 @@
|
||||||
notifications.success("App ID copied to clipboard.")
|
notifications.success("App ID copied to clipboard.")
|
||||||
}
|
}
|
||||||
|
|
||||||
const exportApp = app => {
|
const exportApp = (app, opts = { published: false }) => {
|
||||||
const id = isPublished ? app.prodId : app.devId
|
|
||||||
const appName = encodeURIComponent(app.name)
|
const appName = encodeURIComponent(app.name)
|
||||||
|
const id = opts?.published ? app.prodId : app.devId
|
||||||
|
// always export the development version
|
||||||
window.location = `/api/backups/export?appId=${id}&appname=${appName}`
|
window.location = `/api/backups/export?appId=${id}&appname=${appName}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,12 +267,21 @@
|
||||||
<span slot="control" class="app-overview-actions-icon">
|
<span slot="control" class="app-overview-actions-icon">
|
||||||
<Icon hoverable name="More" />
|
<Icon hoverable name="More" />
|
||||||
</span>
|
</span>
|
||||||
<MenuItem on:click={() => exportApp(selectedApp)} icon="Download">
|
<MenuItem
|
||||||
Export
|
on:click={() => exportApp(selectedApp, { published: false })}
|
||||||
|
icon="DownloadFromCloud"
|
||||||
|
>
|
||||||
|
Export latest
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
{#if isPublished}
|
{#if isPublished}
|
||||||
|
<MenuItem
|
||||||
|
on:click={() => exportApp(selectedApp, { published: true })}
|
||||||
|
icon="DownloadFromCloudOutline"
|
||||||
|
>
|
||||||
|
Export published
|
||||||
|
</MenuItem>
|
||||||
<MenuItem on:click={() => copyAppId(selectedApp)} icon="Copy">
|
<MenuItem on:click={() => copyAppId(selectedApp)} icon="Copy">
|
||||||
Copy App ID
|
Copy app ID
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
{/if}
|
{/if}
|
||||||
{#if !isPublished}
|
{#if !isPublished}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import { Layout, Heading, Body, Divider, Label, Select } from "@budibase/bbui"
|
import { Layout, Heading, Body, Divider, Label, Select } from "@budibase/bbui"
|
||||||
import { themeStore } from "builderStore"
|
import { themeStore } from "builderStore"
|
||||||
import { capitalise } from "helpers"
|
import { capitalise } from "helpers"
|
||||||
|
import { Constants } from "@budibase/frontend-core"
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Layout noPadding>
|
<Layout noPadding>
|
||||||
|
@ -14,7 +15,7 @@
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<Label size="L">Builder theme</Label>
|
<Label size="L">Builder theme</Label>
|
||||||
<Select
|
<Select
|
||||||
options={$themeStore.options}
|
options={Constants.ThemeOptions}
|
||||||
bind:value={$themeStore.theme}
|
bind:value={$themeStore.theme}
|
||||||
placeholder={null}
|
placeholder={null}
|
||||||
getOptionLabel={capitalise}
|
getOptionLabel={capitalise}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/cli",
|
"name": "@budibase/cli",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"description": "Budibase CLI, for developers, self hosting and migrations.",
|
"description": "Budibase CLI, for developers, self hosting and migrations.",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"bin": {
|
"bin": {
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
"outputPath": "build"
|
"outputPath": "build"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/backend-core": "^1.1.22-alpha.0",
|
"@budibase/backend-core": "^1.1.25-alpha.1",
|
||||||
"axios": "0.21.2",
|
"axios": "0.21.2",
|
||||||
"chalk": "4.1.0",
|
"chalk": "4.1.0",
|
||||||
"cli-progress": "3.11.2",
|
"cli-progress": "3.11.2",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/client",
|
"name": "@budibase/client",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"module": "dist/budibase-client.js",
|
"module": "dist/budibase-client.js",
|
||||||
"main": "dist/budibase-client.js",
|
"main": "dist/budibase-client.js",
|
||||||
|
@ -19,9 +19,9 @@
|
||||||
"dev:builder": "rollup -cw"
|
"dev:builder": "rollup -cw"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/bbui": "^1.1.22-alpha.0",
|
"@budibase/bbui": "^1.1.25-alpha.1",
|
||||||
"@budibase/frontend-core": "^1.1.22-alpha.0",
|
"@budibase/frontend-core": "^1.1.25-alpha.1",
|
||||||
"@budibase/string-templates": "^1.1.22-alpha.0",
|
"@budibase/string-templates": "^1.1.25-alpha.1",
|
||||||
"@spectrum-css/button": "^3.0.3",
|
"@spectrum-css/button": "^3.0.3",
|
||||||
"@spectrum-css/card": "^3.0.3",
|
"@spectrum-css/card": "^3.0.3",
|
||||||
"@spectrum-css/divider": "^1.0.3",
|
"@spectrum-css/divider": "^1.0.3",
|
||||||
|
|
|
@ -92,7 +92,7 @@
|
||||||
id="spectrum-root"
|
id="spectrum-root"
|
||||||
lang="en"
|
lang="en"
|
||||||
dir="ltr"
|
dir="ltr"
|
||||||
class="spectrum spectrum--medium {$themeStore.theme}"
|
class="spectrum spectrum--medium spectrum--darkest {$themeStore.theme}"
|
||||||
>
|
>
|
||||||
<DeviceBindingsProvider>
|
<DeviceBindingsProvider>
|
||||||
<UserBindingsProvider>
|
<UserBindingsProvider>
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
import BlockComponent from "components/BlockComponent.svelte"
|
import BlockComponent from "components/BlockComponent.svelte"
|
||||||
import { Heading } from "@budibase/bbui"
|
import { Heading } from "@budibase/bbui"
|
||||||
import { makePropSafe as safe } from "@budibase/string-templates"
|
import { makePropSafe as safe } from "@budibase/string-templates"
|
||||||
|
import { enrichSearchColumns, enrichFilter } from "utils/blocks.js"
|
||||||
|
|
||||||
export let title
|
export let title
|
||||||
export let dataSource
|
export let dataSource
|
||||||
|
@ -33,14 +34,6 @@
|
||||||
const { fetchDatasourceSchema, styleable } = getContext("sdk")
|
const { fetchDatasourceSchema, styleable } = getContext("sdk")
|
||||||
const context = getContext("context")
|
const context = getContext("context")
|
||||||
const component = getContext("component")
|
const component = getContext("component")
|
||||||
const schemaComponentMap = {
|
|
||||||
string: "stringfield",
|
|
||||||
options: "optionsfield",
|
|
||||||
number: "numberfield",
|
|
||||||
datetime: "datetimefield",
|
|
||||||
boolean: "booleanfield",
|
|
||||||
formula: "stringfield",
|
|
||||||
}
|
|
||||||
|
|
||||||
let formId
|
let formId
|
||||||
let dataProviderId
|
let dataProviderId
|
||||||
|
@ -68,39 +61,6 @@
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
// Enrich the default filter with the specified search fields
|
|
||||||
const enrichFilter = (filter, columns, formId) => {
|
|
||||||
let enrichedFilter = [...(filter || [])]
|
|
||||||
columns?.forEach(column => {
|
|
||||||
const safePath = column.name.split(".").map(safe).join(".")
|
|
||||||
enrichedFilter.push({
|
|
||||||
field: column.name,
|
|
||||||
operator: column.type === "string" ? "string" : "equal",
|
|
||||||
type: column.type,
|
|
||||||
valueType: "Binding",
|
|
||||||
value: `{{ ${safe(formId)}.${safePath} }}`,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
return enrichedFilter
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine data types for search fields and only use those that are valid
|
|
||||||
const enrichSearchColumns = (searchColumns, schema) => {
|
|
||||||
let enrichedColumns = []
|
|
||||||
searchColumns?.forEach(column => {
|
|
||||||
const schemaType = schema?.[column]?.type
|
|
||||||
const componentType = schemaComponentMap[schemaType]
|
|
||||||
if (componentType) {
|
|
||||||
enrichedColumns.push({
|
|
||||||
name: column,
|
|
||||||
componentType,
|
|
||||||
type: schemaType,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return enrichedColumns.slice(0, 5)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Builds a full details page URL for the card title
|
// Builds a full details page URL for the card title
|
||||||
const buildFullCardUrl = (link, url, repeaterId, linkColumn) => {
|
const buildFullCardUrl = (link, url, repeaterId, linkColumn) => {
|
||||||
if (!link || !url || !repeaterId) {
|
if (!link || !url || !repeaterId) {
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
import BlockComponent from "components/BlockComponent.svelte"
|
import BlockComponent from "components/BlockComponent.svelte"
|
||||||
import { Heading } from "@budibase/bbui"
|
import { Heading } from "@budibase/bbui"
|
||||||
import { makePropSafe as safe } from "@budibase/string-templates"
|
import { makePropSafe as safe } from "@budibase/string-templates"
|
||||||
|
import { enrichSearchColumns, enrichFilter } from "utils/blocks.js"
|
||||||
|
|
||||||
export let title
|
export let title
|
||||||
export let dataSource
|
export let dataSource
|
||||||
|
@ -31,14 +32,6 @@
|
||||||
const { fetchDatasourceSchema, styleable } = getContext("sdk")
|
const { fetchDatasourceSchema, styleable } = getContext("sdk")
|
||||||
const context = getContext("context")
|
const context = getContext("context")
|
||||||
const component = getContext("component")
|
const component = getContext("component")
|
||||||
const schemaComponentMap = {
|
|
||||||
string: "stringfield",
|
|
||||||
options: "optionsfield",
|
|
||||||
number: "numberfield",
|
|
||||||
datetime: "datetimefield",
|
|
||||||
boolean: "booleanfield",
|
|
||||||
formula: "stringfield",
|
|
||||||
}
|
|
||||||
|
|
||||||
let formId
|
let formId
|
||||||
let dataProviderId
|
let dataProviderId
|
||||||
|
@ -58,40 +51,6 @@
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
// Enrich the default filter with the specified search fields
|
|
||||||
const enrichFilter = (filter, columns, formId) => {
|
|
||||||
let enrichedFilter = [...(filter || [])]
|
|
||||||
columns?.forEach(column => {
|
|
||||||
const safePath = column.name.split(".").map(safe).join(".")
|
|
||||||
const stringType = column.type === "string" || column.type === "formula"
|
|
||||||
enrichedFilter.push({
|
|
||||||
field: column.name,
|
|
||||||
type: column.type,
|
|
||||||
operator: stringType ? "string" : "equal",
|
|
||||||
valueType: "Binding",
|
|
||||||
value: `{{ ${safe(formId)}.${safePath} }}`,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
return enrichedFilter
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine data types for search fields and only use those that are valid
|
|
||||||
const enrichSearchColumns = (searchColumns, schema) => {
|
|
||||||
let enrichedColumns = []
|
|
||||||
searchColumns?.forEach(column => {
|
|
||||||
const schemaType = schema?.[column]?.type
|
|
||||||
const componentType = schemaComponentMap[schemaType]
|
|
||||||
if (componentType) {
|
|
||||||
enrichedColumns.push({
|
|
||||||
name: column,
|
|
||||||
componentType,
|
|
||||||
type: schemaType,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return enrichedColumns.slice(0, 5)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load the datasource schema so we can determine column types
|
// Load the datasource schema so we can determine column types
|
||||||
const fetchSchema = async dataSource => {
|
const fetchSchema = async dataSource => {
|
||||||
if (dataSource) {
|
if (dataSource) {
|
||||||
|
@ -109,7 +68,7 @@
|
||||||
<BlockComponent
|
<BlockComponent
|
||||||
type="form"
|
type="form"
|
||||||
bind:id={formId}
|
bind:id={formId}
|
||||||
props={{ dataSource, disableValidation: true }}
|
props={{ dataSource, disableValidation: true, editAutoColumns: true }}
|
||||||
>
|
>
|
||||||
{#if title || enrichedSearchColumns?.length || showTitleButton}
|
{#if title || enrichedSearchColumns?.length || showTitleButton}
|
||||||
<div class="header" class:mobile={$context.device.mobile}>
|
<div class="header" class:mobile={$context.device.mobile}>
|
||||||
|
|
|
@ -13,6 +13,10 @@
|
||||||
// for fields rendered in things like search blocks.
|
// for fields rendered in things like search blocks.
|
||||||
export let disableValidation = false
|
export let disableValidation = false
|
||||||
|
|
||||||
|
// Not exposed as a builder setting. Used internally to allow searching on
|
||||||
|
// auto columns.
|
||||||
|
export let editAutoColumns = false
|
||||||
|
|
||||||
const context = getContext("context")
|
const context = getContext("context")
|
||||||
const { API, fetchDatasourceSchema } = getContext("sdk")
|
const { API, fetchDatasourceSchema } = getContext("sdk")
|
||||||
|
|
||||||
|
@ -107,6 +111,7 @@
|
||||||
{table}
|
{table}
|
||||||
{initialValues}
|
{initialValues}
|
||||||
{disableValidation}
|
{disableValidation}
|
||||||
|
{editAutoColumns}
|
||||||
>
|
>
|
||||||
<slot />
|
<slot />
|
||||||
</InnerForm>
|
</InnerForm>
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
export let schema
|
export let schema
|
||||||
export let table
|
export let table
|
||||||
export let disableValidation = false
|
export let disableValidation = false
|
||||||
|
export let editAutoColumns = false
|
||||||
|
|
||||||
const component = getContext("component")
|
const component = getContext("component")
|
||||||
const { styleable, Provider, ActionTypes } = getContext("sdk")
|
const { styleable, Provider, ActionTypes } = getContext("sdk")
|
||||||
|
@ -183,7 +184,8 @@
|
||||||
fieldId,
|
fieldId,
|
||||||
value: initialValue,
|
value: initialValue,
|
||||||
error: initialError,
|
error: initialError,
|
||||||
disabled: disabled || fieldDisabled || isAutoColumn,
|
disabled:
|
||||||
|
disabled || fieldDisabled || (isAutoColumn && !editAutoColumns),
|
||||||
defaultValue,
|
defaultValue,
|
||||||
validator,
|
validator,
|
||||||
lastUpdate: Date.now(),
|
lastUpdate: Date.now(),
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import "@spectrum-css/vars/dist/spectrum-global.css"
|
import "@spectrum-css/vars/dist/spectrum-global.css"
|
||||||
import "@spectrum-css/vars/dist/spectrum-medium.css"
|
import "@spectrum-css/vars/dist/spectrum-medium.css"
|
||||||
import "@spectrum-css/vars/dist/spectrum-large.css"
|
import "@spectrum-css/vars/dist/spectrum-large.css"
|
||||||
import "@spectrum-css/vars/dist/spectrum-lightest.css"
|
|
||||||
import "@spectrum-css/vars/dist/spectrum-light.css"
|
|
||||||
import "@spectrum-css/vars/dist/spectrum-dark.css"
|
|
||||||
import "@spectrum-css/vars/dist/spectrum-darkest.css"
|
import "@spectrum-css/vars/dist/spectrum-darkest.css"
|
||||||
|
import "@spectrum-css/vars/dist/spectrum-dark.css"
|
||||||
|
import "@spectrum-css/vars/dist/spectrum-light.css"
|
||||||
|
import "@spectrum-css/vars/dist/spectrum-lightest.css"
|
||||||
import "@spectrum-css/page/dist/index-vars.css"
|
import "@spectrum-css/page/dist/index-vars.css"
|
||||||
|
|
||||||
// Non user-facing components
|
// Non user-facing components
|
||||||
|
@ -35,6 +35,7 @@ export { default as embeddedmap } from "./embedded-map/EmbeddedMap.svelte"
|
||||||
export * from "./charts"
|
export * from "./charts"
|
||||||
export * from "./forms"
|
export * from "./forms"
|
||||||
export * from "./table"
|
export * from "./table"
|
||||||
|
|
||||||
export * from "./blocks"
|
export * from "./blocks"
|
||||||
export * from "./dynamic-filter"
|
export * from "./dynamic-filter"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
import { makePropSafe as safe } from "@budibase/string-templates"
|
||||||
|
|
||||||
|
// Map of data types to component types for search fields inside blocks
|
||||||
|
const schemaComponentMap = {
|
||||||
|
string: "stringfield",
|
||||||
|
options: "optionsfield",
|
||||||
|
number: "numberfield",
|
||||||
|
datetime: "datetimefield",
|
||||||
|
boolean: "booleanfield",
|
||||||
|
formula: "stringfield",
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine data types for search fields and only use those that are valid
|
||||||
|
* @param searchColumns the search columns to use
|
||||||
|
* @param schema the data source schema
|
||||||
|
*/
|
||||||
|
export const enrichSearchColumns = (searchColumns, schema) => {
|
||||||
|
let enrichedColumns = []
|
||||||
|
searchColumns?.forEach(column => {
|
||||||
|
const schemaType = schema?.[column]?.type
|
||||||
|
const componentType = schemaComponentMap[schemaType]
|
||||||
|
if (componentType) {
|
||||||
|
enrichedColumns.push({
|
||||||
|
name: column,
|
||||||
|
componentType,
|
||||||
|
type: schemaType,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return enrichedColumns.slice(0, 5)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enriches a normal datasource filter with bindings representing the additional
|
||||||
|
* search fields configured as part of a searchable block. These bindings are
|
||||||
|
* fields inside a form used as part of the block.
|
||||||
|
* @param filter the normal data provider filter
|
||||||
|
* @param columns the enriched search column structure
|
||||||
|
* @param formId the ID of the form containing the search fields
|
||||||
|
*/
|
||||||
|
export const enrichFilter = (filter, columns, formId) => {
|
||||||
|
let enrichedFilter = [...(filter || [])]
|
||||||
|
columns?.forEach(column => {
|
||||||
|
const safePath = column.name.split(".").map(safe).join(".")
|
||||||
|
const stringType = column.type === "string" || column.type === "formula"
|
||||||
|
const dateType = column.type === "datetime"
|
||||||
|
const binding = `${safe(formId)}.${safePath}`
|
||||||
|
|
||||||
|
// For dates, use a range of the entire day selected
|
||||||
|
if (dateType) {
|
||||||
|
enrichedFilter.push({
|
||||||
|
field: column.name,
|
||||||
|
type: column.type,
|
||||||
|
operator: "rangeLow",
|
||||||
|
valueType: "Binding",
|
||||||
|
value: `{{ ${binding} }}`,
|
||||||
|
})
|
||||||
|
const format = "YYYY-MM-DDTHH:mm:ss.SSSZ"
|
||||||
|
enrichedFilter.push({
|
||||||
|
field: column.name,
|
||||||
|
type: column.type,
|
||||||
|
operator: "rangeHigh",
|
||||||
|
valueType: "Binding",
|
||||||
|
value: `{{ date (add (date ${binding} "x") 86399999) "${format}" }}`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// For other fields, do an exact match
|
||||||
|
else {
|
||||||
|
enrichedFilter.push({
|
||||||
|
field: column.name,
|
||||||
|
type: column.type,
|
||||||
|
operator: stringType ? "string" : "equal",
|
||||||
|
valueType: "Binding",
|
||||||
|
value: `{{ ${binding} }}`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return enrichedFilter
|
||||||
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/frontend-core",
|
"name": "@budibase/frontend-core",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"description": "Budibase frontend core libraries used in builder and client",
|
"description": "Budibase frontend core libraries used in builder and client",
|
||||||
"author": "Budibase",
|
"author": "Budibase",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"svelte": "src/index.js",
|
"svelte": "src/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/bbui": "^1.1.22-alpha.0",
|
"@budibase/bbui": "^1.1.25-alpha.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"svelte": "^3.46.2"
|
"svelte": "^3.46.2"
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,3 +98,12 @@ export const SqlNumberTypeRangeMap = {
|
||||||
min: -8388608,
|
min: -8388608,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const ThemeOptions = [
|
||||||
|
"lightest",
|
||||||
|
"light",
|
||||||
|
"dark",
|
||||||
|
"darkest",
|
||||||
|
"nord",
|
||||||
|
"midnight",
|
||||||
|
]
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
.spectrum--midnight {
|
||||||
|
--hue: 220;
|
||||||
|
--sat: 10%;
|
||||||
|
--spectrum-global-color-gray-50: hsl(var(--hue), var(--sat), 12%);
|
||||||
|
--spectrum-global-color-gray-75: hsl(var(--hue), var(--sat), 15%);
|
||||||
|
--spectrum-global-color-gray-100: hsl(var(--hue), var(--sat), 17%);
|
||||||
|
--spectrum-global-color-gray-200: hsl(var(--hue), var(--sat), 20%);
|
||||||
|
--spectrum-global-color-gray-300: hsl(var(--hue), var(--sat), 24%);
|
||||||
|
--spectrum-global-color-gray-400: hsl(var(--hue), var(--sat), 32%);
|
||||||
|
--spectrum-global-color-gray-500: hsl(var(--hue), var(--sat), 40%);
|
||||||
|
--spectrum-global-color-gray-600: hsl(var(--hue), var(--sat), 60%);
|
||||||
|
--spectrum-global-color-gray-700: hsl(var(--hue), var(--sat), 70%);
|
||||||
|
--spectrum-global-color-gray-800: hsl(var(--hue), var(--sat), 80%);
|
||||||
|
--spectrum-global-color-gray-900: hsl(var(--hue), var(--sat), 95%);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
.spectrum--nord {
|
||||||
|
--spectrum-global-color-red-400: #bf616a;
|
||||||
|
--spectrum-global-color-red-500: #c26971;
|
||||||
|
--spectrum-global-color-red-600: #c57179;
|
||||||
|
--spectrum-global-color-red-700: #c97980;
|
||||||
|
--spectrum-global-color-static-red-400: #bf616a;
|
||||||
|
--spectrum-global-color-static-red-500: #c26971;
|
||||||
|
--spectrum-global-color-static-red-600: #c57179;
|
||||||
|
--spectrum-global-color-static-red-700: #c97980;
|
||||||
|
|
||||||
|
--spectrum-global-color-green-400: #719453;
|
||||||
|
--spectrum-global-color-green-500: #789d58;
|
||||||
|
--spectrum-global-color-green-600: #7fa55e;
|
||||||
|
--spectrum-global-color-green-700: #86aa67;
|
||||||
|
--spectrum-global-color-static-green-400: #719453;
|
||||||
|
--spectrum-global-color-static-green-500: #789d58;
|
||||||
|
--spectrum-global-color-static-green-600: #7fa55e;
|
||||||
|
--spectrum-global-color-static-green-700: #86aa67;
|
||||||
|
|
||||||
|
--spectrum-global-color-blue-400: #5680b4;
|
||||||
|
--spectrum-global-color-blue-500: #5e86b8;
|
||||||
|
--spectrum-global-color-blue-600: #668dbb;
|
||||||
|
--spectrum-global-color-blue-700: #6f93bf;
|
||||||
|
--spectrum-global-color-static-blue-200: #7799c4;
|
||||||
|
--spectrum-global-color-static-blue-300: #6f93bf;
|
||||||
|
--spectrum-global-color-static-blue-400: #668dbb;
|
||||||
|
--spectrum-global-color-static-blue-500: #5e86b8;
|
||||||
|
--spectrum-global-color-static-blue-600: #5680b4;
|
||||||
|
--spectrum-global-color-static-blue-700: #4e79af;
|
||||||
|
--spectrum-global-color-static-blue-800: #4a73a6;
|
||||||
|
|
||||||
|
--spectrum-global-color-gray-50: #2e3440;
|
||||||
|
--spectrum-global-color-gray-75: #353b4a;
|
||||||
|
--spectrum-global-color-gray-100: #3b4252;
|
||||||
|
--spectrum-global-color-gray-200: #4a5367;
|
||||||
|
--spectrum-global-color-gray-300: #4c566a;
|
||||||
|
--spectrum-global-color-gray-400: #5a657d;
|
||||||
|
--spectrum-global-color-gray-500: #677590;
|
||||||
|
--spectrum-global-color-gray-600: #79869f;
|
||||||
|
--spectrum-global-color-gray-700: #a9b1c1;
|
||||||
|
--spectrum-global-color-gray-800: #bac1cd;
|
||||||
|
--spectrum-global-color-gray-900: #eceff4;
|
||||||
|
|
||||||
|
--spectrum-alias-highlight-hover: rgba(169, 177, 193, 0.06);
|
||||||
|
--spectrum-alias-highlight-active: rgba(169, 177, 193, 0.1);
|
||||||
|
}
|
|
@ -99,8 +99,16 @@ export const buildLuceneQuery = filter => {
|
||||||
filter.forEach(expression => {
|
filter.forEach(expression => {
|
||||||
let { operator, field, type, value, externalType } = expression
|
let { operator, field, type, value, externalType } = expression
|
||||||
// Parse all values into correct types
|
// Parse all values into correct types
|
||||||
if (type === "datetime" && value) {
|
if (type === "datetime") {
|
||||||
value = new Date(value).toISOString()
|
// Ensure date value is a valid date and parse into correct format
|
||||||
|
if (!value) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
value = new Date(value).toISOString()
|
||||||
|
} catch (error) {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (type === "number" && !Array.isArray(value)) {
|
if (type === "number" && !Array.isArray(value)) {
|
||||||
if (operator === "oneOf") {
|
if (operator === "oneOf") {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/server",
|
"name": "@budibase/server",
|
||||||
"email": "hi@budibase.com",
|
"email": "hi@budibase.com",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"description": "Budibase Web Server",
|
"description": "Budibase Web Server",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -77,11 +77,11 @@
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@apidevtools/swagger-parser": "10.0.3",
|
"@apidevtools/swagger-parser": "10.0.3",
|
||||||
"@budibase/backend-core": "^1.1.22-alpha.0",
|
"@budibase/backend-core": "^1.1.25-alpha.1",
|
||||||
"@budibase/client": "^1.1.22-alpha.0",
|
"@budibase/client": "^1.1.25-alpha.1",
|
||||||
"@budibase/pro": "1.1.22-alpha.0",
|
"@budibase/pro": "1.1.25-alpha.1",
|
||||||
"@budibase/string-templates": "^1.1.22-alpha.0",
|
"@budibase/string-templates": "^1.1.25-alpha.1",
|
||||||
"@budibase/types": "^1.1.22-alpha.0",
|
"@budibase/types": "^1.1.25-alpha.1",
|
||||||
"@bull-board/api": "3.7.0",
|
"@bull-board/api": "3.7.0",
|
||||||
"@bull-board/koa": "3.9.4",
|
"@bull-board/koa": "3.9.4",
|
||||||
"@elastic/elasticsearch": "7.10.0",
|
"@elastic/elasticsearch": "7.10.0",
|
||||||
|
|
|
@ -111,20 +111,12 @@ exports.apiFileReturn = contents => {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.defineFilter = excludeRows => {
|
exports.defineFilter = excludeRows => {
|
||||||
|
const ids = [USER_METDATA_PREFIX, LINK_USER_METADATA_PREFIX]
|
||||||
if (excludeRows) {
|
if (excludeRows) {
|
||||||
return doc =>
|
ids.push(TABLE_ROW_PREFIX)
|
||||||
!(
|
|
||||||
doc._id.includes(USER_METDATA_PREFIX) ||
|
|
||||||
doc._id.includes(LINK_USER_METADATA_PREFIX) ||
|
|
||||||
doc._id.includes(TABLE_ROW_PREFIX)
|
|
||||||
)
|
|
||||||
} else if (!excludeRows) {
|
|
||||||
return doc =>
|
|
||||||
!(
|
|
||||||
doc._id.includes(USER_METDATA_PREFIX) ||
|
|
||||||
doc._id.includes(LINK_USER_METADATA_PREFIX)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
return doc =>
|
||||||
|
!ids.map(key => doc._id.includes(key)).reduce((prev, curr) => prev || curr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -132,6 +124,7 @@ exports.defineFilter = excludeRows => {
|
||||||
* data or user relationships.
|
* data or user relationships.
|
||||||
* @param {string} appId The app to backup
|
* @param {string} appId The app to backup
|
||||||
* @param {object} config Config to send to export DB
|
* @param {object} config Config to send to export DB
|
||||||
|
* @param {boolean} includeRows Flag to state whether the export should include data.
|
||||||
* @returns {*} either a string or a stream of the backup
|
* @returns {*} either a string or a stream of the backup
|
||||||
*/
|
*/
|
||||||
const backupAppData = async (appId, config, includeRows) => {
|
const backupAppData = async (appId, config, includeRows) => {
|
||||||
|
@ -154,6 +147,7 @@ exports.performBackup = async (appId, backupName) => {
|
||||||
/**
|
/**
|
||||||
* Streams a backup of the database state for an app
|
* Streams a backup of the database state for an app
|
||||||
* @param {string} appId The ID of the app which is to be backed up.
|
* @param {string} appId The ID of the app which is to be backed up.
|
||||||
|
* @param {boolean} includeRows Flag to state whether the export should include data.
|
||||||
* @returns {*} a readable stream of the backup which is written in real time
|
* @returns {*} a readable stream of the backup which is written in real time
|
||||||
*/
|
*/
|
||||||
exports.streamBackup = async (appId, includeRows) => {
|
exports.streamBackup = async (appId, includeRows) => {
|
||||||
|
|
|
@ -1094,12 +1094,12 @@
|
||||||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
||||||
|
|
||||||
"@budibase/backend-core@1.1.22-alpha.0":
|
"@budibase/backend-core@1.1.24":
|
||||||
version "1.1.22-alpha.0"
|
version "1.1.24"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.1.22-alpha.0.tgz#2a090a723d35ce4a2e377ac0927fe127213bcbb3"
|
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.1.24.tgz#35b15c4a2ff3eaed0a612ff04095017250a30e6d"
|
||||||
integrity sha512-77gxcPrjejdqaMaMkbrCS0glYA1jdGo74NpCxdadWx+suU4SMTmOt2jgnEZg20aeKcky2xTpVbjDxIq+Fb2J+g==
|
integrity sha512-Ab5Ju+2Cggfkz14+BasVgHSrxz73l6U6EtcF2Lb8EwkoLHYUT8llhW4hgrO6fXt5QaQ7mhsoiTUZesyn8Xy/Bg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@budibase/types" "^1.1.22-alpha.0"
|
"@budibase/types" "^1.1.24"
|
||||||
"@techpass/passport-openidconnect" "0.3.2"
|
"@techpass/passport-openidconnect" "0.3.2"
|
||||||
aws-sdk "2.1030.0"
|
aws-sdk "2.1030.0"
|
||||||
bcrypt "5.0.1"
|
bcrypt "5.0.1"
|
||||||
|
@ -1177,13 +1177,13 @@
|
||||||
svelte-flatpickr "^3.2.3"
|
svelte-flatpickr "^3.2.3"
|
||||||
svelte-portal "^1.0.0"
|
svelte-portal "^1.0.0"
|
||||||
|
|
||||||
"@budibase/pro@1.1.22-alpha.0":
|
"@budibase/pro@1.1.24":
|
||||||
version "1.1.22-alpha.0"
|
version "1.1.24"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.1.22-alpha.0.tgz#5718188fbc76ce3c3cf3c633c99c6e59f5846310"
|
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.1.24.tgz#4fd5d1b162308cb52d2cebbe9ede05b1f952b727"
|
||||||
integrity sha512-QL5bhT/BJnoKVV5XH5+s3jSCBzV/JGOy8YQObEjZgCrtTWUjdvMrm5pFinflFGriCfoArmvR3Q51FBpNJQfaag==
|
integrity sha512-YGloe5IhBVRuGrGgRF1/qvmTICkxmwWAg7cxYPxBszI8IT7Ilisvsm2aBaDFfRYIe9bjzV2PzziiIkwA5qXlXw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@budibase/backend-core" "1.1.22-alpha.0"
|
"@budibase/backend-core" "1.1.24"
|
||||||
"@budibase/types" "1.1.22-alpha.0"
|
"@budibase/types" "1.1.24"
|
||||||
node-fetch "^2.6.1"
|
node-fetch "^2.6.1"
|
||||||
|
|
||||||
"@budibase/standard-components@^0.9.139":
|
"@budibase/standard-components@^0.9.139":
|
||||||
|
@ -1204,15 +1204,10 @@
|
||||||
svelte-apexcharts "^1.0.2"
|
svelte-apexcharts "^1.0.2"
|
||||||
svelte-flatpickr "^3.1.0"
|
svelte-flatpickr "^3.1.0"
|
||||||
|
|
||||||
"@budibase/types@1.1.22-alpha.0":
|
"@budibase/types@1.1.24", "@budibase/types@^1.1.24":
|
||||||
version "1.1.22-alpha.0"
|
version "1.1.24"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.1.22-alpha.0.tgz#85fb7f37773c710e8232c95104095c26a8dd22ca"
|
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.1.24.tgz#87aaab20dc2093b88e036ccb5385ee8a39167cf6"
|
||||||
integrity sha512-1gRwAtjEl7Ug1jrYwD9Iudbfgs37nndEBEB6yVdNPKA5SpjG+Fwx30zp6R961zlx1vsSu4iMdwM8IbMsCM8p1g==
|
integrity sha512-ZlzDDBN3uWHCy80lyIZt3IBZB2AQBDgFt9G8b6r5S2rNlPZJQ5u1m58bIcan3NbDNLQOjATZ9opkejIB2qcZnw==
|
||||||
|
|
||||||
"@budibase/types@^1.1.22-alpha.0":
|
|
||||||
version "1.1.22"
|
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.1.22.tgz#a73a8315ad6a04bf0709f2b51cb35058442ce723"
|
|
||||||
integrity sha512-24sun/hZ2OJZdavhiJt+S8Aip+RdlKeTyUrkf7OuRCUqbxgEIR2J9QOKBSEumuckwTcpzJHBAm4P4G3dXX5Neg==
|
|
||||||
|
|
||||||
"@bull-board/api@3.7.0":
|
"@bull-board/api@3.7.0":
|
||||||
version "3.7.0"
|
version "3.7.0"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/string-templates",
|
"name": "@budibase/string-templates",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"description": "Handlebars wrapper for Budibase templating.",
|
"description": "Handlebars wrapper for Budibase templating.",
|
||||||
"main": "src/index.cjs",
|
"main": "src/index.cjs",
|
||||||
"module": "dist/bundle.mjs",
|
"module": "dist/bundle.mjs",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/types",
|
"name": "@budibase/types",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"description": "Budibase types",
|
"description": "Budibase types",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/worker",
|
"name": "@budibase/worker",
|
||||||
"email": "hi@budibase.com",
|
"email": "hi@budibase.com",
|
||||||
"version": "1.1.22-alpha.0",
|
"version": "1.1.25-alpha.1",
|
||||||
"description": "Budibase background service",
|
"description": "Budibase background service",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -35,10 +35,10 @@
|
||||||
"author": "Budibase",
|
"author": "Budibase",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/backend-core": "^1.1.22-alpha.0",
|
"@budibase/backend-core": "^1.1.25-alpha.1",
|
||||||
"@budibase/pro": "1.1.22-alpha.0",
|
"@budibase/pro": "1.1.25-alpha.1",
|
||||||
"@budibase/string-templates": "^1.1.22-alpha.0",
|
"@budibase/string-templates": "^1.1.25-alpha.1",
|
||||||
"@budibase/types": "^1.1.22-alpha.0",
|
"@budibase/types": "^1.1.25-alpha.1",
|
||||||
"@koa/router": "8.0.8",
|
"@koa/router": "8.0.8",
|
||||||
"@sentry/node": "6.17.7",
|
"@sentry/node": "6.17.7",
|
||||||
"@techpass/passport-openidconnect": "0.3.2",
|
"@techpass/passport-openidconnect": "0.3.2",
|
||||||
|
|
|
@ -291,12 +291,12 @@
|
||||||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
||||||
|
|
||||||
"@budibase/backend-core@1.1.22-alpha.0":
|
"@budibase/backend-core@1.1.24":
|
||||||
version "1.1.22-alpha.0"
|
version "1.1.24"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.1.22-alpha.0.tgz#2a090a723d35ce4a2e377ac0927fe127213bcbb3"
|
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.1.24.tgz#35b15c4a2ff3eaed0a612ff04095017250a30e6d"
|
||||||
integrity sha512-77gxcPrjejdqaMaMkbrCS0glYA1jdGo74NpCxdadWx+suU4SMTmOt2jgnEZg20aeKcky2xTpVbjDxIq+Fb2J+g==
|
integrity sha512-Ab5Ju+2Cggfkz14+BasVgHSrxz73l6U6EtcF2Lb8EwkoLHYUT8llhW4hgrO6fXt5QaQ7mhsoiTUZesyn8Xy/Bg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@budibase/types" "^1.1.22-alpha.0"
|
"@budibase/types" "^1.1.24"
|
||||||
"@techpass/passport-openidconnect" "0.3.2"
|
"@techpass/passport-openidconnect" "0.3.2"
|
||||||
aws-sdk "2.1030.0"
|
aws-sdk "2.1030.0"
|
||||||
bcrypt "5.0.1"
|
bcrypt "5.0.1"
|
||||||
|
@ -324,24 +324,19 @@
|
||||||
uuid "8.3.2"
|
uuid "8.3.2"
|
||||||
zlib "1.0.5"
|
zlib "1.0.5"
|
||||||
|
|
||||||
"@budibase/pro@1.1.22-alpha.0":
|
"@budibase/pro@1.1.24":
|
||||||
version "1.1.22-alpha.0"
|
version "1.1.24"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.1.22-alpha.0.tgz#5718188fbc76ce3c3cf3c633c99c6e59f5846310"
|
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.1.24.tgz#4fd5d1b162308cb52d2cebbe9ede05b1f952b727"
|
||||||
integrity sha512-QL5bhT/BJnoKVV5XH5+s3jSCBzV/JGOy8YQObEjZgCrtTWUjdvMrm5pFinflFGriCfoArmvR3Q51FBpNJQfaag==
|
integrity sha512-YGloe5IhBVRuGrGgRF1/qvmTICkxmwWAg7cxYPxBszI8IT7Ilisvsm2aBaDFfRYIe9bjzV2PzziiIkwA5qXlXw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@budibase/backend-core" "1.1.22-alpha.0"
|
"@budibase/backend-core" "1.1.24"
|
||||||
"@budibase/types" "1.1.22-alpha.0"
|
"@budibase/types" "1.1.24"
|
||||||
node-fetch "^2.6.1"
|
node-fetch "^2.6.1"
|
||||||
|
|
||||||
"@budibase/types@1.1.22-alpha.0":
|
"@budibase/types@1.1.24", "@budibase/types@^1.1.24":
|
||||||
version "1.1.22-alpha.0"
|
version "1.1.24"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.1.22-alpha.0.tgz#85fb7f37773c710e8232c95104095c26a8dd22ca"
|
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.1.24.tgz#87aaab20dc2093b88e036ccb5385ee8a39167cf6"
|
||||||
integrity sha512-1gRwAtjEl7Ug1jrYwD9Iudbfgs37nndEBEB6yVdNPKA5SpjG+Fwx30zp6R961zlx1vsSu4iMdwM8IbMsCM8p1g==
|
integrity sha512-ZlzDDBN3uWHCy80lyIZt3IBZB2AQBDgFt9G8b6r5S2rNlPZJQ5u1m58bIcan3NbDNLQOjATZ9opkejIB2qcZnw==
|
||||||
|
|
||||||
"@budibase/types@^1.1.22-alpha.0":
|
|
||||||
version "1.1.23"
|
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.1.23.tgz#10894f08704def5d2b62b5b0158e714c43bb76ac"
|
|
||||||
integrity sha512-McTJZ+R0qGL3PR4Qi5UjYgn82VF1dIi08IIsZjnGbAwY+tt3aATv4uRyERk0fFC7s0IC4neoDs3Wh5zjKxZTSw==
|
|
||||||
|
|
||||||
"@cspotcode/source-map-consumer@0.8.0":
|
"@cspotcode/source-map-consumer@0.8.0":
|
||||||
version "0.8.0"
|
version "0.8.0"
|
||||||
|
|
Loading…
Reference in New Issue