Handle frontend
This commit is contained in:
parent
8f741ffe6a
commit
f4bd303572
|
@ -1,9 +1,9 @@
|
||||||
<script>
|
<script>
|
||||||
import { Select, Icon } from "@budibase/bbui"
|
import { Select, Icon } from "@budibase/bbui"
|
||||||
import { FIELDS } from "constants/backend"
|
import { FIELDS } from "constants/backend"
|
||||||
|
import { canBeDisplayColumn, utils } from "@budibase/shared-core"
|
||||||
import { API } from "api"
|
import { API } from "api"
|
||||||
import { parseFile } from "./utils"
|
import { parseFile } from "./utils"
|
||||||
import { canBeDisplayColumn } from "@budibase/shared-core"
|
|
||||||
|
|
||||||
export let rows = []
|
export let rows = []
|
||||||
export let schema = {}
|
export let schema = {}
|
||||||
|
@ -97,6 +97,8 @@
|
||||||
let errors = {}
|
let errors = {}
|
||||||
let selectedColumnTypes = {}
|
let selectedColumnTypes = {}
|
||||||
|
|
||||||
|
let rawRows = []
|
||||||
|
|
||||||
$: displayColumnOptions = Object.keys(schema || {}).filter(column => {
|
$: displayColumnOptions = Object.keys(schema || {}).filter(column => {
|
||||||
return validation[column] && canBeDisplayColumn(schema[column].type)
|
return validation[column] && canBeDisplayColumn(schema[column].type)
|
||||||
})
|
})
|
||||||
|
@ -106,6 +108,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
$: {
|
$: {
|
||||||
|
rows = rawRows.map(row => utils.trimOtherProps(row, Object.keys(schema)))
|
||||||
|
|
||||||
// binding in consumer is causing double renders here
|
// binding in consumer is causing double renders here
|
||||||
const newValidateHash = JSON.stringify(rows) + JSON.stringify(schema)
|
const newValidateHash = JSON.stringify(rows) + JSON.stringify(schema)
|
||||||
if (newValidateHash !== validateHash) {
|
if (newValidateHash !== validateHash) {
|
||||||
|
@ -122,7 +126,7 @@
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await parseFile(e)
|
const response = await parseFile(e)
|
||||||
rows = response.rows
|
rawRows = response.rows
|
||||||
schema = response.schema
|
schema = response.schema
|
||||||
fileName = response.fileName
|
fileName = response.fileName
|
||||||
selectedColumnTypes = Object.entries(response.schema).reduce(
|
selectedColumnTypes = Object.entries(response.schema).reduce(
|
||||||
|
@ -188,7 +192,7 @@
|
||||||
type="file"
|
type="file"
|
||||||
on:change={handleFile}
|
on:change={handleFile}
|
||||||
/>
|
/>
|
||||||
<label for="file-upload" class:uploaded={rows.length > 0}>
|
<label for="file-upload" class:uploaded={rawRows.length > 0}>
|
||||||
{#if error}
|
{#if error}
|
||||||
Error: {error}
|
Error: {error}
|
||||||
{:else if fileName}
|
{:else if fileName}
|
||||||
|
@ -198,7 +202,7 @@
|
||||||
{/if}
|
{/if}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
{#if rows.length > 0 && !error}
|
{#if rawRows.length > 0 && !error}
|
||||||
<div class="schema-fields">
|
<div class="schema-fields">
|
||||||
{#each Object.entries(schema) as [name, column]}
|
{#each Object.entries(schema) as [name, column]}
|
||||||
<div class="field">
|
<div class="field">
|
||||||
|
|
|
@ -67,3 +67,13 @@ export function hasSchema(test: any) {
|
||||||
Object.keys(test).length > 0
|
Object.keys(test).length > 0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function trimOtherProps(object: any, allowedProps: string[]) {
|
||||||
|
const result = Object.keys(object)
|
||||||
|
.filter(key => allowedProps.includes(key))
|
||||||
|
.reduce<Record<string, any>>(
|
||||||
|
(acc, key) => ({ ...acc, [key]: object[key] }),
|
||||||
|
{}
|
||||||
|
)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue