Merge branch 'table-improvements-2' of github.com:Budibase/budibase into conditional-table-colours
This commit is contained in:
commit
62d43bc183
|
@ -1,5 +1,5 @@
|
|||
<script>
|
||||
import { Select, Label, Checkbox, Input, Body } from "@budibase/bbui"
|
||||
import { Select, Label, Checkbox, Body } from "@budibase/bbui"
|
||||
import { tables, viewsV2 } from "stores/builder"
|
||||
import DrawerBindableInput from "components/common/bindings/DrawerBindableInput.svelte"
|
||||
|
||||
|
@ -46,19 +46,35 @@
|
|||
|
||||
{#if parameters.confirm}
|
||||
<Label small>Title</Label>
|
||||
<Input placeholder="Delete Row" bind:value={parameters.customTitleText} />
|
||||
<DrawerBindableInput
|
||||
placeholder="Prompt User"
|
||||
value={parameters.customTitleText}
|
||||
on:change={e => (parameters.customTitleText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
|
||||
<Label small>Text</Label>
|
||||
<Input
|
||||
placeholder="Are you sure you want to delete?"
|
||||
bind:value={parameters.confirmText}
|
||||
<DrawerBindableInput
|
||||
placeholder="Are you sure you want to continue?"
|
||||
value={parameters.confirmText}
|
||||
on:change={e => (parameters.confirmText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
|
||||
<Label small>Confirm Text</Label>
|
||||
<Input placeholder="Confirm" bind:value={parameters.confirmButtonText} />
|
||||
|
||||
<DrawerBindableInput
|
||||
placeholder="Confirm"
|
||||
value={parameters.confirmButtonText}
|
||||
on:change={e => (parameters.confirmButtonText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
<Label small>Cancel Text</Label>
|
||||
<Input placeholder="Cancel" bind:value={parameters.cancelButtonText} />
|
||||
<DrawerBindableInput
|
||||
placeholder="Cancel"
|
||||
value={parameters.cancelButtonText}
|
||||
on:change={e => (parameters.cancelButtonText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
<script>
|
||||
import { Select, Label, Body, Checkbox, Input } from "@budibase/bbui"
|
||||
import { Select, Label, Body, Checkbox } from "@budibase/bbui"
|
||||
import {
|
||||
selectedScreen,
|
||||
componentStore,
|
||||
tables,
|
||||
viewsV2,
|
||||
} from "stores/builder"
|
||||
import DrawerBindableInput from "components/common/bindings/DrawerBindableInput.svelte"
|
||||
import { getSchemaForDatasourcePlus } from "dataBinding"
|
||||
import SaveFields from "./SaveFields.svelte"
|
||||
import { getDatasourceLikeProviders } from "components/design/settings/controls/ButtonActionEditor/actions/utils"
|
||||
|
@ -73,22 +74,35 @@
|
|||
|
||||
{#if parameters.confirm}
|
||||
<Label small>Title</Label>
|
||||
<Input
|
||||
placeholder="Duplicate Row"
|
||||
bind:value={parameters.customTitleText}
|
||||
<DrawerBindableInput
|
||||
placeholder="Prompt User"
|
||||
value={parameters.customTitleText}
|
||||
on:change={e => (parameters.customTitleText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
|
||||
<Label small>Text</Label>
|
||||
<Input
|
||||
placeholder="Are you sure you want to duplicate this row?"
|
||||
bind:value={parameters.confirmText}
|
||||
<DrawerBindableInput
|
||||
placeholder="Are you sure you want to continue?"
|
||||
value={parameters.confirmText}
|
||||
on:change={e => (parameters.confirmText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
|
||||
<Label small>Confirm Text</Label>
|
||||
<Input placeholder="Confirm" bind:value={parameters.confirmButtonText} />
|
||||
|
||||
<DrawerBindableInput
|
||||
placeholder="Confirm"
|
||||
value={parameters.confirmButtonText}
|
||||
on:change={e => (parameters.confirmButtonText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
<Label small>Cancel Text</Label>
|
||||
<Input placeholder="Cancel" bind:value={parameters.cancelButtonText} />
|
||||
<DrawerBindableInput
|
||||
placeholder="Cancel"
|
||||
value={parameters.cancelButtonText}
|
||||
on:change={e => (parameters.cancelButtonText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<script>
|
||||
import { Select, Layout, Input, Checkbox } from "@budibase/bbui"
|
||||
import { Select, Layout, Checkbox } from "@budibase/bbui"
|
||||
import DrawerBindableInput from "components/common/bindings/DrawerBindableInput.svelte"
|
||||
import { datasources, integrations, queries } from "stores/builder"
|
||||
import BindingBuilder from "components/integration/QueryBindingBuilder.svelte"
|
||||
import IntegrationQueryEditor from "components/integration/index.svelte"
|
||||
|
@ -58,37 +59,46 @@
|
|||
text="Do not display default notification"
|
||||
bind:value={parameters.notificationOverride}
|
||||
/>
|
||||
<br />
|
||||
{#if parameters.queryId}
|
||||
<Checkbox text="Require confirmation" bind:value={parameters.confirm} />
|
||||
|
||||
{#if parameters.confirm}
|
||||
<Input
|
||||
label="Title"
|
||||
placeholder="Execute Query"
|
||||
bind:value={parameters.customTitleText}
|
||||
/>
|
||||
<div class="params">
|
||||
<DrawerBindableInput
|
||||
label="Title"
|
||||
placeholder="Prompt User"
|
||||
value={parameters.customTitleText}
|
||||
on:change={e => (parameters.customTitleText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
<DrawerBindableInput
|
||||
label="Message"
|
||||
placeholder="Are you sure you want to continue?"
|
||||
value={parameters.confirmText}
|
||||
on:change={e => (parameters.confirmText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
|
||||
<Input
|
||||
label="Text"
|
||||
placeholder="Are you sure you want to execute this query?"
|
||||
bind:value={parameters.confirmText}
|
||||
/>
|
||||
<DrawerBindableInput
|
||||
label="Confirm Text"
|
||||
placeholder="Confirm"
|
||||
value={parameters.confirmButtonText}
|
||||
on:change={e => (parameters.confirmButtonText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
|
||||
<Input
|
||||
label="Confirm Text"
|
||||
placeholder="Confirm"
|
||||
bind:value={parameters.confirmButtonText}
|
||||
/>
|
||||
|
||||
<Input
|
||||
label="Cancel Text"
|
||||
placeholder="Cancel"
|
||||
bind:value={parameters.cancelButtonText}
|
||||
/>
|
||||
<DrawerBindableInput
|
||||
label="Cancel Text"
|
||||
placeholder="Cancel"
|
||||
value={parameters.cancelButtonText}
|
||||
on:change={e => (parameters.cancelButtonText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{#if query?.parameters?.length > 0}
|
||||
<br />
|
||||
<div class="params">
|
||||
<BindingBuilder
|
||||
customParams={parameters.queryParams}
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
<script>
|
||||
import { Select, Label, Body, Checkbox, Input } from "@budibase/bbui"
|
||||
import { Select, Label, Body, Checkbox } from "@budibase/bbui"
|
||||
import {
|
||||
selectedScreen,
|
||||
componentStore,
|
||||
tables,
|
||||
viewsV2,
|
||||
} from "stores/builder"
|
||||
import DrawerBindableInput from "components/common/bindings/DrawerBindableInput.svelte"
|
||||
import { getSchemaForDatasourcePlus } from "dataBinding"
|
||||
import SaveFields from "./SaveFields.svelte"
|
||||
import { getDatasourceLikeProviders } from "components/design/settings/controls/ButtonActionEditor/actions/utils"
|
||||
|
@ -73,19 +74,35 @@
|
|||
|
||||
{#if parameters.confirm}
|
||||
<Label small>Title</Label>
|
||||
<Input placeholder="Save Row" bind:value={parameters.customTitleText} />
|
||||
<DrawerBindableInput
|
||||
placeholder="Prompt User"
|
||||
value={parameters.customTitleText}
|
||||
on:change={e => (parameters.customTitleText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
|
||||
<Label small>Text</Label>
|
||||
<Input
|
||||
placeholder="Are you sure you want to save this row?"
|
||||
bind:value={parameters.confirmText}
|
||||
<DrawerBindableInput
|
||||
placeholder="Are you sure you want to continue?"
|
||||
value={parameters.confirmText}
|
||||
on:change={e => (parameters.confirmText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
|
||||
<Label small>Confirm Text</Label>
|
||||
<Input placeholder="Confirm" bind:value={parameters.confirmButtonText} />
|
||||
|
||||
<DrawerBindableInput
|
||||
placeholder="Confirm"
|
||||
value={parameters.confirmButtonText}
|
||||
on:change={e => (parameters.confirmButtonText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
<Label small>Cancel Text</Label>
|
||||
<Input placeholder="Cancel" bind:value={parameters.cancelButtonText} />
|
||||
<DrawerBindableInput
|
||||
placeholder="Cancel"
|
||||
value={parameters.cancelButtonText}
|
||||
on:change={e => (parameters.cancelButtonText = e.detail)}
|
||||
{bindings}
|
||||
/>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
|
|
|
@ -4,7 +4,12 @@ import {
|
|||
getDatasource,
|
||||
knexClient,
|
||||
} from "../../../integrations/tests/utils"
|
||||
import { db as dbCore, utils } from "@budibase/backend-core"
|
||||
import {
|
||||
db as dbCore,
|
||||
MAX_VALID_DATE,
|
||||
MIN_VALID_DATE,
|
||||
utils,
|
||||
} from "@budibase/backend-core"
|
||||
|
||||
import * as setup from "./utilities"
|
||||
import {
|
||||
|
@ -1098,21 +1103,37 @@ describe.each([
|
|||
}).toFindNothing()
|
||||
})
|
||||
|
||||
// We never implemented half-open ranges in Lucene.
|
||||
!isLucene &&
|
||||
it("can search using just a low value", async () => {
|
||||
await expectQuery({
|
||||
range: { age: { low: 5 } },
|
||||
}).toContainExactly([{ age: 10 }])
|
||||
})
|
||||
it("greater than equal to", async () => {
|
||||
await expectQuery({
|
||||
range: {
|
||||
age: { low: 10, high: Number.MAX_SAFE_INTEGER },
|
||||
},
|
||||
}).toContainExactly([{ age: 10 }])
|
||||
})
|
||||
|
||||
// We never implemented half-open ranges in Lucene.
|
||||
!isLucene &&
|
||||
it("can search using just a high value", async () => {
|
||||
await expectQuery({
|
||||
range: { age: { high: 5 } },
|
||||
}).toContainExactly([{ age: 1 }])
|
||||
})
|
||||
it("greater than", async () => {
|
||||
await expectQuery({
|
||||
range: {
|
||||
age: { low: 5, high: Number.MAX_SAFE_INTEGER },
|
||||
},
|
||||
}).toContainExactly([{ age: 10 }])
|
||||
})
|
||||
|
||||
it("less than equal to", async () => {
|
||||
await expectQuery({
|
||||
range: {
|
||||
age: { high: 1, low: Number.MIN_SAFE_INTEGER },
|
||||
},
|
||||
}).toContainExactly([{ age: 1 }])
|
||||
})
|
||||
|
||||
it("less than", async () => {
|
||||
await expectQuery({
|
||||
range: {
|
||||
age: { high: 5, low: Number.MIN_SAFE_INTEGER },
|
||||
},
|
||||
}).toContainExactly([{ age: 1 }])
|
||||
})
|
||||
})
|
||||
|
||||
describe("sort", () => {
|
||||
|
@ -1232,21 +1253,29 @@ describe.each([
|
|||
}).toFindNothing()
|
||||
})
|
||||
|
||||
// We never implemented half-open ranges in Lucene.
|
||||
!isLucene &&
|
||||
it("can search using just a low value", async () => {
|
||||
await expectQuery({
|
||||
range: { dob: { low: JAN_5TH } },
|
||||
}).toContainExactly([{ dob: JAN_10TH }])
|
||||
})
|
||||
it("greater than equal to", async () => {
|
||||
await expectQuery({
|
||||
range: { dob: { low: JAN_10TH, high: MAX_VALID_DATE.toISOString() } },
|
||||
}).toContainExactly([{ dob: JAN_10TH }])
|
||||
})
|
||||
|
||||
// We never implemented half-open ranges in Lucene.
|
||||
!isLucene &&
|
||||
it("can search using just a high value", async () => {
|
||||
await expectQuery({
|
||||
range: { dob: { high: JAN_5TH } },
|
||||
}).toContainExactly([{ dob: JAN_1ST }])
|
||||
})
|
||||
it("greater than", async () => {
|
||||
await expectQuery({
|
||||
range: { dob: { low: JAN_5TH, high: MAX_VALID_DATE.toISOString() } },
|
||||
}).toContainExactly([{ dob: JAN_10TH }])
|
||||
})
|
||||
|
||||
it("less than equal to", async () => {
|
||||
await expectQuery({
|
||||
range: { dob: { high: JAN_1ST, low: MIN_VALID_DATE.toISOString() } },
|
||||
}).toContainExactly([{ dob: JAN_1ST }])
|
||||
})
|
||||
|
||||
it("less than", async () => {
|
||||
await expectQuery({
|
||||
range: { dob: { high: JAN_5TH, low: MIN_VALID_DATE.toISOString() } },
|
||||
}).toContainExactly([{ dob: JAN_1ST }])
|
||||
})
|
||||
})
|
||||
|
||||
describe("sort", () => {
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
const nodemailer = require("nodemailer")
|
||||
|
||||
const options = {
|
||||
port: 587,
|
||||
host: "smtp.ethereal.email",
|
||||
secure: false,
|
||||
auth: {
|
||||
user: "seamus99@ethereal.email",
|
||||
pass: "5ghVteZAqj6jkKJF9R",
|
||||
},
|
||||
}
|
||||
|
||||
const transporter = nodemailer.createTransport(options)
|
||||
transporter.verify(function (error) {
|
||||
if (error) {
|
||||
console.log(error)
|
||||
} else {
|
||||
console.log("Ethereal server is ready to take our messages")
|
||||
}
|
||||
})
|
||||
|
||||
const message = {
|
||||
from: "from@example.com",
|
||||
to: "to@example.com",
|
||||
subject: "Did this email arrive?",
|
||||
html: "Hello World!",
|
||||
}
|
||||
|
||||
transporter.sendMail(message).then(response => {
|
||||
console.log("Test email URL: " + nodemailer.getTestMessageUrl(response))
|
||||
})
|
Loading…
Reference in New Issue