@danikokonn/yarik-frontend-lib 2.0.3-3.legacy.test9 → 2.0.5-test1
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/dist/components/ActionDialog/ActionDialog.d.ts +19 -0
- package/dist/components/ActionDialog/ActionDialog.d.ts.map +1 -1
- package/dist/components/ActionDialog/ActionDialog.js +19 -0
- package/dist/components/ActionDialog/ActionDialogProps.d.ts +15 -0
- package/dist/components/ActionDialog/ActionDialogProps.d.ts.map +1 -1
- package/dist/components/ColumnSearchInput/ColumnSearchInput.d.ts +12 -0
- package/dist/components/ColumnSearchInput/ColumnSearchInput.d.ts.map +1 -1
- package/dist/components/ColumnSearchInput/ColumnSearchInput.js +12 -0
- package/dist/components/ColumnSearchInput/ColumnSearchInputProps.d.ts +9 -0
- package/dist/components/ColumnSearchInput/ColumnSearchInputProps.d.ts.map +1 -1
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts +1 -1
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts.map +1 -1
- package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js +3 -3
- package/dist/components/DateTimeRangePicker/DateTimeRangePickerProps.d.ts +1 -0
- package/dist/components/DateTimeRangePicker/DateTimeRangePickerProps.d.ts.map +1 -1
- package/dist/components/DatetimeRangeInput/DatetimeRangeInput.d.ts +20 -2
- package/dist/components/DatetimeRangeInput/DatetimeRangeInput.d.ts.map +1 -1
- package/dist/components/DatetimeRangeInput/DatetimeRangeInput.js +19 -0
- package/dist/components/DatetimeRangeInput/DatetimeRangeInputProps.d.ts +30 -0
- package/dist/components/DatetimeRangeInput/DatetimeRangeInputProps.d.ts.map +1 -1
- package/dist/components/Navigation/Navigation.js +8 -8
- package/dist/components/RichFilterTextField/RichFilterTextField.d.ts +1 -1
- package/dist/components/RichFilterTextField/RichFilterTextField.d.ts.map +1 -1
- package/dist/components/RichFilterTextField/RichFilterTextField.js +93 -78
- package/dist/components/RichFilterTextField/RichFilterTextFieldProps.d.ts +4 -0
- package/dist/components/RichFilterTextField/RichFilterTextFieldProps.d.ts.map +1 -1
- package/dist/components/RichFilterTextField/utils.d.ts.map +1 -1
- package/dist/components/RichFilterTextField/utils.js +2 -2
- package/dist/components/SmartTable/SmartTable.d.ts +3 -1
- package/dist/components/SmartTable/SmartTable.d.ts.map +1 -1
- package/dist/components/SmartTable/SmartTable.js +102 -34
- package/dist/components/SmartTable/SmartTableProps.d.ts +8 -4
- package/dist/components/SmartTable/SmartTableProps.d.ts.map +1 -1
- package/dist/components/SortBtn/SortBtn.d.ts.map +1 -1
- package/dist/components/SortBtn/SortBtn.js +2 -1
- package/dist/components/SubtaskItem/SubtaskItem.d.ts.map +1 -1
- package/dist/components/SubtaskItem/SubtaskItem.js +8 -34
- package/dist/components/SubtaskItem/SubtaskItemProps.d.ts +1 -1
- package/dist/components/SubtaskItem/SubtaskItemProps.d.ts.map +1 -1
- package/dist/providers/AirflowProvider.d.ts.map +1 -1
- package/dist/providers/AirflowProvider.js +1 -0
- package/dist/types.d.ts +5 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/package.json +5 -3
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import ActionDialogProps from "./ActionDialogProps";
|
|
3
|
+
/**
|
|
4
|
+
* Диалоговое окно с подтверждением действия.
|
|
5
|
+
*
|
|
6
|
+
* Отображает заголовок, основной текст (или массив строк), опциональную форму/элемент ввода,
|
|
7
|
+
* а также кнопки отмены и подтверждения. Кнопка подтверждения может быть отключена и снабжена подсказкой.
|
|
8
|
+
*
|
|
9
|
+
* @param open Открыт ли диалог
|
|
10
|
+
* @param fullWidth Растягивать ли диалог на всю ширину
|
|
11
|
+
* @param maxWidth Максимальная ширина диалога
|
|
12
|
+
* @param title Заголовок диалога
|
|
13
|
+
* @param contentText Основной текст (строка или массив строк)
|
|
14
|
+
* @param contentInputForm Необязательная форма/элемент ввода
|
|
15
|
+
* @param cancelText Текст кнопки отмены
|
|
16
|
+
* @param confirmText Текст кнопки подтверждения
|
|
17
|
+
* @param confirmAllowed Разрешено ли подтверждение
|
|
18
|
+
* @param confirmTooltipTitle Подсказка для кнопки подтверждения при отключении
|
|
19
|
+
* @param onClose Обработчик закрытия диалога
|
|
20
|
+
* @param onConfirm Обработчик подтверждения
|
|
21
|
+
*/
|
|
3
22
|
export default function ActionDialog({ open, fullWidth, maxWidth, title, contentText, contentInputForm, cancelText, confirmText, confirmAllowed, confirmTooltipTitle, onClose, onConfirm, }: ActionDialogProps): React.JSX.Element;
|
|
4
23
|
//# sourceMappingURL=ActionDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ActionDialog/ActionDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,SAAS,GACV,EAAE,iBAAiB,qBAiDnB"}
|
|
1
|
+
{"version":3,"file":"ActionDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ActionDialog/ActionDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,SAAS,GACV,EAAE,iBAAiB,qBAiDnB"}
|
|
@@ -8,6 +8,25 @@ import DialogContentText from "@mui/material/DialogContentText";
|
|
|
8
8
|
import DialogTitle from "@mui/material/DialogTitle";
|
|
9
9
|
import IconButton from "@mui/material/IconButton";
|
|
10
10
|
import Tooltip from "@mui/material/Tooltip";
|
|
11
|
+
/**
|
|
12
|
+
* Диалоговое окно с подтверждением действия.
|
|
13
|
+
*
|
|
14
|
+
* Отображает заголовок, основной текст (или массив строк), опциональную форму/элемент ввода,
|
|
15
|
+
* а также кнопки отмены и подтверждения. Кнопка подтверждения может быть отключена и снабжена подсказкой.
|
|
16
|
+
*
|
|
17
|
+
* @param open Открыт ли диалог
|
|
18
|
+
* @param fullWidth Растягивать ли диалог на всю ширину
|
|
19
|
+
* @param maxWidth Максимальная ширина диалога
|
|
20
|
+
* @param title Заголовок диалога
|
|
21
|
+
* @param contentText Основной текст (строка или массив строк)
|
|
22
|
+
* @param contentInputForm Необязательная форма/элемент ввода
|
|
23
|
+
* @param cancelText Текст кнопки отмены
|
|
24
|
+
* @param confirmText Текст кнопки подтверждения
|
|
25
|
+
* @param confirmAllowed Разрешено ли подтверждение
|
|
26
|
+
* @param confirmTooltipTitle Подсказка для кнопки подтверждения при отключении
|
|
27
|
+
* @param onClose Обработчик закрытия диалога
|
|
28
|
+
* @param onConfirm Обработчик подтверждения
|
|
29
|
+
*/
|
|
11
30
|
export default function ActionDialog({ open, fullWidth, maxWidth, title, contentText, contentInputForm, cancelText, confirmText, confirmAllowed, confirmTooltipTitle, onClose, onConfirm, }) {
|
|
12
31
|
return (React.createElement(Dialog, { open: open, onClose: onClose, maxWidth: maxWidth, fullWidth: fullWidth },
|
|
13
32
|
React.createElement(DialogTitle, null, title),
|
|
@@ -1,17 +1,32 @@
|
|
|
1
1
|
import { ReactNode } from "react";
|
|
2
2
|
import { Breakpoint } from "@mui/material";
|
|
3
|
+
/**
|
|
4
|
+
* Пропсы для компонента ActionDialog.
|
|
5
|
+
*/
|
|
3
6
|
export default interface ActionDialogProps {
|
|
7
|
+
/** Открыт ли диалог */
|
|
4
8
|
open: boolean;
|
|
9
|
+
/** Растягивать ли диалог на всю ширину */
|
|
5
10
|
fullWidth?: boolean;
|
|
11
|
+
/** Максимальная ширина диалога (MUI Breakpoint) */
|
|
6
12
|
maxWidth?: Breakpoint;
|
|
13
|
+
/** Заголовок диалога */
|
|
7
14
|
title: string;
|
|
15
|
+
/** Основной текст диалога (строка или массив строк) */
|
|
8
16
|
contentText: string | string[];
|
|
17
|
+
/** Необязательная форма или элемент ввода для отображения в диалоге */
|
|
9
18
|
contentInputForm?: ReactNode;
|
|
19
|
+
/** Текст для кнопки отмены */
|
|
10
20
|
cancelText: string;
|
|
21
|
+
/** Текст для кнопки подтверждения */
|
|
11
22
|
confirmText: string;
|
|
23
|
+
/** Разрешено ли подтверждение (включает/отключает кнопку подтверждения) */
|
|
12
24
|
confirmAllowed: boolean;
|
|
25
|
+
/** Необязательная подсказка для кнопки подтверждения при отключении */
|
|
13
26
|
confirmTooltipTitle?: string;
|
|
27
|
+
/** Обработчик подтверждения */
|
|
14
28
|
onConfirm(): void;
|
|
29
|
+
/** Обработчик закрытия диалога */
|
|
15
30
|
onClose(): void;
|
|
16
31
|
}
|
|
17
32
|
//# sourceMappingURL=ActionDialogProps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionDialogProps.d.ts","sourceRoot":"","sources":["../../../src/components/ActionDialog/ActionDialogProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,OAAO,WAAW,iBAAiB;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,IAAI,IAAI,CAAC;IAClB,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"ActionDialogProps.d.ts","sourceRoot":"","sources":["../../../src/components/ActionDialog/ActionDialogProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,iBAAiB;IACxC,uBAAuB;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;IACxB,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+BAA+B;IAC/B,SAAS,IAAI,IAAI,CAAC;IAClB,kCAAkC;IAClC,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import ColumnSearchInputProps from "./ColumnSearchInputProps";
|
|
3
|
+
/**
|
|
4
|
+
* Компонент поля поиска для таблицы или списка.
|
|
5
|
+
*
|
|
6
|
+
* Позволяет пользователю вводить строку поиска для определённого поля с отображением иконки поиска.
|
|
7
|
+
*
|
|
8
|
+
* @param {Object} props - Свойства компонента
|
|
9
|
+
* @param {string} props.field - Имя поля, по которому осуществляется поиск
|
|
10
|
+
* @param {string|function} [props.searchStr] - Начальное значение строки поиска или функция, возвращающая строку
|
|
11
|
+
* @param {function} props.onInputSearch - Колбэк, вызываемый при изменении строки поиска. Получает массив объектов с полем и строкой поиска
|
|
12
|
+
*
|
|
13
|
+
* @returns {JSX.Element} Элемент поля поиска
|
|
14
|
+
*/
|
|
3
15
|
export default function ColumnSearchInput({ field, searchStr, onInputSearch, }: ColumnSearchInputProps): React.JSX.Element;
|
|
4
16
|
//# sourceMappingURL=ColumnSearchInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnSearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnSearchInput/ColumnSearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAMrD,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAE9D,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,KAAK,EACL,SAAS,EACT,aAAa,GACd,EAAE,sBAAsB,qBA4BxB"}
|
|
1
|
+
{"version":3,"file":"ColumnSearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnSearchInput/ColumnSearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAMrD,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,KAAK,EACL,SAAS,EACT,aAAa,GACd,EAAE,sBAAsB,qBA4BxB"}
|
|
@@ -2,6 +2,18 @@ import React, { useState } from "react";
|
|
|
2
2
|
import InputAdornment from "@mui/material/InputAdornment";
|
|
3
3
|
import TextField from "@mui/material/TextField";
|
|
4
4
|
import SearchIcon from "@mui/icons-material/Search";
|
|
5
|
+
/**
|
|
6
|
+
* Компонент поля поиска для таблицы или списка.
|
|
7
|
+
*
|
|
8
|
+
* Позволяет пользователю вводить строку поиска для определённого поля с отображением иконки поиска.
|
|
9
|
+
*
|
|
10
|
+
* @param {Object} props - Свойства компонента
|
|
11
|
+
* @param {string} props.field - Имя поля, по которому осуществляется поиск
|
|
12
|
+
* @param {string|function} [props.searchStr] - Начальное значение строки поиска или функция, возвращающая строку
|
|
13
|
+
* @param {function} props.onInputSearch - Колбэк, вызываемый при изменении строки поиска. Получает массив объектов с полем и строкой поиска
|
|
14
|
+
*
|
|
15
|
+
* @returns {JSX.Element} Элемент поля поиска
|
|
16
|
+
*/
|
|
5
17
|
export default function ColumnSearchInput({ field, searchStr, onInputSearch, }) {
|
|
6
18
|
const [search, setSearch] = useState(searchStr || "");
|
|
7
19
|
function handleChange(event) {
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
export default interface ColumnSearchInputProps {
|
|
2
|
+
/**
|
|
3
|
+
* Имя поля, по которому будет производиться поиск.
|
|
4
|
+
*/
|
|
2
5
|
field: string;
|
|
6
|
+
/**
|
|
7
|
+
* Начальная строка поиска или функция, возвращающая строку поиска (опционально).
|
|
8
|
+
*/
|
|
3
9
|
searchStr?: string | (() => string);
|
|
10
|
+
/**
|
|
11
|
+
* Колбэк, вызываемый при изменении строки поиска. Получает массив объектов с полем и строкой поиска.
|
|
12
|
+
*/
|
|
4
13
|
onInputSearch(options: {
|
|
5
14
|
field: string;
|
|
6
15
|
search: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnSearchInputProps.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnSearchInput/ColumnSearchInputProps.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,sBAAsB;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACpC,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;CACnE"}
|
|
1
|
+
{"version":3,"file":"ColumnSearchInputProps.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnSearchInput/ColumnSearchInputProps.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,sBAAsB;IAC7C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACpC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;CACnE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import DateTimeRangePickerProps from "./DateTimeRangePickerProps";
|
|
3
3
|
import "moment/locale/ru";
|
|
4
|
-
export default function DateTimeRangePicker({ disableFuture, disabled, fromDatetime, toDateTime, required, onStartDateSet, onEndDateSet, }: DateTimeRangePickerProps): React.JSX.Element;
|
|
4
|
+
export default function DateTimeRangePicker({ disableFuture, disabled, fromDatetime, toDateTime, required, error, onStartDateSet, onEndDateSet, }: DateTimeRangePickerProps): React.JSX.Element;
|
|
5
5
|
//# sourceMappingURL=DateTimeRangePicker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeRangePicker.d.ts","sourceRoot":"","sources":["../../../src/components/DateTimeRangePicker/DateTimeRangePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,kBAAkB,CAAC;AAU1B,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,YAAY,GACb,EAAE,wBAAwB,qBAmF1B"}
|
|
1
|
+
{"version":3,"file":"DateTimeRangePicker.d.ts","sourceRoot":"","sources":["../../../src/components/DateTimeRangePicker/DateTimeRangePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,kBAAkB,CAAC;AAU1B,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,KAAK,EACL,cAAc,EACd,YAAY,GACb,EAAE,wBAAwB,qBAmF1B"}
|
|
@@ -5,7 +5,7 @@ import Stack from "@mui/material/Stack";
|
|
|
5
5
|
import { DesktopDateTimePicker, LocalizationProvider, } from "@mui/x-date-pickers";
|
|
6
6
|
import { AdapterMoment } from "@mui/x-date-pickers/AdapterMoment";
|
|
7
7
|
import { useDebounce } from "../../utils";
|
|
8
|
-
export default function DateTimeRangePicker({ disableFuture, disabled, fromDatetime, toDateTime, required, onStartDateSet, onEndDateSet, }) {
|
|
8
|
+
export default function DateTimeRangePicker({ disableFuture, disabled, fromDatetime, toDateTime, required, error, onStartDateSet, onEndDateSet, }) {
|
|
9
9
|
const [fromDatetimePickerOpen, setFromDatetimePickerOpen] = useState(false);
|
|
10
10
|
const [toDatetimePickerOpen, setToDatetimePickerOpen] = useState(false);
|
|
11
11
|
const fromDttm = fromDatetime.length > 0 ? moment(fromDatetime) : null;
|
|
@@ -23,7 +23,7 @@ export default function DateTimeRangePicker({ disableFuture, disabled, fromDatet
|
|
|
23
23
|
variant: "standard",
|
|
24
24
|
required: required,
|
|
25
25
|
helperText: required && fromDttm == null && "Введите дату начала интервала",
|
|
26
|
-
error: required
|
|
26
|
+
error: error || (required && toDttm == null),
|
|
27
27
|
},
|
|
28
28
|
inputAdornment: {
|
|
29
29
|
position: "start",
|
|
@@ -41,7 +41,7 @@ export default function DateTimeRangePicker({ disableFuture, disabled, fromDatet
|
|
|
41
41
|
variant: "standard",
|
|
42
42
|
required: required,
|
|
43
43
|
helperText: required && toDttm == null && "Введите дату конца интервала",
|
|
44
|
-
error: required
|
|
44
|
+
error: error || (required && toDttm == null),
|
|
45
45
|
},
|
|
46
46
|
inputAdornment: {
|
|
47
47
|
onClick: () => setToDatetimePickerOpen(true),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeRangePickerProps.d.ts","sourceRoot":"","sources":["../../../src/components/DateTimeRangePicker/DateTimeRangePickerProps.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC"}
|
|
1
|
+
{"version":3,"file":"DateTimeRangePickerProps.d.ts","sourceRoot":"","sources":["../../../src/components/DateTimeRangePicker/DateTimeRangePickerProps.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC"}
|
|
@@ -1,5 +1,23 @@
|
|
|
1
|
-
import React from "react";
|
|
2
1
|
import "moment/locale/ru";
|
|
3
2
|
import DatetimeRangeInputProps from "./DatetimeRangeInputProps";
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Компонент выбора диапазона дат и времени.
|
|
5
|
+
*
|
|
6
|
+
* Позволяет пользователю выбрать начальную и конечную дату/время с помощью всплывающего календаря.
|
|
7
|
+
* Поддерживает очистку выбранного диапазона и отображение выбранных дат в текстовом поле.
|
|
8
|
+
*
|
|
9
|
+
* @param {Object} props - Свойства компонента
|
|
10
|
+
* @param {string} [props.from] - Начальная дата диапазона
|
|
11
|
+
* @param {string} [props.to] - Конечная дата диапазона
|
|
12
|
+
* @param {SxProps} [props.sx] - Стили оформления
|
|
13
|
+
* @param {boolean} [props.required] - Обязательное ли поле
|
|
14
|
+
* @param {boolean} [props.disabled] - Отключение компонента
|
|
15
|
+
* @param {('outlined'|'standard'|'filled')} [props.variant] - Вариант оформления поля
|
|
16
|
+
* @param {string} [props.placeholder] - Текст-подсказка
|
|
17
|
+
* @param {('small'|'medium')} [props.size] - Размер поля
|
|
18
|
+
* @param {(start: string, end: string) => void} props.onDateRangeSet - Колбэк при выборе диапазона дат
|
|
19
|
+
*
|
|
20
|
+
* @returns {JSX.Element} Элемент выбора диапазона дат и времени
|
|
21
|
+
*/
|
|
22
|
+
export default function DatetimeRangeInput({ onDateRangeSet, from, to, variant, sx, placeholder, size, disabled, required, }: DatetimeRangeInputProps): JSX.Element;
|
|
5
23
|
//# sourceMappingURL=DatetimeRangeInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatetimeRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DatetimeRangeInput/DatetimeRangeInput.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DatetimeRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DatetimeRangeInput/DatetimeRangeInput.tsx"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAQ1B,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAQhE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,cAAc,EACd,IAAI,EACJ,EAAE,EACF,OAAO,EACP,EAAE,EACF,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAiHvC"}
|
|
@@ -9,6 +9,25 @@ import ClearIcon from "@mui/icons-material/Clear";
|
|
|
9
9
|
const DateTimeRangePicker = lazy(() => import("../DateTimeRangePicker/DateTimeRangePicker"));
|
|
10
10
|
import { prettyDatetime } from "../../utils";
|
|
11
11
|
import { Skeleton, Stack } from "@mui/material";
|
|
12
|
+
/**
|
|
13
|
+
* Компонент выбора диапазона дат и времени.
|
|
14
|
+
*
|
|
15
|
+
* Позволяет пользователю выбрать начальную и конечную дату/время с помощью всплывающего календаря.
|
|
16
|
+
* Поддерживает очистку выбранного диапазона и отображение выбранных дат в текстовом поле.
|
|
17
|
+
*
|
|
18
|
+
* @param {Object} props - Свойства компонента
|
|
19
|
+
* @param {string} [props.from] - Начальная дата диапазона
|
|
20
|
+
* @param {string} [props.to] - Конечная дата диапазона
|
|
21
|
+
* @param {SxProps} [props.sx] - Стили оформления
|
|
22
|
+
* @param {boolean} [props.required] - Обязательное ли поле
|
|
23
|
+
* @param {boolean} [props.disabled] - Отключение компонента
|
|
24
|
+
* @param {('outlined'|'standard'|'filled')} [props.variant] - Вариант оформления поля
|
|
25
|
+
* @param {string} [props.placeholder] - Текст-подсказка
|
|
26
|
+
* @param {('small'|'medium')} [props.size] - Размер поля
|
|
27
|
+
* @param {(start: string, end: string) => void} props.onDateRangeSet - Колбэк при выборе диапазона дат
|
|
28
|
+
*
|
|
29
|
+
* @returns {JSX.Element} Элемент выбора диапазона дат и времени
|
|
30
|
+
*/
|
|
12
31
|
export default function DatetimeRangeInput({ onDateRangeSet, from, to, variant, sx, placeholder, size, disabled, required, }) {
|
|
13
32
|
const [datetimeRangePickerOpen, setDatetimeRangePickerOpen] = useState(false);
|
|
14
33
|
const [fromDatetime, setFromDatetime] = useState(from || "");
|
|
@@ -1,13 +1,43 @@
|
|
|
1
1
|
import { SxProps } from "@mui/material";
|
|
2
|
+
/**
|
|
3
|
+
* Интерфейс для пропсов компонента выбора диапазона дат.
|
|
4
|
+
*/
|
|
2
5
|
export default interface DatetimeRangeInputProps {
|
|
6
|
+
/**
|
|
7
|
+
* Начальная дата диапазона (опционально).
|
|
8
|
+
*/
|
|
3
9
|
from?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Конечная дата диапазона (опционально).
|
|
12
|
+
*/
|
|
4
13
|
to?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Стили оформления компонента (опционально).
|
|
16
|
+
*/
|
|
5
17
|
sx?: SxProps;
|
|
18
|
+
/**
|
|
19
|
+
* Обязательное ли заполнение поля (опционально).
|
|
20
|
+
*/
|
|
6
21
|
required?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Отключение компонента (опционально).
|
|
24
|
+
*/
|
|
7
25
|
disabled?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Вариант оформления поля: outlined, standard или filled (опционально).
|
|
28
|
+
*/
|
|
8
29
|
variant?: "outlined" | "standard" | "filled";
|
|
30
|
+
/**
|
|
31
|
+
* Текст-подсказка (placeholder) (опционально).
|
|
32
|
+
*/
|
|
9
33
|
placeholder?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Размер поля: small или medium (опционально).
|
|
36
|
+
*/
|
|
10
37
|
size?: "small" | "medium";
|
|
38
|
+
/**
|
|
39
|
+
* Колбэк, вызываемый при выборе диапазона дат. Принимает начальную и конечную дату.
|
|
40
|
+
*/
|
|
11
41
|
onDateRangeSet(start: string, end: string): void;
|
|
12
42
|
}
|
|
13
43
|
//# sourceMappingURL=DatetimeRangeInputProps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatetimeRangeInputProps.d.ts","sourceRoot":"","sources":["../../../src/components/DatetimeRangeInput/DatetimeRangeInputProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,OAAO,WAAW,uBAAuB;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD"}
|
|
1
|
+
{"version":3,"file":"DatetimeRangeInputProps.d.ts","sourceRoot":"","sources":["../../../src/components/DatetimeRangeInput/DatetimeRangeInputProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,uBAAuB;IAC9C;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,EAAE,CAAC,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC7C;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import ArrowDropDownRoundedIcon from "@mui/icons-material/ArrowDropDownRounded";
|
|
3
|
+
import ArrowRightRoundedIcon from "@mui/icons-material/ArrowRightRounded";
|
|
4
|
+
import DarkModeIcon from "@mui/icons-material/DarkMode";
|
|
5
|
+
import HubIcon from "@mui/icons-material/Hub";
|
|
6
|
+
import LightModeIcon from "@mui/icons-material/LightMode";
|
|
7
|
+
import LogoutIcon from "@mui/icons-material/Logout";
|
|
8
|
+
import ManageAccountsIcon from "@mui/icons-material/ManageAccounts";
|
|
9
|
+
import MenuIcon from "@mui/icons-material/Menu";
|
|
2
10
|
import AppBar from "@mui/material/AppBar";
|
|
3
11
|
import Box from "@mui/material/Box";
|
|
4
12
|
import Container from "@mui/material/Container";
|
|
@@ -7,14 +15,6 @@ import Menu from "@mui/material/Menu";
|
|
|
7
15
|
import MenuItem from "@mui/material/MenuItem";
|
|
8
16
|
import Toolbar from "@mui/material/Toolbar";
|
|
9
17
|
import Typography from "@mui/material/Typography";
|
|
10
|
-
import LogoutIcon from "@mui/icons-material/Logout";
|
|
11
|
-
import MenuIcon from "@mui/icons-material/Menu";
|
|
12
|
-
import LightModeIcon from "@mui/icons-material/LightMode";
|
|
13
|
-
import DarkModeIcon from "@mui/icons-material/DarkMode";
|
|
14
|
-
import HubIcon from "@mui/icons-material/Hub";
|
|
15
|
-
import ManageAccountsIcon from "@mui/icons-material/ManageAccounts";
|
|
16
|
-
import ArrowDropDownRoundedIcon from "@mui/icons-material/ArrowDropDownRounded";
|
|
17
|
-
import ArrowRightRoundedIcon from "@mui/icons-material/ArrowRightRounded";
|
|
18
18
|
import Avatar from "@mui/material/Avatar";
|
|
19
19
|
import ListItemIcon from "@mui/material/ListItemIcon";
|
|
20
20
|
import ListItemText from "@mui/material/ListItemText";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import RichFilterTextFieldProps from "./RichFilterTextFieldProps";
|
|
3
|
-
declare const RichFilterTextField: ({ filterExpr, filterExprHist, fields, operators, onChange, }: RichFilterTextFieldProps) => React.JSX.Element;
|
|
3
|
+
declare const RichFilterTextField: ({ filterExpr, filterExprHist: searchHist, fields, operators, additionalComponents, instant: _instant, onChange, onSelectFromHistory, }: RichFilterTextFieldProps) => React.JSX.Element;
|
|
4
4
|
export default RichFilterTextField;
|
|
5
5
|
//# sourceMappingURL=RichFilterTextField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichFilterTextField.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/RichFilterTextField.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"RichFilterTextField.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/RichFilterTextField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAUf,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAKlE,QAAA,MAAM,mBAAmB,GAAI,wIAS1B,wBAAwB,sBA6R1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,53 +1,45 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
import Stack from "@mui/material/Stack";
|
|
1
|
+
import React, { useRef, useState, } from "react";
|
|
3
2
|
import IconButton from "@mui/material/IconButton";
|
|
4
3
|
import InputAdornment from "@mui/material/InputAdornment";
|
|
5
4
|
import TextField from "@mui/material/TextField";
|
|
6
5
|
import ClearIcon from "@mui/icons-material/Clear";
|
|
7
|
-
import
|
|
8
|
-
import HistoryIcon from "@mui/icons-material/History";
|
|
9
|
-
import ContentCopy from "@mui/icons-material/ContentCopy";
|
|
10
|
-
import Divider from "@mui/material/Divider";
|
|
11
|
-
import ListItemIcon from "@mui/material/ListItemIcon";
|
|
12
|
-
import ListItemText from "@mui/material/ListItemText";
|
|
13
|
-
import Menu from "@mui/material/Menu";
|
|
14
|
-
import MenuItem from "@mui/material/MenuItem";
|
|
15
|
-
import Typography from "@mui/material/Typography";
|
|
6
|
+
import SearchRoundedIcon from "@mui/icons-material/SearchRounded";
|
|
16
7
|
import HintOptionsMenu from "./HintOptionsMenu";
|
|
17
8
|
import { getHints, insertInStrPos } from "./utils";
|
|
18
9
|
import { useSnackbarContext } from "../../providers";
|
|
19
|
-
import
|
|
20
|
-
|
|
10
|
+
import FilterHistoryMenu from "./FilterHistoryMenu";
|
|
11
|
+
import { Stack } from "@mui/material";
|
|
12
|
+
const RichFilterTextField = ({ filterExpr, filterExprHist: searchHist, fields, operators, additionalComponents, instant: _instant, onChange, onSelectFromHistory, }) => {
|
|
21
13
|
const { enqueueSnackbar } = useSnackbarContext();
|
|
22
14
|
const [search, setSearch] = useState(filterExpr);
|
|
23
|
-
const [searchHist, setSearchHist] = useState(filterExprHist);
|
|
24
|
-
const [searchHistMenuAnchor, setSearchHistMenuAnchor] = useState(null);
|
|
25
|
-
const [inputAnchor, setInputAnchor] = useState(null);
|
|
26
15
|
const [cursorPos, setCursorPos] = useState(null);
|
|
27
|
-
const [currentHintOptions, setCurrentHintOptions] = useState(() => new Map());
|
|
28
16
|
const [focusIdx, setFocusIdx] = useState(0);
|
|
29
17
|
const inputRef = useRef(null);
|
|
30
18
|
const textFieldRef = useRef(null);
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
19
|
+
const prevFilterExpr = useRef(filterExpr);
|
|
20
|
+
const instant = _instant ?? true;
|
|
21
|
+
const currentHintOptions = (cursorPos != null
|
|
22
|
+
? getHints(search, cursorPos, fields, operators)
|
|
23
|
+
: null) ?? new Map();
|
|
24
|
+
const inputAnchor = currentHintOptions?.size > 0 ? textFieldRef.current : null;
|
|
25
|
+
if (prevFilterExpr.current !== filterExpr && filterExpr !== search) {
|
|
26
|
+
setSearch(filterExpr);
|
|
27
|
+
setCursorPos(null);
|
|
36
28
|
setFocusIdx(0);
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
updateHints();
|
|
47
|
-
}, [cursorPos]);
|
|
48
|
-
const handleChange = (value) => {
|
|
29
|
+
prevFilterExpr.current = filterExpr;
|
|
30
|
+
}
|
|
31
|
+
if (cursorPos != null &&
|
|
32
|
+
inputRef.current &&
|
|
33
|
+
cursorPos !== inputRef.current.selectionStart) {
|
|
34
|
+
inputRef.current.selectionStart = cursorPos;
|
|
35
|
+
inputRef.current.selectionEnd = cursorPos;
|
|
36
|
+
}
|
|
37
|
+
const handleChange = (value, _idx) => {
|
|
49
38
|
setSearch(value);
|
|
50
|
-
|
|
39
|
+
if (cursorPos &&
|
|
40
|
+
getHints(value, cursorPos, fields, operators) !== currentHintOptions)
|
|
41
|
+
setFocusIdx(0);
|
|
42
|
+
onChange(value /*(v: unknown) => setSearchHist(v as string[])*/);
|
|
51
43
|
};
|
|
52
44
|
const insertHint = (hint) => {
|
|
53
45
|
if (cursorPos == null)
|
|
@@ -62,13 +54,18 @@ const RichFilterTextField = ({ filterExpr, filterExprHist, fields, operators, on
|
|
|
62
54
|
hint = hint.replace("regex", "");
|
|
63
55
|
}
|
|
64
56
|
const { newSearch, newPos } = insertInStrPos(search, cursorPos, hint, fields);
|
|
65
|
-
|
|
57
|
+
setSearch(newSearch);
|
|
58
|
+
if (instant)
|
|
59
|
+
onChange(newSearch);
|
|
60
|
+
let newCursorPos = newPos;
|
|
66
61
|
if (hint.includes("[") || hint.includes("(") || hint.includes("/")) {
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
setCursorPos(newPos);
|
|
62
|
+
newCursorPos--;
|
|
71
63
|
}
|
|
64
|
+
setCursorPos(newCursorPos);
|
|
65
|
+
if (newCursorPos &&
|
|
66
|
+
getHints(newSearch, newCursorPos, fields, operators) !==
|
|
67
|
+
currentHintOptions)
|
|
68
|
+
setFocusIdx(0);
|
|
72
69
|
};
|
|
73
70
|
const handleKeyUp = (e) => {
|
|
74
71
|
switch (e.code) {
|
|
@@ -86,16 +83,24 @@ const RichFilterTextField = ({ filterExpr, filterExprHist, fields, operators, on
|
|
|
86
83
|
const focusedHint = currentHintOptions.entries().toArray()[focusIdx][0];
|
|
87
84
|
insertHint(focusedHint);
|
|
88
85
|
}
|
|
86
|
+
else {
|
|
87
|
+
onChange(search);
|
|
88
|
+
inputRef.current?.blur();
|
|
89
|
+
}
|
|
89
90
|
break;
|
|
90
91
|
}
|
|
91
92
|
case "Escape":
|
|
92
93
|
case "Tab": {
|
|
93
|
-
setInputAnchor(null);
|
|
94
94
|
setCursorPos(null);
|
|
95
95
|
break;
|
|
96
96
|
}
|
|
97
97
|
default: {
|
|
98
|
-
|
|
98
|
+
const newCursorPos = inputRef.current?.selectionStart ?? null;
|
|
99
|
+
setCursorPos(newCursorPos);
|
|
100
|
+
if (newCursorPos &&
|
|
101
|
+
getHints(search, newCursorPos, fields, operators) !==
|
|
102
|
+
currentHintOptions)
|
|
103
|
+
setFocusIdx(0);
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
};
|
|
@@ -105,8 +110,12 @@ const RichFilterTextField = ({ filterExpr, filterExprHist, fields, operators, on
|
|
|
105
110
|
case "ArrowRight":
|
|
106
111
|
case "Space":
|
|
107
112
|
case "Backspace": {
|
|
108
|
-
|
|
109
|
-
setCursorPos(
|
|
113
|
+
const newCursorPos = inputRef.current?.selectionStart ?? null;
|
|
114
|
+
setCursorPos(newCursorPos);
|
|
115
|
+
if (newCursorPos &&
|
|
116
|
+
getHints(search, newCursorPos, fields, operators) !==
|
|
117
|
+
currentHintOptions)
|
|
118
|
+
setFocusIdx(0);
|
|
110
119
|
return;
|
|
111
120
|
}
|
|
112
121
|
case "ArrowDown": {
|
|
@@ -139,57 +148,63 @@ const RichFilterTextField = ({ filterExpr, filterExprHist, fields, operators, on
|
|
|
139
148
|
}
|
|
140
149
|
case "Escape":
|
|
141
150
|
case "Tab": {
|
|
142
|
-
setInputAnchor(null);
|
|
143
151
|
setCursorPos(null);
|
|
152
|
+
setFocusIdx(0);
|
|
144
153
|
break;
|
|
145
154
|
}
|
|
146
155
|
default: {
|
|
147
|
-
|
|
156
|
+
const newCursorPos = inputRef.current?.selectionStart ?? null;
|
|
157
|
+
setCursorPos(newCursorPos);
|
|
158
|
+
if (newCursorPos &&
|
|
159
|
+
getHints(search, newCursorPos, fields, operators) !==
|
|
160
|
+
currentHintOptions)
|
|
161
|
+
setFocusIdx(0);
|
|
148
162
|
}
|
|
149
163
|
}
|
|
150
164
|
};
|
|
151
165
|
return (React.createElement(React.Fragment, null,
|
|
152
|
-
React.createElement(TextField, { ref: textFieldRef, inputRef: inputRef, fullWidth: true, size: "small", value: search, title: search, multiline: true, maxRows: 1, onChange: (e) =>
|
|
166
|
+
React.createElement(TextField, { ref: textFieldRef, inputRef: inputRef, fullWidth: true, size: "small", value: search, title: search, multiline: true, maxRows: 1, onChange: (e) => {
|
|
167
|
+
(instant ? handleChange : setSearch)(e.target.value);
|
|
168
|
+
const newCursorPos = inputRef.current?.selectionStart ?? null;
|
|
169
|
+
setCursorPos(newCursorPos);
|
|
170
|
+
if (newCursorPos &&
|
|
171
|
+
getHints(e.target.value, newCursorPos, fields, operators) !==
|
|
172
|
+
currentHintOptions)
|
|
173
|
+
setFocusIdx(0);
|
|
174
|
+
}, onKeyUp: handleKeyUp, onKeyDown: handleKeyDown, slotProps: {
|
|
175
|
+
htmlInput: {
|
|
176
|
+
onClick: (e) => {
|
|
177
|
+
if (Object(e).target !== Object(e).currentTarget)
|
|
178
|
+
return;
|
|
179
|
+
const newCursorPos = inputRef.current?.selectionStart ?? null;
|
|
180
|
+
setCursorPos(newCursorPos);
|
|
181
|
+
if (newCursorPos &&
|
|
182
|
+
getHints(search, newCursorPos, fields, operators) !==
|
|
183
|
+
currentHintOptions)
|
|
184
|
+
setFocusIdx(0);
|
|
185
|
+
},
|
|
186
|
+
},
|
|
153
187
|
input: {
|
|
188
|
+
startAdornment: (React.createElement(InputAdornment, { position: "start" },
|
|
189
|
+
React.createElement(Stack, { direction: "row", sx: { alignItems: "center" } },
|
|
190
|
+
!instant && (React.createElement(IconButton, { onClick: (e) => {
|
|
191
|
+
onChange(search);
|
|
192
|
+
e.stopPropagation();
|
|
193
|
+
}, title: "\u041F\u043E\u0438\u0441\u043A" },
|
|
194
|
+
React.createElement(SearchRoundedIcon, null))),
|
|
195
|
+
React.createElement(FilterHistoryMenu, { searchHist: searchHist, onChange: onSelectFromHistory || handleChange, onCopy: () => enqueueSnackbar("Предустановка фильтра скопирована в буфер обмена", "default") }),
|
|
196
|
+
additionalComponents))),
|
|
154
197
|
endAdornment: (React.createElement(InputAdornment, { position: "end" },
|
|
155
198
|
React.createElement(IconButton, { title: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440\u044B", disabled: !search, onClick: (e) => {
|
|
156
|
-
|
|
157
|
-
onChange("", (v) => setSearchHist(v));
|
|
199
|
+
handleChange("");
|
|
158
200
|
e.stopPropagation();
|
|
159
201
|
} },
|
|
160
202
|
React.createElement(ClearIcon, null)))),
|
|
161
|
-
startAdornment: (React.createElement(InputAdornment, { position: "start" },
|
|
162
|
-
React.createElement(IconButton, { color: "secondary", title: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432", disabled: searchHist.length === 0, onClick: (e) => {
|
|
163
|
-
setSearchHistMenuAnchor(e.currentTarget);
|
|
164
|
-
e.stopPropagation();
|
|
165
|
-
} },
|
|
166
|
-
React.createElement(FilterListIcon, null)))),
|
|
167
203
|
},
|
|
168
204
|
} }),
|
|
169
205
|
React.createElement(HintOptionsMenu, { inputAnchor: inputAnchor, inputRef: inputRef, textFieldRef: textFieldRef, options: currentHintOptions, focusIdx: focusIdx, onSelectHint: insertHint, onClose: () => {
|
|
170
|
-
setInputAnchor(null);
|
|
171
206
|
setCursorPos(null);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
React.createElement(Stack, { direction: "row", spacing: 1, sx: {
|
|
175
|
-
px: 2,
|
|
176
|
-
py: 1,
|
|
177
|
-
alignItems: "center",
|
|
178
|
-
} },
|
|
179
|
-
React.createElement(HistoryIcon, null),
|
|
180
|
-
React.createElement(Typography, { variant: "h5" }, "\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445 \u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432")),
|
|
181
|
-
React.createElement(Divider, null),
|
|
182
|
-
searchHist.map((el, idx) => (React.createElement(MenuItem, { key: idx + 1, onClick: () => handleChange(el), title: el },
|
|
183
|
-
React.createElement(ListItemText, { sx: { overflow: "hidden" } },
|
|
184
|
-
idx + 1,
|
|
185
|
-
". ",
|
|
186
|
-
el),
|
|
187
|
-
React.createElement(ListItemIcon, null,
|
|
188
|
-
React.createElement(IconButton, { onClick: (e) => {
|
|
189
|
-
navigator.clipboard.writeText(el);
|
|
190
|
-
e.stopPropagation();
|
|
191
|
-
enqueueSnackbar("Предустановка фильтра скопирована в буфер обмена", "default");
|
|
192
|
-
} },
|
|
193
|
-
React.createElement(ContentCopy, { fontSize: "small" })))))))));
|
|
207
|
+
setFocusIdx(0);
|
|
208
|
+
} })));
|
|
194
209
|
};
|
|
195
210
|
export default RichFilterTextField;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
export interface FilterField {
|
|
2
3
|
/**
|
|
3
4
|
* Название поля. Используется при подстановке. Должно оканчиваться двоеточием
|
|
@@ -62,6 +63,9 @@ export default interface RichFilterTextFieldProps {
|
|
|
62
63
|
* Список операторов фильтрации
|
|
63
64
|
*/
|
|
64
65
|
operators: FilterOperator[];
|
|
66
|
+
instant?: boolean;
|
|
67
|
+
additionalComponents?: React.JSX.Element[];
|
|
65
68
|
onChange(value: string, onSuccess?: (v: unknown) => void): void;
|
|
69
|
+
onSelectFromHistory?(value: string, idx: number): void;
|
|
66
70
|
}
|
|
67
71
|
//# sourceMappingURL=RichFilterTextFieldProps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichFilterTextFieldProps.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/RichFilterTextFieldProps.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAC/C;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"RichFilterTextFieldProps.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/RichFilterTextFieldProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAC/C;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAChE,mBAAmB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EAEf,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAepC,eAAO,MAAM,QAAQ,GACnB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,QAAQ,WAAW,EAAE,EACrB,WAAW,cAAc,EAAE,oCAyE5B,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,MAAM,MAAM,EACZ,QAAQ,WAAW,EAAE;;;CAoFtB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const getSingleMatch = (token, fields) => {
|
|
2
|
-
const matchedFields = fields.filter((v) => v.name.startsWith(token));
|
|
2
|
+
const matchedFields = fields.filter((v) => v.name.toLowerCase().startsWith(token.toLowerCase()));
|
|
3
3
|
if (matchedFields.length !== 1)
|
|
4
4
|
return undefined;
|
|
5
5
|
return matchedFields[0];
|
|
@@ -52,7 +52,7 @@ export const getHints = (search, cursorPos, fields, operators) => {
|
|
|
52
52
|
if (fieldHasValues && validToken) {
|
|
53
53
|
return getMapOf(matchedField?.values || []);
|
|
54
54
|
}
|
|
55
|
-
return getMapOf(fields.filter((v) => v.name.startsWith(token)));
|
|
55
|
+
return getMapOf(fields.filter((v) => v.name.toLowerCase().startsWith(token.toLowerCase())));
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import SmartTableProps from "./SmartTableProps";
|
|
3
|
-
export default function SmartTable<T
|
|
3
|
+
export default function SmartTable<T extends {
|
|
4
|
+
id: string | number;
|
|
5
|
+
}>({ rows, columns, pageN, numPages, perPage, loading, minWidth, width, rowStyles, selectable, selectedRow, sx, disablePerPageSelector, globalSearch, columnAutoWidth, error, globalSearchComponent, ContentWrapper, onRowDoubleClick, onSelectRow, controlComponent: ControlComponent, onToggleSort, onInputSearch, onPageSelect, onChangePerPage, controlComponentColSx, perPageOptions, }: SmartTableProps<T>): React.JSX.Element;
|
|
4
6
|
//# sourceMappingURL=SmartTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmartTable.d.ts","sourceRoot":"","sources":["../../../src/components/SmartTable/SmartTable.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"SmartTable.d.ts","sourceRoot":"","sources":["../../../src/components/SmartTable/SmartTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AA2BlD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AA4GhD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CAAE,EAAE,EACrE,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,EAAE,EACF,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,KAAK,EACL,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,cAAc,GACf,EAAE,eAAe,CAAC,CAAC,CAAC,qBA4TpB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { Fragment, Suspense } from "react";
|
|
2
|
+
import { CircularProgress, Skeleton, Stack, Typography, useTheme, } from "@mui/material";
|
|
2
3
|
import FormControl from "@mui/material/FormControl";
|
|
3
4
|
import InputLabel from "@mui/material/InputLabel";
|
|
4
5
|
import MenuItem from "@mui/material/MenuItem";
|
|
@@ -8,15 +9,58 @@ import Select from "@mui/material/Select";
|
|
|
8
9
|
import Table from "@mui/material/Table";
|
|
9
10
|
import TableBody from "@mui/material/TableBody";
|
|
10
11
|
import TableCell from "@mui/material/TableCell";
|
|
12
|
+
import TableContainer from "@mui/material/TableContainer";
|
|
11
13
|
import TableFooter from "@mui/material/TableFooter";
|
|
12
|
-
import TableHead from "@mui/material/TableHead";
|
|
13
14
|
import TableRow from "@mui/material/TableRow";
|
|
14
|
-
import
|
|
15
|
-
import { useTheme, Stack, CircularProgress } from "@mui/material";
|
|
16
|
-
import SortBtn from "../SortBtn/SortBtn";
|
|
15
|
+
import { TableVirtuoso } from "react-virtuoso";
|
|
17
16
|
import ColumnSearchInput from "../ColumnSearchInput/ColumnSearchInput";
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
import SortBtn from "../SortBtn/SortBtn";
|
|
18
|
+
import RowContent from "./RowContent";
|
|
19
|
+
import TableHeader from "./TableHeader";
|
|
20
|
+
// eslint-disable-next-line react/display-name
|
|
21
|
+
const Scroller = React.forwardRef((props, ref) => (React.createElement(TableContainer, { component: Paper, ...props, ref: ref, sx: {
|
|
22
|
+
minWidth: Object(props).context.minWidth || "100%",
|
|
23
|
+
flexGrow: 1,
|
|
24
|
+
overflowX: "auto",
|
|
25
|
+
} },
|
|
26
|
+
Object(props).children,
|
|
27
|
+
Object(props).context.placeholder)));
|
|
28
|
+
const TableHead =
|
|
29
|
+
// eslint-disable-next-line react/display-name
|
|
30
|
+
React.forwardRef((props, ref) => (React.createElement(TableHeader, { ...props, ref: ref })));
|
|
31
|
+
const TableBodyWrapper =
|
|
32
|
+
// eslint-disable-next-line react/display-name
|
|
33
|
+
React.forwardRef((props, ref) => (React.createElement(TableBody, { ...props, ref: ref })));
|
|
34
|
+
const Row = (props) => {
|
|
35
|
+
const ContentWrapper = Object(props).context.ContentWrapper;
|
|
36
|
+
const selectedRow = Object(props).context.selectedRow;
|
|
37
|
+
const rowStyles = Object(props).context.rowStyles;
|
|
38
|
+
const selectable = Object(props).context.selectable;
|
|
39
|
+
return ContentWrapper ? (React.createElement(ContentWrapper, { dagId: Object(props).item.id, rowProps: {
|
|
40
|
+
selected: Object(props).item.id === selectedRow,
|
|
41
|
+
...props,
|
|
42
|
+
}, ...props })) : (React.createElement(TableRow, { hover: true, sx: {
|
|
43
|
+
height: "3rem",
|
|
44
|
+
overflowY: "hidden",
|
|
45
|
+
...rowStyles,
|
|
46
|
+
cursor: selectable ? "pointer" : "default",
|
|
47
|
+
}, selected: Object(props).item.id === selectedRow, ...props }));
|
|
48
|
+
};
|
|
49
|
+
const TableWrapper = (props) => (React.createElement(Table, { ...props, stickyHeader: true, sx: {
|
|
50
|
+
...Object(props).context.tableStyle,
|
|
51
|
+
minWidth: Object(props).context.minWidth || "100%",
|
|
52
|
+
} }));
|
|
53
|
+
const ItemContent = (_index, row, context) => (React.createElement(RowContent, { key: row.id, row: row, columns: Object(context).columns, controlComponent: Object(context).ControlComponent, onDoubleClick: Object(context).onRowDoubleClick, onSelectRow: Object(context).selectable ? Object(context).handleSelectRow : () => { } }));
|
|
54
|
+
const ScrollSeekPlaceholder = (props) => (
|
|
55
|
+
// eslint-disable-next-line react/prop-types
|
|
56
|
+
React.createElement(TableRow, { sx: { height: Object(props).height } }, Object(props).context.columns.map((col, i) => (React.createElement(TableCell, { sx: {
|
|
57
|
+
paddingTop: "0.25rem",
|
|
58
|
+
paddingBottom: "0.25rem",
|
|
59
|
+
py: 0,
|
|
60
|
+
...col.colSx,
|
|
61
|
+
}, key: i },
|
|
62
|
+
React.createElement(Skeleton, { variant: "rectangular", width: "100%" }))))));
|
|
63
|
+
export default function SmartTable({ rows, columns, pageN, numPages, perPage, loading, minWidth, width, rowStyles, selectable, selectedRow, sx, disablePerPageSelector, globalSearch, columnAutoWidth, error, globalSearchComponent, ContentWrapper, onRowDoubleClick, onSelectRow, controlComponent: ControlComponent, onToggleSort, onInputSearch, onPageSelect, onChangePerPage, controlComponentColSx, perPageOptions, }) {
|
|
20
64
|
const theme = useTheme();
|
|
21
65
|
const tableStyle = {
|
|
22
66
|
width: columnAutoWidth ? "auto" : "100%",
|
|
@@ -39,16 +83,48 @@ export default function SmartTable({ rows, columns, pageN, numPages, perPage, lo
|
|
|
39
83
|
...col.colSx,
|
|
40
84
|
} }, col.sortable ? (React.createElement(SortBtn, { field: col.fieldName, order: col.order || "none", onToggleSort: onToggleSort }, col.displayName)) : (col.displayName)))),
|
|
41
85
|
ControlComponent && (React.createElement(TableCell, { sx: { ...controlComponentColSx }, scope: "col" }))));
|
|
42
|
-
const headerSearchRow = (React.createElement(TableRow, { key: 1 }, globalSearch && globalSearchComponent ? (React.createElement(TableCell, { scope: "col", colSpan: columns.length + 1 }, globalSearchComponent
|
|
86
|
+
const headerSearchRow = (React.createElement(TableRow, { key: 1 }, globalSearch && globalSearchComponent ? (React.createElement(TableCell, { scope: "col", colSpan: columns.length + 1 }, globalSearchComponent)) : (React.createElement(React.Fragment, null,
|
|
43
87
|
hasSearchableColumns ? searchCols() : React.createElement(React.Fragment, null),
|
|
44
88
|
ControlComponent && (React.createElement(TableCell, { sx: { ...controlComponentColSx }, scope: "col" }))))));
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
89
|
+
const centerStyle = {
|
|
90
|
+
position: "absolute",
|
|
91
|
+
left: "50%",
|
|
92
|
+
top: "50%",
|
|
93
|
+
transform: "translate(-50%, -50%)",
|
|
94
|
+
};
|
|
51
95
|
const headerRows = [headerTitleRow, headerSearchRow];
|
|
96
|
+
let placeholder = React.createElement(React.Fragment, null);
|
|
97
|
+
if (error && rows.length === 0) {
|
|
98
|
+
placeholder = (React.createElement(Typography, { variant: "h6", color: "textSecondary", sx: centerStyle }, "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0435"));
|
|
99
|
+
}
|
|
100
|
+
else if (loading) {
|
|
101
|
+
placeholder = React.createElement(CircularProgress, { sx: centerStyle });
|
|
102
|
+
}
|
|
103
|
+
else if (rows.length === 0) {
|
|
104
|
+
placeholder = (React.createElement(Typography, { variant: "h6", color: "textSecondary", sx: centerStyle }, "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E"));
|
|
105
|
+
}
|
|
106
|
+
const fixedHeaderContent = () => (React.createElement(Fragment, null, hasGlobalSearch ? headerRows[0] : headerRows));
|
|
107
|
+
const tableContext = {
|
|
108
|
+
columns: columns,
|
|
109
|
+
minWidth: minWidth,
|
|
110
|
+
rowStyles: rowStyles,
|
|
111
|
+
selectable: selectable,
|
|
112
|
+
tableStyle: tableStyle,
|
|
113
|
+
placeholder: placeholder,
|
|
114
|
+
selectedRow: selectedRow,
|
|
115
|
+
ContentWrapper: ContentWrapper,
|
|
116
|
+
ControlComponent: ControlComponent,
|
|
117
|
+
onRowDoubleClick: onRowDoubleClick,
|
|
118
|
+
handleSelectRow: handleSelectRow,
|
|
119
|
+
};
|
|
120
|
+
const VirtuosoTableComponents = {
|
|
121
|
+
Scroller: Scroller,
|
|
122
|
+
Table: TableWrapper,
|
|
123
|
+
TableRow: Row,
|
|
124
|
+
TableHead: TableHead,
|
|
125
|
+
TableBody: TableBodyWrapper,
|
|
126
|
+
ScrollSeekPlaceholder: ScrollSeekPlaceholder,
|
|
127
|
+
};
|
|
52
128
|
return (React.createElement(Paper, { sx: {
|
|
53
129
|
height: "74vh",
|
|
54
130
|
position: "relative",
|
|
@@ -63,18 +139,17 @@ export default function SmartTable({ rows, columns, pageN, numPages, perPage, lo
|
|
|
63
139
|
overflowX: "auto",
|
|
64
140
|
width: "100%",
|
|
65
141
|
} },
|
|
66
|
-
hasGlobalSearch && (React.createElement(Table, { size: "small", className: "rulesTable", stickyHeader: true, sx: { ...tableStyle, minWidth: minWidth || "100%", height: "auto" } },
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
loading ? (React.createElement(CircularProgress, { sx: { position: "absolute", left: "50%", top: "50%" } })) : (React.createElement(React.Fragment, null)))),
|
|
142
|
+
hasGlobalSearch && (React.createElement(Table, { size: "small", className: "rulesTable", stickyHeader: true, sx: { ...tableStyle, minWidth: minWidth || "100%", height: "auto" } },
|
|
143
|
+
React.createElement(TableHeader, null, headerRows[1]))),
|
|
144
|
+
React.createElement(Suspense, { fallback: React.createElement(CircularProgress, { sx: { position: "absolute", left: "50%", top: "50%" } }) },
|
|
145
|
+
React.createElement(TableVirtuoso, { style: { height: "100%" }, totalCount: rows.length, data: rows, components: VirtuosoTableComponents, fixedHeaderContent: fixedHeaderContent, itemContent: (ItemContent), context: tableContext,
|
|
146
|
+
// scrollSeekConfiguration={{
|
|
147
|
+
// // «входим» в режим плейсхолдеров при скорости >200px/фрейм
|
|
148
|
+
// enter: (velocity) => Math.abs(velocity) > 50,
|
|
149
|
+
// // «выходим» обратно, когда скорость опустилась ниже 30px/фрейм
|
|
150
|
+
// exit: (velocity) => Math.abs(velocity) < 10,
|
|
151
|
+
// }}
|
|
152
|
+
increaseViewportBy: { top: 800, bottom: 800 } }))),
|
|
78
153
|
React.createElement(Table, { sx: { ...tableStyle, height: "auto", minWidth: minWidth || "100%" } },
|
|
79
154
|
React.createElement(TableFooter, { sx: {
|
|
80
155
|
bottom: "0%",
|
|
@@ -98,12 +173,5 @@ export default function SmartTable({ rows, columns, pageN, numPages, perPage, lo
|
|
|
98
173
|
disablePerPageSelector ? (React.createElement(React.Fragment, null)) : (React.createElement(FormControl, { size: "small" },
|
|
99
174
|
React.createElement(InputLabel, { id: "perPageInputLabel" }, "\u0421\u0442\u0440\u043E\u043A"),
|
|
100
175
|
React.createElement(Select, { label: "\u0421\u0442\u0440\u043E\u043A", labelId: "perPageInputLabel", value: String(perPage), autoWidth: true, onChange: (e) => onChangePerPage &&
|
|
101
|
-
onChangePerPage(Number(e.target.value)), sx: { minWidth: "2rem" } },
|
|
102
|
-
React.createElement(MenuItem, { value: 5 }, "5"),
|
|
103
|
-
React.createElement(MenuItem, { value: 10 }, "10"),
|
|
104
|
-
React.createElement(MenuItem, { value: 15 }, "15"),
|
|
105
|
-
React.createElement(MenuItem, { value: 20 }, "20"),
|
|
106
|
-
React.createElement(MenuItem, { value: 25 }, "25"),
|
|
107
|
-
React.createElement(MenuItem, { value: 50 }, "50"),
|
|
108
|
-
React.createElement(MenuItem, { value: 100 }, "100")))))))))));
|
|
176
|
+
onChangePerPage(Number(e.target.value)), sx: { minWidth: "2rem" } }, (perPageOptions || [5, 10, 15, 20, 25, 50, 100]).map((v, idx) => (React.createElement(MenuItem, { key: idx, value: v }, v)))))))))))));
|
|
109
177
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { ReactNode } from "react";
|
|
2
|
-
import { Column } from "../../types";
|
|
3
1
|
import { SxProps, TableRowProps, Theme } from "@mui/material";
|
|
4
|
-
|
|
2
|
+
import { ReactElement, ReactNode } from "react";
|
|
3
|
+
import { Column } from "../../types";
|
|
4
|
+
export default interface SmartTableProps<T extends {
|
|
5
|
+
id: string | number;
|
|
6
|
+
}> {
|
|
5
7
|
rows: T[];
|
|
6
8
|
columns: Column<T>[];
|
|
7
9
|
pageN: number;
|
|
@@ -17,7 +19,7 @@ export default interface SmartTableProps<T> {
|
|
|
17
19
|
sx?: SxProps<Theme>;
|
|
18
20
|
disablePerPageSelector?: boolean;
|
|
19
21
|
globalSearch?: boolean;
|
|
20
|
-
globalSearchComponent
|
|
22
|
+
globalSearchComponent?: ReactElement;
|
|
21
23
|
ContentWrapper?({ children, dagId, rowProps, }: {
|
|
22
24
|
children?: ReactNode;
|
|
23
25
|
dagId: string;
|
|
@@ -34,5 +36,7 @@ export default interface SmartTableProps<T> {
|
|
|
34
36
|
onPageSelect(pageN: number): void;
|
|
35
37
|
onChangePerPage?(perPage: number): void;
|
|
36
38
|
controlComponentColSx?: SxProps<Theme>;
|
|
39
|
+
error?: boolean;
|
|
40
|
+
perPageOptions?: number[];
|
|
37
41
|
}
|
|
38
42
|
//# sourceMappingURL=SmartTableProps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmartTableProps.d.ts","sourceRoot":"","sources":["../../../src/components/SmartTable/SmartTableProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"SmartTableProps.d.ts","sourceRoot":"","sources":["../../../src/components/SmartTable/SmartTableProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,CAAC,OAAO,WAAW,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CAAE;IACzE,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,YAAY,CAAC;IACrC,cAAc,CAAC,CAAC,EACd,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE;QACD,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,aAAa,CAAC;KACzB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IACtB,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;IACrC,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClE,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,EAAE,GAAG,IAAI,CAAC;IACnE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortBtn.d.ts","sourceRoot":"","sources":["../../../src/components/SortBtn/SortBtn.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"SortBtn.d.ts","sourceRoot":"","sources":["../../../src/components/SortBtn/SortBtn.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,QAAQ,EACR,KAAK,EACL,KAAK,EAAE,MAAM,EACb,YAAY,GACb,EAAE,YAAY,qBAgCd"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import React, { useState } from "react";
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
2
|
import { TableSortLabel } from "@mui/material";
|
|
3
3
|
export default function SortBtn({ children, field, order: _order, onToggleSort, }) {
|
|
4
4
|
const [order, setOrder] = useState(_order || "none");
|
|
5
|
+
useEffect(() => setOrder(_order), [_order]);
|
|
5
6
|
function handleToggleSort() {
|
|
6
7
|
let newOrder;
|
|
7
8
|
switch (order) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubtaskItem.d.ts","sourceRoot":"","sources":["../../../src/components/SubtaskItem/SubtaskItem.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SubtaskItem.d.ts","sourceRoot":"","sources":["../../../src/components/SubtaskItem/SubtaskItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAIlD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,uBAAuB,GACxB,EAAE,gBAAgB,qBAkFlB"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import moment from "moment";
|
|
2
1
|
import React from "react";
|
|
3
|
-
import
|
|
4
|
-
import BlockSharpIcon from "@mui/icons-material/BlockSharp";
|
|
5
|
-
import CheckCircleOutlineRoundedIcon from "@mui/icons-material/CheckCircleOutlineRounded";
|
|
6
|
-
import ErrorOutlineSharpIcon from "@mui/icons-material/ErrorOutlineSharp";
|
|
7
|
-
import ExpandMore from "@mui/icons-material/ExpandMore";
|
|
8
|
-
import { Chip, useTheme } from "@mui/material";
|
|
2
|
+
import moment from "moment";
|
|
9
3
|
import Accordion from "@mui/material/Accordion";
|
|
10
4
|
import AccordionDetails from "@mui/material/AccordionDetails";
|
|
11
5
|
import AccordionSummary from "@mui/material/AccordionSummary";
|
|
12
6
|
import CircularProgress from "@mui/material/CircularProgress";
|
|
7
|
+
import CheckCircleOutlineRoundedIcon from "@mui/icons-material/CheckCircleOutlineRounded";
|
|
8
|
+
import ErrorOutlineSharpIcon from "@mui/icons-material/ErrorOutlineSharp";
|
|
9
|
+
import AccessTimeSharpIcon from "@mui/icons-material/AccessTimeSharp";
|
|
10
|
+
import BlockSharpIcon from "@mui/icons-material/BlockSharp";
|
|
11
|
+
import ExpandMore from "@mui/icons-material/ExpandMore";
|
|
12
|
+
import { useTheme } from "@mui/material";
|
|
13
13
|
import { taskStateText } from "../../utils";
|
|
14
14
|
export default function SubtaskItem({ taskInstance, logs, expanded, onShowLogs, expandedLogContainerRef, }) {
|
|
15
15
|
const theme = useTheme();
|
|
@@ -56,33 +56,7 @@ export default function SubtaskItem({ taskInstance, logs, expanded, onShowLogs,
|
|
|
56
56
|
" за " +
|
|
57
57
|
formatTaskDuration
|
|
58
58
|
: ""))),
|
|
59
|
-
React.createElement(AccordionDetails, {
|
|
60
|
-
if (e.ctrlKey && e.key.toLowerCase() === "a") {
|
|
61
|
-
e.preventDefault();
|
|
62
|
-
if (e.currentTarget) {
|
|
63
|
-
const range = document.createRange();
|
|
64
|
-
range.selectNodeContents(e.currentTarget);
|
|
65
|
-
const selection = window.getSelection();
|
|
66
|
-
if (selection != null) {
|
|
67
|
-
selection.removeAllRanges();
|
|
68
|
-
selection.addRange(range);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (e.key.toLowerCase() === "backspace") {
|
|
73
|
-
e.preventDefault();
|
|
74
|
-
}
|
|
75
|
-
}, suppressContentEditableWarning: true, onBeforeInput: (e) => e.preventDefault(), onPaste: (e) => e.preventDefault(), onDrop: (e) => e.preventDefault(), sx: {
|
|
76
|
-
maxHeight: "32vh",
|
|
77
|
-
overflow: "auto",
|
|
78
|
-
position: "relative",
|
|
79
|
-
} },
|
|
80
|
-
React.createElement(Chip, { label: "\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C", size: "small", variant: "outlined", onClick: () => { }, sx: {
|
|
81
|
-
position: "absolute",
|
|
82
|
-
top: "10%",
|
|
83
|
-
right: "10%",
|
|
84
|
-
opacity: "0.75",
|
|
85
|
-
} }),
|
|
59
|
+
React.createElement(AccordionDetails, { style: { maxHeight: "32vh", overflow: "auto" }, ref: expandedLogContainerRef },
|
|
86
60
|
React.createElement("article", { style: {
|
|
87
61
|
padding: "1.5rem",
|
|
88
62
|
backgroundColor: theme.palette.background.paper,
|
|
@@ -4,7 +4,7 @@ export default interface SubtaskItemProps {
|
|
|
4
4
|
taskInstance: TaskInstance;
|
|
5
5
|
logs: string;
|
|
6
6
|
expanded: boolean;
|
|
7
|
-
expandedLogContainerRef?: RefObject<HTMLDivElement
|
|
7
|
+
expandedLogContainerRef?: RefObject<HTMLDivElement>;
|
|
8
8
|
onShowLogs(taskId: string, tryNum: number): void;
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=SubtaskItemProps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubtaskItemProps.d.ts","sourceRoot":"","sources":["../../../src/components/SubtaskItem/SubtaskItemProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,OAAO,WAAW,gBAAgB;IACvC,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,SAAS,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"SubtaskItemProps.d.ts","sourceRoot":"","sources":["../../../src/components/SubtaskItem/SubtaskItemProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,OAAO,WAAW,gBAAgB;IACvC,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AirflowProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AirflowProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAgBf,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,GAAI,8BAG7B,oBAAoB,
|
|
1
|
+
{"version":3,"file":"AirflowProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AirflowProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAgBf,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,GAAI,8BAG7B,oBAAoB,sBAuFtB,CAAC;AAEF,eAAO,MAAM,iBAAiB;sBA5GV,OAAO;WAClB,MAAM;yBACQ,MAAM,GAAG,IAAI;wBACd,IAAI;CA2GzB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ReactNode } from "react";
|
|
2
1
|
import { SxProps } from "@mui/material";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
3
|
export type DagState = "queued" | "running" | "success" | "failed";
|
|
4
4
|
export type TaskState = "success" | "running" | "failed" | "upstream_failed" | "skipped" | "up_for_retry" | "up_for_reschedule" | "queued" | "none" | "scheduled" | "deferred" | "removed" | "restarting";
|
|
5
5
|
export interface Dag {
|
|
@@ -63,7 +63,9 @@ export interface Logs {
|
|
|
63
63
|
continuationToken: string;
|
|
64
64
|
content: string;
|
|
65
65
|
}
|
|
66
|
-
export interface Column<T
|
|
66
|
+
export interface Column<T extends {
|
|
67
|
+
id: string | number;
|
|
68
|
+
}> {
|
|
67
69
|
name: string;
|
|
68
70
|
displayName: string;
|
|
69
71
|
fieldName: string;
|
|
@@ -74,6 +76,7 @@ export interface Column<T> {
|
|
|
74
76
|
searchStr?: string | (() => string);
|
|
75
77
|
colSx?: SxProps;
|
|
76
78
|
resizable?: boolean;
|
|
79
|
+
type?: "datetime" | "bool" | "text" | "number";
|
|
77
80
|
searchComponent?(): ReactNode;
|
|
78
81
|
cellContentComponent?(row: T): ReactNode;
|
|
79
82
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AACnE,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,iBAAiB,GACjB,SAAS,GACT,cAAc,GACd,mBAAmB,GACnB,QAAQ,GACR,MAAM,GACN,WAAW,GACX,UAAU,GACV,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,wBAAwB,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AACD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,IAAI;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CAAE;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC/C,eAAe,CAAC,IAAI,SAAS,CAAC;IAC9B,oBAAoB,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;CAC1C"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export declare const getSlugTableName: (name: string) => string;
|
|
|
12
12
|
export declare const getShiftedColor: (colorHex: string, shift: number) => string;
|
|
13
13
|
export declare const getSQLLabHref: (supersetURL: string, tableName: string, schema: string, dbName: string, autorun?: boolean, queryLimit?: number) => string;
|
|
14
14
|
export declare const getDashboardHref: (supersetURL: string, tableName: string) => string;
|
|
15
|
-
export declare function useDebounce(callback:
|
|
15
|
+
export declare function useDebounce<Args extends unknown[]>(callback: (...args: Args) => void, delay: number): (...args: Args) => void;
|
|
16
16
|
export declare const getResponsiveAnchorOrigin: (anchorEl: HTMLElement, elementHeight: number) => PopoverOrigin;
|
|
17
17
|
export declare const getResponsiveTransformOrigin: (anchorEl: HTMLElement, elementHeight: number) => PopoverOrigin;
|
|
18
18
|
export declare const gettextTS: (msgid: string) => string;
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,wBAAwB,CAAC;AAChC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,wBAAgB,YAAY,WAI3B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,QAI5C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,UAM9C;AAED,eAAO,MAAM,aAAa,GACxB,WAAW,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,2EAc5D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WAUtC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,WAK9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,WAyC5C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,OAAO,MAAM,WAkB9D,CAAC;AACF,eAAO,MAAM,aAAa,GACxB,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,UAAU,OAAO,EACjB,aAAa,MAAM,WAWpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,EAAE,WAAW,MAAM,WACR,CAAC;AAEhE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,wBAAwB,CAAC;AAChC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,wBAAgB,YAAY,WAI3B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,QAI5C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,UAM9C;AAED,eAAO,MAAM,aAAa,GACxB,WAAW,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,2EAc5D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WAUtC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,WAK9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,WAyC5C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,OAAO,MAAM,WAkB9D,CAAC;AACF,eAAO,MAAM,aAAa,GACxB,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,UAAU,OAAO,EACjB,aAAa,MAAM,WAWpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,EAAE,WAAW,MAAM,WACR,CAAC;AAEhE,wBAAgB,WAAW,CAAC,IAAI,SAAS,OAAO,EAAE,EAChD,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,EACjC,KAAK,EAAE,MAAM,aAKD,IAAI,UAUjB;AAED,eAAO,MAAM,yBAAyB,GACpC,UAAU,WAAW,EACrB,eAAe,MAAM,KAOhB,aACN,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,UAAU,WAAW,EACrB,eAAe,MAAM,KAOhB,aACN,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,MAAM,KACZ,MAMF,CAAC;AACF,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,MAM3D,CAAC;AACF,eAAO,MAAM,WAAW,GACtB,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,MAAM,KACZ,MAMF,CAAC;AACF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAM7C,CAAC;AACF,eAAO,MAAM,aAAa,GACxB,KAAK,MAAM,EAEX,KAAK,GAAG,EACR,QAAQ,OAAO,KACd,MAKF,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,MAKhD,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAK3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danikokonn/yarik-frontend-lib",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5-test1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"author": "",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@emotion/react": "^11.14.0",
|
|
30
30
|
"@emotion/styled": "^11.14.0",
|
|
31
|
-
"@mui/icons-material": "^
|
|
32
|
-
"@mui/material": "^
|
|
31
|
+
"@mui/icons-material": "^7.3.2",
|
|
32
|
+
"@mui/material": "^7.3.2",
|
|
33
33
|
"@mui/x-date-pickers": "^7.25.0",
|
|
34
34
|
"@types/react": "^18.3.18",
|
|
35
35
|
"@types/react-dom": "^18.3.5",
|
|
@@ -41,6 +41,8 @@
|
|
|
41
41
|
"react": "^18.3.1",
|
|
42
42
|
"react-dom": "^18.3.1",
|
|
43
43
|
"react-imask": "^7.6.1",
|
|
44
|
+
"react-json-tree": "^0.20.0",
|
|
45
|
+
"react-virtuoso": "^4.13.0",
|
|
44
46
|
"style-loader": "^4.0.0",
|
|
45
47
|
"transliteration": "^2.3.5"
|
|
46
48
|
},
|