chore: add shared plugin controls utilities #389
Changes from 1 commit
62c48b5
1386bef
90695fe
931fac4
87d04f3
c92e1f0
0ba89ab
b9b35e6
d5e70aa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/** | ||
* 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. | ||
*/ | ||
|
||
// D3 specific formatting config | ||
|
||
export const D3_FORMAT_DOCS = 'D3 format syntax: https://github.com/d3/d3-format'; | ||
|
||
// input choices & options | ||
export const D3_FORMAT_OPTIONS = [ | ||
['SMART_NUMBER', 'Adaptative formating'], | ||
[' ', 'Original value'], | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This has been updated to |
||
[',d', ',d (12345.432 => 12,345)'], | ||
['.1s', '.1s (12345.432 => 10k)'], | ||
['.3s', '.3s (12345.432 => 12.3k)'], | ||
[',.1%', ',.1% (12345.432 => 1,234,543.2%)'], | ||
['.3%', '.3% (12345.432 => 1234543.200%)'], | ||
['.4r', '.4r (12345.432 => 12350)'], | ||
[',.3f', ',.3f (12345.432 => 12,345.432)'], | ||
['+,', '+, (12345.432 => +12,345.432)'], | ||
['$,.2f', '$,.2f (12345.432 => $12,345.43)'], | ||
['DURATION', 'Duration in ms (66000 => 1m 6s)'], | ||
['DURATION_SUB', 'Duration in ms (100.40008 => 100ms 400碌s 80ns)'], | ||
]; | ||
|
||
export const D3_TIME_FORMAT_OPTIONS = [ | ||
['smart_date', 'Adaptative formating'], | ||
['%d/%m/%Y', '%d/%m/%Y | 14/01/2019'], | ||
['%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'], | ||
['%d-%m-%Y %H:%M:%S', '%Y-%m-%d %H:%M:%S | 14-01-2019 01:32:10'], | ||
['%H:%M:%S', '%H:%M:%S | 01:32:10'], | ||
]; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,299 @@ | ||
/** | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this could be a part of @superset-ui/legacy-preset-chart-nvd3 since it's written for (and only used by) that one plugin. Same applies to the DeckGL equivalent - those shared controls could live with that plugin. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh thanks for the pointer, if it's only used there then that's way better. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agree with @rusackas |
||
* 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 NVD3 viz plugin repo. | ||
// It is not recommended to use these for third-party plugins. | ||
|
||
import { t } from '@superset-ui/translation'; | ||
import { formatSelectOptions } from './selectOptions'; | ||
import { D3_TIME_FORMAT_OPTIONS, D3_FORMAT_DOCS, D3_FORMAT_OPTIONS } from './D3Formatting'; | ||
|
||
/* | ||
Plugins in question: | ||
|
||
AreaChartPlugin, | ||
BarChartPlugin, | ||
BubbleChartPlugin, | ||
BulletChartPlugin, | ||
CompareChartPlugin, | ||
DistBarChartPlugin, | ||
DualLineChartPlugin, | ||
LineChartPlugin, | ||
LineMultiChartPlugin, | ||
PieChartPlugin, | ||
TimePivotChartPlugin, | ||
*/ | ||
|
||
export const yAxis2Format = { | ||
name: 'y_axis_2_format', | ||
config: { | ||
type: 'SelectControl', | ||
freeForm: true, | ||
label: t('Right Axis Format'), | ||
default: 'SMART_NUMBER', | ||
choices: D3_FORMAT_OPTIONS, | ||
description: D3_FORMAT_DOCS, | ||
}, | ||
}; | ||
|
||
export const showMarkers = { | ||
name: 'show_markers', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('Show Markers'), | ||
renderTrigger: true, | ||
default: false, | ||
description: t('Show data points as circle markers on the lines'), | ||
}, | ||
}; | ||
|
||
export const leftMargin = { | ||
name: 'left_margin', | ||
config: { | ||
type: 'SelectControl', | ||
freeForm: true, | ||
clearable: false, | ||
label: t('Left Margin'), | ||
choices: formatSelectOptions(['auto', 50, 75, 100, 125, 150, 200]), | ||
default: 'auto', | ||
renderTrigger: true, | ||
description: t('Left margin, in pixels, allowing for more room for axis labels'), | ||
}, | ||
}; | ||
|
||
export const yAxisShowMinmax = { | ||
name: 'y_axis_showminmax', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('Y bounds'), | ||
renderTrigger: true, | ||
default: false, | ||
description: t('Whether to display the min and max values of the Y-axis'), | ||
}, | ||
}; | ||
|
||
export const lineInterpolation = { | ||
name: 'line_interpolation', | ||
config: { | ||
type: 'SelectControl', | ||
label: t('Line Style'), | ||
renderTrigger: true, | ||
choices: formatSelectOptions([ | ||
'linear', | ||
'basis', | ||
'cardinal', | ||
'monotone', | ||
'step-before', | ||
'step-after', | ||
]), | ||
default: 'linear', | ||
description: t('Line interpolation as defined by d3.js'), | ||
}, | ||
}; | ||
|
||
export const showBrush = { | ||
name: 'show_brush', | ||
config: { | ||
type: 'SelectControl', | ||
label: t('Show Range Filter'), | ||
renderTrigger: true, | ||
clearable: false, | ||
default: 'auto', | ||
choices: [ | ||
['yes', 'Yes'], | ||
['no', 'No'], | ||
['auto', 'Auto'], | ||
], | ||
description: t('Whether to display the time range interactive selector'), | ||
}, | ||
}; | ||
|
||
export const showLegend = { | ||
name: 'show_legend', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('Legend'), | ||
renderTrigger: true, | ||
default: true, | ||
description: t('Whether to display the legend (toggles)'), | ||
}, | ||
}; | ||
|
||
export const showControls = { | ||
name: 'show_controls', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('Extra Controls'), | ||
renderTrigger: true, | ||
default: false, | ||
description: t( | ||
'Whether to show extra controls or not. Extra controls ' + | ||
'include things like making mulitBar charts stacked ' + | ||
'or side by side.', | ||
), | ||
}, | ||
}; | ||
|
||
export const xAxisLabel = { | ||
name: 'x_axis_label', | ||
config: { | ||
type: 'TextControl', | ||
label: t('X Axis Label'), | ||
renderTrigger: true, | ||
default: '', | ||
}, | ||
}; | ||
|
||
export const bottomMargin = { | ||
name: 'bottom_margin', | ||
config: { | ||
type: 'SelectControl', | ||
clearable: false, | ||
freeForm: true, | ||
label: t('Bottom Margin'), | ||
choices: formatSelectOptions(['auto', 50, 75, 100, 125, 150, 200]), | ||
default: 'auto', | ||
renderTrigger: true, | ||
description: t('Bottom margin, in pixels, allowing for more room for axis labels'), | ||
}, | ||
}; | ||
|
||
export const xTicksLayout = { | ||
name: 'x_ticks_layout', | ||
config: { | ||
type: 'SelectControl', | ||
label: t('X Tick Layout'), | ||
choices: formatSelectOptions(['auto', 'flat', '45掳', 'staggered']), | ||
default: 'auto', | ||
clearable: false, | ||
renderTrigger: true, | ||
description: t('The way the ticks are laid out on the X-axis'), | ||
}, | ||
}; | ||
|
||
export const xAxisFormat = { | ||
name: 'x_axis_format', | ||
config: { | ||
type: 'SelectControl', | ||
freeForm: true, | ||
label: t('X Axis Format'), | ||
renderTrigger: true, | ||
choices: D3_TIME_FORMAT_OPTIONS, | ||
default: 'smart_date', | ||
description: D3_FORMAT_DOCS, | ||
}, | ||
}; | ||
|
||
export const yLogScale = { | ||
name: 'y_log_scale', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('Y Log Scale'), | ||
default: false, | ||
renderTrigger: true, | ||
description: t('Use a log scale for the Y-axis'), | ||
}, | ||
}; | ||
|
||
export const yAxisBounds = { | ||
name: 'y_axis_bounds', | ||
config: { | ||
type: 'BoundsControl', | ||
label: t('Y Axis Bounds'), | ||
renderTrigger: true, | ||
default: [null, null], | ||
description: t( | ||
'Bounds for the Y-axis. When left empty, the bounds are ' + | ||
'dynamically defined based on the min/max of the data. Note that ' + | ||
"this feature will only expand the axis range. It won't " + | ||
"narrow the data's extent.", | ||
), | ||
}, | ||
}; | ||
|
||
export const xAxisShowMinmax = { | ||
name: 'x_axis_showminmax', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('X bounds'), | ||
renderTrigger: true, | ||
default: false, | ||
description: t('Whether to display the min and max values of the X-axis'), | ||
}, | ||
}; | ||
|
||
export const richTooltip = { | ||
name: 'rich_tooltip', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('Rich Tooltip'), | ||
renderTrigger: true, | ||
default: true, | ||
description: t('The rich tooltip shows a list of all series for that point in time'), | ||
}, | ||
}; | ||
|
||
export const showBarValue = { | ||
name: 'show_bar_value', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('Bar Values'), | ||
default: false, | ||
renderTrigger: true, | ||
description: t('Show the value on top of the bar'), | ||
}, | ||
}; | ||
|
||
export const barStacked = { | ||
name: 'bar_stacked', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('Stacked Bars'), | ||
renderTrigger: true, | ||
default: false, | ||
description: null, | ||
}, | ||
}; | ||
|
||
export const reduceXTicks = { | ||
name: 'reduce_x_ticks', | ||
config: { | ||
type: 'CheckboxControl', | ||
label: t('Reduce X ticks'), | ||
renderTrigger: true, | ||
default: false, | ||
description: t( | ||
'Reduces the number of X-axis ticks to be rendered. ' + | ||
'If true, the x-axis will not 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.', | ||
), | ||
}, | ||
}; | ||
|
||
export const yAxisLabel = { | ||
name: 'y_axis_label', | ||
config: { | ||
type: 'TextControl', | ||
label: t('Y Axis Label'), | ||
renderTrigger: true, | ||
default: '', | ||
}, | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These should be
peerDependencies
. (translation
needs to be a singleton.validator
not necessariliy, but I have been making all@superset-ui/xxx
peerDependencies
by convention to avoid having multiple copies of some singleton by mistake)