@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.
Files changed (34) hide show
  1. package/en.json +14 -1
  2. package/hooks/index.d.ts +5 -1
  3. package/hooks/index.js +9 -1
  4. package/hooks/useApplication.js +4 -0
  5. package/hooks/useDataProvider.d.ts +3 -2
  6. package/package.json +1 -1
  7. package/ui/content/Calendar/Calendar.d.ts +5 -0
  8. package/ui/content/Calendar/Calendar.js +7 -2
  9. package/ui/content/CalendarSystem/CalendarSystem.d.ts +56 -0
  10. package/ui/content/CalendarSystem/CalendarSystem.js +106 -0
  11. package/ui/content/CalendarSystem/enums/CalendarType.d.ts +6 -0
  12. package/ui/content/CalendarSystem/enums/CalendarType.js +38 -0
  13. package/ui/content/CalendarSystem/enums/DateControlType.d.ts +10 -0
  14. package/ui/content/CalendarSystem/enums/DateControlType.js +42 -0
  15. package/ui/content/CalendarSystem/helpers/addEventIfMatchDate.d.ts +3 -0
  16. package/ui/content/CalendarSystem/helpers/addEventIfMatchDate.js +21 -0
  17. package/ui/content/CalendarSystem/hooks/useCalendarControls.d.ts +8 -0
  18. package/ui/content/CalendarSystem/hooks/useCalendarControls.js +47 -0
  19. package/ui/content/CalendarSystem/hooks/useDisplayDate.d.ts +6 -0
  20. package/ui/content/CalendarSystem/hooks/useDisplayDate.js +27 -0
  21. package/ui/content/CalendarSystem/hooks/useMonthCalendar.d.ts +16 -0
  22. package/ui/content/CalendarSystem/hooks/useMonthCalendar.js +87 -0
  23. package/ui/content/CalendarSystem/hooks/useWeekCalendar.d.ts +15 -0
  24. package/ui/content/CalendarSystem/hooks/useWeekCalendar.js +86 -0
  25. package/ui/content/CalendarSystem/index.d.ts +2 -0
  26. package/ui/content/CalendarSystem/index.js +7 -0
  27. package/ui/content/CalendarSystem/utils/utils.d.ts +3 -0
  28. package/ui/content/CalendarSystem/utils/utils.js +29 -0
  29. package/ui/content/Icon/Icon.d.ts +1 -1
  30. package/ui/content/index.d.ts +2 -1
  31. package/ui/content/index.js +3 -1
  32. package/ui/form/CheckboxField/CheckboxField.d.ts +4 -0
  33. package/ui/form/CheckboxListField/CheckboxListField.d.ts +11 -2
  34. 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"];
@@ -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 DataProviderItems = string | ({
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.0-beta.85",
3
+ "version": "3.0.0-beta.86",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -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.call(null, (0, calendar_1.convertDate)(date, null, props.valueFormat, false, true));
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,6 @@
1
+ import Enum from '../../../../base/Enum';
2
+ export default class CalendarType extends Enum {
3
+ static WEEK: string;
4
+ static MONTH: string;
5
+ static getLabels(): Record<string, string>;
6
+ }
@@ -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,6 @@
1
+ export declare const MONTH_CONVERT_FORMAT = "MMMM YYYY";
2
+ declare const useDisplayDate: () => {
3
+ dateToDisplay: any;
4
+ setNewDateToDisplay: (newDate: Date) => void;
5
+ };
6
+ export default useDisplayDate;
@@ -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,2 @@
1
+ import CalendarSystem from './CalendarSystem';
2
+ export default CalendarSystem;
@@ -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,3 @@
1
+ import { IDay } from '../CalendarSystem';
2
+ export declare const getWeekDaysFromDate: (date: Date) => IDay[];
3
+ export declare const isDateIsToday: (date: Date) => boolean;
@@ -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
@@ -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
- export { Avatar, AvatarGroup, Accordion, AccordionItem, Alert, Card, DropDown, Badge, Detail, DetailItem, Icon, Menu, CopyToClipboard, Chart, Slider, };
13
+ import CalendarSystem from './CalendarSystem';
14
+ export { Avatar, AvatarGroup, Accordion, AccordionItem, Alert, Card, DropDown, Badge, Detail, DetailItem, Icon, Menu, CopyToClipboard, Chart, Slider, CalendarSystem, };
@@ -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
- }, [props.input.onChange, selectedIds]);
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]);