forked from tsai/budibase
34 changed files with 296 additions and 180 deletions
@ -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 |
|||
} |
|||
@ -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); |
|||
} |
|||
Loading…
Reference in new issue