@steroidsjs/core 3.0.0-beta.112 → 3.0.0-beta.113
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/router.js +19 -2
- package/hooks/index.d.ts +3 -3
- package/hooks/index.js +5 -5
- package/hooks/useTree.d.ts +5 -0
- package/hooks/useTree.js +3 -2
- package/package.json +1 -1
- package/ui/content/CalendarSystem/CalendarSystem.d.ts +27 -16
- package/ui/content/CalendarSystem/CalendarSystem.js +65 -76
- 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.js +3 -3
- 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} +20 -14
- 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/form/CheckboxTreeField/CheckboxTreeField.d.ts +2 -3
- package/ui/form/CheckboxTreeField/CheckboxTreeField.js +1 -1
- package/ui/list/TreeTable/TreeTable.d.ts +5 -4
- package/ui/list/TreeTable/TreeTable.js +3 -3
- package/ui/nav/Router/Router.d.ts +6 -0
- package/ui/nav/Router/Router.js +4 -3
- package/ui/nav/Router/helpers.d.ts +2 -2
- package/ui/nav/Router/helpers.js +41 -7
- package/ui/nav/Tree/Tree.d.ts +13 -2
- package/ui/nav/Tree/Tree.js +5 -2
- package/ui/content/CalendarSystem/hooks/useWeekCalendar.js +0 -86
package/actions/router.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
exports.__esModule = true;
|
|
3
3
|
exports.goToParent = exports.goToRoute = exports.initParams = exports.initRoutes = exports.ROUTER_SET_DATA = exports.ROUTER_SET_PARAMS = exports.ROUTER_INIT_ROUTES = void 0;
|
|
4
4
|
var connected_react_router_1 = require("connected-react-router");
|
|
5
|
+
var path_to_regexp_1 = require("path-to-regexp");
|
|
5
6
|
exports.ROUTER_INIT_ROUTES = 'ROUTER_INIT_ROUTES';
|
|
6
7
|
exports.ROUTER_SET_PARAMS = 'ROUTER_SET_PARAMS';
|
|
7
8
|
exports.ROUTER_SET_DATA = 'ROUTER_SET_DATA';
|
|
@@ -15,6 +16,20 @@ var initParams = function (params) { return ({
|
|
|
15
16
|
params: params
|
|
16
17
|
}); };
|
|
17
18
|
exports.initParams = initParams;
|
|
19
|
+
// Include in the result only those parameters that are present as route parameters in the path
|
|
20
|
+
// For example, given the path '/users/:id' and the parameters { id: 1, page: 3, totalPages: 10 }, the function will return { id: 1 }.
|
|
21
|
+
var filterParamsForPath = function (path, params) {
|
|
22
|
+
if (!path) {
|
|
23
|
+
return params;
|
|
24
|
+
}
|
|
25
|
+
var parsedPath = (0, path_to_regexp_1.parse)(path);
|
|
26
|
+
return parsedPath.reduce(function (filteredParams, param) {
|
|
27
|
+
if (typeof param === 'object' && params[param.name]) {
|
|
28
|
+
filteredParams[param.name] = params[param.name];
|
|
29
|
+
}
|
|
30
|
+
return filteredParams;
|
|
31
|
+
}, {});
|
|
32
|
+
};
|
|
18
33
|
var goToRoute = function (routeId, params, isReplace) {
|
|
19
34
|
if (params === void 0) { params = null; }
|
|
20
35
|
if (isReplace === void 0) { isReplace = false; }
|
|
@@ -27,8 +42,10 @@ var goToRoute = function (routeId, params, isReplace) {
|
|
|
27
42
|
var getRouteProp = require('../reducers/router').getRouteProp;
|
|
28
43
|
var buildUrl = require('../reducers/router').buildUrl;
|
|
29
44
|
var path = getRouteProp(getState(), routeId, 'path');
|
|
30
|
-
var
|
|
31
|
-
|
|
45
|
+
var filteredParams = filterParamsForPath(path, params);
|
|
46
|
+
var routeUrl = buildUrl(path, filteredParams);
|
|
47
|
+
var reduxAction = isReplace ? (0, connected_react_router_1.replace)(routeUrl) : (0, connected_react_router_1.push)(routeUrl);
|
|
48
|
+
return dispatch(reduxAction);
|
|
32
49
|
};
|
|
33
50
|
};
|
|
34
51
|
exports.goToRoute = goToRoute;
|
package/hooks/index.d.ts
CHANGED
|
@@ -19,9 +19,9 @@ import useSsr from './useSsr';
|
|
|
19
19
|
import useUniqueId from './useUniqueId';
|
|
20
20
|
import useTheme from './useTheme';
|
|
21
21
|
import useTree from './useTree';
|
|
22
|
-
import
|
|
23
|
-
import
|
|
22
|
+
import useMonthGrid from '../ui/content/CalendarSystem/hooks/useMonthGrid';
|
|
23
|
+
import useWeekGrid from '../ui/content/CalendarSystem/hooks/useWeekGrid';
|
|
24
24
|
import useDisplayDate from '../ui/content/CalendarSystem/hooks/useDisplayDate';
|
|
25
25
|
import useCalendarControls from '../ui/content/CalendarSystem/hooks/useCalendarControls';
|
|
26
26
|
import useSaveCursorPosition from './useSaveCursorPosition';
|
|
27
|
-
export { useAbsolutePositioning, useAddressBar, useApplication, useBem, useComponents, useDataProvider, useDataSelect, useDispatch, useFetch, useFile, useForm, useInitial, useLayout, useList, useModel, useScreen, useSelector, useSsr, useUniqueId, useTheme, useTree,
|
|
27
|
+
export { useAbsolutePositioning, useAddressBar, useApplication, useBem, useComponents, useDataProvider, useDataSelect, useDispatch, useFetch, useFile, useForm, useInitial, useLayout, useList, useModel, useScreen, useSelector, useSsr, useUniqueId, useTheme, useTree, useMonthGrid, useWeekGrid, useDisplayDate, useCalendarControls, useSaveCursorPosition, };
|
package/hooks/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
-
exports.useSaveCursorPosition = exports.useCalendarControls = exports.useDisplayDate = exports.
|
|
6
|
+
exports.useSaveCursorPosition = exports.useCalendarControls = exports.useDisplayDate = exports.useWeekGrid = exports.useMonthGrid = exports.useTree = exports.useTheme = exports.useUniqueId = exports.useSsr = exports.useSelector = exports.useScreen = exports.useModel = exports.useList = exports.useLayout = exports.useInitial = exports.useForm = exports.useFile = exports.useFetch = exports.useDispatch = exports.useDataSelect = exports.useDataProvider = exports.useComponents = exports.useBem = exports.useApplication = exports.useAddressBar = exports.useAbsolutePositioning = void 0;
|
|
7
7
|
var useAbsolutePositioning_1 = __importDefault(require("./useAbsolutePositioning"));
|
|
8
8
|
exports.useAbsolutePositioning = useAbsolutePositioning_1["default"];
|
|
9
9
|
var useAddressBar_1 = __importDefault(require("./useAddressBar"));
|
|
@@ -46,10 +46,10 @@ var useTheme_1 = __importDefault(require("./useTheme"));
|
|
|
46
46
|
exports.useTheme = useTheme_1["default"];
|
|
47
47
|
var useTree_1 = __importDefault(require("./useTree"));
|
|
48
48
|
exports.useTree = useTree_1["default"];
|
|
49
|
-
var
|
|
50
|
-
exports.
|
|
51
|
-
var
|
|
52
|
-
exports.
|
|
49
|
+
var useMonthGrid_1 = __importDefault(require("../ui/content/CalendarSystem/hooks/useMonthGrid"));
|
|
50
|
+
exports.useMonthGrid = useMonthGrid_1["default"];
|
|
51
|
+
var useWeekGrid_1 = __importDefault(require("../ui/content/CalendarSystem/hooks/useWeekGrid"));
|
|
52
|
+
exports.useWeekGrid = useWeekGrid_1["default"];
|
|
53
53
|
var useDisplayDate_1 = __importDefault(require("../ui/content/CalendarSystem/hooks/useDisplayDate"));
|
|
54
54
|
exports.useDisplayDate = useDisplayDate_1["default"];
|
|
55
55
|
var useCalendarControls_1 = __importDefault(require("../ui/content/CalendarSystem/hooks/useCalendarControls"));
|
package/hooks/useTree.d.ts
CHANGED
|
@@ -95,5 +95,10 @@ export interface ITreeConfig {
|
|
|
95
95
|
* @example: true
|
|
96
96
|
*/
|
|
97
97
|
routerParams?: any;
|
|
98
|
+
/**
|
|
99
|
+
* При повторном нажатии на выбранный элемент из дерева, он продолжит отображаться как активный.
|
|
100
|
+
* @example true
|
|
101
|
+
*/
|
|
102
|
+
useSameSelectedItemId?: boolean;
|
|
98
103
|
}
|
|
99
104
|
export default function useTree(config: ITreeConfig): ITreeOutput;
|
package/hooks/useTree.js
CHANGED
|
@@ -127,11 +127,12 @@ function useTree(config) {
|
|
|
127
127
|
if (config.onExpand) {
|
|
128
128
|
config.onExpand.call(null, e, item);
|
|
129
129
|
}
|
|
130
|
-
|
|
130
|
+
var sameUniqueIdAccordingToSettings = config.useSameSelectedItemId ? uniqueId : null;
|
|
131
|
+
setSelectedUniqueId(selectedUniqueId === uniqueId ? sameUniqueIdAccordingToSettings : uniqueId);
|
|
131
132
|
if (!(0, isEmpty_1["default"])(item[primaryKey])) {
|
|
132
133
|
setExpandedItems(__assign(__assign({}, expandedItems), (_a = {}, _a[uniqueId] = !expandedItems[uniqueId], _a)));
|
|
133
134
|
}
|
|
134
|
-
}, [config.onExpand, expandedItems, primaryKey, selectedUniqueId]);
|
|
135
|
+
}, [config.onExpand, config.useSameSelectedItemId, expandedItems, primaryKey, selectedUniqueId]);
|
|
135
136
|
var resultTreeItems = (0, react_1.useMemo)(function () {
|
|
136
137
|
var getItems = function (sourceItems, parentId, currentLevel) {
|
|
137
138
|
if (parentId === void 0) { parentId = EMPTY_PARENT_ID; }
|
package/package.json
CHANGED
|
@@ -102,30 +102,41 @@ export interface ICalendarSystemProps extends IUiComponent {
|
|
|
102
102
|
*/
|
|
103
103
|
eventGroups: IEventGroup[];
|
|
104
104
|
};
|
|
105
|
+
/**
|
|
106
|
+
* Дополнительные свойства, которые передаются во view компонента
|
|
107
|
+
*/
|
|
108
|
+
additionalViewProps?: Record<string, any>;
|
|
105
109
|
[key: string]: any;
|
|
106
110
|
}
|
|
107
|
-
export interface ICalendarSystemViewProps extends
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
allHours: string[];
|
|
111
|
-
calendarType: CalendarEnum;
|
|
112
|
-
dateToDisplay: string;
|
|
111
|
+
export interface ICalendarSystemViewProps extends Pick<ICalendarSystemProps, 'className' | 'style' | 'additionalViewProps'> {
|
|
112
|
+
openCreateModal: (eventInitialDay?: IDay) => void;
|
|
113
|
+
onInnerCalendarChangeMonth: (newDate: Date) => void;
|
|
113
114
|
eventGroups: IEventGroup[];
|
|
114
115
|
eventGroupsTitle: string;
|
|
115
|
-
selectedCalendarGroupsIds: number[];
|
|
116
|
-
onChangeCalendarType: (newType: string) => void;
|
|
117
|
-
onMonthChange: (newDate: Date) => void;
|
|
118
|
-
applyControl: (event: React.MouseEvent<HTMLElement>) => void;
|
|
119
|
-
openCreateModal: (eventInitialDay?: IDay) => void;
|
|
120
|
-
openCreateEventGroupModal: VoidFunction;
|
|
121
|
-
openEditModal: (event: IEvent) => void;
|
|
122
|
-
getEventsFromDate: (dateFromDay: Date, currentCalendarType: CalendarEnum) => IEvent[];
|
|
123
116
|
onChangeEventGroupsIds: (selectedIds: number[]) => void;
|
|
124
|
-
|
|
117
|
+
openCreateEventGroupModal: VoidFunction;
|
|
118
|
+
dateToDisplay: string;
|
|
119
|
+
handleCalendarTypeChange: (newType: string) => void;
|
|
120
|
+
handleControlClick: (event: React.MouseEvent<HTMLElement>) => void;
|
|
121
|
+
calendarType: CalendarEnum;
|
|
122
|
+
monthGridProps: {
|
|
123
|
+
monthGridWeekDays: string[];
|
|
124
|
+
monthGridCalendarDays: IDay[];
|
|
125
|
+
getEventsFromDate: (dateFromDay: Date, currentCalendarType: CalendarEnum) => IEvent[];
|
|
126
|
+
openEditModal: (event: IEvent) => void;
|
|
127
|
+
openCreateModal: (eventInitialDay?: IDay) => void;
|
|
128
|
+
};
|
|
129
|
+
weekGridProps: {
|
|
130
|
+
weekGridTwentyFourHoursArray: string[];
|
|
131
|
+
weekGridCurrentWeekDays: IDay[];
|
|
132
|
+
getEventsFromDate: (dateFromDay: Date, currentCalendarType: CalendarEnum) => IEvent[];
|
|
133
|
+
openEditModal: (event: IEvent) => void;
|
|
134
|
+
openCreateModal: (eventInitialDay?: IDay) => void;
|
|
135
|
+
};
|
|
125
136
|
}
|
|
126
137
|
export interface ICalendarSystemModalViewProps extends IModalProps {
|
|
127
138
|
eventGroups: IEventGroup[];
|
|
128
|
-
|
|
139
|
+
onModalFormSubmit: (fields: Record<CalendarSystemModalFields, string>, eventInitialValues?: IEventInitialValues) => void;
|
|
129
140
|
isCreate: boolean;
|
|
130
141
|
eventInitialValues?: any;
|
|
131
142
|
}
|
|
@@ -1,103 +1,92 @@
|
|
|
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;
|
|
6
|
+
/* eslint-disable max-len */
|
|
17
7
|
/* eslint-disable no-return-assign */
|
|
18
8
|
/* eslint-disable default-case */
|
|
19
9
|
/* eslint-disable no-unused-expressions */
|
|
20
10
|
/* eslint-disable no-plusplus */
|
|
21
11
|
var react_1 = __importDefault(require("react"));
|
|
22
12
|
var dayjs_1 = __importDefault(require("dayjs"));
|
|
23
|
-
var concat_1 = __importDefault(require("lodash-es/concat"));
|
|
24
|
-
var slice_1 = __importDefault(require("lodash-es/slice"));
|
|
25
13
|
var localeData_1 = __importDefault(require("dayjs/plugin/localeData"));
|
|
26
|
-
var upperFirst_1 = __importDefault(require("lodash-es/upperFirst"));
|
|
27
14
|
var useCalendarControls_1 = __importDefault(require("./hooks/useCalendarControls"));
|
|
28
15
|
var useDisplayDate_1 = __importDefault(require("./hooks/useDisplayDate"));
|
|
29
|
-
var
|
|
16
|
+
var useMonthGrid_1 = __importDefault(require("./hooks/useMonthGrid"));
|
|
30
17
|
var hooks_1 = require("../../../hooks");
|
|
31
|
-
var addEventIfMatchDate_1 = require("./helpers/addEventIfMatchDate");
|
|
32
|
-
var CalendarType_1 = __importDefault(require("./enums/CalendarType"));
|
|
33
18
|
var useCalendarSystemModals_1 = __importDefault(require("./hooks/useCalendarSystemModals"));
|
|
34
19
|
var useCalendarSystemEventGroupModals_1 = require("./hooks/useCalendarSystemEventGroupModals");
|
|
20
|
+
var useWeekGrid_1 = __importDefault(require("./hooks/useWeekGrid"));
|
|
21
|
+
var useCalendarType_1 = require("./hooks/useCalendarType");
|
|
22
|
+
var useEventsFromDate_1 = require("./hooks/useEventsFromDate");
|
|
35
23
|
dayjs_1["default"].extend(localeData_1["default"]);
|
|
36
24
|
function CalendarSystem(props) {
|
|
37
25
|
var components = (0, hooks_1.useComponents)();
|
|
38
26
|
var _a = react_1["default"].useState(props.eventBlock.eventGroups || []), innerEventGroups = _a[0], setInnerEventGroups = _a[1];
|
|
39
27
|
var _b = react_1["default"].useState([]), selectedEventGroupsIds = _b[0], setSelectedEventGroupsIds = _b[1];
|
|
40
|
-
var _c =
|
|
41
|
-
var _d =
|
|
42
|
-
var _e = (0,
|
|
43
|
-
var _f = (0,
|
|
44
|
-
var
|
|
45
|
-
var
|
|
28
|
+
var _c = react_1["default"].useState(null), currentMonthFirstDayDate = _c[0], setCurrentMonthFirstDayDate = _c[1];
|
|
29
|
+
var _d = (0, useDisplayDate_1["default"])(), dateToDisplay = _d.dateToDisplay, setNewDateToDisplay = _d.setNewDateToDisplay;
|
|
30
|
+
var _e = (0, useCalendarType_1.useCalendarType)(), calendarType = _e.calendarType, handleCalendarTypeChange = _e.handleCalendarTypeChange;
|
|
31
|
+
var _f = (0, useMonthGrid_1["default"])(currentMonthFirstDayDate, setCurrentMonthFirstDayDate), monthGridWeekDays = _f.monthGridWeekDays, monthGridCalendarDays = _f.monthGridCalendarDays;
|
|
32
|
+
var _g = (0, useWeekGrid_1["default"])(currentMonthFirstDayDate), weekGridTwentyFourHoursArray = _g.weekGridTwentyFourHoursArray, weekGridCurrentWeekDays = _g.weekGridCurrentWeekDays, weekGridControls = _g.weekGridControls, updateWeekOnMonthChange = _g.updateWeekOnMonthChange;
|
|
33
|
+
var handleControlClick = (0, useCalendarControls_1["default"])(calendarType, weekGridControls);
|
|
34
|
+
var _h = (0, useCalendarSystemModals_1["default"])(props.calendarModalProps, innerEventGroups, setInnerEventGroups), openCreateModal = _h.openCreateModal, openEditModal = _h.openEditModal;
|
|
46
35
|
var openCreateEventGroupModal = (0, useCalendarSystemEventGroupModals_1.useCalendarSystemEventGroupModals)(innerEventGroups, setInnerEventGroups, props.eventGroupModalProps).openCreateEventGroupModal;
|
|
47
|
-
var
|
|
48
|
-
setCalendarType(newType);
|
|
49
|
-
if (props.onChangeCalendarType) {
|
|
50
|
-
props.onChangeCalendarType(newType);
|
|
51
|
-
}
|
|
52
|
-
}, [props]);
|
|
53
|
-
var onMonthChange = react_1["default"].useCallback(function (newDate) {
|
|
36
|
+
var onInnerCalendarChangeMonth = react_1["default"].useCallback(function (newDate) {
|
|
54
37
|
setNewDateToDisplay(newDate);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}, [
|
|
58
|
-
var getEventsFromDate =
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
// eslint-disable-next-line consistent-return
|
|
87
|
-
return eventsOnDate;
|
|
88
|
-
};
|
|
89
|
-
var weekDays = react_1["default"].useMemo(function () {
|
|
90
|
-
var unformattedDaysOfWeek = dayjs_1["default"].weekdaysMin();
|
|
91
|
-
return (0, concat_1["default"])((0, slice_1["default"])(unformattedDaysOfWeek, 1), unformattedDaysOfWeek[0]).map(function (weekDay) { return __("".concat((0, upperFirst_1["default"])(weekDay))); });
|
|
92
|
-
}, []);
|
|
93
|
-
var allHours = react_1["default"].useMemo(function () {
|
|
94
|
-
var hoursArray = [];
|
|
95
|
-
for (var i = 0; i < 24; i++) {
|
|
96
|
-
var formattedHour = (0, dayjs_1["default"])().startOf('day').add(i, 'hour').format('HH:00');
|
|
97
|
-
hoursArray.push(formattedHour);
|
|
38
|
+
setCurrentMonthFirstDayDate(newDate);
|
|
39
|
+
updateWeekOnMonthChange(newDate);
|
|
40
|
+
}, [updateWeekOnMonthChange, setCurrentMonthFirstDayDate, setNewDateToDisplay]);
|
|
41
|
+
var getEventsFromDate = (0, useEventsFromDate_1.useEventsFromDate)(innerEventGroups, selectedEventGroupsIds).getEventsFromDate;
|
|
42
|
+
var viewProps = react_1["default"].useMemo(function () { return ({
|
|
43
|
+
className: props.className,
|
|
44
|
+
style: props.style,
|
|
45
|
+
openCreateModal: openCreateModal,
|
|
46
|
+
onInnerCalendarChangeMonth: onInnerCalendarChangeMonth,
|
|
47
|
+
eventGroups: innerEventGroups,
|
|
48
|
+
eventGroupsTitle: props.eventBlock.title,
|
|
49
|
+
onChangeEventGroupsIds: function (newSelectedEventGroupsIds) { return setSelectedEventGroupsIds(newSelectedEventGroupsIds); },
|
|
50
|
+
openCreateEventGroupModal: openCreateEventGroupModal,
|
|
51
|
+
dateToDisplay: dateToDisplay,
|
|
52
|
+
handleCalendarTypeChange: handleCalendarTypeChange,
|
|
53
|
+
handleControlClick: handleControlClick,
|
|
54
|
+
calendarType: calendarType,
|
|
55
|
+
additionalViewProps: props.additionalViewProps,
|
|
56
|
+
monthGridProps: {
|
|
57
|
+
monthGridWeekDays: monthGridWeekDays,
|
|
58
|
+
monthGridCalendarDays: monthGridCalendarDays,
|
|
59
|
+
getEventsFromDate: getEventsFromDate,
|
|
60
|
+
openCreateModal: openCreateModal,
|
|
61
|
+
openEditModal: openEditModal
|
|
62
|
+
},
|
|
63
|
+
weekGridProps: {
|
|
64
|
+
weekGridTwentyFourHoursArray: weekGridTwentyFourHoursArray,
|
|
65
|
+
weekGridCurrentWeekDays: weekGridCurrentWeekDays,
|
|
66
|
+
getEventsFromDate: getEventsFromDate,
|
|
67
|
+
openCreateModal: openCreateModal,
|
|
68
|
+
openEditModal: openEditModal
|
|
98
69
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
70
|
+
}); }, [
|
|
71
|
+
props.className,
|
|
72
|
+
props.style,
|
|
73
|
+
props.eventBlock.title,
|
|
74
|
+
openCreateModal,
|
|
75
|
+
onInnerCalendarChangeMonth,
|
|
76
|
+
innerEventGroups,
|
|
77
|
+
openCreateEventGroupModal,
|
|
78
|
+
dateToDisplay,
|
|
79
|
+
handleCalendarTypeChange,
|
|
80
|
+
handleControlClick,
|
|
81
|
+
calendarType,
|
|
82
|
+
monthGridWeekDays,
|
|
83
|
+
monthGridCalendarDays,
|
|
84
|
+
getEventsFromDate,
|
|
85
|
+
openEditModal,
|
|
86
|
+
weekGridTwentyFourHoursArray,
|
|
87
|
+
weekGridCurrentWeekDays,
|
|
88
|
+
props.additionalViewProps,
|
|
89
|
+
]);
|
|
90
|
+
return components.ui.renderView(props.view || 'content.CalendarSystemView', viewProps);
|
|
102
91
|
}
|
|
103
92
|
exports["default"] = CalendarSystem;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import CalendarEnum from '../enums/CalendarType';
|
|
3
3
|
import DateControlEnum from '../enums/DateControlType';
|
|
4
|
-
|
|
5
|
-
declare const useCalendarControls: (calendarType: CalendarEnum, weekControls: {
|
|
4
|
+
declare const useCalendarControls: (calendarType: CalendarEnum, weekGridControls: {
|
|
6
5
|
[key: string]: () => void | DateControlEnum;
|
|
7
6
|
}) => (event: React.MouseEvent<HTMLElement>) => void;
|
|
8
7
|
export default useCalendarControls;
|
|
@@ -3,26 +3,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
-
exports.getSourceCalendarControl = void 0;
|
|
7
|
-
/* eslint-disable no-unneeded-ternary */
|
|
8
6
|
/* eslint-disable default-case */
|
|
9
|
-
/* eslint-disable no-unused-expressions */
|
|
10
7
|
var react_1 = __importDefault(require("react"));
|
|
11
8
|
var isFunction_1 = __importDefault(require("lodash-es/isFunction"));
|
|
12
9
|
var get_1 = __importDefault(require("lodash-es/get"));
|
|
13
10
|
var CalendarType_1 = __importDefault(require("../enums/CalendarType"));
|
|
11
|
+
var utils_1 = require("../utils/utils");
|
|
14
12
|
var CUSTOM_CONTROL_PATH = 'dataset.control';
|
|
15
|
-
var
|
|
16
|
-
|
|
17
|
-
var useCalendarControls = function (calendarType, weekControls) {
|
|
18
|
-
var getCustomControlType = function (event) {
|
|
13
|
+
var useCalendarControls = function (calendarType, weekGridControls) {
|
|
14
|
+
var extractCustomControlType = function (event) {
|
|
19
15
|
var target = event.target;
|
|
20
16
|
var customControlType = (0, get_1["default"])(target, CUSTOM_CONTROL_PATH);
|
|
21
|
-
return customControlType ? customControlType : null;
|
|
17
|
+
return customControlType !== null && customControlType !== void 0 ? customControlType : null;
|
|
22
18
|
};
|
|
23
|
-
var
|
|
24
|
-
var customControlType =
|
|
25
|
-
var sourceCalendarControl = (0,
|
|
19
|
+
var handleControlClick = react_1["default"].useCallback(function (event) {
|
|
20
|
+
var customControlType = extractCustomControlType(event);
|
|
21
|
+
var sourceCalendarControl = (0, utils_1.getSourceCalendarControl)(customControlType);
|
|
26
22
|
if (!sourceCalendarControl) {
|
|
27
23
|
return;
|
|
28
24
|
}
|
|
@@ -32,16 +28,17 @@ var useCalendarControls = function (calendarType, weekControls) {
|
|
|
32
28
|
return;
|
|
33
29
|
}
|
|
34
30
|
case CalendarType_1["default"].WEEK: {
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
var controlAction = weekGridControls[customControlType];
|
|
32
|
+
if ((0, isFunction_1["default"])(controlAction)) {
|
|
33
|
+
controlAction();
|
|
37
34
|
}
|
|
38
35
|
else {
|
|
39
|
-
var sourceControlType =
|
|
40
|
-
(0,
|
|
36
|
+
var sourceControlType = controlAction;
|
|
37
|
+
(0, utils_1.getSourceCalendarControl)(sourceControlType).click();
|
|
41
38
|
}
|
|
42
39
|
}
|
|
43
40
|
}
|
|
44
|
-
}, [calendarType,
|
|
45
|
-
return
|
|
41
|
+
}, [calendarType, weekGridControls]);
|
|
42
|
+
return handleControlClick;
|
|
46
43
|
};
|
|
47
44
|
exports["default"] = useCalendarControls;
|
|
@@ -28,7 +28,7 @@ var useCalendarSystemEventGroupModals = function (innerEventGroups, setInnerEven
|
|
|
28
28
|
var theme = (0, hooks_1.useTheme)().theme;
|
|
29
29
|
var calendarModalView = (eventGroupModalProps === null || eventGroupModalProps === void 0 ? void 0 : eventGroupModalProps.component) || components.ui.getView('content.CalendarSystemEventGroupModalView');
|
|
30
30
|
var defaultEventGroupColor = react_1["default"].useMemo(function () { return theme === 'light' ? PRIMARY_LIGHT : PRIMARY_DARK; }, [theme]);
|
|
31
|
-
var
|
|
31
|
+
var onSubmit = react_1["default"].useCallback(function (fields) {
|
|
32
32
|
var _a;
|
|
33
33
|
var newEventGroup = {
|
|
34
34
|
id: (((_a = (0, maxBy_1["default"])(innerEventGroups, function (eventsGroup) { return eventsGroup.id; })) === null || _a === void 0 ? void 0 : _a.id) || DEFAULT_ID) + 1,
|
|
@@ -41,12 +41,12 @@ var useCalendarSystemEventGroupModals = function (innerEventGroups, setInnerEven
|
|
|
41
41
|
var openCreateEventGroupModal = react_1["default"].useCallback(function () {
|
|
42
42
|
dispatch((0, modal_1.openModal)(calendarModalView, {
|
|
43
43
|
isCreate: true,
|
|
44
|
-
onEventGroupSubmit:
|
|
44
|
+
onEventGroupSubmit: onSubmit,
|
|
45
45
|
eventGroupInitialValues: {
|
|
46
46
|
color: defaultEventGroupColor
|
|
47
47
|
}
|
|
48
48
|
}));
|
|
49
|
-
}, [calendarModalView, defaultEventGroupColor, dispatch,
|
|
49
|
+
}, [calendarModalView, defaultEventGroupColor, dispatch, onSubmit]);
|
|
50
50
|
return {
|
|
51
51
|
openCreateEventGroupModal: openCreateEventGroupModal
|
|
52
52
|
};
|
|
@@ -35,7 +35,7 @@ var useCalendarSystemModals = function (calendarModalProps, innerEventGroups, se
|
|
|
35
35
|
var dispatch = (0, react_redux_1.useDispatch)();
|
|
36
36
|
var components = (0, useComponents_1["default"])();
|
|
37
37
|
var calendarModalView = (calendarModalProps === null || calendarModalProps === void 0 ? void 0 : calendarModalProps.component) || components.ui.getView('content.CalendarSystemModalView');
|
|
38
|
-
var
|
|
38
|
+
var onModalFormSubmit = react_1["default"].useCallback(function (fields, eventInitialValues) {
|
|
39
39
|
var _a;
|
|
40
40
|
var eventGroupId = fields.eventGroupId, date = fields.date, title = fields.title, description = fields.description;
|
|
41
41
|
var currentEventGroups = __spreadArray([], innerEventGroups, true);
|
|
@@ -63,7 +63,7 @@ var useCalendarSystemModals = function (calendarModalProps, innerEventGroups, se
|
|
|
63
63
|
], false), currentEventGroups.slice(changeableEventGroupIndex + 1), true);
|
|
64
64
|
setInnerEventGroups(currentEventGroups);
|
|
65
65
|
}, [innerEventGroups, setInnerEventGroups]);
|
|
66
|
-
var getModalProps = react_1["default"].useCallback(function (isCreate, eventInitialValues) { return (__assign(__assign({}, calendarModalProps), { component: calendarModalView, eventGroups: innerEventGroups,
|
|
66
|
+
var getModalProps = react_1["default"].useCallback(function (isCreate, eventInitialValues) { return (__assign(__assign({}, calendarModalProps), { component: calendarModalView, eventGroups: innerEventGroups, onModalFormSubmit: onModalFormSubmit, isCreate: isCreate, eventInitialValues: eventInitialValues })); }, [calendarModalProps, calendarModalView, innerEventGroups, onModalFormSubmit]);
|
|
67
67
|
var getEventFromGroup = react_1["default"].useCallback(function (event) { return innerEventGroups
|
|
68
68
|
.find(function (group) { return group.events
|
|
69
69
|
.some(function (groupEvent) { return (0, isEqual_1["default"])((0, utils_1.getOmittedEvent)(groupEvent), (0, utils_1.getOmittedEvent)(event)); }); }); }, [innerEventGroups]);
|
|
@@ -0,0 +1,22 @@
|
|
|
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.useCalendarType = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var CalendarType_1 = __importDefault(require("../enums/CalendarType"));
|
|
9
|
+
var useCalendarType = function (onChangeCalendarType) {
|
|
10
|
+
var _a = react_1["default"].useState(CalendarType_1["default"].MONTH), calendarType = _a[0], setCalendarType = _a[1];
|
|
11
|
+
var handleCalendarTypeChange = react_1["default"].useCallback(function (newType) {
|
|
12
|
+
setCalendarType(newType);
|
|
13
|
+
if (onChangeCalendarType) {
|
|
14
|
+
onChangeCalendarType(newType);
|
|
15
|
+
}
|
|
16
|
+
}, [onChangeCalendarType]);
|
|
17
|
+
return {
|
|
18
|
+
handleCalendarTypeChange: handleCalendarTypeChange,
|
|
19
|
+
calendarType: calendarType
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
exports.useCalendarType = useCalendarType;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IEvent, IEventGroup } from '../CalendarSystem';
|
|
2
|
+
import CalendarEnum from '../enums/CalendarType';
|
|
3
|
+
export declare const useEventsFromDate: (innerEventGroups: IEventGroup[], selectedEventGroupsIds: number[]) => {
|
|
4
|
+
getEventsFromDate: (dateFromDay: Date, currentCalendarType: CalendarEnum) => IEvent[];
|
|
5
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
var _a;
|
|
6
|
+
exports.__esModule = true;
|
|
7
|
+
exports.useEventsFromDate = void 0;
|
|
8
|
+
/* eslint-disable default-case */
|
|
9
|
+
var react_1 = __importDefault(require("react"));
|
|
10
|
+
var dayjs_1 = __importDefault(require("dayjs"));
|
|
11
|
+
var CalendarType_1 = __importDefault(require("../enums/CalendarType"));
|
|
12
|
+
var addEventIfMatchDate_1 = require("../helpers/addEventIfMatchDate");
|
|
13
|
+
var CALENDAR_TYPE_GETTING_EVENTS_PROPERTIES = (_a = {},
|
|
14
|
+
_a[CalendarType_1["default"].MONTH] = {
|
|
15
|
+
getDayJsDate: function (date) { return (0, dayjs_1["default"])(date); },
|
|
16
|
+
unit: 'day'
|
|
17
|
+
},
|
|
18
|
+
_a[CalendarType_1["default"].WEEK] = {
|
|
19
|
+
getDayJsDate: function (date) {
|
|
20
|
+
var eventDate = new Date(date);
|
|
21
|
+
eventDate.setHours(eventDate.getHours(), 0, 0, 0);
|
|
22
|
+
return (0, dayjs_1["default"])(eventDate);
|
|
23
|
+
},
|
|
24
|
+
unit: 'hours'
|
|
25
|
+
},
|
|
26
|
+
_a);
|
|
27
|
+
var useEventsFromDate = function (innerEventGroups, selectedEventGroupsIds) {
|
|
28
|
+
var getEventsFromDate = react_1["default"].useCallback(function (dateFromDay, currentCalendarType) {
|
|
29
|
+
var resultEventsOnDate = [];
|
|
30
|
+
var dayjsDateFromDay = (0, dayjs_1["default"])(dateFromDay);
|
|
31
|
+
var forEachEventGroupEvent = function (callback) {
|
|
32
|
+
innerEventGroups.forEach(function (eventGroup) {
|
|
33
|
+
eventGroup.events.forEach(function (event) {
|
|
34
|
+
callback(event, eventGroup);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
var calendarTypeProperties = CALENDAR_TYPE_GETTING_EVENTS_PROPERTIES[currentCalendarType];
|
|
39
|
+
forEachEventGroupEvent(function (event, eventGroup) {
|
|
40
|
+
var eventDateDayJs = calendarTypeProperties.getDayJsDate(event.date);
|
|
41
|
+
(0, addEventIfMatchDate_1.addEventIfMatchDate)(eventDateDayJs, dayjsDateFromDay, eventGroup, event, calendarTypeProperties.unit, selectedEventGroupsIds, resultEventsOnDate);
|
|
42
|
+
});
|
|
43
|
+
return resultEventsOnDate;
|
|
44
|
+
}, [innerEventGroups, selectedEventGroupsIds]);
|
|
45
|
+
return {
|
|
46
|
+
getEventsFromDate: getEventsFromDate
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
exports.useEventsFromDate = useEventsFromDate;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { IDay } from '../CalendarSystem';
|
|
3
|
-
declare const
|
|
3
|
+
declare const useMonthGrid: (currentMonthFirstDayDate: Date, setCurrentMonthFirstDayDate: React.Dispatch<React.SetStateAction<Date>>) => {
|
|
4
|
+
monthGridWeekDays: any;
|
|
5
|
+
monthGridCalendarDays: IDay[];
|
|
4
6
|
getCalendarArray: () => IDay[];
|
|
5
7
|
getCurrentMonthDataUTC: () => {
|
|
6
8
|
currentMonth: number;
|
|
@@ -9,8 +11,5 @@ declare const useMonthCalendar: () => {
|
|
|
9
11
|
daysInCurrentMonth: any[];
|
|
10
12
|
};
|
|
11
13
|
getWeekFromDate: (date: Date) => IDay[];
|
|
12
|
-
calendarArray: IDay[];
|
|
13
|
-
setCurrentMonthDate: React.Dispatch<React.SetStateAction<Date>>;
|
|
14
|
-
currentMonthDate: Date;
|
|
15
14
|
};
|
|
16
|
-
export default
|
|
15
|
+
export default useMonthGrid;
|
|
@@ -18,19 +18,22 @@ exports.__esModule = true;
|
|
|
18
18
|
/* eslint-disable import/order */
|
|
19
19
|
var react_1 = __importDefault(require("react"));
|
|
20
20
|
var utils_1 = require("../utils/utils");
|
|
21
|
+
var concat_1 = __importDefault(require("lodash-es/concat"));
|
|
22
|
+
var slice_1 = __importDefault(require("lodash-es/slice"));
|
|
23
|
+
var dayjs_1 = __importDefault(require("dayjs"));
|
|
24
|
+
var upperFirst_1 = __importDefault(require("lodash-es/upperFirst"));
|
|
21
25
|
var FIRST_DAY = 1;
|
|
22
26
|
var ONE_MONTH = 1;
|
|
23
27
|
var TOTAL_DAYS_IN_CALENDAR = 42;
|
|
24
|
-
var
|
|
25
|
-
var _a = react_1["default"].useState(null), currentMonthDate = _a[0], setCurrentMonthDate = _a[1];
|
|
28
|
+
var useMonthGrid = function (currentMonthFirstDayDate, setCurrentMonthFirstDayDate) {
|
|
26
29
|
var getCurrentMonthDataUTC = react_1["default"].useCallback(function () {
|
|
27
|
-
var currentYear = (
|
|
28
|
-
var month = (
|
|
30
|
+
var currentYear = (currentMonthFirstDayDate === null || currentMonthFirstDayDate === void 0 ? void 0 : currentMonthFirstDayDate.getFullYear()) || new Date().getFullYear();
|
|
31
|
+
var month = (currentMonthFirstDayDate === null || currentMonthFirstDayDate === void 0 ? void 0 : currentMonthFirstDayDate.getMonth()) || new Date().getMonth();
|
|
29
32
|
var nextMonthFirstDay = new Date(currentYear, month + ONE_MONTH, FIRST_DAY);
|
|
30
33
|
var lastDayOfCurrentMonth = new Date(nextMonthFirstDay.getTime() - FIRST_DAY).getDate();
|
|
31
34
|
var firstDayOfCurrentMonth = new Date(Date.UTC(currentYear, month, FIRST_DAY));
|
|
32
|
-
if (
|
|
33
|
-
|
|
35
|
+
if (currentMonthFirstDayDate === null) {
|
|
36
|
+
setCurrentMonthFirstDayDate(firstDayOfCurrentMonth);
|
|
34
37
|
}
|
|
35
38
|
var daysInCurrentMonth = [];
|
|
36
39
|
// Пройдемся по всем дням месяца и добавим их в массив
|
|
@@ -44,7 +47,7 @@ var useMonthCalendar = function () {
|
|
|
44
47
|
firstDayOfCurrentMonth: firstDayOfCurrentMonth,
|
|
45
48
|
daysInCurrentMonth: daysInCurrentMonth
|
|
46
49
|
};
|
|
47
|
-
}, [
|
|
50
|
+
}, [currentMonthFirstDayDate, setCurrentMonthFirstDayDate]);
|
|
48
51
|
var getCalendarArray = react_1["default"].useCallback(function () {
|
|
49
52
|
var calendarArray = [];
|
|
50
53
|
var _a = getCurrentMonthDataUTC(), firstDayOfCurrentMonth = _a.firstDayOfCurrentMonth, month = _a.currentMonth, daysInCurrentMonth = _a.daysInCurrentMonth;
|
|
@@ -66,7 +69,7 @@ var useMonthCalendar = function () {
|
|
|
66
69
|
});
|
|
67
70
|
var daysAfterCurrentMonth = TOTAL_DAYS_IN_CALENDAR - calendarArray.length;
|
|
68
71
|
for (var i = 1; i <= daysAfterCurrentMonth; i++) {
|
|
69
|
-
var currentDate = new Date(
|
|
72
|
+
var currentDate = new Date(currentMonthFirstDayDate === null || currentMonthFirstDayDate === void 0 ? void 0 : currentMonthFirstDayDate.getFullYear(), month + 1, i);
|
|
70
73
|
calendarArray.push({
|
|
71
74
|
date: currentDate,
|
|
72
75
|
dayNumber: currentDate.getDate(),
|
|
@@ -74,14 +77,17 @@ var useMonthCalendar = function () {
|
|
|
74
77
|
});
|
|
75
78
|
}
|
|
76
79
|
return calendarArray.map(function (day) { return (0, utils_1.isDateIsToday)(day.date) ? (__assign(__assign({}, day), { isToday: true })) : day; });
|
|
77
|
-
}, [
|
|
80
|
+
}, [currentMonthFirstDayDate, getCurrentMonthDataUTC]);
|
|
81
|
+
var weekDays = react_1["default"].useMemo(function () {
|
|
82
|
+
var unformattedDaysOfWeek = dayjs_1["default"].weekdaysMin();
|
|
83
|
+
return (0, concat_1["default"])((0, slice_1["default"])(unformattedDaysOfWeek, 1), unformattedDaysOfWeek[0]).map(function (weekDay) { return __("".concat((0, upperFirst_1["default"])(weekDay))); });
|
|
84
|
+
}, []);
|
|
78
85
|
return {
|
|
86
|
+
monthGridWeekDays: weekDays,
|
|
87
|
+
monthGridCalendarDays: getCalendarArray(),
|
|
79
88
|
getCalendarArray: getCalendarArray,
|
|
80
89
|
getCurrentMonthDataUTC: getCurrentMonthDataUTC,
|
|
81
|
-
getWeekFromDate: utils_1.getWeekDaysFromDate
|
|
82
|
-
calendarArray: getCalendarArray(),
|
|
83
|
-
setCurrentMonthDate: setCurrentMonthDate,
|
|
84
|
-
currentMonthDate: currentMonthDate
|
|
90
|
+
getWeekFromDate: utils_1.getWeekDaysFromDate
|
|
85
91
|
};
|
|
86
92
|
};
|
|
87
|
-
exports["default"] =
|
|
93
|
+
exports["default"] = useMonthGrid;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import DateControlEnum from '../enums/DateControlType';
|
|
2
|
-
declare const
|
|
3
|
-
|
|
2
|
+
declare const useWeekGrid: (currentMonthFirstDayDate: Date) => {
|
|
3
|
+
weekGridTwentyFourHoursArray: any[];
|
|
4
|
+
weekGridCurrentWeekDays: {
|
|
4
5
|
dayNumber: number;
|
|
5
6
|
date: Date;
|
|
6
7
|
outOfRange?: boolean;
|
|
7
8
|
isToday?: boolean;
|
|
8
9
|
formattedDisplay?: string;
|
|
9
10
|
}[];
|
|
10
|
-
|
|
11
|
+
weekGridControls: {
|
|
11
12
|
[key: string]: () => void | DateControlEnum;
|
|
12
13
|
};
|
|
13
|
-
|
|
14
|
+
updateWeekOnMonthChange: (newMonthDate: Date) => void;
|
|
14
15
|
};
|
|
15
|
-
export default
|
|
16
|
+
export default useWeekGrid;
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
/* eslint-disable no-plusplus */
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var dayjs_1 = __importDefault(require("dayjs"));
|
|
9
|
+
var DateControlType_1 = __importDefault(require("../enums/DateControlType"));
|
|
10
|
+
var utils_1 = require("../utils/utils");
|
|
11
|
+
var ONE_DAY = 1;
|
|
12
|
+
var getTwentyFourHoursArray = function () {
|
|
13
|
+
var hoursArray = [];
|
|
14
|
+
for (var i = 0; i < 24; i++) {
|
|
15
|
+
var formattedHour = (0, dayjs_1["default"])().startOf('day').add(i, 'hour').format('HH:00');
|
|
16
|
+
hoursArray.push(formattedHour);
|
|
17
|
+
}
|
|
18
|
+
return hoursArray;
|
|
19
|
+
};
|
|
20
|
+
var useWeekGrid = function (currentMonthFirstDayDate) {
|
|
21
|
+
var _a;
|
|
22
|
+
var _b = react_1["default"].useState((0, utils_1.getFormattedWeekFromDate)()), currentWeek = _b[0], setCurrentWeek = _b[1];
|
|
23
|
+
var updateWeekOnMonthChange = react_1["default"].useCallback(function (newMonthDate) {
|
|
24
|
+
setCurrentWeek((0, utils_1.getFormattedWeekFromDate)(newMonthDate));
|
|
25
|
+
}, []);
|
|
26
|
+
var changeMonthAfterWeekChanged = react_1["default"].useCallback(function (formattedWeek) {
|
|
27
|
+
var firstDayOfWeek = formattedWeek[0].date;
|
|
28
|
+
var currentMonthNumber = currentMonthFirstDayDate.getMonth();
|
|
29
|
+
var isWeekOutOfMonth = formattedWeek.every(function (dayOfWeek) { return dayOfWeek.date.getMonth() !== currentMonthNumber; });
|
|
30
|
+
if (!isWeekOutOfMonth) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (currentMonthNumber - firstDayOfWeek.getMonth() === 1) {
|
|
34
|
+
var lastDayOfWeekInNewMonth = formattedWeek[formattedWeek.length - 1].date;
|
|
35
|
+
var prevMonthControl = (0, utils_1.getSourceCalendarControl)(DateControlType_1["default"].PREV_ONE);
|
|
36
|
+
prevMonthControl.click();
|
|
37
|
+
updateWeekOnMonthChange(lastDayOfWeekInNewMonth);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
var firstDayOfWeekInNewMonth = formattedWeek[0].date;
|
|
41
|
+
var nextMonthControl = (0, utils_1.getSourceCalendarControl)(DateControlType_1["default"].NEXT_ONE);
|
|
42
|
+
nextMonthControl.click();
|
|
43
|
+
updateWeekOnMonthChange(firstDayOfWeekInNewMonth);
|
|
44
|
+
}
|
|
45
|
+
}, [currentMonthFirstDayDate, updateWeekOnMonthChange]);
|
|
46
|
+
var setNextWeek = react_1["default"].useCallback(function () {
|
|
47
|
+
var lastDayOfWeek = currentWeek[currentWeek.length - 1].date;
|
|
48
|
+
lastDayOfWeek.setDate(lastDayOfWeek.getDate() + ONE_DAY);
|
|
49
|
+
var formattedNextWeek = (0, utils_1.getFormattedWeekFromDate)(lastDayOfWeek);
|
|
50
|
+
setCurrentWeek(formattedNextWeek);
|
|
51
|
+
changeMonthAfterWeekChanged(formattedNextWeek);
|
|
52
|
+
}, [currentWeek, changeMonthAfterWeekChanged]);
|
|
53
|
+
var setPrevWeek = react_1["default"].useCallback(function () {
|
|
54
|
+
var firstDayOfWeek = currentWeek[0].date;
|
|
55
|
+
firstDayOfWeek.setDate(firstDayOfWeek.getDate() - ONE_DAY);
|
|
56
|
+
var formattedPrevWeek = (0, utils_1.getFormattedWeekFromDate)(firstDayOfWeek);
|
|
57
|
+
setCurrentWeek(formattedPrevWeek);
|
|
58
|
+
changeMonthAfterWeekChanged(formattedPrevWeek);
|
|
59
|
+
}, [currentWeek, changeMonthAfterWeekChanged]);
|
|
60
|
+
return {
|
|
61
|
+
weekGridTwentyFourHoursArray: getTwentyFourHoursArray(),
|
|
62
|
+
weekGridCurrentWeekDays: currentWeek,
|
|
63
|
+
weekGridControls: (_a = {},
|
|
64
|
+
_a[DateControlType_1["default"].NEXT_DOUBLE] = DateControlType_1["default"].NEXT_ONE,
|
|
65
|
+
_a[DateControlType_1["default"].NEXT_ONE] = setNextWeek,
|
|
66
|
+
_a[DateControlType_1["default"].PREV_ONE] = setPrevWeek,
|
|
67
|
+
_a[DateControlType_1["default"].PREV_DOUBLE] = DateControlType_1["default"].PREV_ONE,
|
|
68
|
+
_a),
|
|
69
|
+
updateWeekOnMonthChange: updateWeekOnMonthChange
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
exports["default"] = useWeekGrid;
|
|
@@ -3,3 +3,11 @@ export declare const getWeekDaysFromDate: (date: Date) => IDay[];
|
|
|
3
3
|
export declare const isDateIsToday: (date: Date) => boolean;
|
|
4
4
|
export declare const getOmittedEvent: (event: IEvent | Omit<IEvent, 'color'>) => any;
|
|
5
5
|
export declare const sortEventsInGroup: (group: IEventGroup) => Omit<IEvent, "color">[];
|
|
6
|
+
export declare const getSourceCalendarControl: (control: string) => HTMLElement;
|
|
7
|
+
export declare const getFormattedWeekFromDate: (fromDate?: Date) => {
|
|
8
|
+
dayNumber: number;
|
|
9
|
+
date: Date;
|
|
10
|
+
outOfRange?: boolean;
|
|
11
|
+
isToday?: boolean;
|
|
12
|
+
formattedDisplay?: string;
|
|
13
|
+
}[];
|
|
@@ -1,14 +1,27 @@
|
|
|
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
|
+
};
|
|
2
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
15
|
};
|
|
5
16
|
exports.__esModule = true;
|
|
6
|
-
exports.sortEventsInGroup = exports.getOmittedEvent = exports.isDateIsToday = exports.getWeekDaysFromDate = void 0;
|
|
17
|
+
exports.getFormattedWeekFromDate = exports.getSourceCalendarControl = exports.sortEventsInGroup = exports.getOmittedEvent = exports.isDateIsToday = exports.getWeekDaysFromDate = void 0;
|
|
7
18
|
/* eslint-disable no-plusplus */
|
|
8
19
|
var dayjs_1 = __importDefault(require("dayjs"));
|
|
9
20
|
var omit_1 = __importDefault(require("lodash-es/omit"));
|
|
21
|
+
var calendar_1 = require("../../../../utils/calendar");
|
|
10
22
|
var SIX_DAYS_DIFF = 6;
|
|
11
23
|
var MAX_DAYS_DIFF_IN_WEEK = 7;
|
|
24
|
+
var WEEK_DAY_FORMAT = 'dd, D MMM';
|
|
12
25
|
var getWeekDaysFromDate = function (date) {
|
|
13
26
|
var weekDays = [];
|
|
14
27
|
var firstDayOfWeek = new Date(date);
|
|
@@ -32,3 +45,16 @@ var getOmittedEvent = function (event) { return (0, omit_1["default"])(event, ['
|
|
|
32
45
|
exports.getOmittedEvent = getOmittedEvent;
|
|
33
46
|
var sortEventsInGroup = function (group) { return group.events.sort(function (eventA, eventB) { return eventA.date.getTime() - eventB.date.getTime(); }); };
|
|
34
47
|
exports.sortEventsInGroup = sortEventsInGroup;
|
|
48
|
+
var getSourceCalendarControl = function (control) { return document.querySelector("[data-sourcecontrol=\"".concat(control, "\"]")); };
|
|
49
|
+
exports.getSourceCalendarControl = getSourceCalendarControl;
|
|
50
|
+
var getFormattedWeekFromDate = function (fromDate) {
|
|
51
|
+
if (fromDate === void 0) { fromDate = null; }
|
|
52
|
+
var currentWeek = (0, exports.getWeekDaysFromDate)(fromDate || new Date());
|
|
53
|
+
return currentWeek.map(function (dayOfWeek) {
|
|
54
|
+
var copyOfDayWeek = __assign({}, dayOfWeek);
|
|
55
|
+
copyOfDayWeek.formattedDisplay = (0, calendar_1.convertDate)(dayOfWeek.date, null, WEEK_DAY_FORMAT);
|
|
56
|
+
copyOfDayWeek.isToday = (0, exports.isDateIsToday)(copyOfDayWeek.date);
|
|
57
|
+
return copyOfDayWeek;
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
exports.getFormattedWeekFromDate = getFormattedWeekFromDate;
|
|
@@ -19,7 +19,7 @@ type CheckboxTreeItems = string | ({
|
|
|
19
19
|
*
|
|
20
20
|
* Список с вложенными чекбоксами. Используется в формах для создания иерархической структуры и выбора нескольких значений.
|
|
21
21
|
*/
|
|
22
|
-
export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'>, IUiComponent, Pick<ITreeProps, 'levelPadding' | 'alwaysOpened'> {
|
|
22
|
+
export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'>, IUiComponent, Pick<ITreeProps, 'levelPadding' | 'alwaysOpened' | 'hasIcon' | 'customIcon'> {
|
|
23
23
|
/**
|
|
24
24
|
* Свойства для элемента input
|
|
25
25
|
* @example { onKeyDown: ... }
|
|
@@ -48,7 +48,7 @@ export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<I
|
|
|
48
48
|
primaryKey?: string;
|
|
49
49
|
[key: string]: any;
|
|
50
50
|
}
|
|
51
|
-
export interface ICheckboxTreeFieldViewProps extends IFieldWrapperOutputProps {
|
|
51
|
+
export interface ICheckboxTreeFieldViewProps extends IFieldWrapperOutputProps, Pick<ITreeProps, 'levelPadding' | 'customIcon'> {
|
|
52
52
|
items: {
|
|
53
53
|
id: number | string | boolean;
|
|
54
54
|
label?: string;
|
|
@@ -61,7 +61,6 @@ export interface ICheckboxTreeFieldViewProps extends IFieldWrapperOutputProps {
|
|
|
61
61
|
onItemSelect: (checkbox: IPreparedTreeItem) => void;
|
|
62
62
|
renderCheckbox: (checkboxProps: ICheckboxFieldViewProps) => JSX.Element;
|
|
63
63
|
size?: Size;
|
|
64
|
-
levelPadding: number;
|
|
65
64
|
}
|
|
66
65
|
export declare const getNestedItemsIds: (item: any, groupAttribute: any) => any[];
|
|
67
66
|
declare const _default: import("../../../ui/form/Field/fieldWrapper").FieldWrapperComponent<ICheckboxTreeFieldProps>;
|
|
@@ -114,7 +114,7 @@ function CheckboxTreeField(props) {
|
|
|
114
114
|
}, [onReset, prevInputValue, props.input.value, selectedIds.length]);
|
|
115
115
|
var CheckboxFieldView = components.ui.getView('form.CheckboxFieldView');
|
|
116
116
|
var renderCheckbox = function (checkboxProps) { return (React.createElement(CheckboxFieldView, __assign({}, checkboxProps))); };
|
|
117
|
-
return components.ui.renderView(props.view || 'form.CheckboxTreeFieldView', __assign(__assign({}, props), { items: treeItems, onItemSelect: onItemSelect, selectedIds: selectedIds,
|
|
117
|
+
return components.ui.renderView(props.view || 'form.CheckboxTreeFieldView', __assign(__assign({}, props), { items: treeItems, onItemSelect: onItemSelect, selectedIds: selectedIds, renderCheckbox: renderCheckbox }));
|
|
118
118
|
}
|
|
119
119
|
CheckboxTreeField.defaultProps = {
|
|
120
120
|
disabled: false,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import { ITreeProps } from '@steroidsjs/core/ui/nav/Tree/Tree';
|
|
3
3
|
import { IPreparedTreeItem, ITreeItem } from '../../../hooks/useTree';
|
|
4
4
|
import { IColumnViewProps, IGridColumn, IGridProps } from '../Grid/Grid';
|
|
5
|
-
export interface ITreeColumnViewProps extends IColumnViewProps, Pick<ITreeTableProps, 'levelPadding'> {
|
|
5
|
+
export interface ITreeColumnViewProps extends IColumnViewProps, Pick<ITreeTableProps, 'levelPadding' | 'customIcon'> {
|
|
6
6
|
item: IPreparedTreeItem;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
@@ -10,7 +10,7 @@ export interface ITreeColumnViewProps extends IColumnViewProps, Pick<ITreeTableP
|
|
|
10
10
|
*
|
|
11
11
|
* Компонент для представления данных коллекции в виде иерархической структуры.
|
|
12
12
|
*/
|
|
13
|
-
export interface ITreeTableProps extends Omit<IGridProps, 'items'>, Pick<ITreeProps, 'alwaysOpened' | 'levelPadding'> {
|
|
13
|
+
export interface ITreeTableProps extends Omit<IGridProps, 'items'>, Pick<ITreeProps, 'alwaysOpened' | 'levelPadding' | 'customIcon'> {
|
|
14
14
|
/**
|
|
15
15
|
* Элементы коллекции
|
|
16
16
|
* @example
|
|
@@ -27,8 +27,9 @@ export interface ITreeTableProps extends Omit<IGridProps, 'items'>, Pick<ITreePr
|
|
|
27
27
|
* ]
|
|
28
28
|
*/
|
|
29
29
|
items?: ITreeItem[];
|
|
30
|
+
customIcon?: string | React.ReactElement;
|
|
30
31
|
}
|
|
31
|
-
export declare const addTreeColumnFieldsToFirstColumn: (columns: IGridColumn[], levelPadding: string | number) => IGridColumn[];
|
|
32
|
+
export declare const addTreeColumnFieldsToFirstColumn: (columns: IGridColumn[], levelPadding: string | number, customIcon?: string | React.ReactElement) => IGridColumn[];
|
|
32
33
|
declare function TreeTable(props: ITreeTableProps): JSX.Element;
|
|
33
34
|
declare namespace TreeTable {
|
|
34
35
|
var defaultProps: {
|
|
@@ -58,15 +58,15 @@ var TREE_COLUMN_VIEW_FIELDS = {
|
|
|
58
58
|
valueView: 'TreeColumnView',
|
|
59
59
|
headerClassName: 'TreeColumnHeader'
|
|
60
60
|
};
|
|
61
|
-
var addTreeColumnFieldsToFirstColumn = function (columns, levelPadding) {
|
|
61
|
+
var addTreeColumnFieldsToFirstColumn = function (columns, levelPadding, customIcon) {
|
|
62
62
|
var newColumns = __spreadArray([], columns, true);
|
|
63
63
|
// Add tree view to the first column
|
|
64
|
-
(0, merge_1["default"])(newColumns[0], __assign(__assign({}, TREE_COLUMN_VIEW_FIELDS), { levelPadding: levelPadding }));
|
|
64
|
+
(0, merge_1["default"])(newColumns[0], __assign(__assign({}, TREE_COLUMN_VIEW_FIELDS), { levelPadding: levelPadding, customIcon: customIcon }));
|
|
65
65
|
return newColumns;
|
|
66
66
|
};
|
|
67
67
|
exports.addTreeColumnFieldsToFirstColumn = addTreeColumnFieldsToFirstColumn;
|
|
68
68
|
function TreeTable(props) {
|
|
69
|
-
var columns = (0, react_1.useMemo)(function () { return (0, exports.addTreeColumnFieldsToFirstColumn)(props.columns, props.levelPadding); }, [props.columns, props.levelPadding]);
|
|
69
|
+
var columns = (0, react_1.useMemo)(function () { return (0, exports.addTreeColumnFieldsToFirstColumn)(props.columns, props.levelPadding, props.customIcon); }, [props.columns, props.customIcon, props.levelPadding]);
|
|
70
70
|
var list = (0, useSelector_1["default"])(function (state) { return (0, list_1.getList)(state, props.listId); });
|
|
71
71
|
var treeItems = (0, useTree_1["default"])({
|
|
72
72
|
items: props.items,
|
|
@@ -137,11 +137,17 @@ export interface IRouterProps {
|
|
|
137
137
|
* @example SomeComponent
|
|
138
138
|
*/
|
|
139
139
|
children?: React.ReactNode;
|
|
140
|
+
/**
|
|
141
|
+
* Флаг, который позволяет использовать вложенные роуты c указанием вложенного пути
|
|
142
|
+
* @example true
|
|
143
|
+
*/
|
|
144
|
+
alwaysAppendParentRoutePath?: boolean;
|
|
140
145
|
}
|
|
141
146
|
declare function Router(props: IRouterProps): JSX.Element;
|
|
142
147
|
declare namespace Router {
|
|
143
148
|
var defaultProps: {
|
|
144
149
|
autoScrollTop: boolean;
|
|
150
|
+
alwaysAppendParentRoutePath: boolean;
|
|
145
151
|
};
|
|
146
152
|
}
|
|
147
153
|
export default Router;
|
package/ui/nav/Router/Router.js
CHANGED
|
@@ -97,7 +97,7 @@ function Router(props) {
|
|
|
97
97
|
var dispatch = (0, useDispatch_1["default"])();
|
|
98
98
|
(0, react_use_1.useEffectOnce)(function () {
|
|
99
99
|
if (props.routes) {
|
|
100
|
-
dispatch((0, router_1.initRoutes)((0, helpers_1.walkRoutesRecursive)(__assign({ id: 'root' }, props.routes), props.defaultRoles ? { roles: props.defaultRoles } : undefined)));
|
|
100
|
+
dispatch((0, router_1.initRoutes)((0, helpers_1.walkRoutesRecursive)(__assign({ id: 'root' }, props.routes), props.defaultRoles ? { roles: props.defaultRoles } : undefined, {}, props.alwaysAppendParentRoutePath)));
|
|
101
101
|
}
|
|
102
102
|
});
|
|
103
103
|
// Sync route params with redux
|
|
@@ -108,7 +108,7 @@ function Router(props) {
|
|
|
108
108
|
}
|
|
109
109
|
}, [dispatch, prevRouteParams, routeParams]);
|
|
110
110
|
// Routes state
|
|
111
|
-
var _b = (0, react_1.useState)((0, helpers_1.treeToList)(props.routes)), routes = _b[0], setRoutes = _b[1];
|
|
111
|
+
var _b = (0, react_1.useState)((0, helpers_1.treeToList)(props.routes, true, null, props.alwaysAppendParentRoutePath)), routes = _b[0], setRoutes = _b[1];
|
|
112
112
|
(0, react_use_1.useUpdateEffect)(function () {
|
|
113
113
|
setRoutes(props.routes);
|
|
114
114
|
}, [props.routes]);
|
|
@@ -205,6 +205,7 @@ function Router(props) {
|
|
|
205
205
|
return (React.createElement(connected_react_router_1.ConnectedRouter, { history: components.store.history }, renderContent()));
|
|
206
206
|
}
|
|
207
207
|
Router.defaultProps = {
|
|
208
|
-
autoScrollTop: true
|
|
208
|
+
autoScrollTop: true,
|
|
209
|
+
alwaysAppendParentRoutePath: true
|
|
209
210
|
};
|
|
210
211
|
exports["default"] = Router;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { IRouteItem } from './Router';
|
|
2
2
|
export declare const findRedirectPathRecursive: (route: IRouteItem) => any;
|
|
3
|
-
export declare const walkRoutesRecursive: (item: IRouteItem | Record<string, any>, defaultItem?: any, parentItem?: any) => any;
|
|
4
|
-
export declare const treeToList: (item: IRouteItem | Record<string, any>, isRoot?: boolean) => Record<string, any>;
|
|
3
|
+
export declare const walkRoutesRecursive: (item: IRouteItem | Record<string, any>, defaultItem?: any, parentItem?: any, alwaysAppendParentRoutePath?: boolean) => any;
|
|
4
|
+
export declare const treeToList: (item: IRouteItem | Record<string, any>, isRoot?: boolean, parentItem?: any, alwaysAppendParentRoutePath?: boolean) => Record<string, any>;
|
package/ui/nav/Router/helpers.js
CHANGED
|
@@ -18,6 +18,7 @@ exports.treeToList = exports.walkRoutesRecursive = exports.findRedirectPathRecur
|
|
|
18
18
|
var get_1 = __importDefault(require("lodash-es/get"));
|
|
19
19
|
var isArray_1 = __importDefault(require("lodash-es/isArray"));
|
|
20
20
|
var isObject_1 = __importDefault(require("lodash-es/isObject"));
|
|
21
|
+
var SLASH = '/';
|
|
21
22
|
var findRedirectPathRecursive = function (route) {
|
|
22
23
|
if (!route) {
|
|
23
24
|
return null;
|
|
@@ -34,10 +35,36 @@ var findRedirectPathRecursive = function (route) {
|
|
|
34
35
|
: null;
|
|
35
36
|
};
|
|
36
37
|
exports.findRedirectPathRecursive = findRedirectPathRecursive;
|
|
37
|
-
var
|
|
38
|
+
var addSlashIfNotPresent = function (path) {
|
|
39
|
+
if (path === void 0) { path = ''; }
|
|
40
|
+
return path.startsWith(SLASH) ? path : (SLASH + path);
|
|
41
|
+
};
|
|
42
|
+
var joinChildAndParentPaths = function (path, parentPath) {
|
|
43
|
+
if (path === void 0) { path = ''; }
|
|
44
|
+
if (parentPath === void 0) { parentPath = null; }
|
|
45
|
+
if (!parentPath || parentPath === SLASH) {
|
|
46
|
+
return addSlashIfNotPresent(path);
|
|
47
|
+
}
|
|
48
|
+
return addSlashIfNotPresent(parentPath) + addSlashIfNotPresent(path);
|
|
49
|
+
};
|
|
50
|
+
var appendChildIfNoSlash = function (path, parentPath) {
|
|
51
|
+
if (path === void 0) { path = ''; }
|
|
52
|
+
if (parentPath === void 0) { parentPath = null; }
|
|
53
|
+
if (parentPath === SLASH) {
|
|
54
|
+
return addSlashIfNotPresent(path);
|
|
55
|
+
}
|
|
56
|
+
if (!path.startsWith(SLASH)) {
|
|
57
|
+
return addSlashIfNotPresent(parentPath) + addSlashIfNotPresent(path);
|
|
58
|
+
}
|
|
59
|
+
return path;
|
|
60
|
+
};
|
|
61
|
+
var walkRoutesRecursive = function (item, defaultItem, parentItem, alwaysAppendParentRoutePath) {
|
|
38
62
|
if (defaultItem === void 0) { defaultItem = {}; }
|
|
39
63
|
if (parentItem === void 0) { parentItem = {}; }
|
|
40
|
-
|
|
64
|
+
if (alwaysAppendParentRoutePath === void 0) { alwaysAppendParentRoutePath = true; }
|
|
65
|
+
var normalizedItem = __assign(__assign(__assign({}, defaultItem), item), { id: item.id, exact: item.exact, path: item.path && (alwaysAppendParentRoutePath
|
|
66
|
+
? joinChildAndParentPaths(item.path, parentItem.path)
|
|
67
|
+
: appendChildIfNoSlash(item.path, parentItem.path)), label: item.label, title: item.title, isVisible: typeof item.isVisible !== 'undefined'
|
|
41
68
|
? item.isVisible
|
|
42
69
|
: (typeof parentItem.isVisible !== 'undefined'
|
|
43
70
|
? parentItem.isVisible
|
|
@@ -48,32 +75,39 @@ var walkRoutesRecursive = function (item, defaultItem, parentItem) {
|
|
|
48
75
|
: defaultItem.isNavVisible), layout: item.layout || parentItem.layout || defaultItem.layout || null, roles: item.roles || parentItem.roles || defaultItem.roles || null, component: null, componentProps: null });
|
|
49
76
|
var items = null;
|
|
50
77
|
if ((0, isArray_1["default"])(item.items)) {
|
|
51
|
-
items = item.items.map(function (subItem) { return (0, exports.walkRoutesRecursive)(subItem, defaultItem, normalizedItem); });
|
|
78
|
+
items = item.items.map(function (subItem) { return (0, exports.walkRoutesRecursive)(subItem, defaultItem, normalizedItem, alwaysAppendParentRoutePath); });
|
|
52
79
|
}
|
|
53
80
|
else if ((0, isObject_1["default"])(item.items)) {
|
|
54
81
|
items = Object.keys(item.items)
|
|
55
|
-
.map(function (id) { return (0, exports.walkRoutesRecursive)(__assign(__assign({}, item.items[id]), { id: id }), defaultItem, normalizedItem); });
|
|
82
|
+
.map(function (id) { return (0, exports.walkRoutesRecursive)(__assign(__assign({}, item.items[id]), { id: id }), defaultItem, normalizedItem, alwaysAppendParentRoutePath); });
|
|
56
83
|
}
|
|
57
84
|
return __assign(__assign({}, normalizedItem), { items: items });
|
|
58
85
|
};
|
|
59
86
|
exports.walkRoutesRecursive = walkRoutesRecursive;
|
|
60
|
-
var treeToList = function (item, isRoot) {
|
|
87
|
+
var treeToList = function (item, isRoot, parentItem, alwaysAppendParentRoutePath) {
|
|
61
88
|
if (isRoot === void 0) { isRoot = true; }
|
|
89
|
+
if (parentItem === void 0) { parentItem = {}; }
|
|
90
|
+
if (alwaysAppendParentRoutePath === void 0) { alwaysAppendParentRoutePath = true; }
|
|
62
91
|
if ((0, isArray_1["default"])(item)) {
|
|
63
92
|
return item;
|
|
64
93
|
}
|
|
94
|
+
if (item.path) {
|
|
95
|
+
item.path = alwaysAppendParentRoutePath
|
|
96
|
+
? joinChildAndParentPaths(item.path, parentItem === null || parentItem === void 0 ? void 0 : parentItem.path)
|
|
97
|
+
: appendChildIfNoSlash(item.path, parentItem === null || parentItem === void 0 ? void 0 : parentItem.path);
|
|
98
|
+
}
|
|
65
99
|
if (isRoot && !item.id) {
|
|
66
100
|
item.id = 'root';
|
|
67
101
|
}
|
|
68
102
|
var items = item.path ? [item] : [];
|
|
69
103
|
if ((0, isArray_1["default"])(item.items)) {
|
|
70
104
|
item.items.forEach(function (subItem) {
|
|
71
|
-
items = items.concat((0, exports.treeToList)(subItem, false));
|
|
105
|
+
items = items.concat((0, exports.treeToList)(subItem, false, item, alwaysAppendParentRoutePath));
|
|
72
106
|
});
|
|
73
107
|
}
|
|
74
108
|
else if ((0, isObject_1["default"])(item.items)) {
|
|
75
109
|
Object.keys(item.items).forEach(function (id) {
|
|
76
|
-
items = items.concat((0, exports.treeToList)(__assign(__assign({}, item.items[id]), { id: id }), false));
|
|
110
|
+
items = items.concat((0, exports.treeToList)(__assign(__assign({}, item.items[id]), { id: id }), false, item, alwaysAppendParentRoutePath));
|
|
77
111
|
});
|
|
78
112
|
}
|
|
79
113
|
return items;
|
package/ui/nav/Tree/Tree.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { IPreparedTreeItem, ITreeConfig } from '../../../hooks/useTree';
|
|
2
|
+
import { IPreparedTreeItem, ITreeConfig, ITreeItem } from '../../../hooks/useTree';
|
|
3
3
|
export interface ITreeViewProps extends ITreeProps {
|
|
4
4
|
items: IPreparedTreeItem[];
|
|
5
5
|
}
|
|
@@ -30,7 +30,7 @@ export interface ITreeProps extends Omit<ITreeConfig, 'currentPage' | 'itemsOnPa
|
|
|
30
30
|
* Обработчик на клик по узлу
|
|
31
31
|
* @param args
|
|
32
32
|
*/
|
|
33
|
-
onItemClick?: (
|
|
33
|
+
onItemClick?: (event: React.MouseEvent, item: ITreeItem) => any;
|
|
34
34
|
/**
|
|
35
35
|
* Отображать раскрытыми узлы из LocalStorage
|
|
36
36
|
* @example true
|
|
@@ -41,6 +41,15 @@ export interface ITreeProps extends Omit<ITreeConfig, 'currentPage' | 'itemsOnPa
|
|
|
41
41
|
* @example 32
|
|
42
42
|
*/
|
|
43
43
|
levelPadding?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Показать иконку c лева от элемента
|
|
46
|
+
* @example true
|
|
47
|
+
*/
|
|
48
|
+
showIcon?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Кастомная иконка, заменяющая иконку раскрытия по умолчанию
|
|
51
|
+
*/
|
|
52
|
+
customIcon?: string | React.ReactElement;
|
|
44
53
|
/**
|
|
45
54
|
* Флаг, определяющий раскрывать вложенные элементы по клику на весь элемент или только на иконку
|
|
46
55
|
* @example false
|
|
@@ -57,6 +66,8 @@ declare namespace Tree {
|
|
|
57
66
|
level: number;
|
|
58
67
|
levelPadding: number;
|
|
59
68
|
hasIconExpandOnly: boolean;
|
|
69
|
+
useSameSelectedItemId: boolean;
|
|
70
|
+
showIcon: boolean;
|
|
60
71
|
};
|
|
61
72
|
}
|
|
62
73
|
export default Tree;
|
package/ui/nav/Tree/Tree.js
CHANGED
|
@@ -22,7 +22,8 @@ function Tree(props) {
|
|
|
22
22
|
autoOpenLevels: props.autoOpenLevels,
|
|
23
23
|
onExpand: props.onItemClick,
|
|
24
24
|
level: props.level,
|
|
25
|
-
alwaysOpened: props.alwaysOpened
|
|
25
|
+
alwaysOpened: props.alwaysOpened,
|
|
26
|
+
useSameSelectedItemId: props.useSameSelectedItemId
|
|
26
27
|
}).treeItems;
|
|
27
28
|
return components.ui.renderView(props.view || 'nav.TreeView', __assign(__assign({}, props), { items: treeItems }));
|
|
28
29
|
}
|
|
@@ -33,5 +34,7 @@ Tree.defaultProps = {
|
|
|
33
34
|
autoSave: false,
|
|
34
35
|
level: 0,
|
|
35
36
|
levelPadding: 32,
|
|
36
|
-
hasIconExpandOnly: false
|
|
37
|
+
hasIconExpandOnly: false,
|
|
38
|
+
useSameSelectedItemId: true,
|
|
39
|
+
showIcon: true
|
|
37
40
|
};
|
|
@@ -1,86 +0,0 @@
|
|
|
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 = __importDefault(require("react"));
|
|
18
|
-
var calendar_1 = require("../../../../utils/calendar");
|
|
19
|
-
var DateControlType_1 = __importDefault(require("../enums/DateControlType"));
|
|
20
|
-
var useCalendarControls_1 = require("./useCalendarControls");
|
|
21
|
-
var utils_1 = require("../utils/utils");
|
|
22
|
-
var WEEK_DAY_FORMAT = 'dd, D MMM';
|
|
23
|
-
var ONE_DAY = 1;
|
|
24
|
-
var getFormattedWeekFromDate = function (fromDate) {
|
|
25
|
-
if (fromDate === void 0) { fromDate = null; }
|
|
26
|
-
var currentWeek = (0, utils_1.getWeekDaysFromDate)(fromDate || new Date());
|
|
27
|
-
return currentWeek.map(function (dayOfWeek) {
|
|
28
|
-
var copyOfDayWeek = __assign({}, dayOfWeek);
|
|
29
|
-
copyOfDayWeek.formattedDisplay = (0, calendar_1.convertDate)(dayOfWeek.date, null, WEEK_DAY_FORMAT);
|
|
30
|
-
// eslint-disable-next-line no-unused-expressions
|
|
31
|
-
(0, utils_1.isDateIsToday)(copyOfDayWeek.date) ? copyOfDayWeek.isToday = true : copyOfDayWeek.isToday = false;
|
|
32
|
-
return copyOfDayWeek;
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
var useWeekCalendar = function (currentMonthDate) {
|
|
36
|
-
var _a;
|
|
37
|
-
var _b = react_1["default"].useState(getFormattedWeekFromDate()), currentWeek = _b[0], setCurrentWeek = _b[1];
|
|
38
|
-
var forceUpdateWeekOnMonthChange = react_1["default"].useCallback(function (newMonthDate) {
|
|
39
|
-
setCurrentWeek(getFormattedWeekFromDate(newMonthDate));
|
|
40
|
-
}, []);
|
|
41
|
-
var changeMonthAfterWeekChanged = react_1["default"].useCallback(function (formattedWeek) {
|
|
42
|
-
var firstDayOfWeek = formattedWeek[0].date;
|
|
43
|
-
var currentMonthNumber = currentMonthDate.getMonth();
|
|
44
|
-
var isWeekOutOfMonth = formattedWeek.every(function (dayOfWeek) { return dayOfWeek.date.getMonth() !== currentMonthNumber; });
|
|
45
|
-
if (!isWeekOutOfMonth) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
if (currentMonthNumber - firstDayOfWeek.getMonth() === 1) {
|
|
49
|
-
var lastDayOfWeekInNewMonth = formattedWeek[formattedWeek.length - 1].date;
|
|
50
|
-
var prevMonthControl = (0, useCalendarControls_1.getSourceCalendarControl)(DateControlType_1["default"].PREV_ONE);
|
|
51
|
-
prevMonthControl.click();
|
|
52
|
-
forceUpdateWeekOnMonthChange(lastDayOfWeekInNewMonth);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
var firstDayOfWeekInNewMonth = formattedWeek[0].date;
|
|
56
|
-
var nextMonthControl = (0, useCalendarControls_1.getSourceCalendarControl)(DateControlType_1["default"].NEXT_ONE);
|
|
57
|
-
nextMonthControl.click();
|
|
58
|
-
forceUpdateWeekOnMonthChange(firstDayOfWeekInNewMonth);
|
|
59
|
-
}
|
|
60
|
-
}, [currentMonthDate, forceUpdateWeekOnMonthChange]);
|
|
61
|
-
var setNextWeek = react_1["default"].useCallback(function () {
|
|
62
|
-
var lastDayOfWeek = currentWeek[currentWeek.length - 1].date;
|
|
63
|
-
lastDayOfWeek.setDate(lastDayOfWeek.getDate() + ONE_DAY);
|
|
64
|
-
var formattedNextWeek = getFormattedWeekFromDate(lastDayOfWeek);
|
|
65
|
-
setCurrentWeek(formattedNextWeek);
|
|
66
|
-
changeMonthAfterWeekChanged(formattedNextWeek);
|
|
67
|
-
}, [currentWeek, changeMonthAfterWeekChanged]);
|
|
68
|
-
var setPrevWeek = react_1["default"].useCallback(function () {
|
|
69
|
-
var firstDayOfWeek = currentWeek[0].date;
|
|
70
|
-
firstDayOfWeek.setDate(firstDayOfWeek.getDate() - ONE_DAY);
|
|
71
|
-
var formattedPrevWeek = getFormattedWeekFromDate(firstDayOfWeek);
|
|
72
|
-
setCurrentWeek(formattedPrevWeek);
|
|
73
|
-
changeMonthAfterWeekChanged(formattedPrevWeek);
|
|
74
|
-
}, [currentWeek, changeMonthAfterWeekChanged]);
|
|
75
|
-
return {
|
|
76
|
-
currentWeek: currentWeek,
|
|
77
|
-
weekControls: (_a = {},
|
|
78
|
-
_a[DateControlType_1["default"].NEXT_DOUBLE] = DateControlType_1["default"].NEXT_ONE,
|
|
79
|
-
_a[DateControlType_1["default"].NEXT_ONE] = setNextWeek,
|
|
80
|
-
_a[DateControlType_1["default"].PREV_ONE] = setPrevWeek,
|
|
81
|
-
_a[DateControlType_1["default"].PREV_DOUBLE] = DateControlType_1["default"].PREV_ONE,
|
|
82
|
-
_a),
|
|
83
|
-
forceUpdateWeekOnMonthChange: forceUpdateWeekOnMonthChange
|
|
84
|
-
};
|
|
85
|
-
};
|
|
86
|
-
exports["default"] = useWeekCalendar;
|