@steroidsjs/core 3.0.0-beta.42 → 3.0.0-beta.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/docs-autogen-result.json +966 -995
  2. package/hooks/useApplication.d.ts +2 -1
  3. package/hooks/useApplication.js +1 -1
  4. package/hooks/useDataSelect.d.ts +3 -1
  5. package/hooks/useDataSelect.js +37 -23
  6. package/hooks/useFile.d.ts +28 -0
  7. package/hooks/useList.d.ts +6 -0
  8. package/package.json +2 -2
  9. package/ui/content/Accordion/Accordion.d.ts +11 -13
  10. package/ui/content/Alert/Alert.d.ts +13 -10
  11. package/ui/content/Avatar/Avatar.d.ts +13 -23
  12. package/ui/content/Badge/Badge.d.ts +14 -12
  13. package/ui/content/Calendar/Calendar.d.ts +1 -10
  14. package/ui/content/Card/Card.d.ts +31 -18
  15. package/ui/content/CopyToClipboard/CopyToClipboard.d.ts +19 -6
  16. package/ui/content/Detail/Detail.d.ts +1 -10
  17. package/ui/content/DropDown/DropDown.d.ts +9 -9
  18. package/ui/content/Icon/Icon.d.ts +4 -7
  19. package/ui/content/Menu/Menu.d.ts +2 -10
  20. package/ui/crud/Crud/Crud.d.ts +62 -0
  21. package/ui/form/BlankField/BlankField.d.ts +8 -1
  22. package/ui/form/Button/Button.d.ts +2 -16
  23. package/ui/form/CheckboxField/CheckboxField.d.ts +3 -12
  24. package/ui/form/CheckboxListField/CheckboxListField.d.ts +2 -11
  25. package/ui/form/DateRangeField/DateRangeField.d.ts +6 -0
  26. package/ui/form/DropDownField/DropDownField.d.ts +19 -16
  27. package/ui/form/DropDownField/DropDownField.js +26 -5
  28. package/ui/form/Field/fieldWrapper.d.ts +18 -4
  29. package/ui/form/FieldLayout/FieldLayout.d.ts +2 -11
  30. package/ui/form/FieldList/FieldList.d.ts +2 -20
  31. package/ui/form/FileField/FileField.d.ts +1 -11
  32. package/ui/form/Form/Form.d.ts +27 -15
  33. package/ui/form/HtmlField/HtmlField.d.ts +1 -10
  34. package/ui/form/ImageField/ImageField.d.ts +1 -10
  35. package/ui/form/InputField/InputField.d.ts +2 -2
  36. package/ui/form/NavField/NavField.d.ts +1 -1
  37. package/ui/form/RadioField/RadioField.d.ts +2 -11
  38. package/ui/form/RadioListField/RadioListField.d.ts +2 -11
  39. package/ui/form/RateField/RateField.d.ts +1 -10
  40. package/ui/form/ReCaptchaField/ReCaptchaField.d.ts +1 -6
  41. package/ui/form/SliderField/SliderField.d.ts +3 -12
  42. package/ui/form/SliderField/SliderField.js +1 -1
  43. package/ui/form/SwitcherField/SwitcherField.d.ts +1 -1
  44. package/ui/form/TimeField/TimeField.d.ts +1 -15
  45. package/ui/format/BooleanFormatter/BooleanFormatter.d.ts +7 -0
  46. package/ui/format/DateFormatter/DateFormatter.d.ts +5 -1
  47. package/ui/format/DateTimeFormatter/DateTimeFormatter.d.ts +5 -1
  48. package/ui/format/EnumFormatter/EnumFormatter.d.ts +4 -0
  49. package/ui/format/FileSize/FileSize.d.ts +1 -2
  50. package/ui/format/MoneyFormatter/MoneyFormatter.d.ts +3 -1
  51. package/ui/layout/Header/Header.d.ts +7 -3
  52. package/ui/layout/Loader/Loader.d.ts +6 -1
  53. package/ui/layout/Skeleton/Skeleton.d.ts +19 -0
  54. package/ui/list/Pagination/Pagination.d.ts +3 -0
  55. package/ui/list/SearchForm/SearchForm.d.ts +3 -0
  56. package/ui/modal/TwoFactorModal/TwoFactorModal.d.ts +7 -2
  57. package/ui/typography/Text/Text.d.ts +5 -8
  58. package/ui/typography/Title/Title.d.ts +5 -8
  59. package/ui/form/SliderField/demo/basic.d.ts +0 -8
  60. package/ui/form/SliderField/demo/basic.js +0 -37
  61. package/ui/form/SliderField/demo/disabled.d.ts +0 -8
  62. package/ui/form/SliderField/demo/disabled.js +0 -37
  63. package/ui/form/SliderField/demo/errors.d.ts +0 -8
  64. package/ui/form/SliderField/demo/errors.js +0 -37
  65. package/ui/form/SliderField/demo/marks.d.ts +0 -3
  66. package/ui/form/SliderField/demo/marks.js +0 -49
  67. package/ui/form/SliderField/demo/min-max.d.ts +0 -8
  68. package/ui/form/SliderField/demo/min-max.js +0 -37
  69. package/ui/form/SliderField/demo/onAfterChange.d.ts +0 -8
  70. package/ui/form/SliderField/demo/onAfterChange.js +0 -43
  71. package/ui/form/SliderField/demo/onChange.d.ts +0 -8
  72. package/ui/form/SliderField/demo/onChange.js +0 -43
  73. package/ui/form/SliderField/demo/range.d.ts +0 -8
  74. package/ui/form/SliderField/demo/range.js +0 -37
  75. package/ui/nav/Tree/demo/auto-open-levels.d.ts +0 -8
  76. package/ui/nav/Tree/demo/auto-open-levels.js +0 -38
  77. package/ui/nav/Tree/demo/basic.d.ts +0 -32
  78. package/ui/nav/Tree/demo/basic.js +0 -72
  79. package/ui/nav/Tree/demo/level.d.ts +0 -8
  80. package/ui/nav/Tree/demo/level.js +0 -38
  81. package/ui/nav/Tree/demo/routes.d.ts +0 -8
  82. package/ui/nav/Tree/demo/routes.js +0 -37
  83. package/ui/nav/Tree/demo/selected-item.d.ts +0 -8
  84. package/ui/nav/Tree/demo/selected-item.js +0 -38
@@ -3,14 +3,28 @@ import { IShowNotificationParameters } from '../../../actions/notifications';
3
3
  export interface ICopyToClipboardProps extends IUiComponent {
4
4
  /**
5
5
  * Значение, которое будет использоваться при копировании
6
- * @example value: 'Steroids.js'
6
+ * @example 'Steroids.js'
7
7
  */
8
8
  value: string;
9
9
  /**
10
- * Флаг, который отвечает за выключение функции копирования
11
- * @example disabled: false
10
+ * Переводит состояние компонента в выключенное
11
+ * @example true
12
12
  */
13
13
  disabled?: boolean;
14
+ /**
15
+ * Параметры для уведомления, которое появляется после копирования
16
+ * @example
17
+ * 'Some value has been copied to buffer'
18
+ * @example
19
+ * {
20
+ * message: 'Some value has been copied to buffer',
21
+ * level: 'info',
22
+ * params: {
23
+ * position: 'top-left',
24
+ * timeOut: 100,
25
+ * }
26
+ * }
27
+ */
14
28
  notification?: string | {
15
29
  message?: string;
16
30
  level?: string;
@@ -18,7 +32,7 @@ export interface ICopyToClipboardProps extends IUiComponent {
18
32
  };
19
33
  /**
20
34
  * Позволяет включить или выключить отображение иконки
21
- * @example showCopyIcon: false
35
+ * @example false
22
36
  */
23
37
  showCopyIcon?: boolean;
24
38
  /**
@@ -32,8 +46,7 @@ export interface ICopyToClipboardProps extends IUiComponent {
32
46
  */
33
47
  children?: React.ReactNode;
34
48
  /**
35
- * Callback функция, которая вызывается при копировании
36
- * @example {}
49
+ * Callback который вызывается при копировании
37
50
  */
38
51
  onCopy?: VoidFunction;
39
52
  }
@@ -31,7 +31,7 @@ export interface IDetailResponsive {
31
31
  */
32
32
  media: IDetailMedia[];
33
33
  }
34
- export interface IDetailProps {
34
+ export interface IDetailProps extends IUiComponent {
35
35
  /**
36
36
  * Размер ячеек в таблице
37
37
  * @example 'sm'
@@ -62,15 +62,6 @@ export interface IDetailProps {
62
62
  * @example [{label: __(('Edit')), onClick: () => props.onClick()}]
63
63
  */
64
64
  controls?: IControlItem[];
65
- /**
66
- * Переопределение view React компонента для кастомизации отображения
67
- * @example MyCustomView
68
- */
69
- view?: CustomView;
70
- /**
71
- * Дополнительный CSS-класс для таблицы
72
- */
73
- className?: CssClassName;
74
65
  /**
75
66
  * Дочерние компоненты
76
67
  */
@@ -1,25 +1,25 @@
1
1
  import * as React from 'react';
2
2
  import { IAbsolutePositioningInputProps, IAbsolutePositioningOutputProps } from '../../../hooks/useAbsolutePositioning';
3
3
  export interface IDropDownProps extends IAbsolutePositioningInputProps {
4
- /**
5
- * Дополнительный CSS-класс
6
- */
7
- className?: CssClassName;
8
4
  /**
9
5
  * Содержимое DropDown (компонент или jsx-код)
10
6
  * @example () => Component
11
7
  */
12
8
  content?: () => React.ReactNode;
13
- /**
14
- * Переопределение view React компонента для кастомизациии отображения
15
- * @example MyCustomView
16
- */
17
- view?: CustomView;
18
9
  /**
19
10
  * В каком случае закрывать DropDown. По-умолчанию - `click-away`
20
11
  * @example click-any
21
12
  */
22
13
  closeMode?: 'click-away' | 'click-any';
14
+ /**
15
+ * Переопределение view React компонента для кастомизациии отображения
16
+ * @example MyCustomView
17
+ */
18
+ view?: CustomView;
19
+ /**
20
+ * Дополнительный CSS-класс
21
+ */
22
+ className?: CssClassName;
23
23
  }
24
24
  export interface IDropDownViewProps extends IDropDownProps, IAbsolutePositioningOutputProps {
25
25
  /**
@@ -17,7 +17,7 @@
17
17
  *
18
18
  * That get the icon used <Icon name={'icon-name'} />
19
19
  */
20
- export interface IIconProps {
20
+ export interface IIconProps extends IUiComponent {
21
21
  /**
22
22
  * Имя иконки (латиницей). Импорт иконок происходит на старте приложения.
23
23
  * @example create
@@ -28,16 +28,13 @@ export interface IIconProps {
28
28
  * @example Добавить запись
29
29
  */
30
30
  title?: string;
31
- className?: CssClassName;
32
- /**
33
- * Переопределение view React компонента для кастомизации отображения
34
- * @example MyCustomView
35
- */
36
- view?: CustomView;
37
31
  /**
38
32
  * Должен ли данный элемент участвовать в последовательной навигации
39
33
  */
40
34
  tabIndex?: number;
35
+ /**
36
+ * Функция которая вызывается при клике по иконке
37
+ */
41
38
  onClick?: any;
42
39
  [key: string]: any;
43
40
  }
@@ -6,7 +6,7 @@ export interface IMenuItem {
6
6
  */
7
7
  label: string;
8
8
  /**
9
- * Функция при клике
9
+ * Функция вызываемая при клике
10
10
  */
11
11
  onClick: VoidFunction;
12
12
  /**
@@ -18,7 +18,7 @@ export interface IMenuItem {
18
18
  */
19
19
  hasBorder?: boolean;
20
20
  }
21
- export interface IMenuProps {
21
+ export interface IMenuProps extends IUiComponent {
22
22
  /**
23
23
  * Элементы меню
24
24
  */
@@ -27,10 +27,6 @@ export interface IMenuProps {
27
27
  * Кастомная иконка, по клику на которую открывается меню
28
28
  */
29
29
  icon?: string | React.ReactElement;
30
- /**
31
- * Дополнительный CSS-класс
32
- */
33
- className?: CssClassName;
34
30
  /**
35
31
  * Пропсы для DropDown
36
32
  */
@@ -39,10 +35,6 @@ export interface IMenuProps {
39
35
  * Переопределение view React элемента меню для кастомизации отображения
40
36
  */
41
37
  itemView?: CustomView | any;
42
- /**
43
- * Переопределение view React компонента для кастомизации отображения
44
- */
45
- view?: CustomView;
46
38
  }
47
39
  export type IMenuViewProps = IMenuProps;
48
40
  declare function Menu(props: IMenuProps): JSX.Element;
@@ -35,26 +35,88 @@ export interface ICrudClickProps {
35
35
  errorHandler?: (error: any, dispatch: any) => void;
36
36
  }
37
37
  export interface ICrudProps {
38
+ /**
39
+ * Id для Crud
40
+ */
38
41
  crudId?: string;
42
+ /**
43
+ * Режим работы Crud
44
+ */
39
45
  mode?: 'page' | 'modal';
46
+ /**
47
+ * Ссылка на rest
48
+ */
40
49
  restUrl?: string;
50
+ /**
51
+ * Методы rest api
52
+ * @example {}
53
+ */
41
54
  restApi?: IApiRest;
55
+ /**
56
+ * Первичный ключ
57
+ */
42
58
  primaryKey?: 'id' | string;
59
+ /**
60
+ * Ключ запроса
61
+ * @example {}
62
+ */
43
63
  queryKey?: 'id' | string;
64
+ /**
65
+ * Модель
66
+ * @example {}
67
+ */
44
68
  model?: string;
69
+ /**
70
+ * Модель используемая для поиска
71
+ */
45
72
  searchModel?: string;
73
+ /**
74
+ * Параметры для колонки index
75
+ */
46
76
  index?: boolean | ICrudItem;
77
+ /**
78
+ * Параметры для колонки create
79
+ */
47
80
  create?: boolean | ICrudItem;
81
+ /**
82
+ * Параметры для колонки update
83
+ */
48
84
  update?: boolean | ICrudItem;
85
+ /**
86
+ * Представление
87
+ */
49
88
  view?: boolean | ICrudItem;
89
+ /**
90
+ * Параметры для колонки delete
91
+ */
50
92
  delete?: boolean | ICrudItem;
93
+ /**
94
+ * Коллекция элементов
95
+ */
51
96
  items?: ICrudItem[] | {
52
97
  [key: string]: ICrudItem;
53
98
  };
99
+ /**
100
+ * Параметры Grid
101
+ */
54
102
  grid?: IGridProps | React.ReactNode;
103
+ /**
104
+ * Параметры формы
105
+ */
55
106
  form?: IFormProps | React.ReactNode;
107
+ /**
108
+ * Параметры для колонки detail
109
+ */
56
110
  detail?: any;
111
+ /**
112
+ * Представление для Crud
113
+ */
57
114
  crudView?: CustomView;
115
+ /**
116
+ * Функция-обработчик ошибок
117
+ * @param error - ошибка
118
+ * @param dispatch - диспатч
119
+ */
58
120
  errorHandler?: (error: any, dispatch: any) => void;
59
121
  [key: string]: any;
60
122
  }
@@ -1,7 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { IFieldWrapperInputProps } from '../Field/fieldWrapper';
3
- export interface IBlankFieldProps extends IFieldWrapperInputProps {
3
+ export interface IBlankFieldProps extends IFieldWrapperInputProps, IUiComponent {
4
+ /**
5
+ * Текст для отображения
6
+ * @example 'Hello World!'
7
+ */
4
8
  text?: string | React.ReactNode;
9
+ /**
10
+ * Дочерние элементы
11
+ */
5
12
  children?: React.ReactNode;
6
13
  }
7
14
  declare const _default: import("../Field/fieldWrapper").FieldWrapperComponent<IBlankFieldProps>;
@@ -10,7 +10,7 @@ export interface IButtonBadge {
10
10
  * Кнопка или ссылка. Используется в интерфейсе для выполнения какого-либо действия по клику (onClick),
11
11
  * смена страницы в рамках роутинга (goToRoute), переход по внешней ссылке (url) или отправки формы (submit form)
12
12
  */
13
- export interface IButtonProps {
13
+ export interface IButtonProps extends IUiComponent {
14
14
  /**
15
15
  * Текст кнопки или ссылки
16
16
  * @example Save
@@ -71,7 +71,7 @@ export interface IButtonProps {
71
71
  target?: string;
72
72
  /**
73
73
  * Ссылка на внешнюю страницу, используется совместно с свойством `link`
74
- * @example https://ya.ru
74
+ * @example https://kozhindev.com
75
75
  */
76
76
  url?: string;
77
77
  /**
@@ -96,20 +96,6 @@ export interface IButtonProps {
96
96
  * @example true
97
97
  */
98
98
  block?: boolean;
99
- /**
100
- * Объект CSS стилей
101
- * @example {width: '45%'}
102
- */
103
- style?: CustomStyle;
104
- /**
105
- * Дополнительный CSS-класс для кнопки или ссылки
106
- */
107
- className?: CssClassName;
108
- /**
109
- * Переопределение view React компонента для кастомизации отображения
110
- * @example MyCustomView
111
- */
112
- view?: CustomView;
113
99
  /**
114
100
  * Вложенные элементы
115
101
  */
@@ -4,24 +4,15 @@ import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../Field/fiel
4
4
  * CheckboxField
5
5
  * Одиночный чекбокс. Используется в формах для отметки булевого значения.
6
6
  */
7
- export interface ICheckboxFieldProps extends IFieldWrapperInputProps {
7
+ export interface ICheckboxFieldProps extends IFieldWrapperInputProps, IUiComponent {
8
8
  /**
9
- * Свойства для элемента \<input /\>
9
+ * Свойства для элемента input
10
10
  * @example {onKeyDown: ...}
11
11
  */
12
12
  inputProps?: any;
13
- /**
14
- * Дополнительный CSS-класс для элемента \<input /\>
15
- */
16
- className?: CssClassName;
17
- /**
18
- * Переопределение view React компонента для кастомизации отображения
19
- * @example MyCustomView
20
- */
21
- view?: CustomView;
22
13
  /**
23
14
  * Флаг определяющий включен ли элемент
24
- * @example {'true'}
15
+ * @example true
25
16
  */
26
17
  checked?: boolean;
27
18
  [key: string]: any;
@@ -7,21 +7,12 @@ import { ICheckboxFieldViewProps } from '../CheckboxField/CheckboxField';
7
7
  * CheckboxListField
8
8
  * Список с чекбоксами. Используется в формах для выбора нескольких значений.
9
9
  */
10
- export interface ICheckboxListFieldProps extends IFieldWrapperInputProps, IDataProviderConfig, Omit<IDataSelectConfig, 'items'> {
10
+ export interface ICheckboxListFieldProps extends IFieldWrapperInputProps, IDataProviderConfig, Omit<IDataSelectConfig, 'items'>, IUiComponent {
11
11
  /**
12
- * Свойства для элемента \<input /\>
12
+ * Свойства для элемента input
13
13
  * @example {onKeyDown: ...}
14
14
  */
15
15
  inputProps?: any;
16
- /**
17
- * Дополнительный CSS-класс для элемента отображения
18
- */
19
- className?: CssClassName;
20
- /**
21
- * Переопределение view React компонента для кастомизации отображения
22
- * @example MyCustomView
23
- */
24
- view?: CustomView;
25
16
  /**
26
17
  * Ориентация списка
27
18
  */
@@ -46,7 +46,13 @@ export interface IDateRangeFieldProps extends IDateInputStateInput, Omit<IFieldW
46
46
  * @example true
47
47
  */
48
48
  showRemove?: boolean;
49
+ /**
50
+ * Свойства для input элемента from
51
+ */
49
52
  inputPropsFrom?: any;
53
+ /**
54
+ * Свойства для input элемента to
55
+ */
50
56
  inputPropsTo?: any;
51
57
  /**
52
58
  * Свойства для компонента Calendar
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { IAccordionItemViewProps } from 'src/ui/content/Accordion/Accordion';
2
+ import { IAccordionItemViewProps } from '../../../ui/content/Accordion/Accordion';
3
3
  import { DataProviderItems, IDataProviderConfig } from '../../../hooks/useDataProvider';
4
4
  import { IDataSelectConfig } from '../../../hooks/useDataSelect';
5
5
  import { IFieldWrapperInputProps } from '../../form/Field/fieldWrapper';
@@ -26,13 +26,15 @@ export interface IDropDownFieldItemViewProps extends IAccordionItemViewProps, Pi
26
26
  hoveredId: string;
27
27
  onItemSelect: (id: PrimaryKey | any) => void;
28
28
  onItemHover: (id: PrimaryKey | any) => void;
29
+ isItemToSelectAll: boolean;
30
+ isSelectedAll: boolean;
29
31
  [key: string]: any;
30
32
  }
31
33
  /**
32
34
  * DropDownField
33
35
  * Выпадающий список для выбора одного или нескольких значений
34
36
  */
35
- export interface IDropDownFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'> {
37
+ export interface IDropDownFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'>, IUiComponent {
36
38
  /**
37
39
  * Placeholder подсказка
38
40
  * @example Your text...
@@ -48,26 +50,15 @@ export interface IDropDownFieldProps extends IFieldWrapperInputProps, Omit<IData
48
50
  * @example true
49
51
  */
50
52
  outline?: boolean;
51
- inputProps?: any;
52
- /**
53
- * Дополнительный CSS-класс
54
- */
55
- className?: CssClassName;
56
53
  /**
57
- * Объект CSS стилей
58
- * @example {width: '45%'}
54
+ * Параметры для элемента input
59
55
  */
60
- style?: CustomStyle;
56
+ inputProps?: any;
61
57
  /**
62
58
  * Показать иконку сброса для выбранных значений
63
59
  * @example true
64
60
  */
65
61
  showReset?: boolean;
66
- /**
67
- * Переопределение view React компонента для кастомизации отображения
68
- * @example MyCustomView
69
- */
70
- view?: CustomView;
71
62
  /**
72
63
  * Атрибут, в котором должны лежать дочерние элементы списка (для группировки)
73
64
  * Если аттрибут не задан - группировка не производится
@@ -89,9 +80,17 @@ export interface IDropDownFieldProps extends IFieldWrapperInputProps, Omit<IData
89
80
  items?: IDropDownFieldItem[] | DataProviderItems;
90
81
  /**
91
82
  * Нужно ли использовать троеточие при переполнении DropDownField
92
- * @example {'true'}
83
+ * @example true
93
84
  */
94
85
  showEllipses?: boolean;
86
+ /**
87
+ * Добавляет кнопку при нажатии на которую выбираются все элементы, работает только при multiple: true
88
+ * @example {label: 'All', id: 'all'}
89
+ */
90
+ itemToSelectAll?: boolean | {
91
+ label: string;
92
+ id: string;
93
+ };
95
94
  [key: string]: any;
96
95
  }
97
96
  export interface IDropDownFieldViewProps extends IDropDownFieldProps {
@@ -119,6 +118,10 @@ export interface IDropDownFieldViewProps extends IDropDownFieldProps {
119
118
  isSearchAutoFocus?: boolean;
120
119
  primaryKey: string;
121
120
  items: IDropDownFieldItem[];
121
+ itemToSelectAll: null | {
122
+ label: string;
123
+ id: string;
124
+ };
122
125
  }
123
126
  declare const _default: import("../../form/Field/fieldWrapper").FieldWrapperComponent<IDropDownFieldProps>;
124
127
  export default _default;
@@ -51,6 +51,7 @@ var react_1 = __importStar(require("react"));
51
51
  var react_use_1 = require("react-use");
52
52
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
53
53
  var includes_1 = __importDefault(require("lodash-es/includes"));
54
+ var isPlainObject_1 = __importDefault(require("lodash-es/isPlainObject"));
54
55
  var hooks_1 = require("../../../hooks");
55
56
  var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
56
57
  exports.GROUP_CONTENT_TYPE = 'group';
@@ -58,12 +59,25 @@ exports.CHECKBOX_CONTENT_TYPE = 'checkbox';
58
59
  exports.RADIO_CONTENT_TYPE = 'radio';
59
60
  exports.ICON_CONTENT_TYPE = 'icon';
60
61
  exports.IMG_CONTENT_TYPE = 'img';
62
+ var normalizeItemToSelectAll = function (itemToSelectAll) {
63
+ if (!itemToSelectAll) {
64
+ return null;
65
+ }
66
+ if (typeof itemToSelectAll !== 'boolean' && (0, isPlainObject_1["default"])(itemToSelectAll)) {
67
+ return itemToSelectAll;
68
+ }
69
+ return {
70
+ id: 'all',
71
+ label: __('Все')
72
+ };
73
+ };
61
74
  function DropDownField(props) {
62
75
  var components = (0, hooks_1.useComponents)();
63
76
  // Query state
64
77
  var _a = (0, react_1.useState)(''), query = _a[0], setQuery = _a[1];
65
78
  var hasGroup = !!props.groupAttribute;
66
79
  var _b = react_1["default"].useState([]), selectedAccordionItems = _b[0], setSelectedAccordionItems = _b[1];
80
+ var normalizedItemToSelectAll = react_1["default"].useMemo(function () { return normalizeItemToSelectAll(props.itemToSelectAll); }, [props.itemToSelectAll]);
67
81
  var toggleCollapse = function (indexSelected) {
68
82
  if (selectedAccordionItems.includes(indexSelected)) {
69
83
  var newState = __spreadArray([], selectedAccordionItems, true);
@@ -97,7 +111,7 @@ function DropDownField(props) {
97
111
  items: items,
98
112
  sourceItems: sourceItems,
99
113
  inputValue: props.input.value
100
- }), isOpened = _d.isOpened, setIsOpened = _d.setIsOpened, setIsFocused = _d.setIsFocused, hoveredId = _d.hoveredId, setHoveredId = _d.setHoveredId, selectedIds = _d.selectedIds, setSelectedIds = _d.setSelectedIds, selectedItems = _d.selectedItems;
114
+ }), isOpened = _d.isOpened, setIsOpened = _d.setIsOpened, setIsFocused = _d.setIsFocused, hoveredId = _d.hoveredId, setHoveredId = _d.setHoveredId, selectedIds = _d.selectedIds, setSelectedIds = _d.setSelectedIds, selectedItems = _d.selectedItems, setSelectedAll = _d.setSelectedAll, isSelectedAll = _d.isSelectedAll;
101
115
  var onOpen = (0, react_1.useCallback)(function () {
102
116
  setQuery('');
103
117
  setIsFocused(true);
@@ -108,8 +122,12 @@ function DropDownField(props) {
108
122
  setHoveredId(id);
109
123
  }, [setHoveredId]);
110
124
  var onItemSelect = (0, react_1.useCallback)(function (id) {
125
+ if (id === (normalizedItemToSelectAll === null || normalizedItemToSelectAll === void 0 ? void 0 : normalizedItemToSelectAll.id)) {
126
+ setSelectedAll();
127
+ return;
128
+ }
111
129
  setSelectedIds(id);
112
- }, [setSelectedIds]);
130
+ }, [normalizedItemToSelectAll, setSelectedAll, setSelectedIds]);
113
131
  var onItemRemove = (0, react_1.useCallback)(function (id) {
114
132
  setSelectedIds(selectedIds.filter(function (i) { return i !== id; }));
115
133
  }, [selectedIds, setSelectedIds]);
@@ -165,7 +183,9 @@ function DropDownField(props) {
165
183
  onItemSelect: onItemSelect,
166
184
  isShowMore: (0, includes_1["default"])(selectedAccordionItems || [], item.id),
167
185
  childIndex: item.id,
168
- toggleCollapse: toggleCollapse
186
+ toggleCollapse: toggleCollapse,
187
+ isItemToSelectAll: item.id === (normalizedItemToSelectAll === null || normalizedItemToSelectAll === void 0 ? void 0 : normalizedItemToSelectAll.id),
188
+ isSelectedAll: isSelectedAll
169
189
  }); };
170
190
  var renderItem = function (item) {
171
191
  if (hasGroup && Array.isArray(item[props.groupAttribute])) {
@@ -182,7 +202,7 @@ function DropDownField(props) {
182
202
  return components.ui.renderView(props.view || 'form.DropDownFieldView', __assign(__assign({}, props), { isAutoComplete: isAutoComplete, items: items, hoveredId: hoveredId, selectedIds: selectedIds, forwardedRef: forwardedRef, searchInputProps: searchInputProps, isOpened: isOpened, isLoading: isLoading, onOpen: onOpen, selectedItems: selectedItems,
183
203
  // TODO onFocus
184
204
  // TODO onBlur
185
- onReset: onReset, onClose: onClose, renderItem: renderItem, onItemRemove: onItemRemove, hasGroup: hasGroup }));
205
+ onReset: onReset, onClose: onClose, renderItem: renderItem, onItemRemove: onItemRemove, hasGroup: hasGroup, itemToSelectAll: normalizedItemToSelectAll }));
186
206
  }
187
207
  DropDownField.defaultProps = {
188
208
  primaryKey: 'id',
@@ -195,6 +215,7 @@ DropDownField.defaultProps = {
195
215
  autoComplete: false,
196
216
  showReset: false,
197
217
  multiple: false,
198
- isSearchAutoFocus: true
218
+ isSearchAutoFocus: true,
219
+ itemToSelectAll: false
199
220
  };
200
221
  exports["default"] = (0, fieldWrapper_1["default"])('DropDownField', DropDownField);
@@ -44,7 +44,13 @@ export interface IFieldWrapperInputProps {
44
44
  * Input ID для связи поля с label
45
45
  */
46
46
  id?: string;
47
+ /**
48
+ * Значение для поля
49
+ */
47
50
  value?: any;
51
+ /**
52
+ * Callback-функция, которая вызывается при изменении данных
53
+ */
48
54
  onChange?: (...args: any[]) => any;
49
55
  /**
50
56
  * Ошибки в поле
@@ -52,10 +58,6 @@ export interface IFieldWrapperInputProps {
52
58
  */
53
59
  errors?: string[];
54
60
  date?: any;
55
- /**
56
- * Темная тема
57
- */
58
- dark?: boolean;
59
61
  /**
60
62
  * Размер поля
61
63
  */
@@ -71,9 +73,21 @@ export interface IFieldWrapperInputProps {
71
73
  [key: string]: any;
72
74
  }
73
75
  export interface IFieldWrapperOutputProps {
76
+ /**
77
+ * Id формы
78
+ */
74
79
  formId?: string;
80
+ /**
81
+ * Id компонента
82
+ */
75
83
  componentId?: string;
84
+ /**
85
+ * Коллекция ошибок
86
+ */
76
87
  errors?: string[];
88
+ /**
89
+ * Параметры для input элемента
90
+ */
77
91
  input?: {
78
92
  name?: string;
79
93
  value?: any;
@@ -3,11 +3,7 @@ import * as React from 'react';
3
3
  * FieldLayout
4
4
  * Специальный шаблон для поля, который настраивает его расположение внутри формы, рендерит лейбл, подсказки и ошибки
5
5
  */
6
- export interface IFieldLayoutProps {
7
- /**
8
- * Дополнительный CSS-класс
9
- */
10
- className?: CssClassName;
6
+ export interface IFieldLayoutProps extends IUiComponent {
11
7
  /**
12
8
  * Название поля либо отмена отображение поля (false)
13
9
  * @example 'Visible'
@@ -31,14 +27,9 @@ export interface IFieldLayoutProps {
31
27
  errors?: string[];
32
28
  /**
33
29
  * Отображать ли состояние successful на поле
34
- * @example {'true'}
30
+ * @example 'true'
35
31
  */
36
32
  successful?: boolean;
37
- /**
38
- * Переопределение view React компонента для кастомизации отображения
39
- * @example MyCustomView
40
- */
41
- view?: CustomView;
42
33
  [key: string]: any;
43
34
  }
44
35
  export interface IFieldLayoutViewProps {