import React, { lazy, Suspense } from "react"; import type { WidgetProps, WidgetState } from "widgets/BaseWidget"; import BaseWidget from "widgets/BaseWidget"; import Skeleton from "components/utils/Skeleton"; import { retryPromise } from "utils/AppsmithUtils"; import { EventType } from "constants/AppsmithActionConstants/ActionConstants"; import { contentConfig, styleConfig } from "./propertyConfig"; import type { ChartType, CustomFusionChartConfig, AllChartData, ChartSelectedDataPoint, } from "../constants"; import type { WidgetType } from "constants/WidgetConstants"; import type { ChartComponentProps } from "../component"; import { Colors } from "constants/Colors"; import type { Stylesheet } from "entities/AppTheming"; import { DefaultAutocompleteDefinitions } from "widgets/WidgetUtils"; import type { AutocompletionDefinitions } from "widgets/constants"; const ChartComponent = lazy(() => retryPromise( () => import( /* webpackPrefetch: true, webpackChunkName: "charts" */ "../component" ), ), ); class ChartWidget extends BaseWidget { static getAutocompleteDefinitions(): AutocompletionDefinitions { return { "!doc": "Chart widget is used to view the graphical representation of your data. Chart is the go-to widget for your data visualisation needs.", "!url": "https://docs.appsmith.com/widget-reference/chart", isVisible: DefaultAutocompleteDefinitions.isVisible, chartData: { seriesName: "string", data: "[$__chartDataPoint__$]", }, xAxisName: "string", yAxisName: "string", selectedDataPoint: "$__chartDataPoint__$", }; } static getMetaPropertiesMap(): Record { return { selectedDataPoint: undefined, }; } static getPropertyPaneContentConfig() { return contentConfig; } static getPropertyPaneStyleConfig() { return styleConfig; } static getStylesheetConfig(): Stylesheet { return { borderRadius: "{{appsmith.theme.borderRadius.appBorderRadius}}", boxShadow: "{{appsmith.theme.boxShadow.appBoxShadow}}", accentColor: "{{appsmith.theme.colors.primaryColor}}", fontFamily: "{{appsmith.theme.fontFamily.appFont}}", }; } onDataPointClick = (selectedDataPoint: ChartSelectedDataPoint) => { this.props.updateWidgetMetaProperty( "selectedDataPoint", selectedDataPoint, { triggerPropertyName: "onDataPointClick", dynamicString: this.props.onDataPointClick, event: { type: EventType.ON_DATA_POINT_CLICK, }, }, ); }; getPageView() { return ( }> ); } static getWidgetType(): WidgetType { return "CHART_WIDGET"; } } export interface ChartWidgetProps extends WidgetProps { chartType: ChartType; chartData: AllChartData; customFusionChartConfig: CustomFusionChartConfig; xAxisName: string; yAxisName: string; chartName: string; isVisible?: boolean; allowScroll: boolean; borderRadius: string; boxShadow?: string; accentColor?: string; fontFamily?: string; } type ChartComponentPartialProps = Omit; export interface ChartWidgetProps extends WidgetProps, ChartComponentPartialProps { onDataPointClick?: string; } export default ChartWidget;