mirror of https://github.com/apache/superset.git
Controls cleanup pass (#9578)
* migrating date_filter
* normalized control
* filter_configs control
* column_collection control
* time_range_endpoints control
* time_range_fixed control
* url_params control
* cache_timeout control
* annotation_layers control
* color control unused?
* linters rule 🤘
* this should have been deleted earlier
* global_opacity, mapbox_label, mapbox_style, viewport_zoom
* linting
* comparison_type
* contribution control
* log_scale
* show_values
* table_filter
* pandas_aggfunc
* code control
* formatSelectOptions import
* lint
* markup_type control
* lintage
* date_time_format control, linting
* url control, test mods
* min_periods control
* rolling_periods
* rolling_type
* missing lib
* order_desc
* number_format
* link_length
* all_columns_y
* all_columns_x
* normalize_across, select_country, all_columns
* fixing test
* linter-caught dependencies
* waiting
* wait longer!
* utilizing tabOverride for Analytics
* tabOverride for Annotations and Layers
This commit is contained in:
parent
29dd989483
commit
5e4c291913
|
@ -970,13 +970,11 @@ Note not all fields are correctly catagorized. The fields vary based on visualiz
|
|||
|
||||
| Field | Type | Notes |
|
||||
| ---------------------- | --------------- | ------------------------------------- |
|
||||
| `date_time_format` | _N/A_ | _Deprecated?_ |
|
||||
| `druid_time_origin` | _string_ | The Druid **Origin** widget |
|
||||
| `granularity` | _string_ | The Druid **Time Granularity** widget |
|
||||
| `granularity_sqla` | _string_ | The SQLA **Time Column** widget |
|
||||
| `time_grain_sqla` | _string_ | The SQLA **Time Grain** widget |
|
||||
| `time_range` | _string_ | The **Time range** widget |
|
||||
| `time_range_endpoints` | _array(string)_ | Used by SIP-15 [HIDDEN] |
|
||||
|
||||
### GROUP BY
|
||||
|
||||
|
@ -991,7 +989,6 @@ Note not all fields are correctly catagorized. The fields vary based on visualiz
|
|||
|
||||
| Field | Type | Notes |
|
||||
| --------------- | --------------- | ----------------------- |
|
||||
| `all_columns` | _array(string)_ | The **Columns** widget |
|
||||
| `order_by_cols` | _array(string)_ | The **Ordering** widget |
|
||||
| `row_limit` | - | See Query section |
|
||||
|
||||
|
@ -1013,9 +1010,7 @@ Note not all fields are correctly catagorized. The fields vary based on visualiz
|
|||
| Field | Type | Notes |
|
||||
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------- | ------------------------------------------------- |
|
||||
| `adhoc_filters` | _array(object)_ | The **Filters** widget |
|
||||
| `all_columns_x` | _array(string)_ | The **Numeric Columns** widget |
|
||||
| `columns` | _array(string)_ | The **Breakdowns** widget |
|
||||
| `contribution` | _boolean_ | The **Contribution** widget |
|
||||
| `groupby` | _array(string)_ | The **Group by** or **Series** widget |
|
||||
| `limit` | _number_ | The **Series Limit** widget |
|
||||
| `metric`<br>`metric_2`<br>`metrics`<br>`percent_mertics`<br>`secondary_metric`<br>`size`<br>`x`<br>`y` | _string_,_object_,_array(string)_,_array(object)_ | The metric(s) depending on the visualization type |
|
||||
|
@ -1025,24 +1020,13 @@ Note not all fields are correctly catagorized. The fields vary based on visualiz
|
|||
|
||||
The `metric` (or equivalent) and `timeseries_limit_metric` fields are all composed of either metric names or the JSON representation of the `AdhocMetric` TypeScript type. The `adhoc_filters` is composed of the JSON represent of the `AdhocFilter` TypeScript type (which can comprise of columns or metrics depending on whether it is a WHERE or HAVING clause). The `all_columns`, `all_columns_x`, `columns`, `groupby`, and `order_by_cols` fields all represent column names.
|
||||
|
||||
### Filters Configuration
|
||||
|
||||
| Field | Type | Notes |
|
||||
| ---------------- | ------------- | --------------------------------- |
|
||||
| `filter_configs` | array(object) | The filter-box **Filters** widget |
|
||||
|
||||
The filter-box configuration references column names (via the `column` key) and optionally metric names (via the `metric` key) if sorting is defined.
|
||||
|
||||
### Chart Options
|
||||
|
||||
| Field | Type | Notes |
|
||||
| --------------------- | --------- | ------------------------------------------------ |
|
||||
| `color_picker` | _object_ | The **Fixed Color** widget |
|
||||
| `global_opacity` | _number_ | The **Opacity** widget |
|
||||
| `label_colors` | _object_ | The **Color Scheme** widget |
|
||||
| `link_length` | _number_ | The **No of Bins** widget |
|
||||
| `normalized` | _boolean_ | The **Normalized** widget |
|
||||
| `number_format` | _string_ | The **Number format** widget |
|
||||
|
||||
### Y Axis
|
||||
|
||||
|
@ -1059,22 +1043,15 @@ Note the `y_axis_format` is defined under various section for some charts.
|
|||
| Field | Type | Notes |
|
||||
| -------------- | -------- | ------------ |
|
||||
| `color_scheme` | _string_ | |
|
||||
| `slice_id` | _number_ | The slice ID |
|
||||
| `url_params` | _object_ | |
|
||||
|
||||
### Unclassified
|
||||
|
||||
| Field | Type | Notes |
|
||||
| ------------------------------- | ----- | ----- |
|
||||
| `add_to_dash` | _N/A_ | |
|
||||
| `all_columns_y` | _N/A_ | |
|
||||
| `annotation_layers` | _N/A_ | |
|
||||
| `cache_timeout` | _N/A_ | |
|
||||
| `code` | _N/A_ | |
|
||||
| `collapsed_fieldsets` | _N/A_ | |
|
||||
| `column_collection` | _N/A_ | |
|
||||
| `comparison type` | _N/A_ | |
|
||||
| `contribution` | _N/A_ | |
|
||||
| `country_fieldtype` | _N/A_ | |
|
||||
| `default_filters` | _N/A_ | |
|
||||
| `entity` | _N/A_ | |
|
||||
|
@ -1092,17 +1069,9 @@ Note the `y_axis_format` is defined under various section for some charts.
|
|||
| `import_time` | _N/A_ | |
|
||||
| `label` | _N/A_ | |
|
||||
| `linear_color_scheme` | _N/A_ | |
|
||||
| `log_scale` | _N/A_ | |
|
||||
| `mapbox_label` | _N/A_ | |
|
||||
| `mapbox_style` | _N/A_ | |
|
||||
| `markup_type` | _N/A_ | |
|
||||
| `min_periods` | _N/A_ | |
|
||||
| `new_dashboard_name` | _N/A_ | |
|
||||
| `new_slice_name` | _N/A_ | |
|
||||
| `normalize_across` | _N/A_ | |
|
||||
| `num_period_compare` | _N/A_ | |
|
||||
| `order_desc` | _N/A_ | |
|
||||
| `pandas_aggfunc` | _N/A_ | |
|
||||
| `period_ratio_type` | _N/A_ | |
|
||||
| `perm` | _N/A_ | |
|
||||
| `rdo_save` | _N/A_ | |
|
||||
|
@ -1110,18 +1079,11 @@ Note the `y_axis_format` is defined under various section for some charts.
|
|||
| `remote_id` | _N/A_ | |
|
||||
| `resample_fillmethod` | _N/A_ | |
|
||||
| `resample_how` | _N/A_ | |
|
||||
| `rolling_periods` | _N/A_ | |
|
||||
| `rolling_type` | _N/A_ | |
|
||||
| `rose_area_proportion` | _N/A_ | |
|
||||
| `save_to_dashboard_id` | _N/A_ | |
|
||||
| `schema` | _N/A_ | |
|
||||
| `select_country` | _N/A_ | |
|
||||
| `series` | _N/A_ | |
|
||||
| `show_bubbles` | _N/A_ | |
|
||||
| `show_values` | _N/A_ | |
|
||||
| `slice_name` | _N/A_ | |
|
||||
| `table_filter` | _N/A_ | |
|
||||
| `timed_refresh_immune_slices` | _N/A_ | |
|
||||
| `url` | _N/A_ | |
|
||||
| `userid` | _N/A_ | |
|
||||
| `viewport_zoom` | _N/A_ | |
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import { getChartControlPanelRegistry } from '@superset-ui/chart';
|
||||
import { t } from '@superset-ui/translation';
|
||||
import {
|
||||
|
@ -23,6 +25,7 @@ import {
|
|||
getControlState,
|
||||
applyMapStateToPropsToControl,
|
||||
} from '../../../src/explore/controlUtils';
|
||||
import ColumnOption from '../../../src/components/ColumnOption';
|
||||
|
||||
describe('controlUtils', () => {
|
||||
const state = {
|
||||
|
@ -92,6 +95,39 @@ describe('controlUtils', () => {
|
|||
label: t('My beautiful colors'),
|
||||
},
|
||||
},
|
||||
})
|
||||
.registerValue('table', {
|
||||
controlPanelSections: [
|
||||
{
|
||||
label: t('Chart Options'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
[
|
||||
{
|
||||
name: 'all_columns',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
multi: true,
|
||||
label: t('Columns'),
|
||||
default: [],
|
||||
description: t('Columns to display'),
|
||||
optionRenderer: c => <ColumnOption column={c} showType />,
|
||||
valueRenderer: c => <ColumnOption column={c} />,
|
||||
valueKey: 'column_name',
|
||||
allowAll: true,
|
||||
mapStateToProps: stateRef => ({
|
||||
options: stateRef.datasource
|
||||
? stateRef.datasource.columns
|
||||
: [],
|
||||
}),
|
||||
commaChoosesOption: false,
|
||||
freeForm: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
import { getChartControlPanelRegistry } from '@superset-ui/chart';
|
||||
import getControlsForVizType from 'src/utils/getControlsForVizType';
|
||||
import { t } from '@superset-ui/translation';
|
||||
|
||||
const fakePluginControls = {
|
||||
controlPanelSections: [
|
||||
|
@ -26,7 +27,7 @@ const fakePluginControls = {
|
|||
label: 'Fake Control Panel Sections',
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['url_params'],
|
||||
['label_colors'],
|
||||
[
|
||||
{
|
||||
name: 'y_axis_bounds',
|
||||
|
@ -77,28 +78,36 @@ describe('getControlsForVizType', () => {
|
|||
});
|
||||
|
||||
it('returns a map of the controls', () => {
|
||||
expect(getControlsForVizType('chart_controls_inventory_fake')).toEqual({
|
||||
url_params: {
|
||||
type: 'HiddenControl',
|
||||
label: 'URL Parameters',
|
||||
hidden: true,
|
||||
description: 'Extra parameters for use in jinja templated queries',
|
||||
},
|
||||
y_axis_bounds: {
|
||||
type: 'BoundsControl',
|
||||
label: 'Value bounds',
|
||||
default: [null, null],
|
||||
description: 'Value bounds for the y axis',
|
||||
},
|
||||
adhoc_filters: {
|
||||
type: 'AdhocFilterControl',
|
||||
label: 'Fake Filters',
|
||||
default: null,
|
||||
},
|
||||
column_collection: {
|
||||
type: 'CollectionControl',
|
||||
label: 'Fake Collection Control',
|
||||
},
|
||||
});
|
||||
expect(
|
||||
JSON.stringify(getControlsForVizType('chart_controls_inventory_fake')),
|
||||
).toEqual(
|
||||
JSON.stringify({
|
||||
label_colors: {
|
||||
type: 'ColorMapControl',
|
||||
label: t('Color Map'),
|
||||
default: {},
|
||||
renderTrigger: true,
|
||||
mapStateToProps: state => ({
|
||||
colorNamespace: state.form_data.color_namespace,
|
||||
colorScheme: state.form_data.color_scheme,
|
||||
}),
|
||||
},
|
||||
y_axis_bounds: {
|
||||
type: 'BoundsControl',
|
||||
label: 'Value bounds',
|
||||
default: [null, null],
|
||||
description: 'Value bounds for the y axis',
|
||||
},
|
||||
adhoc_filters: {
|
||||
type: 'AdhocFilterControl',
|
||||
label: 'Fake Filters',
|
||||
default: null,
|
||||
},
|
||||
column_collection: {
|
||||
type: 'CollectionControl',
|
||||
label: 'Fake Collection Control',
|
||||
},
|
||||
}),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
import { t } from '@superset-ui/translation';
|
||||
import React from 'react';
|
||||
import { headerFontSize, subheaderFontSize } from './Shared_BigNumber';
|
||||
import { formatSelectOptions } from '../../modules/utils';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
|
@ -78,7 +79,28 @@ export default {
|
|||
},
|
||||
},
|
||||
],
|
||||
['time_range_fixed'],
|
||||
[
|
||||
{
|
||||
name: 'time_range_fixed',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Fix to selected Time Range'),
|
||||
description: t(
|
||||
'Fix the trend line to the full time range specified in case filtered results do not include the start or end dates',
|
||||
),
|
||||
renderTrigger: true,
|
||||
visibility(props) {
|
||||
const {
|
||||
time_range: timeRange,
|
||||
viz_type: vizType,
|
||||
show_trend_line: showTrendLine,
|
||||
} = props.form_data;
|
||||
// only display this option when a time range is selected
|
||||
return timeRange && timeRange !== 'No filter';
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
{
|
||||
|
@ -95,7 +117,54 @@ export default {
|
|||
expanded: false,
|
||||
controlSetRows: [
|
||||
[<h1 className="section-header">{t('Rolling Window')}</h1>],
|
||||
['rolling_type', 'rolling_periods', 'min_periods'],
|
||||
[
|
||||
{
|
||||
name: 'rolling_type',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Rolling Function'),
|
||||
default: 'None',
|
||||
choices: formatSelectOptions([
|
||||
'None',
|
||||
'mean',
|
||||
'sum',
|
||||
'std',
|
||||
'cumsum',
|
||||
]),
|
||||
description: t(
|
||||
'Defines a rolling window function to apply, works along ' +
|
||||
'with the [Periods] text box',
|
||||
),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'rolling_periods',
|
||||
config: {
|
||||
type: 'TextControl',
|
||||
label: t('Periods'),
|
||||
isInt: true,
|
||||
description: t(
|
||||
'Defines the size of the rolling window function, ' +
|
||||
'relative to the time granularity selected',
|
||||
),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'min_periods',
|
||||
config: {
|
||||
type: 'TextControl',
|
||||
label: t('Min Periods'),
|
||||
isInt: true,
|
||||
description: t(
|
||||
'The minimum number of rolling periods required to show ' +
|
||||
'a value. For instance if you do a cumulative sum on 7 days ' +
|
||||
'you may want your "Min Period" to be 7, so that all data points ' +
|
||||
'shown are the total of 7 periods. This will hide the "ramp up" ' +
|
||||
'taking place over the first 7 periods',
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
],
|
||||
|
|
|
@ -156,7 +156,18 @@ export default {
|
|||
description: t('Whether to display the legend (toggles)'),
|
||||
},
|
||||
},
|
||||
'show_values',
|
||||
{
|
||||
name: 'show_values',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Show Values'),
|
||||
renderTrigger: true,
|
||||
default: false,
|
||||
description: t(
|
||||
'Whether to display the numerical values within the cells',
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
|
@ -178,8 +189,5 @@ export default {
|
|||
y_axis_format: {
|
||||
label: t('Number Format'),
|
||||
},
|
||||
show_values: {
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
* under the License.
|
||||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { D3_FORMAT_OPTIONS, D3_FORMAT_DOCS } from '../controls';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
|
@ -29,7 +30,60 @@ export default {
|
|||
label: t('Options'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['select_country', 'number_format'],
|
||||
[
|
||||
{
|
||||
name: 'select_country',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Country Name'),
|
||||
default: 'France',
|
||||
choices: [
|
||||
'Belgium',
|
||||
'Brazil',
|
||||
'Bulgaria',
|
||||
'China',
|
||||
'Egypt',
|
||||
'France',
|
||||
'Germany',
|
||||
'India',
|
||||
'Iran',
|
||||
'Italy',
|
||||
'Japan',
|
||||
'Korea',
|
||||
'Liechtenstein',
|
||||
'Morocco',
|
||||
'Myanmar',
|
||||
'Netherlands',
|
||||
'Portugal',
|
||||
'Russia',
|
||||
'Singapore',
|
||||
'Spain',
|
||||
'Switzerland',
|
||||
'Thailand',
|
||||
'Timorleste',
|
||||
'Uk',
|
||||
'Ukraine',
|
||||
'Usa',
|
||||
'Zambia',
|
||||
].map(s => [s, s]),
|
||||
description: t(
|
||||
'The name of the country that Superset should display',
|
||||
),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'number_format',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Number format'),
|
||||
renderTrigger: true,
|
||||
default: 'SMART_NUMBER',
|
||||
choices: D3_FORMAT_OPTIONS,
|
||||
description: D3_FORMAT_DOCS,
|
||||
},
|
||||
},
|
||||
],
|
||||
['linear_color_scheme'],
|
||||
],
|
||||
},
|
||||
|
|
|
@ -35,6 +35,7 @@ import {
|
|||
legendFormat,
|
||||
legendPosition,
|
||||
viewport,
|
||||
mapboxStyle,
|
||||
} from './Shared_DeckGL';
|
||||
|
||||
export default {
|
||||
|
@ -77,7 +78,7 @@ export default {
|
|||
{
|
||||
label: t('Map'),
|
||||
controlSetRows: [
|
||||
['mapbox_style', viewport],
|
||||
[mapboxStyle, viewport],
|
||||
[autozoom, null],
|
||||
],
|
||||
},
|
||||
|
|
|
@ -35,6 +35,7 @@ import {
|
|||
stroked,
|
||||
extruded,
|
||||
viewport,
|
||||
mapboxStyle,
|
||||
} from './Shared_DeckGL';
|
||||
|
||||
export default {
|
||||
|
@ -66,7 +67,7 @@ export default {
|
|||
{
|
||||
label: t('Map'),
|
||||
controlSetRows: [
|
||||
['mapbox_style', viewport],
|
||||
[mapboxStyle, viewport],
|
||||
// TODO [autozoom, null], // import { autozoom } from './Shared_DeckGL'
|
||||
],
|
||||
},
|
||||
|
|
|
@ -29,6 +29,7 @@ import {
|
|||
gridSize,
|
||||
viewport,
|
||||
spatial,
|
||||
mapboxStyle,
|
||||
} from './Shared_DeckGL';
|
||||
|
||||
export default {
|
||||
|
@ -46,7 +47,7 @@ export default {
|
|||
{
|
||||
label: t('Map'),
|
||||
controlSetRows: [
|
||||
['mapbox_style', viewport],
|
||||
[mapboxStyle, viewport],
|
||||
['color_picker', autozoom],
|
||||
[gridSize, extruded],
|
||||
],
|
||||
|
|
|
@ -32,6 +32,7 @@ import {
|
|||
gridSize,
|
||||
viewport,
|
||||
spatial,
|
||||
mapboxStyle,
|
||||
} from './Shared_DeckGL';
|
||||
|
||||
export default {
|
||||
|
@ -49,7 +50,7 @@ export default {
|
|||
{
|
||||
label: t('Map'),
|
||||
controlSetRows: [
|
||||
['mapbox_style', viewport],
|
||||
[mapboxStyle, viewport],
|
||||
['color_picker', autozoom],
|
||||
[gridSize, extruded],
|
||||
[
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { validateNonEmpty } from '@superset-ui/validator';
|
||||
import { viewport } from './Shared_DeckGL';
|
||||
import { viewport, mapboxStyle } from './Shared_DeckGL';
|
||||
|
||||
export default {
|
||||
requiresTime: true,
|
||||
|
@ -27,7 +27,7 @@ export default {
|
|||
label: t('Map'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['mapbox_style', viewport],
|
||||
[mapboxStyle, viewport],
|
||||
[
|
||||
{
|
||||
name: 'deck_slices',
|
||||
|
|
|
@ -29,6 +29,7 @@ import {
|
|||
lineWidth,
|
||||
lineType,
|
||||
reverseLongLat,
|
||||
mapboxStyle,
|
||||
} from './Shared_DeckGL';
|
||||
|
||||
export default {
|
||||
|
@ -56,7 +57,7 @@ export default {
|
|||
label: t('Map'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['mapbox_style', viewport],
|
||||
[mapboxStyle, viewport],
|
||||
['color_picker', lineWidth],
|
||||
[reverseLongLat, autozoom],
|
||||
],
|
||||
|
|
|
@ -40,6 +40,7 @@ import {
|
|||
lineWidth,
|
||||
lineType,
|
||||
reverseLongLat,
|
||||
mapboxStyle,
|
||||
} from './Shared_DeckGL';
|
||||
|
||||
export default {
|
||||
|
@ -63,7 +64,7 @@ export default {
|
|||
label: t('Map'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['mapbox_style', viewport],
|
||||
[mapboxStyle, viewport],
|
||||
[autozoom, null],
|
||||
],
|
||||
},
|
||||
|
@ -121,7 +122,16 @@ export default {
|
|||
},
|
||||
],
|
||||
[
|
||||
'table_filter',
|
||||
{
|
||||
name: 'table_filter',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Emit Filter Events'),
|
||||
renderTrigger: true,
|
||||
default: false,
|
||||
description: t('Whether to apply filter when items are clicked'),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'toggle_polygons',
|
||||
config: {
|
||||
|
|
|
@ -33,6 +33,7 @@ import {
|
|||
spatial,
|
||||
pointRadiusFixed,
|
||||
multiplier,
|
||||
mapboxStyle,
|
||||
} from './Shared_DeckGL';
|
||||
|
||||
export default {
|
||||
|
@ -62,7 +63,7 @@ export default {
|
|||
label: t('Map'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['mapbox_style', viewport],
|
||||
[mapboxStyle, viewport],
|
||||
[autozoom, null],
|
||||
],
|
||||
},
|
||||
|
|
|
@ -29,6 +29,7 @@ import {
|
|||
gridSize,
|
||||
viewport,
|
||||
spatial,
|
||||
mapboxStyle,
|
||||
} from './Shared_DeckGL';
|
||||
|
||||
export default {
|
||||
|
@ -46,7 +47,7 @@ export default {
|
|||
{
|
||||
label: t('Map'),
|
||||
controlSetRows: [
|
||||
['mapbox_style', viewport],
|
||||
[mapboxStyle, viewport],
|
||||
[autozoom, null],
|
||||
],
|
||||
},
|
||||
|
|
|
@ -34,7 +34,29 @@ export default {
|
|||
{
|
||||
label: t('Options'),
|
||||
controlSetRows: [
|
||||
['link_length'],
|
||||
[
|
||||
{
|
||||
name: 'link_length',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
renderTrigger: true,
|
||||
freeForm: true,
|
||||
label: t('Link Length'),
|
||||
default: '200',
|
||||
choices: formatSelectOptions([
|
||||
'10',
|
||||
'25',
|
||||
'50',
|
||||
'75',
|
||||
'100',
|
||||
'150',
|
||||
'200',
|
||||
'250',
|
||||
]),
|
||||
description: t('Link length in the force layout'),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'charge',
|
||||
|
|
|
@ -41,7 +41,17 @@ export default {
|
|||
['groupby'],
|
||||
['columns'],
|
||||
['row_limit'],
|
||||
['contribution'],
|
||||
[
|
||||
{
|
||||
name: 'contribution',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Contribution'),
|
||||
default: false,
|
||||
description: t('Compute the contribution to the total'),
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
|
@ -16,9 +16,12 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import React from 'react';
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { validateNonEmpty } from '@superset-ui/validator';
|
||||
import { formatSelectOptionsForRange } from '../../modules/utils';
|
||||
import { columnChoices } from '../controls';
|
||||
import ColumnOption from '../../components/ColumnOption';
|
||||
|
||||
export default {
|
||||
requiresTime: true,
|
||||
|
@ -27,7 +30,24 @@ export default {
|
|||
label: t('Event definition'),
|
||||
controlSetRows: [
|
||||
['entity'],
|
||||
['all_columns_x'],
|
||||
[
|
||||
{
|
||||
name: 'all_columns_x',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Column containing event names'),
|
||||
default: control =>
|
||||
control.choices && control.choices.length > 0
|
||||
? control.choices[0][0]
|
||||
: null,
|
||||
},
|
||||
description: t('Columns to display'),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
validators: [validateNonEmpty],
|
||||
},
|
||||
],
|
||||
['row_limit'],
|
||||
[
|
||||
{
|
||||
|
@ -68,7 +88,29 @@ export default {
|
|||
},
|
||||
{
|
||||
label: t('Additional metadata'),
|
||||
controlSetRows: [['all_columns']],
|
||||
controlSetRows: [
|
||||
[
|
||||
{
|
||||
name: 'all_columns',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
multi: true,
|
||||
label: t('Meta data'),
|
||||
default: [],
|
||||
description: t('Select any columns for metadata inspection'),
|
||||
optionRenderer: c => <ColumnOption column={c} showType />,
|
||||
valueRenderer: c => <ColumnOption column={c} />,
|
||||
valueKey: 'column_name',
|
||||
allowAll: true,
|
||||
mapStateToProps: state => ({
|
||||
options: state.datasource ? state.datasource.columns : [],
|
||||
}),
|
||||
commaChoosesOption: false,
|
||||
freeForm: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
],
|
||||
controlOverrides: {
|
||||
|
@ -76,23 +118,11 @@ export default {
|
|||
label: t('Column containing entity ids'),
|
||||
description: t('e.g., a "user id" column'),
|
||||
},
|
||||
all_columns_x: {
|
||||
label: t('Column containing event names'),
|
||||
validators: [validateNonEmpty],
|
||||
default: control =>
|
||||
control.choices && control.choices.length > 0
|
||||
? control.choices[0][0]
|
||||
: null,
|
||||
},
|
||||
row_limit: {
|
||||
label: t('Event count limit'),
|
||||
description: t(
|
||||
'The maximum number of events to return, equivalent to the number of rows',
|
||||
),
|
||||
},
|
||||
all_columns: {
|
||||
label: t('Meta data'),
|
||||
description: t('Select any columns for metadata inspection'),
|
||||
},
|
||||
},
|
||||
};
|
|
@ -25,7 +25,19 @@ export default {
|
|||
label: t('Filters Configuration'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['filter_configs'],
|
||||
[
|
||||
{
|
||||
name: 'filter_configs',
|
||||
config: {
|
||||
type: 'CollectionControl',
|
||||
label: 'Filters',
|
||||
description: t('Filter configuration for the filter box'),
|
||||
validators: [],
|
||||
controlName: 'FilterBoxItemControl',
|
||||
mapStateToProps: ({ datasource }) => ({ datasource }),
|
||||
},
|
||||
},
|
||||
],
|
||||
[<hr />],
|
||||
[
|
||||
{
|
||||
|
|
|
@ -22,6 +22,7 @@ import {
|
|||
formatSelectOptionsForRange,
|
||||
formatSelectOptions,
|
||||
} from '../../modules/utils';
|
||||
import { columnChoices } from '../controls';
|
||||
|
||||
const sortAxisChoices = [
|
||||
['alpha_asc', t('Axis ascending')],
|
||||
|
@ -36,7 +37,34 @@ export default {
|
|||
label: t('Query'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['all_columns_x', 'all_columns_y'],
|
||||
[
|
||||
{
|
||||
name: 'all_columns_x',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: 'X',
|
||||
default: null,
|
||||
description: t('Columns to display'),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
validators: [validateNonEmpty],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'all_columns_y',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: 'Y',
|
||||
default: null,
|
||||
description: t('Columns to display'),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
validators: [validateNonEmpty],
|
||||
},
|
||||
},
|
||||
],
|
||||
['metric'],
|
||||
['adhoc_filters'],
|
||||
['row_limit'],
|
||||
|
@ -95,7 +123,24 @@ export default {
|
|||
),
|
||||
},
|
||||
},
|
||||
'normalize_across',
|
||||
{
|
||||
name: 'normalize_across',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Normalize Across'),
|
||||
choices: [
|
||||
['heatmap', 'heatmap'],
|
||||
['x', 'x'],
|
||||
['y', 'y'],
|
||||
],
|
||||
default: 'heatmap',
|
||||
description: t(
|
||||
'Color will be rendered based on a ratio ' +
|
||||
'of the cell against the sum of across this ' +
|
||||
'criteria',
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
|
@ -185,7 +230,30 @@ export default {
|
|||
},
|
||||
},
|
||||
],
|
||||
['show_values', 'normalized'],
|
||||
[
|
||||
{
|
||||
name: 'show_values',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Show Values'),
|
||||
renderTrigger: true,
|
||||
default: false,
|
||||
description: t(
|
||||
'Whether to display the numerical values within the cells',
|
||||
),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'normalized',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Normalized'),
|
||||
renderTrigger: true,
|
||||
description: t('Whether to normalize the histogram'),
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'sort_x_axis',
|
||||
|
@ -212,12 +280,6 @@ export default {
|
|||
},
|
||||
],
|
||||
controlOverrides: {
|
||||
all_columns_x: {
|
||||
validators: [validateNonEmpty],
|
||||
},
|
||||
all_columns_y: {
|
||||
validators: [validateNonEmpty],
|
||||
},
|
||||
normalized: t(
|
||||
'Whether to apply a normal distribution based on rank on the color scale',
|
||||
),
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { validateNonEmpty } from '@superset-ui/validator';
|
||||
import { columnChoices } from '../controls';
|
||||
import { formatSelectOptions } from '../../modules/utils';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
|
@ -25,7 +27,24 @@ export default {
|
|||
label: t('Query'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['all_columns_x'],
|
||||
[
|
||||
{
|
||||
name: 'all_columns_x',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Numeric Columns'),
|
||||
default: null,
|
||||
description: t(
|
||||
'Select the numeric columns to draw the histogram',
|
||||
),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
multi: true,
|
||||
validators: [validateNonEmpty],
|
||||
},
|
||||
},
|
||||
],
|
||||
['adhoc_filters'],
|
||||
['row_limit'],
|
||||
['groupby'],
|
||||
|
@ -36,7 +55,29 @@ export default {
|
|||
expanded: true,
|
||||
controlSetRows: [
|
||||
['color_scheme', 'label_colors'],
|
||||
['link_length'],
|
||||
[
|
||||
{
|
||||
name: 'link_length',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
renderTrigger: true,
|
||||
freeForm: true,
|
||||
label: t('No of Bins'),
|
||||
default: 5,
|
||||
choices: formatSelectOptions([
|
||||
'10',
|
||||
'25',
|
||||
'50',
|
||||
'75',
|
||||
'100',
|
||||
'150',
|
||||
'200',
|
||||
'250',
|
||||
]),
|
||||
description: t('Select the number of bins for the histogram'),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'x_axis_label',
|
||||
|
@ -57,26 +98,19 @@ export default {
|
|||
},
|
||||
},
|
||||
],
|
||||
['global_opacity'],
|
||||
['normalized'],
|
||||
[
|
||||
{
|
||||
name: 'normalized',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Normalized'),
|
||||
renderTrigger: true,
|
||||
description: t('Whether to normalize the histogram'),
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
],
|
||||
controlOverrides: {
|
||||
all_columns_x: {
|
||||
label: t('Numeric Columns'),
|
||||
description: t('Select the numeric columns to draw the histogram'),
|
||||
multi: true,
|
||||
validators: [validateNonEmpty],
|
||||
},
|
||||
link_length: {
|
||||
label: t('No of Bins'),
|
||||
description: t('Select the number of bins for the histogram'),
|
||||
default: 5,
|
||||
},
|
||||
global_opacity: {
|
||||
description: t('Opacity of the bars. Between 0 and 1'),
|
||||
renderTrigger: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -22,7 +22,22 @@ export default {
|
|||
controlPanelSections: [
|
||||
{
|
||||
label: t('Options'),
|
||||
controlSetRows: [['url']],
|
||||
controlSetRows: [
|
||||
[
|
||||
{
|
||||
name: 'url',
|
||||
config: {
|
||||
type: 'TextControl',
|
||||
label: t('URL'),
|
||||
description: t(
|
||||
'The URL, this control is templated, so you can integrate ' +
|
||||
'{{ width }} and/or {{ height }} in your URL string.',
|
||||
),
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
],
|
||||
sectionOverrides: {
|
||||
|
|
|
@ -26,7 +26,32 @@ export default {
|
|||
label: t('Query'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['all_columns_x', 'all_columns_y'],
|
||||
[
|
||||
{
|
||||
name: 'all_columns_x',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Longitude'),
|
||||
default: null,
|
||||
description: t('Column containing longitude data'),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'all_columns_y',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Latitude'),
|
||||
default: null,
|
||||
description: t('Column containing latitude data'),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'clustering_radius',
|
||||
|
@ -100,7 +125,51 @@ export default {
|
|||
},
|
||||
{
|
||||
label: t('Labelling'),
|
||||
controlSetRows: [['mapbox_label'], ['pandas_aggfunc']],
|
||||
controlSetRows: [
|
||||
[
|
||||
{
|
||||
name: 'mapbox_label',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
multi: true,
|
||||
label: t('label'),
|
||||
default: [],
|
||||
description: t(
|
||||
'`count` is COUNT(*) if a group by is used. ' +
|
||||
'Numerical columns will be aggregated with the aggregator. ' +
|
||||
'Non-numerical columns will be used to label points. ' +
|
||||
'Leave empty to get a count of points in each cluster.',
|
||||
),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'pandas_aggfunc',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Cluster label aggregator'),
|
||||
clearable: false,
|
||||
choices: formatSelectOptions([
|
||||
'sum',
|
||||
'mean',
|
||||
'min',
|
||||
'max',
|
||||
'std',
|
||||
'var',
|
||||
]),
|
||||
default: 'sum',
|
||||
description: t(
|
||||
'Aggregate function applied to the list of points ' +
|
||||
'in each cluster to produce the cluster label.',
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
{
|
||||
label: t('Visual Tweaks'),
|
||||
|
@ -118,8 +187,44 @@ export default {
|
|||
},
|
||||
},
|
||||
],
|
||||
['mapbox_style'],
|
||||
['global_opacity'],
|
||||
[
|
||||
{
|
||||
name: 'mapbox_style',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Map Style'),
|
||||
clearable: false,
|
||||
renderTrigger: true,
|
||||
choices: [
|
||||
['mapbox://styles/mapbox/streets-v9', 'Streets'],
|
||||
['mapbox://styles/mapbox/dark-v9', 'Dark'],
|
||||
['mapbox://styles/mapbox/light-v9', 'Light'],
|
||||
[
|
||||
'mapbox://styles/mapbox/satellite-streets-v9',
|
||||
'Satellite Streets',
|
||||
],
|
||||
['mapbox://styles/mapbox/satellite-v9', 'Satellite'],
|
||||
['mapbox://styles/mapbox/outdoors-v9', 'Outdoors'],
|
||||
],
|
||||
default: 'mapbox://styles/mapbox/light-v9',
|
||||
description: t('Base layer map style'),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'global_opacity',
|
||||
config: {
|
||||
type: 'TextControl',
|
||||
label: t('Opacity'),
|
||||
default: 1,
|
||||
isFloat: true,
|
||||
description: t(
|
||||
'Opacity of all clusters, points, and labels. Between 0 and 1.',
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'mapbox_color',
|
||||
|
@ -197,21 +302,6 @@ export default {
|
|||
},
|
||||
],
|
||||
controlOverrides: {
|
||||
all_columns_x: {
|
||||
label: t('Longitude'),
|
||||
description: t('Column containing longitude data'),
|
||||
},
|
||||
all_columns_y: {
|
||||
label: t('Latitude'),
|
||||
description: t('Column containing latitude data'),
|
||||
},
|
||||
pandas_aggfunc: {
|
||||
label: t('Cluster label aggregator'),
|
||||
description: t(
|
||||
'Aggregate function applied to the list of points ' +
|
||||
'in each cluster to produce the cluster label.',
|
||||
),
|
||||
},
|
||||
groupby: {
|
||||
description: t(
|
||||
'One or many controls to group by. If grouping, latitude ' +
|
||||
|
|
|
@ -17,13 +17,47 @@
|
|||
* under the License.
|
||||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { validateNonEmpty } from '@superset-ui/validator';
|
||||
import { formatSelectOptions } from '../../modules/utils';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
{
|
||||
label: t('Code'),
|
||||
expanded: true,
|
||||
controlSetRows: [['markup_type'], ['code']],
|
||||
controlSetRows: [
|
||||
[
|
||||
{
|
||||
name: 'markup_type',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Markup Type'),
|
||||
clearable: false,
|
||||
choices: formatSelectOptions(['markdown', 'html']),
|
||||
default: 'markdown',
|
||||
validators: [validateNonEmpty],
|
||||
description: t('Pick your favorite markup language'),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'code',
|
||||
config: {
|
||||
type: 'TextAreaControl',
|
||||
label: t('Code'),
|
||||
description: t('Put your code here'),
|
||||
mapStateToProps: state => ({
|
||||
language:
|
||||
state.controls && state.controls.markup_type
|
||||
? state.controls.markup_type.value
|
||||
: 'markdown',
|
||||
}),
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
],
|
||||
sectionOverrides: {
|
||||
|
|
|
@ -29,7 +29,26 @@ export default {
|
|||
['adhoc_filters'],
|
||||
['groupby'],
|
||||
['limit', 'timeseries_limit_metric'],
|
||||
['order_desc', 'contribution'],
|
||||
[
|
||||
{
|
||||
name: 'order_desc',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Sort Descending'),
|
||||
default: true,
|
||||
description: t('Whether to sort descending or ascending'),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'contribution',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Contribution'),
|
||||
default: false,
|
||||
description: t('Compute the contribution to the total'),
|
||||
},
|
||||
},
|
||||
],
|
||||
['row_limit', null],
|
||||
],
|
||||
},
|
||||
|
|
|
@ -19,12 +19,47 @@
|
|||
import React from 'react';
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { validateNonEmpty } from '@superset-ui/validator';
|
||||
import { NVD3TimeSeries } from './sections';
|
||||
import OptionDescription from '../../components/OptionDescription';
|
||||
import { NVD3TimeSeries } from './sections';
|
||||
import {
|
||||
D3_TIME_FORMAT_OPTIONS,
|
||||
D3_FORMAT_DOCS,
|
||||
D3_FORMAT_OPTIONS,
|
||||
} from '../controls';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
NVD3TimeSeries[0],
|
||||
{
|
||||
label: t('Query'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['metrics'],
|
||||
['adhoc_filters'],
|
||||
['groupby'],
|
||||
['limit', 'timeseries_limit_metric'],
|
||||
[
|
||||
{
|
||||
name: 'order_desc',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Sort Descending'),
|
||||
default: true,
|
||||
description: t('Whether to sort descending or ascending'),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'contribution',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Contribution'),
|
||||
default: false,
|
||||
description: t('Compute the contribution to the total'),
|
||||
},
|
||||
},
|
||||
],
|
||||
['row_limit', null],
|
||||
],
|
||||
},
|
||||
{
|
||||
label: t('Time Series Options'),
|
||||
expanded: true,
|
||||
|
@ -99,7 +134,32 @@ export default {
|
|||
expanded: true,
|
||||
controlSetRows: [
|
||||
['color_scheme', 'label_colors'],
|
||||
['number_format', 'date_time_format'],
|
||||
[
|
||||
{
|
||||
name: 'number_format',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Number format'),
|
||||
renderTrigger: true,
|
||||
default: 'SMART_NUMBER',
|
||||
choices: D3_FORMAT_OPTIONS,
|
||||
description: D3_FORMAT_DOCS,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'date_time_format',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Date Time Format'),
|
||||
renderTrigger: true,
|
||||
default: 'smart_date',
|
||||
choices: D3_TIME_FORMAT_OPTIONS,
|
||||
description: D3_FORMAT_DOCS,
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'partition_limit',
|
||||
|
@ -129,7 +189,16 @@ export default {
|
|||
},
|
||||
],
|
||||
[
|
||||
'log_scale',
|
||||
{
|
||||
name: 'log_scale',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Log Scale'),
|
||||
default: false,
|
||||
renderTrigger: true,
|
||||
description: t('Use a log scale'),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'equal_date_size',
|
||||
config: {
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { showLegend } from './Shared_NVD3';
|
||||
import { D3_FORMAT_OPTIONS } from '../controls';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
|
@ -53,7 +54,23 @@ export default {
|
|||
description: t('What should be shown on the label?'),
|
||||
},
|
||||
},
|
||||
'number_format',
|
||||
{
|
||||
name: 'number_format',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Number format'),
|
||||
renderTrigger: true,
|
||||
default: 'SMART_NUMBER',
|
||||
choices: D3_FORMAT_OPTIONS,
|
||||
description:
|
||||
t('D3 format syntax: https://github.com/d3/d3-format') +
|
||||
' ' +
|
||||
t(
|
||||
'Only applies when the "Label Type" is not set to a percentage.',
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
|
@ -101,11 +118,5 @@ export default {
|
|||
row_limit: {
|
||||
default: 25,
|
||||
},
|
||||
number_format: {
|
||||
description:
|
||||
t('D3 format syntax: https://github.com/d3/d3-format') +
|
||||
' ' +
|
||||
t('Only applies when the "Label Type" is not set to a percentage.'),
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
* under the License.
|
||||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { formatSelectOptions } from '../../modules/utils';
|
||||
import { D3_FORMAT_OPTIONS, D3_FORMAT_DOCS } from '../controls';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
|
@ -35,7 +37,27 @@ export default {
|
|||
label: t('Pivot Options'),
|
||||
controlSetRows: [
|
||||
[
|
||||
'pandas_aggfunc',
|
||||
{
|
||||
name: 'pandas_aggfunc',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Aggregation function'),
|
||||
clearable: false,
|
||||
choices: formatSelectOptions([
|
||||
'sum',
|
||||
'mean',
|
||||
'min',
|
||||
'max',
|
||||
'std',
|
||||
'var',
|
||||
]),
|
||||
default: 'sum',
|
||||
description: t(
|
||||
'Aggregate function to apply when pivoting and ' +
|
||||
'computing the total rows and columns',
|
||||
),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'pivot_margins',
|
||||
config: {
|
||||
|
@ -48,7 +70,18 @@ export default {
|
|||
},
|
||||
],
|
||||
[
|
||||
'number_format',
|
||||
{
|
||||
name: 'number_format',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Number format'),
|
||||
renderTrigger: true,
|
||||
default: 'SMART_NUMBER',
|
||||
choices: D3_FORMAT_OPTIONS,
|
||||
description: D3_FORMAT_DOCS,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'combine_metric',
|
||||
config: {
|
||||
|
|
|
@ -18,6 +18,11 @@
|
|||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { NVD3TimeSeries } from './sections';
|
||||
import {
|
||||
D3_TIME_FORMAT_OPTIONS,
|
||||
D3_FORMAT_OPTIONS,
|
||||
D3_FORMAT_DOCS,
|
||||
} from '../controls';
|
||||
|
||||
export default {
|
||||
requiresTime: true,
|
||||
|
@ -28,7 +33,32 @@ export default {
|
|||
expanded: true,
|
||||
controlSetRows: [
|
||||
['color_scheme', 'label_colors'],
|
||||
['number_format', 'date_time_format'],
|
||||
[
|
||||
{
|
||||
name: 'number_format',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Number format'),
|
||||
renderTrigger: true,
|
||||
default: 'SMART_NUMBER',
|
||||
choices: D3_FORMAT_OPTIONS,
|
||||
description: D3_FORMAT_DOCS,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'date_time_format',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Date Time Format'),
|
||||
renderTrigger: true,
|
||||
default: 'smart_date',
|
||||
choices: D3_TIME_FORMAT_OPTIONS,
|
||||
description: D3_FORMAT_DOCS,
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'rich_tooltip',
|
||||
|
|
|
@ -17,12 +17,46 @@
|
|||
* under the License.
|
||||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { validateNonEmpty } from '@superset-ui/validator';
|
||||
import { formatSelectOptions } from '../../modules/utils';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
{
|
||||
label: t('Code'),
|
||||
controlSetRows: [['markup_type'], ['code']],
|
||||
controlSetRows: [
|
||||
[
|
||||
{
|
||||
name: 'markup_type',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Markup Type'),
|
||||
clearable: false,
|
||||
choices: formatSelectOptions(['markdown', 'html']),
|
||||
default: 'markdown',
|
||||
validators: [validateNonEmpty],
|
||||
description: t('Pick your favorite markup language'),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'code',
|
||||
config: {
|
||||
type: 'TextAreaControl',
|
||||
label: t('Code'),
|
||||
description: t('Put your code here'),
|
||||
mapStateToProps: state => ({
|
||||
language:
|
||||
state.controls && state.controls.markup_type
|
||||
? state.controls.markup_type.value
|
||||
: 'markdown',
|
||||
}),
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
],
|
||||
controlOverrides: {
|
||||
|
|
|
@ -392,3 +392,23 @@ export const reverseLongLat = {
|
|||
default: false,
|
||||
},
|
||||
};
|
||||
|
||||
export const mapboxStyle = {
|
||||
name: 'mapbox_style',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Map Style'),
|
||||
clearable: false,
|
||||
renderTrigger: true,
|
||||
choices: [
|
||||
['mapbox://styles/mapbox/streets-v9', 'Streets'],
|
||||
['mapbox://styles/mapbox/dark-v9', 'Dark'],
|
||||
['mapbox://styles/mapbox/light-v9', 'Light'],
|
||||
['mapbox://styles/mapbox/satellite-streets-v9', 'Satellite Streets'],
|
||||
['mapbox://styles/mapbox/satellite-v9', 'Satellite'],
|
||||
['mapbox://styles/mapbox/outdoors-v9', 'Outdoors'],
|
||||
],
|
||||
default: 'mapbox://styles/mapbox/light-v9',
|
||||
description: t('Base layer map style'),
|
||||
},
|
||||
};
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// These are control configurations that are shared ONLY within the BigNumber viz plugin repo.
|
||||
import { t } from '@superset-ui/translation';
|
||||
|
||||
export const foo = {
|
||||
name: 'foo_control',
|
||||
config: {},
|
||||
};
|
|
@ -16,10 +16,12 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import React from 'react';
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { validateNonEmpty } from '@superset-ui/validator';
|
||||
import { D3_TIME_FORMAT_OPTIONS } from '../controls';
|
||||
import { formatSelectOptions } from '../../modules/utils';
|
||||
import ColumnOption from '../../components/ColumnOption';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
|
@ -66,7 +68,15 @@ export default {
|
|||
default: false,
|
||||
},
|
||||
},
|
||||
'order_desc',
|
||||
{
|
||||
name: 'order_desc',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Sort Descending'),
|
||||
default: true,
|
||||
description: t('Whether to sort descending or ascending'),
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
|
@ -75,7 +85,27 @@ export default {
|
|||
description: t('Use this section if you want to query atomic rows'),
|
||||
expanded: true,
|
||||
controlSetRows: [
|
||||
['all_columns'],
|
||||
[
|
||||
{
|
||||
name: 'all_columns',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
multi: true,
|
||||
label: t('Columns'),
|
||||
default: [],
|
||||
description: t('Columns to display'),
|
||||
optionRenderer: c => <ColumnOption column={c} showType />,
|
||||
valueRenderer: c => <ColumnOption column={c} />,
|
||||
valueKey: 'column_name',
|
||||
allowAll: true,
|
||||
mapStateToProps: state => ({
|
||||
options: state.datasource ? state.datasource.columns : [],
|
||||
}),
|
||||
commaChoosesOption: false,
|
||||
freeForm: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'order_by_cols',
|
||||
|
@ -157,7 +187,16 @@ export default {
|
|||
description: t('Whether to include a client-side search box'),
|
||||
},
|
||||
},
|
||||
'table_filter',
|
||||
{
|
||||
name: 'table_filter',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Emit Filter Events'),
|
||||
renderTrigger: true,
|
||||
default: false,
|
||||
description: t('Whether to apply filter when items are clicked'),
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
|
@ -17,6 +17,7 @@
|
|||
* under the License.
|
||||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { validateNonEmpty } from '@superset-ui/validator';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
|
@ -28,8 +29,31 @@ export default {
|
|||
['adhoc_filters'],
|
||||
['groupby'],
|
||||
['limit'],
|
||||
['column_collection'],
|
||||
['url'],
|
||||
[
|
||||
{
|
||||
name: 'column_collection',
|
||||
config: {
|
||||
type: 'CollectionControl',
|
||||
label: t('Time Series Columns'),
|
||||
validators: [validateNonEmpty],
|
||||
controlName: 'TimeSeriesColumnControl',
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'url',
|
||||
config: {
|
||||
type: 'TextControl',
|
||||
label: t('URL'),
|
||||
description: t(
|
||||
"Templated link, it's possible to include {{ metric }} " +
|
||||
'or other values coming from the controls.',
|
||||
),
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
],
|
||||
|
@ -37,12 +61,6 @@ export default {
|
|||
groupby: {
|
||||
multiple: false,
|
||||
},
|
||||
url: {
|
||||
description: t(
|
||||
"Templated link, it's possible to include {{ metric }} " +
|
||||
'or other values coming from the controls.',
|
||||
),
|
||||
},
|
||||
},
|
||||
sectionOverrides: {
|
||||
druidTimeSeries: {
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
* under the License.
|
||||
*/
|
||||
import { t } from '@superset-ui/translation';
|
||||
import { D3_FORMAT_OPTIONS, D3_FORMAT_DOCS } from '../controls';
|
||||
|
||||
export default {
|
||||
controlPanelSections: [
|
||||
|
@ -48,7 +49,20 @@ export default {
|
|||
},
|
||||
},
|
||||
],
|
||||
['number_format'],
|
||||
[
|
||||
{
|
||||
name: 'number_format',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Number format'),
|
||||
renderTrigger: true,
|
||||
default: 'SMART_NUMBER',
|
||||
choices: D3_FORMAT_OPTIONS,
|
||||
description: D3_FORMAT_DOCS,
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
],
|
||||
|
|
|
@ -33,7 +33,44 @@ export const datasourceAndVizType = {
|
|||
controlSetRows: [
|
||||
['datasource'],
|
||||
['viz_type'],
|
||||
['slice_id', 'cache_timeout', 'url_params', 'time_range_endpoints'],
|
||||
[
|
||||
{
|
||||
name: 'slice_id',
|
||||
config: {
|
||||
type: 'HiddenControl',
|
||||
label: t('Chart ID'),
|
||||
hidden: true,
|
||||
description: t('The id of the active chart'),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'cache_timeout',
|
||||
config: {
|
||||
type: 'HiddenControl',
|
||||
label: t('Cache Timeout (seconds)'),
|
||||
hidden: true,
|
||||
description: t('The number of seconds before expiring the cache'),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'url_params',
|
||||
config: {
|
||||
type: 'HiddenControl',
|
||||
label: t('URL Parameters'),
|
||||
hidden: true,
|
||||
description: t('Extra parameters for use in jinja templated queries'),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'time_range_endpoints',
|
||||
config: {
|
||||
type: 'HiddenControl',
|
||||
label: t('Time range endpoints'),
|
||||
hidden: true,
|
||||
description: t('Time range endpoints (SIP-15)'),
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
||||
|
||||
|
@ -51,8 +88,23 @@ export const sqlaTimeSeries = {
|
|||
|
||||
export const annotations = {
|
||||
label: t('Annotations and Layers'),
|
||||
tabOverride: 'data',
|
||||
expanded: true,
|
||||
controlSetRows: [['annotation_layers']],
|
||||
controlSetRows: [
|
||||
[
|
||||
{
|
||||
name: 'annotation_layers',
|
||||
config: {
|
||||
type: 'AnnotationLayerControl',
|
||||
label: '',
|
||||
default: [],
|
||||
description: 'Annotation Layers',
|
||||
renderTrigger: true,
|
||||
tabOverride: 'data',
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
||||
|
||||
export const NVD3TimeSeries = [
|
||||
|
@ -64,12 +116,32 @@ export const NVD3TimeSeries = [
|
|||
['adhoc_filters'],
|
||||
['groupby'],
|
||||
['limit', 'timeseries_limit_metric'],
|
||||
['order_desc', 'contribution'],
|
||||
[
|
||||
{
|
||||
name: 'order_desc',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Sort Descending'),
|
||||
default: true,
|
||||
description: t('Whether to sort descending or ascending'),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'contribution',
|
||||
config: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Contribution'),
|
||||
default: false,
|
||||
description: t('Compute the contribution to the total'),
|
||||
},
|
||||
},
|
||||
],
|
||||
['row_limit', null],
|
||||
],
|
||||
},
|
||||
{
|
||||
label: t('Advanced Analytics'),
|
||||
tabOverride: 'data',
|
||||
description: t(
|
||||
'This section contains options ' +
|
||||
'that allow for advanced analytical post processing ' +
|
||||
|
@ -77,7 +149,54 @@ export const NVD3TimeSeries = [
|
|||
),
|
||||
controlSetRows: [
|
||||
[<h1 className="section-header">{t('Rolling Window')}</h1>],
|
||||
['rolling_type', 'rolling_periods', 'min_periods'],
|
||||
[
|
||||
{
|
||||
name: 'rolling_type',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Rolling Function'),
|
||||
default: 'None',
|
||||
choices: formatSelectOptions([
|
||||
'None',
|
||||
'mean',
|
||||
'sum',
|
||||
'std',
|
||||
'cumsum',
|
||||
]),
|
||||
description: t(
|
||||
'Defines a rolling window function to apply, works along ' +
|
||||
'with the [Periods] text box',
|
||||
),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'rolling_periods',
|
||||
config: {
|
||||
type: 'TextControl',
|
||||
label: t('Periods'),
|
||||
isInt: true,
|
||||
description: t(
|
||||
'Defines the size of the rolling window function, ' +
|
||||
'relative to the time granularity selected',
|
||||
),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'min_periods',
|
||||
config: {
|
||||
type: 'TextControl',
|
||||
label: t('Min Periods'),
|
||||
isInt: true,
|
||||
description: t(
|
||||
'The minimum number of rolling periods required to show ' +
|
||||
'a value. For instance if you do a cumulative sum on 7 days ' +
|
||||
'you may want your "Min Period" to be 7, so that all data points ' +
|
||||
'shown are the total of 7 periods. This will hide the "ramp up" ' +
|
||||
'taking place over the first 7 periods',
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
[<h1 className="section-header">{t('Time Comparison')}</h1>],
|
||||
[
|
||||
{
|
||||
|
@ -103,7 +222,25 @@ export const NVD3TimeSeries = [
|
|||
),
|
||||
},
|
||||
},
|
||||
'comparison_type',
|
||||
{
|
||||
name: 'comparison_type',
|
||||
config: {
|
||||
type: 'SelectControl',
|
||||
label: t('Calculation type'),
|
||||
default: 'values',
|
||||
choices: [
|
||||
['values', 'Actual Values'],
|
||||
['absolute', 'Absolute difference'],
|
||||
['percentage', 'Percentage change'],
|
||||
['ratio', 'Ratio'],
|
||||
],
|
||||
description: t(
|
||||
'How to display time shifts: as individual lines; as the ' +
|
||||
'absolute difference between the main time series and each time shift; ' +
|
||||
'as the percentage change; or as the ratio between series and time shifts.',
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
[<h1 className="section-header">{t('Python Functions')}</h1>],
|
||||
[<h2 className="section-header">pandas.resample</h2>],
|
||||
|
|
|
@ -243,22 +243,6 @@ export const controls = {
|
|||
isLinear: true,
|
||||
},
|
||||
|
||||
normalize_across: {
|
||||
type: 'SelectControl',
|
||||
label: t('Normalize Across'),
|
||||
choices: [
|
||||
['heatmap', 'heatmap'],
|
||||
['x', 'x'],
|
||||
['y', 'y'],
|
||||
],
|
||||
default: 'heatmap',
|
||||
description: t(
|
||||
'Color will be rendered based on a ratio ' +
|
||||
'of the cell against the sum of across this ' +
|
||||
'criteria',
|
||||
),
|
||||
},
|
||||
|
||||
secondary_metric: {
|
||||
...metric,
|
||||
label: t('Color Metric'),
|
||||
|
@ -266,41 +250,6 @@ export const controls = {
|
|||
validators: [],
|
||||
description: t('A metric to use for color'),
|
||||
},
|
||||
select_country: {
|
||||
type: 'SelectControl',
|
||||
label: t('Country Name'),
|
||||
default: 'France',
|
||||
choices: [
|
||||
'Belgium',
|
||||
'Brazil',
|
||||
'Bulgaria',
|
||||
'China',
|
||||
'Egypt',
|
||||
'France',
|
||||
'Germany',
|
||||
'India',
|
||||
'Iran',
|
||||
'Italy',
|
||||
'Japan',
|
||||
'Korea',
|
||||
'Liechtenstein',
|
||||
'Morocco',
|
||||
'Myanmar',
|
||||
'Netherlands',
|
||||
'Portugal',
|
||||
'Russia',
|
||||
'Singapore',
|
||||
'Spain',
|
||||
'Switzerland',
|
||||
'Thailand',
|
||||
'Timorleste',
|
||||
'Uk',
|
||||
'Ukraine',
|
||||
'Usa',
|
||||
'Zambia',
|
||||
].map(s => [s, s]),
|
||||
description: t('The name of the country that Superset should display'),
|
||||
},
|
||||
|
||||
groupby: groupByControl,
|
||||
|
||||
|
@ -310,77 +259,6 @@ export const controls = {
|
|||
description: t('One or many controls to pivot as columns'),
|
||||
},
|
||||
|
||||
all_columns: {
|
||||
type: 'SelectControl',
|
||||
multi: true,
|
||||
label: t('Columns'),
|
||||
default: [],
|
||||
description: t('Columns to display'),
|
||||
optionRenderer: c => <ColumnOption column={c} showType />,
|
||||
valueRenderer: c => <ColumnOption column={c} />,
|
||||
valueKey: 'column_name',
|
||||
allowAll: true,
|
||||
mapStateToProps: state => ({
|
||||
options: state.datasource ? state.datasource.columns : [],
|
||||
}),
|
||||
commaChoosesOption: false,
|
||||
freeForm: true,
|
||||
},
|
||||
|
||||
longitude: {
|
||||
type: 'SelectControl',
|
||||
label: t('Longitude'),
|
||||
default: 1,
|
||||
validators: [validateNonEmpty],
|
||||
description: t('Select the longitude column'),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
},
|
||||
|
||||
latitude: {
|
||||
type: 'SelectControl',
|
||||
label: t('Latitude'),
|
||||
default: 1,
|
||||
validators: [validateNonEmpty],
|
||||
description: t('Select the latitude column'),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
},
|
||||
|
||||
polygon: {
|
||||
type: 'SelectControl',
|
||||
label: t('Polygon Column'),
|
||||
validators: [validateNonEmpty],
|
||||
description: t(
|
||||
'Select the polygon column. Each row should contain JSON.array(N) of [longitude, latitude] points',
|
||||
),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
},
|
||||
|
||||
all_columns_x: {
|
||||
type: 'SelectControl',
|
||||
label: 'X',
|
||||
default: null,
|
||||
description: t('Columns to display'),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
},
|
||||
|
||||
all_columns_y: {
|
||||
type: 'SelectControl',
|
||||
label: 'Y',
|
||||
default: null,
|
||||
description: t('Columns to display'),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
},
|
||||
|
||||
druid_time_origin: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
|
@ -426,25 +304,6 @@ export const controls = {
|
|||
),
|
||||
},
|
||||
|
||||
link_length: {
|
||||
type: 'SelectControl',
|
||||
renderTrigger: true,
|
||||
freeForm: true,
|
||||
label: t('Link Length'),
|
||||
default: '200',
|
||||
choices: formatSelectOptions([
|
||||
'10',
|
||||
'25',
|
||||
'50',
|
||||
'75',
|
||||
'100',
|
||||
'150',
|
||||
'200',
|
||||
'250',
|
||||
]),
|
||||
description: t('Link length in the force layout'),
|
||||
},
|
||||
|
||||
granularity_sqla: {
|
||||
type: 'SelectControl',
|
||||
label: TIME_FILTER_LABELS.granularity_sqla,
|
||||
|
@ -509,34 +368,6 @@ export const controls = {
|
|||
}),
|
||||
},
|
||||
|
||||
time_range_fixed: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Fix to selected Time Range'),
|
||||
description: t(
|
||||
'Fix the trend line to the full time range specified in case filtered results do not include the start or end dates',
|
||||
),
|
||||
renderTrigger: true,
|
||||
visibility(props) {
|
||||
const {
|
||||
time_range: timeRange,
|
||||
viz_type: vizType,
|
||||
show_trend_line: showTrendLine,
|
||||
} = props.form_data;
|
||||
// only display this option when a time range is selected
|
||||
return timeRange && timeRange !== 'No filter';
|
||||
},
|
||||
},
|
||||
|
||||
number_format: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Number format'),
|
||||
renderTrigger: true,
|
||||
default: 'SMART_NUMBER',
|
||||
choices: D3_FORMAT_OPTIONS,
|
||||
description: D3_FORMAT_DOCS,
|
||||
},
|
||||
|
||||
row_limit: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
|
@ -572,47 +403,6 @@ export const controls = {
|
|||
}),
|
||||
},
|
||||
|
||||
order_desc: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Sort Descending'),
|
||||
default: true,
|
||||
description: t('Whether to sort descending or ascending'),
|
||||
},
|
||||
|
||||
rolling_type: {
|
||||
type: 'SelectControl',
|
||||
label: t('Rolling Function'),
|
||||
default: 'None',
|
||||
choices: formatSelectOptions(['None', 'mean', 'sum', 'std', 'cumsum']),
|
||||
description: t(
|
||||
'Defines a rolling window function to apply, works along ' +
|
||||
'with the [Periods] text box',
|
||||
),
|
||||
},
|
||||
|
||||
rolling_periods: {
|
||||
type: 'TextControl',
|
||||
label: t('Periods'),
|
||||
isInt: true,
|
||||
description: t(
|
||||
'Defines the size of the rolling window function, ' +
|
||||
'relative to the time granularity selected',
|
||||
),
|
||||
},
|
||||
|
||||
min_periods: {
|
||||
type: 'TextControl',
|
||||
label: t('Min Periods'),
|
||||
isInt: true,
|
||||
description: t(
|
||||
'The minimum number of rolling periods required to show ' +
|
||||
'a value. For instance if you do a cumulative sum on 7 days ' +
|
||||
'you may want your "Min Period" to be 7, so that all data points ' +
|
||||
'shown are the total of 7 periods. This will hide the "ramp up" ' +
|
||||
'taking place over the first 7 periods',
|
||||
),
|
||||
},
|
||||
|
||||
series: {
|
||||
...groupByControl,
|
||||
label: t('Series'),
|
||||
|
@ -654,16 +444,6 @@ export const controls = {
|
|||
default: null,
|
||||
},
|
||||
|
||||
url: {
|
||||
type: 'TextControl',
|
||||
label: t('URL'),
|
||||
description: t(
|
||||
'The URL, this control is templated, so you can integrate ' +
|
||||
'{{ width }} and/or {{ height }} in your URL string.',
|
||||
),
|
||||
default: '',
|
||||
},
|
||||
|
||||
y_axis_format: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
|
@ -689,170 +469,6 @@ export const controls = {
|
|||
},
|
||||
},
|
||||
|
||||
date_time_format: {
|
||||
type: 'SelectControl',
|
||||
freeForm: true,
|
||||
label: t('Date Time Format'),
|
||||
renderTrigger: true,
|
||||
default: 'smart_date',
|
||||
choices: D3_TIME_FORMAT_OPTIONS,
|
||||
description: D3_FORMAT_DOCS,
|
||||
},
|
||||
|
||||
markup_type: {
|
||||
type: 'SelectControl',
|
||||
label: t('Markup Type'),
|
||||
clearable: false,
|
||||
choices: formatSelectOptions(['markdown', 'html']),
|
||||
default: 'markdown',
|
||||
validators: [validateNonEmpty],
|
||||
description: t('Pick your favorite markup language'),
|
||||
},
|
||||
|
||||
code: {
|
||||
type: 'TextAreaControl',
|
||||
label: t('Code'),
|
||||
description: t('Put your code here'),
|
||||
mapStateToProps: state => ({
|
||||
language:
|
||||
state.controls && state.controls.markup_type
|
||||
? state.controls.markup_type.value
|
||||
: 'markdown',
|
||||
}),
|
||||
default: '',
|
||||
},
|
||||
|
||||
pandas_aggfunc: {
|
||||
type: 'SelectControl',
|
||||
label: t('Aggregation function'),
|
||||
clearable: false,
|
||||
choices: formatSelectOptions(['sum', 'mean', 'min', 'max', 'std', 'var']),
|
||||
default: 'sum',
|
||||
description: t(
|
||||
'Aggregate function to apply when pivoting and ' +
|
||||
'computing the total rows and columns',
|
||||
),
|
||||
},
|
||||
|
||||
table_filter: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Emit Filter Events'),
|
||||
renderTrigger: true,
|
||||
default: false,
|
||||
description: t('Whether to apply filter when items are clicked'),
|
||||
},
|
||||
|
||||
show_values: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Show Values'),
|
||||
renderTrigger: true,
|
||||
default: false,
|
||||
description: t('Whether to display the numerical values within the cells'),
|
||||
},
|
||||
|
||||
log_scale: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Log Scale'),
|
||||
default: false,
|
||||
renderTrigger: true,
|
||||
description: t('Use a log scale'),
|
||||
},
|
||||
|
||||
contribution: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Contribution'),
|
||||
default: false,
|
||||
description: t('Compute the contribution to the total'),
|
||||
},
|
||||
|
||||
comparison_type: {
|
||||
type: 'SelectControl',
|
||||
label: t('Calculation type'),
|
||||
default: 'values',
|
||||
choices: [
|
||||
['values', 'Actual Values'],
|
||||
['absolute', 'Absolute difference'],
|
||||
['percentage', 'Percentage change'],
|
||||
['ratio', 'Ratio'],
|
||||
],
|
||||
description: t(
|
||||
'How to display time shifts: as individual lines; as the ' +
|
||||
'absolute difference between the main time series and each time shift; ' +
|
||||
'as the percentage change; or as the ratio between series and time shifts.',
|
||||
),
|
||||
},
|
||||
|
||||
mapbox_label: {
|
||||
type: 'SelectControl',
|
||||
multi: true,
|
||||
label: t('label'),
|
||||
default: [],
|
||||
description: t(
|
||||
'`count` is COUNT(*) if a group by is used. ' +
|
||||
'Numerical columns will be aggregated with the aggregator. ' +
|
||||
'Non-numerical columns will be used to label points. ' +
|
||||
'Leave empty to get a count of points in each cluster.',
|
||||
),
|
||||
mapStateToProps: state => ({
|
||||
choices: columnChoices(state.datasource),
|
||||
}),
|
||||
},
|
||||
|
||||
mapbox_style: {
|
||||
type: 'SelectControl',
|
||||
label: t('Map Style'),
|
||||
clearable: false,
|
||||
renderTrigger: true,
|
||||
choices: [
|
||||
['mapbox://styles/mapbox/streets-v9', 'Streets'],
|
||||
['mapbox://styles/mapbox/dark-v9', 'Dark'],
|
||||
['mapbox://styles/mapbox/light-v9', 'Light'],
|
||||
['mapbox://styles/mapbox/satellite-streets-v9', 'Satellite Streets'],
|
||||
['mapbox://styles/mapbox/satellite-v9', 'Satellite'],
|
||||
['mapbox://styles/mapbox/outdoors-v9', 'Outdoors'],
|
||||
],
|
||||
default: 'mapbox://styles/mapbox/light-v9',
|
||||
description: t('Base layer map style'),
|
||||
},
|
||||
|
||||
global_opacity: {
|
||||
type: 'TextControl',
|
||||
label: t('Opacity'),
|
||||
default: 1,
|
||||
isFloat: true,
|
||||
description: t(
|
||||
'Opacity of all clusters, points, and labels. Between 0 and 1.',
|
||||
),
|
||||
},
|
||||
|
||||
viewport_zoom: {
|
||||
type: 'TextControl',
|
||||
label: t('Zoom'),
|
||||
renderTrigger: true,
|
||||
isFloat: true,
|
||||
default: 11,
|
||||
description: t('Zoom level of the map'),
|
||||
places: 8,
|
||||
// Viewport zoom shouldn't prompt user to re-run query
|
||||
dontRefreshOnChange: true,
|
||||
},
|
||||
|
||||
color: {
|
||||
type: 'ColorPickerControl',
|
||||
label: t('Color'),
|
||||
default: PRIMARY_COLOR,
|
||||
description: t('Pick a color'),
|
||||
},
|
||||
|
||||
annotation_layers: {
|
||||
type: 'AnnotationLayerControl',
|
||||
label: '',
|
||||
default: [],
|
||||
description: 'Annotation Layers',
|
||||
renderTrigger: true,
|
||||
tabOverride: 'data',
|
||||
},
|
||||
|
||||
adhoc_filters: {
|
||||
type: 'AdhocFilterControl',
|
||||
label: t('Filters'),
|
||||
|
@ -868,34 +484,6 @@ export const controls = {
|
|||
provideFormDataToProps: true,
|
||||
},
|
||||
|
||||
slice_id: {
|
||||
type: 'HiddenControl',
|
||||
label: t('Chart ID'),
|
||||
hidden: true,
|
||||
description: t('The id of the active chart'),
|
||||
},
|
||||
|
||||
cache_timeout: {
|
||||
type: 'HiddenControl',
|
||||
label: t('Cache Timeout (seconds)'),
|
||||
hidden: true,
|
||||
description: t('The number of seconds before expiring the cache'),
|
||||
},
|
||||
|
||||
url_params: {
|
||||
type: 'HiddenControl',
|
||||
label: t('URL Parameters'),
|
||||
hidden: true,
|
||||
description: t('Extra parameters for use in jinja templated queries'),
|
||||
},
|
||||
|
||||
time_range_endpoints: {
|
||||
type: 'HiddenControl',
|
||||
label: t('Time range endpoints'),
|
||||
hidden: true,
|
||||
description: t('Time range endpoints (SIP-15)'),
|
||||
},
|
||||
|
||||
color_scheme: {
|
||||
type: 'ColorSchemeControl',
|
||||
label: t('Color Scheme'),
|
||||
|
@ -916,29 +504,5 @@ export const controls = {
|
|||
colorScheme: state.form_data.color_scheme,
|
||||
}),
|
||||
},
|
||||
|
||||
column_collection: {
|
||||
type: 'CollectionControl',
|
||||
label: t('Time Series Columns'),
|
||||
validators: [validateNonEmpty],
|
||||
controlName: 'TimeSeriesColumnControl',
|
||||
},
|
||||
|
||||
filter_configs: {
|
||||
type: 'CollectionControl',
|
||||
label: 'Filters',
|
||||
description: t('Filter configuration for the filter box'),
|
||||
validators: [],
|
||||
controlName: 'FilterBoxItemControl',
|
||||
mapStateToProps: ({ datasource }) => ({ datasource }),
|
||||
},
|
||||
|
||||
normalized: {
|
||||
type: 'CheckboxControl',
|
||||
label: t('Normalized'),
|
||||
renderTrigger: true,
|
||||
description: t('Whether to normalize the histogram'),
|
||||
default: false,
|
||||
},
|
||||
};
|
||||
export default controls;
|
||||
|
|
Loading…
Reference in New Issue