@seafile/sdoc-editor 1.0.17 → 1.0.18
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/basic-sdk/comment/components/global-comment/index.js +0 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/formatter/index.js +17 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/helpers.js +15 -2
- package/dist/basic-sdk/extension/plugins/seatable-tables/model.js +7 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.js +0 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/index.css +23 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-header.js +6 -3
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-item.js +5 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-list.js +6 -3
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/seatable-table.js +86 -10
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/common-add-tool/index.css +18 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/common-add-tool/index.js +24 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/dtable-search-input/index.js +131 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/date-translate.js +56 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/dayjs.js +4 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/index.js +175 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/collaborator-filter/index.js +107 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/_department-select.css +209 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/_department-utils.js +39 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-multiple-select-filter.js +89 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-multiple-select.js +148 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-single-select-filter.js +90 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-single-select.js +275 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/index.js +3 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/selected-departments.js +84 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/use-click-outside.js +22 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filter-item-utils.js +144 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filter-item.js +696 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filters-list.css +321 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filters-list.js +121 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/number-editor/index.js +161 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/rate-item/index.js +73 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover.css +30 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover.js +200 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filters-utils.js +456 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/index.css +0 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/index.js +81 -7
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-item.js +54 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-popover.js +203 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/index.css +105 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/index.js +89 -8
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/index.css +4 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/index.js +98 -26
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/index.css +83 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/index.js +67 -8
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/sort-popover.js +279 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/sort-utils.js +71 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/utils/utils.js +33 -0
- package/dist/basic-sdk/extension/plugins/table/menu/horizontal-align-popover/index.js +1 -1
- package/dist/basic-sdk/extension/plugins/table/menu/table-context-menu/index.js +1 -2
- package/dist/basic-sdk/socket/socket-client.js +1 -1
- package/dist/pages/document-plugin-editor.js +3 -1
- package/package.json +2 -1
- package/public/locales/cs/sdoc-editor.json +40 -1
- package/public/locales/de/sdoc-editor.json +40 -1
- package/public/locales/en/sdoc-editor.json +40 -1
- package/public/locales/es/sdoc-editor.json +40 -1
- package/public/locales/es_AR/sdoc-editor.json +40 -1
- package/public/locales/es_MX/sdoc-editor.json +40 -1
- package/public/locales/fr/sdoc-editor.json +40 -1
- package/public/locales/it/sdoc-editor.json +40 -1
- package/public/locales/ru/sdoc-editor.json +40 -1
- package/public/locales/zh_CN/sdoc-editor.json +41 -2
- package/dist/basic-sdk/extension/plugins/seatable-tables/setting/index.css +0 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/setting/index.js +0 -6
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import React, { Component } from 'react';
|
|
3
|
+
import isHotkey from 'is-hotkey';
|
|
4
|
+
import { Button, UncontrolledPopover } from 'reactstrap';
|
|
5
|
+
import { withTranslation } from 'react-i18next';
|
|
6
|
+
import { FILTER_COLUMN_OPTIONS, getValidFilters } from 'dtable-utils';
|
|
7
|
+
import CommonAddTool from '../common-add-tool';
|
|
8
|
+
import { getEventClassName } from '../utils/utils';
|
|
9
|
+
import FiltersList from './filter-popover-widgets/filters-list';
|
|
10
|
+
import { getFilterByColumn } from './filters-utils';
|
|
11
|
+
import './filter-popover.css';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* filter = {
|
|
15
|
+
* column_key: '',
|
|
16
|
+
* filter_predicate: '',
|
|
17
|
+
* filter_term: '',
|
|
18
|
+
* filter_term_modifier: '',
|
|
19
|
+
* }
|
|
20
|
+
*/
|
|
21
|
+
class FilterPopover extends Component {
|
|
22
|
+
constructor(props) {
|
|
23
|
+
super(props);
|
|
24
|
+
_defineProperty(this, "onHotKey", e => {
|
|
25
|
+
if (isHotkey('esc', e)) {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
this.props.hidePopover();
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
_defineProperty(this, "hideDTablePopover", e => {
|
|
31
|
+
if (this.dtablePopoverRef && !getEventClassName(e).includes('popover') && !this.dtablePopoverRef.contains(e.target)) {
|
|
32
|
+
this.props.hidePopover(e);
|
|
33
|
+
e.preventDefault();
|
|
34
|
+
e.stopPropagation();
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
_defineProperty(this, "isNeedSubmit", () => {
|
|
39
|
+
return this.props.isNeedSubmit;
|
|
40
|
+
});
|
|
41
|
+
_defineProperty(this, "update", filters => {
|
|
42
|
+
if (this.isNeedSubmit()) {
|
|
43
|
+
const isSubmitDisabled = false;
|
|
44
|
+
this.setState({
|
|
45
|
+
filters,
|
|
46
|
+
isSubmitDisabled
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
this.setState({
|
|
51
|
+
filters
|
|
52
|
+
}, () => {
|
|
53
|
+
const update = {
|
|
54
|
+
filters,
|
|
55
|
+
filter_conjunction: this.state.filterConjunction
|
|
56
|
+
};
|
|
57
|
+
this.props.update(update);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
_defineProperty(this, "deleteFilter", (filterIndex, scheduleUpdate) => {
|
|
61
|
+
const filters = this.state.filters.slice(0);
|
|
62
|
+
filters.splice(filterIndex, 1);
|
|
63
|
+
if (filters.length === 0) {
|
|
64
|
+
scheduleUpdate();
|
|
65
|
+
}
|
|
66
|
+
this.update(filters);
|
|
67
|
+
});
|
|
68
|
+
_defineProperty(this, "updateFilter", (filterIndex, updated) => {
|
|
69
|
+
const filters = this.state.filters.slice(0);
|
|
70
|
+
filters[filterIndex] = updated;
|
|
71
|
+
this.update(filters);
|
|
72
|
+
});
|
|
73
|
+
_defineProperty(this, "updateFilterConjunction", conjunction => {
|
|
74
|
+
if (this.isNeedSubmit()) {
|
|
75
|
+
const isSubmitDisabled = false;
|
|
76
|
+
this.setState({
|
|
77
|
+
filterConjunction: conjunction,
|
|
78
|
+
isSubmitDisabled
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.setState({
|
|
83
|
+
filterConjunction: conjunction
|
|
84
|
+
}, () => {
|
|
85
|
+
const update = {
|
|
86
|
+
filters: this.state.filters,
|
|
87
|
+
filter_conjunction: conjunction
|
|
88
|
+
};
|
|
89
|
+
this.props.update(update);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
_defineProperty(this, "addFilter", scheduleUpdate => {
|
|
93
|
+
let {
|
|
94
|
+
columns
|
|
95
|
+
} = this.props;
|
|
96
|
+
let defaultColumn = columns[0];
|
|
97
|
+
if (!FILTER_COLUMN_OPTIONS[defaultColumn.type]) {
|
|
98
|
+
defaultColumn = columns.find(c => FILTER_COLUMN_OPTIONS[c.type]);
|
|
99
|
+
}
|
|
100
|
+
if (!defaultColumn) return;
|
|
101
|
+
let filter = getFilterByColumn(defaultColumn);
|
|
102
|
+
const filters = this.state.filters.slice(0);
|
|
103
|
+
if (filters.length === 0) {
|
|
104
|
+
scheduleUpdate();
|
|
105
|
+
}
|
|
106
|
+
filters.push(filter);
|
|
107
|
+
this.update(filters);
|
|
108
|
+
});
|
|
109
|
+
_defineProperty(this, "onClosePopover", () => {
|
|
110
|
+
this.props.hidePopover();
|
|
111
|
+
});
|
|
112
|
+
_defineProperty(this, "onSubmitFilters", () => {
|
|
113
|
+
const {
|
|
114
|
+
filters,
|
|
115
|
+
filterConjunction
|
|
116
|
+
} = this.state;
|
|
117
|
+
const update = {
|
|
118
|
+
filters,
|
|
119
|
+
filter_conjunction: filterConjunction
|
|
120
|
+
};
|
|
121
|
+
this.props.update(update);
|
|
122
|
+
this.props.hidePopover();
|
|
123
|
+
});
|
|
124
|
+
_defineProperty(this, "onPopoverInsideClick", e => {
|
|
125
|
+
e.stopPropagation();
|
|
126
|
+
});
|
|
127
|
+
this.state = {
|
|
128
|
+
filters: getValidFilters(props.filters, props.columns),
|
|
129
|
+
filterConjunction: props.filterConjunction || 'And'
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
componentDidMount() {
|
|
133
|
+
document.addEventListener('mousedown', this.hideDTablePopover, true);
|
|
134
|
+
document.addEventListener('keydown', this.onHotKey);
|
|
135
|
+
}
|
|
136
|
+
componentWillUnmount() {
|
|
137
|
+
document.removeEventListener('mousedown', this.hideDTablePopover, true);
|
|
138
|
+
document.removeEventListener('keydown', this.onHotKey);
|
|
139
|
+
}
|
|
140
|
+
render() {
|
|
141
|
+
const {
|
|
142
|
+
target,
|
|
143
|
+
columns,
|
|
144
|
+
t
|
|
145
|
+
} = this.props;
|
|
146
|
+
const {
|
|
147
|
+
filters,
|
|
148
|
+
filterConjunction
|
|
149
|
+
} = this.state;
|
|
150
|
+
const canAddFilter = columns.length > 0;
|
|
151
|
+
return /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
152
|
+
placement: "auto-start",
|
|
153
|
+
isOpen: true,
|
|
154
|
+
target: target,
|
|
155
|
+
fade: false,
|
|
156
|
+
hideArrow: true,
|
|
157
|
+
className: "filter-popover",
|
|
158
|
+
boundariesElement: document.body
|
|
159
|
+
}, _ref => {
|
|
160
|
+
let {
|
|
161
|
+
scheduleUpdate
|
|
162
|
+
} = _ref;
|
|
163
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
164
|
+
ref: ref => this.dtablePopoverRef = ref,
|
|
165
|
+
onClick: this.onPopoverInsideClick,
|
|
166
|
+
className: this.props.filtersClassName
|
|
167
|
+
}, /*#__PURE__*/React.createElement(FiltersList, {
|
|
168
|
+
filterConjunction: filterConjunction,
|
|
169
|
+
filters: filters,
|
|
170
|
+
columns: columns,
|
|
171
|
+
emptyPlaceholder: t('No_filters'),
|
|
172
|
+
updateFilter: this.updateFilter,
|
|
173
|
+
deleteFilter: this.deleteFilter,
|
|
174
|
+
updateFilterConjunction: this.updateFilterConjunction,
|
|
175
|
+
collaborators: this.props.collaborators,
|
|
176
|
+
readOnly: false,
|
|
177
|
+
scheduleUpdate: scheduleUpdate,
|
|
178
|
+
isPre: this.props.isPre
|
|
179
|
+
}), /*#__PURE__*/React.createElement(CommonAddTool, {
|
|
180
|
+
className: "popover-add-tool ".concat(canAddFilter ? '' : 'disabled'),
|
|
181
|
+
callBack: canAddFilter ? () => this.addFilter(scheduleUpdate) : () => {},
|
|
182
|
+
footerName: t('Add_filter'),
|
|
183
|
+
addIconClassName: "popover-add-icon"
|
|
184
|
+
}), this.isNeedSubmit() && /*#__PURE__*/React.createElement("div", {
|
|
185
|
+
className: "filter-popover-footer"
|
|
186
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
187
|
+
className: "mr-2",
|
|
188
|
+
onClick: this.onClosePopover
|
|
189
|
+
}, t('Cancel')), /*#__PURE__*/React.createElement(Button, {
|
|
190
|
+
color: "primary",
|
|
191
|
+
disabled: this.state.isSubmitDisabled,
|
|
192
|
+
onClick: this.onSubmitFilters
|
|
193
|
+
}, t('Submit'))));
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
_defineProperty(FilterPopover, "defaultProps", {
|
|
198
|
+
filtersClassName: ''
|
|
199
|
+
});
|
|
200
|
+
export default withTranslation('sdoc-editor')(FilterPopover);
|
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
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 } from 'dtable-utils';
|
|
2
|
+
import { getColumnByKey } from '../utils/utils';
|
|
3
|
+
export const SPECIAL_TERM_TYPE = {
|
|
4
|
+
CREATOR: 'creator',
|
|
5
|
+
SINGLE_SELECT: 'single_select',
|
|
6
|
+
MULTIPLE_SELECT: 'multiple_select',
|
|
7
|
+
COLLABORATOR: 'collaborator',
|
|
8
|
+
RATE: 'rate'
|
|
9
|
+
};
|
|
10
|
+
export const SIMPLE_TEXT_INPUT_COLUMNS_MAP = {
|
|
11
|
+
[CellType.TEXT]: true,
|
|
12
|
+
[CellType.LONG_TEXT]: true,
|
|
13
|
+
[CellType.GEOLOCATION]: true,
|
|
14
|
+
[CellType.AUTO_NUMBER]: true,
|
|
15
|
+
[CellType.EMAIL]: true,
|
|
16
|
+
[CellType.URL]: true,
|
|
17
|
+
[CellType.IMAGE]: true,
|
|
18
|
+
[CellType.FILE]: true,
|
|
19
|
+
[FORMULA_RESULT_TYPE.STRING]: true,
|
|
20
|
+
[FORMULA_RESULT_TYPE.BOOL]: true
|
|
21
|
+
};
|
|
22
|
+
export const DATE_LABEL_MAP = {
|
|
23
|
+
[FILTER_TERM_MODIFIER_TYPE.EXACT_DATE]: true,
|
|
24
|
+
[FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_AGO]: true,
|
|
25
|
+
[FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_FROM_NOW]: true,
|
|
26
|
+
[FILTER_TERM_MODIFIER_TYPE.THE_NEXT_NUMBERS_OF_DAYS]: true,
|
|
27
|
+
[FILTER_TERM_MODIFIER_TYPE.THE_PAST_NUMBERS_OF_DAYS]: true
|
|
28
|
+
};
|
|
29
|
+
const ARRAY_PREDICATE = {
|
|
30
|
+
[FILTER_PREDICATE_TYPE.IS_ANY_OF]: true,
|
|
31
|
+
[FILTER_PREDICATE_TYPE.IS_NONE_OF]: true
|
|
32
|
+
};
|
|
33
|
+
const STRING_PREDICATE = {
|
|
34
|
+
[FILTER_PREDICATE_TYPE.IS]: true,
|
|
35
|
+
[FILTER_PREDICATE_TYPE.IS_NOT]: true
|
|
36
|
+
};
|
|
37
|
+
export const DATE_EMPTY_LABEL_MAP = {
|
|
38
|
+
[FILTER_PREDICATE_TYPE.EMPTY]: true,
|
|
39
|
+
[FILTER_PREDICATE_TYPE.NOT_EMPTY]: true
|
|
40
|
+
};
|
|
41
|
+
const MULTIPLE_SELECTOR_COLUMNS = [CellType.MULTIPLE_SELECT, CellType.COLLABORATOR, CellType.CREATOR, CellType.LAST_MODIFIER];
|
|
42
|
+
const isArrayFilterTermByArrayType = array_type => {
|
|
43
|
+
return COLLABORATOR_COLUMN_TYPES.includes(array_type) || array_type === CellType.SINGLE_SELECT || array_type === CellType.MULTIPLE_SELECT;
|
|
44
|
+
};
|
|
45
|
+
export const isFilterTermArray = (column, filterPredicate) => {
|
|
46
|
+
const {
|
|
47
|
+
type,
|
|
48
|
+
data
|
|
49
|
+
} = column;
|
|
50
|
+
if (MULTIPLE_SELECTOR_COLUMNS.includes(type)) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
if (type === CellType.SINGLE_SELECT && [FILTER_PREDICATE_TYPE.IS_ANY_OF, FILTER_PREDICATE_TYPE.IS_NONE_OF].includes(filterPredicate)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
if (FORMULA_COLUMN_TYPES_MAP[type]) {
|
|
57
|
+
const {
|
|
58
|
+
result_type,
|
|
59
|
+
array_type
|
|
60
|
+
} = data || {};
|
|
61
|
+
if (result_type !== FORMULA_RESULT_TYPE.ARRAY) return false;
|
|
62
|
+
return isArrayFilterTermByArrayType(array_type);
|
|
63
|
+
}
|
|
64
|
+
if (type === CellType.LINK) {
|
|
65
|
+
const {
|
|
66
|
+
array_type
|
|
67
|
+
} = data || {};
|
|
68
|
+
return isArrayFilterTermByArrayType(array_type);
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
};
|
|
72
|
+
export const getUpdatedFilterByCreator = (filter, collaborator) => {
|
|
73
|
+
const multipleSelectType = [FILTER_PREDICATE_TYPE.CONTAINS, FILTER_PREDICATE_TYPE.NOT_CONTAIN];
|
|
74
|
+
let {
|
|
75
|
+
filter_predicate,
|
|
76
|
+
filter_term: filterTerm
|
|
77
|
+
} = filter;
|
|
78
|
+
if (multipleSelectType.includes(filter_predicate)) {
|
|
79
|
+
filterTerm = filterTerm ? filter.filter_term.slice(0) : [];
|
|
80
|
+
let selectedEmail = collaborator.email;
|
|
81
|
+
let collaborator_index = filterTerm.indexOf(selectedEmail);
|
|
82
|
+
if (collaborator_index > -1) {
|
|
83
|
+
filterTerm.splice(collaborator_index, 1);
|
|
84
|
+
} else {
|
|
85
|
+
filterTerm.push(selectedEmail);
|
|
86
|
+
}
|
|
87
|
+
} else {
|
|
88
|
+
if (filterTerm[0] === collaborator.email) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
filterTerm = [collaborator.email];
|
|
92
|
+
}
|
|
93
|
+
return Object.assign({}, filter, {
|
|
94
|
+
filter_term: filterTerm
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
export const getUpdatedFilterBySelectSingle = (filter, columnOption) => {
|
|
98
|
+
let new_filter_term;
|
|
99
|
+
// if predicate is any of / is none of, filter_term is array; else filter_term is string
|
|
100
|
+
if (filter.filter_predicate === FILTER_PREDICATE_TYPE.IS_ANY_OF || filter.filter_predicate === FILTER_PREDICATE_TYPE.IS_NONE_OF) {
|
|
101
|
+
new_filter_term = Array.isArray(filter.filter_term) ? [...filter.filter_term] : [];
|
|
102
|
+
const index = new_filter_term.indexOf(columnOption.id);
|
|
103
|
+
if (index === -1) {
|
|
104
|
+
new_filter_term.push(columnOption.id);
|
|
105
|
+
} else {
|
|
106
|
+
new_filter_term.splice(index, 1);
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
new_filter_term = columnOption.id;
|
|
110
|
+
}
|
|
111
|
+
return Object.assign({}, filter, {
|
|
112
|
+
filter_term: new_filter_term
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
export const getUpdatedFilterBySelectMultiple = (filter, columnOption) => {
|
|
116
|
+
let filterTerm = filter.filter_term ? filter.filter_term : [];
|
|
117
|
+
let index = filterTerm.indexOf(columnOption.id);
|
|
118
|
+
if (index > -1) {
|
|
119
|
+
filterTerm.splice(index, 1);
|
|
120
|
+
} else {
|
|
121
|
+
filterTerm.push(columnOption.id);
|
|
122
|
+
}
|
|
123
|
+
return Object.assign({}, filter, {
|
|
124
|
+
filter_term: filterTerm
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
export const getUpdatedFilterByCollaborator = (filter, collaborator) => {
|
|
128
|
+
let filterTerm = filter.filter_term ? filter.filter_term.slice(0) : [];
|
|
129
|
+
let selectedEmail = collaborator.email;
|
|
130
|
+
let collaborator_index = filterTerm.indexOf(selectedEmail);
|
|
131
|
+
if (collaborator_index > -1) {
|
|
132
|
+
filterTerm.splice(collaborator_index, 1);
|
|
133
|
+
} else {
|
|
134
|
+
filterTerm.push(selectedEmail);
|
|
135
|
+
}
|
|
136
|
+
return Object.assign({}, filter, {
|
|
137
|
+
filter_term: filterTerm
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
export const getUpdatedFilterByRate = (filter, value) => {
|
|
141
|
+
if (filter.filter_term === value) {
|
|
142
|
+
return Object.assign({}, filter, {
|
|
143
|
+
filter_term: 0
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return Object.assign({}, filter, {
|
|
147
|
+
filter_term: value
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
export const getColumnOptions = column => {
|
|
151
|
+
const {
|
|
152
|
+
type,
|
|
153
|
+
data
|
|
154
|
+
} = column;
|
|
155
|
+
if (FORMULA_COLUMN_TYPES_MAP[type]) {
|
|
156
|
+
return getFormulaColumnFilterOptions(column);
|
|
157
|
+
}
|
|
158
|
+
if (type === CellType.LINK) {
|
|
159
|
+
const {
|
|
160
|
+
array_type
|
|
161
|
+
} = data || {};
|
|
162
|
+
if (array_type === FORMULA_RESULT_TYPE.BOOL) {
|
|
163
|
+
return FILTER_COLUMN_OPTIONS[CellType.CHECKBOX];
|
|
164
|
+
}
|
|
165
|
+
if (array_type === FORMULA_RESULT_TYPE.STRING) {
|
|
166
|
+
return FILTER_COLUMN_OPTIONS[CellType.TEXT];
|
|
167
|
+
}
|
|
168
|
+
return getFilterOptionsByArrayType(array_type);
|
|
169
|
+
}
|
|
170
|
+
return FILTER_COLUMN_OPTIONS[type] || {};
|
|
171
|
+
};
|
|
172
|
+
const getFormulaColumnFilterOptions = column => {
|
|
173
|
+
const {
|
|
174
|
+
data
|
|
175
|
+
} = column;
|
|
176
|
+
const {
|
|
177
|
+
result_type,
|
|
178
|
+
array_type
|
|
179
|
+
} = data || {};
|
|
180
|
+
if (result_type === FORMULA_RESULT_TYPE.BOOL) {
|
|
181
|
+
return FILTER_COLUMN_OPTIONS[CellType.CHECKBOX];
|
|
182
|
+
}
|
|
183
|
+
if (result_type === FORMULA_RESULT_TYPE.STRING) {
|
|
184
|
+
return FILTER_COLUMN_OPTIONS[CellType.TEXT];
|
|
185
|
+
}
|
|
186
|
+
if ([FORMULA_RESULT_TYPE.NUMBER, FORMULA_RESULT_TYPE.DATE].includes(result_type)) {
|
|
187
|
+
return FILTER_COLUMN_OPTIONS[result_type];
|
|
188
|
+
}
|
|
189
|
+
if (result_type === FORMULA_RESULT_TYPE.ARRAY) {
|
|
190
|
+
return getFilterOptionsByArrayType(array_type);
|
|
191
|
+
}
|
|
192
|
+
return FILTER_COLUMN_OPTIONS[CellType.TEXT];
|
|
193
|
+
};
|
|
194
|
+
const getFilterOptionsByArrayType = array_type => {
|
|
195
|
+
if (!array_type) {
|
|
196
|
+
return {};
|
|
197
|
+
}
|
|
198
|
+
let checkType = array_type;
|
|
199
|
+
if (COLLABORATOR_COLUMN_TYPES.includes(array_type)) {
|
|
200
|
+
checkType = CellType.COLLABORATOR;
|
|
201
|
+
} else if (array_type === CellType.SINGLE_SELECT) {
|
|
202
|
+
checkType = CellType.MULTIPLE_SELECT;
|
|
203
|
+
} else if (DATE_COLUMN_OPTIONS.includes(array_type)) {
|
|
204
|
+
checkType = CellType.DATE;
|
|
205
|
+
} else if (isNumericColumn({
|
|
206
|
+
type: array_type
|
|
207
|
+
})) {
|
|
208
|
+
checkType = CellType.NUMBER;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// only support: is
|
|
212
|
+
if (checkType === CellType.CHECKBOX || checkType === CellType.BOOL) {
|
|
213
|
+
return FILTER_COLUMN_OPTIONS[CellType.CHECKBOX];
|
|
214
|
+
}
|
|
215
|
+
let filterOptions = FILTER_COLUMN_OPTIONS[checkType] || FILTER_COLUMN_OPTIONS[CellType.TEXT];
|
|
216
|
+
let {
|
|
217
|
+
filterPredicateList
|
|
218
|
+
} = filterOptions;
|
|
219
|
+
if (filterPredicateList && !filterPredicateList.includes(FILTER_PREDICATE_TYPE.EMPTY)) {
|
|
220
|
+
filterPredicateList.push(FILTER_PREDICATE_TYPE.EMPTY);
|
|
221
|
+
}
|
|
222
|
+
if (filterPredicateList && !filterPredicateList.includes(FILTER_PREDICATE_TYPE.NOT_EMPTY)) {
|
|
223
|
+
filterPredicateList.push(FILTER_PREDICATE_TYPE.NOT_EMPTY);
|
|
224
|
+
}
|
|
225
|
+
return filterOptions;
|
|
226
|
+
};
|
|
227
|
+
export const getFilterByColumn = function (column) {
|
|
228
|
+
let filter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
229
|
+
let {
|
|
230
|
+
type: columnType,
|
|
231
|
+
data: columnData
|
|
232
|
+
} = column;
|
|
233
|
+
let {
|
|
234
|
+
filterPredicateList
|
|
235
|
+
} = getColumnOptions(column);
|
|
236
|
+
if (!filterPredicateList) return;
|
|
237
|
+
let filterPredicate = filterPredicateList[0];
|
|
238
|
+
let updatedFilter = Object.assign({}, filter, {
|
|
239
|
+
column_key: column.key,
|
|
240
|
+
filter_predicate: filterPredicate
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
// text | number | long-text | url | email
|
|
244
|
+
// auto-number | geolocation | duration
|
|
245
|
+
updatedFilter.filter_term = '';
|
|
246
|
+
|
|
247
|
+
// checkbox
|
|
248
|
+
if (columnType === CellType.CHECKBOX) {
|
|
249
|
+
updatedFilter.filter_term = false;
|
|
250
|
+
return updatedFilter;
|
|
251
|
+
}
|
|
252
|
+
// rate
|
|
253
|
+
if (columnType === CellType.RATE) {
|
|
254
|
+
const {
|
|
255
|
+
rate_max_number
|
|
256
|
+
} = columnData;
|
|
257
|
+
updatedFilter.filter_term = rate_max_number;
|
|
258
|
+
return updatedFilter;
|
|
259
|
+
}
|
|
260
|
+
// single-select | multiple-select | collaborators | creator | last-modifier
|
|
261
|
+
if (isFilterTermArray(column, filterPredicate)) {
|
|
262
|
+
updatedFilter.filter_term = [];
|
|
263
|
+
return updatedFilter;
|
|
264
|
+
}
|
|
265
|
+
// date | ctime | mtime
|
|
266
|
+
if (isDateColumn(column)) {
|
|
267
|
+
let filterTermModifier = filterPredicate === FILTER_PREDICATE_TYPE.IS_WITHIN ? filterTermModifierIsWithin[0] : filterTermModifierNotWithin[0];
|
|
268
|
+
updatedFilter.filter_term_modifier = filterTermModifier;
|
|
269
|
+
updatedFilter.filter_term = '';
|
|
270
|
+
return updatedFilter;
|
|
271
|
+
}
|
|
272
|
+
// formula | link-formula
|
|
273
|
+
if (FORMULA_COLUMN_TYPES_MAP[columnType]) {
|
|
274
|
+
const newUpdatedFilter = getFormulaColumnFilter(column, filter);
|
|
275
|
+
if (newUpdatedFilter) {
|
|
276
|
+
updatedFilter.filter_term = newUpdatedFilter.filter_term;
|
|
277
|
+
}
|
|
278
|
+
return updatedFilter;
|
|
279
|
+
}
|
|
280
|
+
// link
|
|
281
|
+
if (columnType === CellType.LINK) {
|
|
282
|
+
let {
|
|
283
|
+
array_type,
|
|
284
|
+
array_data
|
|
285
|
+
} = columnData || {};
|
|
286
|
+
if (array_type) {
|
|
287
|
+
if (array_type === FORMULA_RESULT_TYPE.BOOL) {
|
|
288
|
+
array_type = CellType.CHECKBOX;
|
|
289
|
+
}
|
|
290
|
+
if (array_type === FORMULA_RESULT_TYPE.STRING) {
|
|
291
|
+
array_type = CellType.TEXT;
|
|
292
|
+
}
|
|
293
|
+
const linkedColumn = {
|
|
294
|
+
key: column.key,
|
|
295
|
+
type: array_type,
|
|
296
|
+
data: array_data
|
|
297
|
+
};
|
|
298
|
+
const newUpdatedFilter = getFilterByColumn(linkedColumn, filter) || {};
|
|
299
|
+
if (newUpdatedFilter) {
|
|
300
|
+
updatedFilter.filter_term = newUpdatedFilter.filter_term;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return updatedFilter;
|
|
304
|
+
}
|
|
305
|
+
return updatedFilter;
|
|
306
|
+
};
|
|
307
|
+
export const getFormulaColumnFilter = (column, filter) => {
|
|
308
|
+
const {
|
|
309
|
+
data
|
|
310
|
+
} = column;
|
|
311
|
+
let {
|
|
312
|
+
result_type,
|
|
313
|
+
array_type,
|
|
314
|
+
array_data
|
|
315
|
+
} = data || {};
|
|
316
|
+
if (result_type === FORMULA_RESULT_TYPE.ARRAY) {
|
|
317
|
+
const linkedColumn = {
|
|
318
|
+
key: column.key,
|
|
319
|
+
type: array_type,
|
|
320
|
+
data: array_data
|
|
321
|
+
};
|
|
322
|
+
return getFilterByColumn(linkedColumn, filter);
|
|
323
|
+
}
|
|
324
|
+
// result_type: string | number | bool | date
|
|
325
|
+
if (result_type === FORMULA_RESULT_TYPE.BOOL) {
|
|
326
|
+
array_type = CellType.CHECKBOX;
|
|
327
|
+
}
|
|
328
|
+
if (result_type === FORMULA_RESULT_TYPE.STRING) {
|
|
329
|
+
array_type = CellType.TEXT;
|
|
330
|
+
}
|
|
331
|
+
const linkedColumn = {
|
|
332
|
+
key: column.key,
|
|
333
|
+
type: array_type,
|
|
334
|
+
data: array_data
|
|
335
|
+
};
|
|
336
|
+
return getFilterByColumn(linkedColumn, filter);
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
// file, image : not support
|
|
340
|
+
// text, long-text, number, single-select, date, ctime, mtime, formula, link, geolocation : string
|
|
341
|
+
// checkbox : boolean
|
|
342
|
+
// multiple-select, collaborator, creator, last modifier : array
|
|
343
|
+
|
|
344
|
+
export const getUpdatedFilterByColumn = (filters, filterIndex, column) => {
|
|
345
|
+
const filter = filters[filterIndex];
|
|
346
|
+
if (filter.column_key === column.key) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
return getFilterByColumn(column, filter);
|
|
350
|
+
};
|
|
351
|
+
export const getUpdatedFilterByPredicate = (filter, column, filterPredicate) => {
|
|
352
|
+
let updatedFilter = Object.assign({}, filter, {
|
|
353
|
+
filter_predicate: filterPredicate
|
|
354
|
+
});
|
|
355
|
+
let {
|
|
356
|
+
type: columnType
|
|
357
|
+
} = column;
|
|
358
|
+
if (columnType === CellType.CHECKBOX) {
|
|
359
|
+
updatedFilter.filter_term = false;
|
|
360
|
+
return updatedFilter;
|
|
361
|
+
}
|
|
362
|
+
if ([CellType.SINGLE_SELECT, CellType.DEPARTMENT_SINGLE_SELECT].includes(columnType)) {
|
|
363
|
+
if (ARRAY_PREDICATE[filterPredicate]) {
|
|
364
|
+
if (ARRAY_PREDICATE[filter.filter_predicate] !== ARRAY_PREDICATE[filterPredicate]) {
|
|
365
|
+
updatedFilter.filter_term = [];
|
|
366
|
+
}
|
|
367
|
+
} else if (STRING_PREDICATE[filterPredicate]) {
|
|
368
|
+
if (STRING_PREDICATE[filter.filter_predicate] !== STRING_PREDICATE[filterPredicate]) {
|
|
369
|
+
updatedFilter.filter_term = '';
|
|
370
|
+
}
|
|
371
|
+
} else {
|
|
372
|
+
updatedFilter.filter_term = '';
|
|
373
|
+
}
|
|
374
|
+
return updatedFilter;
|
|
375
|
+
}
|
|
376
|
+
if ([CellType.CREATOR, CellType.LAST_MODIFIER].includes(columnType)) {
|
|
377
|
+
if (STRING_PREDICATE[filter.filter_predicate] !== STRING_PREDICATE[filterPredicate] || filterPredicate === FILTER_PREDICATE_TYPE.INCLUDE_ME) {
|
|
378
|
+
updatedFilter.filter_term = [];
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
if (isFilterTermArray(column, filterPredicate)) {
|
|
382
|
+
if (DATE_EMPTY_LABEL_MAP[filterPredicate] || filterPredicate === FILTER_PREDICATE_TYPE.INCLUDE_ME) {
|
|
383
|
+
updatedFilter.filter_term = [];
|
|
384
|
+
}
|
|
385
|
+
return updatedFilter;
|
|
386
|
+
}
|
|
387
|
+
if (isDateColumn(column)) {
|
|
388
|
+
let filterTermModifier = filterPredicate === FILTER_PREDICATE_TYPE.IS_WITHIN ? filterTermModifierIsWithin[0] : filterTermModifierNotWithin[0];
|
|
389
|
+
updatedFilter.filter_term_modifier = filterTermModifier;
|
|
390
|
+
return updatedFilter;
|
|
391
|
+
}
|
|
392
|
+
return updatedFilter;
|
|
393
|
+
};
|
|
394
|
+
export const getUpdatedFilterByTermModifier = (filter, filterTermModifier) => {
|
|
395
|
+
if (filter.filter_term_modifier === filterTermModifier) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
return Object.assign({}, filter, {
|
|
399
|
+
filter_term_modifier: filterTermModifier
|
|
400
|
+
});
|
|
401
|
+
};
|
|
402
|
+
export const getUpdatedFilterByNormalTerm = (filter, column, filterIndex, event) => {
|
|
403
|
+
let filterTerm;
|
|
404
|
+
if (column.type === CellType.CHECKBOX) {
|
|
405
|
+
filterTerm = event.target.checked;
|
|
406
|
+
} else {
|
|
407
|
+
filterTerm = event.target.value;
|
|
408
|
+
}
|
|
409
|
+
if (filter.filter_term === filterTerm) {
|
|
410
|
+
return filter;
|
|
411
|
+
}
|
|
412
|
+
return Object.assign({}, filter, {
|
|
413
|
+
filter_term: filterTerm
|
|
414
|
+
});
|
|
415
|
+
};
|
|
416
|
+
export const getUpdatedFilterBySpecialTerm = (filter, type, value) => {
|
|
417
|
+
switch (type) {
|
|
418
|
+
case SPECIAL_TERM_TYPE.CREATOR:
|
|
419
|
+
{
|
|
420
|
+
return getUpdatedFilterByCreator(filter, value);
|
|
421
|
+
}
|
|
422
|
+
case SPECIAL_TERM_TYPE.SINGLE_SELECT:
|
|
423
|
+
{
|
|
424
|
+
return getUpdatedFilterBySelectSingle(filter, value);
|
|
425
|
+
}
|
|
426
|
+
case SPECIAL_TERM_TYPE.MULTIPLE_SELECT:
|
|
427
|
+
{
|
|
428
|
+
return getUpdatedFilterBySelectMultiple(filter, value);
|
|
429
|
+
}
|
|
430
|
+
case SPECIAL_TERM_TYPE.COLLABORATOR:
|
|
431
|
+
{
|
|
432
|
+
return getUpdatedFilterByCollaborator(filter, value);
|
|
433
|
+
}
|
|
434
|
+
case SPECIAL_TERM_TYPE.RATE:
|
|
435
|
+
{
|
|
436
|
+
return getUpdatedFilterByRate(filter, value);
|
|
437
|
+
}
|
|
438
|
+
default:
|
|
439
|
+
{
|
|
440
|
+
return filter;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
export const getFormulaAndLinkFilters = (filters, columns) => {
|
|
445
|
+
let formulaFilters = [];
|
|
446
|
+
filters.forEach(filter => {
|
|
447
|
+
const filterColumn = getColumnByKey(filter.column_key, columns);
|
|
448
|
+
const {
|
|
449
|
+
type
|
|
450
|
+
} = filterColumn;
|
|
451
|
+
if (FORMULA_COLUMN_TYPES_MAP[type] || type === CellType.LINK) {
|
|
452
|
+
formulaFilters.push(filter);
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
return formulaFilters;
|
|
456
|
+
};
|
package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/index.css
ADDED
|
File without changes
|