Merge branch 'next' of github.com:Budibase/budibase into user-app-list

This commit is contained in:
mike12345567 2021-05-19 15:58:17 +01:00
commit d62280ae83
7 changed files with 40 additions and 39 deletions

View File

@ -12,6 +12,7 @@
${weight ? `font-weight:${weight};` : ""} ${weight ? `font-weight:${weight};` : ""}
${textAlign ? `text-align:${textAlign};` : ""} ${textAlign ? `text-align:${textAlign};` : ""}
`} `}
class:noPadding
class="spectrum-Body spectrum-Body--size{size}" class="spectrum-Body spectrum-Body--size{size}"
class:spectrum-Body--serif={serif} class:spectrum-Body--serif={serif}
> >

View File

@ -1,5 +1,5 @@
<script> <script>
import { Select, Label } from "@budibase/bbui" import { Select } from "@budibase/bbui"
import { notifications } from "@budibase/bbui" import { notifications } from "@budibase/bbui"
import { FIELDS } from "constants/backend" import { FIELDS } from "constants/backend"
import api from "builderStore/api" import api from "builderStore/api"
@ -99,15 +99,19 @@
const typeOptions = [ const typeOptions = [
{ {
label: "Text", label: "Text",
value: "string", value: FIELDS.STRING.type,
}, },
{ {
label: "Number", label: "Number",
value: "number", value: FIELDS.NUMBER.type,
}, },
{ {
label: "Date", label: "Date",
value: "datetime", value: FIELDS.DATETIME.type,
},
{
label: "Options",
value: FIELDS.OPTIONS.type,
}, },
] ]
</script> </script>

View File

@ -3,7 +3,14 @@
import { store } from "builderStore" import { store } from "builderStore"
import { tables } from "stores/backend" import { tables } from "stores/backend"
import { notifications } from "@budibase/bbui" import { notifications } from "@budibase/bbui"
import { Input, Label, ModalContent, Toggle, Divider } from "@budibase/bbui" import {
Input,
Label,
ModalContent,
Toggle,
Divider,
Layout,
} from "@budibase/bbui"
import TableDataImport from "../TableDataImport.svelte" import TableDataImport from "../TableDataImport.svelte"
import analytics from "analytics" import analytics from "analytics"
import screenTemplates from "builderStore/store/screenTemplates" import screenTemplates from "builderStore/store/screenTemplates"
@ -123,8 +130,10 @@
bind:value={createAutoscreens} bind:value={createAutoscreens}
/> />
<div> <div>
<Label grey extraSmall>Create Table from CSV (Optional)</Label> <Layout gap="XS" noPadding>
<TableDataImport bind:dataImport /> <Label grey extraSmall>Create Table from CSV (Optional)</Label>
<TableDataImport bind:dataImport />
</Layout>
</div> </div>
</ModalContent> </ModalContent>

View File

@ -214,7 +214,7 @@ exports.create = async function (ctx) {
exports.update = async function (ctx) { exports.update = async function (ctx) {
const url = await getAppUrlIfNotInUse(ctx) const url = await getAppUrlIfNotInUse(ctx)
const db = new CouchDB(ctx.params.appId) const db = new CouchDB(ctx.params.appId)
const application = await db.get(ctx.params.appId) const application = await db.get(DocumentTypes.APP_METADATA)
const data = ctx.request.body const data = ctx.request.body
const newData = { ...application, ...data, url } const newData = { ...application, ...data, url }
@ -235,7 +235,7 @@ exports.update = async function (ctx) {
exports.delete = async function (ctx) { exports.delete = async function (ctx) {
const db = new CouchDB(ctx.params.appId) const db = new CouchDB(ctx.params.appId)
const app = await db.get(ctx.params.appId) const app = await db.get(DocumentTypes.APP_METADATA)
const result = await db.destroy() const result = await db.destroy()
/* istanbul ignore next */ /* istanbul ignore next */
if (!env.isTest()) { if (!env.isTest()) {

View File

@ -6,7 +6,7 @@ const {
InternalTables, InternalTables,
} = require("../../../db/utils") } = require("../../../db/utils")
const { isEqual } = require("lodash/fp") const { isEqual } = require("lodash/fp")
const { AutoFieldSubTypes } = require("../../../constants") const { AutoFieldSubTypes, FieldTypes } = require("../../../constants")
const { inputProcessing } = require("../../../utilities/rowProcessor") const { inputProcessing } = require("../../../utilities/rowProcessor")
const { USERS_TABLE_SCHEMA } = require("../../../constants") const { USERS_TABLE_SCHEMA } = require("../../../constants")
@ -72,18 +72,21 @@ exports.handleDataImport = async (appId, user, table, dataImport) => {
row._id = generateRowID(table._id) row._id = generateRowID(table._id)
row.tableId = table._id row.tableId = table._id
const processed = inputProcessing(user, table, row) const processed = inputProcessing(user, table, row)
table = processed.table
row = processed.row row = processed.row
// these auto-fields will never actually link anywhere (always builder)
for (let [fieldName, schema] of Object.entries(table.schema)) { for (let [fieldName, schema] of Object.entries(table.schema)) {
// check whether the options need to be updated for inclusion as part of the data import
if ( if (
schema.autocolumn && schema.type === FieldTypes.OPTIONS &&
(schema.subtype === AutoFieldSubTypes.CREATED_BY || (!schema.constraints.inclusion ||
schema.subtype === AutoFieldSubTypes.UPDATED_BY) schema.constraints.inclusion.indexOf(row[fieldName]) === -1)
) { ) {
delete row[fieldName] schema.constraints.inclusion = [
...schema.constraints.inclusion,
row[fieldName],
]
} }
} }
table = processed.table
data[i] = row data[i] = row
} }

View File

@ -304,24 +304,6 @@ describe("/rows", () => {
}) })
}) })
describe("search", () => {
it("should run a search on the table", async () => {
const res = await request
.post(`/api/${table._id}/rows/search`)
.send({
query: {
name: "Test",
},
pagination: { pageSize: 25 }
})
.set(config.defaultHeaders())
.expect('Content-Type', /json/)
.expect(200)
expect(res.body.rows.length).toEqual(1)
expect(res.body.bookmark).toBeDefined()
})
})
describe("fetchView", () => { describe("fetchView", () => {
it("should be able to fetch tables contents via 'view'", async () => { it("should be able to fetch tables contents via 'view'", async () => {
const row = await config.createRow() const row = await config.createRow()

View File

@ -1,14 +1,16 @@
const csv = require("csvtojson") const csv = require("csvtojson")
const { FieldTypes } = require("../constants")
const VALIDATORS = { const VALIDATORS = {
string: () => true, [FieldTypes.STRING]: () => true,
number: attribute => !isNaN(Number(attribute)), [FieldTypes.OPTIONS]: () => true,
datetime: attribute => !isNaN(new Date(attribute).getTime()), [FieldTypes.NUMBER]: attribute => !isNaN(Number(attribute)),
[FieldTypes.DATETIME]: attribute => !isNaN(new Date(attribute).getTime()),
} }
const PARSERS = { const PARSERS = {
number: attribute => Number(attribute), [FieldTypes.NUMBER]: attribute => Number(attribute),
datetime: attribute => new Date(attribute).toISOString(), [FieldTypes.DATETIME]: attribute => new Date(attribute).toISOString(),
} }
function parse(csvString, parsers) { function parse(csvString, parsers) {