@steroidsjs/core 3.0.0-beta.99 → 3.0.0

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 (168) hide show
  1. package/actions/notifications.js +7 -1
  2. package/actions/router.js +16 -2
  3. package/components/HttpComponent.d.ts +7 -7
  4. package/components/JwtHttpComponent.d.ts +2 -2
  5. package/components/LocaleComponent.d.ts +6 -6
  6. package/components/MetaComponent.d.ts +90 -1
  7. package/components/MetricsComponent.js +2 -1
  8. package/components/ResourceComponent.d.ts +4 -4
  9. package/components/UiComponent.d.ts +7 -7
  10. package/components/WebSocketComponent.d.ts +11 -11
  11. package/docs-autogen-result.json +15147 -6371
  12. package/en.json +151 -92
  13. package/hooks/index.d.ts +4 -3
  14. package/hooks/index.js +7 -5
  15. package/hooks/useAbsolutePositioning.js +0 -1
  16. package/hooks/useAddressBar.js +0 -1
  17. package/hooks/useApplication.js +8 -1
  18. package/hooks/useDataProvider.d.ts +17 -2
  19. package/hooks/useDataSelect.js +21 -4
  20. package/hooks/useFetch.js +6 -1
  21. package/hooks/useFile.d.ts +1 -0
  22. package/hooks/useFile.js +2 -0
  23. package/hooks/useList.d.ts +53 -14
  24. package/hooks/useList.js +31 -70
  25. package/hooks/useTree.d.ts +104 -0
  26. package/hooks/useTree.js +169 -0
  27. package/index.d.ts +3 -3
  28. package/package.json +94 -93
  29. package/reducers/router.d.ts +2 -1
  30. package/ui/content/Accordion/Accordion.d.ts +8 -5
  31. package/ui/content/Accordion/Accordion.js +6 -1
  32. package/ui/content/Accordion/AccordionItem.d.ts +2 -2
  33. package/ui/content/Accordion/AccordionItem.js +1 -12
  34. package/ui/content/Alert/Alert.d.ts +5 -2
  35. package/ui/content/Alert/Alert.js +13 -12
  36. package/ui/content/Avatar/Avatar.js +18 -12
  37. package/ui/content/Badge/Badge.d.ts +5 -1
  38. package/ui/content/Badge/Badge.js +14 -12
  39. package/ui/content/Calendar/Calendar.d.ts +6 -1
  40. package/ui/content/Calendar/Calendar.js +19 -12
  41. package/ui/content/CalendarSystem/CalendarSystem.d.ts +40 -18
  42. package/ui/content/CalendarSystem/CalendarSystem.js +65 -76
  43. package/ui/content/CalendarSystem/hooks/useCalendarControls.d.ts +1 -2
  44. package/ui/content/CalendarSystem/hooks/useCalendarControls.js +14 -17
  45. package/ui/content/CalendarSystem/hooks/useCalendarSystemEventGroupModals.js +11 -3
  46. package/ui/content/CalendarSystem/hooks/useCalendarSystemModals.js +2 -2
  47. package/ui/content/CalendarSystem/hooks/useCalendarType.d.ts +5 -0
  48. package/ui/content/CalendarSystem/hooks/useCalendarType.js +22 -0
  49. package/ui/content/CalendarSystem/hooks/useEventsFromDate.d.ts +5 -0
  50. package/ui/content/CalendarSystem/hooks/useEventsFromDate.js +49 -0
  51. package/ui/content/CalendarSystem/hooks/{useMonthCalendar.d.ts → useMonthGrid.d.ts} +4 -5
  52. package/ui/content/CalendarSystem/hooks/{useMonthCalendar.js → useMonthGrid.js} +24 -15
  53. package/ui/content/CalendarSystem/hooks/{useWeekCalendar.d.ts → useWeekGrid.d.ts} +6 -5
  54. package/ui/content/CalendarSystem/hooks/useWeekGrid.js +72 -0
  55. package/ui/content/CalendarSystem/utils/utils.d.ts +8 -0
  56. package/ui/content/CalendarSystem/utils/utils.js +27 -1
  57. package/ui/content/Card/Card.d.ts +33 -27
  58. package/ui/content/Card/Card.js +1 -12
  59. package/ui/content/Chart/Chart.d.ts +38 -8
  60. package/ui/content/Chart/Chart.js +16 -12
  61. package/ui/content/Chat/Chat.d.ts +90 -5
  62. package/ui/content/Chat/Chat.js +40 -14
  63. package/ui/content/Chat/constants/timeTemplatesAndUnits.d.ts +1 -0
  64. package/ui/content/Chat/constants/timeTemplatesAndUnits.js +2 -1
  65. package/ui/content/Chat/hooks/useChat.d.ts +5 -6
  66. package/ui/content/Chat/hooks/useChat.js +49 -3
  67. package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.d.ts +5 -0
  68. package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.js +61 -0
  69. package/ui/content/Chat/utils/getMessagesGroupedByDate.d.ts +1 -0
  70. package/ui/content/Chat/utils/getMessagesGroupedByDate.js +3 -2
  71. package/ui/content/Chat/utils/index.d.ts +4 -2
  72. package/ui/content/Chat/utils/index.js +6 -1
  73. package/ui/content/Chat/utils/isTodayMessage.d.ts +1 -0
  74. package/ui/content/Chat/utils/isTodayMessage.js +13 -0
  75. package/ui/content/CopyToClipboard/CopyToClipboard.d.ts +3 -3
  76. package/ui/content/CopyToClipboard/CopyToClipboard.js +10 -12
  77. package/ui/content/Dashboard/Dashboard.d.ts +5 -2
  78. package/ui/content/Dashboard/Dashboard.js +27 -3
  79. package/ui/content/Detail/Detail.d.ts +15 -2
  80. package/ui/content/Detail/Detail.js +12 -1
  81. package/ui/content/DropDown/DropDown.d.ts +1 -1
  82. package/ui/content/DropDown/DropDown.js +16 -4
  83. package/ui/content/Icon/Icon.js +13 -15
  84. package/ui/content/Kanban/Kanban.d.ts +15 -4
  85. package/ui/content/Kanban/Kanban.js +8 -12
  86. package/ui/content/Kanban/hooks/useKanban.d.ts +33 -26
  87. package/ui/content/Menu/Menu.js +10 -12
  88. package/ui/content/Slider/Slider.js +1 -12
  89. package/ui/crud/index.d.ts +3 -0
  90. package/ui/form/AutoCompleteField/AutoCompleteField.js +1 -1
  91. package/ui/form/Button/Button.js +8 -2
  92. package/ui/form/CheckboxField/CheckboxField.d.ts +1 -0
  93. package/ui/form/CheckboxField/CheckboxField.js +2 -2
  94. package/ui/form/CheckboxListField/CheckboxListField.d.ts +18 -2
  95. package/ui/form/CheckboxListField/CheckboxListField.js +1 -1
  96. package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +67 -0
  97. package/ui/form/CheckboxTreeField/CheckboxTreeField.js +126 -0
  98. package/ui/form/CheckboxTreeField/index.d.ts +2 -0
  99. package/ui/form/CheckboxTreeField/index.js +7 -0
  100. package/ui/form/DateField/DateField.js +4 -1
  101. package/ui/form/DateField/useDateRange.d.ts +1 -0
  102. package/ui/form/DateField/useDateRange.js +13 -2
  103. package/ui/form/DateRangeField/DateRangeField.d.ts +34 -1
  104. package/ui/form/DateRangeField/DateRangeField.js +59 -8
  105. package/ui/form/DateTimeField/DateTimeField.d.ts +10 -0
  106. package/ui/form/DateTimeField/DateTimeField.js +11 -3
  107. package/ui/form/DateTimeRangeField/DateTimeRangeField.d.ts +25 -1
  108. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +66 -13
  109. package/ui/form/DropDownField/DropDownField.d.ts +23 -3
  110. package/ui/form/DropDownField/DropDownField.js +1 -1
  111. package/ui/form/EmailField/EmailField.d.ts +6 -0
  112. package/ui/form/EmailField/EmailField.js +0 -4
  113. package/ui/form/Field/Field.d.ts +9 -1
  114. package/ui/form/Field/Field.js +1 -1
  115. package/ui/form/Field/fieldWrapper.d.ts +9 -1
  116. package/ui/form/FieldList/FieldList.d.ts +13 -7
  117. package/ui/form/FieldList/FieldList.js +30 -4
  118. package/ui/form/FileField/FileField.js +5 -0
  119. package/ui/form/Form/Form.d.ts +26 -3
  120. package/ui/form/Form/Form.js +5 -3
  121. package/ui/form/ImageField/ImageField.d.ts +9 -1
  122. package/ui/form/InputField/InputField.d.ts +5 -2
  123. package/ui/form/InputField/hooks/useInputFieldWarningByType.js +1 -0
  124. package/ui/form/NumberField/NumberField.js +34 -7
  125. package/ui/form/SliderField/SliderField.d.ts +10 -2
  126. package/ui/form/TimeRangeField/TimeRangeField.d.ts +10 -1
  127. package/ui/form/TimeRangeField/TimeRangeField.js +3 -1
  128. package/ui/form/WizardForm/WizardForm.d.ts +119 -0
  129. package/ui/form/WizardForm/WizardForm.js +167 -0
  130. package/ui/form/WizardForm/index.d.ts +2 -0
  131. package/ui/form/WizardForm/index.js +7 -0
  132. package/ui/form/WizardForm/utils.d.ts +12 -0
  133. package/ui/form/WizardForm/utils.js +111 -0
  134. package/ui/form/index.d.ts +3 -1
  135. package/ui/form/index.js +4 -1
  136. package/ui/layout/ProgressBar/ProgressBar.js +8 -2
  137. package/ui/layout/Skeleton/Skeleton.d.ts +3 -1
  138. package/ui/layout/Tooltip/Tooltip.d.ts +4 -1
  139. package/ui/list/ControlsColumn/ControlsColumn.d.ts +17 -3
  140. package/ui/list/FlexGrid/FlexGrid.d.ts +11 -1
  141. package/ui/list/Grid/Grid.d.ts +42 -6
  142. package/ui/list/Grid/Grid.js +1 -2
  143. package/ui/list/LayoutNames/LayoutNames.d.ts +11 -1
  144. package/ui/list/Steps/Steps.d.ts +19 -7
  145. package/ui/list/Steps/Steps.js +46 -26
  146. package/ui/list/TreeTable/TreeTable.d.ts +34 -33
  147. package/ui/list/TreeTable/TreeTable.js +19 -8
  148. package/ui/modal/Modal/Modal.d.ts +7 -1
  149. package/ui/nav/Breadcrumbs/Breadcrumbs.d.ts +11 -1
  150. package/ui/nav/ButtonGroup/ButtonGroup.d.ts +13 -4
  151. package/ui/nav/Controls/Controls.d.ts +7 -1
  152. package/ui/nav/Link/Link.d.ts +1 -1
  153. package/ui/nav/Nav/Nav.d.ts +19 -4
  154. package/ui/nav/Router/Router.d.ts +19 -3
  155. package/ui/nav/Router/Router.js +11 -6
  156. package/ui/nav/Router/helpers.d.ts +2 -2
  157. package/ui/nav/Router/helpers.js +39 -7
  158. package/ui/nav/Tree/Tree.d.ts +32 -62
  159. package/ui/nav/Tree/Tree.js +18 -165
  160. package/utils/calculateComponentAbsolutePosition.js +74 -24
  161. package/utils/calendar.d.ts +8 -0
  162. package/utils/calendar.js +76 -1
  163. package/utils/data.js +1 -0
  164. package/utils/form.d.ts +1 -0
  165. package/utils/form.js +16 -1
  166. package/ui/content/CalendarSystem/hooks/useWeekCalendar.js +0 -86
  167. package/utils/list.d.ts +0 -1
  168. package/utils/list.js +0 -5
@@ -40,9 +40,18 @@ export interface ITimeRangeFieldProps extends IDateInputStateInput, Omit<IFieldW
40
40
  placeholder?: any;
41
41
  /**
42
42
  * Свойства для компонента DayPickerInput
43
- * @example {dayPickerProps: {showWeekNumbers: true}}
43
+ * @example
44
+ * {
45
+ * dayPickerProps: {
46
+ * showWeekNumbers: true
47
+ * }
44
48
  */
45
49
  pickerProps?: any;
50
+ /**
51
+ * Устанавливать ли фокус и показывать панель времени сразу после рендера страницы
52
+ * @example true
53
+ */
54
+ hasInitialFocus?: boolean;
46
55
  [key: string]: any;
47
56
  }
48
57
  export interface ITimeRangeFieldViewProps extends IDateInputStateOutput, Pick<ITimeRangeFieldProps, 'size' | 'errors' | 'showRemove' | 'className' | 'timePanelViewProps' | 'disabled' | 'style' | 'icon'>, Omit<IFieldWrapperOutputProps, 'input'> {
@@ -62,7 +62,8 @@ function TimeRangeField(props) {
62
62
  inputPropsTo: inputPropsTo,
63
63
  inputFrom: props.inputFrom,
64
64
  inputTo: props.inputTo,
65
- useSmartFocus: true
65
+ useSmartFocus: false,
66
+ hasInitialFocus: props.hasInitialFocus
66
67
  }), focus = _c.focus, onClose = _c.onClose, onClear = _c.onClear, extendedInputPropsFrom = _c.extendedInputPropsFrom, extendedInputPropsTo = _c.extendedInputPropsTo;
67
68
  var timePanelFromViewProps = (0, react_1.useMemo)(function () { return (__assign({ onNow: onNowFrom, onClose: onCloseFrom, value: inputPropsFrom.value, onSelect: inputPropsFrom.onChange }, props.timePanelViewProps)); }, [inputPropsFrom.onChange, inputPropsFrom.value, onCloseFrom, onNowFrom, props.timePanelViewProps]);
68
69
  var timePanelToViewProps = (0, react_1.useMemo)(function () { return (__assign({ onNow: onNowTo, onClose: onCloseTo, value: inputPropsTo.value, onSelect: inputPropsTo.onChange }, props.timePanelViewProps)); }, [inputPropsTo.onChange, inputPropsTo.value, onCloseTo, onNowTo, props.timePanelViewProps]);
@@ -73,6 +74,7 @@ TimeRangeField.defaultProps = {
73
74
  displayFormat: 'HH:mm',
74
75
  required: false,
75
76
  showRemove: true,
77
+ hasInitialFocus: false,
76
78
  type: 'text',
77
79
  valueFormat: 'HH:mm',
78
80
  useUTC: true,
@@ -0,0 +1,119 @@
1
+ import React from 'react';
2
+ import { IFieldProps } from '@steroidsjs/core/ui/form/Field/Field';
3
+ import { IStepsProps, IStepItem } from '../../list/Steps/Steps';
4
+ import { IButtonProps } from '../Button/Button';
5
+ import { IFormProps } from '../Form/Form';
6
+ export interface IWizardStepItem extends Partial<IStepItem> {
7
+ fields?: IFieldProps[];
8
+ component?: React.ReactNode;
9
+ stepLabel?: string;
10
+ }
11
+ /**
12
+ * WizardForm
13
+ *
14
+ * Компонент для создания пошаговой формы. Предоставляет управление и синхронизацию состояния формы,
15
+ * а также список шагов формы для удобной навигации.
16
+ * Поля для шагов можно передавать как в виде компонентов, так и в виде объекта с названием поля.
17
+ * Позволяет выполнять отправку данных формы на сервер с возможностью валидации и перехода к неверно заполненным полям.
18
+ *
19
+ */
20
+ export interface IWizardFormProps extends IUiComponent {
21
+ /**
22
+ * Идентификатор формы
23
+ * @example WizardForm
24
+ */
25
+ formId: string;
26
+ /**
27
+ * Коллекция полей и аттрибутов для каждого шага формы. Можно передавать как компонент, так и объект с полями.
28
+ * Главное, чтобы внутри шага использовался один из способов.
29
+ * @example
30
+ * [
31
+ * {
32
+ * title: 'Step 1',
33
+ * fields: [
34
+ * {
35
+ * attribute: 'category',
36
+ * component: 'DropDownField'
37
+ * },
38
+ * ],
39
+ * },
40
+ * {
41
+ * title: 'Step 2',
42
+ * component: (
43
+ * <InputField
44
+ * attribute='address'
45
+ * />
46
+ * )
47
+ * }
48
+ * ]
49
+ */
50
+ steps: IWizardStepItem[];
51
+ /**
52
+ * Свойства для Form
53
+ */
54
+ formProps: Omit<IFormProps, 'formId' | 'fields' | 'useRedux'> & {
55
+ submitButtonLabel: string;
56
+ };
57
+ /**
58
+ * Обработчик, который вызывается после перехода на следующий шаг формы
59
+ * @param {number} value
60
+ * @return {void}
61
+ */
62
+ onNextStep?: (nextStep: number) => void;
63
+ /**
64
+ * Обработчик, который вызывается после возврата на предыдущий шаг формы
65
+ * @param {number} value
66
+ * @return {void}
67
+ */
68
+ onPrevStep?: (prevStep: number) => void;
69
+ /**
70
+ * Свойства для кнопки возврата
71
+ */
72
+ prevStepButtonProps?: IButtonProps;
73
+ /**
74
+ * Свойства для кнопки продолжить/отправить
75
+ */
76
+ nextStepButtonProps?: IButtonProps;
77
+ /**
78
+ * Свойства для Steps
79
+ */
80
+ stepsProps?: Pick<IStepsProps, 'stepItems'>;
81
+ /**
82
+ * Ориентация списка шагов формы
83
+ * @example 'horizontal'
84
+ */
85
+ stepTitleOrientation?: Orientation;
86
+ /**
87
+ * Показывать ли шаги
88
+ * @example true
89
+ */
90
+ showSteps?: boolean;
91
+ }
92
+ export interface IWizardFormViewProps extends Pick<IWizardFormProps, 'prevStepButtonProps' | 'nextStepButtonProps' | 'stepsProps' | 'showSteps'> {
93
+ currentStep: number;
94
+ stepTitle: string;
95
+ stepItems: IStepItem[];
96
+ renderStep: (header: React.ReactNode, buttons: React.ReactNode, viewProps?: IUiComponent) => JSX.Element;
97
+ isLastStep?: boolean;
98
+ onPrevStep?: () => void;
99
+ totalSteps?: number;
100
+ }
101
+ declare function WizardForm(props: IWizardFormProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
102
+ declare namespace WizardForm {
103
+ var defaultProps: {
104
+ formProps: {
105
+ label: string;
106
+ };
107
+ prevStepButtonProps: {
108
+ color: string;
109
+ icon: string;
110
+ outline: boolean;
111
+ label: string;
112
+ };
113
+ nextStepButtonProps: {
114
+ label: string;
115
+ };
116
+ showSteps: boolean;
117
+ };
118
+ }
119
+ export default WizardForm;
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
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
+ };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ exports.__esModule = true;
49
+ var react_1 = __importStar(require("react"));
50
+ var has_1 = __importDefault(require("lodash-es/has"));
51
+ var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
52
+ var indexOf_1 = __importDefault(require("lodash-es/indexOf"));
53
+ var Steps_1 = require("../../list/Steps/Steps");
54
+ var hooks_1 = require("../../../hooks");
55
+ var Form_1 = __importDefault(require("../Form/Form"));
56
+ var utils_1 = require("./utils");
57
+ var INITIAL_STEP = 0;
58
+ function WizardForm(props) {
59
+ var components = (0, hooks_1.useComponents)();
60
+ var _a = (0, react_1.useState)(INITIAL_STEP), currentStep = _a[0], setCurrentStep = _a[1];
61
+ var _b = (0, react_1.useState)([]), errorSteps = _b[0], setErrorSteps = _b[1];
62
+ var _c = (0, react_1.useState)((0, utils_1.normalizeSteps)(props.steps)), steps = _c[0], setSteps = _c[1];
63
+ var totalSteps = (0, react_1.useMemo)(function () { return props.steps.length || 0; }, [props.steps.length]);
64
+ var isLastStep = (0, react_1.useMemo)(function () { return currentStep === totalSteps - 1; }, [currentStep, totalSteps]);
65
+ var activeStep = (0, react_1.useMemo)(function () { return props.steps[currentStep]; }, [currentStep, props.steps]);
66
+ var fieldStepMap = (0, react_1.useMemo)(function () { return (0, utils_1.generateFieldStepMap)(props.steps || []); }, [props.steps]);
67
+ (0, react_1.useEffect)(function () {
68
+ if (!(0, isEmpty_1["default"])(errorSteps)) {
69
+ setCurrentStep(errorSteps[0]);
70
+ }
71
+ }, [errorSteps]);
72
+ var onNextStep = (0, react_1.useCallback)(function () {
73
+ var nextStep = Math.min(currentStep + 1, totalSteps - 1);
74
+ if (props.onNextStep) {
75
+ props.onNextStep(nextStep);
76
+ }
77
+ setSteps(function (prevStepsState) { return (0, utils_1.getModifiedSteps)(prevStepsState, errorSteps, currentStep, nextStep); });
78
+ setCurrentStep(nextStep);
79
+ }, [currentStep, totalSteps, props, errorSteps]);
80
+ var onPrevStep = (0, react_1.useCallback)(function () {
81
+ var prevStep = Math.max(currentStep - 1, INITIAL_STEP);
82
+ if (props.onPrevStep) {
83
+ props.onPrevStep(prevStep);
84
+ }
85
+ setSteps(function (prevStepsState) { return (0, utils_1.getModifiedSteps)(prevStepsState, errorSteps, currentStep, prevStep); });
86
+ setCurrentStep(prevStep);
87
+ }, [currentStep, props, errorSteps]);
88
+ var onSubmit = (0, react_1.useCallback)(function (data) {
89
+ if (isLastStep) {
90
+ return props.formProps.onSubmit ? props.formProps.onSubmit(data) : null;
91
+ }
92
+ return onNextStep();
93
+ }, [isLastStep, onNextStep, props.formProps]);
94
+ var onAfterSubmit = (0, react_1.useCallback)(function (cleanedValues, data, response) {
95
+ if (props.formProps.onAfterSubmit && !!props.formProps.onAfterSubmit(cleanedValues, data, response)) {
96
+ return false;
97
+ }
98
+ if (data.errors) {
99
+ var stepsIdsWithErrorFields_1 = Object.keys(data.errors)
100
+ .reduce(function (acc, errorField) {
101
+ if ((0, has_1["default"])(fieldStepMap, errorField)) {
102
+ acc.push(fieldStepMap[errorField]);
103
+ }
104
+ return acc;
105
+ }, [])
106
+ .sort();
107
+ if (!(0, isEmpty_1["default"])(stepsIdsWithErrorFields_1)) {
108
+ var firstStepErrorField_1 = stepsIdsWithErrorFields_1[0];
109
+ setSteps(function (prevStepsState) { return __spreadArray([], prevStepsState, true).map(function (step) {
110
+ if ((0, indexOf_1["default"])(stepsIdsWithErrorFields_1, step.id) !== -1) {
111
+ step.status = step.id === firstStepErrorField_1 ? Steps_1.ACTIVE_STATUS : Steps_1.ERROR_STATUS;
112
+ }
113
+ else {
114
+ step.status = Steps_1.FINISH_STATUS;
115
+ }
116
+ return step;
117
+ }); });
118
+ setErrorSteps(stepsIdsWithErrorFields_1);
119
+ }
120
+ }
121
+ return true;
122
+ }, [fieldStepMap, props.formProps]);
123
+ var commonFormProps = (0, react_1.useMemo)(function () {
124
+ var _a;
125
+ return ({
126
+ formId: props.formId,
127
+ onSubmit: (!isLastStep || props.formProps.onSubmit) && onSubmit,
128
+ onAfterSubmit: onAfterSubmit,
129
+ fields: (_a = activeStep === null || activeStep === void 0 ? void 0 : activeStep.fields) !== null && _a !== void 0 ? _a : null,
130
+ useRedux: true
131
+ });
132
+ }, [activeStep === null || activeStep === void 0 ? void 0 : activeStep.fields, isLastStep, onAfterSubmit, onSubmit, props.formProps.onSubmit, props.formId]);
133
+ var renderStep = (0, react_1.useCallback)(function (header, buttons, viewProps) { return (react_1["default"].createElement(Form_1["default"], __assign({}, props.formProps, viewProps, commonFormProps, { buttons: buttons }),
134
+ header,
135
+ (activeStep === null || activeStep === void 0 ? void 0 : activeStep.component) && props.steps[currentStep].component)); }, [activeStep === null || activeStep === void 0 ? void 0 : activeStep.component, commonFormProps, currentStep, props.formProps, props.steps]);
136
+ var viewProps = (0, react_1.useMemo)(function () { return ({
137
+ renderStep: renderStep,
138
+ currentStep: currentStep,
139
+ isLastStep: isLastStep,
140
+ totalSteps: totalSteps,
141
+ onPrevStep: onPrevStep,
142
+ prevStepButtonProps: props.prevStepButtonProps,
143
+ nextStepButtonProps: __assign(__assign({}, props.nextStepButtonProps), { label: isLastStep ? props.formProps.submitButtonLabel : props.nextStepButtonProps.label }),
144
+ showSteps: props.showSteps,
145
+ stepsProps: __assign(__assign({}, props.stepsProps), { stepTitleOrientation: props.stepTitleOrientation }),
146
+ stepItems: steps,
147
+ stepTitle: activeStep.title
148
+ }); }, [renderStep, currentStep, isLastStep, totalSteps, onPrevStep, props.prevStepButtonProps, props.nextStepButtonProps,
149
+ props.formProps.submitButtonLabel, props.showSteps, props.stepsProps, props.stepTitleOrientation, steps, activeStep.title]);
150
+ return components.ui.renderView(props.view || 'form.WizardFormView', viewProps);
151
+ }
152
+ exports["default"] = WizardForm;
153
+ WizardForm.defaultProps = {
154
+ formProps: {
155
+ label: __('Отправить')
156
+ },
157
+ prevStepButtonProps: {
158
+ color: 'primary',
159
+ icon: 'left_12x12',
160
+ outline: true,
161
+ label: __('Назад')
162
+ },
163
+ nextStepButtonProps: {
164
+ label: __('Далее')
165
+ },
166
+ showSteps: true
167
+ };
@@ -0,0 +1,2 @@
1
+ import WizardForm from './WizardForm';
2
+ export default WizardForm;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ var WizardForm_1 = __importDefault(require("./WizardForm"));
7
+ exports["default"] = WizardForm_1["default"];
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { IWizardStepItem } from '@steroidsjs/core/ui/form/WizardForm/WizardForm';
3
+ export declare const generateFieldStepMap: (arr?: any[]) => any;
4
+ export declare const normalizeSteps: (steps: IWizardStepItem[]) => {
5
+ id: number;
6
+ title: string;
7
+ description: string;
8
+ subtitle: string;
9
+ icon: string | number | true | React.ReactElement<any, string | React.JSXElementConstructor<any>> | React.ReactFragment;
10
+ status: string;
11
+ }[];
12
+ export declare const getModifiedSteps: (prevStepsState: any, errorSteps: any, currentStep: number, nextStep: number) => any[];
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ exports.__esModule = true;
26
+ exports.getModifiedSteps = exports.normalizeSteps = exports.generateFieldStepMap = void 0;
27
+ var has_1 = __importDefault(require("lodash-es/has"));
28
+ var get_1 = __importDefault(require("lodash-es/get"));
29
+ var assign_1 = __importDefault(require("lodash-es/assign"));
30
+ var isArray_1 = __importDefault(require("lodash-es/isArray"));
31
+ var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
32
+ var indexOf_1 = __importDefault(require("lodash-es/indexOf"));
33
+ var Steps_1 = require("../../list/Steps/Steps");
34
+ var getComponentAttributes = function (component, index) {
35
+ var componentAttributesStepMap = {};
36
+ if (Array.isArray(component)) {
37
+ component.forEach(function (field) {
38
+ (0, assign_1["default"])(componentAttributesStepMap, getComponentAttributes(field, index));
39
+ });
40
+ }
41
+ else {
42
+ var attribute = (0, get_1["default"])(component, ['props', 'attribute']) || (0, get_1["default"])(component, ['attribute']) || null;
43
+ if (attribute) {
44
+ componentAttributesStepMap[attribute] = index;
45
+ }
46
+ else {
47
+ var children = (0, get_1["default"])(component, ['props', 'children']) || null;
48
+ if ((0, isArray_1["default"])(children)) {
49
+ children.forEach(function (field) { return (0, assign_1["default"])(componentAttributesStepMap, getComponentAttributes(field, index)); });
50
+ }
51
+ else if (children) {
52
+ (0, assign_1["default"])(componentAttributesStepMap, getComponentAttributes(children, index));
53
+ }
54
+ }
55
+ }
56
+ return componentAttributesStepMap;
57
+ };
58
+ var getFieldsAttributes = function (fields, index) {
59
+ var fieldAttributesStepMap = {};
60
+ if ((0, isArray_1["default"])(fields)) {
61
+ fields.forEach(function (field) { return (0, assign_1["default"])(fieldAttributesStepMap, getFieldsAttributes(field, index)); });
62
+ }
63
+ else {
64
+ var attribute = (0, get_1["default"])(fields, ['attribute']) || null;
65
+ if (attribute) {
66
+ fieldAttributesStepMap[attribute] = index;
67
+ }
68
+ if ((0, has_1["default"])(fields, ['attributeFrom']) && (0, has_1["default"])(fields, ['attributeTo'])) {
69
+ fieldAttributesStepMap[(0, get_1["default"])(fields, 'attributeFrom')] = index;
70
+ fieldAttributesStepMap[(0, get_1["default"])(fields, 'attributeFrom')] = index;
71
+ }
72
+ if ((0, has_1["default"])(fields, ['items'])) {
73
+ var children = (0, get_1["default"])(fields, ['items']) || null;
74
+ if (children) {
75
+ (0, assign_1["default"])(fieldAttributesStepMap, getFieldsAttributes(children, index));
76
+ }
77
+ }
78
+ }
79
+ return fieldAttributesStepMap;
80
+ };
81
+ var generateFieldStepMap = function (arr) {
82
+ if (arr === void 0) { arr = []; }
83
+ return arr.reduce(function (fieldStepMap, step, index) {
84
+ if ((0, has_1["default"])(step, 'fields')) {
85
+ return __assign(__assign({}, fieldStepMap), getFieldsAttributes(step.fields, index));
86
+ }
87
+ if ((0, has_1["default"])(step, 'component')) {
88
+ return __assign(__assign({}, fieldStepMap), getComponentAttributes(step.component, index));
89
+ }
90
+ return fieldStepMap;
91
+ }, {});
92
+ };
93
+ exports.generateFieldStepMap = generateFieldStepMap;
94
+ var normalizeSteps = function (steps) { return steps.map(function (step, index) { return ({
95
+ id: index,
96
+ title: step.stepLabel || null,
97
+ description: step.description || null,
98
+ subtitle: step.subtitle || null,
99
+ icon: step.icon || null,
100
+ status: index === 0 ? Steps_1.ACTIVE_STATUS : Steps_1.WAIT_STATUS
101
+ }); }); };
102
+ exports.normalizeSteps = normalizeSteps;
103
+ var getModifiedSteps = function (prevStepsState, errorSteps, currentStep, nextStep) {
104
+ var newStepsState = __spreadArray([], prevStepsState, true);
105
+ newStepsState[currentStep].status = (0, isEmpty_1["default"])(errorSteps)
106
+ ? Steps_1.WAIT_STATUS
107
+ : ((0, indexOf_1["default"])(errorSteps, currentStep) !== -1 ? Steps_1.ERROR_STATUS : Steps_1.FINISH_STATUS);
108
+ newStepsState[nextStep].status = Steps_1.ACTIVE_STATUS;
109
+ return newStepsState;
110
+ };
111
+ exports.getModifiedSteps = getModifiedSteps;
@@ -4,6 +4,7 @@ import BlankField from './BlankField';
4
4
  import Button from './Button';
5
5
  import CheckboxField from './CheckboxField';
6
6
  import CheckboxListField from './CheckboxListField';
7
+ import CheckboxTreeField from './CheckboxTreeField';
7
8
  import DateField from './DateField';
8
9
  import DateRangeField from './DateRangeField';
9
10
  import DateTimeField from './DateTimeField';
@@ -30,13 +31,14 @@ import TimeField from './TimeField';
30
31
  import RateField from './RateField';
31
32
  import MaskField from './MaskField';
32
33
  import EmailField from './EmailField';
33
- export { AutoCompleteField, BlankField, Button, CheckboxField, CheckboxListField, DateField, DateRangeField, DateTimeField, DateTimeRangeField, DropDownField, Field, FieldLayout, FieldList, FieldSet, FileField, Form, HtmlField, InputField, NavField, NumberField, PasswordField, RadioField, RadioListField, ReCaptchaField, SliderField, SwitcherField, TextField, TimeField, RateField, MaskField, EmailField, };
34
+ export { AutoCompleteField, BlankField, Button, CheckboxField, CheckboxListField, CheckboxTreeField, DateField, DateRangeField, DateTimeField, DateTimeRangeField, DropDownField, Field, FieldLayout, FieldList, FieldSet, FileField, Form, HtmlField, InputField, NavField, NumberField, PasswordField, RadioField, RadioListField, ReCaptchaField, SliderField, SwitcherField, TextField, TimeField, RateField, MaskField, EmailField, };
34
35
  declare const _default: {
35
36
  AutoCompleteField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./AutoCompleteField/AutoCompleteField").IAutoCompleteFieldProps>;
36
37
  BlankField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./BlankField/BlankField").IBlankFieldProps>;
37
38
  Button: typeof Button;
38
39
  CheckboxField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./CheckboxField/CheckboxField").ICheckboxFieldProps>;
39
40
  CheckboxListField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./CheckboxListField/CheckboxListField").ICheckboxListFieldProps>;
41
+ CheckboxTreeField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./CheckboxTreeField/CheckboxTreeField").ICheckboxTreeFieldProps>;
40
42
  DateField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./DateField/DateField").IDateFieldProps>;
41
43
  DateRangeField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./DateRangeField/DateRangeField").IDateRangeFieldProps>;
42
44
  DateTimeField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./DateTimeField/DateTimeField").IDateTimeFieldProps>;
package/ui/form/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  exports.__esModule = true;
6
- exports.EmailField = exports.MaskField = exports.RateField = exports.TimeField = exports.TextField = exports.SwitcherField = exports.SliderField = exports.ReCaptchaField = exports.RadioListField = exports.RadioField = exports.PasswordField = exports.NumberField = exports.NavField = exports.InputField = exports.HtmlField = exports.Form = exports.FileField = exports.FieldSet = exports.FieldList = exports.FieldLayout = exports.Field = exports.DropDownField = exports.DateTimeRangeField = exports.DateTimeField = exports.DateRangeField = exports.DateField = exports.CheckboxListField = exports.CheckboxField = exports.Button = exports.BlankField = exports.AutoCompleteField = void 0;
6
+ exports.EmailField = exports.MaskField = exports.RateField = exports.TimeField = exports.TextField = exports.SwitcherField = exports.SliderField = exports.ReCaptchaField = exports.RadioListField = exports.RadioField = exports.PasswordField = exports.NumberField = exports.NavField = exports.InputField = exports.HtmlField = exports.Form = exports.FileField = exports.FieldSet = exports.FieldList = exports.FieldLayout = exports.Field = exports.DropDownField = exports.DateTimeRangeField = exports.DateTimeField = exports.DateRangeField = exports.DateField = exports.CheckboxTreeField = exports.CheckboxListField = exports.CheckboxField = exports.Button = exports.BlankField = exports.AutoCompleteField = void 0;
7
7
  var AutoCompleteField_1 = __importDefault(require("./AutoCompleteField"));
8
8
  exports.AutoCompleteField = AutoCompleteField_1["default"];
9
9
  var BlankField_1 = __importDefault(require("./BlankField"));
@@ -14,6 +14,8 @@ var CheckboxField_1 = __importDefault(require("./CheckboxField"));
14
14
  exports.CheckboxField = CheckboxField_1["default"];
15
15
  var CheckboxListField_1 = __importDefault(require("./CheckboxListField"));
16
16
  exports.CheckboxListField = CheckboxListField_1["default"];
17
+ var CheckboxTreeField_1 = __importDefault(require("./CheckboxTreeField"));
18
+ exports.CheckboxTreeField = CheckboxTreeField_1["default"];
17
19
  var DateField_1 = __importDefault(require("./DateField"));
18
20
  exports.DateField = DateField_1["default"];
19
21
  var DateRangeField_1 = __importDefault(require("./DateRangeField"));
@@ -72,6 +74,7 @@ exports["default"] = {
72
74
  Button: Button_1["default"],
73
75
  CheckboxField: CheckboxField_1["default"],
74
76
  CheckboxListField: CheckboxListField_1["default"],
77
+ CheckboxTreeField: CheckboxTreeField_1["default"],
75
78
  DateField: DateField_1["default"],
76
79
  DateRangeField: DateRangeField_1["default"],
77
80
  DateTimeField: DateTimeField_1["default"],
@@ -47,9 +47,15 @@ function ProgressBar(props) {
47
47
  return props.label(props.percent);
48
48
  });
49
49
  if (props.type === 'line') {
50
- return components.ui.renderView('layout.LineProgressBarView', { percent: props.percent, status: props.status, size: props.size, label: getLabel() });
50
+ return components.ui.renderView('layout.LineProgressBarView', { percent: props.percent,
51
+ status: props.status,
52
+ size: props.size,
53
+ label: getLabel() });
51
54
  }
52
- return components.ui.renderView('layout.CircleProgressBarView', { percent: props.percent, status: props.status, size: props.size, label: getLabel() });
55
+ return components.ui.renderView('layout.CircleProgressBarView', { percent: props.percent,
56
+ status: props.status,
57
+ size: props.size,
58
+ label: getLabel() });
53
59
  }
54
60
  ProgressBar.defaultProps = {
55
61
  status: 'normal',
@@ -8,7 +8,9 @@ export interface ISkeletonViewProps {
8
8
  width?: string | number;
9
9
  }
10
10
  /**
11
- * Компонент Skeleton представляет собой заглушку для отображения временных данных
11
+ * Skeleton
12
+ *
13
+ * Компонент `Skeleton` представляет собой заглушку для отображения временных данных
12
14
  * во время загрузки или ожидания загрузки реальных данных.
13
15
  **/
14
16
  export interface ISkeletonProps {
@@ -72,7 +72,10 @@ export interface ITooltipProps {
72
72
  style?: ITooltipStylePosition;
73
73
  /**
74
74
  * Стили для позиционирования стрелки
75
- * @example {left: 10}
75
+ * @example
76
+ * {
77
+ * left: 10
78
+ * }
76
79
  */
77
80
  arrowPosition?: ITooltipArrowPosition;
78
81
  /**
@@ -8,7 +8,7 @@ export interface IControlsColumnItem extends IButtonProps {
8
8
  /**
9
9
  * ControlsColumn
10
10
  *
11
- * Компонент ControlsColumn предоставляет колонку с контролами.
11
+ * Компонент `ControlsColumn` предоставляет колонку с контролами.
12
12
  **/
13
13
  export interface IControlsColumnProps {
14
14
  /**
@@ -17,13 +17,27 @@ export interface IControlsColumnProps {
17
17
  primaryKey?: string;
18
18
  /**
19
19
  * Коллекция с контролами
20
- * @example [{id: 'delete'}, {id: 'view', position: 'left'}]
20
+ * @example
21
+ * [
22
+ * {
23
+ * id: 'delete'
24
+ * },
25
+ * {
26
+ * id: 'view',
27
+ * position: 'left'
28
+ * }
29
+ * ]
21
30
  */
22
31
  controls?: IControlItem[] | ((item: any, primaryKey: string) => IControlItem[]);
23
32
  /**
24
33
  * Элемент, для которого будет отображаться список с контролами, в нём можно задать видимость контрола
25
34
  * с помощью свойства 'can' + _upperFirst(control.id)
26
- * @example {name: 'Ivan', work: 'development', canView: false}
35
+ * @example
36
+ * {
37
+ * name: 'Ivan',
38
+ * work: 'development',
39
+ * canView: false
40
+ * }
27
41
  */
28
42
  item?: any;
29
43
  /**
@@ -36,7 +36,17 @@ export interface IFlexGridItem {
36
36
  export interface IFlexGridProps extends IUiComponent {
37
37
  /**
38
38
  * Элементы FlexGrid
39
- * @example [{content: 'Block1', col: 4}, {content: 'Block2', col: 6}]
39
+ * @example
40
+ * [
41
+ * {
42
+ * content: 'Block1',
43
+ * col: 4
44
+ * },
45
+ * {
46
+ * content: 'Block2',
47
+ * col: 6
48
+ * }
49
+ * ]
40
50
  */
41
51
  items?: IFlexGridItem[];
42
52
  /**