1
0
Fork 0
mirror of synced 2024-09-10 06:26:02 +12:00
This commit is contained in:
Gerard Burns 2024-04-12 10:17:15 +01:00
parent fcca165a2e
commit d506e0724e
10 changed files with 46 additions and 14 deletions

View file

@ -1,6 +1,6 @@
<script> <script>
import { ContextTooltip } from "@budibase/bbui" import { ContextTooltip } from "@budibase/bbui"
import { Column, Support, NotRequired, StringsAsNumbers } from './subjects' import { Column, Support, NotRequired, StringsAsNumbers, DatesAsNumbers } from './subjects'
import subjects from '../subjects' import subjects from '../subjects'
export let anchor export let anchor
@ -24,6 +24,8 @@
<StringsAsNumbers /> <StringsAsNumbers />
{:else if subject === subjects.notRequired} {:else if subject === subjects.notRequired}
<NotRequired /> <NotRequired />
{:else if subject === subjects.datesAsNumbers}
<DatesAsNumbers />
{/if} {/if}
</div> </div>
</ContextTooltip> </ContextTooltip>

View file

@ -0,0 +1,9 @@
<script>
import { Subject, Section } from './components'
</script>
<Subject heading="Dates as Numbers">
<Section>
A Date can be used in place of a numeric value, but it will be parsed as a UNIX epoch timestamp, which is the number of milliseconds since Jan 1st 1970.
</Section>
</Subject>

View file

@ -2,3 +2,4 @@ export { default as Column } from "./Column.svelte"
export { default as NotRequired } from "./NotRequired.svelte" export { default as NotRequired } from "./NotRequired.svelte"
export { default as StringsAsNumbers } from "./StringsAsNumbers.svelte" export { default as StringsAsNumbers } from "./StringsAsNumbers.svelte"
export { default as Support } from "./Support.svelte" export { default as Support } from "./Support.svelte"
export { default as DatesAsNumbers } from "./DatesAsNumbers.svelte"

View file

@ -1,7 +1,7 @@
<script> <script>
import ExplanationModal from './ExplanationModal/index.svelte' import ExplanationModal from './ExplanationModal/index.svelte'
import { messages as messageConstants, getColumnInfoMessagesAndSupport } from "./columnInfo"; import { messages as messageConstants, getColumnInfoMessagesAndSupport } from "./columnInfo";
import { Column, Support, NotRequired, StringNumber, JSONPrimitivesOnly } from "./lines" import { Column, Support, NotRequired, StringNumber, JSONPrimitivesOnly, DateAsNumber } from "./lines"
import subjects from './subjects'; import subjects from './subjects';
export let columnInfo export let columnInfo
@ -31,6 +31,10 @@
explanationModalSubject = option; explanationModalSubject = option;
root = root root = root
} }
$: {
console.log(messages);
}
</script> </script>
<div <div
@ -64,8 +68,8 @@
{setExplanationSubject} {setExplanationSubject}
/> />
{/if} {/if}
{#if messages.includes(messageConstants.chartDatetime)} {#if messages.includes(messageConstants.dateAsNumber)}
<JSONPrimitivesOnly <DateAsNumber
{setExplanationSubject} {setExplanationSubject}
/> />
{/if} {/if}

View file

@ -3,7 +3,7 @@ import { capitalize } from 'lodash';
export const messages = { export const messages = {
jsonPrimitivesOnly: Symbol("column-info-json-primitives-only"), jsonPrimitivesOnly: Symbol("column-info-json-primitives-only"),
stringAsNumber: Symbol("column-info-string-as-number"), stringAsNumber: Symbol("column-info-string-as-number"),
chartDatetime: Symbol("column-info-chart-datetime"), dateAsNumber: Symbol("column-info-date-as-number"),
notRequired: Symbol("column-info-not-required"), notRequired: Symbol("column-info-not-required"),
contextError: Symbol("column-info-context-error"), contextError: Symbol("column-info-context-error"),
} }
@ -55,7 +55,6 @@ const getSupportMessage = (type, columnInfo) => {
} }
export const getColumnInfoMessagesAndSupport = (fieldSchema, columnInfo) => { export const getColumnInfoMessagesAndSupport = (fieldSchema, columnInfo) => {
try { try {
const columnInfoMessagesAndSupport = { const columnInfoMessagesAndSupport = {
support: getSupport(fieldSchema.type, columnInfo), support: getSupport(fieldSchema.type, columnInfo),

View file

@ -0,0 +1,16 @@
<script>
import { Line, InfoWord, DocumentationLink, Space, Text, Period } from "../typography"
import subjects from '../subjects'
export let setExplanationSubject
</script>
<Line>
<Text value="Will be parsed as a " />
<InfoWord
on:mouseenter={() => setExplanationSubject(subjects.datesAsNumbers)}
on:mouseleave={() => setExplanationSubject(subjects.none)}
text="UNIX epoch timestamp"
/>
<Period />
</Line>

View file

@ -3,3 +3,4 @@ export { default as NotRequired } from "./NotRequired.svelte"
export { default as StringNumber } from "./StringNumber.svelte" export { default as StringNumber } from "./StringNumber.svelte"
export { default as Support } from "./Support.svelte" export { default as Support } from "./Support.svelte"
export { default as JSONPrimitivesOnly } from "./JSONPrimitivesOnly.svelte" export { default as JSONPrimitivesOnly } from "./JSONPrimitivesOnly.svelte"
export { default as DateAsNumber } from "./DateAsNumber.svelte"

View file

@ -2,6 +2,7 @@ const subjects = {
column: Symbol("explanation-modal-column"), column: Symbol("explanation-modal-column"),
support: Symbol("explanation-modal-support"), support: Symbol("explanation-modal-support"),
stringsAsNumbers: Symbol("explanation-modal-strings-as-numbers"), stringsAsNumbers: Symbol("explanation-modal-strings-as-numbers"),
datesAsNumbers: Symbol("explanation-modal-dates-as-numbers"),
notRequired: Symbol("explanation-modal-not-required"), notRequired: Symbol("explanation-modal-not-required"),
none: Symbol("explanation-modal-none") none: Symbol("explanation-modal-none")
} }

View file

@ -1639,7 +1639,7 @@
"supported": ["number", "boolean"], "supported": ["number", "boolean"],
"partialSupport": [ "partialSupport": [
{ "type": "string", "message": "stringAsNumber" }, { "type": "string", "message": "stringAsNumber" },
{ "type": "datetime", "message": "datetimeChart"} { "type": "datetime", "message": "dateAsNumber"}
], ],
"unsupported": [ "unsupported": [
{ "type": "json", "message": "jsonPrimitivesOnly" } { "type": "json", "message": "jsonPrimitivesOnly" }

View file

@ -97,23 +97,23 @@
// Add data // Add data
let useDates = false let useDates = false
if (schema[labelColumn]) { if (schema[labelColumn]) {
console.log("in here?");
const labelFieldType = schema[labelColumn].type const labelFieldType = schema[labelColumn].type
if (horizontal) { if (horizontal) {
builder = builder.yType(labelFieldType).xUnits(yAxisUnits) builder = builder.yType(labelFieldType).xUnits(yAxisUnits)
} else { } else {
builder = builder.xType(labelFieldType).yUnits(yAxisUnits) builder = builder.xType(labelFieldType).yUnits(yAxisUnits)
} }
console.log(labelFieldType);
useDates = labelFieldType === "datetime" useDates = labelFieldType === "datetime"
} }
const series = (valueColumns ?? []).map(column => ({ const series = (valueColumns ?? []).map(column => ({
name: column, name: column,
data: data.map(row => { data: data.map(row => {
if (!useDates) { if (!useDates) {
const value = get(row, column); const value = get(row, column);
console.log("one");
console.log(value); if (schema[column].type === 'datetime') {
return Date.parse(value)
}
if (Array.isArray(value)) { if (Array.isArray(value)) {
return null; return null;
@ -125,8 +125,7 @@
return value; return value;
} else { } else {
console.log("two"); // TODO datetimes as labels are passed in this way, but this only updates on value change, so it's broken until you also change the value
console.log([row[labelColumn], row[column]]);
return [row[labelColumn], row[column]] return [row[labelColumn], row[column]]
} }
}), }),