blob: 6be87e4d6f06688a5c5930876abedac061cd3398 [file] [log] [blame]
/**
* 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 memoizeOne from 'memoize-one';
import { getChartControlPanelRegistry } from '@superset-ui/core';
import {
ControlPanelSectionConfig,
expandControlConfig,
} from '@superset-ui/chart-controls';
const getMemoizedControlConfig = memoizeOne(
(controlKey, controlPanelConfig) => {
const {
controlOverrides = {},
controlPanelSections = [],
} = controlPanelConfig;
const control = expandControlConfig(
findControlItem(controlPanelSections, controlKey),
controlOverrides,
);
return control && 'config' in control ? control.config : control;
},
);
/**
* Find control item from control panel config.
*/
export function findControlItem(
controlPanelSections: ControlPanelSectionConfig[],
controlKey: string,
) {
return (
controlPanelSections
.map(section => section.controlSetRows)
.flat(2)
.find(
control =>
controlKey === control ||
(control !== null &&
typeof control === 'object' &&
'name' in control &&
control.name === controlKey),
) ?? null
);
}
export const getControlConfig = function getControlConfig(
controlKey: string,
vizType: string,
) {
const controlPanelConfig = getChartControlPanelRegistry().get(vizType) || {};
return getMemoizedControlConfig(controlKey, controlPanelConfig);
};