dtable-ui-component 4.4.0-alpha2 → 4.4.0-beta1

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.
Files changed (40) hide show
  1. package/lib/CollaboratorEditor/index.js +4 -26
  2. package/lib/CollaboratorEditor/pc-collaborator-editor-popover/index.js +1 -2
  3. package/lib/DTableCommonAddTool/index.css +25 -0
  4. package/lib/DTableCommonAddTool/index.js +24 -0
  5. package/lib/DTableFiltersPopover/constants/index.js +65 -0
  6. package/lib/DTableFiltersPopover/index.css +39 -0
  7. package/lib/DTableFiltersPopover/index.js +216 -0
  8. package/lib/DTableFiltersPopover/utils/filter-item-utils.js +145 -0
  9. package/lib/DTableFiltersPopover/utils/index.js +452 -0
  10. package/lib/DTableFiltersPopover/widgets/collaborator-filter/index.css +0 -0
  11. package/lib/DTableFiltersPopover/widgets/collaborator-filter/index.js +106 -0
  12. package/lib/DTableFiltersPopover/widgets/department-select-filter/department-multiple-select-filter.js +89 -0
  13. package/lib/DTableFiltersPopover/widgets/department-select-filter/department-single-select-filter.js +89 -0
  14. package/lib/DTableFiltersPopover/widgets/filter-calendar.js +167 -0
  15. package/lib/DTableFiltersPopover/widgets/filter-item.js +677 -0
  16. package/lib/DTableFiltersPopover/widgets/filter-list/index.css +321 -0
  17. package/lib/DTableFiltersPopover/widgets/filter-list/index.js +125 -0
  18. package/lib/DTableFiltersPopover/widgets/rate-item.js +72 -0
  19. package/lib/DTablePopover/index.js +1 -1
  20. package/lib/Department-editor/constants.js +10 -0
  21. package/lib/Department-editor/department-multiple-select/index.css +67 -0
  22. package/lib/Department-editor/department-multiple-select/index.js +143 -0
  23. package/lib/Department-editor/department-single-select.js +263 -0
  24. package/lib/Department-editor/index.css +117 -0
  25. package/lib/Department-editor/index.js +99 -0
  26. package/lib/Department-editor/selected-departments/index.css +26 -0
  27. package/lib/Department-editor/selected-departments/index.js +81 -0
  28. package/lib/Department-editor/utils.js +29 -0
  29. package/lib/constants/index.js +4 -1
  30. package/lib/hooks/common-hooks.js +21 -0
  31. package/lib/index.js +4 -1
  32. package/lib/lang/index.js +67 -3
  33. package/lib/locals/en.js +40 -1
  34. package/lib/locals/zh-CN.js +6 -1
  35. package/lib/select-editor/mb-select-editor-popover/index.css +1 -1
  36. package/lib/select-editor/mb-select-editor-popover/index.js +1 -1
  37. package/lib/utils/dayjs.js +4 -0
  38. package/lib/utils/event-bus.js +28 -0
  39. package/lib/utils/utils.js +5 -0
  40. package/package.json +1 -1
@@ -0,0 +1,81 @@
1
+ import React, { useMemo } from 'react';
2
+ import { DEPARTMENT_SELECT_RANGE_MAP } from 'dtable-utils';
3
+ import { DEPARTMENT_SELECT_RANGE_OPTIONS } from '../constants';
4
+ import { getLocale } from '../../lang';
5
+ import './index.css';
6
+ function SelectedDepartments(props) {
7
+ const {
8
+ value,
9
+ removeDepartment,
10
+ isShowRemoveIcon,
11
+ departments
12
+ } = props;
13
+ const idDepartmentMap = useMemo(() => {
14
+ let idDepartmentMap = {};
15
+ departments.forEach(department => {
16
+ idDepartmentMap[department.id] = department;
17
+ });
18
+ return idDepartmentMap;
19
+ }, [departments]);
20
+ const dom = Array.isArray(value) ? value.map((content, index) => {
21
+ if ([DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT, DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB].includes(content)) {
22
+ const name = getLocale(DEPARTMENT_SELECT_RANGE_OPTIONS.find(option => option.type === content).name);
23
+ return /*#__PURE__*/React.createElement("div", {
24
+ key: "department-".concat(index),
25
+ className: "department mr-1"
26
+ }, /*#__PURE__*/React.createElement("span", {
27
+ className: "department-name text-truncate",
28
+ title: name,
29
+ "aria-label": name
30
+ }, name));
31
+ }
32
+ const department = idDepartmentMap[content];
33
+ if (department) {
34
+ const {
35
+ name
36
+ } = department;
37
+ return /*#__PURE__*/React.createElement("div", {
38
+ key: "department-".concat(index),
39
+ className: "department mr-1"
40
+ }, /*#__PURE__*/React.createElement("div", {
41
+ className: "department-avatar-container d-flex align-items-center justify-content-center"
42
+ }, /*#__PURE__*/React.createElement("span", {
43
+ className: "dtable-font dtable-icon-department-single-selection"
44
+ })), /*#__PURE__*/React.createElement("span", {
45
+ className: "department-name text-truncate",
46
+ title: name,
47
+ "aria-label": name
48
+ }, name), isShowRemoveIcon && /*#__PURE__*/React.createElement("span", {
49
+ className: "remove-container"
50
+ }, /*#__PURE__*/React.createElement("span", {
51
+ className: "remove-icon",
52
+ onClick: event => removeDepartment(event, content)
53
+ }, /*#__PURE__*/React.createElement("i", {
54
+ className: "dtable-font dtable-icon-fork-number department-remove-icon"
55
+ }))));
56
+ }
57
+ return /*#__PURE__*/React.createElement("div", {
58
+ key: "department-".concat(index),
59
+ className: "department empty-department mr-1"
60
+ }, /*#__PURE__*/React.createElement("div", {
61
+ className: "department-avatar-container d-flex align-items-center justify-content-center"
62
+ }, /*#__PURE__*/React.createElement("span", {
63
+ className: "dtable-font dtable-icon-department-single-selection"
64
+ })), /*#__PURE__*/React.createElement("span", {
65
+ className: "department-name"
66
+ }, getLocale('Deleted_department')), isShowRemoveIcon && /*#__PURE__*/React.createElement("span", {
67
+ className: "remove-container"
68
+ }, /*#__PURE__*/React.createElement("span", {
69
+ className: "remove-icon",
70
+ onClick: event => removeDepartment(event, content)
71
+ }, /*#__PURE__*/React.createElement("i", {
72
+ className: "dtable-font dtable-icon-fork-number department-remove-icon"
73
+ }))));
74
+ }) : null;
75
+ return dom;
76
+ }
77
+ SelectedDepartments.defaultProps = {
78
+ isShowRemoveIcon: false,
79
+ departments: []
80
+ };
81
+ export default SelectedDepartments;
@@ -0,0 +1,29 @@
1
+ export const searchDepartments = (departments, searchValue) => {
2
+ const validSearchValue = searchValue ? searchValue.trim().toLowerCase() : '';
3
+ const validDepartments = Array.isArray(departments) ? departments : [];
4
+ if (!validSearchValue) return validDepartments;
5
+ return validDepartments.filter(department => {
6
+ const {
7
+ name
8
+ } = department;
9
+ if (!name) return false;
10
+ return name.toString().toLowerCase().indexOf(validSearchValue) > -1;
11
+ });
12
+ };
13
+ export const getNormalizedDepartments = function (departments) {
14
+ let canExpand = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15
+ let parentIdMap = {};
16
+ for (let i = 0; i < departments.length; i++) {
17
+ let item = departments[i];
18
+ parentIdMap[item.parent_id] = true;
19
+ }
20
+ return departments.map(depart => {
21
+ const hasChild = canExpand && !!parentIdMap[depart.id];
22
+ const isExpanded = depart.parent_id === -1 ? true : false;
23
+ return {
24
+ ...depart,
25
+ hasChild,
26
+ isExpanded
27
+ };
28
+ });
29
+ };
@@ -19,4 +19,7 @@ const DATE_TYPES = {
19
19
  const SIMPLE_CELL_COLUMNS = [CellType.TEXT, CellType.NUMBER, CellType.DATE, CellType.CTIME, CellType.MTIME, CellType.AUTO_NUMBER, CellType.URL, CellType.EMAIL, CellType.DURATION, CellType.CHECKBOX, CellType.RATE];
20
20
  const ARRAY_FORMAT_COLUMNS = [CellType.IMAGE, CellType.FILE, CellType.MULTIPLE_SELECT, CellType.COLLABORATOR];
21
21
  const SIMPLE_CELL_FORMULA_RESULTS = [FORMULA_RESULT_TYPE.NUMBER, FORMULA_RESULT_TYPE.STRING, FORMULA_RESULT_TYPE.DATE, FORMULA_RESULT_TYPE.BOOL];
22
- export { CellType, NUMBER_TYPES, DATE_TYPES, FORMULA_RESULT_TYPE, SIMPLE_CELL_COLUMNS, ARRAY_FORMAT_COLUMNS, SIMPLE_CELL_FORMULA_RESULTS };
22
+ const EVENT_BUS_TYPE = {
23
+ OPEN_SELECT: 'open-select'
24
+ };
25
+ export { CellType, NUMBER_TYPES, DATE_TYPES, FORMULA_RESULT_TYPE, SIMPLE_CELL_COLUMNS, ARRAY_FORMAT_COLUMNS, SIMPLE_CELL_FORMULA_RESULTS, EVENT_BUS_TYPE };
@@ -0,0 +1,21 @@
1
+ import { useEffect } from 'react';
2
+ export const useClickOutside = (_ref, deps) => {
3
+ let {
4
+ currDOM,
5
+ onClickOutside
6
+ } = _ref;
7
+ useEffect(() => {
8
+ const onMousedown = event => {
9
+ if (currDOM && event && currDOM.contains(event.target)) {
10
+ return;
11
+ }
12
+ onClickOutside && onClickOutside(event);
13
+ };
14
+ document.addEventListener('mousedown', onMousedown);
15
+ return () => {
16
+ document.removeEventListener('mousedown', onMousedown);
17
+ };
18
+
19
+ // eslint-disable-next-line
20
+ }, deps || []);
21
+ };
package/lib/index.js CHANGED
@@ -70,4 +70,7 @@ export { default as ModalPortal } from './ModalPortal';
70
70
  export { default as RoleStatusEditor } from './RoleStatusEditor';
71
71
 
72
72
  // setting
73
- export { default as FieldDisplaySetting } from './FieldDisplaySetting';
73
+ export { default as FieldDisplaySetting } from './FieldDisplaySetting';
74
+
75
+ // popover
76
+ export { default as DTableFiltersPopover } from './DTableFiltersPopover';
package/lib/lang/index.js CHANGED
@@ -2,17 +2,26 @@ import de from '../locals/de';
2
2
  import en from '../locals/en';
3
3
  import fr from '../locals/fr';
4
4
  import zh_CN from '../locals/zh-CN';
5
+ const zhCN = require('@seafile/seafile-calendar/lib/locale/zh_CN');
6
+ const zhTW = require('@seafile/seafile-calendar/lib/locale/zh_TW');
7
+ const enUS = require('@seafile/seafile-calendar/lib/locale/en_US');
8
+ const frFR = require('@seafile/seafile-calendar/lib/locale/fr_FR');
9
+ const deDE = require('@seafile/seafile-calendar/lib/locale/de_DE');
10
+ const esES = require('@seafile/seafile-calendar/lib/locale/es_ES');
11
+ const plPL = require('@seafile/seafile-calendar/lib/locale/pl_PL');
12
+ const csCZ = require('@seafile/seafile-calendar/lib/locale/cs_CZ');
13
+ const ruRU = require('@seafile/seafile-calendar/lib/locale/ru_RU');
5
14
  let langData = {
6
15
  'de': de,
7
16
  'en': en,
8
17
  'fr': fr,
9
18
  'zh-cn': zh_CN
10
19
  };
11
- const LANGUAGE = 'en';
20
+ let LANGUAGE = 'en';
12
21
  let LANGUAGE_MAP = langData[LANGUAGE];
13
22
  export function setLocale(args) {
14
- let lang = typeof args === 'string' ? args : LANGUAGE;
15
- LANGUAGE_MAP = langData[lang] || langData[LANGUAGE];
23
+ LANGUAGE = typeof args === 'string' ? args : LANGUAGE;
24
+ LANGUAGE_MAP = langData[LANGUAGE];
16
25
  }
17
26
  export function getLocale(key, def) {
18
27
  if (!key) return def;
@@ -40,4 +49,59 @@ export function substitute(str, obj) {
40
49
  return val;
41
50
  }
42
51
  return '';
52
+ }
53
+ export function translateCalendar() {
54
+ const locale = LANGUAGE ? LANGUAGE : 'en';
55
+ let language;
56
+ switch (locale) {
57
+ case 'zh-cn':
58
+ language = zhCN;
59
+ break;
60
+ case 'zh-tw':
61
+ language = zhTW;
62
+ break;
63
+ case 'en':
64
+ language = enUS;
65
+ break;
66
+ case 'fr':
67
+ language = frFR;
68
+ break;
69
+ case 'de':
70
+ language = deDE;
71
+ break;
72
+ case 'es':
73
+ language = esES;
74
+ break;
75
+ case 'es-ar':
76
+ language = esES;
77
+ break;
78
+ case 'es-mx':
79
+ language = esES;
80
+ break;
81
+ case 'pl':
82
+ language = plPL;
83
+ break;
84
+ case 'cs':
85
+ language = csCZ;
86
+ break;
87
+ case 'ru':
88
+ language = ruRU;
89
+ break;
90
+ default:
91
+ language = enUS;
92
+ }
93
+ return language;
94
+ }
95
+ export function getMobileDatePickerLocale() {
96
+ return {
97
+ DatePickerLocale: {
98
+ year: getLocale('Year'),
99
+ month: getLocale('Month'),
100
+ day: getLocale('Day'),
101
+ hour: getLocale('Hour'),
102
+ minute: getLocale('Minute')
103
+ },
104
+ okText: getLocale('Done'),
105
+ dismissText: getLocale('Cancel')
106
+ };
43
107
  }
package/lib/locals/en.js CHANGED
@@ -16,6 +16,45 @@ const en = {
16
16
  Are_you_sure_you_want_to_delete_this_file: 'Are you sure you want to delete this file?',
17
17
  Are_you_sure_you_want_to_delete_this_image: 'Are you sure you want to delete this image?',
18
18
  Cancel: 'Cancel',
19
- Delete: 'Delete'
19
+ Delete: 'Delete',
20
+ Find_a_department: 'Find a department',
21
+ No_departments_available: 'No departments available',
22
+ Current_user_department: 'Current user\'s department',
23
+ Current_user_department_and_sub: 'Current user\'s department and sub-departments',
24
+ Specific_departments: 'Specific departments',
25
+ Deleted_department: 'Deleted department',
26
+ Add_filter: 'Add filter',
27
+ Submit: 'Submit',
28
+ No_filters_applied_to_this_view: 'No_filters_applied_to_this_view',
29
+ No_filters: 'No_filters',
30
+ Today: 'Today',
31
+ Tomorrow: 'Tomorrow',
32
+ Yesterday: 'Yesterday',
33
+ One_week_ago: 'One week ago',
34
+ One_week_from_now: 'One week from now',
35
+ One_month_ago: 'One month ago',
36
+ One_month_from_now: 'One month from now',
37
+ Number_of_days_ago: 'Number of days ago',
38
+ Number_of_days_from_now: 'Number of days from now',
39
+ Exact_date: 'Exact date',
40
+ Last_week: 'Last week',
41
+ Last_month: 'Last month',
42
+ Last_year: 'Last year',
43
+ The_next_week: 'The next week',
44
+ The_next_month: 'The next month',
45
+ The_next_year: 'The next year',
46
+ The_next_numbers_of_days: 'The next numbers of days',
47
+ The_past_numbers_of_days: 'The past numbers of days',
48
+ This_week: 'This week',
49
+ This_month: 'This month',
50
+ This_year: 'This year',
51
+ Select_an_option: 'Select_an_option',
52
+ Add_collaborator: 'Add_collaborator',
53
+ Add_a_creator: 'Add_a_creator',
54
+ Add_a_last_modifier: 'Add_a_last_modifier',
55
+ Invalid_filter: 'Invalid_filter',
56
+ Find_column: 'Find_column',
57
+ No_results: 'No_results',
58
+ 'Select_option(s)': 'Select option(s)'
20
59
  };
21
60
  export default en;
@@ -16,6 +16,11 @@ const zh_CN = {
16
16
  Are_you_sure_you_want_to_delete_this_file: '你确定要删除此文件吗?',
17
17
  Are_you_sure_you_want_to_delete_this_image: '你确定要删除此图片吗?',
18
18
  Cancel: '取消',
19
- Delete: '删除'
19
+ Delete: '删除',
20
+ Find_a_department: "查找部门",
21
+ Current_user_department: "当前用户的部门",
22
+ Current_user_department_and_sub: "当前用户的部门和子部门",
23
+ Specific_departments: "具体部门",
24
+ Deleted_department: "已经删除的部门"
20
25
  };
21
26
  export default zh_CN;
@@ -119,7 +119,7 @@
119
119
  transition: translateY(1px);
120
120
  }
121
121
 
122
- .dtable-ui-mb-select-editor-body .mb-create-select-item .add-new-option {
122
+ .dtable-ui-mb-select-editor-body .mb-create-select-item .dtable-ui-add-new-option {
123
123
  font-size: 14px;
124
124
  font-weight: 500px;
125
125
  }
@@ -176,7 +176,7 @@ class MBSelectEditorPopover extends React.Component {
176
176
  }, /*#__PURE__*/React.createElement("i", {
177
177
  className: "dtable-font dtable-icon-add-table"
178
178
  }), /*#__PURE__*/React.createElement("span", {
179
- className: "add-new-option"
179
+ className: "dtable-ui-add-new-option"
180
180
  }, "".concat(getLocale('Add_an_option'), " ").concat(searchVal)))));
181
181
  }
182
182
  }
@@ -0,0 +1,4 @@
1
+ import dayjs from 'dayjs';
2
+ import customParseFormat from 'dayjs/plugin/customParseFormat';
3
+ dayjs.extend(customParseFormat);
4
+ export default dayjs;
@@ -0,0 +1,28 @@
1
+ class EventBus {
2
+ constructor() {
3
+ this.subscribers = {};
4
+ }
5
+ subscribe(type, handler) {
6
+ if (!this.subscribers[type]) {
7
+ this.subscribers[type] = [];
8
+ }
9
+ const handlers = this.subscribers[type];
10
+ handlers.push(handler);
11
+ return () => {
12
+ const index = handlers.indexOf(handler);
13
+ if (index > -1) {
14
+ handlers.splice(index, 1);
15
+ }
16
+ };
17
+ }
18
+ dispatch(type) {
19
+ for (var _len = arguments.length, data = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
20
+ data[_key - 1] = arguments[_key];
21
+ }
22
+ const handlers = this.subscribers[type];
23
+ if (Array.isArray(handlers)) {
24
+ handlers.forEach(handler => handler(...data));
25
+ }
26
+ }
27
+ }
28
+ export default new EventBus();
@@ -37,4 +37,9 @@ export const downloadFile = downloadUrl => {
37
37
  iframe.style.display = 'none';
38
38
  iframe.src = downloadUrl;
39
39
  document.body.appendChild(iframe);
40
+ };
41
+ export const getEventClassName = e => {
42
+ // svg mouseEvent event.target.className is an object
43
+ if (!e || !e.target) return '';
44
+ return e.target.getAttribute('class') || '';
40
45
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dtable-ui-component",
3
- "version": "4.4.0-alpha2",
3
+ "version": "4.4.0-beta1",
4
4
  "main": "./lib/index.js",
5
5
  "dependencies": {
6
6
  "@seafile/react-image-lightbox": "2.0.5",