Merge branch 'master' into fix/qa-core-pg
This commit is contained in:
commit
101edb1ac9
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"version": "2.10.3",
|
||||
"version": "2.10.6",
|
||||
"npmClient": "yarn",
|
||||
"packages": [
|
||||
"packages/*"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Checkbox, Select, RadioGroup, Stepper } from "@budibase/bbui"
|
||||
import { Checkbox, Select, RadioGroup, Stepper, Input } from "@budibase/bbui"
|
||||
import DataSourceSelect from "./controls/DataSourceSelect.svelte"
|
||||
import S3DataSourceSelect from "./controls/S3DataSourceSelect.svelte"
|
||||
import DataProviderSelect from "./controls/DataProviderSelect.svelte"
|
||||
|
@ -60,6 +60,7 @@ const componentMap = {
|
|||
"field/longform": FormFieldSelect,
|
||||
"field/datetime": FormFieldSelect,
|
||||
"field/attachment": FormFieldSelect,
|
||||
"field/s3": Input,
|
||||
"field/link": FormFieldSelect,
|
||||
"field/array": FormFieldSelect,
|
||||
"field/json": FormFieldSelect,
|
||||
|
|
|
@ -27,12 +27,14 @@
|
|||
if (datasource.source === IntegrationTypes.COUCHDB) {
|
||||
return datasource.config.database
|
||||
}
|
||||
if (
|
||||
datasource.source === IntegrationTypes.DYNAMODB ||
|
||||
datasource.source === IntegrationTypes.S3
|
||||
) {
|
||||
if (datasource.source === IntegrationTypes.DYNAMODB) {
|
||||
return `${datasource.config.endpoint}:${datasource.config.region}`
|
||||
}
|
||||
if (datasource.source === IntegrationTypes.S3) {
|
||||
return datasource.config.endpoint
|
||||
? `${datasource.config.endpoint}:${datasource.config.region}`
|
||||
: `s3.${datasource.config.region}.amazonaws.com`
|
||||
}
|
||||
if (datasource.source === IntegrationTypes.ELASTICSEARCH) {
|
||||
return datasource.config.url
|
||||
}
|
||||
|
|
|
@ -3721,7 +3721,7 @@
|
|||
},
|
||||
"settings": [
|
||||
{
|
||||
"type": "field/attachment",
|
||||
"type": "field/s3",
|
||||
"label": "Field",
|
||||
"key": "field",
|
||||
"required": true
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
import Field from "./Field.svelte"
|
||||
import { CoreDropzone, ProgressCircle } from "@budibase/bbui"
|
||||
import { getContext, onMount, onDestroy } from "svelte"
|
||||
import { cloneDeep } from "../../../../../bbui/src/helpers"
|
||||
|
||||
export let datasourceId
|
||||
export let bucket
|
||||
|
@ -14,6 +15,7 @@
|
|||
|
||||
let fieldState
|
||||
let fieldApi
|
||||
let localFiles = []
|
||||
|
||||
const { API, notificationStore, uploadStore } = getContext("sdk")
|
||||
const component = getContext("component")
|
||||
|
@ -90,9 +92,17 @@
|
|||
}
|
||||
|
||||
const handleChange = e => {
|
||||
const changed = fieldApi.setValue(e.detail)
|
||||
localFiles = e.detail
|
||||
let files = cloneDeep(e.detail) || []
|
||||
// remove URL as it contains the full base64 image data
|
||||
files.forEach(file => {
|
||||
if (file.type?.startsWith("image")) {
|
||||
delete file.url
|
||||
}
|
||||
})
|
||||
const changed = fieldApi.setValue(files)
|
||||
if (onChange && changed) {
|
||||
onChange({ value: e.detail })
|
||||
onChange({ value: files })
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -118,7 +128,7 @@
|
|||
<div class="content">
|
||||
{#if fieldState}
|
||||
<CoreDropzone
|
||||
value={fieldState.value}
|
||||
value={localFiles}
|
||||
disabled={loading || fieldState.disabled}
|
||||
error={fieldState.error}
|
||||
on:change={handleChange}
|
||||
|
|
|
@ -52,11 +52,6 @@ export const BuilderRoleDescriptions = [
|
|||
icon: "User",
|
||||
label: "App user - Only has access to published apps",
|
||||
},
|
||||
{
|
||||
value: BudibaseRoles.Developer,
|
||||
icon: "Hammer",
|
||||
label: "Developer - Access to the app builder",
|
||||
},
|
||||
{
|
||||
value: BudibaseRoles.Admin,
|
||||
icon: "Draw",
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 4638ae916e55ce89166095578cbd01745d0ee9ee
|
||||
Subproject commit 961d683794442f615468d44b684e5a94633109eb
|
|
@ -58,7 +58,7 @@ function parse(input: any) {
|
|||
return null
|
||||
}
|
||||
if (isIsoDateString(input)) {
|
||||
return new Date(input)
|
||||
return new Date(input.trim())
|
||||
}
|
||||
return input
|
||||
}
|
||||
|
|
|
@ -657,4 +657,29 @@ describe("SQL query builder", () => {
|
|||
sql: `select * from (select top (@p0) * from [test] order by [test].[id] asc) as [test]`,
|
||||
})
|
||||
})
|
||||
|
||||
it("should not parse JSON string as Date", () => {
|
||||
let query = new Sql(SqlClient.POSTGRES, limit)._query(
|
||||
generateCreateJson(TABLE_NAME, {
|
||||
name: '{ "created_at":"2023-09-09T03:21:06.024Z" }',
|
||||
})
|
||||
)
|
||||
expect(query).toEqual({
|
||||
bindings: ['{ "created_at":"2023-09-09T03:21:06.024Z" }'],
|
||||
sql: `insert into \"test\" (\"name\") values ($1) returning *`,
|
||||
})
|
||||
})
|
||||
|
||||
it("should parse and trim valid string as Date", () => {
|
||||
const dateObj = new Date("2023-09-09T03:21:06.024Z")
|
||||
let query = new Sql(SqlClient.POSTGRES, limit)._query(
|
||||
generateCreateJson(TABLE_NAME, {
|
||||
name: " 2023-09-09T03:21:06.024Z ",
|
||||
})
|
||||
)
|
||||
expect(query).toEqual({
|
||||
bindings: [dateObj],
|
||||
sql: `insert into \"test\" (\"name\") values ($1) returning *`,
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -182,11 +182,12 @@ export function getSqlQuery(query: SqlQuery | string): SqlQuery {
|
|||
export const isSQL = helpers.isSQL
|
||||
|
||||
export function isIsoDateString(str: string) {
|
||||
if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(str)) {
|
||||
const trimmedValue = str.trim()
|
||||
if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$/.test(trimmedValue)) {
|
||||
return false
|
||||
}
|
||||
let d = new Date(str)
|
||||
return d.toISOString() === str
|
||||
let d = new Date(trimmedValue)
|
||||
return d.toISOString() === trimmedValue
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -61,11 +61,7 @@ export async function getInheritablePermissions(
|
|||
export async function allowsExplicitPermissions(resourceId: string) {
|
||||
if (isViewID(resourceId)) {
|
||||
const allowed = await features.isViewPermissionEnabled()
|
||||
const minPlan = !allowed
|
||||
? env.SELF_HOSTED
|
||||
? PlanType.BUSINESS
|
||||
: PlanType.PREMIUM
|
||||
: undefined
|
||||
const minPlan = !allowed ? PlanType.BUSINESS : undefined
|
||||
|
||||
return {
|
||||
allowed,
|
||||
|
|
Loading…
Reference in New Issue