1
0
Fork 0
mirror of synced 2024-06-30 12:00:31 +12:00

Merge pull request #6987 from Budibase/fix/other-fixes

Minor automation fixes
This commit is contained in:
Michael Drury 2022-07-29 15:45:18 +01:00 committed by GitHub
commit f1859076e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 4 deletions

View file

@ -1,6 +1,8 @@
import { Helpers } from "@budibase/bbui" import { Helpers } from "@budibase/bbui"
import { OperatorOptions, SqlNumberTypeRangeMap } from "../constants" import { OperatorOptions, SqlNumberTypeRangeMap } from "../constants"
const HBS_REGEX = /{{([^{].*?)}}/g
/** /**
* Returns the valid operator options for a certain data type * Returns the valid operator options for a certain data type
* @param type the data type * @param type the data type
@ -98,6 +100,8 @@ export const buildLuceneQuery = filter => {
if (Array.isArray(filter)) { if (Array.isArray(filter)) {
filter.forEach(expression => { filter.forEach(expression => {
let { operator, field, type, value, externalType } = expression let { operator, field, type, value, externalType } = expression
const isHbs =
typeof value === "string" && value.match(HBS_REGEX)?.length > 0
// Parse all values into correct types // Parse all values into correct types
if (type === "datetime" && value) { if (type === "datetime" && value) {
value = new Date(value).toISOString() value = new Date(value).toISOString()
@ -105,7 +109,7 @@ export const buildLuceneQuery = filter => {
if (type === "number" && !Array.isArray(value)) { if (type === "number" && !Array.isArray(value)) {
if (operator === "oneOf") { if (operator === "oneOf") {
value = value.split(",").map(item => parseFloat(item)) value = value.split(",").map(item => parseFloat(item))
} else { } else if (!isHbs) {
value = parseFloat(value) value = parseFloat(value)
} }
} }

View file

@ -82,6 +82,27 @@ async function getTable(appId, tableId) {
return ctx.body return ctx.body
} }
function typeCoercion(filters, table) {
if (!filters || !table) {
return filters
}
for (let key of Object.keys(filters)) {
if (typeof filters[key] === "object") {
for (let [property, value] of Object.entries(filters[key])) {
const column = table.schema[property]
// convert string inputs
if (!column || typeof value !== "string") {
continue
}
if (column.type === FieldTypes.NUMBER) {
filters[key][property] = parseFloat(value)
}
}
}
}
return filters
}
exports.run = async function ({ inputs, appId }) { exports.run = async function ({ inputs, appId }) {
const { tableId, filters, sortColumn, sortOrder, limit } = inputs const { tableId, filters, sortColumn, sortOrder, limit } = inputs
const table = await getTable(appId, tableId) const table = await getTable(appId, tableId)
@ -99,7 +120,7 @@ exports.run = async function ({ inputs, appId }) {
sortType, sortType,
limit, limit,
sort: sortColumn, sort: sortColumn,
query: filters || {}, query: typeCoercion(filters || {}, table),
// default to ascending, like data tab // default to ascending, like data tab
sortOrder: sortOrder || SortOrders.ASCENDING, sortOrder: sortOrder || SortOrders.ASCENDING,
}, },

View file

@ -31,15 +31,21 @@ exports.definition = {
type: "boolean", type: "boolean",
description: "Whether the action was successful", description: "Whether the action was successful",
}, },
message: {
type: "string",
description: "What was output",
},
}, },
required: ["success"], required: ["success", "message"],
}, },
}, },
} }
exports.run = async function ({ inputs, appId }) { exports.run = async function ({ inputs, appId }) {
console.log(`App ${appId} - ${inputs.text}`) const message = `App ${appId} - ${inputs.text}`
console.log(message)
return { return {
success: true, success: true,
message,
} }
} }