sea-chart 2.0.35 → 2.0.36
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/dist/api/index.js +17 -59
- package/dist/assets/css/sea-chart-d3-tooltip.css +0 -1
- package/dist/components/color-popover/color-rules-popover.js +4 -2
- package/dist/components/drill-down-settings/drill-down-fields-popover/index.js +5 -4
- package/dist/components/icon/index.js +9 -13
- package/dist/components/number-input/index.js +7 -13
- package/dist/components/popover/hide-column-popover/hide-column-popover-widgets/hide-column-item.js +7 -3
- package/dist/components/popover/hide-column-popover/hide-column-popover.css +5 -1
- package/dist/components/popover/hide-column-popover/hide-column-popover.js +2 -4
- package/dist/components/popover/sort-popover/sort-popover.js +6 -7
- package/dist/components/statistic-record-dialog/index.js +9 -8
- package/dist/components/tooltip/index.js +26 -8
- package/dist/editor/index.js +5 -1
- package/dist/locale/lang/de.js +1 -0
- package/dist/locale/lang/en.js +1 -0
- package/dist/locale/lang/es.js +1 -0
- package/dist/locale/lang/fr.js +1 -0
- package/dist/locale/lang/pt.js +1 -0
- package/dist/locale/lang/ru.js +1 -0
- package/dist/locale/lang/zh_CN.js +1 -0
- package/dist/model/funnel.js +2 -2
- package/dist/model/map-bubble.js +4 -0
- package/dist/services/map-json.js +3 -0
- package/dist/settings/advance-bar-settings/data-settings.js +1 -1
- package/dist/settings/advance-bar-settings/style-settings.js +4 -3
- package/dist/settings/bar-settings/data-settings.js +1 -1
- package/dist/settings/bar-settings/style-settings.js +2 -2
- package/dist/settings/basic-number-card/data-settings.js +3 -2
- package/dist/settings/combination-settings/data-settings.js +0 -1
- package/dist/settings/combination-settings/style-settings.js +2 -2
- package/dist/settings/dashboard-settings/data-settings.js +3 -2
- package/dist/settings/funnel-settings/components/funnel-layer-setting.js +7 -7
- package/dist/settings/index.js +8 -3
- package/dist/settings/table-element-settings/components/data-filter.js +24 -25
- package/dist/settings/table-element-settings/index.css +1 -31
- package/dist/settings/table-settings/data-settings.js +3 -2
- package/dist/settings/time-comparison-settings/style-settings.js +2 -2
- package/dist/settings/widgets/basic-summary/index.js +8 -7
- package/dist/settings/widgets/common-data-settings.js +7 -6
- package/dist/settings/widgets/data-filter/index.js +30 -22
- package/dist/settings/widgets/group-by.js +4 -3
- package/dist/settings/widgets/summary-settings.js +3 -2
- package/dist/settings/widgets/y-axis-group-settings.js +3 -2
- package/dist/utils/cell-format-utils.js +9 -7
- package/dist/utils/chart-utils/base-utils.js +194 -86
- package/dist/utils/chart-utils/index.js +5 -3
- package/dist/utils/chart-utils/original-data-utils/basic-chart-calculator.js +5 -5
- package/dist/utils/chart-utils/original-data-utils/card-calculator.js +8 -2
- package/dist/utils/chart-utils/original-data-utils/dashboard-calculator.js +12 -3
- package/dist/utils/chart-utils/original-data-utils/pivot-table-calculator.js +4 -1
- package/dist/utils/chart-utils/original-data-utils/scatter-calculator.js +1 -0
- package/dist/utils/chart-utils/original-data-utils/trend-calculator.js +24 -3
- package/dist/utils/chart-utils/sql-statistics-utils.js +182 -177
- package/dist/utils/column-utils.js +20 -7
- package/dist/utils/contexts.js +5 -2
- package/dist/utils/index.js +25 -4
- package/dist/utils/row-record-utils.js +100 -20
- package/dist/utils/sql/column-2-sql-column.js +10 -10
- package/dist/utils/trend-utils.js +15 -2
- package/dist/view/index.css +2 -8
- package/dist/view/index.js +14 -9
- package/dist/view/wrapper/area-group.js +15 -7
- package/dist/view/wrapper/bar-compare.js +18 -2
- package/dist/view/wrapper/bar-custom-stack.js +35 -9
- package/dist/view/wrapper/bar-group.js +55 -26
- package/dist/view/wrapper/bar-stack.js +2 -2
- package/dist/view/wrapper/basic-number-card.js +27 -3
- package/dist/view/wrapper/chart-component.js +43 -440
- package/dist/view/wrapper/completeness-group.js +104 -49
- package/dist/view/wrapper/dashboard.js +68 -18
- package/dist/view/wrapper/horizontal-bar-group.js +26 -6
- package/dist/view/wrapper/horizontal-bar-stack.js +2 -2
- package/dist/view/wrapper/line-group.js +8 -3
- package/dist/view/wrapper/map-world-bubble.js +1 -0
- package/dist/view/wrapper/map-world.js +1 -0
- package/dist/view/wrapper/pie.js +1 -1
- package/dist/view/wrapper/ring.js +1 -1
- package/dist/view/wrapper/scatter.js +8 -6
- package/dist/view/wrapper/table/two-dimension-table.js +3 -2
- package/dist/view/wrapper/table-element/components/records-header/index.js +0 -1
- package/dist/view/wrapper/table-element/components/resize-column-handle/resize-column-handle.js +3 -1
- package/dist/view/wrapper/table-element/index.js +16 -21
- package/dist/view/wrapper/trend.js +24 -1
- package/package.json +15 -12
package/dist/utils/index.js
CHANGED
|
@@ -98,7 +98,7 @@ Object.defineProperty(exports, "getDateColumnFormat", {
|
|
|
98
98
|
return _columnUtils.getDateColumnFormat;
|
|
99
99
|
}
|
|
100
100
|
});
|
|
101
|
-
exports.getGeoGranularityByLevel = exports.getEventClassName = exports.getErrorMessage = void 0;
|
|
101
|
+
exports.getGeoGranularityByLevel = exports.getFirstDayOfWeekForGroupby = exports.getEventClassName = exports.getErrorMessage = void 0;
|
|
102
102
|
Object.defineProperty(exports, "getKnownCollaboratorByEmail", {
|
|
103
103
|
enumerable: true,
|
|
104
104
|
get: function () {
|
|
@@ -155,7 +155,7 @@ Object.defineProperty(exports, "translateCalendar", {
|
|
|
155
155
|
return _dateTranslate.translateCalendar;
|
|
156
156
|
}
|
|
157
157
|
});
|
|
158
|
-
var
|
|
158
|
+
var _lodash = require("lodash");
|
|
159
159
|
var _constants = require("../constants");
|
|
160
160
|
var _intl = _interopRequireDefault(require("../intl"));
|
|
161
161
|
var _error = require("../constants/error");
|
|
@@ -251,7 +251,7 @@ const getSortedDataByGivenOrder = (data, x_axis_option_list) => {
|
|
|
251
251
|
let sortedData = [];
|
|
252
252
|
data.forEach(item => {
|
|
253
253
|
const index = idIndexMap[item.group_name];
|
|
254
|
-
sortedData[index] = (0,
|
|
254
|
+
sortedData[index] = (0, _lodash.cloneDeep)(item);
|
|
255
255
|
});
|
|
256
256
|
sortedData = sortedData.filter(Boolean);
|
|
257
257
|
return sortedData;
|
|
@@ -396,4 +396,25 @@ const getEventClassName = e => {
|
|
|
396
396
|
if (!e || !e.target) return '';
|
|
397
397
|
return e.target.getAttribute('class') || '';
|
|
398
398
|
};
|
|
399
|
-
exports.getEventClassName = getEventClassName;
|
|
399
|
+
exports.getEventClassName = getEventClassName;
|
|
400
|
+
const getFirstDayOfWeekForGroupby = source => {
|
|
401
|
+
let firstDayOfWeek = 'Sunday';
|
|
402
|
+
if (source === 'base') {
|
|
403
|
+
const {
|
|
404
|
+
settings
|
|
405
|
+
} = window.app.state.value;
|
|
406
|
+
const {
|
|
407
|
+
date_settings
|
|
408
|
+
} = settings || {};
|
|
409
|
+
firstDayOfWeek = date_settings === null || date_settings === void 0 ? void 0 : date_settings.first_day_of_week;
|
|
410
|
+
} else if (source === 'app') {
|
|
411
|
+
var _window$app, _window$app$dtableUti;
|
|
412
|
+
const dtableSettings = (_window$app = window.app) === null || _window$app === void 0 ? void 0 : (_window$app$dtableUti = _window$app.dtableUtils) === null || _window$app$dtableUti === void 0 ? void 0 : _window$app$dtableUti.settings;
|
|
413
|
+
const {
|
|
414
|
+
date_settings
|
|
415
|
+
} = dtableSettings || {};
|
|
416
|
+
firstDayOfWeek = date_settings === null || date_settings === void 0 ? void 0 : date_settings.first_day_of_week;
|
|
417
|
+
}
|
|
418
|
+
return firstDayOfWeek || 'Sunday';
|
|
419
|
+
};
|
|
420
|
+
exports.getFirstDayOfWeekForGroupby = getFirstDayOfWeekForGroupby;
|
|
@@ -20,6 +20,7 @@ var _digitalSignUtils = _interopRequireDefault(require("../utils/digital-sign-ut
|
|
|
20
20
|
var _columnUtils = require("../utils/column-utils");
|
|
21
21
|
var _context = _interopRequireDefault(require("../context"));
|
|
22
22
|
var _constants = require("../constants");
|
|
23
|
+
var _type = require("../constants/type");
|
|
23
24
|
var _sql = require("./sql");
|
|
24
25
|
var _chartUtils = require("./chart-utils");
|
|
25
26
|
const UNSHOW_COLUMN_TYPE = exports.UNSHOW_COLUMN_TYPE = [_dtableUtils.CellType.LINK, _dtableUtils.CellType.LONG_TEXT, _dtableUtils.CellType.FORMULA, _dtableUtils.CellType.LINK_FORMULA];
|
|
@@ -512,7 +513,8 @@ const filterPredicateMap = {
|
|
|
512
513
|
[_dtableUtils.CellType.URL]: 'is',
|
|
513
514
|
[_dtableUtils.CellType.STRING]: 'is',
|
|
514
515
|
[_dtableUtils.CellType.BOOL]: 'is',
|
|
515
|
-
[_dtableUtils.CellType.LINK_FORMULA]: '
|
|
516
|
+
[_dtableUtils.CellType.LINK_FORMULA]: 'is',
|
|
517
|
+
[_dtableUtils.CellType.LINK]: 'is'
|
|
516
518
|
};
|
|
517
519
|
const USE_OPTION_ID_CELL_TYPES = [_dtableUtils.CellType.SINGLE_SELECT, _dtableUtils.CellType.MULTIPLE_SELECT];
|
|
518
520
|
const getFilterByColumnTypeForPivot = (columnKey, columns, value, rows) => {
|
|
@@ -526,11 +528,38 @@ const getFilterByColumnTypeForPivot = (columnKey, columns, value, rows) => {
|
|
|
526
528
|
}
|
|
527
529
|
let type = column.type;
|
|
528
530
|
const columnType = column.type;
|
|
531
|
+
const {
|
|
532
|
+
result_type,
|
|
533
|
+
array_type
|
|
534
|
+
} = column.data || {};
|
|
535
|
+
|
|
536
|
+
// get the actual type for formula columns
|
|
529
537
|
if (type === _dtableUtils.CellType.FORMULA) {
|
|
530
|
-
|
|
538
|
+
if (result_type === _dtableUtils.FORMULA_RESULT_TYPE.ARRAY && array_type) {
|
|
539
|
+
type = array_type;
|
|
540
|
+
} else {
|
|
541
|
+
type = result_type;
|
|
542
|
+
}
|
|
531
543
|
}
|
|
532
544
|
if (type === _dtableUtils.CellType.LINK_FORMULA) {
|
|
533
|
-
type =
|
|
545
|
+
type = array_type;
|
|
546
|
+
// extract display_value from link formula column value
|
|
547
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
548
|
+
value = value[0];
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
// handle link column based on array_type
|
|
553
|
+
if (columnType === _dtableUtils.CellType.LINK) {
|
|
554
|
+
var _column$data, _value$;
|
|
555
|
+
const linkArrayType = (_column$data = column.data) === null || _column$data === void 0 ? void 0 : _column$data.array_type;
|
|
556
|
+
if (linkArrayType) {
|
|
557
|
+
type = linkArrayType;
|
|
558
|
+
}
|
|
559
|
+
// extract display_value from link column value
|
|
560
|
+
if (Array.isArray(value) && value.length > 0 && ((_value$ = value[0]) === null || _value$ === void 0 ? void 0 : _value$.display_value) !== undefined) {
|
|
561
|
+
value = value[0].display_value;
|
|
562
|
+
}
|
|
534
563
|
}
|
|
535
564
|
if (column && [_dtableUtils.CellType.GEOLOCATION, _dtableUtils.CellType.DATE, _dtableUtils.CellType.MTIME, _dtableUtils.CellType.CTIME].includes(type)) {
|
|
536
565
|
filter['value'] = value;
|
|
@@ -539,19 +568,24 @@ const getFilterByColumnTypeForPivot = (columnKey, columns, value, rows) => {
|
|
|
539
568
|
if (typeof value === 'string') {
|
|
540
569
|
value = value.trim();
|
|
541
570
|
}
|
|
571
|
+
|
|
572
|
+
// handle collaborator type for formula/link_formula columns
|
|
573
|
+
const isFormulaCollaborator = (columnType === _dtableUtils.CellType.FORMULA || columnType === _dtableUtils.CellType.LINK_FORMULA) && result_type === _dtableUtils.FORMULA_RESULT_TYPE.ARRAY && _dtableUtils.COLLABORATOR_COLUMN_TYPES.includes(array_type);
|
|
542
574
|
if (USE_OPTION_ID_CELL_TYPES.includes(column.type)) {
|
|
543
575
|
const options = (0, _dtableUtils.getColumnOptions)(column);
|
|
544
576
|
// name may contains spaces
|
|
545
577
|
// value maybe id or name, find option by name or id
|
|
546
578
|
const selectedOption = options.find(o => o.name.trim() === value || o.id === value);
|
|
547
579
|
filter['filter_term'] = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.id;
|
|
580
|
+
} else if (isFormulaCollaborator) {
|
|
581
|
+
filter['filter_term'] = Array.isArray(value) ? value : [value];
|
|
548
582
|
} else {
|
|
549
583
|
// value may contains spaces
|
|
550
584
|
filter['filter_term'] = value;
|
|
551
585
|
}
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
if (
|
|
586
|
+
if (isFormulaCollaborator) {
|
|
587
|
+
filter['filter_predicate'] = filterPredicateMap[_dtableUtils.CellType.COLLABORATOR];
|
|
588
|
+
} else if ([_dtableUtils.CellType.LINK_FORMULA, _dtableUtils.CellType.LINK].includes(columnType)) {
|
|
555
589
|
filter['filter_predicate'] = filterPredicateMap[columnType];
|
|
556
590
|
} else {
|
|
557
591
|
filter['filter_predicate'] = filterPredicateMap[type];
|
|
@@ -574,13 +608,40 @@ const getFilterByColumnType = (columnKey, columns, rows, sqlColumnKey) => {
|
|
|
574
608
|
let value;
|
|
575
609
|
let type = column.type;
|
|
576
610
|
let columnType = column.type;
|
|
611
|
+
const {
|
|
612
|
+
result_type,
|
|
613
|
+
array_type
|
|
614
|
+
} = column.data || {};
|
|
577
615
|
const correctRow = rows.find(r => sqlColumnKey in r);
|
|
578
616
|
value = correctRow && correctRow[sqlColumnKey];
|
|
617
|
+
|
|
618
|
+
// get the actual type for formula columns
|
|
579
619
|
if (type === _dtableUtils.CellType.FORMULA) {
|
|
580
|
-
|
|
620
|
+
if (result_type === _dtableUtils.FORMULA_RESULT_TYPE.ARRAY && array_type) {
|
|
621
|
+
type = array_type;
|
|
622
|
+
} else {
|
|
623
|
+
type = result_type;
|
|
624
|
+
}
|
|
581
625
|
}
|
|
582
626
|
if (type === _dtableUtils.CellType.LINK_FORMULA) {
|
|
583
|
-
type =
|
|
627
|
+
type = array_type;
|
|
628
|
+
// extract display_value from link formula column value
|
|
629
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
630
|
+
value = value[0];
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// handle link column based on array_type
|
|
635
|
+
if (columnType === _dtableUtils.CellType.LINK) {
|
|
636
|
+
var _column$data2, _value$2;
|
|
637
|
+
const linkArrayType = (_column$data2 = column.data) === null || _column$data2 === void 0 ? void 0 : _column$data2.array_type;
|
|
638
|
+
if (linkArrayType) {
|
|
639
|
+
type = linkArrayType;
|
|
640
|
+
}
|
|
641
|
+
// extract display_value from link column value
|
|
642
|
+
if (Array.isArray(value) && value.length > 0 && ((_value$2 = value[0]) === null || _value$2 === void 0 ? void 0 : _value$2.display_value) !== undefined) {
|
|
643
|
+
value = value[0].display_value;
|
|
644
|
+
}
|
|
584
645
|
}
|
|
585
646
|
if (column && [_dtableUtils.CellType.GEOLOCATION, _dtableUtils.CellType.DATE, _dtableUtils.CellType.MTIME, _dtableUtils.CellType.CTIME].includes(type)) {
|
|
586
647
|
// link_formula result is an array, but can't pass the value directly as an array here
|
|
@@ -589,14 +650,21 @@ const getFilterByColumnType = (columnKey, columns, rows, sqlColumnKey) => {
|
|
|
589
650
|
return filter;
|
|
590
651
|
}
|
|
591
652
|
|
|
653
|
+
// handle collaborator type for formula/link_formula columns
|
|
654
|
+
const isFormulaCollaborator = (columnType === _dtableUtils.CellType.FORMULA || columnType === _dtableUtils.CellType.LINK_FORMULA) && result_type === _dtableUtils.FORMULA_RESULT_TYPE.ARRAY && _dtableUtils.COLLABORATOR_COLUMN_TYPES.includes(array_type);
|
|
655
|
+
|
|
592
656
|
// value may contains spaces
|
|
593
657
|
if (typeof value === 'string') {
|
|
594
658
|
value = value.trim();
|
|
595
659
|
}
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
660
|
+
if (isFormulaCollaborator) {
|
|
661
|
+
filter['filter_term'] = Array.isArray(value) ? value : [value];
|
|
662
|
+
} else {
|
|
663
|
+
filter['filter_term'] = value;
|
|
664
|
+
}
|
|
665
|
+
if (isFormulaCollaborator) {
|
|
666
|
+
filter['filter_predicate'] = filterPredicateMap[_dtableUtils.CellType.COLLABORATOR];
|
|
667
|
+
} else if ([_dtableUtils.CellType.LINK_FORMULA, _dtableUtils.CellType.LINK].includes(columnType)) {
|
|
600
668
|
filter['filter_predicate'] = filterPredicateMap[columnType];
|
|
601
669
|
} else {
|
|
602
670
|
filter['filter_predicate'] = filterPredicateMap[type];
|
|
@@ -621,10 +689,18 @@ const getFilterConditions = (statisticRecord, chart, table) => {
|
|
|
621
689
|
const groupColumnKey = _constants.groupAxisMap[type];
|
|
622
690
|
chart.config = _chartUtils.BaseUtils.convertConfig(config);
|
|
623
691
|
const chartSQLMap = (0, _sql.chartColumn2SqlColumn)(chart, table);
|
|
624
|
-
|
|
692
|
+
let {
|
|
625
693
|
sqlColumnGroupbyColumnKey,
|
|
626
|
-
sqlGroupbyColumnKey
|
|
694
|
+
sqlGroupbyColumnKey,
|
|
695
|
+
sqlXColumnKey,
|
|
696
|
+
sqlYColumnKey
|
|
627
697
|
} = chartSQLMap;
|
|
698
|
+
if (type === _type.CHART_TYPE.COMPLETENESS_GROUP || type === _type.CHART_TYPE.COMPLETENESS) {
|
|
699
|
+
const {
|
|
700
|
+
sqlColumns
|
|
701
|
+
} = chartSQLMap;
|
|
702
|
+
sqlGroupbyColumnKey = sqlColumns.name_column.key;
|
|
703
|
+
}
|
|
628
704
|
if (isPivot && rows.length) {
|
|
629
705
|
const xValueList = [];
|
|
630
706
|
const yValueList = [];
|
|
@@ -648,19 +724,23 @@ const getFilterConditions = (statisticRecord, chart, table) => {
|
|
|
648
724
|
});
|
|
649
725
|
} else {
|
|
650
726
|
if (name === '_Others') {
|
|
651
|
-
const
|
|
652
|
-
filters.push(...
|
|
727
|
+
const flters = rows.map(row => getFilterByColumnType(config[columnKey], columns, [row], sqlGroupbyColumnKey));
|
|
728
|
+
filters.push(...flters);
|
|
653
729
|
} else {
|
|
654
|
-
let columnFilter;
|
|
655
730
|
if (['map', 'map_bubble'].includes(type)) {
|
|
656
|
-
|
|
731
|
+
const filter = {
|
|
657
732
|
column_key: config[columnKey],
|
|
658
733
|
value: name
|
|
659
734
|
};
|
|
735
|
+
filters.push(filter);
|
|
736
|
+
} else if (type === _type.CHART_TYPE.SCATTER) {
|
|
737
|
+
const filterX = getFilterByColumnType(config['x_axis_column_key'], columns, rows, sqlXColumnKey);
|
|
738
|
+
const filterY = getFilterByColumnType(config['y_axis_column_key'], columns, rows, sqlYColumnKey);
|
|
739
|
+
filters.push(filterX, filterY);
|
|
660
740
|
} else {
|
|
661
|
-
|
|
741
|
+
const filter = getFilterByColumnType(config[columnKey], columns, rows, sqlGroupbyColumnKey);
|
|
742
|
+
filters.push(filter);
|
|
662
743
|
}
|
|
663
|
-
filters.push(columnFilter);
|
|
664
744
|
}
|
|
665
745
|
if (sqlColumnGroupbyColumnKey) {
|
|
666
746
|
const groupColumnFilter = getFilterByColumnType(config[groupColumnKey], columns, rows, sqlColumnGroupbyColumnKey);
|
|
@@ -11,6 +11,7 @@ var _baseUtils = _interopRequireDefault(require("../chart-utils/base-utils"));
|
|
|
11
11
|
var _map = require("../map");
|
|
12
12
|
var _columnUtils = require("../column-utils");
|
|
13
13
|
var _intl = _interopRequireDefault(require("../../intl"));
|
|
14
|
+
var _index = require("../index");
|
|
14
15
|
const column2SqlColumn = function (column) {
|
|
15
16
|
let {
|
|
16
17
|
dateGranularity,
|
|
@@ -18,14 +19,13 @@ const column2SqlColumn = function (column) {
|
|
|
18
19
|
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
19
20
|
const {
|
|
20
21
|
name,
|
|
21
|
-
type,
|
|
22
22
|
key
|
|
23
23
|
} = column;
|
|
24
24
|
const validColumnName = "`".concat(name, "`");
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
case
|
|
28
|
-
case
|
|
25
|
+
const startOfWeek = (0, _index.getFirstDayOfWeekForGroupby)('app').toLowerCase();
|
|
26
|
+
switch (true) {
|
|
27
|
+
case (0, _columnUtils.isDateColumn)(column):
|
|
28
|
+
case (0, _columnUtils.isDateFormulaColumn)(column):
|
|
29
29
|
{
|
|
30
30
|
const validDateGranularity = dateGranularity && dateGranularity.toUpperCase();
|
|
31
31
|
if (['DAY', 'DAYS_7', 'DAYS_30'].includes(validDateGranularity)) {
|
|
@@ -36,7 +36,7 @@ const column2SqlColumn = function (column) {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
if (validDateGranularity === 'WEEK') {
|
|
39
|
-
const sqlColumnName = "ISODATE(STARTOFWEEK(".concat(validColumnName, ", \"
|
|
39
|
+
const sqlColumnName = "ISODATE(STARTOFWEEK(".concat(validColumnName, ", \"").concat(startOfWeek, "\"))");
|
|
40
40
|
return {
|
|
41
41
|
name: sqlColumnName,
|
|
42
42
|
key: sqlColumnName
|
|
@@ -76,7 +76,7 @@ const column2SqlColumn = function (column) {
|
|
|
76
76
|
key: sqlColumnName
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
-
case _dtableUtils.CellType.GEOLOCATION:
|
|
79
|
+
case column.type === _dtableUtils.CellType.GEOLOCATION:
|
|
80
80
|
{
|
|
81
81
|
const validGeolocationGranularity = geolocationGranularity && geolocationGranularity.toUpperCase();
|
|
82
82
|
if (validGeolocationGranularity === 'PROVINCE') {
|
|
@@ -805,12 +805,12 @@ const chartColumn2SqlColumn = (chartElement, table) => {
|
|
|
805
805
|
case _constants.CHART_TYPE.COMPLETENESS_GROUP:
|
|
806
806
|
{
|
|
807
807
|
const sqlColumns = getCompletenessSettingColumn(chart, table);
|
|
808
|
-
const
|
|
809
|
-
// only has
|
|
808
|
+
const sqlColumnGroupbyColumnKey = completenessColumn2SqlColumn(chart, table);
|
|
809
|
+
// only has columnGroupbyColumn key need maped to sql key
|
|
810
810
|
// for example: 'xxx' => 'ISODATE(xxxx)'
|
|
811
811
|
return {
|
|
812
812
|
sqlColumns,
|
|
813
|
-
|
|
813
|
+
sqlColumnGroupbyColumnKey
|
|
814
814
|
};
|
|
815
815
|
}
|
|
816
816
|
case _constants.CHART_TYPE.SCATTER:
|
|
@@ -10,8 +10,18 @@ var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
|
10
10
|
var _quarterOfYear = _interopRequireDefault(require("dayjs/plugin/quarterOfYear"));
|
|
11
11
|
var _constants = require("../constants");
|
|
12
12
|
var _chartUtils = require("./chart-utils");
|
|
13
|
+
var _index = require("./index");
|
|
13
14
|
_dayjs.default.extend(_quarterOfYear.default);
|
|
14
|
-
|
|
15
|
+
const dayOfWeekMap = {
|
|
16
|
+
'Sunday': 0,
|
|
17
|
+
'Monday': 1,
|
|
18
|
+
'Tuesday': 2,
|
|
19
|
+
'Wednesday': 3,
|
|
20
|
+
'Thursday': 4,
|
|
21
|
+
'Friday': 5,
|
|
22
|
+
'Saturday': 6
|
|
23
|
+
};
|
|
24
|
+
function getCompareDate(dateGranularity, source) {
|
|
15
25
|
const currentDate = (0, _dayjs.default)();
|
|
16
26
|
switch (dateGranularity) {
|
|
17
27
|
case _constants.CHART_SUMMARY_TYPE.DAY:
|
|
@@ -25,7 +35,10 @@ function getCompareDate(dateGranularity) {
|
|
|
25
35
|
}
|
|
26
36
|
case _constants.CHART_SUMMARY_TYPE.WEEK:
|
|
27
37
|
{
|
|
28
|
-
|
|
38
|
+
var _dayOfWeekMap$firstDa;
|
|
39
|
+
const firstDayOfWeek = (0, _index.getFirstDayOfWeekForGroupby)(source);
|
|
40
|
+
const startDayIndex = (_dayOfWeekMap$firstDa = dayOfWeekMap[firstDayOfWeek]) !== null && _dayOfWeekMap$firstDa !== void 0 ? _dayOfWeekMap$firstDa : 0; // default to Sunday
|
|
41
|
+
const currentWeek = (0, _dayjs.default)().day(startDayIndex);
|
|
29
42
|
const compareDate = (0, _dayjs.default)(currentWeek).subtract(1, 'weeks').format('YYYY-MM-DD');
|
|
30
43
|
const comparedDate = (0, _dayjs.default)(currentWeek).subtract(2, 'weeks').format('YYYY-MM-DD');
|
|
31
44
|
return {
|
package/dist/view/index.css
CHANGED
|
@@ -30,10 +30,6 @@
|
|
|
30
30
|
height: 100%
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
.sea-chart-formatter .sea-chart-cavans-container.has-title {
|
|
34
|
-
height: calc(100% - 41px);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
33
|
.sea-chart-formatter .sea-chart-table-formatter-container:hover {
|
|
38
34
|
overflow: auto;
|
|
39
35
|
}
|
|
@@ -49,10 +45,8 @@
|
|
|
49
45
|
.sea-chart-formatter .sea-chart-container {
|
|
50
46
|
font-size: 12px;
|
|
51
47
|
position: absolute;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
top: 2%;
|
|
55
|
-
bottom: 8%;
|
|
48
|
+
width: 100%;
|
|
49
|
+
height: 100%;
|
|
56
50
|
}
|
|
57
51
|
|
|
58
52
|
.sea-chart-formatter .sea-chart-container.plugin-number-card,
|
package/dist/view/index.js
CHANGED
|
@@ -248,7 +248,7 @@ class View extends _react.default.PureComponent {
|
|
|
248
248
|
});
|
|
249
249
|
}
|
|
250
250
|
render() {
|
|
251
|
-
var
|
|
251
|
+
var _chart$config3;
|
|
252
252
|
const {
|
|
253
253
|
// style
|
|
254
254
|
className,
|
|
@@ -283,10 +283,6 @@ class View extends _react.default.PureComponent {
|
|
|
283
283
|
const {
|
|
284
284
|
type: chartType
|
|
285
285
|
} = config;
|
|
286
|
-
const {
|
|
287
|
-
title
|
|
288
|
-
} = style_config;
|
|
289
|
-
const hasTitle = title && ((_title$text = title.text) === null || _title$text === void 0 ? void 0 : _title$text.length);
|
|
290
286
|
const validClassName = (0, _classnames.default)('sea-chart-formatter', className);
|
|
291
287
|
const tipBackgroundColorClassName = 'sea-chart-formatter-tip';
|
|
292
288
|
if (!isCalculated) {
|
|
@@ -319,9 +315,7 @@ class View extends _react.default.PureComponent {
|
|
|
319
315
|
chart: chart
|
|
320
316
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
321
317
|
id: "sea-chart-cavans-container-".concat(chart.id),
|
|
322
|
-
className: (0, _classnames.default)('sea-chart-cavans-container'
|
|
323
|
-
'has-title': hasTitle
|
|
324
|
-
})
|
|
318
|
+
className: (0, _classnames.default)('sea-chart-cavans-container')
|
|
325
319
|
}, /*#__PURE__*/_react.default.createElement(_wrapper.default, {
|
|
326
320
|
chart: chart,
|
|
327
321
|
data: data,
|
|
@@ -339,6 +333,18 @@ class View extends _react.default.PureComponent {
|
|
|
339
333
|
}))));
|
|
340
334
|
}
|
|
341
335
|
}
|
|
336
|
+
View.defaultProps = {
|
|
337
|
+
canvasStyle: {},
|
|
338
|
+
tables: [],
|
|
339
|
+
chart: {
|
|
340
|
+
id: '',
|
|
341
|
+
config: {},
|
|
342
|
+
style_config: {}
|
|
343
|
+
},
|
|
344
|
+
collaborators: [],
|
|
345
|
+
globalTheme: _constants.THEME_NAME_MAP.LIGHT,
|
|
346
|
+
isCalculateByView: false
|
|
347
|
+
};
|
|
342
348
|
const propTypes = exports.propTypes = {
|
|
343
349
|
// style
|
|
344
350
|
className: _propTypes.default.string,
|
|
@@ -377,5 +383,4 @@ const defaultProps = exports.defaultProps = {
|
|
|
377
383
|
globalTheme: _constants.THEME_NAME_MAP.LIGHT,
|
|
378
384
|
isCalculateByView: false
|
|
379
385
|
};
|
|
380
|
-
View.defaultProps = defaultProps;
|
|
381
386
|
var _default = exports.default = View;
|
|
@@ -48,7 +48,7 @@ class AreaGroup extends _chartComponent.default {
|
|
|
48
48
|
result: data,
|
|
49
49
|
customRender
|
|
50
50
|
} = this.props;
|
|
51
|
-
data = _utils.BaseUtils.formatEmptyName(data, '', _intl.default.get('Empty'));
|
|
51
|
+
data = _utils.BaseUtils.formatEmptyName(data, 'group_name', _intl.default.get('Empty'));
|
|
52
52
|
if (!Array.isArray(data)) return;
|
|
53
53
|
this.draw(data);
|
|
54
54
|
(0, _utils.isFunction)(customRender) && customRender(this.chart);
|
|
@@ -300,12 +300,16 @@ class AreaGroup extends _chartComponent.default {
|
|
|
300
300
|
const newTooltipData = {
|
|
301
301
|
title: title,
|
|
302
302
|
items: data.map(item => {
|
|
303
|
+
const groupName = item.group_name || _intl.default.get('Empty');
|
|
303
304
|
return {
|
|
304
|
-
color: this.colorMap[
|
|
305
|
-
name:
|
|
305
|
+
color: this.colorMap[groupName],
|
|
306
|
+
name: groupName,
|
|
306
307
|
value: _utils.BaseUtils.getSummaryValueDisplayString(summaryColumn, item.value, y_axis_summary_method)
|
|
307
308
|
};
|
|
308
|
-
})
|
|
309
|
+
}).sort((a, b) => String(a.name).localeCompare(String(b.name), undefined, {
|
|
310
|
+
numeric: true,
|
|
311
|
+
sensitivity: 'base'
|
|
312
|
+
}))
|
|
309
313
|
};
|
|
310
314
|
this.setState({
|
|
311
315
|
tooltipData: newTooltipData
|
|
@@ -332,12 +336,16 @@ class AreaGroup extends _chartComponent.default {
|
|
|
332
336
|
const newTooltipData = {
|
|
333
337
|
title: title,
|
|
334
338
|
items: data.map(item => {
|
|
339
|
+
const groupName = item.group_name || _intl.default.get('Empty');
|
|
335
340
|
return {
|
|
336
|
-
color: this.colorMap[
|
|
337
|
-
name:
|
|
341
|
+
color: this.colorMap[groupName],
|
|
342
|
+
name: groupName,
|
|
338
343
|
value: _utils.BaseUtils.getSummaryValueDisplayString(summaryColumn, item.value, y_axis_summary_method)
|
|
339
344
|
};
|
|
340
|
-
})
|
|
345
|
+
}).sort((a, b) => String(a.name).localeCompare(String(b.name), undefined, {
|
|
346
|
+
numeric: true,
|
|
347
|
+
sensitivity: 'base'
|
|
348
|
+
}))
|
|
341
349
|
};
|
|
342
350
|
this.setState({
|
|
343
351
|
tooltipData: newTooltipData
|
|
@@ -196,7 +196,6 @@ class BarCompare extends _chartComponent.default {
|
|
|
196
196
|
const theme = _constants.CHART_THEME_COLOR[globalTheme];
|
|
197
197
|
const {
|
|
198
198
|
label_font_size,
|
|
199
|
-
y_axis_auto_range,
|
|
200
199
|
y_axis_min,
|
|
201
200
|
y_axis_max,
|
|
202
201
|
increase_line_color,
|
|
@@ -207,9 +206,26 @@ class BarCompare extends _chartComponent.default {
|
|
|
207
206
|
height: chartHeight,
|
|
208
207
|
insertPadding
|
|
209
208
|
} = this.chartBoundingClientRect;
|
|
209
|
+
if (!Array.isArray(increaseData) || increaseData.length === 0) return;
|
|
210
210
|
const circleData = increaseData.map(() => ({}));
|
|
211
211
|
const lineX = d3.scaleBand().domain(increaseData.map(d => d.name)).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.5).paddingOuter(0.1);
|
|
212
|
-
const
|
|
212
|
+
const autoMin = d3.min(increaseData, d => d.value);
|
|
213
|
+
const autoMax = d3.max(increaseData, d => d.value);
|
|
214
|
+
let min, max;
|
|
215
|
+
if (!(y_axis_min && y_axis_max)) {
|
|
216
|
+
min = autoMin;
|
|
217
|
+
max = autoMax;
|
|
218
|
+
} else {
|
|
219
|
+
min = y_axis_min;
|
|
220
|
+
max = y_axis_max;
|
|
221
|
+
}
|
|
222
|
+
let yDomain = [min, max];
|
|
223
|
+
// avoid y axis range is invalid
|
|
224
|
+
if (min === max) {
|
|
225
|
+
const padding = min === 0 ? 1 : Math.max(Math.abs(min) * 0.1, 0.1);
|
|
226
|
+
yDomain = [min - padding, max + padding];
|
|
227
|
+
}
|
|
228
|
+
const lineY = d3.scaleLinear().domain(yDomain).range([chartHeight - insertPadding, insertPadding]);
|
|
213
229
|
const line = d3.line().x((d, index) => {
|
|
214
230
|
const x = lineX(d.name) + lineX.bandwidth() / 2;
|
|
215
231
|
circleData[index]['x'] = x;
|
|
@@ -182,16 +182,39 @@ class BarCustom extends _chartComponent.default {
|
|
|
182
182
|
const height = y(d[0][0]) - y(d[0][1]);
|
|
183
183
|
return isNaN(height) ? 0 : height;
|
|
184
184
|
}).attr('fill', d => color(d.key)).attr('data-value', d => d.stackData.value).attr('data-rectId', d => d.stackData.slugId).attr('data-groupName', d => d.stackData.group_name).attr('data-title', d => d.stackData.name).call(g => {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
185
|
+
const {
|
|
186
|
+
borderRadius
|
|
187
|
+
} = this.chartBoundingClientRect;
|
|
188
|
+
const xWidth = x.bandwidth();
|
|
189
|
+
const stackGroupNodes = Array.from(g._parents);
|
|
190
|
+
const nameGroups = [];
|
|
191
|
+
stackGroupNodes.forEach(stackGroup => {
|
|
192
|
+
const nameGroup = stackGroup.parentNode;
|
|
193
|
+
if (nameGroup && !nameGroups.includes(nameGroup)) {
|
|
194
|
+
nameGroups.push(nameGroup);
|
|
191
195
|
}
|
|
192
196
|
});
|
|
197
|
+
nameGroups.forEach(nameGroup => {
|
|
198
|
+
const stackGroups = Array.from(nameGroup.children);
|
|
199
|
+
let groupBorderRadius = Infinity;
|
|
200
|
+
stackGroups.forEach(stackGroup => {
|
|
201
|
+
const topRect = Array.from(stackGroup.children).reverse().find(rect => Number(rect.getAttribute('height')) !== 0);
|
|
202
|
+
if (!topRect) return;
|
|
203
|
+
const rectHeight = Number(topRect.getAttribute('height'));
|
|
204
|
+
const computedBorderRadius = Math.min(xWidth * borderRadius, rectHeight / 2, xWidth / 2);
|
|
205
|
+
groupBorderRadius = Math.min(groupBorderRadius, computedBorderRadius);
|
|
206
|
+
});
|
|
207
|
+
if (!Number.isFinite(groupBorderRadius)) {
|
|
208
|
+
groupBorderRadius = 0;
|
|
209
|
+
}
|
|
210
|
+
stackGroups.forEach(stackGroup => {
|
|
211
|
+
const topRect = Array.from(stackGroup.children).reverse().find(rect => Number(rect.getAttribute('height')) !== 0);
|
|
212
|
+
if (!topRect) return;
|
|
213
|
+
this.addMaskRect(stackGroup, topRect, xWidth, color, groupBorderRadius);
|
|
214
|
+
});
|
|
215
|
+
});
|
|
193
216
|
if (display_each_block_data) {
|
|
194
|
-
this.handleLabelToRectCenter(g,
|
|
217
|
+
this.handleLabelToRectCenter(g, xWidth);
|
|
195
218
|
}
|
|
196
219
|
}).on('click', (event, data) => {
|
|
197
220
|
this.props.toggleRecords(data);
|
|
@@ -241,10 +264,13 @@ class BarCustom extends _chartComponent.default {
|
|
|
241
264
|
});
|
|
242
265
|
});
|
|
243
266
|
};
|
|
244
|
-
this.addMaskRect = (topG, rect, xWidth, colorScale) => {
|
|
267
|
+
this.addMaskRect = (topG, rect, xWidth, colorScale, borderRadiusVal) => {
|
|
245
268
|
const {
|
|
246
269
|
borderRadius
|
|
247
270
|
} = this.chartBoundingClientRect;
|
|
271
|
+
const rectHeight = Number(rect.getAttribute('height'));
|
|
272
|
+
const computedBorderRadius = Math.min(xWidth * borderRadius, rectHeight / 2, xWidth / 2);
|
|
273
|
+
const safeBorderRadius = Math.min(borderRadiusVal !== null && borderRadiusVal !== void 0 ? borderRadiusVal : computedBorderRadius, rectHeight / 2, xWidth / 2);
|
|
248
274
|
// Add mask rect
|
|
249
275
|
d3.select(topG).append('foreignObject').attr('class', 'stack-wrapper').attr('opacity', rect.getAttribute('opacity')).attr('x', rect.getAttribute('x')).attr('data-x', topG.parentNode.getAttribute('data-transform')).attr('y', rect.getAttribute('y')).attr('width', xWidth).attr('height', rect.getAttribute('height')).attr('data-groupName', rect.getAttribute('data-groupName')).attr('data-value', rect.getAttribute('data-value')).attr('data-title', rect.getAttribute('data-title')).attr('data-rectId', rect.getAttribute('data-rectId')).on('click', (event, data) => {
|
|
250
276
|
this.props.toggleRecords(data);
|
|
@@ -256,7 +282,7 @@ class BarCustom extends _chartComponent.default {
|
|
|
256
282
|
}).on('mouseleave', (event, data) => {
|
|
257
283
|
this.hiddenTooltip();
|
|
258
284
|
this.handleStacksAcitveAndInActiveState('active', event);
|
|
259
|
-
}).append('xhtml:div').attr('class', 'stack').attr('data-rectId', rect.getAttribute('data-rectId')).attr('style', "width: 100%; height: 100%; background-color: ".concat(rect.getAttribute('fill'), "; border-radius: ").concat(
|
|
285
|
+
}).append('xhtml:div').attr('class', 'stack').attr('data-rectId', rect.getAttribute('data-rectId')).attr('style', "width: 100%; height: 100%; background-color: ".concat(rect.getAttribute('fill'), "; border-radius: ").concat(safeBorderRadius, "px ").concat(safeBorderRadius, "px 0px 0px"));
|
|
260
286
|
|
|
261
287
|
// Remove old rect
|
|
262
288
|
d3.select(rect).remove();
|