@steroidsjs/core 3.0.84 → 3.0.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/actions/list.js CHANGED
@@ -200,69 +200,67 @@ var listFetch = function (listId, query) {
200
200
  type: exports.LIST_BEFORE_FETCH
201
201
  });
202
202
  }
203
- toDispatch.push([
204
- Promise.resolve(onFetch(list, formValues, components, options))
205
- .then(function (data) {
206
- var _a;
207
- // Skip on empty
208
- if (!data) {
209
- return [];
210
- }
211
- // Check list is not destroy
212
- if (!getState().list.lists[listId]) {
213
- return [];
214
- }
215
- if ((0, isArray_1["default"])(data)) {
216
- data = {
217
- items: data,
218
- total: data.length,
219
- meta: null
220
- };
221
- }
222
- var items = data.items || [];
223
- var total = data.total || items.length || null;
224
- var page = formValues[list.pageAttribute];
225
- var pageSize = formValues[list.pageSizeAttribute];
226
- var totalPages = Math.ceil(((list === null || list === void 0 ? void 0 : list.total) || 0) / (pageSize || 1));
227
- var hasNextPage = (_a = data === null || data === void 0 ? void 0 : data.hasNextPage) !== null && _a !== void 0 ? _a : (page !== totalPages || null);
228
- return [
229
- (0, form_2.formSetErrors)(list.formId, data.errors || null),
230
- {
231
- items: items,
232
- total: total,
233
- hasNextPage: hasNextPage,
234
- meta: data.meta || null,
235
- page: page,
236
- pageSize: pageSize,
237
- listId: listId,
238
- defaultPageValue: list.defaultPageValue,
239
- type: exports.LIST_AFTER_FETCH
240
- },
241
- ];
242
- })["catch"](function (error) {
243
- // Если это отмена — просто игнорируем ошибку
244
- if (axios_1["default"].isCancel && axios_1["default"].isCancel(error)) {
245
- return [];
246
- }
247
- // Handle cancellation quietly
248
- // axios v0.x: axios.isCancel(error)
249
- var isAxiosCancel = typeof axios_1["default"].isCancel === 'function' && axios_1["default"].isCancel(error);
250
- if (isAxiosCancel) {
251
- // игнорируем, это отмена запроса
252
- return [];
253
- }
254
- // прочие ошибки — можно пробросить или обработать
255
- if (typeof list.onError === 'function') {
256
- list.onError(error);
257
- }
203
+ toDispatch.push(Promise.resolve(onFetch(list, formValues, components, options))
204
+ .then(function (data) {
205
+ var _a;
206
+ // Skip on empty
207
+ if (!data) {
258
208
  return [];
259
- })["finally"](function () {
260
- // убрать сохранённый источник если он тот же
261
- if (components.http._promises[listId] === source) {
262
- delete components.http._promises[listId];
263
- }
264
- }),
265
- ]);
209
+ }
210
+ // Check list is not destroy
211
+ if (!getState().list.lists[listId]) {
212
+ return [];
213
+ }
214
+ if ((0, isArray_1["default"])(data)) {
215
+ data = {
216
+ items: data,
217
+ total: data.length,
218
+ meta: null
219
+ };
220
+ }
221
+ var items = data.items || [];
222
+ var total = data.total || items.length || null;
223
+ var page = formValues[list.pageAttribute];
224
+ var pageSize = formValues[list.pageSizeAttribute];
225
+ var totalPages = Math.ceil(((list === null || list === void 0 ? void 0 : list.total) || 0) / (pageSize || 1));
226
+ var hasNextPage = (_a = data === null || data === void 0 ? void 0 : data.hasNextPage) !== null && _a !== void 0 ? _a : (page !== totalPages || null);
227
+ return [
228
+ (0, form_2.formSetErrors)(list.formId, data.errors || null),
229
+ {
230
+ items: items,
231
+ total: total,
232
+ hasNextPage: hasNextPage,
233
+ meta: data.meta || null,
234
+ page: page,
235
+ pageSize: pageSize,
236
+ listId: listId,
237
+ defaultPageValue: list.defaultPageValue,
238
+ type: exports.LIST_AFTER_FETCH
239
+ },
240
+ ];
241
+ })["catch"](function (error) {
242
+ // Если это отмена — просто игнорируем ошибку
243
+ if (axios_1["default"].isCancel && axios_1["default"].isCancel(error)) {
244
+ return [];
245
+ }
246
+ // Handle cancellation quietly
247
+ // axios v0.x: axios.isCancel(error)
248
+ var isAxiosCancel = typeof axios_1["default"].isCancel === 'function' && axios_1["default"].isCancel(error);
249
+ if (isAxiosCancel) {
250
+ // игнорируем, это отмена запроса
251
+ return [];
252
+ }
253
+ // прочие ошибки — можно пробросить или обработать
254
+ if (typeof list.onError === 'function') {
255
+ list.onError(error);
256
+ }
257
+ return [];
258
+ })["finally"](function () {
259
+ // убрать сохранённый источник если он тот же
260
+ if (components.http._promises[listId] === source) {
261
+ delete components.http._promises[listId];
262
+ }
263
+ }));
266
264
  return dispatch(toDispatch);
267
265
  };
268
266
  };
@@ -6984,7 +6984,7 @@
6984
6984
  {
6985
6985
  "name": "timeZone",
6986
6986
  "decorators": [],
6987
- "description": "Часовой пояс в формате IANA, для выделения текущего дня, если дата изменена в CalendarSystem.\nНе влияет на изменение даты в Calendar.",
6987
+ "description": "Часовой пояс в формате IANA",
6988
6988
  "required": false,
6989
6989
  "type": "string",
6990
6990
  "example": "'Europe/Moscow'",
@@ -7178,7 +7178,7 @@
7178
7178
  {
7179
7179
  "name": "timeZone",
7180
7180
  "decorators": [],
7181
- "description": "Часовой пояс в формате IANA, для выделения текущего дня, если дата изменена в CalendarSystem.\nНе влияет на изменение даты в Calendar.",
7181
+ "description": "Часовой пояс в формате IANA",
7182
7182
  "required": false,
7183
7183
  "type": "string",
7184
7184
  "example": "'Europe/Moscow'"
@@ -7194,7 +7194,7 @@
7194
7194
  {
7195
7195
  "name": "todayDate",
7196
7196
  "decorators": [],
7197
- "description": "Текущая дата в формате Date, используется для выделения текущего дня в календаре.\nНе влияет на изменение даты в Calendar.",
7197
+ "description": "Текущая дата в формате Date, используется для выделения текущего дня в календаре.",
7198
7198
  "required": true,
7199
7199
  "type": "Date",
7200
7200
  "example": null
@@ -7871,15 +7871,6 @@
7871
7871
  "example": "{width: '45%'}",
7872
7872
  "defaultValue": null
7873
7873
  },
7874
- {
7875
- "name": "timeZone",
7876
- "decorators": [],
7877
- "description": "Часовой пояс в формате IANA",
7878
- "required": false,
7879
- "type": "string",
7880
- "example": "'Europe/Moscow'",
7881
- "defaultValue": null
7882
- },
7883
7874
  {
7884
7875
  "name": "users",
7885
7876
  "decorators": [],
@@ -23379,6 +23370,15 @@
23379
23370
  "example": "true",
23380
23371
  "defaultValue": null
23381
23372
  },
23373
+ {
23374
+ "name": "validator",
23375
+ "decorators": [],
23376
+ "description": "Колбэк для использования сторонних валидаторов, например yup",
23377
+ "required": false,
23378
+ "type": "any",
23379
+ "example": null,
23380
+ "defaultValue": null
23381
+ },
23382
23382
  {
23383
23383
  "name": "validators",
23384
23384
  "decorators": [],
@@ -31675,10 +31675,10 @@
31675
31675
  {
31676
31676
  "name": "items",
31677
31677
  "decorators": [],
31678
- "description": "Перечисление элементов.\n1) Может быть строкой вида: `app.geo.enums.Cities`\n2) Массивом: ['{'id: 1, label: \"London\"'}']",
31678
+ "description": "Перечисление элементов",
31679
31679
  "required": false,
31680
31680
  "type": "string | {} | string | number | {id: string | number | boolean, label: string | Record | number}[]",
31681
- "example": null,
31681
+ "example": "// Строковый путь к перечислению\nconst enumPath = 'app.geo.enums.Cities';\n\n// Массив объектов\nconst items = [\n { id: 1, label: 'London' },\n { id: 2, label: 'Paris' }\n];",
31682
31682
  "defaultValue": null
31683
31683
  },
31684
31684
  {
@@ -31851,7 +31851,7 @@
31851
31851
  {
31852
31852
  "name": "currency",
31853
31853
  "decorators": [],
31854
- "description": "Валюта @enum '{eur, rub, usd}'",
31854
+ "description": "Валюта @enum {eur, rub, usd}",
31855
31855
  "required": false,
31856
31856
  "type": "string",
31857
31857
  "example": "rub",
@@ -36991,6 +36991,15 @@
36991
36991
  "example": "true",
36992
36992
  "defaultValue": null
36993
36993
  },
36994
+ {
36995
+ "name": "validator",
36996
+ "decorators": [],
36997
+ "description": "Колбэк для использования сторонних валидаторов, например yup",
36998
+ "required": false,
36999
+ "type": "any",
37000
+ "example": null,
37001
+ "defaultValue": null
37002
+ },
36994
37003
  {
36995
37004
  "name": "validators",
36996
37005
  "decorators": [],
package/en.json CHANGED
@@ -1003,14 +1003,13 @@
1003
1003
  "Сохранение в localStorage уровней вложенности.": "",
1004
1004
  "Изначально отображать все элементы раскрытыми": "",
1005
1005
  "Нужно ли отображать кнопку \"сегодня\" под календарем.": "",
1006
- "Часовой пояс в формате IANA, для выделения текущего дня, если дата изменена в CalendarSystem.\nНе влияет на изменение даты в Calendar.": "",
1007
- "Текущая дата в формате Date, используется для выделения текущего дня в календаре.\nНе влияет на изменение даты в Calendar.": "",
1006
+ "Часовой пояс в формате IANA": "",
1007
+ "Текущая дата в формате Date, используется для выделения текущего дня в календаре.": "",
1008
1008
  "Дополнительные свойства для списка календарей бокового календаря": "",
1009
1009
  "Дополнительные свойства для бокового календаря": "",
1010
1010
  "Данные для формы с текущими датами календаря": "",
1011
1011
  "Свойства для сетки дня": "",
1012
1012
  "Свойства для сетки месяца": "",
1013
- "Часовой пояс в формате IANA": "",
1014
1013
  "Свойства для сетки недели": "",
1015
1014
  "Конечная дата": "",
1016
1015
  "Начальная дата": "",
@@ -1039,11 +1038,14 @@
1039
1038
  "Текст, который отобразится при загрузке файла": "",
1040
1039
  "Параметры для кнопки отправки формы": "",
1041
1040
  "Очищать сообщение об ошибке при редактировании поля. По-умолчанию включено": "",
1041
+ "Колбэк для использования сторонних валидаторов, например yup": "",
1042
1042
  "Конструктор редактора 'ckeditor5-react' из библиотеки @steroidsjs/ckeditor5/packages/ckeditor5-build-classic\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан": "",
1043
1043
  "Компонент редактора 'ckeditor5-react' из библиотеки @ckeditor\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан": "",
1044
1044
  "Допустимое количество символов после разделителя": "",
1045
1045
  "Может ли число быть отрицательным": "",
1046
1046
  " Ограничение доступного времени.": "",
1047
+ "Перечисление элементов": "",
1048
+ "Валюта @enum {eur, rub, usd}": "",
1047
1049
  "Подключить бесконечный скролл": "",
1048
1050
  "Аттрибут (название) в форме для поля с флагом, определяющим есть ли следующая страница": "",
1049
1051
  "Аттрибут (название) в форме для поля с номером текущей страницы": "",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.84",
3
+ "version": "3.0.86",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -64,8 +64,7 @@ export interface ICalendarProps extends IUiComponent {
64
64
  */
65
65
  showTodayButton?: boolean;
66
66
  /**
67
- * Часовой пояс в формате IANA, для выделения текущего дня, если дата изменена в CalendarSystem.
68
- * Не влияет на изменение даты в Calendar.
67
+ * Часовой пояс в формате IANA
69
68
  * @example 'Europe/Moscow'
70
69
  */
71
70
  timeZone?: string;
@@ -105,7 +104,6 @@ export interface ICalendarViewProps extends ICalendarProps {
105
104
  toggleCaptionPanel: () => void;
106
105
  /**
107
106
  * Текущая дата в формате Date, используется для выделения текущего дня в календаре.
108
- * Не влияет на изменение даты в Calendar.
109
107
  */
110
108
  todayDate: Date;
111
109
  }
@@ -165,11 +165,6 @@ export interface ICalendarSystemProps extends IUiComponent {
165
165
  dateFromAttribute?: string;
166
166
  dateToAttribute?: string;
167
167
  };
168
- /**
169
- * Часовой пояс в формате IANA
170
- * @example 'Europe/Moscow'
171
- */
172
- timeZone?: string;
173
168
  [key: string]: any;
174
169
  }
175
170
  export interface ICalendarSystemViewProps extends Pick<ICalendarSystemProps, 'className' | 'style' | 'additionalViewProps' | 'users' | 'asideCalendarProps' | 'asideCalendarCheckboxListProps'> {
@@ -2,20 +2,14 @@ import React from 'react';
2
2
  import { ICalendarSystemProps, ICalendarUser, IEventGroup } from '../CalendarSystem';
3
3
  export declare const useCalendarSystem: (props: ICalendarSystemProps) => {
4
4
  monthGridWeekDays: any;
5
- monthGridCalendarDays: {
6
- date: Date;
7
- dayNumber: number;
8
- outOfRange?: boolean;
9
- isToday?: boolean;
10
- formattedDisplay?: string;
11
- }[];
5
+ monthGridCalendarDays: import("../CalendarSystem").IDay[];
12
6
  weekGridTwentyFourHoursArray: string[];
13
7
  weekGridCurrentWeekDays: {
14
- date: Date;
15
- formattedDisplay: any;
16
- isToday: boolean;
17
8
  dayNumber: number;
9
+ date: Date;
18
10
  outOfRange?: boolean;
11
+ isToday?: boolean;
12
+ formattedDisplay?: string;
19
13
  }[];
20
14
  dayGridTwentyFourHoursArray: string[];
21
15
  dayGridCurrentDay: import("../CalendarSystem").IDay;
@@ -61,21 +61,21 @@ var useCalendarSystem = function (props) {
61
61
  setUsers(props.users);
62
62
  }, [props.users]);
63
63
  //Главная дата, от которой происходят все вычисления
64
- var _f = react_1["default"].useState((0, utils_1.getFormattedDay)(null, props.timeZone)), generalCurrentDay = _f[0], setGeneralCurrentDay = _f[1];
64
+ var _f = react_1["default"].useState((0, utils_1.getFormattedDay)()), generalCurrentDay = _f[0], setGeneralCurrentDay = _f[1];
65
65
  var isGeneralCurrentDayNeedsUpdate = (0, react_1.useRef)(true);
66
66
  var updateGeneralCurrentDay = (0, react_1.useCallback)(function (newDate) {
67
67
  if (!isGeneralCurrentDayNeedsUpdate.current) {
68
68
  isGeneralCurrentDayNeedsUpdate.current = true;
69
69
  return;
70
70
  }
71
- setGeneralCurrentDay((0, utils_1.getFormattedDay)(newDate, props.timeZone));
72
- }, [isGeneralCurrentDayNeedsUpdate, props.timeZone]);
71
+ setGeneralCurrentDay((0, utils_1.getFormattedDay)(newDate));
72
+ }, [isGeneralCurrentDayNeedsUpdate]);
73
73
  var onCalendarChangedMonth = react_1["default"].useCallback(function (newDate) {
74
74
  updateGeneralCurrentDay(newDate);
75
75
  }, [updateGeneralCurrentDay]);
76
76
  var _g = (0, useDisplayDate_1["default"])(generalCurrentDay), dateToDisplay = _g.dateToDisplay, changeDisplayFormat = _g.changeDisplayFormat;
77
- var _h = (0, useMonthGrid_1["default"])(generalCurrentDay, props.timeZone), monthGridWeekDays = _h.monthGridWeekDays, monthGridCalendarDays = _h.monthGridCalendarDays;
78
- var _j = (0, useWeekGrid_1["default"])(generalCurrentDay, props.timeZone), weekGridTwentyFourHoursArray = _j.weekGridTwentyFourHoursArray, weekGridCurrentWeekDays = _j.weekGridCurrentWeekDays;
77
+ var _h = (0, useMonthGrid_1["default"])(generalCurrentDay), monthGridWeekDays = _h.monthGridWeekDays, monthGridCalendarDays = _h.monthGridCalendarDays;
78
+ var _j = (0, useWeekGrid_1["default"])(generalCurrentDay), weekGridTwentyFourHoursArray = _j.weekGridTwentyFourHoursArray, weekGridCurrentWeekDays = _j.weekGridCurrentWeekDays;
79
79
  var _k = (0, useDayGrid_1.useDayGrid)(generalCurrentDay), dayGridTwentyFourHoursArray = _k.dayGridTwentyFourHoursArray, dayGridCurrentDay = _k.dayGridCurrentDay;
80
80
  var _l = (0, useCalendarType_1.useCalendarType)(function (newType) {
81
81
  if (newType === CalendarType_1["default"].DAY) {
@@ -1,12 +1,6 @@
1
1
  import { IDay } from '../CalendarSystem';
2
- declare const useMonthGrid: (generalCurrentDay: IDay, timeZone?: string) => {
2
+ declare const useMonthGrid: (generalCurrentDay: IDay) => {
3
3
  monthGridWeekDays: any;
4
- monthGridCalendarDays: {
5
- date: Date;
6
- dayNumber: number;
7
- outOfRange?: boolean;
8
- isToday?: boolean;
9
- formattedDisplay?: string;
10
- }[];
4
+ monthGridCalendarDays: IDay[];
11
5
  };
12
6
  export default useMonthGrid;
@@ -18,7 +18,7 @@ var utils_1 = require("../utils/utils");
18
18
  var FIRST_DAY = 1;
19
19
  var ONE_MONTH = 1;
20
20
  var TOTAL_DAYS_IN_CALENDAR = 42;
21
- var useMonthGrid = function (generalCurrentDay, timeZone) {
21
+ var useMonthGrid = function (generalCurrentDay) {
22
22
  var currentMonthData = (0, react_1.useMemo)(function () {
23
23
  var _a, _b;
24
24
  var currentYear = (_a = generalCurrentDay.date) === null || _a === void 0 ? void 0 : _a.getFullYear();
@@ -70,12 +70,8 @@ var useMonthGrid = function (generalCurrentDay, timeZone) {
70
70
  outOfRange: currentDate.getMonth() > currentMonth
71
71
  });
72
72
  }
73
- return innerCalendarArray.map(function (day) {
74
- var zoned = (0, utils_1.getDateInTimeZone)(day.date, timeZone);
75
- return (0, utils_1.isTodayInTimeZone)(zoned, timeZone)
76
- ? __assign(__assign({}, day), { date: zoned, isToday: true }) : __assign(__assign({}, day), { date: zoned });
77
- });
78
- }, [generalCurrentDay.date, currentMonthData, timeZone]);
73
+ return innerCalendarArray.map(function (day) { return (0, utils_1.isDateIsToday)(day.date) ? (__assign(__assign({}, day), { isToday: true })) : day; });
74
+ }, [generalCurrentDay.date, currentMonthData]);
79
75
  return {
80
76
  monthGridWeekDays: (0, utils_1.getWeekDays)(),
81
77
  monthGridCalendarDays: calendarArray
@@ -1,12 +1,12 @@
1
1
  import { IDay } from '../CalendarSystem';
2
- declare const useWeekGrid: (generalCurrentDay: IDay, timeZone?: string) => {
2
+ declare const useWeekGrid: (generalCurrentDay: IDay) => {
3
3
  weekGridTwentyFourHoursArray: string[];
4
4
  weekGridCurrentWeekDays: {
5
- date: Date;
6
- formattedDisplay: any;
7
- isToday: boolean;
8
5
  dayNumber: number;
6
+ date: Date;
9
7
  outOfRange?: boolean;
8
+ isToday?: boolean;
9
+ formattedDisplay?: string;
10
10
  }[];
11
11
  };
12
12
  export default useWeekGrid;
@@ -2,11 +2,11 @@
2
2
  exports.__esModule = true;
3
3
  var react_1 = require("react");
4
4
  var utils_1 = require("../utils/utils");
5
- var useWeekGrid = function (generalCurrentDay, timeZone) {
5
+ var useWeekGrid = function (generalCurrentDay) {
6
6
  var currentWeek = (0, react_1.useMemo)(function () {
7
- var formattedWeek = (0, utils_1.getFormattedWeekFromDate)(generalCurrentDay.date, timeZone);
7
+ var formattedWeek = (0, utils_1.getFormattedWeekFromDate)(generalCurrentDay.date);
8
8
  return formattedWeek;
9
- }, [generalCurrentDay.date, timeZone]);
9
+ }, [generalCurrentDay.date]);
10
10
  return {
11
11
  weekGridTwentyFourHoursArray: (0, utils_1.getTwentyFourHoursArray)(),
12
12
  weekGridCurrentWeekDays: currentWeek
@@ -1,23 +1,17 @@
1
1
  import { CSSProperties } from 'react';
2
2
  import { IDay, IEvent, IEventGroup } from '../CalendarSystem';
3
- export declare const getDateInTimeZone: (date: Date, timeZone?: string) => Date;
4
- export declare const isTodayInTimeZone: (date: Date, timeZone?: string) => boolean;
5
- export declare const getWeekDaysFromDate: (date: Date, timeZone?: string) => IDay[];
3
+ export declare const getWeekDaysFromDate: (date: Date) => IDay[];
4
+ export declare const isDateIsToday: (date: Date) => boolean;
6
5
  export declare const getOmittedEvent: (event: IEvent | Omit<IEvent, 'color'>) => any;
7
6
  export declare const sortEventsInGroup: (group: IEventGroup) => Omit<IEvent, "color">[];
8
7
  export declare const getSourceCalendarControl: (control: string) => HTMLElement;
9
- export declare const getFormattedDay: (date?: Date, timeZone?: string) => {
8
+ export declare const getFormattedDay: (date?: Date) => IDay;
9
+ export declare const getFormattedWeekFromDate: (fromDate?: Date) => {
10
10
  dayNumber: number;
11
11
  date: Date;
12
- formattedDisplay: any;
13
- isToday: boolean;
14
- };
15
- export declare const getFormattedWeekFromDate: (fromDate?: Date, timeZone?: string) => {
16
- date: Date;
17
- formattedDisplay: any;
18
- isToday: boolean;
19
- dayNumber: number;
20
12
  outOfRange?: boolean;
13
+ isToday?: boolean;
14
+ formattedDisplay?: string;
21
15
  }[];
22
16
  export declare const getTwentyFourHoursArray: () => string[];
23
17
  export declare const getWeekDays: () => any;
@@ -14,57 +14,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
16
  exports.__esModule = true;
17
- exports.formatEventTime = exports.getTopMarginFromEvent = exports.getProportionFromEvent = exports.getWeekDays = exports.getTwentyFourHoursArray = exports.getFormattedWeekFromDate = exports.getFormattedDay = exports.getSourceCalendarControl = exports.sortEventsInGroup = exports.getOmittedEvent = exports.getWeekDaysFromDate = exports.isTodayInTimeZone = exports.getDateInTimeZone = void 0;
17
+ exports.formatEventTime = exports.getTopMarginFromEvent = exports.getProportionFromEvent = exports.getWeekDays = exports.getTwentyFourHoursArray = exports.getFormattedWeekFromDate = exports.getFormattedDay = exports.getSourceCalendarControl = exports.sortEventsInGroup = exports.getOmittedEvent = exports.isDateIsToday = exports.getWeekDaysFromDate = void 0;
18
18
  /* eslint-disable no-plusplus */
19
19
  var dayjs_1 = __importDefault(require("dayjs"));
20
- var utc_1 = __importDefault(require("dayjs/plugin/utc"));
21
- var timezone_1 = __importDefault(require("dayjs/plugin/timezone"));
22
20
  var omit_1 = __importDefault(require("lodash-es/omit"));
23
21
  var concat_1 = __importDefault(require("lodash-es/concat"));
24
22
  var slice_1 = __importDefault(require("lodash-es/slice"));
25
23
  var upperFirst_1 = __importDefault(require("lodash-es/upperFirst"));
26
24
  var ceil_1 = __importDefault(require("lodash-es/ceil"));
27
25
  var calendar_1 = require("../../../../utils/calendar");
28
- dayjs_1["default"].extend(utc_1["default"]);
29
- dayjs_1["default"].extend(timezone_1["default"]);
26
+ var SIX_DAYS_DIFF = 6;
27
+ var MAX_DAYS_DIFF_IN_WEEK = 7;
30
28
  var WEEK_DAY_FORMAT = 'dd, D MMM';
31
- // Возвращает дату, смещённую относительно указанного часового пояса.
32
- var getDateInTimeZone = function (date, timeZone) {
33
- if (!timeZone) {
34
- return date;
35
- }
36
- var zoned = dayjs_1["default"].utc(date).tz(timeZone, true); // true => сохраняет локальное время
37
- return zoned.toDate();
38
- };
39
- exports.getDateInTimeZone = getDateInTimeZone;
40
- // Проверяет, является ли данная дата сегодняшним днём в указанном часовом поясе.
41
- var isTodayInTimeZone = function (date, timeZone) {
42
- if (!timeZone) {
43
- return (0, dayjs_1["default"])(date).isToday();
44
- }
45
- var now = (0, dayjs_1["default"])().tz(timeZone);
46
- var target = dayjs_1["default"].utc(date).tz(timeZone);
47
- return now.isSame(target, 'day');
48
- };
49
- exports.isTodayInTimeZone = isTodayInTimeZone;
50
- var getWeekDaysFromDate = function (date, timeZone) {
29
+ var getWeekDaysFromDate = function (date) {
51
30
  var weekDays = [];
52
31
  var firstDayOfWeek = new Date(date);
53
32
  var currentDay = date.getDay();
54
- var diff = currentDay === 0 ? 6 : currentDay - 1;
55
- firstDayOfWeek.setDate(firstDayOfWeek.getDate() - diff);
56
- for (var i = 0; i < 7; i++) {
33
+ var diff = currentDay === 0 ? SIX_DAYS_DIFF : currentDay - 1; // Разница между текущим днем и понедельником
34
+ firstDayOfWeek.setDate(firstDayOfWeek.getDate() - diff); // Устанавливаем первый день недели (понедельник)
35
+ for (var i = 0; i < MAX_DAYS_DIFF_IN_WEEK; i++) {
57
36
  var currentDate = new Date(firstDayOfWeek);
58
- currentDate.setDate(firstDayOfWeek.getDate() + i);
59
- var zonedDate = (0, exports.getDateInTimeZone)(currentDate, timeZone);
37
+ currentDate.setDate(currentDate.getDate() + i);
60
38
  weekDays.push({
61
- dayNumber: zonedDate.getDate(),
62
- date: zonedDate
39
+ dayNumber: currentDate.getDate(),
40
+ date: new Date(currentDate)
63
41
  });
64
42
  }
65
43
  return weekDays;
66
44
  };
67
45
  exports.getWeekDaysFromDate = getWeekDaysFromDate;
46
+ var isDateIsToday = function (date) { return (0, dayjs_1["default"])(date).isToday(); };
47
+ exports.isDateIsToday = isDateIsToday;
68
48
  var getOmittedEvent = function (event) { return (0, omit_1["default"])(event, ['color', 'eventGroupId']); };
69
49
  exports.getOmittedEvent = getOmittedEvent;
70
50
  var sortEventsInGroup = function (group) { return group.events
@@ -76,29 +56,26 @@ var sortEventsInGroup = function (group) { return group.events
76
56
  exports.sortEventsInGroup = sortEventsInGroup;
77
57
  var getSourceCalendarControl = function (control) { return document.querySelector("[data-icon=\"control-".concat(control, "\"]")); };
78
58
  exports.getSourceCalendarControl = getSourceCalendarControl;
79
- var getFormattedDay = function (date, timeZone) {
59
+ var getFormattedDay = function (date) {
80
60
  if (date === void 0) { date = null; }
81
- var base = date ? (0, dayjs_1["default"])(date) : (0, dayjs_1["default"])();
82
- // Сбрасываем время до начала дня в часовом поясе
83
- var zoned = timeZone
84
- ? base.tz(timeZone).startOf('day')
85
- : base.startOf('day');
86
- var dayNumber = zoned.date();
87
- var formattedDisplay = (0, calendar_1.convertDate)(zoned.toDate(), null, WEEK_DAY_FORMAT);
61
+ var dateToFormat = date || new Date();
88
62
  return {
89
- dayNumber: dayNumber,
90
- date: zoned.toDate(),
91
- formattedDisplay: formattedDisplay,
92
- isToday: true
63
+ dayNumber: dateToFormat.getDate(),
64
+ date: new Date(dateToFormat),
65
+ formattedDisplay: (0, calendar_1.convertDate)(dateToFormat, null, WEEK_DAY_FORMAT),
66
+ isToday: (0, exports.isDateIsToday)(dateToFormat)
93
67
  };
94
68
  };
95
69
  exports.getFormattedDay = getFormattedDay;
96
- var getFormattedWeekFromDate = function (fromDate, timeZone) {
70
+ //TODO использовать существующие функции а не дублировать функционал
71
+ var getFormattedWeekFromDate = function (fromDate) {
97
72
  if (fromDate === void 0) { fromDate = null; }
98
73
  var currentWeek = (0, exports.getWeekDaysFromDate)(fromDate || new Date());
99
74
  return currentWeek.map(function (dayOfWeek) {
100
- var zonedDate = dayOfWeek.date;
101
- return __assign(__assign({}, dayOfWeek), { date: zonedDate, formattedDisplay: (0, calendar_1.convertDate)(zonedDate, null, WEEK_DAY_FORMAT), isToday: (0, exports.isTodayInTimeZone)(zonedDate, timeZone) });
75
+ var copyOfDayWeek = __assign({}, dayOfWeek);
76
+ copyOfDayWeek.formattedDisplay = (0, calendar_1.convertDate)(dayOfWeek.date, null, WEEK_DAY_FORMAT);
77
+ copyOfDayWeek.isToday = (0, exports.isDateIsToday)(copyOfDayWeek.date);
78
+ return copyOfDayWeek;
102
79
  });
103
80
  };
104
81
  exports.getFormattedWeekFromDate = getFormattedWeekFromDate;
@@ -45,7 +45,7 @@ var enums_1 = require("../../../enums");
45
45
  function EmailField(props) {
46
46
  var components = (0, hooks_1.useComponents)();
47
47
  var _a = (0, hooks_1.useSaveCursorPosition)(props.input), currentInputRef = _a.inputRef, onChange = _a.onChange;
48
- var onInputChange = (0, useInputTypeEmail_1["default"])(currentInputRef, onChange, props.input.value).onInputChange;
48
+ var onInputChange = (0, useInputTypeEmail_1["default"])(currentInputRef, onChange, props.input.value, props.required).onInputChange;
49
49
  var onClear = react_1["default"].useCallback(function () { return props.input.onChange(''); }, [props.input]);
50
50
  var inputProps = react_1["default"].useMemo(function () {
51
51
  var _a;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- declare const useInputTypeEmail: (currentInputRef: React.MutableRefObject<HTMLInputElement>, onChange: (event: React.ChangeEvent<HTMLInputElement>, value?: any) => void, currentValue: string | null | undefined) => {
2
+ declare const useInputTypeEmail: (currentInputRef: React.MutableRefObject<HTMLInputElement>, onChange: (event: React.ChangeEvent<HTMLInputElement>, value?: any) => void, currentValue: string | null | undefined, required: boolean) => {
3
3
  onInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
4
4
  };
5
5
  export default useInputTypeEmail;
@@ -7,11 +7,10 @@ exports.__esModule = true;
7
7
  /* eslint-disable no-unused-expressions */
8
8
  var react_1 = __importDefault(require("react"));
9
9
  var DEFAULT_VALIDITY = __('Неправильный формат адреса электронной почты.');
10
- var useInputTypeEmail = function (currentInputRef, onChange, currentValue) {
10
+ var useInputTypeEmail = function (currentInputRef, onChange, currentValue, required) {
11
11
  var isValueEmail = function (value) {
12
- //In that case it's testing if value is empty string or not defined
13
12
  if (!value) {
14
- return false;
13
+ return !required;
15
14
  }
16
15
  var emailRegexp = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
17
16
  return emailRegexp.test(value.toLowerCase());
@@ -62,6 +62,10 @@ export interface IFormProps extends IUiComponent {
62
62
  * ]
63
63
  */
64
64
  validators?: string[] | Array<string[]> | Array<Record<string, any>>;
65
+ /**
66
+ * Колбэк для использования сторонних валидаторов, например yup
67
+ */
68
+ validator?: any;
65
69
  /**
66
70
  * Обработчик события перед отправкой формы
67
71
  * @param args
@@ -89,7 +89,6 @@ var useAddressBar_1 = __importDefault(require("../../../hooks/useAddressBar"));
89
89
  var AutoSaveHelper_1 = __importDefault(require("./AutoSaveHelper"));
90
90
  var hooks_1 = require("../../../hooks");
91
91
  var form_1 = require("../../../utils/form");
92
- var validate_1 = __importDefault(require("../validate"));
93
92
  var form_2 = require("../../../actions/form");
94
93
  var enums_1 = require("../../../enums");
95
94
  var _isEmptyString = function (value) { return (0, isString_1["default"])(value) && (0, isEmpty_1["default"])(value); };
@@ -224,8 +223,9 @@ function Form(props) {
224
223
  dispatch((0, form_2.formSetSubmitting)(props.formId, false));
225
224
  return [2 /*return*/, null];
226
225
  }
227
- if (props.validators) {
228
- (0, validate_1["default"])(cleanedValues, props.validators);
226
+ if (props.validator && props.validator.call(null, cleanedValues) === false) {
227
+ dispatch((0, form_2.formSetSubmitting)(props.formId, false));
228
+ return [2 /*return*/, null];
229
229
  }
230
230
  if (!props.onSubmit) return [3 /*break*/, 2];
231
231
  return [4 /*yield*/, props.onSubmit.call(null, cleanedValues)];
@@ -8,9 +8,16 @@ import { DataProviderItems } from '../../../hooks/useDataProvider';
8
8
  **/
9
9
  export interface IEnumFormatterProps {
10
10
  /**
11
- * Перечисление элементов.
12
- * 1) Может быть строкой вида: `app.geo.enums.Cities`
13
- * 2) Массивом: ['{'id: 1, label: "London"'}']
11
+ * Перечисление элементов
12
+ * @example
13
+ * // Строковый путь к перечислению
14
+ * const enumPath = 'app.geo.enums.Cities';
15
+ *
16
+ * // Массив объектов
17
+ * const items = [
18
+ * { id: 1, label: 'London' },
19
+ * { id: 2, label: 'Paris' }
20
+ * ];
14
21
  */
15
22
  items?: DataProviderItems;
16
23
  /**
@@ -7,7 +7,7 @@
7
7
  **/
8
8
  export interface IMoneyFormatterProps {
9
9
  /**
10
- * Валюта @enum '{eur, rub, usd}'
10
+ * Валюта @enum {eur, rub, usd}
11
11
  * @example rub
12
12
  */
13
13
  currency?: string;
@@ -22,8 +22,8 @@ export interface IMoneyFormatterProps {
22
22
  */
23
23
  precision?: number;
24
24
  /**
25
- * Значение для MoneyFormatter
26
- */
25
+ * Значение для MoneyFormatter
26
+ */
27
27
  value?: any;
28
28
  [key: string]: any;
29
29
  }