/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { useState, useEffect, useMemo, useCallback } from 'react'; import { HandlerFunction, JsonValue } from '@superset-ui/core'; import { styled } from '@apache-superset/core/theme'; import { sharedControlComponents } from '@superset-ui/chart-controls'; import { AreaChartStackControlOptions } from '../constants'; const { RadioButtonControl } = sharedControlComponents; const ExtraControlsWrapper = styled.div` text-align: center; `; export function useExtraControl< F extends { stack: any; area: boolean; }, >({ formData, setControlValue, }: { formData: F; setControlValue?: HandlerFunction; }) { const { stack, area } = formData; const [extraValue, setExtraValue] = useState( stack ?? undefined, ); useEffect(() => { setExtraValue(stack); }, [stack]); const extraControlsOptions = useMemo(() => { if (area) { return AreaChartStackControlOptions; } return []; }, [area]); const extraControlsHandler = useCallback( (value: JsonValue) => { if (area) { if (setControlValue) { setControlValue('stack', value); setExtraValue(value); } } }, [area, setControlValue], ); return { extraControlsOptions, extraControlsHandler, extraValue, }; } export function ExtraControls< F extends { stack: any; area: boolean; showExtraControls: boolean; }, >({ formData, setControlValue, }: { formData: F; setControlValue?: HandlerFunction; }) { const { extraControlsOptions, extraControlsHandler, extraValue } = useExtraControl({ formData, setControlValue, }); if (!formData.showExtraControls) { return null; } return ( ); }