blob: 621f6105dc21913e725282e90514df33ebab4108 [file] [log] [blame]
import { formatSelectOptionsForRange, formatSelectOptions } from '../../modules/utils';
import visTypes from './visTypes';
import * as v from '../validators';
const D3_FORMAT_DOCS = 'D3 format syntax: https://github.com/d3/d3-format';
// input choices & options
const D3_TIME_FORMAT_OPTIONS = [
['.3s', '.3s | 12.3k'],
['.3%', '.3% | 1234543.210%'],
['.4r', '.4r | 12350'],
['.3f', '.3f | 12345.432'],
['+,', '+, | +12,345.4321'],
['$,.2f', '$,.2f | $12,345.43'],
];
const ROW_LIMIT_OPTIONS = [10, 50, 100, 250, 500, 1000, 5000, 10000, 50000];
const SERIES_LIMITS = [0, 5, 10, 25, 50, 100, 500];
const TIME_STAMP_OPTIONS = [
['smart_date', 'Adaptative formating'],
['%m/%d/%Y', '%m/%d/%Y | 01/14/2019'],
['%Y-%m-%d', '%Y-%m-%d | 2019-01-14'],
['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S | 2019-01-14 01:32:10'],
['%H:%M:%S', '%H:%M:%S | 01:32:10'],
];
const MAP_DATASOURCE_TYPE_TO_EDIT_URL = {
table: '/tablemodelview/edit',
druid: '/druiddatasourcemodelview/edit',
};
export const fields = {
datasource: {
type: 'SelectField',
label: 'Datasource',
clearable: false,
default: null,
mapStateToProps: (state) => ({
choices: state.datasources || [],
editUrl: MAP_DATASOURCE_TYPE_TO_EDIT_URL[state.datasource_type],
}),
description: '',
},
viz_type: {
type: 'SelectField',
label: 'Visualization Type',
clearable: false,
default: 'table',
choices: Object.keys(visTypes).map(vt => [
vt,
visTypes[vt].label,
`/static/assets/images/viz_thumbnails/${vt}.png`,
]),
description: 'The type of visualization to display',
},
metrics: {
type: 'SelectField',
multi: true,
label: 'Metrics',
validators: [v.nonEmpty],
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.metrics_combo : [],
}),
default: [],
description: 'One or many metrics to display',
},
order_by_cols: {
type: 'SelectField',
multi: true,
label: 'Ordering',
default: [],
description: 'One or many metrics to display',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.order_by_choices : [],
}),
},
metric: {
type: 'SelectField',
label: 'Metric',
default: null,
description: 'Choose the metric',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.metrics_combo : [],
}),
},
metric_2: {
type: 'SelectField',
label: 'Right Axis Metric',
choices: [],
default: [],
description: 'Choose a metric for right axis',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.metrics_combo : [],
}),
},
stacked_style: {
type: 'SelectField',
label: 'Stacked Style',
choices: [
['stack', 'stack'],
['stream', 'stream'],
['expand', 'expand'],
],
default: 'stack',
description: '',
},
linear_color_scheme: {
type: 'SelectField',
label: 'Linear Color Scheme',
choices: [
['fire', 'fire'],
['blue_white_yellow', 'blue/white/yellow'],
['white_black', 'white/black'],
['black_white', 'black/white'],
],
default: 'blue_white_yellow',
description: '',
},
normalize_across: {
type: 'SelectField',
label: 'Normalize Across',
choices: [
['heatmap', 'heatmap'],
['x', 'x'],
['y', 'y'],
],
default: 'heatmap',
description: 'Color will be rendered based on a ratio ' +
'of the cell against the sum of across this ' +
'criteria',
},
horizon_color_scale: {
type: 'SelectField',
label: 'Horizon Color Scale',
choices: [
['series', 'series'],
['overall', 'overall'],
['change', 'change'],
],
default: 'series',
description: 'Defines how the color are attributed.',
},
canvas_image_rendering: {
type: 'SelectField',
label: 'Rendering',
choices: [
['pixelated', 'pixelated (Sharp)'],
['auto', 'auto (Smooth)'],
],
default: 'pixelated',
description: 'image-rendering CSS attribute of the canvas object that ' +
'defines how the browser scales up the image',
},
xscale_interval: {
type: 'SelectField',
label: 'XScale Interval',
choices: formatSelectOptionsForRange(1, 50),
default: '1',
description: 'Number of steps to take between ticks when ' +
'displaying the X scale',
},
yscale_interval: {
type: 'SelectField',
label: 'YScale Interval',
choices: formatSelectOptionsForRange(1, 50),
default: null,
description: 'Number of steps to take between ticks when ' +
'displaying the Y scale',
},
bar_stacked: {
type: 'CheckboxField',
label: 'Stacked Bars',
default: false,
description: null,
},
show_markers: {
type: 'CheckboxField',
label: 'Show Markers',
default: false,
description: 'Show data points as circle markers on the lines',
},
show_bar_value: {
type: 'CheckboxField',
label: 'Bar Values',
default: false,
description: 'Show the value on top of the bar',
},
order_bars: {
type: 'CheckboxField',
label: 'Sort Bars',
default: false,
description: 'Sort bars by x labels.',
},
show_controls: {
type: 'CheckboxField',
label: 'Extra Controls',
default: false,
description: 'Whether to show extra controls or not. Extra controls ' +
'include things like making mulitBar charts stacked ' +
'or side by side.',
},
reduce_x_ticks: {
type: 'CheckboxField',
label: 'Reduce X ticks',
default: false,
description: 'Reduces the number of X axis ticks to be rendered. ' +
'If true, the x axis wont overflow and labels may be ' +
'missing. If false, a minimum width will be applied ' +
'to columns and the width may overflow into an ' +
'horizontal scroll.',
},
include_series: {
type: 'CheckboxField',
label: 'Include Series',
default: false,
description: 'Include series name as an axis',
},
secondary_metric: {
type: 'SelectField',
label: 'Color Metric',
default: null,
description: 'A metric to use for color',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.metrics_combo : [],
}),
},
country_fieldtype: {
type: 'SelectField',
label: 'Country Field Type',
default: 'cca2',
choices: [
['name', 'Full name'],
['cioc', 'code International Olympic Committee (cioc)'],
['cca2', 'code ISO 3166-1 alpha-2 (cca2)'],
['cca3', 'code ISO 3166-1 alpha-3 (cca3)'],
],
description: 'The country code standard that Superset should expect ' +
'to find in the [country] column',
},
groupby: {
type: 'SelectField',
multi: true,
label: 'Group by',
default: [],
description: 'One or many fields to group by',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.gb_cols : [],
}),
},
columns: {
type: 'SelectField',
multi: true,
label: 'Columns',
choices: [],
default: [],
description: 'One or many fields to pivot as columns',
},
all_columns: {
type: 'SelectField',
multi: true,
label: 'Columns',
default: [],
description: 'Columns to display',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.all_cols : [],
}),
},
all_columns_x: {
type: 'SelectField',
label: 'X',
default: null,
description: 'Columns to display',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.all_cols : [],
}),
},
all_columns_y: {
type: 'SelectField',
label: 'Y',
default: null,
description: 'Columns to display',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.all_cols : [],
}),
},
druid_time_origin: {
type: 'SelectField',
freeForm: true,
label: 'Origin',
choices: [
['', 'default'],
['now', 'now'],
],
default: null,
description: 'Defines the origin where time buckets start, ' +
'accepts natural dates as in `now`, `sunday` or `1970-01-01`',
},
bottom_margin: {
type: 'SelectField',
freeForm: true,
label: 'Bottom Margin',
choices: formatSelectOptions(['auto', 50, 75, 100, 125, 150, 200]),
default: 'auto',
description: 'Bottom marging, in pixels, allowing for more room for axis labels',
},
granularity: {
type: 'SelectField',
freeForm: true,
label: 'Time Granularity',
default: 'one day',
choices: formatSelectOptions([
'all',
'5 seconds',
'30 seconds',
'1 minute',
'5 minutes',
'1 hour',
'6 hour',
'1 day',
'7 days',
'week',
'week_starting_sunday',
'week_ending_saturday',
'month',
]),
description: 'The time granularity for the visualization. Note that you ' +
'can type and use simple natural language as in `10 seconds`, ' +
'`1 day` or `56 weeks`',
},
domain_granularity: {
type: 'SelectField',
label: 'Domain',
default: 'month',
choices: formatSelectOptions(['hour', 'day', 'week', 'month', 'year']),
description: 'The time unit used for the grouping of blocks',
},
subdomain_granularity: {
type: 'SelectField',
label: 'Subdomain',
default: 'day',
choices: formatSelectOptions(['min', 'hour', 'day', 'week', 'month']),
description: 'The time unit for each block. Should be a smaller unit than ' +
'domain_granularity. Should be larger or equal to Time Grain',
},
link_length: {
type: 'SelectField',
freeForm: true,
label: 'Link Length',
default: '200',
choices: formatSelectOptions(['10', '25', '50', '75', '100', '150', '200', '250']),
description: 'Link length in the force layout',
},
charge: {
type: 'SelectField',
freeForm: true,
label: 'Charge',
default: '-500',
choices: formatSelectOptions([
'-50',
'-75',
'-100',
'-150',
'-200',
'-250',
'-500',
'-1000',
'-2500',
'-5000',
]),
description: 'Charge in the force layout',
},
granularity_sqla: {
type: 'SelectField',
label: 'Time Column',
default: null,
description: 'The time column for the visualization. Note that you ' +
'can define arbitrary expression that return a DATETIME ' +
'column in the table or. Also note that the ' +
'filter below is applied against this column or ' +
'expression',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.all_cols : [],
}),
},
time_grain_sqla: {
type: 'SelectField',
label: 'Time Grain',
default: 'Time Column',
description: 'The time granularity for the visualization. This ' +
'applies a date transformation to alter ' +
'your time column and defines a new time granularity. ' +
'The options here are defined on a per database ' +
'engine basis in the Superset source code.',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.time_grain_sqla : [],
}),
},
resample_rule: {
type: 'SelectField',
freeForm: true,
label: 'Resample Rule',
default: null,
choices: formatSelectOptions(['', '1T', '1H', '1D', '7D', '1M', '1AS']),
description: 'Pandas resample rule',
},
resample_how: {
type: 'SelectField',
freeForm: true,
label: 'Resample How',
default: null,
choices: formatSelectOptions(['', 'mean', 'sum', 'median']),
description: 'Pandas resample how',
},
resample_fillmethod: {
type: 'SelectField',
freeForm: true,
label: 'Resample Fill Method',
default: null,
choices: formatSelectOptions(['', 'ffill', 'bfill']),
description: 'Pandas resample fill method',
},
since: {
type: 'SelectField',
freeForm: true,
label: 'Since',
default: '7 days ago',
choices: formatSelectOptions([
'1 hour ago',
'12 hours ago',
'1 day ago',
'7 days ago',
'28 days ago',
'90 days ago',
'1 year ago',
'100 year ago',
]),
description: 'Timestamp from filter. This supports free form typing and ' +
'natural language as in `1 day ago`, `28 days` or `3 years`',
},
until: {
type: 'SelectField',
freeForm: true,
label: 'Until',
default: 'now',
choices: formatSelectOptions([
'now',
'1 day ago',
'7 days ago',
'28 days ago',
'90 days ago',
'1 year ago',
]),
},
max_bubble_size: {
type: 'SelectField',
freeForm: true,
label: 'Max Bubble Size',
default: '25',
choices: formatSelectOptions(['5', '10', '15', '25', '50', '75', '100']),
},
whisker_options: {
type: 'SelectField',
freeForm: true,
label: 'Whisker/outlier options',
default: 'Tukey',
description: 'Determines how whiskers and outliers are calculated.',
choices: formatSelectOptions([
'Tukey',
'Min/max (no outliers)',
'2/98 percentiles',
'9/91 percentiles',
]),
},
treemap_ratio: {
type: 'TextField',
label: 'Ratio',
isFloat: true,
default: 0.5 * (1 + Math.sqrt(5)), // d3 default, golden ratio
description: 'Target aspect ratio for treemap tiles.',
},
number_format: {
type: 'SelectField',
freeForm: true,
label: 'Number format',
default: D3_TIME_FORMAT_OPTIONS[0],
choices: D3_TIME_FORMAT_OPTIONS,
description: D3_FORMAT_DOCS,
},
row_limit: {
type: 'SelectField',
freeForm: true,
label: 'Row limit',
default: null,
choices: formatSelectOptions(ROW_LIMIT_OPTIONS),
},
limit: {
type: 'SelectField',
freeForm: true,
label: 'Series limit',
choices: formatSelectOptions(SERIES_LIMITS),
default: 50,
description: 'Limits the number of time series that get displayed',
},
timeseries_limit_metric: {
type: 'SelectField',
label: 'Sort By',
default: null,
description: 'Metric used to define the top series',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.metrics_combo : [],
}),
},
rolling_type: {
type: 'SelectField',
label: 'Rolling',
default: 'None',
choices: formatSelectOptions(['None', 'mean', 'sum', 'std', 'cumsum']),
description: 'Defines a rolling window function to apply, works along ' +
'with the [Periods] text box',
},
rolling_periods: {
type: 'TextField',
label: 'Periods',
isInt: true,
description: 'Defines the size of the rolling window function, ' +
'relative to the time granularity selected',
},
series: {
type: 'SelectField',
label: 'Series',
default: null,
description: 'Defines the grouping of entities. ' +
'Each series is shown as a specific color on the chart and ' +
'has a legend toggle',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.gb_cols : [],
}),
},
entity: {
type: 'SelectField',
label: 'Entity',
default: null,
description: 'This define the element to be plotted on the chart',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.gb_cols : [],
}),
},
x: {
type: 'SelectField',
label: 'X Axis',
default: null,
description: 'Metric assigned to the [X] axis',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.gb_cols : [],
}),
},
y: {
type: 'SelectField',
label: 'Y Axis',
default: null,
description: 'Metric assigned to the [Y] axis',
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.metrics_combo : [],
}),
},
size: {
type: 'SelectField',
label: 'Bubble Size',
default: null,
mapStateToProps: (state) => ({
choices: (state.datasource) ? state.datasource.metrics_combo : [],
}),
},
url: {
type: 'TextField',
label: 'URL',
description: 'The URL, this field is templated, so you can integrate ' +
'{{ width }} and/or {{ height }} in your URL string.',
default: 'https: //www.youtube.com/embed/JkI5rg_VcQ4',
},
x_axis_label: {
type: 'TextField',
label: 'X Axis Label',
default: '',
},
y_axis_label: {
type: 'TextField',
label: 'Y Axis Label',
default: '',
},
where: {
type: 'TextField',
label: 'Custom WHERE clause',
default: '',
description: 'The text in this box gets included in your query\'s WHERE ' +
'clause, as an AND to other criteria. You can include ' +
'complex expression, parenthesis and anything else ' +
'supported by the backend it is directed towards.',
},
having: {
type: 'TextField',
label: 'Custom HAVING clause',
default: '',
description: 'The text in this box gets included in your query\'s HAVING ' +
'clause, as an AND to other criteria. You can include ' +
'complex expression, parenthesis and anything else ' +
'supported by the backend it is directed towards.',
},
compare_lag: {
type: 'TextField',
label: 'Comparison Period Lag',
isInt: true,
description: 'Based on granularity, number of time periods to compare against',
},
compare_suffix: {
type: 'TextField',
label: 'Comparison suffix',
description: 'Suffix to apply after the percentage display',
},
table_timestamp_format: {
type: 'SelectField',
freeForm: true,
label: 'Table Timestamp Format',
default: 'smart_date',
choices: TIME_STAMP_OPTIONS,
description: 'Timestamp Format',
},
series_height: {
type: 'SelectField',
freeForm: true,
label: 'Series Height',
default: '25',
choices: formatSelectOptions(['10', '25', '40', '50', '75', '100', '150', '200']),
description: 'Pixel height of each series',
},
page_length: {
type: 'SelectField',
freeForm: true,
label: 'Page Length',
default: 0,
choices: formatSelectOptions([0, 10, 25, 40, 50, 75, 100, 150, 200]),
description: 'Rows per page, 0 means no pagination',
},
x_axis_format: {
type: 'SelectField',
freeForm: true,
label: 'X axis format',
default: 'smart_date',
choices: TIME_STAMP_OPTIONS,
description: D3_FORMAT_DOCS,
},
y_axis_format: {
type: 'SelectField',
freeForm: true,
label: 'Y axis format',
default: '.3s',
choices: D3_TIME_FORMAT_OPTIONS,
description: D3_FORMAT_DOCS,
},
y_axis_2_format: {
type: 'SelectField',
freeForm: true,
label: 'Right axis format',
default: '.3s',
choices: D3_TIME_FORMAT_OPTIONS,
description: D3_FORMAT_DOCS,
},
markup_type: {
type: 'SelectField',
label: 'Markup Type',
choices: formatSelectOptions(['markdown', 'html']),
default: 'markdown',
description: 'Pick your favorite markup language',
},
rotation: {
type: 'SelectField',
label: 'Rotation',
choices: formatSelectOptions(['random', 'flat', 'square']),
default: 'random',
description: 'Rotation to apply to words in the cloud',
},
line_interpolation: {
type: 'SelectField',
label: 'Line Style',
choices: formatSelectOptions(['linear', 'basis', 'cardinal',
'monotone', 'step-before', 'step-after']),
default: 'linear',
description: 'Line interpolation as defined by d3.js',
},
pie_label_type: {
type: 'SelectField',
label: 'Label Type',
default: 'key',
choices: [
['key', 'Category Name'],
['value', 'Value'],
['percent', 'Percentage'],
],
description: 'What should be shown on the label?',
},
code: {
type: 'TextAreaField',
label: 'Code',
description: 'Put your code here',
default: '',
},
pandas_aggfunc: {
type: 'SelectField',
label: 'Aggregation function',
choices: formatSelectOptions([
'sum',
'mean',
'min',
'max',
'median',
'stdev',
'var',
]),
default: 'sum',
description: 'Aggregate function to apply when pivoting and ' +
'computing the total rows and columns',
},
size_from: {
type: 'TextField',
isInt: true,
label: 'Font Size From',
default: '20',
description: 'Font size for the smallest value in the list',
},
size_to: {
type: 'TextField',
isInt: true,
label: 'Font Size To',
default: '150',
description: 'Font size for the biggest value in the list',
},
show_brush: {
type: 'CheckboxField',
label: 'Range Filter',
default: false,
description: 'Whether to display the time range interactive selector',
},
date_filter: {
type: 'CheckboxField',
label: 'Date Filter',
default: false,
description: 'Whether to include a time filter',
},
show_datatable: {
type: 'CheckboxField',
label: 'Data Table',
default: false,
description: 'Whether to display the interactive data table',
},
include_search: {
type: 'CheckboxField',
label: 'Search Box',
default: false,
description: 'Whether to include a client side search box',
},
table_filter: {
type: 'CheckboxField',
label: 'Table Filter',
default: false,
description: 'Whether to apply filter when table cell is clicked',
},
show_bubbles: {
type: 'CheckboxField',
label: 'Show Bubbles',
default: false,
description: 'Whether to display bubbles on top of countries',
},
show_legend: {
type: 'CheckboxField',
label: 'Legend',
default: true,
description: 'Whether to display the legend (toggles)',
},
x_axis_showminmax: {
type: 'CheckboxField',
label: 'X bounds',
default: true,
description: 'Whether to display the min and max values of the X axis',
},
rich_tooltip: {
type: 'CheckboxField',
label: 'Rich Tooltip',
default: true,
description: 'The rich tooltip shows a list of all series for that ' +
'point in time',
},
y_axis_zero: {
type: 'CheckboxField',
label: 'Y Axis Zero',
default: false,
description: 'Force the Y axis to start at 0 instead of the minimum value',
},
y_log_scale: {
type: 'CheckboxField',
label: 'Y Log Scale',
default: false,
description: 'Use a log scale for the Y axis',
},
x_log_scale: {
type: 'CheckboxField',
label: 'X Log Scale',
default: false,
description: 'Use a log scale for the X axis',
},
donut: {
type: 'CheckboxField',
label: 'Donut',
default: false,
description: 'Do you want a donut or a pie?',
},
labels_outside: {
type: 'CheckboxField',
label: 'Put labels outside',
default: true,
description: 'Put the labels outside the pie?',
},
contribution: {
type: 'CheckboxField',
label: 'Contribution',
default: false,
description: 'Compute the contribution to the total',
},
num_period_compare: {
type: 'TextField',
label: 'Period Ratio',
default: '',
isInt: true,
description: '[integer] Number of period to compare against, ' +
'this is relative to the granularity selected',
},
period_ratio_type: {
type: 'SelectField',
label: 'Period Ratio Type',
default: 'growth',
choices: formatSelectOptions(['factor', 'growth', 'value']),
description: '`factor` means (new/previous), `growth` is ' +
'((new/previous) - 1), `value` is (new-previous)',
},
time_compare: {
type: 'TextField',
label: 'Time Shift',
isInt: true,
default: null,
description: 'Overlay a timeseries from a ' +
'relative time period. Expects relative time delta ' +
'in natural language (example: 24 hours, 7 days, ' +
'56 weeks, 365 days',
},
subheader: {
type: 'TextField',
label: 'Subheader',
description: 'Description text that shows up below your Big Number',
},
mapbox_label: {
type: 'SelectField',
multi: true,
label: 'label',
default: [],
description: '`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: (state.datasource) ? state.datasource.all_cols : [],
}),
},
mapbox_style: {
type: 'SelectField',
label: 'Map Style',
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/streets-v9',
description: 'Base layer map style',
},
clustering_radius: {
type: 'SelectField',
freeForm: true,
label: 'Clustering Radius',
default: '60',
choices: formatSelectOptions([
'0',
'20',
'40',
'60',
'80',
'100',
'200',
'500',
'1000',
]),
description: 'The radius (in pixels) the algorithm uses to define a cluster. ' +
'Choose 0 to turn off clustering, but beware that a large ' +
'number of points (>1000) will cause lag.',
},
point_radius: {
type: 'SelectField',
label: 'Point Radius',
default: null,
description: 'The radius of individual points (ones that are not in a cluster). ' +
'Either a numerical column or `Auto`, which scales the point based ' +
'on the largest cluster',
mapStateToProps: (state) => ({
choices: state.fields.point_radius.choices,
}),
},
point_radius_unit: {
type: 'SelectField',
label: 'Point Radius Unit',
default: 'Pixels',
choices: formatSelectOptions(['Pixels', 'Miles', 'Kilometers']),
description: 'The unit of measure for the specified point radius',
},
global_opacity: {
type: 'TextField',
label: 'Opacity',
default: 1,
isFloat: true,
description: 'Opacity of all clusters, points, and labels. ' +
'Between 0 and 1.',
},
viewport_zoom: {
type: 'TextField',
label: 'Zoom',
isFloat: true,
default: 11,
description: 'Zoom level of the map',
places: 8,
},
viewport_latitude: {
type: 'TextField',
label: 'Default latitude',
default: 37.772123,
isFloat: true,
description: 'Latitude of default viewport',
places: 8,
},
viewport_longitude: {
type: 'TextField',
label: 'Default longitude',
default: -122.405293,
isFloat: true,
description: 'Longitude of default viewport',
places: 8,
},
render_while_dragging: {
type: 'CheckboxField',
label: 'Live render',
default: true,
description: 'Points and clusters will update as viewport is being changed',
},
mapbox_color: {
type: 'SelectField',
freeForm: true,
label: 'RGB Color',
default: 'rgb(0, 122, 135)',
choices: [
['rgb(0, 139, 139)', 'Dark Cyan'],
['rgb(128, 0, 128)', 'Purple'],
['rgb(255, 215, 0)', 'Gold'],
['rgb(69, 69, 69)', 'Dim Gray'],
['rgb(220, 20, 60)', 'Crimson'],
['rgb(34, 139, 34)', 'Forest Green'],
],
description: 'The color for points and clusters in RGB',
},
ranges: {
type: 'TextField',
label: 'Ranges',
default: '',
description: 'Ranges to highlight with shading',
},
range_labels: {
type: 'TextField',
label: 'Range labels',
default: '',
description: 'Labels for the ranges',
},
markers: {
type: 'TextField',
label: 'Markers',
default: '',
description: 'List of values to mark with triangles',
},
marker_labels: {
type: 'TextField',
label: 'Marker labels',
default: '',
description: 'Labels for the markers',
},
marker_lines: {
type: 'TextField',
label: 'Marker lines',
default: '',
description: 'List of values to mark with lines',
},
marker_line_labels: {
type: 'TextField',
label: 'Marker line labels',
default: '',
description: 'Labels for the marker lines',
},
};
export default fields;
// Control Panel fields that re-render chart without need for 'Query button'
export const autoQueryFields = [
'datasource',
'viz_type',
'bar_stacked',
'show_markers',
'show_bar_value',
'order_bars',
'show_controls',
'reduce_x_ticks',
'include_series',
'pie_label_type',
'show_brush',
'include_search',
'show_bubbles',
'show_legend',
'x_axis_showminmax',
'rich_tooltip',
'y_axis_zero',
'y_log_scale',
'x_log_scale',
'donut',
'labels_outside',
'contribution',
'size',
'row_limit',
'max_bubble_size',
];