@steroidsjs/core 3.0.0-beta.39 → 3.0.0-beta.40

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.
@@ -24,6 +24,32 @@ export type DataProviderItems = string | ({
24
24
  label: string | any;
25
25
  [key: string]: any;
26
26
  })[];
27
+ export interface IDataProvider {
28
+ /**
29
+ * Уникальный (глобально) идентификатор, под которых будут храниться
30
+ * подгруженные данные в redux (при включенном флаге useRedux). Если
31
+ * не задан - данные будут храниться в локальном стейте
32
+ */
33
+ reduxId?: string;
34
+ /**
35
+ * URL для подгрузки новой коллекции данных
36
+ * @example '/api/v1/search'
37
+ */
38
+ action?: string | IApiMethod;
39
+ /**
40
+ * Параметры запроса
41
+ * @example {pageSize: 3}
42
+ */
43
+ params?: Record<string, unknown>;
44
+ /**
45
+ * Обработчик, который вызывается для подгрузки данных.
46
+ * Если обработчик не передан, то по умолчанию отправится post-запрос.
47
+ * @param {string} action
48
+ * @param {Object} params
49
+ * @return {Promise<Array> | Array}
50
+ */
51
+ onSearch?: (action: string, params: Record<string, unknown>) => Array<unknown> | Promise<Array<unknown>>;
52
+ }
27
53
  export interface IDataProviderConfig {
28
54
  /**
29
55
  * Коллекция элементов
@@ -34,32 +60,7 @@ export interface IDataProviderConfig {
34
60
  * Конфигурация для подгрузки данных извне.
35
61
  * Если dataProvider не передан, то поиск данных по запросу происходит локально.
36
62
  */
37
- dataProvider?: {
38
- /**
39
- * Уникальный (глобально) идентификатор, под которых будут храниться
40
- * подгруженные данные в redux (при включенном флаге useRedux). Если
41
- * не задан - данные будут храниться в локальном стейте
42
- */
43
- reduxId?: string;
44
- /**
45
- * URL для подгрузки новой коллекции данных
46
- * @example '/api/v1/search'
47
- */
48
- action?: string | IApiMethod;
49
- /**
50
- * Параметры запроса
51
- * @example {pageSize: 3}
52
- */
53
- params?: Record<string, unknown>;
54
- /**
55
- * Обработчик, который вызывается для подгрузки данных.
56
- * Если обработчик не передан, то по умолчанию отправится post-запрос.
57
- * @param {string} action
58
- * @param {Object} params
59
- * @return {Promise<Array> | Array}
60
- */
61
- onSearch?: (action: string, params: Record<string, unknown>) => Array<unknown> | Promise<Array<unknown>>;
62
- };
63
+ dataProvider?: IDataProvider;
63
64
  /**
64
65
  * Текст запроса
65
66
  * @example 'some text'
@@ -8,7 +8,7 @@ import { IEmptyProps } from '../ui/list/Empty/Empty';
8
8
  import { IFormProps } from '../ui/form/Form/Form';
9
9
  import { Model } from '../components/MetaComponent';
10
10
  export type ListControlPosition = 'top' | 'bottom' | 'both' | string;
11
- export interface ISortProps {
11
+ export interface ISortConfig {
12
12
  /**
13
13
  * Включить сортировку
14
14
  * @example false
@@ -61,7 +61,7 @@ export interface IListConfig {
61
61
  * Подключение сортировки
62
62
  * @example {enable: true, defaultSort: 'startDate'}
63
63
  */
64
- sort?: boolean | ISortProps;
64
+ sort?: boolean | ISortConfig;
65
65
  /**
66
66
  * Варианты расположения элементов коллекции
67
67
  * @example {items: [{id: 'list', label: 'List'}, {id: 'grid', label: 'Grid'}]}
package/index.d.ts CHANGED
@@ -77,7 +77,7 @@ declare type CustomStyle = React.CSSProperties;
77
77
  * Переопределение view React компонента для кастомизации отображения
78
78
  * @example MyCustomView
79
79
  */
80
- declare type CustomView = React.ReactNode | React.FunctionComponent;
80
+ declare type CustomView = React.ReactNode | ((props: React.ComponentProps<any>) => JSX.Element);
81
81
 
82
82
  /**
83
83
  * Кастомная иконка
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.0-beta.39",
3
+ "version": "3.0.0-beta.40",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -3,7 +3,7 @@ export interface IAccordionIcon {
3
3
  open: React.ReactElement | string;
4
4
  close: React.ReactElement | string;
5
5
  }
6
- export interface IAccordionCommonProps {
6
+ export interface IAccordionProps {
7
7
  view?: CustomView;
8
8
  style?: CustomStyle;
9
9
  children?: any;
@@ -55,11 +55,13 @@ export interface IAccordionCommonProps {
55
55
  */
56
56
  showIcon?: boolean;
57
57
  }
58
- export interface IAccordionCommonViewProps extends IAccordionCommonProps {
58
+ export interface IAccordionViewProps extends IAccordionProps {
59
59
  toggleAccordion?: (number: any) => void;
60
60
  toggleCollapse?: (number: any) => void;
61
61
  childIndex?: number;
62
62
  isShowMore?: boolean;
63
63
  }
64
- declare function Accordion(props: IAccordionCommonProps): JSX.Element;
64
+ export type IAccordionItemProps = IAccordionProps;
65
+ export type IAccordionItemViewProps = IAccordionViewProps;
66
+ declare function Accordion(props: IAccordionProps): JSX.Element;
65
67
  export default Accordion;
@@ -1,6 +1,6 @@
1
- import { IAccordionCommonProps, IAccordionCommonViewProps } from './Accordion';
2
- declare function AccordionItem(props: IAccordionCommonProps): any;
1
+ import { IAccordionItemProps } from './Accordion';
2
+ declare function AccordionItem(props: IAccordionItemProps): any;
3
3
  declare namespace AccordionItem {
4
- var defaultProps: IAccordionCommonViewProps;
4
+ var defaultProps: import("./Accordion").IAccordionViewProps;
5
5
  }
6
6
  export default AccordionItem;
@@ -1,13 +1,49 @@
1
- interface ICopyToClipboardProps {
1
+ import React from 'react';
2
+ import { IShowNotificationParameters } from '../../../actions/notifications';
3
+ export interface ICopyToClipboardProps extends IUiComponent {
4
+ /**
5
+ * Значение, которое будет использоваться при копировании
6
+ * @example value: 'Steroids.js'
7
+ */
2
8
  value: string;
9
+ /**
10
+ * Флаг, который отвечает за выключение функции копирования
11
+ * @example disabled: false
12
+ */
3
13
  disabled?: boolean;
4
14
  notification?: string | {
5
15
  message?: string;
6
16
  level?: string;
7
- timeOut?: string;
17
+ params?: IShowNotificationParameters;
8
18
  };
9
- className?: CssClassName;
10
- children?: any;
19
+ /**
20
+ * Позволяет включить или выключить отображение иконки
21
+ * @example showCopyIcon: false
22
+ */
23
+ showCopyIcon?: boolean;
24
+ /**
25
+ * Иконка
26
+ * @example calendar-day
27
+ */
28
+ icon?: string | React.ReactElement;
29
+ /**
30
+ * Дочерний элемент
31
+ * @example <h1>This message will be copied!</h1>
32
+ */
33
+ children?: React.ReactNode;
34
+ /**
35
+ * Callback функция, которая вызывается при копировании
36
+ * @example {}
37
+ */
38
+ onCopy?: VoidFunction;
11
39
  }
12
- export default function CopyToClipboard(props: ICopyToClipboardProps): any;
13
- export {};
40
+ export interface ICopyToClipboardViewProps extends ICopyToClipboardProps {
41
+ onClick: () => void;
42
+ }
43
+ declare function CopyToClipboard(props: ICopyToClipboardProps): any;
44
+ declare namespace CopyToClipboard {
45
+ var defaultProps: {
46
+ showCopyIcon: boolean;
47
+ };
48
+ }
49
+ export default CopyToClipboard;
@@ -10,29 +10,6 @@ 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
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -69,60 +46,50 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
69
46
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
47
  }
71
48
  };
72
- var __importDefault = (this && this.__importDefault) || function (mod) {
73
- return (mod && mod.__esModule) ? mod : { "default": mod };
74
- };
75
49
  exports.__esModule = true;
76
- var react_1 = __importStar(require("react"));
77
- var useDispatch_1 = __importDefault(require("../../../hooks/useDispatch"));
50
+ /* eslint-disable no-unused-expressions */
51
+ var react_1 = require("react");
52
+ var hooks_1 = require("../../../hooks");
78
53
  var notifications_1 = require("../../../actions/notifications");
54
+ var DEFAULT_NOTIFICATION_LEVEL = 'info';
79
55
  function CopyToClipboard(props) {
80
56
  var _this = this;
81
- var inputRef = (0, react_1.useRef)();
57
+ var components = (0, hooks_1.useComponents)();
82
58
  var _a = (0, react_1.useState)(false), isCopied = _a[0], setIsCopied = _a[1];
83
- var dispatch = (0, useDispatch_1["default"])();
59
+ var dispatch = (0, hooks_1.useDispatch)();
60
+ var notification = props.notification;
84
61
  var onClick = (0, react_1.useCallback)(function () { return __awaiter(_this, void 0, void 0, function () {
85
- var el, notification;
86
62
  return __generator(this, function (_a) {
87
63
  switch (_a.label) {
88
64
  case 0:
89
- if (!!isCopied) return [3 /*break*/, 4];
65
+ if (props.disabled) {
66
+ return [2 /*return*/];
67
+ }
68
+ if (!!isCopied) return [3 /*break*/, 3];
90
69
  if (!navigator.clipboard) return [3 /*break*/, 2];
91
70
  return [4 /*yield*/, navigator.clipboard.writeText(props.value)];
92
71
  case 1:
93
72
  _a.sent();
94
- return [3 /*break*/, 3];
95
- case 2:
96
- el = inputRef.current;
97
- if (el) {
98
- el.focus();
99
- el.select();
73
+ if (props.onCopy) {
74
+ props.onCopy();
100
75
  }
101
- document.execCommand('copy');
102
- _a.label = 3;
103
- case 3:
104
- if (props.notification) {
105
- notification = __assign({ level: 'info', params: undefined }, (typeof props.notification === 'string' ? { message: props.notification } : props.notification));
106
- dispatch((0, notifications_1.showNotification)(notification.message, notification.level, notification.params));
76
+ _a.label = 2;
77
+ case 2:
78
+ if (notification) {
79
+ typeof notification === 'string'
80
+ ? dispatch((0, notifications_1.showNotification)(notification, DEFAULT_NOTIFICATION_LEVEL))
81
+ : dispatch((0, notifications_1.showNotification)(notification.message, notification.level || DEFAULT_NOTIFICATION_LEVEL, notification.params));
107
82
  }
108
83
  setIsCopied(true);
109
84
  setTimeout(function () { return setIsCopied(false); }, 1000);
110
- _a.label = 4;
111
- case 4: return [2 /*return*/];
85
+ _a.label = 3;
86
+ case 3: return [2 /*return*/];
112
87
  }
113
88
  });
114
- }); }, [dispatch, isCopied, props.notification, props.value]);
115
- if (props.disabled) {
116
- return props.children;
117
- }
118
- return (react_1["default"].createElement("span", { className: props.className, onClick: onClick, "aria-hidden": 'true' },
119
- props.children,
120
- react_1["default"].createElement("input", { ref: inputRef, defaultValue: props.value, style: {
121
- position: 'absolute',
122
- height: 1,
123
- width: 1,
124
- top: 0,
125
- opacity: 0
126
- } })));
89
+ }); }, [dispatch, isCopied, notification, props]);
90
+ return components.ui.renderView(props.view || 'content.CopyToClipboardView', __assign(__assign({}, props), { onClick: onClick }));
127
91
  }
92
+ CopyToClipboard.defaultProps = {
93
+ showCopyIcon: true
94
+ };
128
95
  exports["default"] = CopyToClipboard;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { IDropDownProps } from '../DropDown/DropDown';
3
- export interface IMenuItemProps {
3
+ export interface IMenuItem {
4
4
  /**
5
5
  * Заголовок элемента меню
6
6
  */
@@ -22,7 +22,7 @@ export interface IMenuProps {
22
22
  /**
23
23
  * Элементы меню
24
24
  */
25
- items: IMenuItemProps[];
25
+ items: IMenuItem[];
26
26
  /**
27
27
  * Кастомная иконка, по клику на которую открывается меню
28
28
  */
@@ -34,7 +34,7 @@ export interface IMenuProps {
34
34
  /**
35
35
  * Пропсы для DropDown
36
36
  */
37
- dropDownProps?: Omit<IDropDownProps, 'children' | 'content'>;
37
+ dropDownProps?: IDropDownProps;
38
38
  /**
39
39
  * Переопределение view React элемента меню для кастомизации отображения
40
40
  */
@@ -7,4 +7,5 @@ import Badge from './Badge';
7
7
  import { Detail, DetailItem } from './Detail';
8
8
  import Icon from './Icon';
9
9
  import Menu from './Menu';
10
- export { Avatar, AvatarGroup, Accordion, AccordionItem, Alert, Card, DropDown, Badge, Detail, DetailItem, Icon, Menu, };
10
+ import CopyToClipboard from './CopyToClipboard';
11
+ export { Avatar, AvatarGroup, Accordion, AccordionItem, Alert, Card, DropDown, Badge, Detail, DetailItem, Icon, Menu, CopyToClipboard, };
@@ -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.Menu = exports.Icon = exports.DetailItem = exports.Detail = exports.Badge = exports.DropDown = exports.Card = exports.Alert = exports.AccordionItem = exports.Accordion = exports.AvatarGroup = exports.Avatar = void 0;
6
+ exports.CopyToClipboard = exports.Menu = exports.Icon = exports.DetailItem = exports.Detail = exports.Badge = exports.DropDown = exports.Card = exports.Alert = exports.AccordionItem = exports.Accordion = exports.AvatarGroup = exports.Avatar = void 0;
7
7
  var Avatar_1 = require("./Avatar");
8
8
  exports.Avatar = Avatar_1.Avatar;
9
9
  exports.AvatarGroup = Avatar_1.AvatarGroup;
@@ -25,3 +25,5 @@ var Icon_1 = __importDefault(require("./Icon"));
25
25
  exports.Icon = Icon_1["default"];
26
26
  var Menu_1 = __importDefault(require("./Menu"));
27
27
  exports.Menu = Menu_1["default"];
28
+ var CopyToClipboard_1 = __importDefault(require("./CopyToClipboard"));
29
+ exports.CopyToClipboard = CopyToClipboard_1["default"];
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { IAccordionCommonViewProps } from 'src/ui/content/Accordion/Accordion';
2
+ import { IAccordionItemViewProps } from 'src/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';
@@ -16,7 +16,7 @@ export interface IDropDownFieldItem {
16
16
  contentType?: ContentType | string;
17
17
  contentSrc?: string | React.ReactElement;
18
18
  }
19
- export interface IDropDownFieldItemViewProps extends IAccordionCommonViewProps, Pick<IDropDownFieldProps, 'itemsContent'> {
19
+ export interface IDropDownFieldItemViewProps extends IAccordionItemViewProps, Pick<IDropDownFieldProps, 'itemsContent'> {
20
20
  item: IDropDownFieldItem;
21
21
  size: Size;
22
22
  type: ItemSwitchType;
@@ -2,7 +2,7 @@ import ReactCropProps, { Crop } from 'react-image-crop';
2
2
  import { IModalProps } from '../../modal/Modal/Modal';
3
3
  import { IFileInput } from '../../../hooks/useFile';
4
4
  import { IFieldWrapperInputProps } from '../Field/fieldWrapper';
5
- export interface ICropInputProps {
5
+ export interface ICropConfig {
6
6
  /**
7
7
  * Изначальные параметры обрезки изображения
8
8
  * @example {unit: 'px', aspect: 1, x: 0, y: 0, width: 200, height: 200}
@@ -41,7 +41,7 @@ export interface IImageFieldProps extends IFieldWrapperInputProps, Omit<IFileInp
41
41
  /**
42
42
  * Параметры обрезки
43
43
  */
44
- crop?: ICropInputProps;
44
+ crop?: ICropConfig;
45
45
  /**
46
46
  * Название кнопки
47
47
  * @example 'Загрузить'
@@ -49,7 +49,7 @@ export interface IImageFieldProps extends IFieldWrapperInputProps, Omit<IFileInp
49
49
  label?: string;
50
50
  [key: string]: any;
51
51
  }
52
- export interface ICropOutputProps extends ICropInputProps {
52
+ export interface ICropOutputProps extends ICropConfig {
53
53
  onSubmit: (crop: Crop, imageId: any) => void;
54
54
  }
55
55
  export interface IImageFieldModalViewProps extends IModalProps {
@@ -4,13 +4,13 @@
4
4
  * @example 'top'
5
5
  */
6
6
  type TooltipPosition = 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight' | 'left' | 'leftTop' | 'leftBottom' | 'right' | 'rightTop' | 'rightBottom' | string;
7
- export interface TooltipArrowPosition {
7
+ export interface ITooltipArrowPosition {
8
8
  left?: number | string;
9
9
  right?: number | string;
10
10
  top?: number | string;
11
11
  bottom?: number | string;
12
12
  }
13
- export interface TooltipStylePosition {
13
+ export interface ITooltipStylePosition {
14
14
  left: 'unset' | number;
15
15
  right: 'unset' | number;
16
16
  top: 'unset' | number;
@@ -47,12 +47,12 @@ export interface ITooltipProps {
47
47
  /**
48
48
  * Стили для абсолютного позиционирования подсказки
49
49
  */
50
- style?: TooltipStylePosition;
50
+ style?: ITooltipStylePosition;
51
51
  /**
52
52
  * Стили для позиционирования стрелки
53
53
  * @example {left: 10}
54
54
  */
55
- arrowPosition?: TooltipArrowPosition;
55
+ arrowPosition?: ITooltipArrowPosition;
56
56
  /**
57
57
  * Рассчет позиции подсказки
58
58
  */
@@ -63,7 +63,7 @@ export interface ITooltipViewProps extends ITooltipProps {
63
63
  isTooltipVisible: boolean;
64
64
  content: string | any;
65
65
  position: TooltipPosition;
66
- style: TooltipStylePosition;
66
+ style: ITooltipStylePosition;
67
67
  }
68
68
  declare function Tooltip(props: ITooltipProps): JSX.Element;
69
69
  declare namespace Tooltip {
@@ -1,6 +1,6 @@
1
- import { TooltipArrowPosition, TooltipStylePosition } from '../Tooltip/Tooltip';
1
+ import { ITooltipArrowPosition, ITooltipStylePosition } from '../Tooltip/Tooltip';
2
2
  export default function calculate(gap: any, position: any, parentRef: any, tooltipSize: any, arrowSize: any): {
3
- style: TooltipStylePosition;
3
+ style: ITooltipStylePosition;
4
4
  position: any;
5
- arrowPosition: TooltipArrowPosition;
5
+ arrowPosition: ITooltipArrowPosition;
6
6
  };