@pie-lib/charting 5.1.0 → 5.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/lib/axes.js +37 -61
- package/lib/axes.js.map +1 -1
- package/lib/bars/bar.js +19 -30
- package/lib/bars/bar.js.map +1 -1
- package/lib/bars/common/bars.js +30 -46
- package/lib/bars/common/bars.js.map +1 -1
- package/lib/bars/histogram.js +19 -30
- package/lib/bars/histogram.js.map +1 -1
- package/lib/chart-setup.js +65 -33
- package/lib/chart-setup.js.map +1 -1
- package/lib/chart-type.js +2 -2
- package/lib/chart-type.js.map +1 -1
- package/lib/chart-types.js +2 -2
- package/lib/chart-types.js.map +1 -1
- package/lib/chart.js +45 -70
- package/lib/chart.js.map +1 -1
- package/lib/common/drag-handle.js +26 -41
- package/lib/common/drag-handle.js.map +1 -1
- package/lib/common/styles.js +7 -5
- package/lib/common/styles.js.map +1 -1
- package/lib/grid.js +19 -31
- package/lib/grid.js.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/line/common/drag-handle.js +24 -38
- package/lib/line/common/drag-handle.js.map +1 -1
- package/lib/line/common/line.js +40 -71
- package/lib/line/common/line.js.map +1 -1
- package/lib/line/line-cross.js +25 -39
- package/lib/line/line-cross.js.map +1 -1
- package/lib/line/line-dot.js +24 -38
- package/lib/line/line-dot.js.map +1 -1
- package/lib/mark-label.js +13 -21
- package/lib/mark-label.js.map +1 -1
- package/lib/plot/common/plot.js +30 -46
- package/lib/plot/common/plot.js.map +1 -1
- package/lib/plot/dot.js +20 -31
- package/lib/plot/dot.js.map +1 -1
- package/lib/plot/line.js +21 -32
- package/lib/plot/line.js.map +1 -1
- package/lib/tool-menu.js +19 -32
- package/lib/tool-menu.js.map +1 -1
- package/lib/utils.js +10 -75
- package/lib/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/axes.jsx +4 -2
- package/src/bars/common/bars.jsx +1 -1
- package/src/chart-setup.jsx +48 -25
- package/src/chart-type.js +21 -23
- package/src/chart.jsx +7 -21
- package/src/line/common/line.jsx +1 -1
- package/src/mark-label.jsx +3 -1
- package/src/plot/common/plot.jsx +1 -1
- package/src/utils.js +4 -75
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.js"],"names":["tickCount","utils","bounds","point","bandKey","d","index","label","dataToXBand","scaleX","data","width","type","rangeRound","domain","map","padding","range","getTickValues","prop","tickValues","tickVal","min","max","push","Math","round","step","customLabelStep","rangeMax","size","labelFontSize","ceilMax","ceil","segmentLength","height","ticksToFitInOneSegment","tickWidthPerSegment","rawLabelStep","roundedStep","labelStep","crowdedTicks","numberOfSegments","modulo","a","b","Number","isInteger","decimals","toString","split","pop","length","aux","pow","getDomainAndRangeByChartType","chartType","isNaN","crowded","intMin","intMax","getGridLinesAndAxisByChartType","verticalLines","undefined","horizontalLines","leftAxis","getRotateAngle","fontSize","getTopPadding","barWidth"],"mappings":"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","sourcesContent":["import { scaleBand, scalePoint } from '@vx/scale';\nimport { utils } from '@pie-lib/plot';\n\nexport const tickCount = utils.tickCount;\nexport const bounds = utils.bounds;\nexport const point = utils.point;\n\nexport const bandKey = (d, index) => `${index}-${d.label || '-'}`;\n\nexport const dataToXBand = (scaleX, data, width, type) => {\n switch (type) {\n case 'bar':\n case 'dotPlot':\n case 'linePlot':\n return scaleBand({\n rangeRound: [0, width],\n domain: data && data.map(bandKey),\n padding: 0.2\n });\n case 'histogram':\n return scaleBand({\n rangeRound: [0, width],\n domain: data && data.map(bandKey),\n padding: 0\n });\n case 'lineCross':\n case 'lineDot':\n return scalePoint({\n domain: data && data.map(bandKey),\n rangeRound: [0, width]\n });\n default:\n return scaleBand({\n range: [0, width],\n domain: data && data.map(bandKey),\n padding: 0\n });\n }\n};\n\nexport const getTickValues = (prop = {}) => {\n const tickValues = [];\n let tickVal = prop.min;\n\n while (tickVal <= prop.max) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal + prop.step) * 100) / 100;\n }\n\n return tickValues;\n};\n\nexport const customLabelStep = (rangeMax, size, labelFontSize) => {\n const ceilMax = Math.ceil(rangeMax);\n const segmentLength = size.height / ceilMax;\n const ticksToFitInOneSegment = 2;\n\n // how many ticksWidth fit in a segment\n const tickWidthPerSegment = segmentLength / labelFontSize;\n const rawLabelStep = ticksToFitInOneSegment / tickWidthPerSegment;\n const roundedStep = Math.ceil((rawLabelStep * 10) / 10);\n\n let labelStep;\n\n if (rawLabelStep > 0.15) {\n labelStep = roundedStep;\n } else if (rawLabelStep < 0.05) {\n labelStep = 0.1;\n } else {\n labelStep = 0.5;\n }\n\n return labelStep;\n};\n\nexport const crowdedTicks = (rangeMax, customLabelStep, size, labelFontSize) => {\n const ceilMax = Math.ceil(rangeMax);\n\n const numberOfSegments = ceilMax * customLabelStep;\n\n return size.height / numberOfSegments < labelFontSize && size.height / numberOfSegments > 0.5;\n};\n\n// multiply values with 10^number_of_decimals if needed because modulo function(%) is only defined for integers\nconst modulo = (a, b) => {\n if (Number.isInteger(b)) {\n return a % b;\n }\n\n const decimals = b\n .toString()\n .split('.')\n .pop().length;\n const aux = Math.pow(10, decimals);\n\n return (a * aux) % (b * aux);\n};\n\nexport const getDomainAndRangeByChartType = (domain, range, size, chartType, labelFontSize) => {\n let { step, labelStep, min, max } = range || {};\n\n if (!min) {\n min = 0;\n }\n\n if (!max || max < 0) {\n max = range.min + 1;\n }\n\n if (labelStep && !step) {\n step = labelStep;\n }\n if (!labelStep || (isNaN(labelStep) && step)) {\n let customLabelStep = step;\n let crowded = crowdedTicks(max, customLabelStep, size, labelFontSize);\n\n if (crowded) {\n customLabelStep = customLabelStep * 2;\n }\n\n labelStep = customLabelStep;\n }\n\n if (!step || (isNaN(step) && !labelStep) || isNaN(labelStep)) {\n labelStep = customLabelStep(max, size, labelFontSize);\n\n if (labelStep <= 1) {\n step = labelStep;\n } else if (labelStep <= 4) {\n step = 1;\n } else if (labelStep > 4 && labelStep < 10) {\n step = labelStep / 2;\n } else {\n step = labelStep / 3;\n }\n }\n\n if (modulo(max, step) !== 0) {\n max = max + step;\n }\n\n range.max = max;\n\n switch (chartType) {\n // if chart is dot plot or line plot, we should ignore step and make sure that min & max are integer values\n case 'dotPlot':\n case 'linePlot': {\n const intMin = Math.round(min);\n const intMax = Math.round(max);\n\n return {\n domain: {\n ...domain,\n step: 1,\n labelStep: 1,\n min: 0,\n max: 1\n },\n range: {\n ...range,\n min: intMin,\n max: intMin === intMax ? intMin + 1 : intMax,\n labelStep,\n step: 1\n }\n };\n }\n default:\n return {\n domain: {\n ...domain,\n step: 1,\n labelStep: 1,\n min: 0,\n max: 1\n },\n range: {\n ...range,\n labelStep,\n step\n }\n };\n }\n};\n\nexport const getGridLinesAndAxisByChartType = (range, chartType) => {\n switch (chartType) {\n case 'lineDot':\n case 'lineCross':\n return {\n verticalLines: undefined,\n horizontalLines: getTickValues(range),\n leftAxis: true\n };\n case 'dotPlot':\n case 'linePlot':\n return {\n verticalLines: [],\n horizontalLines: [],\n leftAxis: false\n };\n default:\n return {\n verticalLines: [],\n horizontalLines: getTickValues(range),\n leftAxis: true\n };\n }\n};\n\nexport const getRotateAngle = (fontSize, height) => {\n if (height >= fontSize * 2) {\n return 25;\n }\n\n return 0;\n};\n\nexport const getTopPadding = barWidth => {\n if (barWidth < 30) {\n return 50;\n }\n\n if (barWidth < 40) {\n return 30;\n }\n\n if (barWidth < 60) {\n return 15;\n }\n\n return 0;\n};\n"],"file":"utils.js"}
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["tickCount","utils","bounds","point","bandKey","d","index","label","dataToXBand","scaleX","data","width","type","rangeRound","domain","map","padding","range","getTickValues","prop","tickValues","tickVal","min","max","push","Math","round","step","getDomainAndRangeByChartType","chartType","labelStep","isNaN","intMin","intMax","getGridLinesAndAxisByChartType","verticalLines","undefined","horizontalLines","leftAxis","getRotateAngle","fontSize","height","getTopPadding","barWidth"],"mappings":"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","sourcesContent":["import { scaleBand, scalePoint } from '@vx/scale';\nimport { utils } from '@pie-lib/plot';\n\nexport const tickCount = utils.tickCount;\nexport const bounds = utils.bounds;\nexport const point = utils.point;\n\nexport const bandKey = (d, index) => `${index}-${d.label || '-'}`;\n\nexport const dataToXBand = (scaleX, data, width, type) => {\n switch (type) {\n case 'bar':\n case 'dotPlot':\n case 'linePlot':\n return scaleBand({\n rangeRound: [0, width],\n domain: data && data.map(bandKey),\n padding: 0.2\n });\n case 'histogram':\n return scaleBand({\n rangeRound: [0, width],\n domain: data && data.map(bandKey),\n padding: 0\n });\n case 'lineCross':\n case 'lineDot':\n return scalePoint({\n domain: data && data.map(bandKey),\n rangeRound: [0, width]\n });\n default:\n return scaleBand({\n range: [0, width],\n domain: data && data.map(bandKey),\n padding: 0\n });\n }\n};\n\nexport const getTickValues = (prop = {}) => {\n const tickValues = [];\n let tickVal = prop.min;\n\n while (tickVal <= prop.max) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal + prop.step) * 100) / 100;\n }\n\n return tickValues;\n};\n\nexport const getDomainAndRangeByChartType = (domain, range, chartType) => {\n let { step, labelStep, min, max } = range || {};\n\n if (!min) {\n min = 0;\n }\n\n if (!max || max < 0) {\n max = range.min + 1;\n }\n\n if (!step) {\n step = labelStep || 1;\n }\n if (!labelStep || (isNaN(labelStep) && step)) {\n labelStep = step || 1;\n }\n\n range.max = max;\n\n switch (chartType) {\n // if chart is dot plot or line plot, we should ignore step and make sure that min & max are integer values\n case 'dotPlot':\n case 'linePlot': {\n const intMin = Math.round(min);\n const intMax = Math.round(max);\n\n return {\n domain: {\n ...domain,\n step: 1,\n labelStep: 1,\n min: 0,\n max: 1\n },\n range: {\n ...range,\n min: intMin,\n max: intMin === intMax ? intMin + 1 : intMax,\n labelStep,\n step: 1\n }\n };\n }\n default:\n return {\n domain: {\n ...domain,\n step: 1,\n labelStep: 1,\n min: 0,\n max: 1\n },\n range: {\n ...range,\n labelStep,\n step\n }\n };\n }\n};\n\nexport const getGridLinesAndAxisByChartType = (range, chartType) => {\n switch (chartType) {\n case 'lineDot':\n case 'lineCross':\n return {\n verticalLines: undefined,\n horizontalLines: getTickValues(range),\n leftAxis: true\n };\n case 'dotPlot':\n case 'linePlot':\n return {\n verticalLines: [],\n horizontalLines: [],\n leftAxis: false\n };\n default:\n return {\n verticalLines: [],\n horizontalLines: getTickValues(range),\n leftAxis: true\n };\n }\n};\n\nexport const getRotateAngle = (fontSize, height) => {\n if (height >= fontSize * 2) {\n return 25;\n }\n\n return 0;\n};\n\nexport const getTopPadding = barWidth => {\n if (barWidth < 30) {\n return 50;\n }\n\n if (barWidth < 40) {\n return 30;\n }\n\n if (barWidth < 60) {\n return 15;\n }\n\n return 0;\n};\n"],"file":"utils.js"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "5.1.
|
|
6
|
+
"version": "5.1.3",
|
|
7
7
|
"description": "charting",
|
|
8
8
|
"keywords": [
|
|
9
9
|
"react",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"react": "^16.8.1"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "45e12d524142a6576c9ebb9292de01a34e88fc03"
|
|
47
47
|
}
|
package/src/axes.jsx
CHANGED
|
@@ -60,7 +60,8 @@ export class TickComponent extends React.Component {
|
|
|
60
60
|
|
|
61
61
|
const index = parseInt(formattedValue.split('-')[0], 10);
|
|
62
62
|
const category = categories[index];
|
|
63
|
-
const { deletable, editable, interactive, label, correctness } =
|
|
63
|
+
const { deletable, editable, interactive, label, correctness, autoFocus, inDefineChart } =
|
|
64
|
+
category || {};
|
|
64
65
|
const barX = xBand(bandKey({ label }, index));
|
|
65
66
|
const longestCategory = (categories || []).reduce((a, b) => {
|
|
66
67
|
const lengthA = a && a.label ? a.label.length : 0;
|
|
@@ -96,8 +97,9 @@ export class TickComponent extends React.Component {
|
|
|
96
97
|
</div>
|
|
97
98
|
)}
|
|
98
99
|
<MarkLabel
|
|
100
|
+
autoFocus={inDefineChart ? defineChart && autoFocus : autoFocus}
|
|
99
101
|
inputRef={r => (this.input = r)}
|
|
100
|
-
disabled={defineChart
|
|
102
|
+
disabled={!defineChart && !editable}
|
|
101
103
|
mark={category}
|
|
102
104
|
graphProps={graphProps}
|
|
103
105
|
onChange={newLabel => this.changeCategory(index, newLabel)}
|
package/src/bars/common/bars.jsx
CHANGED
|
@@ -126,7 +126,7 @@ export class Bars extends React.Component {
|
|
|
126
126
|
{(data || []).map((d, index) => (
|
|
127
127
|
<Bar
|
|
128
128
|
value={d.value}
|
|
129
|
-
interactive={defineChart
|
|
129
|
+
interactive={defineChart || d.interactive}
|
|
130
130
|
label={d.label}
|
|
131
131
|
xBand={xBand}
|
|
132
132
|
index={index}
|
package/src/chart-setup.jsx
CHANGED
|
@@ -7,10 +7,36 @@ import ChartType from './chart-type';
|
|
|
7
7
|
import { NumberTextFieldCustom } from '@pie-lib/config-ui';
|
|
8
8
|
|
|
9
9
|
const ConfigureChartPanel = props => {
|
|
10
|
-
const { classes, model, onChange } = props;
|
|
10
|
+
const { classes, model, onChange, gridValues = {}, labelValues = {} } = props;
|
|
11
11
|
const { range } = model;
|
|
12
12
|
const size = model.graph;
|
|
13
13
|
|
|
14
|
+
const gridOptions =
|
|
15
|
+
gridValues && gridValues.range ? { customValues: gridValues.range } : { min: 0, max: 10000 };
|
|
16
|
+
const labelOptions =
|
|
17
|
+
labelValues && labelValues.range ? { customValues: labelValues.range } : { min: 0, max: 10000 };
|
|
18
|
+
|
|
19
|
+
const stepConfig = (
|
|
20
|
+
<div className={classes.rowView}>
|
|
21
|
+
<NumberTextFieldCustom
|
|
22
|
+
className={classes.mediumTextField}
|
|
23
|
+
label="Grid Interval"
|
|
24
|
+
value={range.step}
|
|
25
|
+
variant="outlined"
|
|
26
|
+
onChange={(e, v) => onRangeChanged('step', v)}
|
|
27
|
+
{...gridOptions}
|
|
28
|
+
/>
|
|
29
|
+
<NumberTextFieldCustom
|
|
30
|
+
className={classes.mediumTextField}
|
|
31
|
+
label={'Label Interval'}
|
|
32
|
+
value={range.labelStep}
|
|
33
|
+
variant={'outlined'}
|
|
34
|
+
onChange={(e, v) => onRangeChanged('labelStep', v)}
|
|
35
|
+
{...labelOptions}
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
);
|
|
39
|
+
|
|
14
40
|
const rangeProps = chartType => {
|
|
15
41
|
return chartType.includes('Plot') ? { min: 3, max: 10 } : { min: 0.05, max: 10000 };
|
|
16
42
|
};
|
|
@@ -22,14 +48,30 @@ const ConfigureChartPanel = props => {
|
|
|
22
48
|
};
|
|
23
49
|
|
|
24
50
|
const onRangeChanged = (key, value) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
range[key] = parsedValue;
|
|
51
|
+
range[key] = value;
|
|
28
52
|
|
|
29
53
|
onChange({ ...model, range });
|
|
30
54
|
};
|
|
31
55
|
|
|
32
|
-
const onChartTypeChange = chartType =>
|
|
56
|
+
const onChartTypeChange = chartType => {
|
|
57
|
+
if (chartType.includes('Plot')) {
|
|
58
|
+
rangeProps.min = 3;
|
|
59
|
+
rangeProps.max = 10;
|
|
60
|
+
|
|
61
|
+
if (range.max > 10 || range.max < 3) {
|
|
62
|
+
range.max = 10;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
range.step = 1;
|
|
66
|
+
range.labelStep = 1;
|
|
67
|
+
|
|
68
|
+
onChange({ ...model, range, chartType });
|
|
69
|
+
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
onChange({ ...model, chartType });
|
|
74
|
+
};
|
|
33
75
|
|
|
34
76
|
return (
|
|
35
77
|
<div className={classes.wrapper}>
|
|
@@ -47,26 +89,7 @@ const ConfigureChartPanel = props => {
|
|
|
47
89
|
onChange={(e, v) => onRangeChanged('max', v)}
|
|
48
90
|
/>
|
|
49
91
|
</div>
|
|
50
|
-
|
|
51
|
-
<NumberTextFieldCustom
|
|
52
|
-
className={classes.mediumTextField}
|
|
53
|
-
label="Grid Interval"
|
|
54
|
-
value={range.step}
|
|
55
|
-
min={0}
|
|
56
|
-
max={10000}
|
|
57
|
-
variant="outlined"
|
|
58
|
-
onChange={(e, v) => onRangeChanged('step', v)}
|
|
59
|
-
/>
|
|
60
|
-
<NumberTextFieldCustom
|
|
61
|
-
className={classes.mediumTextField}
|
|
62
|
-
label={'Label Interval'}
|
|
63
|
-
value={range.labelStep}
|
|
64
|
-
min={0}
|
|
65
|
-
max={10000}
|
|
66
|
-
variant={'outlined'}
|
|
67
|
-
onChange={(e, v) => onRangeChanged('labelStep', v)}
|
|
68
|
-
/>
|
|
69
|
-
</div>
|
|
92
|
+
{!model.chartType.includes('Plot') && stepConfig}
|
|
70
93
|
<div className={classes.dimensions}>
|
|
71
94
|
<div>
|
|
72
95
|
<Typography>Dimensions(px)</Typography>
|
package/src/chart-type.js
CHANGED
|
@@ -13,29 +13,27 @@ const ChartType = withStyles(theme => ({
|
|
|
13
13
|
chartTypeLabel: {
|
|
14
14
|
backgroundColor: 'transparent'
|
|
15
15
|
}
|
|
16
|
-
}))(({ onChange, value, classes }) =>
|
|
17
|
-
|
|
18
|
-
<
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
</InputLabel>
|
|
16
|
+
}))(({ onChange, value, classes }) => (
|
|
17
|
+
<div className={classes.chartType}>
|
|
18
|
+
<FormControl variant={'outlined'} className={classes.chartType}>
|
|
19
|
+
<InputLabel htmlFor="type-helper" className={classes.chartTypeLabel}>
|
|
20
|
+
ChartType
|
|
21
|
+
</InputLabel>
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
});
|
|
23
|
+
<Select
|
|
24
|
+
value={value}
|
|
25
|
+
onChange={onChange}
|
|
26
|
+
input={<OutlinedInput name="type" id="type-helper" />}
|
|
27
|
+
>
|
|
28
|
+
<MenuItem value={'histogram'}>Histogram</MenuItem>
|
|
29
|
+
<MenuItem value={'bar'}>Bar</MenuItem>
|
|
30
|
+
<MenuItem value={'lineDot'}>Line Dot</MenuItem>
|
|
31
|
+
<MenuItem value={'lineCross'}>Line Cross</MenuItem>
|
|
32
|
+
<MenuItem value={'dotPlot'}>Dot Plot</MenuItem>
|
|
33
|
+
<MenuItem value={'linePlot'}>Line Plot</MenuItem>
|
|
34
|
+
</Select>
|
|
35
|
+
</FormControl>
|
|
36
|
+
</div>
|
|
37
|
+
));
|
|
40
38
|
|
|
41
39
|
export default ChartType;
|
package/src/chart.jsx
CHANGED
|
@@ -111,12 +111,14 @@ export class Chart extends React.Component {
|
|
|
111
111
|
}
|
|
112
112
|
};
|
|
113
113
|
|
|
114
|
-
addCategory =
|
|
115
|
-
const { onDataChange, data, categoryDefaultLabel } = this.props;
|
|
114
|
+
addCategory = range => {
|
|
115
|
+
const { onDataChange, data, categoryDefaultLabel, defineChart } = this.props;
|
|
116
116
|
|
|
117
117
|
onDataChange([
|
|
118
118
|
...data,
|
|
119
119
|
{
|
|
120
|
+
inDefineChart: defineChart,
|
|
121
|
+
autoFocus: true,
|
|
120
122
|
label: categoryDefaultLabel || 'New Bar',
|
|
121
123
|
value: range.step,
|
|
122
124
|
deletable: true,
|
|
@@ -138,16 +140,7 @@ export class Chart extends React.Component {
|
|
|
138
140
|
};
|
|
139
141
|
|
|
140
142
|
render() {
|
|
141
|
-
const {
|
|
142
|
-
classes,
|
|
143
|
-
className,
|
|
144
|
-
domain,
|
|
145
|
-
range,
|
|
146
|
-
size,
|
|
147
|
-
title,
|
|
148
|
-
addCategoryEnabled,
|
|
149
|
-
theme
|
|
150
|
-
} = this.props;
|
|
143
|
+
const { classes, className, domain, range, size, title, addCategoryEnabled } = this.props;
|
|
151
144
|
let { chartType } = this.props;
|
|
152
145
|
|
|
153
146
|
const defineChart = this.props.defineChart || false;
|
|
@@ -156,14 +149,7 @@ export class Chart extends React.Component {
|
|
|
156
149
|
const { ChartComponent } = this.getChart();
|
|
157
150
|
const categories = this.getFilteredCategories();
|
|
158
151
|
|
|
159
|
-
const
|
|
160
|
-
const correctValues = getDomainAndRangeByChartType(
|
|
161
|
-
domain,
|
|
162
|
-
range,
|
|
163
|
-
size,
|
|
164
|
-
chartType,
|
|
165
|
-
labelFontSize
|
|
166
|
-
);
|
|
152
|
+
const correctValues = getDomainAndRangeByChartType(domain, range, chartType);
|
|
167
153
|
|
|
168
154
|
const { verticalLines, horizontalLines, leftAxis } = getGridLinesAndAxisByChartType(
|
|
169
155
|
correctValues.range,
|
|
@@ -205,7 +191,7 @@ export class Chart extends React.Component {
|
|
|
205
191
|
<ToolMenu
|
|
206
192
|
className={classes.toolMenu}
|
|
207
193
|
disabled={!addCategoryEnabled}
|
|
208
|
-
addCategory={() => this.addCategory(
|
|
194
|
+
addCategory={() => this.addCategory(correctValues.range)}
|
|
209
195
|
/>
|
|
210
196
|
</div>
|
|
211
197
|
<Root title={title} classes={classes} rootRef={r => (this.rootNode = r)} {...rootCommon}>
|
package/src/line/common/line.jsx
CHANGED
|
@@ -94,7 +94,7 @@ export class RawLine extends React.Component {
|
|
|
94
94
|
{lineToUse &&
|
|
95
95
|
lineToUse.map((point, i) => {
|
|
96
96
|
const r = 6;
|
|
97
|
-
const enableDraggable = defineChart
|
|
97
|
+
const enableDraggable = defineChart || point.interactive;
|
|
98
98
|
const Component = enableDraggable ? DraggableHandle : DragHandle;
|
|
99
99
|
|
|
100
100
|
return (
|
package/src/mark-label.jsx
CHANGED
|
@@ -33,7 +33,8 @@ export const MarkLabel = props => {
|
|
|
33
33
|
inputRef: externalInputRef,
|
|
34
34
|
barWidth,
|
|
35
35
|
rotate,
|
|
36
|
-
correctness
|
|
36
|
+
correctness,
|
|
37
|
+
autoFocus
|
|
37
38
|
} = props;
|
|
38
39
|
const [label, setLabel] = useState(mark.label);
|
|
39
40
|
const onChange = e => setLabel(e.target.value);
|
|
@@ -54,6 +55,7 @@ export const MarkLabel = props => {
|
|
|
54
55
|
|
|
55
56
|
return (
|
|
56
57
|
<AutosizeInput
|
|
58
|
+
autoFocus={autoFocus}
|
|
57
59
|
inputRef={r => {
|
|
58
60
|
_ref(r);
|
|
59
61
|
externalInputRef(r);
|
package/src/plot/common/plot.jsx
CHANGED
|
@@ -151,7 +151,7 @@ export class Plot extends React.Component {
|
|
|
151
151
|
<Bar
|
|
152
152
|
value={d.value}
|
|
153
153
|
label={d.label}
|
|
154
|
-
interactive={defineChart
|
|
154
|
+
interactive={defineChart || d.interactive}
|
|
155
155
|
xBand={xBand}
|
|
156
156
|
index={index}
|
|
157
157
|
key={`bar-${d.label}-${d.value}-${index}`}
|
package/src/utils.js
CHANGED
|
@@ -50,53 +50,7 @@ export const getTickValues = (prop = {}) => {
|
|
|
50
50
|
return tickValues;
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
-
export const
|
|
54
|
-
const ceilMax = Math.ceil(rangeMax);
|
|
55
|
-
const segmentLength = size.height / ceilMax;
|
|
56
|
-
const ticksToFitInOneSegment = 2;
|
|
57
|
-
|
|
58
|
-
// how many ticksWidth fit in a segment
|
|
59
|
-
const tickWidthPerSegment = segmentLength / labelFontSize;
|
|
60
|
-
const rawLabelStep = ticksToFitInOneSegment / tickWidthPerSegment;
|
|
61
|
-
const roundedStep = Math.ceil((rawLabelStep * 10) / 10);
|
|
62
|
-
|
|
63
|
-
let labelStep;
|
|
64
|
-
|
|
65
|
-
if (rawLabelStep > 0.15) {
|
|
66
|
-
labelStep = roundedStep;
|
|
67
|
-
} else if (rawLabelStep < 0.05) {
|
|
68
|
-
labelStep = 0.1;
|
|
69
|
-
} else {
|
|
70
|
-
labelStep = 0.5;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return labelStep;
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
export const crowdedTicks = (rangeMax, customLabelStep, size, labelFontSize) => {
|
|
77
|
-
const ceilMax = Math.ceil(rangeMax);
|
|
78
|
-
|
|
79
|
-
const numberOfSegments = ceilMax * customLabelStep;
|
|
80
|
-
|
|
81
|
-
return size.height / numberOfSegments < labelFontSize && size.height / numberOfSegments > 0.5;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
// multiply values with 10^number_of_decimals if needed because modulo function(%) is only defined for integers
|
|
85
|
-
const modulo = (a, b) => {
|
|
86
|
-
if (Number.isInteger(b)) {
|
|
87
|
-
return a % b;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const decimals = b
|
|
91
|
-
.toString()
|
|
92
|
-
.split('.')
|
|
93
|
-
.pop().length;
|
|
94
|
-
const aux = Math.pow(10, decimals);
|
|
95
|
-
|
|
96
|
-
return (a * aux) % (b * aux);
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
export const getDomainAndRangeByChartType = (domain, range, size, chartType, labelFontSize) => {
|
|
53
|
+
export const getDomainAndRangeByChartType = (domain, range, chartType) => {
|
|
100
54
|
let { step, labelStep, min, max } = range || {};
|
|
101
55
|
|
|
102
56
|
if (!min) {
|
|
@@ -107,36 +61,11 @@ export const getDomainAndRangeByChartType = (domain, range, size, chartType, lab
|
|
|
107
61
|
max = range.min + 1;
|
|
108
62
|
}
|
|
109
63
|
|
|
110
|
-
if (
|
|
111
|
-
step = labelStep;
|
|
64
|
+
if (!step) {
|
|
65
|
+
step = labelStep || 1;
|
|
112
66
|
}
|
|
113
67
|
if (!labelStep || (isNaN(labelStep) && step)) {
|
|
114
|
-
|
|
115
|
-
let crowded = crowdedTicks(max, customLabelStep, size, labelFontSize);
|
|
116
|
-
|
|
117
|
-
if (crowded) {
|
|
118
|
-
customLabelStep = customLabelStep * 2;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
labelStep = customLabelStep;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (!step || (isNaN(step) && !labelStep) || isNaN(labelStep)) {
|
|
125
|
-
labelStep = customLabelStep(max, size, labelFontSize);
|
|
126
|
-
|
|
127
|
-
if (labelStep <= 1) {
|
|
128
|
-
step = labelStep;
|
|
129
|
-
} else if (labelStep <= 4) {
|
|
130
|
-
step = 1;
|
|
131
|
-
} else if (labelStep > 4 && labelStep < 10) {
|
|
132
|
-
step = labelStep / 2;
|
|
133
|
-
} else {
|
|
134
|
-
step = labelStep / 3;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (modulo(max, step) !== 0) {
|
|
139
|
-
max = max + step;
|
|
68
|
+
labelStep = step || 1;
|
|
140
69
|
}
|
|
141
70
|
|
|
142
71
|
range.max = max;
|