1
0
Fork 0
mirror of synced 2024-07-05 22:40:39 +12:00

Restore client date range picker component

This commit is contained in:
Andrew Kingston 2024-04-23 11:54:44 +01:00
parent 2e46287b7e
commit 4f1220dd26
2 changed files with 77 additions and 0 deletions

View file

@ -0,0 +1,76 @@
<script>
import { Select } from "@budibase/bbui"
import { getContext, onDestroy } from "svelte"
import dayjs from "dayjs"
import utc from "dayjs/plugin/utc"
dayjs.extend(utc)
export let dataProvider
export let field
export let defaultValue
const component = getContext("component")
const { styleable, ActionTypes, getAction } = getContext("sdk")
const options = [
"Last 1 day",
"Last 7 days",
"Last 30 days",
"Last 3 months",
"Last 6 months",
"Last 1 year",
]
let value = options.includes(defaultValue) ? defaultValue : "Last 30 days"
$: dataProviderId = dataProvider?.id
$: addExtension = getAction(
dataProviderId,
ActionTypes.AddDataProviderQueryExtension
)
$: removeExtension = getAction(
dataProviderId,
ActionTypes.RemoveDataProviderQueryExtension
)
$: queryExtension = getQueryExtension(field, value)
$: addExtension?.($component.id, queryExtension)
const getQueryExtension = (field, value) => {
if (!field || !value) {
return null
}
let low = dayjs.utc().subtract(1, "year")
let high = dayjs.utc().add(1, "day")
if (value === "Last 1 day") {
low = dayjs.utc().subtract(1, "day")
} else if (value === "Last 7 days") {
low = dayjs.utc().subtract(7, "days")
} else if (value === "Last 30 days") {
low = dayjs.utc().subtract(30, "days")
} else if (value === "Last 3 months") {
low = dayjs.utc().subtract(3, "months")
} else if (value === "Last 6 months") {
low = dayjs.utc().subtract(6, "months")
}
return {
range: {
[field]: {
low: low.format(),
high: high.format(),
},
},
}
}
onDestroy(() => {
removeExtension?.($component.id)
})
</script>
<div use:styleable={$component.styles}>
<Select
placeholder={null}
{options}
{value}
on:change={e => (value = e.detail)}
/>
</div>

View file

@ -29,6 +29,7 @@ export { default as image } from "./Image.svelte"
export { default as embed } from "./Embed.svelte"
export { default as icon } from "./Icon.svelte"
export { default as backgroundimage } from "./BackgroundImage.svelte"
export { default as daterangepicker } from "./DateRangePicker.svelte"
export { default as cardstat } from "./CardStat.svelte"
export { default as spectrumcard } from "./SpectrumCard.svelte"
export { default as tag } from "./Tag.svelte"