mirror of
https://github.com/apache/superset.git
synced 2026-07-12 17:55:38 +00:00
100 lines
3.2 KiB
TypeScript
100 lines
3.2 KiB
TypeScript
/**
|
|
* 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 {
|
|
ControlSetItem,
|
|
CustomControlConfig,
|
|
sharedControls,
|
|
} from '@superset-ui/chart-controls';
|
|
import { t } from '@apache-superset/core/translation';
|
|
import { validateNonEmpty } from '@superset-ui/core';
|
|
import { useTheme, useThemeMode } from '@apache-superset/core/theme';
|
|
import { InfoTooltip } from '@superset-ui/core/components';
|
|
import { CodeEditor } from '../../components/CodeEditor/CodeEditor';
|
|
import { ControlHeader } from '../../components/ControlHeader/controlHeader';
|
|
import { debounceFunc } from '../../consts';
|
|
|
|
interface HandlebarsCustomControlProps {
|
|
value: string;
|
|
}
|
|
|
|
const HandlebarsTemplateControl = (
|
|
props: CustomControlConfig<HandlebarsCustomControlProps>,
|
|
) => {
|
|
const theme = useTheme();
|
|
const isDarkMode = useThemeMode();
|
|
const val = String(
|
|
props?.value ? props?.value : props?.default ? props?.default : '',
|
|
);
|
|
|
|
return (
|
|
<div>
|
|
<ControlHeader>
|
|
<div>
|
|
{typeof props.label === 'function' ? null : props.label}
|
|
<InfoTooltip
|
|
iconStyle={{ marginLeft: theme.sizeUnit }}
|
|
tooltip={
|
|
<span>
|
|
{t('See ')}{' '}
|
|
<a
|
|
href="https://superset.apache.org/docs/using-superset/handlebars-chart"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
>
|
|
{t('the Handlebars chart documentation')}
|
|
</a>{' '}
|
|
{t('for a list of available helpers.')}
|
|
</span>
|
|
}
|
|
/>
|
|
</div>
|
|
</ControlHeader>
|
|
<CodeEditor
|
|
theme={isDarkMode ? 'dark' : 'light'}
|
|
value={val}
|
|
onChange={source => {
|
|
debounceFunc(props.onChange, source || '');
|
|
}}
|
|
/>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export const handlebarsTemplateControlSetItem: ControlSetItem = {
|
|
name: 'handlebarsTemplate',
|
|
config: {
|
|
...sharedControls.entity,
|
|
type: HandlebarsTemplateControl,
|
|
label: t('Handlebars Template'),
|
|
description: t('A handlebars template that is applied to the data'),
|
|
default: `<ul class="data-list">
|
|
{{#each data}}
|
|
<li>{{stringify this}}</li>
|
|
{{/each}}
|
|
</ul>`,
|
|
isInt: false,
|
|
renderTrigger: true,
|
|
valueKey: null,
|
|
validators: [validateNonEmpty],
|
|
mapStateToProps: ({ form_data }) => ({
|
|
value: form_data?.handlebarsTemplate ?? form_data?.handlebars_template,
|
|
}),
|
|
},
|
|
};
|