viz-lib/src/visualizations/chart/Editor/DataLabelsSettings.jsx (106 lines of code) (raw):
import { includes } from "lodash";
import React from "react";
import { useDebouncedCallback } from "use-debounce";
import { Section, Input, Checkbox, ContextHelp } from "@/components/visualizations/editor";
import { EditorPropTypes } from "@/visualizations/prop-types";
export default function DataLabelsSettings({ options, onOptionsChange }) {
const isShowDataLabelsAvailable = includes(
["line", "area", "column", "scatter", "pie", "heatmap"],
options.globalSeriesType
);
const [debouncedOnOptionsChange] = useDebouncedCallback(onOptionsChange, 200);
return (
<React.Fragment>
{isShowDataLabelsAvailable && (
<Section>
<Checkbox
data-test="Chart.DataLabels.ShowDataLabels"
defaultChecked={options.showDataLabels}
onChange={event => onOptionsChange({ showDataLabels: event.target.checked })}>
Show Data Labels
</Checkbox>
</Section>
)}
<Section>
<Input
label={
<React.Fragment>
Number Values Format
<ContextHelp.NumberFormatSpecs />
</React.Fragment>
}
data-test="Chart.DataLabels.NumberFormat"
defaultValue={options.numberFormat}
onChange={e => debouncedOnOptionsChange({ numberFormat: e.target.value })}
/>
</Section>
<Section>
<Input
label={
<React.Fragment>
Percent Values Format
<ContextHelp.NumberFormatSpecs />
</React.Fragment>
}
data-test="Chart.DataLabels.PercentFormat"
defaultValue={options.percentFormat}
onChange={e => debouncedOnOptionsChange({ percentFormat: e.target.value })}
/>
</Section>
<Section>
<Input
label={
<React.Fragment>
Date/Time Values Format
<ContextHelp.DateTimeFormatSpecs />
</React.Fragment>
}
data-test="Chart.DataLabels.DateTimeFormat"
defaultValue={options.dateTimeFormat}
onChange={e => debouncedOnOptionsChange({ dateTimeFormat: e.target.value })}
/>
</Section>
<Section>
<Input
label={
<React.Fragment>
Data Labels
<ContextHelp placement="topRight" arrowPointAtCenter>
<div style={{ paddingBottom: 5 }}>Use special names to access additional properties:</div>
<div>
<code>{"{{ @@name }}"}</code> series name;
</div>
<div>
<code>{"{{ @@x }}"}</code> x-value;
</div>
<div>
<code>{"{{ @@y }}"}</code> y-value;
</div>
<div>
<code>{"{{ @@yPercent }}"}</code> relative y-value;
</div>
<div>
<code>{"{{ @@yError }}"}</code> y deviation;
</div>
<div>
<code>{"{{ @@size }}"}</code> bubble size;
</div>
<div style={{ paddingTop: 5 }}>
Also, all query result columns can be referenced
<br />
using
<code style={{ whiteSpace: "nowrap" }}>{"{{ column_name }}"}</code> syntax.
</div>
</ContextHelp>
</React.Fragment>
}
data-test="Chart.DataLabels.TextFormat"
placeholder="(auto)"
defaultValue={options.textFormat}
onChange={e => debouncedOnOptionsChange({ textFormat: e.target.value })}
/>
</Section>
</React.Fragment>
);
}
DataLabelsSettings.propTypes = EditorPropTypes;