response parsing

This commit is contained in:
Martin McKeaveney 2021-02-18 19:24:42 +00:00
parent a834f17a80
commit f53463ec0c
4 changed files with 51 additions and 30 deletions

View File

@ -1,5 +1,5 @@
<script> <script>
import { Input } from "@budibase/bbui" import { Button, Input } from "@budibase/bbui"
export let object = {} export let object = {}
@ -28,7 +28,7 @@
<i class="ri-close-circle-fill" on:click={() => deleteEntry(idx)} /> <i class="ri-close-circle-fill" on:click={() => deleteEntry(idx)} />
{/each} {/each}
</div> </div>
<i class="ri-add-circle-fill" on:click={addEntry} /> <Button secondary thin outline on:click={addEntry}>Add</Button>
<style> <style>
.container { .container {
@ -39,8 +39,7 @@
margin-bottom: var(--spacing-m); margin-bottom: var(--spacing-m);
} }
.ri-close-circle-fill, .ri-close-circle-fill {
.ri-add-circle-fill {
cursor: pointer; cursor: pointer;
} }
</style> </style>

View File

@ -6,6 +6,7 @@
Input, Input,
Heading, Heading,
Select, Select,
Spacer
} from "@budibase/bbui" } from "@budibase/bbui"
import Editor from "./QueryEditor.svelte" import Editor from "./QueryEditor.svelte"
import KeyValueBuilder from "./KeyValueBuilder.svelte" import KeyValueBuilder from "./KeyValueBuilder.svelte"
@ -30,6 +31,7 @@
{#if schema.fields[field]?.type === 'object'} {#if schema.fields[field]?.type === 'object'}
<div> <div>
<Label small>{field}</Label> <Label small>{field}</Label>
<Spacer small />
<KeyValueBuilder bind:object={fields[field]} /> <KeyValueBuilder bind:object={fields[field]} />
</div> </div>
{:else if schema.fields[field]?.type === 'json'} {:else if schema.fields[field]?.type === 'json'}
@ -57,6 +59,8 @@
</div> </div>
</form> </form>
{#if schema.customisable} {#if schema.customisable}
<Label small>Query</Label>
<Spacer small />
<Editor <Editor
label="Query" label="Query"
mode="json" mode="json"

View File

@ -1,6 +1,6 @@
<script> <script>
import { params } from "@sveltech/routify" import { params } from "@sveltech/routify"
import { Switcher, Modal } from "@budibase/bbui" import { Button, Switcher, Modal } from "@budibase/bbui"
import TableNavigator from "components/backend/TableNavigator/TableNavigator.svelte" import TableNavigator from "components/backend/TableNavigator/TableNavigator.svelte"
import DatasourceNavigator from "components/backend/DatasourceNavigator/DatasourceNavigator.svelte" import DatasourceNavigator from "components/backend/DatasourceNavigator/DatasourceNavigator.svelte"
import CreateDatasourceModal from "components/backend/DatasourceNavigator/modals/CreateDatasourceModal.svelte" import CreateDatasourceModal from "components/backend/DatasourceNavigator/modals/CreateDatasourceModal.svelte"
@ -27,10 +27,9 @@
<div class="nav"> <div class="nav">
<Switcher headings={tabs} bind:value={tab}> <Switcher headings={tabs} bind:value={tab}>
<div class="title"> <div class="title">
<i <Button blue data-cy={`new-${tab}`} on:click={modal.show}>
data-cy={`new-${tab}`} <i class="ri-add-fill" />
class="ri-add-circle-fill" </Button>
on:click={modal.show} />
</div> </div>
{#if tab === 'table'} {#if tab === 'table'}
<TableNavigator /> <TableNavigator />
@ -82,7 +81,7 @@
position: relative; position: relative;
} }
i { .title {
font-size: 20px; font-size: 20px;
position: absolute; position: absolute;
top: var(--spacing-l); top: var(--spacing-l);

View File

@ -98,53 +98,72 @@ class RestIntegration {
this.config = config this.config = config
} }
async parseResponse(response) {
switch (this.headers.Accept) {
case "application/json":
return await response.json()
case "text/html":
return await response.text()
default:
return await response.json()
}
}
async create({ path, queryString, headers = {}, json }) { async create({ path, queryString, headers = {}, json }) {
this.headers = {
...this.config.defaultHeaders,
...headers,
}
const response = await fetch(this.config.url + path + queryString, { const response = await fetch(this.config.url + path + queryString, {
method: "POST", method: "POST",
headers: { headers: this.headers,
...this.config.defaultHeaders,
...headers,
},
body: JSON.stringify(json), body: JSON.stringify(json),
}) })
return await response.json() return await this.parseResponse(response)
} }
async read({ path, queryString, headers = {} }) { async read({ path, queryString, headers = {} }) {
this.headers = {
...this.config.defaultHeaders,
...headers,
}
const response = await fetch(this.config.url + path + queryString, { const response = await fetch(this.config.url + path + queryString, {
headers: { headers: this.headers,
...this.config.defaultHeaders,
...headers,
},
}) })
return await response.json() return await this.parseResponse(response)
} }
async update({ path, queryString, headers = {}, json }) { async update({ path, queryString, headers = {}, json }) {
this.headers = {
...this.config.defaultHeaders,
...headers,
}
const response = await fetch(this.config.url + path + queryString, { const response = await fetch(this.config.url + path + queryString, {
method: "POST", method: "POST",
headers: { headers: this.headers,
...this.config.defaultHeaders,
...headers,
},
body: JSON.stringify(json), body: JSON.stringify(json),
}) })
return await response.json() return await this.parseResponse(response)
} }
async delete({ path, queryString, headers = {} }) { async delete({ path, queryString, headers = {} }) {
this.headers = {
...this.config.defaultHeaders,
...headers,
}
const response = await fetch(this.config.url + path + queryString, { const response = await fetch(this.config.url + path + queryString, {
method: "DELETE", method: "DELETE",
headers: { headers: this.headers,
...this.config.defaultHeaders,
...headers,
},
}) })
return await response.json() return await this.parseResponse(response)
} }
} }