@steroidsjs/core 3.0.0-beta.85 → 3.0.0-beta.86
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/en.json +14 -1
- package/hooks/index.d.ts +5 -1
- package/hooks/index.js +9 -1
- package/hooks/useApplication.js +4 -0
- package/hooks/useDataProvider.d.ts +3 -2
- package/package.json +1 -1
- package/ui/content/Calendar/Calendar.d.ts +5 -0
- package/ui/content/Calendar/Calendar.js +7 -2
- package/ui/content/CalendarSystem/CalendarSystem.d.ts +56 -0
- package/ui/content/CalendarSystem/CalendarSystem.js +106 -0
- package/ui/content/CalendarSystem/enums/CalendarType.d.ts +6 -0
- package/ui/content/CalendarSystem/enums/CalendarType.js +38 -0
- package/ui/content/CalendarSystem/enums/DateControlType.d.ts +10 -0
- package/ui/content/CalendarSystem/enums/DateControlType.js +42 -0
- package/ui/content/CalendarSystem/helpers/addEventIfMatchDate.d.ts +3 -0
- package/ui/content/CalendarSystem/helpers/addEventIfMatchDate.js +21 -0
- package/ui/content/CalendarSystem/hooks/useCalendarControls.d.ts +8 -0
- package/ui/content/CalendarSystem/hooks/useCalendarControls.js +47 -0
- package/ui/content/CalendarSystem/hooks/useDisplayDate.d.ts +6 -0
- package/ui/content/CalendarSystem/hooks/useDisplayDate.js +27 -0
- package/ui/content/CalendarSystem/hooks/useMonthCalendar.d.ts +16 -0
- package/ui/content/CalendarSystem/hooks/useMonthCalendar.js +87 -0
- package/ui/content/CalendarSystem/hooks/useWeekCalendar.d.ts +15 -0
- package/ui/content/CalendarSystem/hooks/useWeekCalendar.js +86 -0
- package/ui/content/CalendarSystem/index.d.ts +2 -0
- package/ui/content/CalendarSystem/index.js +7 -0
- package/ui/content/CalendarSystem/utils/utils.d.ts +3 -0
- package/ui/content/CalendarSystem/utils/utils.js +29 -0
- package/ui/content/Icon/Icon.d.ts +1 -1
- package/ui/content/index.d.ts +2 -1
- package/ui/content/index.js +3 -1
- package/ui/form/CheckboxField/CheckboxField.d.ts +4 -0
- package/ui/form/CheckboxListField/CheckboxListField.d.ts +11 -2
- package/ui/form/CheckboxListField/CheckboxListField.js +4 -1
package/en.json
CHANGED
|
@@ -805,7 +805,20 @@
|
|
|
805
805
|
"Фиксированная высота графика в пикселях": "Fixed chart height in pixels",
|
|
806
806
|
"Использовать ли дефолтную конфигурацию для графика типа line": "Use default configuration for the line chart",
|
|
807
807
|
"Этот компонент позволяет создавать в проекте графики разных типов. Под капотом для графиков используется библиотека nivo.\nДля работы этого компонента необходимо установить в проекте зависимости @nivo/core и пакет конкретного графика nivo, например @nivo/line.\nКомпонент графика nivo нужно передать в пропс chartComponent": "This component allows you to create various types of graphics in your project. Under the hood, the nivo library is used for charts. \nTo use this component, you need to install dependencies @nivo/core and a specific nivo chart package, for example, @nivo/line. \nPass the nivo chart component as the chartComponent prop",
|
|
808
|
+
"Новое событие": "New event",
|
|
809
|
+
"Календарь": "Calendar",
|
|
810
|
+
"Создать": "Create",
|
|
811
|
+
"Показать ещё": "Show more",
|
|
812
|
+
"Неделя": "Week",
|
|
813
|
+
"Месяц": "Month",
|
|
814
|
+
"Пн": "Mo",
|
|
815
|
+
"Вт": "Tu",
|
|
816
|
+
"Ср": "We",
|
|
817
|
+
"Чт": "Th",
|
|
818
|
+
"Пт": "Fr",
|
|
819
|
+
"Сб": "Sa",
|
|
820
|
+
"Вс": "Su",
|
|
808
821
|
"Компонент для представления данных коллекции в виде иерархической структуры.": "A component for representing collection data in the form of a hierarchical structure.",
|
|
809
822
|
"Уникальный идентификатор,\nиспользуется для сохранения состояния открыта или закрыта ячейка": "Unique identifier \nused to save the open or closed state of a cell",
|
|
810
823
|
"Включает обработку вложенных данных из items вида [{id: 1, name: 'John', items: [...]}]": ""
|
|
811
|
-
}
|
|
824
|
+
}
|
package/hooks/index.d.ts
CHANGED
|
@@ -18,5 +18,9 @@ import useSelector from './useSelector';
|
|
|
18
18
|
import useSsr from './useSsr';
|
|
19
19
|
import useUniqueId from './useUniqueId';
|
|
20
20
|
import useTheme from './useTheme';
|
|
21
|
+
import useMonthCalendar from '../ui/content/CalendarSystem/hooks/useMonthCalendar';
|
|
22
|
+
import useWeekCalendar from '../ui/content/CalendarSystem/hooks/useWeekCalendar';
|
|
23
|
+
import useDisplayDate from '../ui/content/CalendarSystem/hooks/useDisplayDate';
|
|
24
|
+
import useCalendarControls from '../ui/content/CalendarSystem/hooks/useCalendarControls';
|
|
21
25
|
import useSaveCursorPosition from './useSaveCursorPosition';
|
|
22
|
-
export { useAbsolutePositioning, useAddressBar, useApplication, useBem, useComponents, useDataProvider, useDataSelect, useDispatch, useFetch, useFile, useForm, useInitial, useLayout, useList, useModel, useScreen, useSelector, useSsr, useUniqueId, useTheme, useSaveCursorPosition, };
|
|
26
|
+
export { useAbsolutePositioning, useAddressBar, useApplication, useBem, useComponents, useDataProvider, useDataSelect, useDispatch, useFetch, useFile, useForm, useInitial, useLayout, useList, useModel, useScreen, useSelector, useSsr, useUniqueId, useTheme, useMonthCalendar, useWeekCalendar, 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.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;
|
|
6
|
+
exports.useSaveCursorPosition = exports.useCalendarControls = exports.useDisplayDate = exports.useWeekCalendar = exports.useMonthCalendar = 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"));
|
|
@@ -44,5 +44,13 @@ var useUniqueId_1 = __importDefault(require("./useUniqueId"));
|
|
|
44
44
|
exports.useUniqueId = useUniqueId_1["default"];
|
|
45
45
|
var useTheme_1 = __importDefault(require("./useTheme"));
|
|
46
46
|
exports.useTheme = useTheme_1["default"];
|
|
47
|
+
var useMonthCalendar_1 = __importDefault(require("../ui/content/CalendarSystem/hooks/useMonthCalendar"));
|
|
48
|
+
exports.useMonthCalendar = useMonthCalendar_1["default"];
|
|
49
|
+
var useWeekCalendar_1 = __importDefault(require("../ui/content/CalendarSystem/hooks/useWeekCalendar"));
|
|
50
|
+
exports.useWeekCalendar = useWeekCalendar_1["default"];
|
|
51
|
+
var useDisplayDate_1 = __importDefault(require("../ui/content/CalendarSystem/hooks/useDisplayDate"));
|
|
52
|
+
exports.useDisplayDate = useDisplayDate_1["default"];
|
|
53
|
+
var useCalendarControls_1 = __importDefault(require("../ui/content/CalendarSystem/hooks/useCalendarControls"));
|
|
54
|
+
exports.useCalendarControls = useCalendarControls_1["default"];
|
|
47
55
|
var useSaveCursorPosition_1 = __importDefault(require("./useSaveCursorPosition"));
|
|
48
56
|
exports.useSaveCursorPosition = useSaveCursorPosition_1["default"];
|
package/hooks/useApplication.js
CHANGED
|
@@ -55,9 +55,11 @@ var merge_1 = __importDefault(require("lodash-es/merge"));
|
|
|
55
55
|
var react_1 = require("react");
|
|
56
56
|
var relativeTime_1 = __importDefault(require("dayjs/plugin/relativeTime"));
|
|
57
57
|
var localizedFormat_1 = __importDefault(require("dayjs/plugin/localizedFormat"));
|
|
58
|
+
var localeData_1 = __importDefault(require("dayjs/plugin/localeData"));
|
|
58
59
|
var customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
|
|
59
60
|
var dayjs_1 = __importDefault(require("dayjs"));
|
|
60
61
|
var utc_1 = __importDefault(require("dayjs/plugin/utc"));
|
|
62
|
+
var isToday_1 = __importDefault(require("dayjs/plugin/isToday"));
|
|
61
63
|
var ThemeProvider_1 = __importDefault(require("../providers/ThemeProvider"));
|
|
62
64
|
var ClientStorageComponent_1 = __importDefault(require("../components/ClientStorageComponent"));
|
|
63
65
|
var HtmlComponent_1 = __importDefault(require("../components/HtmlComponent"));
|
|
@@ -103,6 +105,8 @@ function useApplication(config) {
|
|
|
103
105
|
dayjs_1["default"].extend(customParseFormat_1["default"]);
|
|
104
106
|
dayjs_1["default"].extend(localizedFormat_1["default"]);
|
|
105
107
|
dayjs_1["default"].extend(utc_1["default"]);
|
|
108
|
+
dayjs_1["default"].extend(localeData_1["default"]);
|
|
109
|
+
dayjs_1["default"].extend(isToday_1["default"]);
|
|
106
110
|
var components = (0, useComponents_1["default"])();
|
|
107
111
|
if (useGlobal && !process.env.IS_SSR) {
|
|
108
112
|
components = window.SteroidsComponents || null;
|
|
@@ -16,13 +16,14 @@ export interface IAutoCompleteConfig {
|
|
|
16
16
|
*/
|
|
17
17
|
delay?: number;
|
|
18
18
|
}
|
|
19
|
-
export type
|
|
19
|
+
export type DataProviderItem = string | ({
|
|
20
20
|
new (): Enum;
|
|
21
21
|
}) | (string | number | {
|
|
22
22
|
id: string | number | boolean;
|
|
23
23
|
label: string | any;
|
|
24
24
|
[key: string]: any;
|
|
25
|
-
})
|
|
25
|
+
});
|
|
26
|
+
export type DataProviderItems = DataProviderItem[];
|
|
26
27
|
export interface IDataProvider {
|
|
27
28
|
/**
|
|
28
29
|
* Уникальный (глобально) идентификатор, под которых будут храниться
|
package/package.json
CHANGED
|
@@ -45,6 +45,11 @@ export interface ICalendarProps extends IUiComponent {
|
|
|
45
45
|
* @example 1
|
|
46
46
|
*/
|
|
47
47
|
numberOfMonths?: number;
|
|
48
|
+
/**
|
|
49
|
+
* Callback вызываемый при нажатии на смену года или месяца в шапке Calendar
|
|
50
|
+
* @param newDate - дата первого дня нового месяца
|
|
51
|
+
*/
|
|
52
|
+
onMonthChange?: (newDate: Date) => void;
|
|
48
53
|
}
|
|
49
54
|
export interface ICalendarViewProps extends ICalendarProps {
|
|
50
55
|
/**
|
|
@@ -32,14 +32,19 @@ function Calendar(props) {
|
|
|
32
32
|
}
|
|
33
33
|
}, [selectedDates]);
|
|
34
34
|
var onDaySelect = (0, react_1.useCallback)(function (date) {
|
|
35
|
-
props.onChange
|
|
35
|
+
if (props.onChange) {
|
|
36
|
+
props.onChange.call(null, (0, calendar_1.convertDate)(date, null, props.valueFormat, false, true));
|
|
37
|
+
}
|
|
36
38
|
}, [props.onChange, props.valueFormat]);
|
|
37
39
|
var toggleCaptionPanel = (0, react_1.useCallback)(function () {
|
|
38
40
|
setIsCaptionPanelVisible(!isCaptionPanelVisible);
|
|
39
41
|
}, [isCaptionPanelVisible]);
|
|
40
42
|
var onMonthSelect = (0, react_1.useCallback)(function (newMonth) {
|
|
41
43
|
setMonth(newMonth);
|
|
42
|
-
|
|
44
|
+
if (props.onMonthChange) {
|
|
45
|
+
props.onMonthChange(newMonth);
|
|
46
|
+
}
|
|
47
|
+
}, [props]);
|
|
43
48
|
return components.ui.renderView(props.view || 'content.CalendarView', __assign(__assign(__assign({}, props.viewProps), props.pickerProps), { month: month, toYear: toYear, fromYear: fromYear, onDaySelect: onDaySelect, onMonthSelect: onMonthSelect, selectedDates: selectedDates, toggleCaptionPanel: toggleCaptionPanel, isCaptionPanelVisible: isCaptionPanelVisible, className: props.className, showFooter: props.showFooter, numberOfMonths: props.numberOfMonths }));
|
|
44
49
|
}
|
|
45
50
|
Calendar.defaultProps = {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IModalProps } from '../../../ui/modal/Modal/Modal';
|
|
3
|
+
import CalendarEnum from './enums/CalendarType';
|
|
4
|
+
export interface IDay {
|
|
5
|
+
dayNumber: number;
|
|
6
|
+
date: Date;
|
|
7
|
+
outOfRange?: boolean;
|
|
8
|
+
isToday?: boolean;
|
|
9
|
+
formattedDisplay?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface IPresentDateInfo {
|
|
12
|
+
currentYear: number;
|
|
13
|
+
currentMonth: number;
|
|
14
|
+
dateToDisplay: string;
|
|
15
|
+
}
|
|
16
|
+
export interface IEvent {
|
|
17
|
+
date: Date;
|
|
18
|
+
title: string;
|
|
19
|
+
color?: string;
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}
|
|
22
|
+
export interface IEventGroup {
|
|
23
|
+
id: number;
|
|
24
|
+
label: string;
|
|
25
|
+
color?: string;
|
|
26
|
+
events: IEvent[];
|
|
27
|
+
}
|
|
28
|
+
export interface ICalendarSystemProps extends IUiComponent {
|
|
29
|
+
onCreateEvent?: () => void;
|
|
30
|
+
onChangeCalendarType?: (newType: string) => void;
|
|
31
|
+
createEventModalProps: IModalProps;
|
|
32
|
+
eventBlock: {
|
|
33
|
+
title: string;
|
|
34
|
+
eventGroups: IEventGroup[];
|
|
35
|
+
};
|
|
36
|
+
[key: string]: any;
|
|
37
|
+
}
|
|
38
|
+
export interface ICalendarSystemViewProps extends Omit<ICalendarSystemProps, 'calendarGroups'> {
|
|
39
|
+
monthCalendarDays: IDay[];
|
|
40
|
+
currentWeekDays: IDay[];
|
|
41
|
+
allHours: string[];
|
|
42
|
+
calendarType: CalendarEnum;
|
|
43
|
+
dateToDisplay: string;
|
|
44
|
+
eventGroups: IEventGroup[];
|
|
45
|
+
eventGroupsTitle: string;
|
|
46
|
+
selectedCalendarGroupsIds: number[];
|
|
47
|
+
onChangeCalendarType: (newType: string) => void;
|
|
48
|
+
onMonthChange: (newDate: Date) => void;
|
|
49
|
+
applyControl: (event: React.MouseEvent<HTMLElement>) => void;
|
|
50
|
+
onClickCreate: VoidFunction;
|
|
51
|
+
getEventsFromDate: (dateFromDay: Date, isMonth: boolean) => IEvent[];
|
|
52
|
+
onChangeEventGroupsIds: (selectedIds: number[]) => void;
|
|
53
|
+
weekDays: string[];
|
|
54
|
+
}
|
|
55
|
+
export type ICalendarSystemModalViewProps = IModalProps;
|
|
56
|
+
export default function CalendarSystem(props: ICalendarSystemProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
+
/* eslint-disable default-case */
|
|
18
|
+
/* eslint-disable no-unused-expressions */
|
|
19
|
+
/* eslint-disable no-plusplus */
|
|
20
|
+
var react_1 = __importDefault(require("react"));
|
|
21
|
+
var dayjs_1 = __importDefault(require("dayjs"));
|
|
22
|
+
var concat_1 = __importDefault(require("lodash-es/concat"));
|
|
23
|
+
var slice_1 = __importDefault(require("lodash-es/slice"));
|
|
24
|
+
var localeData_1 = __importDefault(require("dayjs/plugin/localeData"));
|
|
25
|
+
var upperFirst_1 = __importDefault(require("lodash-es/upperFirst"));
|
|
26
|
+
var modal_1 = require("../../../actions/modal");
|
|
27
|
+
var useCalendarControls_1 = __importDefault(require("./hooks/useCalendarControls"));
|
|
28
|
+
var useDisplayDate_1 = __importDefault(require("./hooks/useDisplayDate"));
|
|
29
|
+
var useMonthCalendar_1 = __importDefault(require("./hooks/useMonthCalendar"));
|
|
30
|
+
var hooks_1 = require("../../../hooks");
|
|
31
|
+
var addEventIfMatchDate_1 = require("./helpers/addEventIfMatchDate");
|
|
32
|
+
var CalendarType_1 = __importDefault(require("./enums/CalendarType"));
|
|
33
|
+
dayjs_1["default"].extend(localeData_1["default"]);
|
|
34
|
+
function CalendarSystem(props) {
|
|
35
|
+
var _a;
|
|
36
|
+
var components = (0, hooks_1.useComponents)();
|
|
37
|
+
var dispatch = (0, hooks_1.useDispatch)();
|
|
38
|
+
var _b = react_1["default"].useState(props.eventBlock.eventGroups || []), innerEventGroups = _b[0], _ = _b[1];
|
|
39
|
+
var _c = react_1["default"].useState([]), selectedEventGroupsIds = _c[0], setSelectedEventGroupsIds = _c[1];
|
|
40
|
+
var _d = (0, useDisplayDate_1["default"])(), dateToDisplay = _d.dateToDisplay, setNewDateToDisplay = _d.setNewDateToDisplay;
|
|
41
|
+
var _e = react_1["default"].useState(CalendarType_1["default"].MONTH), calendarType = _e[0], setCalendarType = _e[1];
|
|
42
|
+
var _f = (0, useMonthCalendar_1["default"])(), monthCalendarDays = _f.calendarArray, setCurrentMonthDate = _f.setCurrentMonthDate, currentMonthDate = _f.currentMonthDate;
|
|
43
|
+
var _g = (0, hooks_1.useWeekCalendar)(currentMonthDate), currentWeekDays = _g.currentWeek, weekControls = _g.weekControls, forceUpdateWeekOnMonthChange = _g.forceUpdateWeekOnMonthChange;
|
|
44
|
+
var applyControl = (0, useCalendarControls_1["default"])(calendarType, weekControls);
|
|
45
|
+
var onChangeCalendarType = react_1["default"].useCallback(function (newType) {
|
|
46
|
+
setCalendarType(newType);
|
|
47
|
+
if (props.onChangeCalendarType) {
|
|
48
|
+
props.onChangeCalendarType(newType);
|
|
49
|
+
}
|
|
50
|
+
}, [props]);
|
|
51
|
+
var onMonthChange = react_1["default"].useCallback(function (newDate) {
|
|
52
|
+
setNewDateToDisplay(newDate);
|
|
53
|
+
setCurrentMonthDate(newDate);
|
|
54
|
+
forceUpdateWeekOnMonthChange(newDate);
|
|
55
|
+
}, [forceUpdateWeekOnMonthChange, setCurrentMonthDate, setNewDateToDisplay]);
|
|
56
|
+
var getEventsFromDate = function (date, currentCalendarType) {
|
|
57
|
+
var eventsOnDate = [];
|
|
58
|
+
var dayjsDate = (0, dayjs_1["default"])(date);
|
|
59
|
+
var iterateEventGroups = function (callback) {
|
|
60
|
+
innerEventGroups.forEach(function (eventGroup) {
|
|
61
|
+
eventGroup.events.forEach(function (event) {
|
|
62
|
+
callback(event, eventGroup);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
switch (currentCalendarType) {
|
|
67
|
+
case CalendarType_1["default"].MONTH: {
|
|
68
|
+
iterateEventGroups(function (event, eventGroup) {
|
|
69
|
+
var eventDateDayJs = (0, dayjs_1["default"])(event.date);
|
|
70
|
+
(0, addEventIfMatchDate_1.addEventIfMatchDate)(eventDateDayJs, dayjsDate, eventGroup, event, 'day', selectedEventGroupsIds, eventsOnDate);
|
|
71
|
+
});
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case CalendarType_1["default"].WEEK: {
|
|
75
|
+
iterateEventGroups(function (event, eventGroup) {
|
|
76
|
+
var eventDate = new Date(event.date);
|
|
77
|
+
eventDate.setHours(eventDate.getHours(), 0, 0, 0);
|
|
78
|
+
var eventDateDayJs = (0, dayjs_1["default"])(eventDate);
|
|
79
|
+
(0, addEventIfMatchDate_1.addEventIfMatchDate)(eventDateDayJs, dayjsDate, eventGroup, event, 'hours', selectedEventGroupsIds, eventsOnDate);
|
|
80
|
+
});
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// eslint-disable-next-line consistent-return
|
|
85
|
+
return eventsOnDate;
|
|
86
|
+
};
|
|
87
|
+
var weekDays = react_1["default"].useMemo(function () {
|
|
88
|
+
var unformattedDaysOfWeek = dayjs_1["default"].weekdaysMin();
|
|
89
|
+
return (0, concat_1["default"])((0, slice_1["default"])(unformattedDaysOfWeek, 1), unformattedDaysOfWeek[0]).map(function (weekDay) { return __("".concat((0, upperFirst_1["default"])(weekDay))); });
|
|
90
|
+
}, []);
|
|
91
|
+
var allHours = react_1["default"].useMemo(function () {
|
|
92
|
+
var hoursArray = [];
|
|
93
|
+
for (var i = 0; i < 24; i++) {
|
|
94
|
+
var formattedHour = (0, dayjs_1["default"])().startOf('day').add(i, 'hour').format('HH:00');
|
|
95
|
+
hoursArray.push(formattedHour);
|
|
96
|
+
}
|
|
97
|
+
return hoursArray;
|
|
98
|
+
}, []);
|
|
99
|
+
var createModalView = ((_a = props.createEventModalProps) === null || _a === void 0 ? void 0 : _a.component) || components.ui.getView('content.CalendarSystemModalView');
|
|
100
|
+
var createModalProps = react_1["default"].useMemo(function () { return (__assign(__assign({}, props.createEventModalProps), { component: createModalView })); }, [createModalView, props.createEventModalProps]);
|
|
101
|
+
var onClickCreate = react_1["default"].useCallback(function () {
|
|
102
|
+
dispatch((0, modal_1.openModal)(createModalView, createModalProps));
|
|
103
|
+
}, [createModalProps, createModalView, dispatch]);
|
|
104
|
+
return components.ui.renderView(props.view || 'content.CalendarSystemView', __assign(__assign({}, props), { dateToDisplay: dateToDisplay, monthCalendarDays: monthCalendarDays, calendarType: calendarType, currentWeekDays: currentWeekDays, createModalProps: createModalProps, eventGroups: innerEventGroups, eventGroupsTitle: props.eventBlock.title, allHours: allHours, selectedEventGroupsIds: selectedEventGroupsIds, onChangeCalendarType: onChangeCalendarType, onMonthChange: onMonthChange, applyControl: applyControl, onClickCreate: onClickCreate, getEventsFromDate: getEventsFromDate, onChangeEventGroupsIds: function (newSelectedEventGroupsIds) { return setSelectedEventGroupsIds(newSelectedEventGroupsIds); }, weekDays: weekDays }));
|
|
105
|
+
}
|
|
106
|
+
exports["default"] = CalendarSystem;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
exports.__esModule = true;
|
|
21
|
+
var Enum_1 = __importDefault(require("../../../../base/Enum"));
|
|
22
|
+
var CalendarType = /** @class */ (function (_super) {
|
|
23
|
+
__extends(CalendarType, _super);
|
|
24
|
+
function CalendarType() {
|
|
25
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
26
|
+
}
|
|
27
|
+
CalendarType.getLabels = function () {
|
|
28
|
+
var _a;
|
|
29
|
+
return _a = {},
|
|
30
|
+
_a[this.WEEK] = __('Неделя'),
|
|
31
|
+
_a[this.MONTH] = __('Месяц'),
|
|
32
|
+
_a;
|
|
33
|
+
};
|
|
34
|
+
CalendarType.WEEK = 'Week';
|
|
35
|
+
CalendarType.MONTH = 'Month';
|
|
36
|
+
return CalendarType;
|
|
37
|
+
}(Enum_1["default"]));
|
|
38
|
+
exports["default"] = CalendarType;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Enum from '../../../../base/Enum';
|
|
2
|
+
export default class DateControlType extends Enum {
|
|
3
|
+
static PREV_DOUBLE: string;
|
|
4
|
+
static PREV_ONE: string;
|
|
5
|
+
static NEXT_ONE: string;
|
|
6
|
+
static NEXT_DOUBLE: string;
|
|
7
|
+
static getIcons(): {
|
|
8
|
+
[x: string]: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
exports.__esModule = true;
|
|
21
|
+
var Enum_1 = __importDefault(require("../../../../base/Enum"));
|
|
22
|
+
var DateControlType = /** @class */ (function (_super) {
|
|
23
|
+
__extends(DateControlType, _super);
|
|
24
|
+
function DateControlType() {
|
|
25
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
26
|
+
}
|
|
27
|
+
DateControlType.getIcons = function () {
|
|
28
|
+
var _a;
|
|
29
|
+
return _a = {},
|
|
30
|
+
_a[this.PREV_DOUBLE] = 'double_arrow_left',
|
|
31
|
+
_a[this.PREV_ONE] = 'arrow_left_24x24',
|
|
32
|
+
_a[this.NEXT_ONE] = 'arrow_right_24x24',
|
|
33
|
+
_a[this.NEXT_DOUBLE] = 'double_arrow_right',
|
|
34
|
+
_a;
|
|
35
|
+
};
|
|
36
|
+
DateControlType.PREV_DOUBLE = 'PREV_DOUBLE';
|
|
37
|
+
DateControlType.PREV_ONE = 'PREV_ONE';
|
|
38
|
+
DateControlType.NEXT_ONE = 'NEXT_ONE';
|
|
39
|
+
DateControlType.NEXT_DOUBLE = 'NEXT_DOUBLE';
|
|
40
|
+
return DateControlType;
|
|
41
|
+
}(Enum_1["default"]));
|
|
42
|
+
exports["default"] = DateControlType;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import dayjs from 'dayjs';
|
|
2
|
+
import { IEventGroup, IEvent } from '../CalendarSystem';
|
|
3
|
+
export declare const addEventIfMatchDate: (eventDateDayJs: dayjs.Dayjs, sourceDateInDayJs: dayjs.Dayjs, calendarGroup: IEventGroup, originalEvent: IEvent, unit: 'hours' | 'day', selectedEventGroupsIds: number[], resultEventsOnDate: IEvent[]) => void;
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
exports.__esModule = true;
|
|
14
|
+
exports.addEventIfMatchDate = void 0;
|
|
15
|
+
var addEventIfMatchDate = function (eventDateDayJs, sourceDateInDayJs, calendarGroup, originalEvent, unit, selectedEventGroupsIds, resultEventsOnDate) {
|
|
16
|
+
var _a;
|
|
17
|
+
if (eventDateDayJs.isSame(sourceDateInDayJs, unit) && selectedEventGroupsIds.includes(calendarGroup.id)) {
|
|
18
|
+
resultEventsOnDate.push(__assign(__assign({}, originalEvent), { color: (_a = originalEvent.color) !== null && _a !== void 0 ? _a : calendarGroup.color }));
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.addEventIfMatchDate = addEventIfMatchDate;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import CalendarEnum from '../enums/CalendarType';
|
|
3
|
+
import DateControlEnum from '../enums/DateControlType';
|
|
4
|
+
export declare const getSourceCalendarControl: (control: string) => HTMLElement;
|
|
5
|
+
declare const useCalendarControls: (calendarType: CalendarEnum, weekControls: {
|
|
6
|
+
[key: string]: () => void | DateControlEnum;
|
|
7
|
+
}) => (event: React.MouseEvent<HTMLElement>) => void;
|
|
8
|
+
export default useCalendarControls;
|
|
@@ -0,0 +1,47 @@
|
|
|
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.getSourceCalendarControl = void 0;
|
|
7
|
+
/* eslint-disable no-unneeded-ternary */
|
|
8
|
+
/* eslint-disable default-case */
|
|
9
|
+
/* eslint-disable no-unused-expressions */
|
|
10
|
+
var react_1 = __importDefault(require("react"));
|
|
11
|
+
var isFunction_1 = __importDefault(require("lodash-es/isFunction"));
|
|
12
|
+
var get_1 = __importDefault(require("lodash-es/get"));
|
|
13
|
+
var CalendarType_1 = __importDefault(require("../enums/CalendarType"));
|
|
14
|
+
var CUSTOM_CONTROL_PATH = 'dataset.control';
|
|
15
|
+
var getSourceCalendarControl = function (control) { return document.querySelector("[data-sourcecontrol=\"".concat(control, "\"]")); };
|
|
16
|
+
exports.getSourceCalendarControl = getSourceCalendarControl;
|
|
17
|
+
var useCalendarControls = function (calendarType, weekControls) {
|
|
18
|
+
var getCustomControlType = function (event) {
|
|
19
|
+
var target = event.target;
|
|
20
|
+
var customControlType = (0, get_1["default"])(target, CUSTOM_CONTROL_PATH);
|
|
21
|
+
return customControlType ? customControlType : null;
|
|
22
|
+
};
|
|
23
|
+
var applyControl = react_1["default"].useCallback(function (event) {
|
|
24
|
+
var customControlType = getCustomControlType(event);
|
|
25
|
+
var sourceCalendarControl = (0, exports.getSourceCalendarControl)(customControlType);
|
|
26
|
+
if (!sourceCalendarControl) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
switch (calendarType) {
|
|
30
|
+
case CalendarType_1["default"].MONTH: {
|
|
31
|
+
sourceCalendarControl.click();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
case CalendarType_1["default"].WEEK: {
|
|
35
|
+
if ((0, isFunction_1["default"])(weekControls[customControlType])) {
|
|
36
|
+
weekControls[customControlType]();
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
var sourceControlType = weekControls[customControlType];
|
|
40
|
+
(0, exports.getSourceCalendarControl)(sourceControlType).click();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}, [calendarType, weekControls]);
|
|
45
|
+
return applyControl;
|
|
46
|
+
};
|
|
47
|
+
exports["default"] = useCalendarControls;
|
|
@@ -0,0 +1,27 @@
|
|
|
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.MONTH_CONVERT_FORMAT = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var upperFirst_1 = __importDefault(require("lodash-es/upperFirst"));
|
|
9
|
+
var calendar_1 = require("../../../../utils/calendar");
|
|
10
|
+
exports.MONTH_CONVERT_FORMAT = 'MMMM YYYY';
|
|
11
|
+
var getFirstDayOfCurrentMonth = function () {
|
|
12
|
+
var currentDate = new Date();
|
|
13
|
+
var firstDayOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
|
|
14
|
+
return firstDayOfMonth;
|
|
15
|
+
};
|
|
16
|
+
var convertDateToRequiredFormat = function (date) { return (0, calendar_1.convertDate)(date, null, exports.MONTH_CONVERT_FORMAT); };
|
|
17
|
+
var useDisplayDate = function () {
|
|
18
|
+
var _a = react_1["default"].useState((0, upperFirst_1["default"])(convertDateToRequiredFormat(getFirstDayOfCurrentMonth()))), dateToDisplay = _a[0], setDateToDisplay = _a[1];
|
|
19
|
+
var setNewDateToDisplay = function (newDate) {
|
|
20
|
+
setDateToDisplay(convertDateToRequiredFormat(newDate));
|
|
21
|
+
};
|
|
22
|
+
return {
|
|
23
|
+
dateToDisplay: dateToDisplay,
|
|
24
|
+
setNewDateToDisplay: setNewDateToDisplay
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
exports["default"] = useDisplayDate;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IDay } from '../CalendarSystem';
|
|
3
|
+
declare const useMonthCalendar: () => {
|
|
4
|
+
getCalendarArray: () => IDay[];
|
|
5
|
+
getCurrentMonthDataUTC: () => {
|
|
6
|
+
currentMonth: number;
|
|
7
|
+
lastDayOfCurrentMonth: number;
|
|
8
|
+
firstDayOfCurrentMonth: Date;
|
|
9
|
+
daysInCurrentMonth: any[];
|
|
10
|
+
};
|
|
11
|
+
getWeekFromDate: (date: Date) => IDay[];
|
|
12
|
+
calendarArray: IDay[];
|
|
13
|
+
setCurrentMonthDate: React.Dispatch<React.SetStateAction<Date>>;
|
|
14
|
+
currentMonthDate: Date;
|
|
15
|
+
};
|
|
16
|
+
export default useMonthCalendar;
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
/* eslint-disable no-plusplus */
|
|
18
|
+
/* eslint-disable import/order */
|
|
19
|
+
var react_1 = __importDefault(require("react"));
|
|
20
|
+
var utils_1 = require("../utils/utils");
|
|
21
|
+
var FIRST_DAY = 1;
|
|
22
|
+
var ONE_MONTH = 1;
|
|
23
|
+
var TOTAL_DAYS_IN_CALENDAR = 42;
|
|
24
|
+
var useMonthCalendar = function () {
|
|
25
|
+
var _a = react_1["default"].useState(null), currentMonthDate = _a[0], setCurrentMonthDate = _a[1];
|
|
26
|
+
var getCurrentMonthDataUTC = react_1["default"].useCallback(function () {
|
|
27
|
+
var currentYear = (currentMonthDate === null || currentMonthDate === void 0 ? void 0 : currentMonthDate.getFullYear()) || new Date().getFullYear();
|
|
28
|
+
var month = (currentMonthDate === null || currentMonthDate === void 0 ? void 0 : currentMonthDate.getMonth()) || new Date().getMonth();
|
|
29
|
+
var nextMonthFirstDay = new Date(currentYear, month + ONE_MONTH, FIRST_DAY);
|
|
30
|
+
var lastDayOfCurrentMonth = new Date(nextMonthFirstDay.getTime() - FIRST_DAY).getDate();
|
|
31
|
+
var firstDayOfCurrentMonth = new Date(Date.UTC(currentYear, month, FIRST_DAY));
|
|
32
|
+
if (currentMonthDate === null) {
|
|
33
|
+
setCurrentMonthDate(firstDayOfCurrentMonth);
|
|
34
|
+
}
|
|
35
|
+
var daysInCurrentMonth = [];
|
|
36
|
+
// Пройдемся по всем дням месяца и добавим их в массив
|
|
37
|
+
for (var dayNumber = 1; dayNumber <= lastDayOfCurrentMonth; dayNumber++) {
|
|
38
|
+
var date = new Date(Date.UTC(currentYear, month, dayNumber));
|
|
39
|
+
daysInCurrentMonth.push({ date: date, dayNumber: dayNumber });
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
currentMonth: month,
|
|
43
|
+
lastDayOfCurrentMonth: lastDayOfCurrentMonth,
|
|
44
|
+
firstDayOfCurrentMonth: firstDayOfCurrentMonth,
|
|
45
|
+
daysInCurrentMonth: daysInCurrentMonth
|
|
46
|
+
};
|
|
47
|
+
}, [currentMonthDate]);
|
|
48
|
+
var getCalendarArray = react_1["default"].useCallback(function () {
|
|
49
|
+
var calendarArray = [];
|
|
50
|
+
var _a = getCurrentMonthDataUTC(), firstDayOfCurrentMonth = _a.firstDayOfCurrentMonth, month = _a.currentMonth, daysInCurrentMonth = _a.daysInCurrentMonth;
|
|
51
|
+
var firstWeekInMonth = (0, utils_1.getWeekDaysFromDate)(firstDayOfCurrentMonth);
|
|
52
|
+
firstWeekInMonth.forEach(function (day) { return calendarArray.push({
|
|
53
|
+
date: day.date,
|
|
54
|
+
dayNumber: day.dayNumber,
|
|
55
|
+
outOfRange: day.date.getMonth() < month
|
|
56
|
+
}); });
|
|
57
|
+
daysInCurrentMonth.forEach(function (day) {
|
|
58
|
+
var existingDay = calendarArray.find(function (item) { return item.date.getTime() === day.date.getTime(); });
|
|
59
|
+
if (!existingDay) {
|
|
60
|
+
calendarArray.push({
|
|
61
|
+
date: day.date,
|
|
62
|
+
dayNumber: day.dayNumber,
|
|
63
|
+
outOfRange: false
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
var daysAfterCurrentMonth = TOTAL_DAYS_IN_CALENDAR - calendarArray.length;
|
|
68
|
+
for (var i = 1; i <= daysAfterCurrentMonth; i++) {
|
|
69
|
+
var currentDate = new Date(currentMonthDate === null || currentMonthDate === void 0 ? void 0 : currentMonthDate.getFullYear(), month + 1, i);
|
|
70
|
+
calendarArray.push({
|
|
71
|
+
date: currentDate,
|
|
72
|
+
dayNumber: currentDate.getDate(),
|
|
73
|
+
outOfRange: currentDate.getMonth() > month
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return calendarArray.map(function (day) { return (0, utils_1.isDateIsToday)(day.date) ? (__assign(__assign({}, day), { isToday: true })) : day; });
|
|
77
|
+
}, [currentMonthDate, getCurrentMonthDataUTC]);
|
|
78
|
+
return {
|
|
79
|
+
getCalendarArray: getCalendarArray,
|
|
80
|
+
getCurrentMonthDataUTC: getCurrentMonthDataUTC,
|
|
81
|
+
getWeekFromDate: utils_1.getWeekDaysFromDate,
|
|
82
|
+
calendarArray: getCalendarArray(),
|
|
83
|
+
setCurrentMonthDate: setCurrentMonthDate,
|
|
84
|
+
currentMonthDate: currentMonthDate
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
exports["default"] = useMonthCalendar;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import DateControlEnum from '../enums/DateControlType';
|
|
2
|
+
declare const useWeekCalendar: (currentMonthDate: Date) => {
|
|
3
|
+
currentWeek: {
|
|
4
|
+
dayNumber: number;
|
|
5
|
+
date: Date;
|
|
6
|
+
outOfRange?: boolean;
|
|
7
|
+
isToday?: boolean;
|
|
8
|
+
formattedDisplay?: string;
|
|
9
|
+
}[];
|
|
10
|
+
weekControls: {
|
|
11
|
+
[key: string]: () => void | DateControlEnum;
|
|
12
|
+
};
|
|
13
|
+
forceUpdateWeekOnMonthChange: (newMonthDate: Date) => void;
|
|
14
|
+
};
|
|
15
|
+
export default useWeekCalendar;
|
|
@@ -0,0 +1,86 @@
|
|
|
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;
|
|
@@ -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 CalendarSystem_1 = __importDefault(require("./CalendarSystem"));
|
|
7
|
+
exports["default"] = CalendarSystem_1["default"];
|
|
@@ -0,0 +1,29 @@
|
|
|
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.isDateIsToday = exports.getWeekDaysFromDate = void 0;
|
|
7
|
+
/* eslint-disable no-plusplus */
|
|
8
|
+
var dayjs_1 = __importDefault(require("dayjs"));
|
|
9
|
+
var SIX_DAYS_DIFF = 6;
|
|
10
|
+
var MAX_DAYS_DIFF_IN_WEEK = 7;
|
|
11
|
+
var getWeekDaysFromDate = function (date) {
|
|
12
|
+
var weekDays = [];
|
|
13
|
+
var firstDayOfWeek = new Date(date);
|
|
14
|
+
var currentDay = date.getDay();
|
|
15
|
+
var diff = currentDay === 0 ? SIX_DAYS_DIFF : currentDay - 1; // Разница между текущим днем и понедельником
|
|
16
|
+
firstDayOfWeek.setDate(firstDayOfWeek.getDate() - diff); // Устанавливаем первый день недели (понедельник)
|
|
17
|
+
for (var i = 0; i < MAX_DAYS_DIFF_IN_WEEK; i++) {
|
|
18
|
+
var currentDate = new Date(firstDayOfWeek);
|
|
19
|
+
currentDate.setDate(currentDate.getDate() + i);
|
|
20
|
+
weekDays.push({
|
|
21
|
+
dayNumber: currentDate.getDate(),
|
|
22
|
+
date: new Date(currentDate)
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return weekDays;
|
|
26
|
+
};
|
|
27
|
+
exports.getWeekDaysFromDate = getWeekDaysFromDate;
|
|
28
|
+
var isDateIsToday = function (date) { return (0, dayjs_1["default"])(date).isToday(); };
|
|
29
|
+
exports.isDateIsToday = isDateIsToday;
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*
|
|
23
23
|
* Компонент, представляющий иконку. Иконки могут быть импортированы при старте приложения.
|
|
24
24
|
*/
|
|
25
|
-
export interface IIconProps extends IUiComponent {
|
|
25
|
+
export interface IIconProps extends Omit<IUiComponent, 'className' | 'style'>, Partial<HTMLElement> {
|
|
26
26
|
/**
|
|
27
27
|
* Имя иконки (латиницей). Импорт иконок происходит на старте приложения.
|
|
28
28
|
* @example create
|
package/ui/content/index.d.ts
CHANGED
|
@@ -10,4 +10,5 @@ import Menu from './Menu';
|
|
|
10
10
|
import CopyToClipboard from './CopyToClipboard';
|
|
11
11
|
import Chart from './Chart';
|
|
12
12
|
import Slider from './Slider';
|
|
13
|
-
|
|
13
|
+
import CalendarSystem from './CalendarSystem';
|
|
14
|
+
export { Avatar, AvatarGroup, Accordion, AccordionItem, Alert, Card, DropDown, Badge, Detail, DetailItem, Icon, Menu, CopyToClipboard, Chart, Slider, CalendarSystem, };
|
package/ui/content/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.Slider = exports.Chart = exports.CopyToClipboard = exports.Menu = exports.Icon = exports.DetailItem = exports.Detail = exports.Badge = exports.DropDown = exports.Card = exports.Alert = exports.AccordionItem = exports.Accordion = exports.AvatarGroup = exports.Avatar = void 0;
|
|
6
|
+
exports.CalendarSystem = exports.Slider = exports.Chart = exports.CopyToClipboard = exports.Menu = exports.Icon = exports.DetailItem = exports.Detail = exports.Badge = exports.DropDown = exports.Card = exports.Alert = exports.AccordionItem = exports.Accordion = exports.AvatarGroup = exports.Avatar = void 0;
|
|
7
7
|
var Avatar_1 = require("./Avatar");
|
|
8
8
|
exports.Avatar = Avatar_1.Avatar;
|
|
9
9
|
exports.AvatarGroup = Avatar_1.AvatarGroup;
|
|
@@ -31,3 +31,5 @@ var Chart_1 = __importDefault(require("./Chart"));
|
|
|
31
31
|
exports.Chart = Chart_1["default"];
|
|
32
32
|
var Slider_1 = __importDefault(require("./Slider"));
|
|
33
33
|
exports.Slider = Slider_1["default"];
|
|
34
|
+
var CalendarSystem_1 = __importDefault(require("./CalendarSystem"));
|
|
35
|
+
exports.CalendarSystem = CalendarSystem_1["default"];
|
|
@@ -16,6 +16,10 @@ export interface ICheckboxFieldProps extends IFieldWrapperInputProps, IUiCompone
|
|
|
16
16
|
* @example true
|
|
17
17
|
*/
|
|
18
18
|
checked?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Пользовательский цвет для чекбокса
|
|
21
|
+
*/
|
|
22
|
+
color?: string;
|
|
19
23
|
[key: string]: any;
|
|
20
24
|
}
|
|
21
25
|
export interface ICheckboxFieldViewProps extends ICheckboxFieldProps, IFieldWrapperOutputProps {
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../../../ui/form/Field/fieldWrapper';
|
|
3
|
-
import { IDataProviderConfig } from '../../../hooks/useDataProvider';
|
|
3
|
+
import { DataProviderItem, IDataProviderConfig } from '../../../hooks/useDataProvider';
|
|
4
4
|
import { IDataSelectConfig } from '../../../hooks/useDataSelect';
|
|
5
5
|
import { ICheckboxFieldViewProps } from '../CheckboxField/CheckboxField';
|
|
6
|
+
type CheckboxFieldListItem = DataProviderItem & {
|
|
7
|
+
color?: string;
|
|
8
|
+
};
|
|
6
9
|
/**
|
|
7
10
|
* CheckboxListField
|
|
8
11
|
*
|
|
9
12
|
* Список с чекбоксами. Используется в формах для выбора нескольких значений.
|
|
10
13
|
*/
|
|
11
|
-
export interface ICheckboxListFieldProps extends IFieldWrapperInputProps, IDataProviderConfig, Omit<IDataSelectConfig, 'items'>, IUiComponent {
|
|
14
|
+
export interface ICheckboxListFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'>, IUiComponent {
|
|
12
15
|
/**
|
|
13
16
|
* Свойства для элемента input
|
|
14
17
|
* @example {onKeyDown: ...}
|
|
@@ -18,6 +21,11 @@ export interface ICheckboxListFieldProps extends IFieldWrapperInputProps, IDataP
|
|
|
18
21
|
* Ориентация списка
|
|
19
22
|
*/
|
|
20
23
|
orientation?: Orientation;
|
|
24
|
+
/**
|
|
25
|
+
* Коллекция элементов
|
|
26
|
+
* @example [{id: 1, label: 'Krasnoyarsk', color: 'red'}, {id: 2, label: 'Moscow', color: 'purple'}]
|
|
27
|
+
*/
|
|
28
|
+
items: CheckboxFieldListItem[];
|
|
21
29
|
[key: string]: any;
|
|
22
30
|
}
|
|
23
31
|
export interface ICheckboxListFieldViewProps extends IFieldWrapperOutputProps {
|
|
@@ -32,6 +40,7 @@ export interface ICheckboxListFieldViewProps extends IFieldWrapperOutputProps {
|
|
|
32
40
|
label?: string;
|
|
33
41
|
isSelected: boolean;
|
|
34
42
|
isHovered: boolean;
|
|
43
|
+
color?: string;
|
|
35
44
|
}[];
|
|
36
45
|
selectedIds: (PrimaryKey | any)[];
|
|
37
46
|
onItemSelect: (id: PrimaryKey | any) => void;
|
|
@@ -64,7 +64,10 @@ function CheckboxListField(props) {
|
|
|
64
64
|
// Sync with form
|
|
65
65
|
(0, react_1.useEffect)(function () {
|
|
66
66
|
props.input.onChange.call(null, selectedIds);
|
|
67
|
-
|
|
67
|
+
if (props.onChange) {
|
|
68
|
+
props.onChange(selectedIds);
|
|
69
|
+
}
|
|
70
|
+
}, [props, props.input.onChange, selectedIds]);
|
|
68
71
|
var onReset = (0, react_1.useCallback)(function () {
|
|
69
72
|
setSelectedIds([]);
|
|
70
73
|
}, [setSelectedIds]);
|