2020-10-02 13:00:17 +02:00
|
|
|
<script>
|
2021-09-29 13:07:35 +02:00
|
|
|
import { createEventDispatcher } from "svelte"
|
2023-11-06 12:22:00 +01:00
|
|
|
import { tables } from "stores/builder"
|
2023-07-05 14:49:39 +02:00
|
|
|
import { ModalContent, keepOpen, notifications } from "@budibase/bbui"
|
2020-10-09 20:10:28 +02:00
|
|
|
import RowFieldControl from "../RowFieldControl.svelte"
|
2022-01-21 16:09:27 +01:00
|
|
|
import { API } from "api"
|
2021-04-29 20:06:58 +02:00
|
|
|
import { FIELDS } from "constants/backend"
|
|
|
|
|
|
|
|
const FORMULA_TYPE = FIELDS.FORMULA.type
|
2024-10-04 18:20:30 +02:00
|
|
|
const AI_TYPE = FIELDS.AI.type
|
2020-10-02 13:00:17 +02:00
|
|
|
|
2020-10-09 20:10:28 +02:00
|
|
|
export let row = {}
|
2020-10-02 13:00:17 +02:00
|
|
|
|
|
|
|
let errors = []
|
2021-09-29 13:07:35 +02:00
|
|
|
const dispatch = createEventDispatcher()
|
2020-10-02 13:00:17 +02:00
|
|
|
|
2020-10-09 20:10:28 +02:00
|
|
|
$: creating = row?._id == null
|
|
|
|
$: table = row.tableId
|
2021-03-23 11:54:03 +01:00
|
|
|
? $tables.list.find(table => table._id === row?.tableId)
|
|
|
|
: $tables.selected
|
2020-10-09 19:49:23 +02:00
|
|
|
$: tableSchema = Object.entries(table?.schema ?? {})
|
2020-10-02 13:00:17 +02:00
|
|
|
|
2020-10-09 20:10:28 +02:00
|
|
|
async function saveRow() {
|
2022-01-21 16:09:27 +01:00
|
|
|
errors = []
|
|
|
|
try {
|
2023-03-30 17:12:28 +02:00
|
|
|
const res = await API.saveRow({ ...row, tableId: table._id })
|
2022-01-21 16:09:27 +01:00
|
|
|
notifications.success("Row saved successfully")
|
2023-03-30 17:12:28 +02:00
|
|
|
dispatch("updaterows", res._id)
|
2022-01-21 16:09:27 +01:00
|
|
|
} catch (error) {
|
2023-04-05 18:43:35 +02:00
|
|
|
const response = error.json
|
|
|
|
if (error.handled && response?.errors) {
|
|
|
|
errors = response.errors
|
|
|
|
} else if (error.handled && response?.validationErrors) {
|
|
|
|
const mappedErrors = {}
|
|
|
|
for (let field in response.validationErrors) {
|
|
|
|
mappedErrors[
|
|
|
|
field
|
|
|
|
] = `${field} ${response.validationErrors[field][0]}`
|
2022-01-21 16:09:27 +01:00
|
|
|
}
|
2023-04-05 18:43:35 +02:00
|
|
|
errors = mappedErrors
|
2022-01-21 16:09:27 +01:00
|
|
|
} else {
|
2023-04-05 18:43:35 +02:00
|
|
|
notifications.error(`Failed to save row - ${error.message}`)
|
2022-01-21 16:09:27 +01:00
|
|
|
}
|
2023-07-05 14:49:39 +02:00
|
|
|
|
|
|
|
return keepOpen
|
2021-02-25 12:55:23 +01:00
|
|
|
}
|
2020-10-02 13:00:17 +02:00
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
2022-11-23 16:03:00 +01:00
|
|
|
<span class="modal-wrap">
|
|
|
|
<ModalContent
|
|
|
|
title={creating ? "Create Row" : "Edit Row"}
|
|
|
|
confirmText={creating ? "Create Row" : "Save Row"}
|
|
|
|
onConfirm={saveRow}
|
|
|
|
showCancelButton={creating}
|
|
|
|
showSecondaryButton={!creating}
|
|
|
|
secondaryButtonWarning={!creating}
|
|
|
|
secondaryButtonText="Delete"
|
|
|
|
secondaryAction={() => {
|
|
|
|
dispatch("deleteRows", row)
|
|
|
|
}}
|
|
|
|
>
|
|
|
|
{#each tableSchema as [key, meta]}
|
2024-10-04 18:20:30 +02:00
|
|
|
{#if !meta.autocolumn && meta.type !== FORMULA_TYPE && meta.type !== AI_TYPE}
|
2022-11-23 16:03:00 +01:00
|
|
|
<div>
|
|
|
|
<RowFieldControl error={errors[key]} {meta} bind:value={row[key]} />
|
|
|
|
</div>
|
|
|
|
{/if}
|
|
|
|
{/each}
|
|
|
|
</ModalContent>
|
|
|
|
</span>
|
2020-12-16 13:00:07 +01:00
|
|
|
|
|
|
|
<style>
|
|
|
|
div {
|
|
|
|
min-width: 0;
|
|
|
|
}
|
2022-11-23 16:03:00 +01:00
|
|
|
.modal-wrap :global(.secondary-action) {
|
|
|
|
margin-right: unset;
|
|
|
|
}
|
2020-12-16 13:00:07 +01:00
|
|
|
</style>
|