From eb99b73346a02993fcaeb6df906fcaf663db259d Mon Sep 17 00:00:00 2001 From: Faton Ramadani Date: Mon, 22 May 2023 11:18:04 +0200 Subject: [PATCH] feat(frontend): add plain chartjs component (#1621) * fix(frontend): add plain chartjs component * feat(frontend): add missing styling * feat(frontend): fix typing * feat(frontend): fix typing --- .../apps/components/display/AppChartJs.svelte | 83 ++++++------------- .../apps/editor/component/Component.svelte | 10 +++ .../apps/editor/component/components.ts | 50 ++++++++++- .../components/apps/editor/component/sets.ts | 3 +- .../componentsPanel/quickStyleProperties.ts | 3 + 5 files changed, 89 insertions(+), 60 deletions(-) diff --git a/frontend/src/lib/components/apps/components/display/AppChartJs.svelte b/frontend/src/lib/components/apps/components/display/AppChartJs.svelte index edde78f125..2711ac5f04 100644 --- a/frontend/src/lib/components/apps/components/display/AppChartJs.svelte +++ b/frontend/src/lib/components/apps/components/display/AppChartJs.svelte @@ -1,23 +1,14 @@ - + diff --git a/frontend/src/lib/components/apps/editor/component/Component.svelte b/frontend/src/lib/components/apps/editor/component/Component.svelte index bc8f7c4c54..cfe38d167d 100644 --- a/frontend/src/lib/components/apps/editor/component/Component.svelte +++ b/frontend/src/lib/components/apps/editor/component/Component.svelte @@ -48,6 +48,7 @@ import AppDownload from '../../components/display/AppDownload.svelte' import AppLogsComponent from '../../components/display/AppLogsComponent.svelte' import AppFlowStatusComponent from '../../components/display/AppFlowStatusComponent.svelte' + import AppChartJs from '../../components/display/AppChartJs.svelte' export let component: AppComponent export let selected: boolean @@ -546,6 +547,15 @@ configuration={component.configuration} {render} /> + {:else if component.type === 'chartjscomponent'} + {/if} diff --git a/frontend/src/lib/components/apps/editor/component/components.ts b/frontend/src/lib/components/apps/editor/component/components.ts index 845b176d01..a3d83367a9 100644 --- a/frontend/src/lib/components/apps/editor/component/components.ts +++ b/frontend/src/lib/components/apps/editor/component/components.ts @@ -1,7 +1,7 @@ import type { IntRange } from '../../../../common' import type { NARROW_GRID_COLUMNS, WIDE_GRID_COLUMNS } from '../../gridUtils' import { BUTTON_COLORS } from '../../../common' - +import type { ChartType } from 'chart.js' import { defaultAlignement } from '../componentsPanel/componentDefaultProps' import { BarChart4, @@ -82,6 +82,8 @@ export type FormButtonComponent = BaseComponent<'formbuttoncomponent'> & Recompu export type RunFormComponent = BaseComponent<'runformcomponent'> export type BarChartComponent = BaseComponent<'barchartcomponent'> export type PieChartComponent = BaseComponent<'piechartcomponent'> +export type ChartJsComponent = BaseComponent<'chartjscomponent'> + export type ScatterChartComponent = BaseComponent<'scatterchartcomponent'> export type TableComponent = BaseComponent<'tablecomponent'> & { actionButtons: (BaseAppComponent & ButtonComponent & GridItem)[] @@ -176,6 +178,7 @@ export type TypedComponent = | ConditionalWrapperComponent | SelectStepComponent | DownloadComponent + | ChartJsComponent export type AppComponent = BaseAppComponent & TypedComponent @@ -253,9 +256,18 @@ export const selectOptions = { ], objectFitOptions: ['contain', 'cover', 'fill'], splitPanelOptions: ['2', '3', '4'], - formorientationOptions: ['Horizontal', 'Vertical'] + formorientationOptions: ['Horizontal', 'Vertical'], + chartTypeOptions: [ + 'bar', + 'bubble', + 'doughnut', + 'line', + 'pie', + 'polarArea', + 'radar', + 'scatter' + ] as ChartType[] } - const labels = { none: 'Do nothing', errorOverlay: 'Show error overlay', @@ -753,6 +765,38 @@ export const components = { } } }, + chartjscomponent: { + name: 'ChartJs', + icon: PieChart, + dims: '2:8-6:8' as AppComponentDimensions, + customCss: { + container: { class: '', style: '' } + }, + initialData: { + configuration: { + type: { + type: 'static', + onlyStatic: true, + fieldType: 'select', + selectOptions: selectOptions.chartTypeOptions, + value: 'pie' + } + }, + componentInput: { + type: 'static', + fieldType: 'object', + value: { + labels: ['Pie', 'Charts', '<3'], + datasets: [ + { + data: [25, 50, 25], + backgroundColor: ['#FF6384', '#4BC0C0', '#FFCE56'] + } + ] + } + } + } + }, barchartcomponent: { name: 'Bar/Line Chart', icon: BarChart4, diff --git a/frontend/src/lib/components/apps/editor/component/sets.ts b/frontend/src/lib/components/apps/editor/component/sets.ts index 751104ae69..6acfde5b44 100644 --- a/frontend/src/lib/components/apps/editor/component/sets.ts +++ b/frontend/src/lib/components/apps/editor/component/sets.ts @@ -76,7 +76,8 @@ const charts: ComponentSet = { 'vegalitecomponent', 'plotlycomponent', 'scatterchartcomponent', - 'timeseriescomponent' + 'timeseriescomponent', + 'chartjscomponent' ] } as const diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/quickStyleProperties.ts b/frontend/src/lib/components/apps/editor/componentsPanel/quickStyleProperties.ts index f4a8dc53f3..95de9ae2c9 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/quickStyleProperties.ts +++ b/frontend/src/lib/components/apps/editor/componentsPanel/quickStyleProperties.ts @@ -652,6 +652,9 @@ export const quickStyleProperties: Record< piechartcomponent: { container: containerDefaultProps }, + chartjscomponent: { + container: containerDefaultProps + }, vegalitecomponent: {}, containercomponent: { container: containerDefaultProps