@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.
- package/actions/notifications.js +7 -1
- package/actions/router.js +16 -2
- package/components/HttpComponent.d.ts +7 -7
- package/components/JwtHttpComponent.d.ts +2 -2
- package/components/LocaleComponent.d.ts +6 -6
- package/components/MetaComponent.d.ts +90 -1
- package/components/MetricsComponent.js +2 -1
- package/components/ResourceComponent.d.ts +4 -4
- package/components/UiComponent.d.ts +7 -7
- package/components/WebSocketComponent.d.ts +11 -11
- package/docs-autogen-result.json +15226 -6277
- package/en.json +151 -84
- package/hooks/index.d.ts +4 -3
- package/hooks/index.js +7 -5
- package/hooks/useAbsolutePositioning.js +0 -1
- package/hooks/useAddressBar.js +0 -1
- package/hooks/useApplication.js +8 -1
- package/hooks/useDataProvider.d.ts +17 -2
- package/hooks/useDataSelect.js +21 -4
- package/hooks/useFetch.js +6 -1
- package/hooks/useFile.d.ts +1 -0
- package/hooks/useFile.js +2 -0
- package/hooks/useList.d.ts +53 -14
- package/hooks/useList.js +31 -70
- package/hooks/useTree.d.ts +104 -0
- package/hooks/useTree.js +169 -0
- package/index.d.ts +3 -3
- package/package.json +94 -93
- package/reducers/router.d.ts +2 -1
- package/ui/content/Accordion/Accordion.d.ts +8 -5
- package/ui/content/Accordion/Accordion.js +6 -1
- package/ui/content/Accordion/AccordionItem.d.ts +2 -2
- package/ui/content/Accordion/AccordionItem.js +1 -12
- package/ui/content/Alert/Alert.d.ts +5 -2
- package/ui/content/Alert/Alert.js +13 -12
- package/ui/content/Avatar/Avatar.js +18 -12
- package/ui/content/Badge/Badge.d.ts +5 -1
- package/ui/content/Badge/Badge.js +14 -12
- package/ui/content/Calendar/Calendar.d.ts +6 -1
- package/ui/content/Calendar/Calendar.js +19 -12
- package/ui/content/CalendarSystem/CalendarSystem.d.ts +94 -17
- package/ui/content/CalendarSystem/CalendarSystem.js +66 -77
- package/ui/content/CalendarSystem/hooks/useCalendarControls.d.ts +1 -2
- package/ui/content/CalendarSystem/hooks/useCalendarControls.js +14 -17
- package/ui/content/CalendarSystem/hooks/useCalendarSystemEventGroupModals.d.ts +2 -1
- package/ui/content/CalendarSystem/hooks/useCalendarSystemEventGroupModals.js +13 -5
- package/ui/content/CalendarSystem/hooks/useCalendarSystemModals.js +2 -2
- package/ui/content/CalendarSystem/hooks/useCalendarType.d.ts +5 -0
- package/ui/content/CalendarSystem/hooks/useCalendarType.js +22 -0
- package/ui/content/CalendarSystem/hooks/useEventsFromDate.d.ts +5 -0
- package/ui/content/CalendarSystem/hooks/useEventsFromDate.js +49 -0
- package/ui/content/CalendarSystem/hooks/{useMonthCalendar.d.ts → useMonthGrid.d.ts} +4 -5
- package/ui/content/CalendarSystem/hooks/{useMonthCalendar.js → useMonthGrid.js} +24 -15
- package/ui/content/CalendarSystem/hooks/{useWeekCalendar.d.ts → useWeekGrid.d.ts} +6 -5
- package/ui/content/CalendarSystem/hooks/useWeekGrid.js +72 -0
- package/ui/content/CalendarSystem/utils/utils.d.ts +8 -0
- package/ui/content/CalendarSystem/utils/utils.js +27 -1
- package/ui/content/Card/Card.d.ts +33 -27
- package/ui/content/Card/Card.js +1 -12
- package/ui/content/Chart/Chart.d.ts +38 -8
- package/ui/content/Chart/Chart.js +16 -12
- package/ui/content/Chat/Chat.d.ts +109 -0
- package/ui/content/Chat/Chat.js +52 -0
- package/ui/content/Chat/constants/timeTemplatesAndUnits.d.ts +8 -0
- package/ui/content/Chat/constants/timeTemplatesAndUnits.js +11 -0
- package/ui/content/Chat/hooks/useChat.d.ts +12 -0
- package/ui/content/Chat/hooks/useChat.js +58 -0
- package/ui/content/Chat/index.d.ts +2 -0
- package/ui/content/Chat/index.js +7 -0
- package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.d.ts +5 -0
- package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.js +61 -0
- package/ui/content/Chat/utils/calculateMessageTimeAgo.d.ts +1 -0
- package/ui/content/Chat/utils/calculateMessageTimeAgo.js +26 -0
- package/ui/content/Chat/utils/getMessagesGroupedByDate.d.ts +4 -0
- package/ui/content/Chat/utils/getMessagesGroupedByDate.js +56 -0
- package/ui/content/Chat/utils/index.d.ts +5 -0
- package/ui/content/Chat/utils/index.js +12 -0
- package/ui/content/Chat/utils/isTodayMessage.d.ts +1 -0
- package/ui/content/Chat/utils/isTodayMessage.js +13 -0
- package/ui/content/CopyToClipboard/CopyToClipboard.d.ts +3 -3
- package/ui/content/CopyToClipboard/CopyToClipboard.js +10 -12
- package/ui/content/Dashboard/Dashboard.d.ts +5 -2
- package/ui/content/Dashboard/Dashboard.js +27 -3
- package/ui/content/Detail/Detail.d.ts +15 -2
- package/ui/content/Detail/Detail.js +12 -1
- package/ui/content/DropDown/DropDown.d.ts +1 -1
- package/ui/content/DropDown/DropDown.js +16 -4
- package/ui/content/Icon/Icon.js +13 -15
- package/ui/content/Kanban/Kanban.d.ts +15 -4
- package/ui/content/Kanban/Kanban.js +8 -12
- package/ui/content/Kanban/hooks/useKanban.d.ts +33 -26
- package/ui/content/Menu/Menu.js +10 -12
- package/ui/content/Slider/Slider.js +1 -12
- package/ui/content/index.d.ts +2 -1
- package/ui/content/index.js +3 -1
- package/ui/crud/index.d.ts +3 -0
- package/ui/form/AutoCompleteField/AutoCompleteField.js +1 -1
- package/ui/form/Button/Button.js +8 -2
- package/ui/form/CheckboxField/CheckboxField.d.ts +1 -0
- package/ui/form/CheckboxField/CheckboxField.js +2 -2
- package/ui/form/CheckboxListField/CheckboxListField.d.ts +18 -2
- package/ui/form/CheckboxListField/CheckboxListField.js +1 -1
- package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +67 -0
- package/ui/form/CheckboxTreeField/CheckboxTreeField.js +126 -0
- package/ui/form/CheckboxTreeField/index.d.ts +2 -0
- package/ui/form/CheckboxTreeField/index.js +7 -0
- package/ui/form/DateField/DateField.js +4 -1
- package/ui/form/DateField/useDateRange.d.ts +1 -0
- package/ui/form/DateField/useDateRange.js +13 -2
- package/ui/form/DateRangeField/DateRangeField.d.ts +34 -1
- package/ui/form/DateRangeField/DateRangeField.js +59 -8
- package/ui/form/DateTimeField/DateTimeField.d.ts +10 -0
- package/ui/form/DateTimeField/DateTimeField.js +11 -3
- package/ui/form/DateTimeRangeField/DateTimeRangeField.d.ts +25 -1
- package/ui/form/DateTimeRangeField/DateTimeRangeField.js +66 -13
- package/ui/form/DropDownField/DropDownField.d.ts +23 -3
- package/ui/form/DropDownField/DropDownField.js +1 -1
- package/ui/form/EmailField/EmailField.d.ts +6 -0
- package/ui/form/EmailField/EmailField.js +0 -4
- package/ui/form/Field/Field.d.ts +9 -1
- package/ui/form/Field/Field.js +1 -1
- package/ui/form/Field/fieldWrapper.d.ts +9 -1
- package/ui/form/FieldList/FieldList.d.ts +13 -7
- package/ui/form/FieldList/FieldList.js +30 -4
- package/ui/form/FileField/FileField.js +5 -0
- package/ui/form/Form/Form.d.ts +26 -3
- package/ui/form/Form/Form.js +5 -3
- package/ui/form/ImageField/ImageField.d.ts +9 -1
- package/ui/form/InputField/InputField.d.ts +5 -2
- package/ui/form/InputField/hooks/useInputFieldWarningByType.js +1 -0
- package/ui/form/NumberField/NumberField.js +34 -7
- package/ui/form/SliderField/SliderField.d.ts +10 -2
- package/ui/form/TimeRangeField/TimeRangeField.d.ts +10 -1
- package/ui/form/TimeRangeField/TimeRangeField.js +3 -1
- package/ui/form/WizardForm/WizardForm.d.ts +119 -0
- package/ui/form/WizardForm/WizardForm.js +167 -0
- package/ui/form/WizardForm/index.d.ts +2 -0
- package/ui/form/WizardForm/index.js +7 -0
- package/ui/form/WizardForm/utils.d.ts +12 -0
- package/ui/form/WizardForm/utils.js +111 -0
- package/ui/form/index.d.ts +3 -1
- package/ui/form/index.js +4 -1
- package/ui/layout/ProgressBar/ProgressBar.js +8 -2
- package/ui/layout/Skeleton/Skeleton.d.ts +3 -1
- package/ui/layout/Tooltip/Tooltip.d.ts +4 -1
- package/ui/list/ControlsColumn/ControlsColumn.d.ts +17 -3
- package/ui/list/FlexGrid/FlexGrid.d.ts +11 -1
- package/ui/list/Grid/Grid.d.ts +42 -6
- package/ui/list/Grid/Grid.js +1 -2
- package/ui/list/LayoutNames/LayoutNames.d.ts +11 -1
- package/ui/list/Steps/Steps.d.ts +19 -7
- package/ui/list/Steps/Steps.js +46 -26
- package/ui/list/TreeTable/TreeTable.d.ts +34 -33
- package/ui/list/TreeTable/TreeTable.js +19 -8
- package/ui/modal/Modal/Modal.d.ts +7 -1
- package/ui/nav/Breadcrumbs/Breadcrumbs.d.ts +11 -1
- package/ui/nav/ButtonGroup/ButtonGroup.d.ts +13 -4
- package/ui/nav/Controls/Controls.d.ts +7 -1
- package/ui/nav/Link/Link.d.ts +1 -1
- package/ui/nav/Nav/Nav.d.ts +19 -4
- package/ui/nav/Router/Router.d.ts +19 -3
- package/ui/nav/Router/Router.js +11 -6
- package/ui/nav/Router/helpers.d.ts +2 -2
- package/ui/nav/Router/helpers.js +39 -7
- package/ui/nav/Tree/Tree.d.ts +32 -62
- package/ui/nav/Tree/Tree.js +18 -165
- package/utils/calculateComponentAbsolutePosition.js +74 -24
- package/utils/calendar.d.ts +8 -0
- package/utils/calendar.js +76 -1
- package/utils/data.js +1 -0
- package/utils/form.d.ts +1 -0
- package/utils/form.js +16 -1
- package/ui/content/CalendarSystem/hooks/useWeekCalendar.js +0 -86
- package/utils/list.d.ts +0 -1
- 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,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
|
-
*
|
|
37
|
-
*
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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({},
|
|
108
|
+
React.createElement(DropDownView, __assign({}, viewProps))))));
|
|
97
109
|
}
|
|
98
110
|
DropDown.defaultProps = {
|
|
99
111
|
autoPositioning: true,
|
package/ui/content/Icon/Icon.js
CHANGED
|
@@ -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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
104
|
-
onOpenCreateTaskModal: (columnId:
|
|
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
|
-
|
|
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;
|