@steroidsjs/core 3.0.0-beta.93 → 3.0.0-beta.95

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 CHANGED
@@ -821,9 +821,86 @@
821
821
  "Включает обработку вложенных данных из items": "Enables the processing of nested data from items",
822
822
  "Callback вызываемый при нажатии на смену года или месяца в шапке Calendar": "",
823
823
  "Пользовательский цвет для чекбокса": "",
824
- "Включает обработку вложенных данных из items вида [{id: 1, name: 'John', items: [...]}]": "",
825
- "\nКомпонент `FileField` представляет собой поле формы для загрузки файлов.\nОн использует хук `useFile` для управления состоянием файлов и выполнения операций с файлами, таких как выбор и удаление.\nКомпонент поддерживает различные варианты отображения файлов (список или стена) с помощью перечисления `FilesLayout`.\nНа backendUrl по дефолту файл отправляется в теле запроса в виде бинарного кода.\nЧтобы отправлять файл в виде form-data (например в таком виде принимает файл FileModule в библиотеке steroidsjs/nest),\nнужно передать в `FileField` пропс uploaderConfig, в котором нужно указать поле useFormData: true.\n": "",
824
+ "Кастомный домен": "",
825
+ "Куки для режима ssr": "",
826
+ "Ключ для хранения токена в куках": "",
827
+ "Url для http запросов": "",
828
+ "Срок хранения токена в хранилище в днях": "",
829
+ "Имя хранилища для токена (local, session, или cookie)": "",
830
+ "Ключ токена авторизации для локального хранилища": "",
831
+ "Запрос на обновление токена авторизации": "",
832
+ "Хендлер для авторизации": "",
833
+ "Функция, которая вызывается на закрытие соединения": "",
834
+ "Функция, которая вызывается на отправку сообщения": "",
835
+ "Функция, которая вызывается на открытие соединения": "",
836
+ "Массив streams": "",
837
+ "url для websocket": "",
826
838
  "Колонки канбан доски": "",
827
839
  "Идентификатор канбан доски": "",
828
- "Обработчик события окончания перетаскивания карточки или колонки": ""
829
- }
840
+ "Обработчик события окончания перетаскивания карточки или колонки": "",
841
+ "Метод для добавления css-класса к элементу": "",
842
+ "Утилита для создания css-классов по БЭМ": "",
843
+ "Метод для соединения нескольких classNames": "",
844
+ "Метод для удаления css-класса у элемента": "",
845
+ "Метод, который вызывается после запроса": "",
846
+ "Вызов метода delete": "",
847
+ "Вызов метода get": "",
848
+ "Получение токена": "",
849
+ "Получение конфига для axios": "",
850
+ "Получение экземпляра axios": "",
851
+ "Получение url по методу": "",
852
+ "Метод, который можно вызвать при login": "",
853
+ "Метод, который можно вызвать при logout": "",
854
+ "Вызов метода post": "",
855
+ "Удаление токена": "",
856
+ "Сбросить конфиг": "",
857
+ "Вызов http-метода": "",
858
+ "Изменение токена": "",
859
+ "Изменение csrf токена": "",
860
+ "Получить модель": "",
861
+ "Получить тип": "",
862
+ "Форматирование модели модели": "",
863
+ "Форматирование названия модели": "",
864
+ "Изменить модель": "",
865
+ "Изменить тип": "",
866
+ "Закрытие websocket соединения": "",
867
+ "Открытие websocket соединения": "",
868
+ "Подписка на streams": "",
869
+ "Подписка на stream": "",
870
+ "Отписка от streams": "",
871
+ "Отписка от stream": "",
872
+ "Отменить прослушивание метрик": "",
873
+ "Отписаться от метрик": "",
874
+ "Провайдеры": "",
875
+ "Редьюсеры": "",
876
+ "Хранилище": "",
877
+ "Вариация HttpComponent с функционалом обновления токена авторизации": "",
878
+ "Компонент для локализации приложения. Поддерживает конфигурацию языка и временной зоны": "",
879
+ "Компонент для добавления метрик в приложение (например яндекс метрики)": "",
880
+ "Поменять счетчики": "",
881
+ "Инициализация компонента": "",
882
+ "Старт": "",
883
+ "Добавление редьюсеров": "",
884
+ "Конфигурация": "",
885
+ "Метод для dispatch": "",
886
+ "Метод, который вызывается при ошибке": "",
887
+ "Получение состояние": "",
888
+ "Инициализация": "",
889
+ "Инициализация хранилища": "",
890
+ "Подписка": "",
891
+ "Компонент для создания websocket взаимодействия": "",
892
+ "Получить значение из хранилища.": "",
893
+ "Удалить значение из хранилища.": "",
894
+ "Установить значение в хранилище.": "",
895
+ "Включает обработку вложенных данных из items вида [{id: 1, name: 'John', items: [...]}]": "",
896
+ "\nКомпонент `FileField` представляет собой поле формы для загрузки файлов.\nОн использует хук `useFile` для управления состоянием файлов и выполнения операций с файлами, таких как выбор и удаление.\nКомпонент поддерживает различные варианты отображения файлов (список или стена) с помощью перечисления `FilesLayout`.\nНа backendUrl по дефолту файл отправляется в теле запроса в виде бинарного кода.\nЧтобы отправлять файл в виде form-data (например в таком виде принимает файл FileModule в библиотеке steroidsjs/nest),\nнужно передать в `FileField` пропс uploaderConfig, в котором нужно указать поле useFormData: true.\n": "",
897
+ "Массив исполнителей, которых можно назначить для выполнения задачи": "",
898
+ "Общий контекст обертка из библиотеки react-beautiful-dnd": "",
899
+ "Компонент обертка для регистрации элемента который можно переместить из библиотеки react-beautiful-dnd": "",
900
+ "Компонент обертка для инициализации области куда можно переместить элемент из библиотеки react-beautiful-dnd": "",
901
+ "Идентификатор последней созданной задачи, нужен для определения последовательности id для новых задач": "",
902
+ "Обработчик события создания карточки": "",
903
+ "Обработчик события окончания перетаскивания карточки или колонки\nВ result передается объект с информацией о событии": "",
904
+ "Обработчик события редактирования карточки": "",
905
+ "Массив тегов для задач": ""
906
+ }
@@ -1,6 +1,11 @@
1
1
  /// <reference types="react" />
2
+ import { IHttpComponentConfig } from '../components/HttpComponent';
3
+ import { IWebSocketComponentConfig } from '../components/WebSocketComponent';
4
+ import { ILocaleComponentConfig } from '../components/LocaleComponent';
5
+ import { IJwtHttpComponentConfig } from '../components/JwtHttpComponent';
6
+ import { IResourceComponentConfig } from '../components/ResourceComponent';
2
7
  import { IThemeProviderProps } from '../providers/ThemeProvider';
3
- import ClientStorageComponent from '../components/ClientStorageComponent';
8
+ import ClientStorageComponent, { IClientStorageComponentConfig } from '../components/ClientStorageComponent';
4
9
  import HtmlComponent from '../components/HtmlComponent';
5
10
  import StoreComponent from '../components/StoreComponent';
6
11
  import UiComponent from '../components/UiComponent';
@@ -10,6 +15,10 @@ import { IRouteItem, IRouterProps } from '../ui/nav/Router/Router';
10
15
  import MetricsComponent from '../components/MetricsComponent';
11
16
  import { IScreenProviderProps } from '../providers/ScreenProvider';
12
17
  import { IFetchConfig } from '../hooks/useFetch';
18
+ export interface IComponentConfig {
19
+ className?: Record<string, any>;
20
+ [key: string]: any;
21
+ }
13
22
  /**
14
23
  * Application HOC
15
24
  * Обертка над корневым компонентом приложения, используется только в `Application.tsx`. Добавляет через React Context
@@ -17,11 +26,18 @@ import { IFetchConfig } from '../hooks/useFetch';
17
26
  */
18
27
  export interface IApplicationHookConfig {
19
28
  components?: {
20
- [key: string]: {
21
- className: any;
22
- [key: string]: any;
23
- } | any;
24
- } | any;
29
+ clientStorage?: IClientStorageComponentConfig & IComponentConfig;
30
+ html?: IComponentConfig;
31
+ http?: IHttpComponentConfig & IJwtHttpComponentConfig & IComponentConfig;
32
+ locale?: ILocaleComponentConfig & IComponentConfig;
33
+ store?: IComponentConfig;
34
+ ui?: IComponentConfig;
35
+ resource?: IResourceComponentConfig & IComponentConfig;
36
+ ws?: IWebSocketComponentConfig & IComponentConfig;
37
+ pushNotification?: IComponentConfig;
38
+ meta?: IComponentConfig;
39
+ [key: string]: IComponentConfig;
40
+ };
25
41
  onInit?: (components: IComponents) => void;
26
42
  useGlobal?: boolean;
27
43
  reducers?: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.0-beta.93",
3
+ "version": "3.0.0-beta.95",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -1,5 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { PropsWithChildren } from 'react';
3
+ import { IHttpComponent } from '../components/HttpComponent';
4
+ import { IHtmlComponent } from '../components/HtmlComponent';
5
+ import { IWebSocketComponent } from '../components/WebSocketComponent';
6
+ import { IMetaComponent } from '../components/MetaComponent';
7
+ import { IStoreComponent } from '../components/StoreComponent';
3
8
  import { IClientStorageComponent } from '../components/ClientStorageComponent';
4
9
  import { ILocaleComponent } from '../components/LocaleComponent';
5
10
  import { IUiApplicationComponent } from '../components/UiComponent';
@@ -11,15 +16,15 @@ declare global {
11
16
  }
12
17
  export interface IComponents {
13
18
  clientStorage?: IClientStorageComponent;
14
- html?: any;
15
- http?: any;
19
+ html?: IHtmlComponent;
20
+ http?: IHttpComponent;
16
21
  locale?: ILocaleComponent;
17
- store?: any;
22
+ store?: IStoreComponent;
18
23
  ui?: IUiApplicationComponent;
19
24
  resource?: IResourceComponent;
20
- ws?: any;
25
+ ws?: IWebSocketComponent;
21
26
  pushNotification?: any;
22
- meta?: any;
27
+ meta?: IMetaComponent;
23
28
  [key: string]: any;
24
29
  }
25
30
  export interface IComponentsProviderProps extends PropsWithChildren<any> {
@@ -1,6 +1,10 @@
1
1
  import React from 'react';
2
2
  import { IModalProps } from '../../../ui/modal/Modal/Modal';
3
3
  import CalendarEnum from './enums/CalendarType';
4
+ export type CalendarSystemModalFields = 'title' | 'eventGroupId' | 'date' | 'description';
5
+ export interface IEventInitialValues extends IEvent {
6
+ eventGroupId: string;
7
+ }
4
8
  export interface IDay {
5
9
  dayNumber: number;
6
10
  date: Date;
@@ -14,21 +18,23 @@ export interface IPresentDateInfo {
14
18
  dateToDisplay: string;
15
19
  }
16
20
  export interface IEvent {
21
+ id: number;
17
22
  date: Date;
18
23
  title: string;
19
24
  color?: string;
25
+ description?: string;
20
26
  [key: string]: any;
21
27
  }
22
28
  export interface IEventGroup {
23
29
  id: number;
24
30
  label: string;
25
31
  color?: string;
26
- events: IEvent[];
32
+ events: Omit<IEvent, 'color'>[];
27
33
  }
28
34
  export interface ICalendarSystemProps extends IUiComponent {
29
35
  onCreateEvent?: () => void;
30
36
  onChangeCalendarType?: (newType: string) => void;
31
- createEventModalProps?: IModalProps;
37
+ calendarModalProps?: IModalProps;
32
38
  eventBlock: {
33
39
  title: string;
34
40
  eventGroups: IEventGroup[];
@@ -47,10 +53,16 @@ export interface ICalendarSystemViewProps extends Omit<ICalendarSystemProps, 'ca
47
53
  onChangeCalendarType: (newType: string) => void;
48
54
  onMonthChange: (newDate: Date) => void;
49
55
  applyControl: (event: React.MouseEvent<HTMLElement>) => void;
50
- onClickCreate: VoidFunction;
56
+ openCreateModal: VoidFunction;
57
+ openEditModal: (event: IEvent) => void;
51
58
  getEventsFromDate: (dateFromDay: Date, isMonth: boolean) => IEvent[];
52
59
  onChangeEventGroupsIds: (selectedIds: number[]) => void;
53
60
  weekDays: string[];
54
61
  }
55
- export type ICalendarSystemModalViewProps = IModalProps;
62
+ export interface ICalendarSystemModalViewProps extends IModalProps {
63
+ eventGroups: IEventGroup[];
64
+ onEventSubmit: (fields: Record<CalendarSystemModalFields, string>, eventInitialValues?: IEventInitialValues) => void;
65
+ isCreate: boolean;
66
+ eventInitialValues?: any;
67
+ }
56
68
  export default function CalendarSystem(props: ICalendarSystemProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
@@ -14,6 +14,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
16
  exports.__esModule = true;
17
+ /* eslint-disable no-return-assign */
17
18
  /* eslint-disable default-case */
18
19
  /* eslint-disable no-unused-expressions */
19
20
  /* eslint-disable no-plusplus */
@@ -23,25 +24,24 @@ var concat_1 = __importDefault(require("lodash-es/concat"));
23
24
  var slice_1 = __importDefault(require("lodash-es/slice"));
24
25
  var localeData_1 = __importDefault(require("dayjs/plugin/localeData"));
25
26
  var upperFirst_1 = __importDefault(require("lodash-es/upperFirst"));
26
- var modal_1 = require("../../../actions/modal");
27
27
  var useCalendarControls_1 = __importDefault(require("./hooks/useCalendarControls"));
28
28
  var useDisplayDate_1 = __importDefault(require("./hooks/useDisplayDate"));
29
29
  var useMonthCalendar_1 = __importDefault(require("./hooks/useMonthCalendar"));
30
30
  var hooks_1 = require("../../../hooks");
31
31
  var addEventIfMatchDate_1 = require("./helpers/addEventIfMatchDate");
32
32
  var CalendarType_1 = __importDefault(require("./enums/CalendarType"));
33
+ var useCalendarSystemModals_1 = __importDefault(require("./hooks/useCalendarSystemModals"));
33
34
  dayjs_1["default"].extend(localeData_1["default"]);
34
35
  function CalendarSystem(props) {
35
- var _a;
36
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;
37
+ var _a = react_1["default"].useState(props.eventBlock.eventGroups || []), innerEventGroups = _a[0], setInnerEventGroups = _a[1];
38
+ var _b = react_1["default"].useState([]), selectedEventGroupsIds = _b[0], setSelectedEventGroupsIds = _b[1];
39
+ var _c = (0, useDisplayDate_1["default"])(), dateToDisplay = _c.dateToDisplay, setNewDateToDisplay = _c.setNewDateToDisplay;
40
+ var _d = react_1["default"].useState(CalendarType_1["default"].MONTH), calendarType = _d[0], setCalendarType = _d[1];
41
+ var _e = (0, useMonthCalendar_1["default"])(), monthCalendarDays = _e.calendarArray, setCurrentMonthDate = _e.setCurrentMonthDate, currentMonthDate = _e.currentMonthDate;
42
+ var _f = (0, hooks_1.useWeekCalendar)(currentMonthDate), currentWeekDays = _f.currentWeek, weekControls = _f.weekControls, forceUpdateWeekOnMonthChange = _f.forceUpdateWeekOnMonthChange;
44
43
  var applyControl = (0, useCalendarControls_1["default"])(calendarType, weekControls);
44
+ var _g = (0, useCalendarSystemModals_1["default"])(props.calendarModalProps, innerEventGroups, setInnerEventGroups), openCreateModal = _g.openCreateModal, openEditModal = _g.openEditModal;
45
45
  var onChangeCalendarType = react_1["default"].useCallback(function (newType) {
46
46
  setCalendarType(newType);
47
47
  if (props.onChangeCalendarType) {
@@ -96,11 +96,6 @@ function CalendarSystem(props) {
96
96
  }
97
97
  return hoursArray;
98
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 }));
99
+ return components.ui.renderView(props.view || 'content.CalendarSystemView', __assign(__assign({}, props), { dateToDisplay: dateToDisplay, monthCalendarDays: monthCalendarDays, calendarType: calendarType, currentWeekDays: currentWeekDays, eventGroups: innerEventGroups, eventGroupsTitle: props.eventBlock.title, allHours: allHours, selectedEventGroupsIds: selectedEventGroupsIds, onChangeCalendarType: onChangeCalendarType, onMonthChange: onMonthChange, applyControl: applyControl, openCreateModal: openCreateModal, getEventsFromDate: getEventsFromDate, onChangeEventGroupsIds: function (newSelectedEventGroupsIds) { return setSelectedEventGroupsIds(newSelectedEventGroupsIds); }, openEditModal: openEditModal, weekDays: weekDays }));
105
100
  }
106
101
  exports["default"] = CalendarSystem;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { IModalProps } from '../../../modal/Modal/Modal';
3
+ import { ICalendarSystemModalViewProps, IEvent, IEventGroup } from '../CalendarSystem';
4
+ declare const useCalendarSystemModals: (calendarModalProps: IModalProps, innerEventGroups: IEventGroup[], setInnerEventGroups: React.Dispatch<React.SetStateAction<IEventGroup[]>>) => {
5
+ openCreateModal: () => void;
6
+ openEditModal: (event: IEvent) => void;
7
+ getEventFromGroup: (event: IEvent) => IEventGroup;
8
+ getModalProps: (isCreate: boolean, eventInitialValues?: IEvent & {
9
+ eventGroupId: number;
10
+ }) => ICalendarSystemModalViewProps;
11
+ };
12
+ export default useCalendarSystemModals;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ exports.__esModule = true;
26
+ var react_1 = __importDefault(require("react"));
27
+ var react_redux_1 = require("react-redux");
28
+ var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
29
+ var maxBy_1 = __importDefault(require("lodash-es/maxBy"));
30
+ var modal_1 = require("../../../../actions/modal");
31
+ var useComponents_1 = __importDefault(require("../../../../hooks/useComponents"));
32
+ var utils_1 = require("../utils/utils");
33
+ var DEFAULT_ID = 0;
34
+ var useCalendarSystemModals = function (calendarModalProps, innerEventGroups, setInnerEventGroups) {
35
+ var dispatch = (0, react_redux_1.useDispatch)();
36
+ var components = (0, useComponents_1["default"])();
37
+ var calendarModalView = (calendarModalProps === null || calendarModalProps === void 0 ? void 0 : calendarModalProps.component) || components.ui.getView('content.CalendarSystemModalView');
38
+ var onEventSubmit = react_1["default"].useCallback(function (fields, eventInitialValues) {
39
+ var _a;
40
+ var eventGroupId = fields.eventGroupId, date = fields.date, title = fields.title, description = fields.description;
41
+ var currentEventGroups = __spreadArray([], innerEventGroups, true);
42
+ if (eventInitialValues) {
43
+ // Удаляем событие из предыдущей группы
44
+ var previousGroupIndex = currentEventGroups.findIndex(function (group) { return group.id === Number(eventInitialValues.eventGroupId); });
45
+ var previousGroup = __assign({}, currentEventGroups[previousGroupIndex]);
46
+ previousGroup.events = previousGroup.events.filter(function (event) { return event.id !== eventInitialValues.id; });
47
+ currentEventGroups = __spreadArray(__spreadArray(__spreadArray([], currentEventGroups.slice(0, previousGroupIndex), true), [
48
+ previousGroup
49
+ ], false), currentEventGroups.slice(previousGroupIndex + 1), true);
50
+ }
51
+ var changeableEventGroupIndex = currentEventGroups.findIndex(function (group) { return group.id === eventGroupId; });
52
+ var changeableEventGroup = __assign({}, currentEventGroups[changeableEventGroupIndex]);
53
+ var updatedEvent = {
54
+ id: (((_a = (0, maxBy_1["default"])(changeableEventGroup.events, function (event) { return event.id; })) === null || _a === void 0 ? void 0 : _a.id) || DEFAULT_ID) + 1,
55
+ date: new Date(date),
56
+ title: title,
57
+ description: description
58
+ };
59
+ changeableEventGroup.events.push(updatedEvent);
60
+ changeableEventGroup.events = (0, utils_1.sortEventsInGroup)(changeableEventGroup);
61
+ currentEventGroups = __spreadArray(__spreadArray(__spreadArray([], currentEventGroups.slice(0, changeableEventGroupIndex), true), [
62
+ changeableEventGroup
63
+ ], false), currentEventGroups.slice(changeableEventGroupIndex + 1), true);
64
+ setInnerEventGroups(currentEventGroups);
65
+ }, [innerEventGroups, setInnerEventGroups]);
66
+ var getModalProps = react_1["default"].useCallback(function (isCreate, eventInitialValues) { return (__assign(__assign({}, calendarModalProps), { component: calendarModalView, eventGroups: innerEventGroups, onEventSubmit: onEventSubmit, isCreate: isCreate, eventInitialValues: eventInitialValues })); }, [calendarModalProps, calendarModalView, innerEventGroups, onEventSubmit]);
67
+ var getEventFromGroup = react_1["default"].useCallback(function (event) { return innerEventGroups
68
+ .find(function (group) { return group.events
69
+ .some(function (groupEvent) { return (0, isEqual_1["default"])((0, utils_1.getOmittedEvent)(groupEvent), (0, utils_1.getOmittedEvent)(event)); }); }); }, [innerEventGroups]);
70
+ var openCreateModal = react_1["default"].useCallback(function () {
71
+ dispatch((0, modal_1.openModal)(calendarModalView, getModalProps(true)));
72
+ }, [getModalProps, calendarModalView, dispatch]);
73
+ var openEditModal = react_1["default"].useCallback(function (event) {
74
+ var _a;
75
+ var eventGroupId = ((_a = getEventFromGroup(event)) === null || _a === void 0 ? void 0 : _a.id) || 0;
76
+ dispatch((0, modal_1.openModal)(calendarModalView, getModalProps(false, __assign(__assign({}, event), { eventGroupId: eventGroupId }))));
77
+ }, [getModalProps, calendarModalView, dispatch, getEventFromGroup]);
78
+ return {
79
+ openCreateModal: openCreateModal,
80
+ openEditModal: openEditModal,
81
+ getEventFromGroup: getEventFromGroup,
82
+ getModalProps: getModalProps
83
+ };
84
+ };
85
+ exports["default"] = useCalendarSystemModals;
@@ -1,3 +1,5 @@
1
- import { IDay } from '../CalendarSystem';
1
+ import { IDay, IEvent, IEventGroup } from '../CalendarSystem';
2
2
  export declare const getWeekDaysFromDate: (date: Date) => IDay[];
3
3
  export declare const isDateIsToday: (date: Date) => boolean;
4
+ export declare const getOmittedEvent: (event: IEvent | Omit<IEvent, 'color'>) => any;
5
+ export declare const sortEventsInGroup: (group: IEventGroup) => Omit<IEvent, "color">[];
@@ -3,9 +3,10 @@ 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.isDateIsToday = exports.getWeekDaysFromDate = void 0;
6
+ exports.sortEventsInGroup = exports.getOmittedEvent = exports.isDateIsToday = exports.getWeekDaysFromDate = void 0;
7
7
  /* eslint-disable no-plusplus */
8
8
  var dayjs_1 = __importDefault(require("dayjs"));
9
+ var omit_1 = __importDefault(require("lodash-es/omit"));
9
10
  var SIX_DAYS_DIFF = 6;
10
11
  var MAX_DAYS_DIFF_IN_WEEK = 7;
11
12
  var getWeekDaysFromDate = function (date) {
@@ -27,3 +28,7 @@ var getWeekDaysFromDate = function (date) {
27
28
  exports.getWeekDaysFromDate = getWeekDaysFromDate;
28
29
  var isDateIsToday = function (date) { return (0, dayjs_1["default"])(date).isToday(); };
29
30
  exports.isDateIsToday = isDateIsToday;
31
+ var getOmittedEvent = function (event) { return (0, omit_1["default"])(event, ['color', 'eventGroupId']); };
32
+ exports.getOmittedEvent = getOmittedEvent;
33
+ var sortEventsInGroup = function (group) { return group.events.sort(function (eventA, eventB) { return eventA.date.getTime() - eventB.date.getTime(); }); };
34
+ exports.sortEventsInGroup = sortEventsInGroup;
@@ -50,7 +50,8 @@ function Field(props) {
50
50
  var fieldModel = (0, react_1.useMemo)(function () {
51
51
  var _a;
52
52
  var model = props.model || context.model;
53
- var result = (((_a = components.meta.getModel(model)) === null || _a === void 0 ? void 0 : _a.attributes) || [])
53
+ var modelAttributes = (((_a = components.meta.getModel(model)) === null || _a === void 0 ? void 0 : _a.attributes) || []);
54
+ var result = modelAttributes
54
55
  .find(function (field) { return field.attribute === props.attribute; });
55
56
  return result || {};
56
57
  }, [components, props.model, context.model, props.attribute]);