@astral/ui 1.52.1 → 1.53.1
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/ClickAwayListener/ClickAwayListener.d.ts +2 -1
- package/ClickAwayListener/ClickAwayListener.js +1 -1
- package/DatePicker/DatePicker.test.js +6 -0
- package/DatePicker/DayPicker/hooks/useDaysGrid/useDaysGrid.js +2 -3
- package/DatePicker/utils/compareDateDayByUTC/compareDateDayByUTC.d.ts +5 -0
- package/DatePicker/utils/compareDateDayByUTC/compareDateDayByUTC.js +11 -0
- package/DatePicker/utils/compareDateDayByUTC/index.d.ts +1 -0
- package/DatePicker/utils/compareDateDayByUTC/index.js +17 -0
- package/esm/ClickAwayListener/ClickAwayListener.d.ts +2 -1
- package/esm/ClickAwayListener/ClickAwayListener.js +1 -1
- package/esm/DatePicker/DatePicker.test.js +6 -0
- package/esm/DatePicker/DayPicker/hooks/useDaysGrid/useDaysGrid.js +3 -4
- package/esm/DatePicker/utils/compareDateDayByUTC/compareDateDayByUTC.d.ts +5 -0
- package/esm/DatePicker/utils/compareDateDayByUTC/compareDateDayByUTC.js +7 -0
- package/esm/DatePicker/utils/compareDateDayByUTC/index.d.ts +1 -0
- package/esm/DatePicker/utils/compareDateDayByUTC/index.js +1 -0
- package/esm/utils/date/isDate/isDate.js +1 -1
- package/package.json +2 -2
- package/utils/date/isDate/isDate.js +1 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { UseClickAwayListenerOptions } from '../hooks';
|
|
3
|
-
export type ClickAwayListenerProps = Omit<UseClickAwayListenerOptions, 'ref'> & {
|
|
3
|
+
export type ClickAwayListenerProps = Omit<UseClickAwayListenerOptions, 'ref' | 'isActive'> & {
|
|
4
4
|
children: JSX.Element;
|
|
5
|
+
isActive?: boolean;
|
|
5
6
|
};
|
|
6
7
|
/**
|
|
7
8
|
* @description компонент предоставляющий обертку для работы с хуком useClickAwayEffect
|
|
@@ -6,7 +6,7 @@ const hooks_1 = require("../hooks");
|
|
|
6
6
|
/**
|
|
7
7
|
* @description компонент предоставляющий обертку для работы с хуком useClickAwayEffect
|
|
8
8
|
*/
|
|
9
|
-
const ClickAwayListener = ({ onClickAway, preventBubbling, isActive, children, }) => {
|
|
9
|
+
const ClickAwayListener = ({ onClickAway, preventBubbling, isActive = true, children, }) => {
|
|
10
10
|
const ref = (0, react_1.useRef)(null);
|
|
11
11
|
(0, hooks_1.useClickAwayEffect)({ ref, onClickAway, preventBubbling, isActive });
|
|
12
12
|
return react_1.Children.only((0, react_1.cloneElement)(children, { ref }));
|
|
@@ -57,6 +57,12 @@ describe('DatePicker', () => {
|
|
|
57
57
|
const btn = tests_1.screen.getAllByText('9')[0];
|
|
58
58
|
expect(btn).not.toBeDisabled();
|
|
59
59
|
}));
|
|
60
|
+
it('Props:maxDate: в пикере выбранной отображается правильная выбранная дата при использовании даты со смещением', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
|
+
(0, tests_1.renderWithTheme)((0, jsx_runtime_1.jsx)(DatePicker_1.DatePicker, { value: new Date('2022-12-16T18:59:00Z') }));
|
|
62
|
+
tests_1.fireEvent.focus(tests_1.screen.getByRole('textbox'));
|
|
63
|
+
const selected = tests_1.screen.getAllByText('16')[0].getAttribute('aria-selected');
|
|
64
|
+
expect(selected).toBeTruthy();
|
|
65
|
+
}));
|
|
60
66
|
it('Props:value: при изменении меняется выбранная дата в календаре', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
67
|
const callbacks = {
|
|
62
68
|
setValue: () => undefined,
|
|
@@ -6,6 +6,7 @@ const counts_1 = require("../../../constants/counts");
|
|
|
6
6
|
const date_1 = require("../../../../utils/date");
|
|
7
7
|
const buildGridItem_1 = require("../../../utils/buildGridItem");
|
|
8
8
|
const MinMaxDateContext_1 = require("../../../MinMaxDateContext");
|
|
9
|
+
const compareDateDayByUTC_1 = require("../../../utils/compareDateDayByUTC");
|
|
9
10
|
const MAX_ROWS = 6;
|
|
10
11
|
const MAX_DAYS_IN_GRID = MAX_ROWS * counts_1.DAYS_IN_WEEK;
|
|
11
12
|
const useDaysGrid = ({ baseDate, selectedDate, fullSize = false, isMondayFirst = true, }) => {
|
|
@@ -80,9 +81,7 @@ const useDaysGrid = ({ baseDate, selectedDate, fullSize = false, isMondayFirst =
|
|
|
80
81
|
}
|
|
81
82
|
grid.push({
|
|
82
83
|
isOutOfAvailableRange: dateMonth !== month,
|
|
83
|
-
selected:
|
|
84
|
-
Number(date) >= Number(selectedDate) &&
|
|
85
|
-
Number(date) < Number((0, date_1.addDays)(selectedDate, 1)),
|
|
84
|
+
selected: (0, date_1.isDate)(selectedDate) && (0, compareDateDayByUTC_1.compareDateDayByUTC)(selectedDate, date),
|
|
86
85
|
isCurrent: date.getUTCFullYear() === currentDate.getFullYear() &&
|
|
87
86
|
date.getUTCDate() === currentDate.getDate() &&
|
|
88
87
|
date.getUTCMonth() === currentDate.getMonth(),
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compareDateDayByUTC = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @description утилита для сравнения двух дат на совпадение дня,
|
|
6
|
+
* пример применения DayPicker, для сравнения выбранной даты и каждой даты в пикере
|
|
7
|
+
*/
|
|
8
|
+
const compareDateDayByUTC = (dateA, dateB) => dateA.getUTCFullYear() === dateB.getUTCFullYear() &&
|
|
9
|
+
dateA.getUTCMonth() === dateB.getUTCMonth() &&
|
|
10
|
+
dateA.getUTCDate() === dateB.getUTCDate();
|
|
11
|
+
exports.compareDateDayByUTC = compareDateDayByUTC;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './compareDateDayByUTC';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./compareDateDayByUTC"), exports);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { UseClickAwayListenerOptions } from '../hooks';
|
|
3
|
-
export type ClickAwayListenerProps = Omit<UseClickAwayListenerOptions, 'ref'> & {
|
|
3
|
+
export type ClickAwayListenerProps = Omit<UseClickAwayListenerOptions, 'ref' | 'isActive'> & {
|
|
4
4
|
children: JSX.Element;
|
|
5
|
+
isActive?: boolean;
|
|
5
6
|
};
|
|
6
7
|
/**
|
|
7
8
|
* @description компонент предоставляющий обертку для работы с хуком useClickAwayEffect
|
|
@@ -3,7 +3,7 @@ import { useClickAwayEffect } from '../hooks';
|
|
|
3
3
|
/**
|
|
4
4
|
* @description компонент предоставляющий обертку для работы с хуком useClickAwayEffect
|
|
5
5
|
*/
|
|
6
|
-
export const ClickAwayListener = ({ onClickAway, preventBubbling, isActive, children, }) => {
|
|
6
|
+
export const ClickAwayListener = ({ onClickAway, preventBubbling, isActive = true, children, }) => {
|
|
7
7
|
const ref = useRef(null);
|
|
8
8
|
useClickAwayEffect({ ref, onClickAway, preventBubbling, isActive });
|
|
9
9
|
return Children.only(cloneElement(children, { ref }));
|
|
@@ -55,6 +55,12 @@ describe('DatePicker', () => {
|
|
|
55
55
|
const btn = screen.getAllByText('9')[0];
|
|
56
56
|
expect(btn).not.toBeDisabled();
|
|
57
57
|
}));
|
|
58
|
+
it('Props:maxDate: в пикере выбранной отображается правильная выбранная дата при использовании даты со смещением', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
|
+
renderWithTheme(_jsx(DatePicker, { value: new Date('2022-12-16T18:59:00Z') }));
|
|
60
|
+
fireEvent.focus(screen.getByRole('textbox'));
|
|
61
|
+
const selected = screen.getAllByText('16')[0].getAttribute('aria-selected');
|
|
62
|
+
expect(selected).toBeTruthy();
|
|
63
|
+
}));
|
|
58
64
|
it('Props:value: при изменении меняется выбранная дата в календаре', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
65
|
const callbacks = {
|
|
60
66
|
setValue: () => undefined,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { useContext, useMemo } from 'react';
|
|
2
2
|
import { DAYS_IN_WEEK, MONTHS_IN_YEAR } from '../../../constants/counts';
|
|
3
|
-
import { DateCompareDeep, addDays, buildIsoDate, isDateOutOfRange, } from '../../../../utils/date';
|
|
3
|
+
import { DateCompareDeep, addDays, buildIsoDate, isDate, isDateOutOfRange, } from '../../../../utils/date';
|
|
4
4
|
import { buildGridResult } from '../../../utils/buildGridItem';
|
|
5
5
|
import { MinMaxDateContext } from '../../../MinMaxDateContext';
|
|
6
|
+
import { compareDateDayByUTC } from '../../../utils/compareDateDayByUTC';
|
|
6
7
|
const MAX_ROWS = 6;
|
|
7
8
|
const MAX_DAYS_IN_GRID = MAX_ROWS * DAYS_IN_WEEK;
|
|
8
9
|
export const useDaysGrid = ({ baseDate, selectedDate, fullSize = false, isMondayFirst = true, }) => {
|
|
@@ -77,9 +78,7 @@ export const useDaysGrid = ({ baseDate, selectedDate, fullSize = false, isMonday
|
|
|
77
78
|
}
|
|
78
79
|
grid.push({
|
|
79
80
|
isOutOfAvailableRange: dateMonth !== month,
|
|
80
|
-
selected:
|
|
81
|
-
Number(date) >= Number(selectedDate) &&
|
|
82
|
-
Number(date) < Number(addDays(selectedDate, 1)),
|
|
81
|
+
selected: isDate(selectedDate) && compareDateDayByUTC(selectedDate, date),
|
|
83
82
|
isCurrent: date.getUTCFullYear() === currentDate.getFullYear() &&
|
|
84
83
|
date.getUTCDate() === currentDate.getDate() &&
|
|
85
84
|
date.getUTCMonth() === currentDate.getMonth(),
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description утилита для сравнения двух дат на совпадение дня,
|
|
3
|
+
* пример применения DayPicker, для сравнения выбранной даты и каждой даты в пикере
|
|
4
|
+
*/
|
|
5
|
+
export const compareDateDayByUTC = (dateA, dateB) => dateA.getUTCFullYear() === dateB.getUTCFullYear() &&
|
|
6
|
+
dateA.getUTCMonth() === dateB.getUTCMonth() &&
|
|
7
|
+
dateA.getUTCDate() === dateB.getUTCDate();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './compareDateDayByUTC';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './compareDateDayByUTC';
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astral/ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.53.1",
|
|
4
4
|
"browser": "./esm/index.js",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@astral/icons": "^1.
|
|
7
|
+
"@astral/icons": "^1.53.1",
|
|
8
8
|
"@emotion/cache": "11.7.1",
|
|
9
9
|
"@emotion/react": "11.9.0",
|
|
10
10
|
"@emotion/server": "11.4.0",
|
|
@@ -8,5 +8,5 @@ const dayjs_1 = __importDefault(require("dayjs"));
|
|
|
8
8
|
/**
|
|
9
9
|
* @description функция проверки значения на дату
|
|
10
10
|
*/
|
|
11
|
-
const isDate = (value) => (0, dayjs_1.default)(value).isValid();
|
|
11
|
+
const isDate = (value) => Boolean(value) && (0, dayjs_1.default)(value).isValid();
|
|
12
12
|
exports.isDate = isDate;
|