@seafile/sdoc-editor 0.3.25 → 0.3.26-2
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/seafile-api.js +20 -0
- package/dist/basic-sdk/constants/index.js +2 -1
- package/dist/basic-sdk/editor/sdoc-editor.js +20 -2
- package/dist/basic-sdk/extension/constants/element-type.js +1 -0
- package/dist/basic-sdk/extension/constants/index.js +2 -2
- package/dist/basic-sdk/extension/constants/menus-config.js +6 -1
- package/dist/basic-sdk/extension/plugins/chart/chart-components/base-setting/index.js +46 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/chart-type-setting/index.css +29 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/chart-type-setting/index.js +23 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/column-setting.js +119 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/data-sort-setting.js +54 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/date-granularities.js +55 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/dtable-select-setting.js +86 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/geolocation-granularities.js +97 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/groupby-numeric-item.js +108 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/groupby-numeric-items.js +87 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/include-empty-setting.js +35 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/summary-field-setting.js +64 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/summary-method-setting.js +61 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/summary-type-setting.js +74 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/x-axis-group-setting.js +108 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/common-settings/y-axis-group-settings.js +182 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/common-add-tool.js +23 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/common-hooks.js +15 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/constants.js +10 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/custom-select/index.js +98 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/custom-select/option-group.js +236 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/custom-select/option.js +40 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/custom-select/select.css +135 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/date-translate.js +54 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/department-editor/department-multiple-select.js +146 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/department-editor/department-single-select.js +272 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/department-editor/index.css +209 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/department-editor/index.js +98 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/department-editor/selected-departments.js +85 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/dtable-search-input.js +127 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover-widgets/collaborator-filter.js +106 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover-widgets/department-multiple-select-filter.js +86 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover-widgets/department-single-select-filter.js +85 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover-widgets/filter-calendar.js +166 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover-widgets/filter-item-utils.js +144 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover-widgets/filter-item.js +679 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover-widgets/filters-list.css +320 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover-widgets/filters-list.js +121 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover-widgets/rate-item.js +72 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filter-popover.js +208 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/filters-popover.css +30 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/index.css +18 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/index.js +79 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/data-filter-setting/utils.js +531 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/seatable-radio/index.js +28 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/seatable-radio/style.css +52 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/table-setting/index.js +46 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/toggle-setting/index.js +27 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-components/toggle-setting/style.css +29 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-edit-dialog/index.css +22 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-edit-dialog/index.js +111 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-setting/index.css +24 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-setting/index.js +120 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-utils/common-utils/base-utils.js +430 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-utils/common-utils/dtable-utils.js +144 -0
- package/dist/basic-sdk/extension/plugins/chart/chart-utils/histogram-bar-utils.js +83 -0
- package/dist/basic-sdk/extension/plugins/chart/constants/date-constants.js +9 -0
- package/dist/basic-sdk/extension/plugins/chart/constants/geolocation-constants.js +11 -0
- package/dist/basic-sdk/extension/plugins/chart/constants/index.js +109 -0
- package/dist/basic-sdk/extension/plugins/chart/constants/special-column-types.js +7 -0
- package/dist/basic-sdk/extension/plugins/chart/constants/summary-constants.js +18 -0
- package/dist/basic-sdk/extension/plugins/chart/helpers.js +98 -0
- package/dist/basic-sdk/extension/plugins/chart/hover-menu/index.css +55 -0
- package/dist/basic-sdk/extension/plugins/chart/hover-menu/index.js +54 -0
- package/dist/basic-sdk/extension/plugins/chart/index.js +12 -0
- package/dist/basic-sdk/extension/plugins/chart/menu/index.js +23 -0
- package/dist/basic-sdk/extension/plugins/chart/model.js +34 -0
- package/dist/basic-sdk/extension/plugins/chart/plugin.js +20 -0
- package/dist/basic-sdk/extension/plugins/chart/render-elem.css +26 -0
- package/dist/basic-sdk/extension/plugins/chart/render-elem.js +229 -0
- package/dist/basic-sdk/extension/plugins/index.js +3 -2
- package/dist/basic-sdk/extension/plugins/link/hover/index.js +3 -1
- package/dist/basic-sdk/extension/plugins/link/render-elem.js +4 -3
- package/dist/basic-sdk/extension/render/custom-element.js +10 -4
- package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +2 -1
- package/dist/components/doc-operations/more-operations.js +21 -12
- package/dist/constants/index.js +3 -0
- package/dist/context.js +44 -0
- package/package.json +9 -1
- package/public/locales/en/sdoc-editor.json +34 -1
- package/public/locales/zh_CN/sdoc-editor.json +35 -1
- package/public/media/{sdoc-editor-font.css → iconfont.css} +10 -10
- package/public/media/sdoc-editor-font/iconfont.eot +0 -0
- package/public/media/sdoc-editor-font/iconfont.svg +2 -2
- package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
.filter-popover .popover {
|
|
2
|
+
max-width: none;
|
|
3
|
+
min-width: 300px;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.filter-popover .popover-add-tool {
|
|
7
|
+
border-top: none;
|
|
8
|
+
color: #555555;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.filter-popover .popover-add-tool.disabled {
|
|
12
|
+
color: #c2c2c2;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.filter-popover .popover-add-tool.disabled:hover {
|
|
16
|
+
cursor: not-allowed;
|
|
17
|
+
background: #fff;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.filter-popover .popover-add-tool .popover-add-icon {
|
|
21
|
+
margin-right: 14px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.filter-popover .filter-popover-footer {
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
justify-content: flex-end;
|
|
28
|
+
padding: 1rem;
|
|
29
|
+
border-top: 1px solid #e9ecef;
|
|
30
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.seatable-app-custom-edit-page .app-custom-page-statistic-data-filter {
|
|
2
|
+
width: 100%;
|
|
3
|
+
padding: 3px 4px;
|
|
4
|
+
border-radius: 4px;
|
|
5
|
+
line-height: 22px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.seatable-app-custom-edit-page .app-custom-page-statistic-data-filter:hover {
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
background-color: #efefef;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.seatable-app-custom-edit-page .app-custom-page-statistic-data-filter .dtable-icon-filter {
|
|
14
|
+
font-size: 14px;
|
|
15
|
+
color: #666;
|
|
16
|
+
margin-right: 10px;
|
|
17
|
+
}
|
|
18
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import React, { Component } from 'react';
|
|
3
|
+
import { withTranslation } from 'react-i18next';
|
|
4
|
+
import { Label, FormGroup } from 'reactstrap';
|
|
5
|
+
import MediaQuery from 'react-responsive';
|
|
6
|
+
import FilterPopover from './filter-popover';
|
|
7
|
+
import { eventStopPropagation } from '../../../../../utils/mouse-event';
|
|
8
|
+
import context from '../../../../../../context';
|
|
9
|
+
import './index.css';
|
|
10
|
+
class DataFilter extends Component {
|
|
11
|
+
constructor(props) {
|
|
12
|
+
super(props);
|
|
13
|
+
this.toggleFilterPopover = event => {
|
|
14
|
+
eventStopPropagation(event);
|
|
15
|
+
this.setState({
|
|
16
|
+
isFilterSetterShow: !this.state.isFilterSetterShow
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
this.updateFilters = update => {
|
|
20
|
+
const {
|
|
21
|
+
statItem
|
|
22
|
+
} = this.props;
|
|
23
|
+
this.props.updateSetting({
|
|
24
|
+
config: _objectSpread(_objectSpread({}, statItem), update)
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
this.state = {
|
|
28
|
+
isFilterSetterShow: false
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
render() {
|
|
32
|
+
const {
|
|
33
|
+
tables,
|
|
34
|
+
t,
|
|
35
|
+
statItem
|
|
36
|
+
} = this.props;
|
|
37
|
+
const {
|
|
38
|
+
filters,
|
|
39
|
+
filter_conjunction,
|
|
40
|
+
table_id
|
|
41
|
+
} = statItem;
|
|
42
|
+
const selectedTable = tables.find(item => item.id === table_id);
|
|
43
|
+
const collaborators = [];
|
|
44
|
+
// const collaborators = context.getCollaboratorsFromCache();
|
|
45
|
+
let filterMessage = t('Filter');
|
|
46
|
+
if (filters.length === 1) {
|
|
47
|
+
filterMessage = t('1 Filter');
|
|
48
|
+
} else if (filters.length > 1) {
|
|
49
|
+
filterMessage = filters.length + ' ' + t('Filters');
|
|
50
|
+
}
|
|
51
|
+
return /*#__PURE__*/React.createElement(FormGroup, {
|
|
52
|
+
className: "statistics-parameter-item"
|
|
53
|
+
}, /*#__PURE__*/React.createElement(Label, null, t('Data_settings')), selectedTable ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
54
|
+
id: "app-custom-page-statistic-data-filter",
|
|
55
|
+
className: "app-custom-page-statistic-data-filter",
|
|
56
|
+
onClick: this.toggleFilterPopover
|
|
57
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
58
|
+
className: "dtable-font dtable-icon-filter"
|
|
59
|
+
}), /*#__PURE__*/React.createElement("span", null, filterMessage)), this.state.isFilterSetterShow && /*#__PURE__*/React.createElement(MediaQuery, {
|
|
60
|
+
query: "(min-width: 767.8px)"
|
|
61
|
+
}, /*#__PURE__*/React.createElement(FilterPopover, {
|
|
62
|
+
isNeedSubmit: true,
|
|
63
|
+
isPre: true,
|
|
64
|
+
target: "app-custom-page-statistic-data-filter",
|
|
65
|
+
filters: filters,
|
|
66
|
+
filterConjunction: filter_conjunction,
|
|
67
|
+
columns: selectedTable.columns,
|
|
68
|
+
collaborators: collaborators,
|
|
69
|
+
hidePopover: this.toggleFilterPopover,
|
|
70
|
+
update: this.updateFilters
|
|
71
|
+
}))) : /*#__PURE__*/React.createElement("div", {
|
|
72
|
+
id: "app-custom-page-statistic-data-filter",
|
|
73
|
+
className: "app-custom-page-statistic-data-filter disabled"
|
|
74
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
75
|
+
className: "dtable-font dtable-icon-filter"
|
|
76
|
+
}), /*#__PURE__*/React.createElement("span", null, filterMessage)));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export default withTranslation('sdoc-editor')(DataFilter);
|
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import { CellType, COLLABORATOR_COLUMN_TYPES, DATE_COLUMN_OPTIONS, FILTER_PREDICATE_TYPE, FILTER_COLUMN_OPTIONS, FILTER_TERM_MODIFIER_TYPE, FORMULA_COLUMN_TYPES_MAP, FORMULA_RESULT_TYPE, filterTermModifierNotWithin, filterTermModifierIsWithin, isDateColumn, isNumericColumn, DEFAULT_DATE_FORMAT } from 'dtable-utils';
|
|
3
|
+
import context from '../../../../../../context';
|
|
4
|
+
export const SPECIAL_TERM_TYPE = {
|
|
5
|
+
CREATOR: 'creator',
|
|
6
|
+
SINGLE_SELECT: 'single_select',
|
|
7
|
+
MULTIPLE_SELECT: 'multiple_select',
|
|
8
|
+
COLLABORATOR: 'collaborator',
|
|
9
|
+
RATE: 'rate'
|
|
10
|
+
};
|
|
11
|
+
export const SIMPLE_TEXT_INPUT_COLUMNS_MAP = {
|
|
12
|
+
[CellType.TEXT]: true,
|
|
13
|
+
[CellType.LONG_TEXT]: true,
|
|
14
|
+
[CellType.GEOLOCATION]: true,
|
|
15
|
+
[CellType.AUTO_NUMBER]: true,
|
|
16
|
+
[CellType.EMAIL]: true,
|
|
17
|
+
[CellType.URL]: true,
|
|
18
|
+
[CellType.IMAGE]: true,
|
|
19
|
+
[CellType.FILE]: true,
|
|
20
|
+
[FORMULA_RESULT_TYPE.STRING]: true,
|
|
21
|
+
[FORMULA_RESULT_TYPE.BOOL]: true
|
|
22
|
+
};
|
|
23
|
+
export const DATE_LABEL_MAP = {
|
|
24
|
+
[FILTER_TERM_MODIFIER_TYPE.EXACT_DATE]: true,
|
|
25
|
+
[FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_AGO]: true,
|
|
26
|
+
[FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_FROM_NOW]: true,
|
|
27
|
+
[FILTER_TERM_MODIFIER_TYPE.THE_NEXT_NUMBERS_OF_DAYS]: true,
|
|
28
|
+
[FILTER_TERM_MODIFIER_TYPE.THE_PAST_NUMBERS_OF_DAYS]: true
|
|
29
|
+
};
|
|
30
|
+
const ARRAY_PREDICATE = {
|
|
31
|
+
[FILTER_PREDICATE_TYPE.IS_ANY_OF]: true,
|
|
32
|
+
[FILTER_PREDICATE_TYPE.IS_NONE_OF]: true
|
|
33
|
+
};
|
|
34
|
+
const STRING_PREDICATE = {
|
|
35
|
+
[FILTER_PREDICATE_TYPE.IS]: true,
|
|
36
|
+
[FILTER_PREDICATE_TYPE.IS_NOT]: true
|
|
37
|
+
};
|
|
38
|
+
export const DATE_EMPTY_LABEL_MAP = {
|
|
39
|
+
[FILTER_PREDICATE_TYPE.EMPTY]: true,
|
|
40
|
+
[FILTER_PREDICATE_TYPE.NOT_EMPTY]: true
|
|
41
|
+
};
|
|
42
|
+
const MULTIPLE_SELECTOR_COLUMNS = [CellType.MULTIPLE_SELECT, CellType.COLLABORATOR, CellType.CREATOR, CellType.LAST_MODIFIER];
|
|
43
|
+
export const getEventClassName = e => {
|
|
44
|
+
// svg mouseEvent event.target.className is an object
|
|
45
|
+
if (!e || !e.target) return '';
|
|
46
|
+
return e.target.getAttribute('class') || '';
|
|
47
|
+
};
|
|
48
|
+
export const isFunction = functionToCheck => {
|
|
49
|
+
const getType = {};
|
|
50
|
+
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
|
|
51
|
+
};
|
|
52
|
+
const isArrayFilterTermByArrayType = array_type => {
|
|
53
|
+
return COLLABORATOR_COLUMN_TYPES.includes(array_type) || array_type === CellType.SINGLE_SELECT || array_type === CellType.MULTIPLE_SELECT;
|
|
54
|
+
};
|
|
55
|
+
export const isFilterTermArray = (column, filterPredicate) => {
|
|
56
|
+
const {
|
|
57
|
+
type,
|
|
58
|
+
data
|
|
59
|
+
} = column;
|
|
60
|
+
if (MULTIPLE_SELECTOR_COLUMNS.includes(type)) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
if (type === CellType.SINGLE_SELECT && [FILTER_PREDICATE_TYPE.IS_ANY_OF, FILTER_PREDICATE_TYPE.IS_NONE_OF].includes(filterPredicate)) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
if (FORMULA_COLUMN_TYPES_MAP[type]) {
|
|
67
|
+
const {
|
|
68
|
+
result_type,
|
|
69
|
+
array_type
|
|
70
|
+
} = data || {};
|
|
71
|
+
if (result_type !== FORMULA_RESULT_TYPE.ARRAY) return false;
|
|
72
|
+
return isArrayFilterTermByArrayType(array_type);
|
|
73
|
+
}
|
|
74
|
+
if (type === CellType.LINK) {
|
|
75
|
+
const {
|
|
76
|
+
array_type
|
|
77
|
+
} = data || {};
|
|
78
|
+
return isArrayFilterTermByArrayType(array_type);
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
};
|
|
82
|
+
export const getUpdatedFilterByCreator = (filter, collaborator) => {
|
|
83
|
+
const multipleSelectType = [FILTER_PREDICATE_TYPE.CONTAINS, FILTER_PREDICATE_TYPE.NOT_CONTAIN];
|
|
84
|
+
let {
|
|
85
|
+
filter_predicate,
|
|
86
|
+
filter_term: filterTerm
|
|
87
|
+
} = filter;
|
|
88
|
+
if (multipleSelectType.includes(filter_predicate)) {
|
|
89
|
+
filterTerm = filterTerm ? filter.filter_term.slice(0) : [];
|
|
90
|
+
let selectedEmail = collaborator.email;
|
|
91
|
+
let collaborator_index = filterTerm.indexOf(selectedEmail);
|
|
92
|
+
if (collaborator_index > -1) {
|
|
93
|
+
filterTerm.splice(collaborator_index, 1);
|
|
94
|
+
} else {
|
|
95
|
+
filterTerm.push(selectedEmail);
|
|
96
|
+
}
|
|
97
|
+
} else {
|
|
98
|
+
if (filterTerm[0] === collaborator.email) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
filterTerm = [collaborator.email];
|
|
102
|
+
}
|
|
103
|
+
return Object.assign({}, filter, {
|
|
104
|
+
filter_term: filterTerm
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
export const getUpdatedFilterBySelectSingle = (filter, columnOption) => {
|
|
108
|
+
let new_filter_term;
|
|
109
|
+
// if predicate is any of / is none of, filter_term is array; else filter_term is string
|
|
110
|
+
if (filter.filter_predicate === FILTER_PREDICATE_TYPE.IS_ANY_OF || filter.filter_predicate === FILTER_PREDICATE_TYPE.IS_NONE_OF) {
|
|
111
|
+
new_filter_term = Array.isArray(filter.filter_term) ? [...filter.filter_term] : [];
|
|
112
|
+
const index = new_filter_term.indexOf(columnOption.id);
|
|
113
|
+
if (index === -1) {
|
|
114
|
+
new_filter_term.push(columnOption.id);
|
|
115
|
+
} else {
|
|
116
|
+
new_filter_term.splice(index, 1);
|
|
117
|
+
}
|
|
118
|
+
} else {
|
|
119
|
+
new_filter_term = columnOption.id;
|
|
120
|
+
}
|
|
121
|
+
return Object.assign({}, filter, {
|
|
122
|
+
filter_term: new_filter_term
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
export const getUpdatedFilterBySelectMultiple = (filter, columnOption) => {
|
|
126
|
+
let filterTerm = filter.filter_term ? filter.filter_term : [];
|
|
127
|
+
let index = filterTerm.indexOf(columnOption.id);
|
|
128
|
+
if (index > -1) {
|
|
129
|
+
filterTerm.splice(index, 1);
|
|
130
|
+
} else {
|
|
131
|
+
filterTerm.push(columnOption.id);
|
|
132
|
+
}
|
|
133
|
+
return Object.assign({}, filter, {
|
|
134
|
+
filter_term: filterTerm
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
export const getUpdatedFilterByCollaborator = (filter, collaborator) => {
|
|
138
|
+
let filterTerm = filter.filter_term ? filter.filter_term.slice(0) : [];
|
|
139
|
+
let selectedEmail = collaborator.email;
|
|
140
|
+
let collaborator_index = filterTerm.indexOf(selectedEmail);
|
|
141
|
+
if (collaborator_index > -1) {
|
|
142
|
+
filterTerm.splice(collaborator_index, 1);
|
|
143
|
+
} else {
|
|
144
|
+
filterTerm.push(selectedEmail);
|
|
145
|
+
}
|
|
146
|
+
return Object.assign({}, filter, {
|
|
147
|
+
filter_term: filterTerm
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
export const getUpdatedFilterByRate = (filter, value) => {
|
|
151
|
+
if (filter.filter_term === value) {
|
|
152
|
+
return Object.assign({}, filter, {
|
|
153
|
+
filter_term: 0
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return Object.assign({}, filter, {
|
|
157
|
+
filter_term: value
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
export const getColumnOptions = column => {
|
|
161
|
+
const {
|
|
162
|
+
type,
|
|
163
|
+
data
|
|
164
|
+
} = column;
|
|
165
|
+
if (FORMULA_COLUMN_TYPES_MAP[type]) {
|
|
166
|
+
return getFormulaColumnFilterOptions(column);
|
|
167
|
+
}
|
|
168
|
+
if (type === CellType.LINK) {
|
|
169
|
+
const {
|
|
170
|
+
array_type
|
|
171
|
+
} = data || {};
|
|
172
|
+
if (array_type === FORMULA_RESULT_TYPE.BOOL) {
|
|
173
|
+
return FILTER_COLUMN_OPTIONS[CellType.CHECKBOX];
|
|
174
|
+
}
|
|
175
|
+
if (array_type === FORMULA_RESULT_TYPE.STRING) {
|
|
176
|
+
return FILTER_COLUMN_OPTIONS[CellType.TEXT];
|
|
177
|
+
}
|
|
178
|
+
return getFilterOptionsByArrayType(array_type);
|
|
179
|
+
}
|
|
180
|
+
return FILTER_COLUMN_OPTIONS[type] || {};
|
|
181
|
+
};
|
|
182
|
+
const getFormulaColumnFilterOptions = column => {
|
|
183
|
+
const {
|
|
184
|
+
data
|
|
185
|
+
} = column;
|
|
186
|
+
const {
|
|
187
|
+
result_type,
|
|
188
|
+
array_type
|
|
189
|
+
} = data || {};
|
|
190
|
+
if (result_type === FORMULA_RESULT_TYPE.BOOL) {
|
|
191
|
+
return FILTER_COLUMN_OPTIONS[CellType.CHECKBOX];
|
|
192
|
+
}
|
|
193
|
+
if (result_type === FORMULA_RESULT_TYPE.STRING) {
|
|
194
|
+
return FILTER_COLUMN_OPTIONS[CellType.TEXT];
|
|
195
|
+
}
|
|
196
|
+
if ([FORMULA_RESULT_TYPE.NUMBER, FORMULA_RESULT_TYPE.DATE].includes(result_type)) {
|
|
197
|
+
return FILTER_COLUMN_OPTIONS[result_type];
|
|
198
|
+
}
|
|
199
|
+
if (result_type === FORMULA_RESULT_TYPE.ARRAY) {
|
|
200
|
+
return getFilterOptionsByArrayType(array_type);
|
|
201
|
+
}
|
|
202
|
+
return FILTER_COLUMN_OPTIONS[CellType.TEXT];
|
|
203
|
+
};
|
|
204
|
+
const getFilterOptionsByArrayType = array_type => {
|
|
205
|
+
if (!array_type) {
|
|
206
|
+
return {};
|
|
207
|
+
}
|
|
208
|
+
let checkType = array_type;
|
|
209
|
+
if (COLLABORATOR_COLUMN_TYPES.includes(array_type)) {
|
|
210
|
+
checkType = CellType.COLLABORATOR;
|
|
211
|
+
} else if (array_type === CellType.SINGLE_SELECT) {
|
|
212
|
+
checkType = CellType.MULTIPLE_SELECT;
|
|
213
|
+
} else if (DATE_COLUMN_OPTIONS.includes(array_type)) {
|
|
214
|
+
checkType = CellType.DATE;
|
|
215
|
+
} else if (isNumericColumn({
|
|
216
|
+
type: array_type
|
|
217
|
+
})) {
|
|
218
|
+
checkType = CellType.NUMBER;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// only support: is
|
|
222
|
+
if (checkType === CellType.CHECKBOX || checkType === CellType.BOOL) {
|
|
223
|
+
return FILTER_COLUMN_OPTIONS[CellType.CHECKBOX];
|
|
224
|
+
}
|
|
225
|
+
let filterOptions = FILTER_COLUMN_OPTIONS[checkType] || FILTER_COLUMN_OPTIONS[CellType.TEXT];
|
|
226
|
+
let {
|
|
227
|
+
filterPredicateList
|
|
228
|
+
} = filterOptions;
|
|
229
|
+
if (filterPredicateList && !filterPredicateList.includes(FILTER_PREDICATE_TYPE.EMPTY)) {
|
|
230
|
+
filterPredicateList.push(FILTER_PREDICATE_TYPE.EMPTY);
|
|
231
|
+
}
|
|
232
|
+
if (filterPredicateList && !filterPredicateList.includes(FILTER_PREDICATE_TYPE.NOT_EMPTY)) {
|
|
233
|
+
filterPredicateList.push(FILTER_PREDICATE_TYPE.NOT_EMPTY);
|
|
234
|
+
}
|
|
235
|
+
return filterOptions;
|
|
236
|
+
};
|
|
237
|
+
export const getFilterByColumn = function (column) {
|
|
238
|
+
let filter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
239
|
+
let {
|
|
240
|
+
type: columnType,
|
|
241
|
+
data: columnData
|
|
242
|
+
} = column;
|
|
243
|
+
let {
|
|
244
|
+
filterPredicateList
|
|
245
|
+
} = getColumnOptions(column);
|
|
246
|
+
if (!filterPredicateList) return;
|
|
247
|
+
let filterPredicate = filterPredicateList[0];
|
|
248
|
+
let updatedFilter = Object.assign({}, filter, {
|
|
249
|
+
column_key: column.key,
|
|
250
|
+
filter_predicate: filterPredicate
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
// text | number | long-text | url | email
|
|
254
|
+
// auto-number | geolocation | duration
|
|
255
|
+
updatedFilter.filter_term = '';
|
|
256
|
+
|
|
257
|
+
// checkbox
|
|
258
|
+
if (columnType === CellType.CHECKBOX) {
|
|
259
|
+
updatedFilter.filter_term = false;
|
|
260
|
+
return updatedFilter;
|
|
261
|
+
}
|
|
262
|
+
// rate
|
|
263
|
+
if (columnType === CellType.RATE) {
|
|
264
|
+
const {
|
|
265
|
+
rate_max_number
|
|
266
|
+
} = columnData;
|
|
267
|
+
updatedFilter.filter_term = rate_max_number;
|
|
268
|
+
return updatedFilter;
|
|
269
|
+
}
|
|
270
|
+
// single-select | multiple-select | collaborators | creator | last-modifier
|
|
271
|
+
if (isFilterTermArray(column, filterPredicate)) {
|
|
272
|
+
updatedFilter.filter_term = [];
|
|
273
|
+
return updatedFilter;
|
|
274
|
+
}
|
|
275
|
+
// date | ctime | mtime
|
|
276
|
+
if (isDateColumn(column)) {
|
|
277
|
+
let filterTermModifier = filterPredicate === FILTER_PREDICATE_TYPE.IS_WITHIN ? filterTermModifierIsWithin[0] : filterTermModifierNotWithin[0];
|
|
278
|
+
updatedFilter.filter_term_modifier = filterTermModifier;
|
|
279
|
+
updatedFilter.filter_term = '';
|
|
280
|
+
return updatedFilter;
|
|
281
|
+
}
|
|
282
|
+
// formula | link-formula
|
|
283
|
+
if (FORMULA_COLUMN_TYPES_MAP[columnType]) {
|
|
284
|
+
const newUpdatedFilter = getFormulaColumnFilter(column, filter);
|
|
285
|
+
if (newUpdatedFilter) {
|
|
286
|
+
updatedFilter.filter_term = newUpdatedFilter.filter_term;
|
|
287
|
+
}
|
|
288
|
+
return updatedFilter;
|
|
289
|
+
}
|
|
290
|
+
// link
|
|
291
|
+
if (columnType === CellType.LINK) {
|
|
292
|
+
let {
|
|
293
|
+
array_type,
|
|
294
|
+
array_data
|
|
295
|
+
} = columnData || {};
|
|
296
|
+
if (array_type) {
|
|
297
|
+
if (array_type === FORMULA_RESULT_TYPE.BOOL) {
|
|
298
|
+
array_type = CellType.CHECKBOX;
|
|
299
|
+
}
|
|
300
|
+
if (array_type === FORMULA_RESULT_TYPE.STRING) {
|
|
301
|
+
array_type = CellType.TEXT;
|
|
302
|
+
}
|
|
303
|
+
const linkedColumn = {
|
|
304
|
+
key: column.key,
|
|
305
|
+
type: array_type,
|
|
306
|
+
data: array_data
|
|
307
|
+
};
|
|
308
|
+
const newUpdatedFilter = getFilterByColumn(linkedColumn, filter) || {};
|
|
309
|
+
if (newUpdatedFilter) {
|
|
310
|
+
updatedFilter.filter_term = newUpdatedFilter.filter_term;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return updatedFilter;
|
|
314
|
+
}
|
|
315
|
+
return updatedFilter;
|
|
316
|
+
};
|
|
317
|
+
export const getFormulaColumnFilter = (column, filter) => {
|
|
318
|
+
const {
|
|
319
|
+
data
|
|
320
|
+
} = column;
|
|
321
|
+
let {
|
|
322
|
+
result_type,
|
|
323
|
+
array_type,
|
|
324
|
+
array_data
|
|
325
|
+
} = data || {};
|
|
326
|
+
if (result_type === FORMULA_RESULT_TYPE.ARRAY) {
|
|
327
|
+
const linkedColumn = {
|
|
328
|
+
key: column.key,
|
|
329
|
+
type: array_type,
|
|
330
|
+
data: array_data
|
|
331
|
+
};
|
|
332
|
+
return getFilterByColumn(linkedColumn, filter);
|
|
333
|
+
}
|
|
334
|
+
// result_type: string | number | bool | date
|
|
335
|
+
if (result_type === FORMULA_RESULT_TYPE.BOOL) {
|
|
336
|
+
array_type = CellType.CHECKBOX;
|
|
337
|
+
}
|
|
338
|
+
if (result_type === FORMULA_RESULT_TYPE.STRING) {
|
|
339
|
+
array_type = CellType.TEXT;
|
|
340
|
+
}
|
|
341
|
+
const linkedColumn = {
|
|
342
|
+
key: column.key,
|
|
343
|
+
type: array_type,
|
|
344
|
+
data: array_data
|
|
345
|
+
};
|
|
346
|
+
return getFilterByColumn(linkedColumn, filter);
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
// file, image : not support
|
|
350
|
+
// text, long-text, number, single-select, date, ctime, mtime, formula, link, geolocation : string
|
|
351
|
+
// checkbox : boolean
|
|
352
|
+
// multiple-select, collaborator, creator, last modifier : array
|
|
353
|
+
|
|
354
|
+
export const getUpdatedFilterByColumn = (filters, filterIndex, column) => {
|
|
355
|
+
const filter = filters[filterIndex];
|
|
356
|
+
if (filter.column_key === column.key) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
return getFilterByColumn(column, filter);
|
|
360
|
+
};
|
|
361
|
+
export const getUpdatedFilterByPredicate = (filter, column, filterPredicate) => {
|
|
362
|
+
let updatedFilter = Object.assign({}, filter, {
|
|
363
|
+
filter_predicate: filterPredicate
|
|
364
|
+
});
|
|
365
|
+
let {
|
|
366
|
+
type: columnType
|
|
367
|
+
} = column;
|
|
368
|
+
if (columnType === CellType.CHECKBOX) {
|
|
369
|
+
updatedFilter.filter_term = false;
|
|
370
|
+
return updatedFilter;
|
|
371
|
+
}
|
|
372
|
+
if ([CellType.SINGLE_SELECT, CellType.DEPARTMENT_SINGLE_SELECT].includes(columnType)) {
|
|
373
|
+
if (ARRAY_PREDICATE[filterPredicate]) {
|
|
374
|
+
if (ARRAY_PREDICATE[filter.filter_predicate] !== ARRAY_PREDICATE[filterPredicate]) {
|
|
375
|
+
updatedFilter.filter_term = [];
|
|
376
|
+
}
|
|
377
|
+
} else if (STRING_PREDICATE[filterPredicate]) {
|
|
378
|
+
if (STRING_PREDICATE[filter.filter_predicate] !== STRING_PREDICATE[filterPredicate]) {
|
|
379
|
+
updatedFilter.filter_term = '';
|
|
380
|
+
}
|
|
381
|
+
} else {
|
|
382
|
+
updatedFilter.filter_term = '';
|
|
383
|
+
}
|
|
384
|
+
return updatedFilter;
|
|
385
|
+
}
|
|
386
|
+
if ([CellType.CREATOR, CellType.LAST_MODIFIER].includes(columnType)) {
|
|
387
|
+
if (STRING_PREDICATE[filter.filter_predicate] !== STRING_PREDICATE[filterPredicate] || filterPredicate === FILTER_PREDICATE_TYPE.INCLUDE_ME) {
|
|
388
|
+
updatedFilter.filter_term = [];
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if (isFilterTermArray(column, filterPredicate)) {
|
|
392
|
+
if (DATE_EMPTY_LABEL_MAP[filterPredicate] || filterPredicate === FILTER_PREDICATE_TYPE.INCLUDE_ME) {
|
|
393
|
+
updatedFilter.filter_term = [];
|
|
394
|
+
}
|
|
395
|
+
return updatedFilter;
|
|
396
|
+
}
|
|
397
|
+
if (isDateColumn(column)) {
|
|
398
|
+
let filterTermModifier = filterPredicate === FILTER_PREDICATE_TYPE.IS_WITHIN ? filterTermModifierIsWithin[0] : filterTermModifierNotWithin[0];
|
|
399
|
+
updatedFilter.filter_term_modifier = filterTermModifier;
|
|
400
|
+
return updatedFilter;
|
|
401
|
+
}
|
|
402
|
+
return updatedFilter;
|
|
403
|
+
};
|
|
404
|
+
export const getUpdatedFilterByTermModifier = (filter, filterTermModifier) => {
|
|
405
|
+
if (filter.filter_term_modifier === filterTermModifier) {
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
return Object.assign({}, filter, {
|
|
409
|
+
filter_term_modifier: filterTermModifier
|
|
410
|
+
});
|
|
411
|
+
};
|
|
412
|
+
export const getUpdatedFilterByNormalTerm = (filter, column, filterIndex, event) => {
|
|
413
|
+
let filterTerm;
|
|
414
|
+
if (column.type === CellType.CHECKBOX) {
|
|
415
|
+
filterTerm = event.target.checked;
|
|
416
|
+
} else {
|
|
417
|
+
filterTerm = event.target.value;
|
|
418
|
+
}
|
|
419
|
+
if (filter.filter_term === filterTerm) {
|
|
420
|
+
return filter;
|
|
421
|
+
}
|
|
422
|
+
return Object.assign({}, filter, {
|
|
423
|
+
filter_term: filterTerm
|
|
424
|
+
});
|
|
425
|
+
};
|
|
426
|
+
export const getUpdatedFilterBySpecialTerm = (filter, type, value) => {
|
|
427
|
+
switch (type) {
|
|
428
|
+
case SPECIAL_TERM_TYPE.CREATOR:
|
|
429
|
+
{
|
|
430
|
+
return getUpdatedFilterByCreator(filter, value);
|
|
431
|
+
}
|
|
432
|
+
case SPECIAL_TERM_TYPE.SINGLE_SELECT:
|
|
433
|
+
{
|
|
434
|
+
return getUpdatedFilterBySelectSingle(filter, value);
|
|
435
|
+
}
|
|
436
|
+
case SPECIAL_TERM_TYPE.MULTIPLE_SELECT:
|
|
437
|
+
{
|
|
438
|
+
return getUpdatedFilterBySelectMultiple(filter, value);
|
|
439
|
+
}
|
|
440
|
+
case SPECIAL_TERM_TYPE.COLLABORATOR:
|
|
441
|
+
{
|
|
442
|
+
return getUpdatedFilterByCollaborator(filter, value);
|
|
443
|
+
}
|
|
444
|
+
case SPECIAL_TERM_TYPE.RATE:
|
|
445
|
+
{
|
|
446
|
+
return getUpdatedFilterByRate(filter, value);
|
|
447
|
+
}
|
|
448
|
+
default:
|
|
449
|
+
{
|
|
450
|
+
return filter;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
};
|
|
454
|
+
export function getColumnByKey(columnKey, columns) {
|
|
455
|
+
if (!columnKey || !Array.isArray(columns)) {
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
return columns.find(column => column.key === columnKey);
|
|
459
|
+
}
|
|
460
|
+
export const getFormulaAndLinkFilters = (filters, columns) => {
|
|
461
|
+
let formulaFilters = [];
|
|
462
|
+
filters.forEach(filter => {
|
|
463
|
+
const filterColumn = getColumnByKey(filter.column_key, columns);
|
|
464
|
+
const {
|
|
465
|
+
type
|
|
466
|
+
} = filterColumn;
|
|
467
|
+
if (FORMULA_COLUMN_TYPES_MAP[type] || type === CellType.LINK) {
|
|
468
|
+
formulaFilters.push(filter);
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
return formulaFilters;
|
|
472
|
+
};
|
|
473
|
+
export const getNormalizedDepartments = function (departments) {
|
|
474
|
+
let canExpand = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
475
|
+
let parentIdMap = {};
|
|
476
|
+
for (let i = 0; i < departments.length; i++) {
|
|
477
|
+
let item = departments[i];
|
|
478
|
+
parentIdMap[item.parent_id] = true;
|
|
479
|
+
}
|
|
480
|
+
return departments.map(depart => {
|
|
481
|
+
const hasChild = canExpand && !!parentIdMap[depart.id];
|
|
482
|
+
const isExpanded = depart.parent_id === -1 ? true : false;
|
|
483
|
+
return _objectSpread(_objectSpread({}, depart), {}, {
|
|
484
|
+
hasChild,
|
|
485
|
+
isExpanded
|
|
486
|
+
});
|
|
487
|
+
});
|
|
488
|
+
};
|
|
489
|
+
export const searchDepartments = (departments, searchValue) => {
|
|
490
|
+
const validSearchValue = searchValue ? searchValue.trim().toLowerCase() : '';
|
|
491
|
+
const validDepartments = Array.isArray(departments) ? departments : [];
|
|
492
|
+
if (!validSearchValue) return validDepartments;
|
|
493
|
+
return validDepartments.filter(department => {
|
|
494
|
+
const {
|
|
495
|
+
name
|
|
496
|
+
} = department;
|
|
497
|
+
if (!name) return false;
|
|
498
|
+
return name.toString().toLowerCase().indexOf(validSearchValue) > -1;
|
|
499
|
+
});
|
|
500
|
+
};
|
|
501
|
+
export function getDateColumnFormat(column) {
|
|
502
|
+
const format = column && column.data && column.data.format ? column.data.format : DEFAULT_DATE_FORMAT;
|
|
503
|
+
// Old Europe format is D/M/YYYY new format is DD/MM/YYYY
|
|
504
|
+
return format;
|
|
505
|
+
}
|
|
506
|
+
export function isCheckboxColumn(column) {
|
|
507
|
+
let {
|
|
508
|
+
type,
|
|
509
|
+
data
|
|
510
|
+
} = column;
|
|
511
|
+
if (FORMULA_COLUMN_TYPES_MAP[type]) {
|
|
512
|
+
const {
|
|
513
|
+
result_type,
|
|
514
|
+
array_type
|
|
515
|
+
} = data || {};
|
|
516
|
+
if (result_type === FORMULA_RESULT_TYPE.ARRAY) {
|
|
517
|
+
return array_type === CellType.CHECKBOX;
|
|
518
|
+
}
|
|
519
|
+
return false;
|
|
520
|
+
}
|
|
521
|
+
return type === CellType.CHECKBOX;
|
|
522
|
+
}
|
|
523
|
+
export const generateDefaultUser = name => {
|
|
524
|
+
const mediaUrl = context.getSetting('mediaUrl');
|
|
525
|
+
const defaultAvatarUrl = "".concat(mediaUrl, "avatars/default.png");
|
|
526
|
+
return {
|
|
527
|
+
name,
|
|
528
|
+
email: name,
|
|
529
|
+
avatar_url: defaultAvatarUrl
|
|
530
|
+
};
|
|
531
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import classnames from 'classnames';
|
|
3
|
+
import './style.css';
|
|
4
|
+
function SeaTableRadio(props) {
|
|
5
|
+
return /*#__PURE__*/React.createElement("label", {
|
|
6
|
+
className: "seatable-radio"
|
|
7
|
+
}, /*#__PURE__*/React.createElement("input", {
|
|
8
|
+
type: "radio",
|
|
9
|
+
className: "seatable-radio-input",
|
|
10
|
+
checked: props.isChecked,
|
|
11
|
+
onChange: props.disabled ? () => {} : props.onCheckedChange,
|
|
12
|
+
name: props.name,
|
|
13
|
+
value: props.value
|
|
14
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
15
|
+
className: classnames('seatable-radio-indicator', {
|
|
16
|
+
'seatable-radio-selected-indicator': props.isChecked,
|
|
17
|
+
'seatable-radio-disable': props.disabled
|
|
18
|
+
})
|
|
19
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
20
|
+
className: "seatable-radio-description text-truncate"
|
|
21
|
+
}, props.label));
|
|
22
|
+
}
|
|
23
|
+
SeaTableRadio.defaultProps = {
|
|
24
|
+
disabled: false,
|
|
25
|
+
name: 'seatable-radio-input',
|
|
26
|
+
onCheckedChange: () => {}
|
|
27
|
+
};
|
|
28
|
+
export default SeaTableRadio;
|