@steroidsjs/core 3.0.0-beta.98 → 3.0.0

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 (175) hide show
  1. package/actions/notifications.js +7 -1
  2. package/actions/router.js +16 -2
  3. package/components/HttpComponent.d.ts +7 -7
  4. package/components/JwtHttpComponent.d.ts +2 -2
  5. package/components/LocaleComponent.d.ts +6 -6
  6. package/components/MetaComponent.d.ts +90 -1
  7. package/components/MetricsComponent.js +2 -1
  8. package/components/ResourceComponent.d.ts +4 -4
  9. package/components/UiComponent.d.ts +7 -7
  10. package/components/WebSocketComponent.d.ts +11 -11
  11. package/docs-autogen-result.json +15226 -6277
  12. package/en.json +151 -84
  13. package/hooks/index.d.ts +4 -3
  14. package/hooks/index.js +7 -5
  15. package/hooks/useAbsolutePositioning.js +0 -1
  16. package/hooks/useAddressBar.js +0 -1
  17. package/hooks/useApplication.js +8 -1
  18. package/hooks/useDataProvider.d.ts +17 -2
  19. package/hooks/useDataSelect.js +21 -4
  20. package/hooks/useFetch.js +6 -1
  21. package/hooks/useFile.d.ts +1 -0
  22. package/hooks/useFile.js +2 -0
  23. package/hooks/useList.d.ts +53 -14
  24. package/hooks/useList.js +31 -70
  25. package/hooks/useTree.d.ts +104 -0
  26. package/hooks/useTree.js +169 -0
  27. package/index.d.ts +3 -3
  28. package/package.json +94 -93
  29. package/reducers/router.d.ts +2 -1
  30. package/ui/content/Accordion/Accordion.d.ts +8 -5
  31. package/ui/content/Accordion/Accordion.js +6 -1
  32. package/ui/content/Accordion/AccordionItem.d.ts +2 -2
  33. package/ui/content/Accordion/AccordionItem.js +1 -12
  34. package/ui/content/Alert/Alert.d.ts +5 -2
  35. package/ui/content/Alert/Alert.js +13 -12
  36. package/ui/content/Avatar/Avatar.js +18 -12
  37. package/ui/content/Badge/Badge.d.ts +5 -1
  38. package/ui/content/Badge/Badge.js +14 -12
  39. package/ui/content/Calendar/Calendar.d.ts +6 -1
  40. package/ui/content/Calendar/Calendar.js +19 -12
  41. package/ui/content/CalendarSystem/CalendarSystem.d.ts +94 -17
  42. package/ui/content/CalendarSystem/CalendarSystem.js +66 -77
  43. package/ui/content/CalendarSystem/hooks/useCalendarControls.d.ts +1 -2
  44. package/ui/content/CalendarSystem/hooks/useCalendarControls.js +14 -17
  45. package/ui/content/CalendarSystem/hooks/useCalendarSystemEventGroupModals.d.ts +2 -1
  46. package/ui/content/CalendarSystem/hooks/useCalendarSystemEventGroupModals.js +13 -5
  47. package/ui/content/CalendarSystem/hooks/useCalendarSystemModals.js +2 -2
  48. package/ui/content/CalendarSystem/hooks/useCalendarType.d.ts +5 -0
  49. package/ui/content/CalendarSystem/hooks/useCalendarType.js +22 -0
  50. package/ui/content/CalendarSystem/hooks/useEventsFromDate.d.ts +5 -0
  51. package/ui/content/CalendarSystem/hooks/useEventsFromDate.js +49 -0
  52. package/ui/content/CalendarSystem/hooks/{useMonthCalendar.d.ts → useMonthGrid.d.ts} +4 -5
  53. package/ui/content/CalendarSystem/hooks/{useMonthCalendar.js → useMonthGrid.js} +24 -15
  54. package/ui/content/CalendarSystem/hooks/{useWeekCalendar.d.ts → useWeekGrid.d.ts} +6 -5
  55. package/ui/content/CalendarSystem/hooks/useWeekGrid.js +72 -0
  56. package/ui/content/CalendarSystem/utils/utils.d.ts +8 -0
  57. package/ui/content/CalendarSystem/utils/utils.js +27 -1
  58. package/ui/content/Card/Card.d.ts +33 -27
  59. package/ui/content/Card/Card.js +1 -12
  60. package/ui/content/Chart/Chart.d.ts +38 -8
  61. package/ui/content/Chart/Chart.js +16 -12
  62. package/ui/content/Chat/Chat.d.ts +109 -0
  63. package/ui/content/Chat/Chat.js +52 -0
  64. package/ui/content/Chat/constants/timeTemplatesAndUnits.d.ts +8 -0
  65. package/ui/content/Chat/constants/timeTemplatesAndUnits.js +11 -0
  66. package/ui/content/Chat/hooks/useChat.d.ts +12 -0
  67. package/ui/content/Chat/hooks/useChat.js +58 -0
  68. package/ui/content/Chat/index.d.ts +2 -0
  69. package/ui/content/Chat/index.js +7 -0
  70. package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.d.ts +5 -0
  71. package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.js +61 -0
  72. package/ui/content/Chat/utils/calculateMessageTimeAgo.d.ts +1 -0
  73. package/ui/content/Chat/utils/calculateMessageTimeAgo.js +26 -0
  74. package/ui/content/Chat/utils/getMessagesGroupedByDate.d.ts +4 -0
  75. package/ui/content/Chat/utils/getMessagesGroupedByDate.js +56 -0
  76. package/ui/content/Chat/utils/index.d.ts +5 -0
  77. package/ui/content/Chat/utils/index.js +12 -0
  78. package/ui/content/Chat/utils/isTodayMessage.d.ts +1 -0
  79. package/ui/content/Chat/utils/isTodayMessage.js +13 -0
  80. package/ui/content/CopyToClipboard/CopyToClipboard.d.ts +3 -3
  81. package/ui/content/CopyToClipboard/CopyToClipboard.js +10 -12
  82. package/ui/content/Dashboard/Dashboard.d.ts +5 -2
  83. package/ui/content/Dashboard/Dashboard.js +27 -3
  84. package/ui/content/Detail/Detail.d.ts +15 -2
  85. package/ui/content/Detail/Detail.js +12 -1
  86. package/ui/content/DropDown/DropDown.d.ts +1 -1
  87. package/ui/content/DropDown/DropDown.js +16 -4
  88. package/ui/content/Icon/Icon.js +13 -15
  89. package/ui/content/Kanban/Kanban.d.ts +15 -4
  90. package/ui/content/Kanban/Kanban.js +8 -12
  91. package/ui/content/Kanban/hooks/useKanban.d.ts +33 -26
  92. package/ui/content/Menu/Menu.js +10 -12
  93. package/ui/content/Slider/Slider.js +1 -12
  94. package/ui/content/index.d.ts +2 -1
  95. package/ui/content/index.js +3 -1
  96. package/ui/crud/index.d.ts +3 -0
  97. package/ui/form/AutoCompleteField/AutoCompleteField.js +1 -1
  98. package/ui/form/Button/Button.js +8 -2
  99. package/ui/form/CheckboxField/CheckboxField.d.ts +1 -0
  100. package/ui/form/CheckboxField/CheckboxField.js +2 -2
  101. package/ui/form/CheckboxListField/CheckboxListField.d.ts +18 -2
  102. package/ui/form/CheckboxListField/CheckboxListField.js +1 -1
  103. package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +67 -0
  104. package/ui/form/CheckboxTreeField/CheckboxTreeField.js +126 -0
  105. package/ui/form/CheckboxTreeField/index.d.ts +2 -0
  106. package/ui/form/CheckboxTreeField/index.js +7 -0
  107. package/ui/form/DateField/DateField.js +4 -1
  108. package/ui/form/DateField/useDateRange.d.ts +1 -0
  109. package/ui/form/DateField/useDateRange.js +13 -2
  110. package/ui/form/DateRangeField/DateRangeField.d.ts +34 -1
  111. package/ui/form/DateRangeField/DateRangeField.js +59 -8
  112. package/ui/form/DateTimeField/DateTimeField.d.ts +10 -0
  113. package/ui/form/DateTimeField/DateTimeField.js +11 -3
  114. package/ui/form/DateTimeRangeField/DateTimeRangeField.d.ts +25 -1
  115. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +66 -13
  116. package/ui/form/DropDownField/DropDownField.d.ts +23 -3
  117. package/ui/form/DropDownField/DropDownField.js +1 -1
  118. package/ui/form/EmailField/EmailField.d.ts +6 -0
  119. package/ui/form/EmailField/EmailField.js +0 -4
  120. package/ui/form/Field/Field.d.ts +9 -1
  121. package/ui/form/Field/Field.js +1 -1
  122. package/ui/form/Field/fieldWrapper.d.ts +9 -1
  123. package/ui/form/FieldList/FieldList.d.ts +13 -7
  124. package/ui/form/FieldList/FieldList.js +30 -4
  125. package/ui/form/FileField/FileField.js +5 -0
  126. package/ui/form/Form/Form.d.ts +26 -3
  127. package/ui/form/Form/Form.js +5 -3
  128. package/ui/form/ImageField/ImageField.d.ts +9 -1
  129. package/ui/form/InputField/InputField.d.ts +5 -2
  130. package/ui/form/InputField/hooks/useInputFieldWarningByType.js +1 -0
  131. package/ui/form/NumberField/NumberField.js +34 -7
  132. package/ui/form/SliderField/SliderField.d.ts +10 -2
  133. package/ui/form/TimeRangeField/TimeRangeField.d.ts +10 -1
  134. package/ui/form/TimeRangeField/TimeRangeField.js +3 -1
  135. package/ui/form/WizardForm/WizardForm.d.ts +119 -0
  136. package/ui/form/WizardForm/WizardForm.js +167 -0
  137. package/ui/form/WizardForm/index.d.ts +2 -0
  138. package/ui/form/WizardForm/index.js +7 -0
  139. package/ui/form/WizardForm/utils.d.ts +12 -0
  140. package/ui/form/WizardForm/utils.js +111 -0
  141. package/ui/form/index.d.ts +3 -1
  142. package/ui/form/index.js +4 -1
  143. package/ui/layout/ProgressBar/ProgressBar.js +8 -2
  144. package/ui/layout/Skeleton/Skeleton.d.ts +3 -1
  145. package/ui/layout/Tooltip/Tooltip.d.ts +4 -1
  146. package/ui/list/ControlsColumn/ControlsColumn.d.ts +17 -3
  147. package/ui/list/FlexGrid/FlexGrid.d.ts +11 -1
  148. package/ui/list/Grid/Grid.d.ts +42 -6
  149. package/ui/list/Grid/Grid.js +1 -2
  150. package/ui/list/LayoutNames/LayoutNames.d.ts +11 -1
  151. package/ui/list/Steps/Steps.d.ts +19 -7
  152. package/ui/list/Steps/Steps.js +46 -26
  153. package/ui/list/TreeTable/TreeTable.d.ts +34 -33
  154. package/ui/list/TreeTable/TreeTable.js +19 -8
  155. package/ui/modal/Modal/Modal.d.ts +7 -1
  156. package/ui/nav/Breadcrumbs/Breadcrumbs.d.ts +11 -1
  157. package/ui/nav/ButtonGroup/ButtonGroup.d.ts +13 -4
  158. package/ui/nav/Controls/Controls.d.ts +7 -1
  159. package/ui/nav/Link/Link.d.ts +1 -1
  160. package/ui/nav/Nav/Nav.d.ts +19 -4
  161. package/ui/nav/Router/Router.d.ts +19 -3
  162. package/ui/nav/Router/Router.js +11 -6
  163. package/ui/nav/Router/helpers.d.ts +2 -2
  164. package/ui/nav/Router/helpers.js +39 -7
  165. package/ui/nav/Tree/Tree.d.ts +32 -62
  166. package/ui/nav/Tree/Tree.js +18 -165
  167. package/utils/calculateComponentAbsolutePosition.js +74 -24
  168. package/utils/calendar.d.ts +8 -0
  169. package/utils/calendar.js +76 -1
  170. package/utils/data.js +1 -0
  171. package/utils/form.d.ts +1 -0
  172. package/utils/form.js +16 -1
  173. package/ui/content/CalendarSystem/hooks/useWeekCalendar.js +0 -86
  174. package/utils/list.d.ts +0 -1
  175. package/utils/list.js +0 -5
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ exports.__esModule = true;
17
+ var react_1 = require("react");
18
+ var dayjs_1 = __importDefault(require("dayjs"));
19
+ var uniqueId_1 = __importDefault(require("lodash-es/uniqueId"));
20
+ var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
21
+ var File_1 = __importDefault(require("fileup-core/lib/models/File"));
22
+ var hooks_1 = require("../../../../hooks");
23
+ var form_1 = require("../../../../actions/form");
24
+ var utils_1 = require("../utils");
25
+ var timeTemplatesAndUnits_1 = require("../constants/timeTemplatesAndUnits");
26
+ function useChat(config) {
27
+ var dispatch = (0, hooks_1.useDispatch)();
28
+ var _a = (0, react_1.useState)({}), groupedMessagesByDates = _a[0], setGroupedMessagesByDates = _a[1];
29
+ var _b = (0, react_1.useState)([]), uploadedFiles = _b[0], setUploadedFiles = _b[1];
30
+ (0, react_1.useEffect)(function () { return setGroupedMessagesByDates((0, utils_1.getMessagesGroupedByDate)(config.messages)); }, [config.messages]);
31
+ var onUploadFiles = (0, react_1.useCallback)(function (files) {
32
+ if (!(0, isEqual_1["default"])(uploadedFiles, files)) {
33
+ setUploadedFiles(files);
34
+ }
35
+ }, [uploadedFiles]);
36
+ var onSendMessage = (0, react_1.useCallback)(function (rawMessage) {
37
+ if (!rawMessage) {
38
+ return;
39
+ }
40
+ var newMessage = __assign(__assign({}, rawMessage), { id: (0, uniqueId_1["default"])(), user: config.currentUser, timestamp: (0, dayjs_1["default"])().format(timeTemplatesAndUnits_1.ISO_TIMESTAMP_TEMPLATE), files: (uploadedFiles === null || uploadedFiles === void 0 ? void 0 : uploadedFiles.reduce(function (acc, file) {
41
+ if (file.getResult() !== File_1["default"].RESULT_ERROR) {
42
+ acc.push(__assign({}, file._resultHttpMessage));
43
+ }
44
+ return acc;
45
+ }, [])) || null });
46
+ if (config.onSendMessage) {
47
+ config.onSendMessage(config.chatId, newMessage);
48
+ }
49
+ setGroupedMessagesByDates(function (prevGroupedMessagesByDates) { return (0, utils_1.addNewMessageIntoGroupedMessages)(newMessage, prevGroupedMessagesByDates); });
50
+ dispatch((0, form_1.formReset)(config.chatId));
51
+ }, [config, dispatch, uploadedFiles]);
52
+ return {
53
+ groupedMessagesByDates: groupedMessagesByDates,
54
+ onSendMessage: onSendMessage,
55
+ onUploadFiles: onUploadFiles
56
+ };
57
+ }
58
+ exports["default"] = useChat;
@@ -0,0 +1,2 @@
1
+ import Chat from './Chat';
2
+ export default Chat;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ var Chat_1 = __importDefault(require("./Chat"));
7
+ exports["default"] = Chat_1["default"];
@@ -0,0 +1,5 @@
1
+ import { IChatMessage } from '@steroidsjs/core/ui/content/Chat/Chat';
2
+ import { IGroupedMessage, IGroupedMessagesByDates } from '../hooks/useChat';
3
+ export declare const addNewMessageIntoGroupedMessages: (newMessage: IChatMessage, groupedMessagesByDates: IGroupedMessagesByDates) => {
4
+ [x: string]: IGroupedMessage[][];
5
+ };
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ exports.__esModule = true;
26
+ exports.addNewMessageIntoGroupedMessages = void 0;
27
+ var dayjs_1 = __importDefault(require("dayjs"));
28
+ var last_1 = __importDefault(require("lodash-es/last"));
29
+ var getMessagesGroupedByDate_1 = require("../utils/getMessagesGroupedByDate");
30
+ var timeTemplatesAndUnits_1 = require("../constants/timeTemplatesAndUnits");
31
+ var addMessageToExistingGroup = function (newMessage, groupedMessagesByDates, dateKey) {
32
+ var _a;
33
+ var currentGroupedMessagesByDates = __spreadArray([], groupedMessagesByDates[dateKey], true);
34
+ // last array of messages for this date
35
+ var lastMessageGroup = currentGroupedMessagesByDates.pop();
36
+ // last message for this date
37
+ var lastMessageFromGroup = (0, last_1["default"])(lastMessageGroup);
38
+ var messagesGroupForCurrentDate = __spreadArray(__spreadArray([], groupedMessagesByDates[dateKey], true), [[newMessage]], false);
39
+ if ((0, getMessagesGroupedByDate_1.isWithinTimeThreshold)(lastMessageFromGroup, newMessage)) {
40
+ // make a new message the last in the group
41
+ delete lastMessageFromGroup.isLastMessage;
42
+ delete newMessage.isFirstMessage;
43
+ if (lastMessageGroup.length === 1) {
44
+ messagesGroupForCurrentDate = __spreadArray(__spreadArray([], currentGroupedMessagesByDates, true), [[lastMessageFromGroup, newMessage]], false);
45
+ }
46
+ else {
47
+ messagesGroupForCurrentDate = __spreadArray(__spreadArray([], currentGroupedMessagesByDates, true), [__spreadArray(__spreadArray([], lastMessageGroup, true), [newMessage], false)], false);
48
+ }
49
+ }
50
+ return __assign(__assign({}, groupedMessagesByDates), (_a = {}, _a[dateKey] = messagesGroupForCurrentDate, _a));
51
+ };
52
+ var addNewMessageIntoGroupedMessages = function (newMessage, groupedMessagesByDates) {
53
+ var _a;
54
+ var dateKey = (0, dayjs_1["default"])(newMessage.timestamp).format(timeTemplatesAndUnits_1.MONTH_AND_DAY_TEMPLATE);
55
+ var singleMessageInGroup = __assign(__assign({}, newMessage), { isFirstMessage: true, isLastMessage: true });
56
+ if (groupedMessagesByDates[dateKey]) {
57
+ return addMessageToExistingGroup(singleMessageInGroup, groupedMessagesByDates, dateKey);
58
+ }
59
+ return __assign(__assign({}, groupedMessagesByDates), (_a = {}, _a[dateKey] = [[singleMessageInGroup]], _a));
60
+ };
61
+ exports.addNewMessageIntoGroupedMessages = addNewMessageIntoGroupedMessages;
@@ -0,0 +1 @@
1
+ export declare const calculateMessageTimeAgo: (timestamp: any) => string;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.calculateMessageTimeAgo = void 0;
7
+ var dayjs_1 = __importDefault(require("dayjs"));
8
+ var timeTemplatesAndUnits_1 = require("../constants/timeTemplatesAndUnits");
9
+ var calculateMessageTimeAgo = function (timestamp) {
10
+ var now = (0, dayjs_1["default"])();
11
+ var messageTime = (0, dayjs_1["default"])(timestamp);
12
+ var diffInMinutes = now.diff(messageTime, timeTemplatesAndUnits_1.MINUTE_UNIT);
13
+ var diffInHours = now.diff(messageTime, timeTemplatesAndUnits_1.HOUR_UNIT);
14
+ var timeAgo = '';
15
+ if (diffInMinutes < timeTemplatesAndUnits_1.MINUTES_IN_HOUR_VALUE) {
16
+ timeAgo = __("".concat(diffInMinutes, " \u043C\u0438\u043D. \u043D\u0430\u0437\u0430\u0434"), { diffInMinutes: diffInMinutes });
17
+ }
18
+ else if (diffInHours < timeTemplatesAndUnits_1.HOURS_IN_DAY_VALUE) {
19
+ timeAgo = __("".concat(diffInHours, " \u0447. \u043D\u0430\u0437\u0430\u0434"), { diffInHours: diffInHours });
20
+ }
21
+ else {
22
+ timeAgo = messageTime.format(timeTemplatesAndUnits_1.HOURS_AND_MINUTES_TEMPLATE);
23
+ }
24
+ return timeAgo;
25
+ };
26
+ exports.calculateMessageTimeAgo = calculateMessageTimeAgo;
@@ -0,0 +1,4 @@
1
+ import { IGroupedMessagesByDates } from '../hooks/useChat';
2
+ import { IChatMessage } from '../Chat';
3
+ export declare const isWithinTimeThreshold: (firstMessage: IChatMessage, secondMessage: IChatMessage) => boolean;
4
+ export declare const getMessagesGroupedByDate: (messages: IChatMessage[]) => IGroupedMessagesByDates;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.getMessagesGroupedByDate = exports.isWithinTimeThreshold = void 0;
7
+ var first_1 = __importDefault(require("lodash-es/first"));
8
+ var last_1 = __importDefault(require("lodash-es/last"));
9
+ var dayjs_1 = __importDefault(require("dayjs"));
10
+ var timeTemplatesAndUnits_1 = require("../constants/timeTemplatesAndUnits");
11
+ var isWithinTimeThreshold = function (firstMessage, secondMessage) {
12
+ var firstMessageTime = new Date(firstMessage.timestamp).getTime();
13
+ var secondMessageTime = new Date(secondMessage.timestamp).getTime();
14
+ return firstMessage.user.id === secondMessage.user.id && Math.abs(firstMessageTime - secondMessageTime) <= timeTemplatesAndUnits_1.SECONDS_IN_MINUTE_VALUE;
15
+ };
16
+ exports.isWithinTimeThreshold = isWithinTimeThreshold;
17
+ var addFirstAndLastKeyForMessageGroup = function (messageGroup) {
18
+ (0, first_1["default"])(messageGroup).isFirstMessage = true;
19
+ (0, last_1["default"])(messageGroup).isLastMessage = true;
20
+ };
21
+ var getMessagesGroupedByDate = function (messages) {
22
+ var groupedMessages = {};
23
+ var prevDateKey = null;
24
+ messages.forEach(function (message) {
25
+ var dateKey = (0, dayjs_1["default"])(message.timestamp).format(timeTemplatesAndUnits_1.MONTH_AND_DAY_TEMPLATE);
26
+ if (!groupedMessages[dateKey]) {
27
+ groupedMessages[dateKey] = [];
28
+ }
29
+ // array of grouped messages for dateKey
30
+ var messagesGroupFromDate = groupedMessages[dateKey];
31
+ // last group of messages
32
+ var lastMessageGroup = (0, last_1["default"])(messagesGroupFromDate);
33
+ // add fields to the last group of messages for the previous date
34
+ if (!lastMessageGroup && prevDateKey) {
35
+ addFirstAndLastKeyForMessageGroup((0, last_1["default"])(groupedMessages[prevDateKey]));
36
+ }
37
+ var lastMessageFromGroup = (0, last_1["default"])(lastMessageGroup);
38
+ // if time difference between messages is less than a minute, and they are from the same user
39
+ if (lastMessageFromGroup && (0, exports.isWithinTimeThreshold)(lastMessageFromGroup, message)) {
40
+ lastMessageGroup.push(message);
41
+ }
42
+ else if (lastMessageGroup) {
43
+ // add fields to the previous group of messages for the same date
44
+ addFirstAndLastKeyForMessageGroup(lastMessageGroup);
45
+ messagesGroupFromDate.push([message]);
46
+ }
47
+ else {
48
+ prevDateKey = dateKey;
49
+ messagesGroupFromDate.push([message]);
50
+ }
51
+ });
52
+ // add fields to the last group of messages
53
+ addFirstAndLastKeyForMessageGroup((0, last_1["default"])(groupedMessages[prevDateKey]));
54
+ return groupedMessages;
55
+ };
56
+ exports.getMessagesGroupedByDate = getMessagesGroupedByDate;
@@ -0,0 +1,5 @@
1
+ import { getMessagesGroupedByDate, isWithinTimeThreshold } from './getMessagesGroupedByDate';
2
+ import { addNewMessageIntoGroupedMessages } from './addNewMessageIntoGroupedMessages';
3
+ import { calculateMessageTimeAgo } from './calculateMessageTimeAgo';
4
+ import { isTodayMessage } from './isTodayMessage';
5
+ export { getMessagesGroupedByDate, isWithinTimeThreshold, addNewMessageIntoGroupedMessages, calculateMessageTimeAgo, isTodayMessage, };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.isTodayMessage = exports.calculateMessageTimeAgo = exports.addNewMessageIntoGroupedMessages = exports.isWithinTimeThreshold = exports.getMessagesGroupedByDate = void 0;
4
+ var getMessagesGroupedByDate_1 = require("./getMessagesGroupedByDate");
5
+ exports.getMessagesGroupedByDate = getMessagesGroupedByDate_1.getMessagesGroupedByDate;
6
+ exports.isWithinTimeThreshold = getMessagesGroupedByDate_1.isWithinTimeThreshold;
7
+ var addNewMessageIntoGroupedMessages_1 = require("./addNewMessageIntoGroupedMessages");
8
+ exports.addNewMessageIntoGroupedMessages = addNewMessageIntoGroupedMessages_1.addNewMessageIntoGroupedMessages;
9
+ var calculateMessageTimeAgo_1 = require("./calculateMessageTimeAgo");
10
+ exports.calculateMessageTimeAgo = calculateMessageTimeAgo_1.calculateMessageTimeAgo;
11
+ var isTodayMessage_1 = require("./isTodayMessage");
12
+ exports.isTodayMessage = isTodayMessage_1.isTodayMessage;
@@ -0,0 +1 @@
1
+ export declare const isTodayMessage: (timestamp: string | Date) => boolean;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.isTodayMessage = void 0;
7
+ var dayjs_1 = __importDefault(require("dayjs"));
8
+ var isTodayMessage = function (timestamp) {
9
+ var messageDate = (0, dayjs_1["default"])(timestamp);
10
+ var currentDate = (0, dayjs_1["default"])();
11
+ return currentDate.isSame(messageDate, 'day') || currentDate.isAfter(messageDate);
12
+ };
13
+ exports.isTodayMessage = isTodayMessage;
@@ -33,9 +33,9 @@ export interface ICopyToClipboardProps extends IUiComponent {
33
33
  * message: 'Some value has been copied to buffer',
34
34
  * level: 'info',
35
35
  * params: {
36
- * position: 'top-left',
37
- * timeOut: 100,
38
- * }
36
+ * position: 'top-left',
37
+ * timeOut: 100,
38
+ * }
39
39
  * }
40
40
  */
41
41
  notification?: string | {
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -87,7 +76,16 @@ function CopyToClipboard(props) {
87
76
  }
88
77
  });
89
78
  }); }, [dispatch, isCopied, notification, props]);
90
- return components.ui.renderView(props.view || 'content.CopyToClipboardView', __assign(__assign({}, props), { onClick: onClick }));
79
+ var viewProps = (0, react_1.useMemo)(function () { return ({
80
+ disabled: props.disabled,
81
+ showCopyIcon: props.showCopyIcon,
82
+ icon: props.icon,
83
+ children: props.children,
84
+ className: props.className,
85
+ style: props.style,
86
+ onClick: onClick
87
+ }); }, [onClick, props.children, props.className, props.disabled, props.icon, props.showCopyIcon, props.style]);
88
+ return components.ui.renderView(props.view || 'content.CopyToClipboardView', viewProps);
91
89
  }
92
90
  CopyToClipboard.defaultProps = {
93
91
  showCopyIcon: true
@@ -5,6 +5,10 @@ export interface IDashboardItem extends IFlexGridItem {
5
5
  * Заголовок для элемента
6
6
  */
7
7
  title?: string;
8
+ /**
9
+ * Иконка, которая отобразится слева от заголовка
10
+ */
11
+ iconName?: string;
8
12
  }
9
13
  /**
10
14
  * Dashboard
@@ -21,9 +25,8 @@ export interface IDashboardProps extends IUiComponent, IFlexGridProps {
21
25
  */
22
26
  itemView?: CustomView;
23
27
  }
24
- export interface IDashboardItemViewProps {
28
+ export interface IDashboardItemViewProps extends Pick<IDashboardItem, 'title' | 'iconName'> {
25
29
  children: React.ReactNode;
26
- title?: string;
27
30
  }
28
31
  declare function Dashboard(props: IDashboardProps): JSX.Element;
29
32
  export default Dashboard;
@@ -10,17 +10,41 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
13
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
38
  };
16
39
  exports.__esModule = true;
17
- var react_1 = __importDefault(require("react"));
40
+ var react_1 = __importStar(require("react"));
18
41
  var FlexGrid_1 = __importDefault(require("../../../ui/list/FlexGrid/FlexGrid"));
19
42
  var hooks_1 = require("../../../hooks");
20
43
  function Dashboard(props) {
21
44
  var components = (0, hooks_1.useComponents)();
22
45
  var DashboardItemView = props.itemView || components.ui.getView('content.DashboardItemView');
23
- var flexGridItems = react_1["default"].useMemo(function () { return props.items.map(function (item) { return (__assign(__assign({}, item), { content: (react_1["default"].createElement(DashboardItemView, { title: item.title }, item.content)) })); }); }, [DashboardItemView, props.items]);
24
- return (react_1["default"].createElement(FlexGrid_1["default"], __assign({}, props, { items: flexGridItems })));
46
+ var flexGridItems = react_1["default"].useMemo(function () { return props.items.map(function (item) { return (__assign(__assign({}, item), { content: (react_1["default"].createElement(DashboardItemView, { title: item.title, iconName: item.iconName }, item.content)) })); }); }, [DashboardItemView, props.items]);
47
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props), { items: flexGridItems })); }, [flexGridItems, props]);
48
+ return (react_1["default"].createElement(FlexGrid_1["default"], __assign({}, viewProps)));
25
49
  }
26
50
  exports["default"] = Dashboard;
@@ -58,7 +58,16 @@ export interface IDetailProps extends IUiComponent {
58
58
  layout?: DetailLayoutEnum;
59
59
  /**
60
60
  * Перестраивать таблицу при ресайзе
61
- * @example {enable: true, media: [{breakpoint: 600, column: 2}]}
61
+ * @example
62
+ * {
63
+ * enable: true,
64
+ * media: [
65
+ * {
66
+ * breakpoint: 600,
67
+ * column: 2
68
+ * }
69
+ * ]
70
+ * }
62
71
  */
63
72
  responsive?: boolean | IDetailResponsive;
64
73
  /**
@@ -73,7 +82,11 @@ export interface IDetailProps extends IUiComponent {
73
82
  title?: string | React.ReactNode;
74
83
  /**
75
84
  * Контролы, которые нужно расположить рядом с таблицей
76
- * @example [{label: __(('Edit')), onClick: () => props.onClick()}]
85
+ * @example
86
+ * [{
87
+ * label: __(('Edit')),
88
+ * onClick: () => props.onClick()
89
+ * }]
77
90
  */
78
91
  controls?: IControlItem[];
79
92
  /**
@@ -148,7 +148,18 @@ function Detail(props) {
148
148
  (0, react_1.useEffect)(function () {
149
149
  setRows(createRows(detailItems, column, props.layout));
150
150
  }, [column, detailItems, props.layout]);
151
- return components.ui.renderView(props.view || 'content.DetailView', __assign(__assign(__assign({}, props), { rows: rows }), (responsiveProps.enable ? { resizedNodeRef: resizedNodeRef } : {})));
151
+ var viewProps = (0, react_1.useMemo)(function () { return ({
152
+ title: props.title,
153
+ controls: props.controls,
154
+ layout: props.layout,
155
+ rows: rows,
156
+ resizedNodeRef: responsiveProps.enable ? { resizedNodeRef: resizedNodeRef } : {},
157
+ size: props.size,
158
+ className: props.className,
159
+ style: props.style
160
+ }); }, [props.title, props.controls, props.layout, props.size, props.className,
161
+ props.style, rows, responsiveProps.enable, resizedNodeRef]);
162
+ return components.ui.renderView(props.view || 'content.DetailView', viewProps);
152
163
  }
153
164
  exports["default"] = Detail;
154
165
  Detail.defaultProps = {
@@ -36,7 +36,7 @@ export interface IDropDownViewProps extends IDropDownProps, IAbsolutePositioning
36
36
  /**
37
37
  * Рассчет абсолютной позиции
38
38
  */
39
- calculatePosition: (componentSize: ClientRect) => void;
39
+ calculatePosition?: (dropDownDimensions: Record<string, any>, arrowDimensions: Record<string, any>) => void;
40
40
  /**
41
41
  * Ссылка на view
42
42
  */
@@ -45,7 +45,7 @@ var TooltipPortalInner_1 = __importDefault(require("../../layout/Tooltip/Tooltip
45
45
  var useAbsolutePositioning_1 = __importDefault(require("../../../hooks/useAbsolutePositioning"));
46
46
  function DropDown(props) {
47
47
  var components = (0, hooks_1.useComponents)();
48
- var _a = (0, useAbsolutePositioning_1["default"])(props), isComponentExist = _a.isComponentExist, isComponentVisible = _a.isComponentVisible, calculateAbsolutePosition = _a.calculateAbsolutePosition, onShow = _a.onShow, onHide = _a.onHide, position = _a.position, style = _a.style;
48
+ var _a = (0, useAbsolutePositioning_1["default"])(props), isComponentExist = _a.isComponentExist, isComponentVisible = _a.isComponentVisible, calculateAbsolutePosition = _a.calculateAbsolutePosition, onShow = _a.onShow, onHide = _a.onHide, position = _a.position, arrowPosition = _a.arrowPosition, style = _a.style;
49
49
  var childRef = (0, react_1.useRef)(null);
50
50
  var isManualControl = props.visible !== undefined;
51
51
  // Outside click -> close
@@ -70,8 +70,8 @@ function DropDown(props) {
70
70
  }, [isComponentExist, isComponentVisible, onHide, props.closeMode]);
71
71
  (0, react_use_1.useEvent)('mousedown', onAnyClick);
72
72
  (0, react_use_1.useEvent)('touchstart', onAnyClick);
73
- var calculatePosition = (0, react_1.useCallback)(function (componentSize) {
74
- calculateAbsolutePosition(position, childRef.current, componentSize);
73
+ var calculatePosition = (0, react_1.useCallback)(function (componentSize, arrowSize) {
74
+ calculateAbsolutePosition(position, childRef.current, componentSize, arrowSize);
75
75
  // eslint-disable-next-line react-hooks/exhaustive-deps
76
76
  }, []);
77
77
  var DropDownView = components.ui.getView(props.view || 'content.DropDownView');
@@ -86,6 +86,18 @@ function DropDown(props) {
86
86
  onShow();
87
87
  };
88
88
  }
89
+ var viewProps = (0, react_1.useMemo)(function () { return ({
90
+ className: props.className,
91
+ forwardedRef: forwardedRef,
92
+ content: props.content,
93
+ position: position,
94
+ style: style,
95
+ arrowPosition: arrowPosition,
96
+ calculatePosition: calculatePosition,
97
+ isComponentVisible: isComponentVisible,
98
+ onClose: onHide,
99
+ hasArrow: props.hasArrow
100
+ }); }, [arrowPosition, calculatePosition, isComponentVisible, onHide, props.className, props.content, props.hasArrow, position, style]);
89
101
  return (React.createElement(React.Fragment, null,
90
102
  childrenElement
91
103
  ? React.cloneElement(childrenElement, resultProps)
@@ -93,7 +105,7 @@ function DropDown(props) {
93
105
  isComponentExist && (
94
106
  // TODO Change Portal to global
95
107
  React.createElement(TooltipPortalInner_1["default"], null,
96
- React.createElement(DropDownView, __assign({}, props, { className: props.className, forwardedRef: forwardedRef, content: props.content, position: position, style: style, calculatePosition: calculatePosition, isComponentVisible: isComponentVisible, onClose: onHide }))))));
108
+ React.createElement(DropDownView, __assign({}, viewProps))))));
97
109
  }
98
110
  DropDown.defaultProps = {
99
111
  autoPositioning: true,
@@ -1,29 +1,16 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
4
  };
16
5
  exports.__esModule = true;
17
6
  var isObject_1 = __importDefault(require("lodash-es/isObject"));
18
7
  var isString_1 = __importDefault(require("lodash-es/isString"));
8
+ var react_1 = require("react");
19
9
  var hooks_1 = require("../../../hooks");
20
10
  var DEFAULT_ICON_NAME = 'default_24x24';
21
11
  function Icon(props) {
22
12
  var components = (0, hooks_1.useComponents)();
23
13
  var name = props.name;
24
- if (!(0, isString_1["default"])(name)) {
25
- return null;
26
- }
27
14
  var icon;
28
15
  if (process.env.PLATFORM === 'mobile') {
29
16
  icon = components.ui.getIcon(name) || name;
@@ -48,6 +35,17 @@ function Icon(props) {
48
35
  icon = components.ui.getIcon(DEFAULT_ICON_NAME);
49
36
  }
50
37
  }
51
- return components.ui.renderView(props.view || 'content.IconView', __assign(__assign({}, props), { icon: icon }));
38
+ var viewProps = (0, react_1.useMemo)(function () { return ({
39
+ onClick: props.onClick,
40
+ tabIndex: props.tabIndex,
41
+ title: props.title,
42
+ className: props.className,
43
+ style: props.style,
44
+ icon: icon
45
+ }); }, [props.onClick, props.tabIndex, props.title, props.className, props.style, icon]);
46
+ if (!(0, isString_1["default"])(name)) {
47
+ return null;
48
+ }
49
+ return components.ui.renderView(props.view || 'content.IconView', viewProps);
52
50
  }
53
51
  exports["default"] = Icon;
@@ -22,7 +22,7 @@ export interface ITaskPriority {
22
22
  type: string;
23
23
  }
24
24
  export interface IKanbanTask {
25
- id: string;
25
+ id: number;
26
26
  title: string;
27
27
  description?: string;
28
28
  fullDescription?: string;
@@ -46,7 +46,7 @@ export interface IDragEndResult {
46
46
  combine: null;
47
47
  }
48
48
  export interface IKanbanColumn {
49
- id: string;
49
+ id: number;
50
50
  title: string;
51
51
  tasks: IKanbanTask[];
52
52
  }
@@ -69,6 +69,17 @@ export interface IKanbanTaskDetailsModalViewProps extends IModalProps {
69
69
  bem: IBem;
70
70
  task: IKanbanTask;
71
71
  }
72
+ /**
73
+ * Kanban
74
+ *
75
+ * Компонент `Kanban` позволяет создать доску для управления задачами.
76
+ * Количество столбцов задается с помощью пропа `columns`.
77
+ * Задачи на доске можно создавать, редактировать и перемещать с визуальным отображением.
78
+ *
79
+ * Для работы этого компонента необходимо установить в проекте зависимости `react-beautiful-dnd`
80
+ * и передать в пропсы `droppableComponent`, `draggableComponent` и `dndContext`
81
+ * компоненты `Droppable`, `Draggable` и `DragDropContext` соответственно.
82
+ */
72
83
  export interface IKanbanProps extends IKanbanConfig, IUiComponent {
73
84
  /**
74
85
  * Компонент обертка для инициализации области куда можно переместить элемент из библиотеки react-beautiful-dnd
@@ -100,8 +111,8 @@ export interface IKanbanColumnViewProps {
100
111
  droppableComponent: any;
101
112
  draggableComponent: any;
102
113
  task?: IKanbanTask;
103
- renderTask: (task: IKanbanTask, columnId: string, index: number) => JSX.Element;
104
- onOpenCreateTaskModal: (columnId: string) => void;
114
+ renderTask: (task: IKanbanTask, columnId: number, index: number) => JSX.Element;
115
+ onOpenCreateTaskModal: (columnId: number) => void;
105
116
  }
106
117
  export type IKanbanViewProps = IKanbanProps;
107
118
  export default function Kanban(props: IKanbanProps): JSX.Element;
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
3
  if (k2 === undefined) k2 = k;
15
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -54,6 +43,13 @@ function Kanban(props) {
54
43
  // Column
55
44
  var Column = components.ui.getView('content.KanbanColumnView');
56
45
  var renderColumn = (0, react_1.useCallback)(function (column, index) { return (react_1["default"].createElement(Column, { key: column.id, column: column, columnIndex: index, draggableComponent: props.draggableComponent, droppableComponent: props.droppableComponent, renderTask: renderTask, onOpenCreateTaskModal: onOpenCreateTaskModal })); }, [Column, onOpenCreateTaskModal, props.draggableComponent, props.droppableComponent, renderTask]);
57
- return (react_1["default"].createElement(DragDropContext, { onDragEnd: onDragEnd }, components.ui.renderView(props.view || 'content.KanbanView', __assign(__assign({}, props), { columns: columns, renderColumn: renderColumn }))));
46
+ var viewProps = (0, react_1.useMemo)(function () { return ({
47
+ columns: columns,
48
+ renderColumn: renderColumn,
49
+ droppableComponent: props.droppableComponent,
50
+ className: props.className,
51
+ style: props.style
52
+ }); }, [columns, renderColumn, props.droppableComponent, props.className, props.style]);
53
+ return (react_1["default"].createElement(DragDropContext, { onDragEnd: onDragEnd }, components.ui.renderView(props.view || 'content.KanbanView', viewProps)));
58
54
  }
59
55
  exports["default"] = Kanban;