@steroidsjs/core 3.0.0-beta.15 → 3.0.0-beta.16

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 (97) hide show
  1. package/hoc/bem.d.ts +1 -1
  2. package/index.d.ts +2 -2
  3. package/package.json +1 -1
  4. package/reducers/router.js +2 -2
  5. package/ui/content/Accordion/Accordion.d.ts +2 -2
  6. package/ui/content/Alert/Alert.d.ts +2 -2
  7. package/ui/content/Avatar/AvatarGroup.d.ts +3 -3
  8. package/ui/content/Badge/Badge.d.ts +2 -2
  9. package/ui/content/Card/Card.d.ts +2 -2
  10. package/ui/content/CopyToClipboard/CopyToClipboard.d.ts +1 -1
  11. package/ui/content/Detail/Detail.d.ts +1 -1
  12. package/ui/content/DropDown/DropDown.d.ts +1 -1
  13. package/ui/content/Icon/Icon.d.ts +2 -2
  14. package/ui/form/Button/Button.d.ts +2 -2
  15. package/ui/form/CheckboxField/CheckboxField.d.ts +5 -0
  16. package/ui/form/CheckboxField/CheckboxField.js +30 -6
  17. package/ui/form/CheckboxListField/CheckboxListField.d.ts +7 -1
  18. package/ui/form/CheckboxListField/CheckboxListField.js +32 -7
  19. package/ui/form/DateField/DateField.d.ts +1 -1
  20. package/ui/form/DateRangeField/DateRangeField.d.ts +1 -1
  21. package/ui/form/DateTimeField/DateTimeField.d.ts +1 -1
  22. package/ui/form/DateTimeRangeField/DateTimeRangeField.d.ts +1 -1
  23. package/ui/form/DropDownField/DropDownField.d.ts +24 -21
  24. package/ui/form/DropDownField/DropDownField.js +87 -6
  25. package/ui/form/Field/fieldWrapper.d.ts +1 -1
  26. package/ui/form/FieldLayout/FieldLayout.d.ts +2 -2
  27. package/ui/form/FieldList/FieldList.d.ts +3 -3
  28. package/ui/form/FieldSet/FieldSet.d.ts +1 -1
  29. package/ui/form/Form/Form.d.ts +2 -2
  30. package/ui/form/InputField/InputField.d.ts +2 -2
  31. package/ui/form/RadioField/RadioField.d.ts +35 -0
  32. package/ui/form/RadioField/RadioField.js +61 -0
  33. package/ui/form/RadioField/index.d.ts +2 -0
  34. package/ui/{list/LayoutNames/demo/basic.js → form/RadioField/index.js} +2 -7
  35. package/ui/form/RadioListField/RadioListField.d.ts +6 -0
  36. package/ui/form/RadioListField/RadioListField.js +31 -2
  37. package/ui/form/TimeField/TimeField.d.ts +1 -1
  38. package/ui/form/index.d.ts +3 -1
  39. package/ui/form/index.js +4 -1
  40. package/ui/layout/Header/Header.d.ts +1 -1
  41. package/ui/layout/Loader/Loader.d.ts +1 -1
  42. package/ui/layout/Notifications/Notifications.d.ts +1 -1
  43. package/ui/layout/Skeleton/Skeleton.d.ts +2 -2
  44. package/ui/list/CheckboxColumn/CheckboxColumn.d.ts +1 -1
  45. package/ui/list/ControlsColumn/ControlsColumn.d.ts +1 -1
  46. package/ui/list/Grid/Grid.d.ts +1 -1
  47. package/ui/list/Grid/demo/sort.js +4 -2
  48. package/ui/list/Pagination/Pagination.d.ts +16 -6
  49. package/ui/list/Pagination/Pagination.js +15 -7
  50. package/ui/list/PaginationSize/demo/basic.js +2 -3
  51. package/ui/list/PaginationSize/demo/size.js +2 -3
  52. package/ui/list/SearchForm/demo/basic.js +5 -2
  53. package/ui/list/Steps/Steps.d.ts +3 -3
  54. package/ui/modal/TwoFactorModal/TwoFactorModal.d.ts +1 -1
  55. package/ui/nav/Breadcrumbs/Breadcrumbs.d.ts +9 -0
  56. package/ui/nav/Controls/Controls.d.ts +3 -3
  57. package/ui/nav/Nav/Nav.d.ts +2 -2
  58. package/ui/nav/Tree/Tree.d.ts +1 -1
  59. package/ui/typography/Text/Text.d.ts +2 -2
  60. package/ui/typography/Title/Title.d.ts +2 -2
  61. package/ui/form/CheckboxListField/demo/basic.d.ts +0 -9
  62. package/ui/form/CheckboxListField/demo/basic.js +0 -43
  63. package/ui/form/CheckboxListField/demo/disabled.d.ts +0 -8
  64. package/ui/form/CheckboxListField/demo/disabled.js +0 -38
  65. package/ui/form/CheckboxListField/demo/errors.d.ts +0 -8
  66. package/ui/form/CheckboxListField/demo/errors.js +0 -38
  67. package/ui/form/CheckboxListField/demo/required.d.ts +0 -8
  68. package/ui/form/CheckboxListField/demo/required.js +0 -38
  69. package/ui/list/LayoutNames/demo/basic.d.ts +0 -7
  70. package/ui/list/List/demo/basic.d.ts +0 -12
  71. package/ui/list/List/demo/basic.js +0 -61
  72. package/ui/list/List/demo/condition.d.ts +0 -8
  73. package/ui/list/List/demo/condition.js +0 -90
  74. package/ui/list/List/demo/empty.d.ts +0 -8
  75. package/ui/list/List/demo/empty.js +0 -36
  76. package/ui/list/List/demo/layout.d.ts +0 -8
  77. package/ui/list/List/demo/layout.js +0 -49
  78. package/ui/list/List/demo/load-more.d.ts +0 -8
  79. package/ui/list/List/demo/load-more.js +0 -45
  80. package/ui/list/List/demo/pagination.d.ts +0 -8
  81. package/ui/list/List/demo/pagination.js +0 -45
  82. package/ui/list/List/demo/search-form.d.ts +0 -30
  83. package/ui/list/List/demo/search-form.js +0 -107
  84. package/ui/list/List/demo/sort.d.ts +0 -17
  85. package/ui/list/List/demo/sort.js +0 -92
  86. package/ui/list/Pagination/demo/basic.d.ts +0 -8
  87. package/ui/list/Pagination/demo/basic.js +0 -45
  88. package/ui/list/Pagination/demo/load-more.d.ts +0 -8
  89. package/ui/list/Pagination/demo/load-more.js +0 -41
  90. package/ui/list/Pagination/demo/sizes.d.ts +0 -8
  91. package/ui/list/Pagination/demo/sizes.js +0 -48
  92. package/ui/nav/Breadcrumbs/demo/basic.d.ts +0 -8
  93. package/ui/nav/Breadcrumbs/demo/basic.js +0 -37
  94. package/ui/nav/Breadcrumbs/demo/items.d.ts +0 -8
  95. package/ui/nav/Breadcrumbs/demo/items.js +0 -42
  96. package/ui/nav/Breadcrumbs/demo/page-title.d.ts +0 -8
  97. package/ui/nav/Breadcrumbs/demo/page-title.js +0 -37
package/hoc/bem.d.ts CHANGED
@@ -5,7 +5,7 @@ import { IBem } from '../hooks/useBem';
5
5
  * Прокидывает утилиту `bem` для правильной генерации CSS классов по методологии БЭМ (блок, элемент, модификатор)
6
6
  */
7
7
  export interface IBemHocInput {
8
- style?: any;
8
+ style?: CustomStyle;
9
9
  }
10
10
  export interface IBemHocOutput extends IComponentsHocOutput {
11
11
  bem?: IBem;
package/index.d.ts CHANGED
@@ -57,8 +57,8 @@ declare type FormLayoutName = 'default' | 'vertical' | 'inline' | string;
57
57
  */
58
58
  declare type FormLayout = FormLayoutName | boolean | {
59
59
  layout?: FormLayoutName | boolean,
60
- className?: string,
61
- style?: any,
60
+ className?: CssClassName,
61
+ style?: CustomStyle,
62
62
  label?: boolean,
63
63
  cols?: number[],
64
64
  [key: string]: any,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.0-beta.15",
3
+ "version": "3.0.0-beta.16",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -135,13 +135,13 @@ exports.normalizeRoutes = normalizeRoutes;
135
135
  */
136
136
  var findRecursive = function (item, predicate, pathItems) {
137
137
  if (pathItems === void 0) { pathItems = null; }
138
- if (((0, isFunction_1["default"])(predicate) && predicate(item)) || predicate === item.id) {
138
+ if (((0, isFunction_1["default"])(predicate) && predicate(item)) || predicate === (item === null || item === void 0 ? void 0 : item.id)) {
139
139
  if (pathItems) {
140
140
  pathItems.push(item);
141
141
  }
142
142
  return item;
143
143
  }
144
- if (Array.isArray((item.items))) {
144
+ if (Array.isArray((item === null || item === void 0 ? void 0 : item.items))) {
145
145
  var foundedItem = item.items.find(function (subItem) { return (0, exports.findRecursive)(subItem, predicate, pathItems); }) || null;
146
146
  if (foundedItem && pathItems) {
147
147
  pathItems.push(item);
@@ -4,8 +4,8 @@ export interface IAccordionIcon {
4
4
  close: React.ReactElement | string;
5
5
  }
6
6
  export interface IAccordionCommonProps {
7
- view?: any;
8
- style?: React.CSSProperties;
7
+ view?: CustomView;
8
+ style?: CustomStyle;
9
9
  children?: any;
10
10
  /**
11
11
  * Дополнительный CSS-класс
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  export interface IAlertProps {
3
- view?: any;
3
+ view?: CustomView;
4
4
  className?: CssClassName;
5
5
  /**
6
6
  * Дочерние элементы
@@ -19,7 +19,7 @@ export interface IAlertProps {
19
19
  * @example {'Please, check your email.'}
20
20
  */
21
21
  description?: string;
22
- style?: React.CSSProperties;
22
+ style?: CustomStyle;
23
23
  /**
24
24
  * Нужно ли отображать кнопку, чтобы закрыть Оповещение
25
25
  */
@@ -1,8 +1,8 @@
1
- import React from 'react';
1
+ /// <reference types="react" />
2
2
  export interface AvatarGroupProps {
3
- view?: any;
3
+ view?: CustomView;
4
4
  children?: CustomView[];
5
- style?: React.CSSProperties;
5
+ style?: CustomStyle;
6
6
  maxCount?: number;
7
7
  }
8
8
  export type IAvatarGroupViewProps = AvatarGroupProps;
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ /// <reference types="react" />
2
2
  interface ICounter {
3
3
  isEnable: boolean;
4
4
  content: string | number;
@@ -37,7 +37,7 @@ export interface IBadgeProps {
37
37
  * Нужно ли отображать счетчик
38
38
  */
39
39
  counter: boolean | ICounter;
40
- style?: React.CSSProperties;
40
+ style?: CustomStyle;
41
41
  /**
42
42
  * Размер для badge
43
43
  */
@@ -40,11 +40,11 @@ export interface ICardProps {
40
40
  * Коллекция ссылок
41
41
  * @example {}
42
42
  */
43
- links: ILinkProps[];
43
+ links?: ILinkProps[];
44
44
  /**
45
45
  * Коллекция кнопок
46
46
  */
47
- buttons: IButtonProps[];
47
+ buttons?: IButtonProps[];
48
48
  /**
49
49
  * Объект CSS стилей
50
50
  * @example {width: '30px'}
@@ -8,7 +8,7 @@ interface ICopyToClipboardProps extends IBemHocOutput, IConnectHocOutput {
8
8
  level?: string;
9
9
  timeOut?: string;
10
10
  };
11
- className?: string;
11
+ className?: CssClassName;
12
12
  children?: any;
13
13
  }
14
14
  export default function CopyToClipboard(props: ICopyToClipboardProps): any;
@@ -70,7 +70,7 @@ export interface IDetailProps {
70
70
  /**
71
71
  * Дополнительный CSS-класс для таблицы
72
72
  */
73
- className?: string;
73
+ className?: CssClassName;
74
74
  /**
75
75
  * Дочерние компоненты
76
76
  */
@@ -14,7 +14,7 @@ export interface IDropDownProps extends IAbsolutePositioningInputProps {
14
14
  * Переопределение view React компонента для кастомизациии отображения
15
15
  * @example MyCustomView
16
16
  */
17
- view?: any;
17
+ view?: CustomView;
18
18
  /**
19
19
  * В каком случае закрывать DropDown. По-умолчанию - `click-away`
20
20
  * @example click-any
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ /// <reference types="react" />
2
2
  /**
3
3
  * Install the latest free version of Font Awesome via yarn:
4
4
  * ```
@@ -33,7 +33,7 @@ export interface IIconProps {
33
33
  * Переопределение view React компонента для кастомизации отображения
34
34
  * @example MyCustomView
35
35
  */
36
- view?: React.ComponentType;
36
+ view?: CustomView;
37
37
  /**
38
38
  * Должен ли данный элемент участвовать в последовательной навигации
39
39
  */
@@ -100,7 +100,7 @@ export interface IButtonProps {
100
100
  * Объект CSS стилей
101
101
  * @example {width: '45%'}
102
102
  */
103
- style?: any;
103
+ style?: CustomStyle;
104
104
  /**
105
105
  * Дополнительный CSS-класс для кнопки или ссылки
106
106
  */
@@ -109,7 +109,7 @@ export interface IButtonProps {
109
109
  * Переопределение view React компонента для кастомизации отображения
110
110
  * @example MyCustomView
111
111
  */
112
- view?: React.ComponentType;
112
+ view?: CustomView;
113
113
  /**
114
114
  * Вложенные элементы
115
115
  */
@@ -19,6 +19,11 @@ export interface ICheckboxFieldProps extends IFieldWrapperInputProps {
19
19
  * @example MyCustomView
20
20
  */
21
21
  view?: CustomView;
22
+ /**
23
+ * Флаг определяющий включен ли элемент
24
+ * @example {'true'}
25
+ */
26
+ checked?: boolean;
22
27
  [key: string]: any;
23
28
  }
24
29
  export interface ICheckboxFieldViewProps extends ICheckboxFieldProps, IFieldWrapperOutputProps {
@@ -10,22 +10,46 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
13
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
38
  };
16
39
  exports.__esModule = true;
17
- var react_use_1 = require("react-use");
40
+ var React = __importStar(require("react"));
18
41
  var react_1 = require("react");
19
42
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
20
43
  var hooks_1 = require("../../../hooks");
21
44
  function CheckboxField(props) {
22
45
  var components = (0, hooks_1.useComponents)();
23
- (0, react_use_1.useMount)(function () {
24
- if (props.input.value === undefined) {
25
- props.input.onChange(false);
46
+ var onChangeHandler = React.useCallback(function () {
47
+ props.input.onChange(!props.input.value);
48
+ if (props.onChange) {
49
+ props.onChange();
26
50
  }
27
- });
28
- var inputProps = (0, react_1.useMemo)(function () { return (__assign({ name: props.input.name, type: 'checkbox', checked: !!props.input.value, onChange: function () { return props.input.onChange(!props.input.value); }, disabled: props.disabled }, props.inputProps)); }, [props.disabled, props.input, props.inputProps]);
51
+ }, [props]);
52
+ var inputProps = (0, react_1.useMemo)(function () { return (__assign({ name: props.input.name, type: 'checkbox', checked: !!props.input.value, onChange: onChangeHandler, disabled: props.disabled }, props.inputProps)); }, [onChangeHandler, props.disabled, props.input.name, props.input.value, props.inputProps]);
29
53
  return components.ui.renderView(props.view || 'form.CheckboxFieldView', __assign(__assign({}, props), { inputProps: inputProps }));
30
54
  }
31
55
  CheckboxField.defaultProps = {
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../../../ui/form/Field/fieldWrapper';
3
3
  import { IDataProviderConfig } from '../../../hooks/useDataProvider';
4
4
  import { IDataSelectConfig } from '../../../hooks/useDataSelect';
5
+ import { ICheckboxFieldViewProps } from '../CheckboxField/CheckboxField';
5
6
  /**
6
7
  * CheckboxListField
7
8
  * Список с чекбоксами. Используется в формах для выбора нескольких значений.
@@ -21,6 +22,10 @@ export interface ICheckboxListFieldProps extends IFieldWrapperInputProps, IDataP
21
22
  * @example MyCustomView
22
23
  */
23
24
  view?: CustomView;
25
+ /**
26
+ * Ориентация списка
27
+ */
28
+ orientation?: 'horizontal' | 'vertical';
24
29
  [key: string]: any;
25
30
  }
26
31
  export interface ICheckboxListFieldViewProps extends IFieldWrapperOutputProps {
@@ -38,7 +43,8 @@ export interface ICheckboxListFieldViewProps extends IFieldWrapperOutputProps {
38
43
  }[];
39
44
  selectedIds: (PrimaryKey | any)[];
40
45
  onItemSelect: (id: PrimaryKey | any) => void;
41
- onItemHover: (id: PrimaryKey | any) => void;
46
+ orientation?: 'horizontal' | 'vertical';
47
+ renderCheckbox: (checkboxProps: ICheckboxFieldViewProps) => JSX.Element;
42
48
  }
43
49
  declare const _default: import("../../../ui/form/Field/fieldWrapper").FieldWrapperComponent<ICheckboxListFieldProps>;
44
50
  export default _default;
@@ -10,34 +10,56 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
13
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
38
  };
16
39
  exports.__esModule = true;
40
+ var React = __importStar(require("react"));
17
41
  var react_1 = require("react");
18
42
  var react_use_1 = require("react-use");
19
43
  var hooks_1 = require("../../../hooks");
20
44
  var fieldWrapper_1 = __importDefault(require("../../../ui/form/Field/fieldWrapper"));
21
45
  function CheckboxListField(props) {
22
46
  var components = (0, hooks_1.useComponents)();
47
+ var inputSelectedIds = (0, react_1.useMemo)(function () { return props.selectedIds || [].concat(props.input.value || []); }, [props.input.value, props.selectedIds]);
23
48
  // Data Provider
24
49
  var items = (0, hooks_1.useDataProvider)({
25
50
  items: props.items
26
51
  }).items;
27
52
  // Data select
28
53
  var _a = (0, hooks_1.useDataSelect)({
54
+ selectedIds: inputSelectedIds,
29
55
  multiple: props.multiple,
30
- selectedIds: props.selectedIds,
31
56
  primaryKey: props.primaryKey,
32
57
  items: items,
33
58
  inputValue: props.input.value
34
- }), hoveredId = _a.hoveredId, setHoveredId = _a.setHoveredId, selectedIds = _a.selectedIds, setSelectedIds = _a.setSelectedIds;
59
+ }), selectedIds = _a.selectedIds, setSelectedIds = _a.setSelectedIds;
35
60
  var onItemSelect = (0, react_1.useCallback)(function (id) {
36
61
  setSelectedIds(id);
37
62
  }, [setSelectedIds]);
38
- var onItemHover = (0, react_1.useCallback)(function (id) {
39
- setHoveredId(id);
40
- }, [setHoveredId]);
41
63
  var inputProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.inputProps), { type: 'checkbox', name: props.input.name, disabled: props.disabled })); }, [props.disabled, props.input, props.inputProps]);
42
64
  // Sync with form
43
65
  (0, react_1.useEffect)(function () {
@@ -54,12 +76,15 @@ function CheckboxListField(props) {
54
76
  onReset();
55
77
  }
56
78
  }, [onReset, prevInputValue, props.input.value, selectedIds.length]);
57
- return components.ui.renderView(props.view || 'form.CheckboxListFieldView', __assign(__assign({}, props), { items: items, inputProps: inputProps, onItemSelect: onItemSelect, selectedIds: selectedIds, onItemHover: onItemHover, hoveredId: hoveredId }));
79
+ var CheckboxFieldView = components.ui.getView('form.CheckboxFieldView');
80
+ var renderCheckbox = function (checkboxProps) { return React.createElement(CheckboxFieldView, __assign({}, checkboxProps)); };
81
+ return components.ui.renderView(props.view || 'form.CheckboxListFieldView', __assign(__assign({}, props), { items: items, inputProps: inputProps, onItemSelect: onItemSelect, selectedIds: selectedIds, renderCheckbox: renderCheckbox }));
58
82
  }
59
83
  CheckboxListField.defaultProps = {
60
84
  disabled: false,
61
85
  required: false,
62
86
  className: '',
63
- multiple: true
87
+ multiple: false,
88
+ orientation: 'vertical'
64
89
  };
65
90
  exports["default"] = (0, fieldWrapper_1["default"])('CheckboxListField', CheckboxListField);
@@ -9,7 +9,7 @@ export interface IDateFieldProps extends IDateInputStateInput {
9
9
  * Объект CSS стилей
10
10
  * @example {width: '45%'}
11
11
  */
12
- style?: any;
12
+ style?: CustomStyle;
13
13
  /**
14
14
  * Переопределение view React компонента для кастомизации отображения
15
15
  * @example MyCustomView
@@ -49,7 +49,7 @@ export interface IDateRangeFieldProps extends IDateInputStateInput, Omit<IFieldW
49
49
  * Объект CSS стилей
50
50
  * @example {width: '45%'}
51
51
  */
52
- style?: any;
52
+ style?: CustomStyle;
53
53
  /**
54
54
  * Иконка
55
55
  * @example calendar-day
@@ -5,7 +5,7 @@ export interface IDateTimeFieldProps extends IDateInputStateInput {
5
5
  * Объект CSS стилей
6
6
  * @example {width: '45%'}
7
7
  */
8
- style?: any;
8
+ style?: CustomStyle;
9
9
  /**
10
10
  * Дополнительный CSS-класс
11
11
  */
@@ -35,7 +35,7 @@ export interface IDateTimeRangeFieldProps extends Omit<IDateInputStateInput, 'in
35
35
  * Объект CSS стилей
36
36
  * @example {width: '45%'}
37
37
  */
38
- style?: any;
38
+ style?: CustomStyle;
39
39
  /**
40
40
  * Свойства для поля 'from'
41
41
  */
@@ -1,14 +1,33 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
+ import { IAccordionCommonViewProps } from 'src/ui/content/Accordion/Accordion';
2
3
  import { IDataProviderConfig } from '../../../hooks/useDataProvider';
3
4
  import { IDataSelectConfig } from '../../../hooks/useDataSelect';
4
5
  import { IFieldWrapperInputProps } from '../../form/Field/fieldWrapper';
6
+ export declare const GROUP_CONTENT_TYPE = "group";
7
+ export declare const CHECKBOX_CONTENT_TYPE = "checkbox";
8
+ export declare const RADIO_CONTENT_TYPE = "radio";
9
+ export declare const ICON_CONTENT_TYPE = "icon";
10
+ export declare const IMG_CONTENT_TYPE = "img";
5
11
  export type ContentType = 'checkbox' | 'radio' | 'icon' | 'img';
12
+ export type ItemSwitchType = ContentType | 'group' | string;
6
13
  export interface IDropDownFieldItem {
7
- id: number;
14
+ id: number | string;
8
15
  label: string;
9
16
  contentType?: ContentType;
10
17
  contentSrc?: 'string' | React.ReactElement;
11
18
  }
19
+ export interface IDropDownFieldItemViewProps extends IAccordionCommonViewProps, Pick<IDropDownFieldProps, 'itemsContent'> {
20
+ item: IDropDownFieldItem;
21
+ size: Size;
22
+ type: ItemSwitchType;
23
+ selectedIds: (PrimaryKey | any)[];
24
+ groupAttribute: 'string';
25
+ primaryKey: PrimaryKey;
26
+ hoveredId: string;
27
+ onItemSelect: (id: PrimaryKey | any) => void;
28
+ onItemHover: (id: PrimaryKey | any) => void;
29
+ [key: string]: any;
30
+ }
12
31
  /**
13
32
  * DropDownField
14
33
  * Выпадающий список для выбора одного или нескольких значений
@@ -38,7 +57,7 @@ export interface IDropDownFieldProps extends IFieldWrapperInputProps, Omit<IData
38
57
  * Объект CSS стилей
39
58
  * @example {width: '45%'}
40
59
  */
41
- style?: any;
60
+ style?: CustomStyle;
42
61
  /**
43
62
  * Показать иконку сброса для выбранных значений
44
63
  * @example true
@@ -93,28 +112,12 @@ export interface IDropDownFieldViewProps extends IDropDownFieldProps {
93
112
  isOpened?: boolean;
94
113
  isLoading?: boolean;
95
114
  onReset: () => void;
96
- onItemSelect: (id: PrimaryKey | any) => void;
97
- onItemHover: (id: PrimaryKey | any) => void;
98
- onItemRemove: (id: PrimaryKey | any) => void;
99
- onClose: () => void;
100
115
  onOpen: () => void;
116
+ renderItem: (item: IDropDownFieldItem) => JSX.Element;
117
+ onItemRemove: (id: PrimaryKey | any) => void;
101
118
  isAutoComplete?: boolean;
102
119
  isSearchAutoFocus?: boolean;
103
120
  primaryKey: string;
104
121
  }
105
- export interface IDropDownItemViewProps extends Pick<IDropDownFieldProps, 'itemsContent'>, Pick<IFieldWrapperInputProps, 'size'> {
106
- item: {
107
- id: number;
108
- label: string;
109
- contentType?: ContentType;
110
- contentSrc?: 'string' | React.ReactElement;
111
- };
112
- primaryKey: PrimaryKey;
113
- hoveredId: string;
114
- selectedIds: (PrimaryKey | any)[];
115
- onItemSelect: (id: PrimaryKey | any) => void;
116
- onItemHover: (id: PrimaryKey | any) => void;
117
- groupAttribute?: string;
118
- }
119
122
  declare const _default: import("../../form/Field/fieldWrapper").FieldWrapperComponent<IDropDownFieldProps>;
120
123
  export default _default;
@@ -10,31 +10,85 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
37
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
38
+ if (ar || !(i in from)) {
39
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
40
+ ar[i] = from[i];
41
+ }
42
+ }
43
+ return to.concat(ar || Array.prototype.slice.call(from));
44
+ };
13
45
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
46
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
47
  };
16
48
  exports.__esModule = true;
17
- var react_1 = require("react");
49
+ exports.IMG_CONTENT_TYPE = exports.ICON_CONTENT_TYPE = exports.RADIO_CONTENT_TYPE = exports.CHECKBOX_CONTENT_TYPE = exports.GROUP_CONTENT_TYPE = void 0;
50
+ var react_1 = __importStar(require("react"));
18
51
  var react_use_1 = require("react-use");
19
52
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
53
+ var includes_1 = __importDefault(require("lodash-es/includes"));
20
54
  var hooks_1 = require("../../../hooks");
21
55
  var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
56
+ exports.GROUP_CONTENT_TYPE = 'group';
57
+ exports.CHECKBOX_CONTENT_TYPE = 'checkbox';
58
+ exports.RADIO_CONTENT_TYPE = 'radio';
59
+ exports.ICON_CONTENT_TYPE = 'icon';
60
+ exports.IMG_CONTENT_TYPE = 'img';
22
61
  function DropDownField(props) {
23
62
  var components = (0, hooks_1.useComponents)();
24
63
  // Query state
25
64
  var _a = (0, react_1.useState)(''), query = _a[0], setQuery = _a[1];
65
+ var hasGroup = !!props.groupAttribute;
66
+ var _b = react_1["default"].useState([]), selectedAccordionItems = _b[0], setSelectedAccordionItems = _b[1];
67
+ var toggleCollapse = function (indexSelected) {
68
+ if (selectedAccordionItems.includes(indexSelected)) {
69
+ var newState = __spreadArray([], selectedAccordionItems, true);
70
+ var indexInArray = selectedAccordionItems.indexOf(indexSelected);
71
+ newState.splice(indexInArray, 1);
72
+ setSelectedAccordionItems(newState);
73
+ }
74
+ else {
75
+ var newState = __spreadArray([], selectedAccordionItems, true);
76
+ newState.push(indexSelected);
77
+ setSelectedAccordionItems(newState);
78
+ }
79
+ };
26
80
  var inputSelectedIds = (0, react_1.useMemo)(function () { return props.selectedIds || [].concat(props.input.value || []); }, [props.input.value, props.selectedIds]);
27
81
  // Data provider
28
- var _b = (0, hooks_1.useDataProvider)({
82
+ var _c = (0, hooks_1.useDataProvider)({
29
83
  items: props.items,
30
84
  dataProvider: props.dataProvider,
31
85
  autoComplete: props.autoComplete,
32
86
  autoFetch: props.autoFetch,
33
87
  query: query,
34
88
  initialSelectedIds: inputSelectedIds
35
- }), items = _b.items, isLoading = _b.isLoading, isAutoComplete = _b.isAutoComplete, sourceItems = _b.sourceItems;
89
+ }), items = _c.items, isLoading = _c.isLoading, isAutoComplete = _c.isAutoComplete, sourceItems = _c.sourceItems;
36
90
  // Data select
37
- var _c = (0, hooks_1.useDataSelect)({
91
+ var _d = (0, hooks_1.useDataSelect)({
38
92
  multiple: props.multiple,
39
93
  selectFirst: props.selectFirst,
40
94
  selectedIds: inputSelectedIds,
@@ -43,7 +97,7 @@ function DropDownField(props) {
43
97
  items: items,
44
98
  sourceItems: sourceItems,
45
99
  inputValue: props.input.value
46
- }), isOpened = _c.isOpened, setIsOpened = _c.setIsOpened, setIsFocused = _c.setIsFocused, hoveredId = _c.hoveredId, setHoveredId = _c.setHoveredId, selectedIds = _c.selectedIds, setSelectedIds = _c.setSelectedIds, selectedItems = _c.selectedItems;
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;
47
101
  var onOpen = (0, react_1.useCallback)(function () {
48
102
  setQuery('');
49
103
  setIsFocused(true);
@@ -98,10 +152,37 @@ function DropDownField(props) {
98
152
  onReset();
99
153
  }
100
154
  }, [onReset, prevInputValue, props.input.value, selectedIds.length]);
155
+ var renderItemView = function (item, type, src) { return components.ui.renderView('form.DropDownFieldItemView', {
156
+ item: __assign(__assign({}, item), { contentSrc: src, contentType: type }),
157
+ selectedIds: selectedIds,
158
+ size: props.size,
159
+ groupAttribute: props.groupAttribute,
160
+ hoveredId: hoveredId,
161
+ primaryKey: props.primaryKey,
162
+ type: type,
163
+ itemsContent: props.itemsContent,
164
+ onItemHover: onItemHover,
165
+ onItemSelect: onItemSelect,
166
+ isShowMore: (0, includes_1["default"])(selectedAccordionItems || [], item.id),
167
+ childIndex: item.id,
168
+ toggleCollapse: toggleCollapse
169
+ }); };
170
+ var renderItem = function (item) {
171
+ if (hasGroup && Array.isArray(item[props.groupAttribute])) {
172
+ return renderItemView(item, 'group', item[props.groupAttribute]);
173
+ }
174
+ if (item.contentType) {
175
+ return renderItemView(item, item.contentType, item.contentSrc);
176
+ }
177
+ if (props.itemsContent) {
178
+ return renderItemView(item, props.itemsContent.type, props.itemsContent.src);
179
+ }
180
+ return renderItemView(item, 'default', null);
181
+ };
101
182
  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,
102
183
  // TODO onFocus
103
184
  // TODO onBlur
104
- onItemHover: onItemHover, onItemSelect: onItemSelect, onItemRemove: onItemRemove, onReset: onReset, onClose: onClose }));
185
+ onReset: onReset, onClose: onClose, renderItem: renderItem, onItemRemove: onItemRemove, hasGroup: hasGroup }));
105
186
  }
106
187
  DropDownField.defaultProps = {
107
188
  primaryKey: 'id',
@@ -89,5 +89,5 @@ export interface FieldWrapperComponent<T> {
89
89
  displayName: any;
90
90
  defaultProps: any;
91
91
  }
92
- export default function fieldWrapper<T = any>(componentId: any, Component: any, optionsConfig?: IFieldWrapperOptions): FieldWrapperComponent<T>;
92
+ export default function fieldWrapper<T = any>(componentId: string, Component: any, optionsConfig?: IFieldWrapperOptions): FieldWrapperComponent<T>;
93
93
  export {};
@@ -52,8 +52,8 @@ export interface IFieldLayoutViewProps {
52
52
  size: Size;
53
53
  layout?: {
54
54
  layout: FormLayoutName | boolean;
55
- className?: string;
56
- style?: any;
55
+ className?: CssClassName;
56
+ style?: CustomStyle;
57
57
  label: boolean;
58
58
  cols: number[];
59
59
  [key: string]: any;