/** Type checking is disabled for this file due to reselect only supporting
 * TS declarations for selectors with up to 12 arguments. */ import { createSelector } from 'reselect' ; import { AppSection , Behavior , convertKeysToCamelCase , Datasource , FilterState , JsonObject , } from '../..' ; import { HandlerFunction , PlainObject , SetDataMaskHook } from '../types/Base' ; import { QueryData , DataRecordFilters } from '..' ; type AnnotationData = PlainObject ; type SnakeCaseDatasource = PlainObject ; type CamelCaseFormData = PlainObject ; type SnakeCaseFormData = PlainObject ; type RawFormData = CamelCaseFormData | SnakeCaseFormData ; type ChartPropsSelector = ( c : ChartPropsConfig ) => ChartProps ; /** Optional field for event handlers, renderers */ type Hooks = { /**
     * sync active filters between chart and dashboard, "add" actually
     * also handles "change" and "remove".
     */ onAddFilter ? : ( newFilters : DataRecordFilters , merge ? : boolean ) => void ; /** handle errors */ onError ? : HandlerFunction ; /** use the vis as control to update state */ setControlValue ? : HandlerFunction ; /** handle external filters */ setDataMask ? : SetDataMaskHook ; /** handle tooltip */ setTooltip ? : HandlerFunction ; } & PlainObject ; /**
 * Preferred format for ChartProps config
 */ export interface ChartPropsConfig { annotationData ? : AnnotationData ; /** Datasource metadata */ datasource ? : SnakeCaseDatasource ; /**
     * Formerly called "filters", which was misleading because it is actually
     * initial values of the filter_box and table vis
     */ initialValues ? : DataRecordFilters ; /** Main configuration of the chart */ formData ? : RawFormData ; /** Chart height */ height ? : number ; /** Programmatic overrides such as event handlers, renderers */ hooks ? : Hooks ; /** The data returned for all queries objects in the request */ queriesData ? : QueryData [ ] ; /** Chart width */ width ? : number ; /** Own chart state that saved in dashboard */ ownState ? : JsonObject ; /** Filter state that saved in dashboard */ filterState ? : FilterState ; /** Set of actual behaviors that this instance of chart should use */ behaviors ? : Behavior [ ] ; /** Application section of the chart on the screen (in what components/screen it placed) */ appSection ? : AppSection ; /** is the chart refreshing its contents */ isRefreshing ? : boolean ; } const DEFAULT_WIDTH = 800 ; const DEFAULT_HEIGHT = 600 ; export default class ChartProps < FormData extends RawFormData = RawFormData > { static createSelector : ( ) => ChartPropsSelector ; annotationData : AnnotationData ; datasource : Datasource ; rawDatasource : SnakeCaseDatasource ; initialValues : DataRecordFilters ; formData : CamelCaseFormData ; rawFormData : FormData ; height : number ; hooks : Hooks ; ownState : JsonObject ; filterState : FilterState ; queriesData : QueryData [ ] ; width : number ; behaviors : Behavior [ ] ; appSection ? : AppSection ; isRefreshing ? : boolean ; constructor ( config = { } ) { const { annotationData = { } , datasource = { } , formData = { } as FormData , hooks = { } , ownState = { } , filterState = { } , initialValues = { } , queriesData = [ ] , behaviors = [ ] , width = DEFAULT_WIDTH , height = DEFAULT_HEIGHT , appSection , isRefreshing , } = config ; this . width = width ; this . height = height ; this . annotationData = annotationData ; this . datasource = convertKeysToCamelCase ( datasource ) as Datasource ; this . rawDatasource = datasource ; this . formData = convertKeysToCamelCase ( formData ) ; this . rawFormData = formData ; this . hooks = hooks ; this . initialValues = initialValues ; this . queriesData = queriesData ; this . ownState = ownState ; this . filterState = filterState ; this . behaviors = behaviors ; this . appSection = appSection ; this . isRefreshing = isRefreshing ; } } ChartProps . createSelector = function create ( ) : ChartPropsSelector { return createSelector ( ( input ) => input . annotationData , input => input . datasource , input => input . formData , input => input . height , input => input . hooks , input => input . initialValues , input => input . queriesData , input => input . width , input => input . ownState , input => input . filterState , input => input . behaviors , input => input . appSection , input => input . isRefreshing , ( annotationData , datasource , formData , height , hooks , initialValues , queriesData , width , ownState , filterState , behaviors , appSection , isRefreshing ) => new ChartProps ( { annotationData , datasource , formData , height , hooks , initialValues , queriesData , ownState , filterState , width , behaviors , appSection , isRefreshing , } ) ) ; } ;