@reltio/components 1.4.1562 → 1.4.1564

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 (57) hide show
  1. package/cjs/components/MatchRulesBlock/SimpleMatchRules/styles.d.ts +1 -1
  2. package/cjs/components/MultilineMenuItem/MultilineMenuItem.d.ts +11 -0
  3. package/cjs/components/MultilineMenuItem/MultilineMenuItem.js +49 -0
  4. package/cjs/components/MultilineMenuItem/styles.d.ts +1 -0
  5. package/cjs/components/MultilineMenuItem/styles.js +23 -0
  6. package/cjs/components/ProfileBandNavigation/ProfileBandNavigationWidget.js +2 -2
  7. package/cjs/components/ReltioGridLayout/ReltioGridLayout.d.ts +1 -9
  8. package/cjs/components/ReltioGridLayout/ReltioGridLayout.js +25 -48
  9. package/cjs/components/ReltioGridLayout/helpers.d.ts +1 -0
  10. package/cjs/components/ReltioGridLayout/helpers.js +10 -1
  11. package/cjs/components/ReltioGridLayout/styles.js +5 -0
  12. package/cjs/components/editors/DataTypeValueEditor/useEditorContext.d.ts +1 -1
  13. package/cjs/components/editors/DataTypeValueEditor/useEditorContext.js +2 -2
  14. package/cjs/components/editors/FilterEditor/FilterValueEditor.js +1 -2
  15. package/cjs/components/editors/NumberEditor/NumberEditor.d.ts +12 -20
  16. package/cjs/components/editors/NumberEditor/NumberEditor.js +12 -27
  17. package/cjs/components/editors/TextEditor/TextEditor.d.ts +2 -2
  18. package/cjs/components/editors/TextEditor/TextEditor.js +1 -1
  19. package/cjs/components/index.d.ts +1 -0
  20. package/cjs/components/index.js +3 -1
  21. package/cjs/constants/prop-types.d.ts +0 -6
  22. package/cjs/constants/prop-types.js +1 -8
  23. package/cjs/hooks/index.d.ts +1 -0
  24. package/cjs/hooks/index.js +3 -1
  25. package/cjs/hooks/useLayoutResetter.d.ts +10 -0
  26. package/cjs/hooks/useLayoutResetter.js +23 -0
  27. package/cjs/hooks/useSnackbar.d.ts +4 -1
  28. package/cjs/hooks/useSnackbar.js +13 -6
  29. package/esm/components/MatchRulesBlock/SimpleMatchRules/styles.d.ts +1 -1
  30. package/esm/components/MultilineMenuItem/MultilineMenuItem.d.ts +11 -0
  31. package/esm/components/MultilineMenuItem/MultilineMenuItem.js +21 -0
  32. package/esm/components/MultilineMenuItem/styles.d.ts +1 -0
  33. package/esm/components/MultilineMenuItem/styles.js +20 -0
  34. package/esm/components/ProfileBandNavigation/ProfileBandNavigationWidget.js +2 -2
  35. package/esm/components/ReltioGridLayout/ReltioGridLayout.d.ts +1 -9
  36. package/esm/components/ReltioGridLayout/ReltioGridLayout.js +27 -50
  37. package/esm/components/ReltioGridLayout/helpers.d.ts +1 -0
  38. package/esm/components/ReltioGridLayout/helpers.js +9 -0
  39. package/esm/components/ReltioGridLayout/styles.js +5 -0
  40. package/esm/components/editors/DataTypeValueEditor/useEditorContext.d.ts +1 -1
  41. package/esm/components/editors/DataTypeValueEditor/useEditorContext.js +3 -3
  42. package/esm/components/editors/FilterEditor/FilterValueEditor.js +1 -2
  43. package/esm/components/editors/NumberEditor/NumberEditor.d.ts +12 -20
  44. package/esm/components/editors/NumberEditor/NumberEditor.js +13 -28
  45. package/esm/components/editors/TextEditor/TextEditor.d.ts +2 -2
  46. package/esm/components/editors/TextEditor/TextEditor.js +1 -1
  47. package/esm/components/index.d.ts +1 -0
  48. package/esm/components/index.js +1 -0
  49. package/esm/constants/prop-types.d.ts +0 -6
  50. package/esm/constants/prop-types.js +1 -7
  51. package/esm/hooks/index.d.ts +1 -0
  52. package/esm/hooks/index.js +1 -0
  53. package/esm/hooks/useLayoutResetter.d.ts +10 -0
  54. package/esm/hooks/useLayoutResetter.js +16 -0
  55. package/esm/hooks/useSnackbar.d.ts +4 -1
  56. package/esm/hooks/useSnackbar.js +13 -6
  57. package/package.json +3 -3
@@ -29,26 +29,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.useSnackbar = void 0;
30
30
  var react_1 = __importStar(require("react"));
31
31
  var ui_i18n_1 = __importDefault(require("ui-i18n"));
32
+ var ramda_1 = require("ramda");
32
33
  var Portal_1 = __importDefault(require("@material-ui/core/Portal"));
33
34
  var Button_1 = __importDefault(require("@material-ui/core/Button"));
34
35
  var Snackbar_1 = __importDefault(require("@material-ui/core/Snackbar"));
36
+ var core_1 = require("../core");
35
37
  var FIVE_MINUTES = 5 * 60 * 1000;
36
- var useSnackbar = function (options) {
37
- if (options === void 0) { options = {}; }
38
- var anchorOrigin = options.anchorOrigin, showDismiss = options.showDismiss;
39
- var _a = (0, react_1.useState)(false), isOpenSnackbar = _a[0], setIsOpenSnackbar = _a[1];
40
- var _b = (0, react_1.useState)(''), snackbarMessage = _b[0], setSnackbarMessage = _b[1];
38
+ var useSnackbar = function (_a) {
39
+ var _b = _a === void 0 ? {} : _a, anchorOrigin = _b.anchorOrigin, showDismiss = _b.showDismiss, _c = _b.dismissTitle, dismissTitle = _c === void 0 ? ui_i18n_1.default.text('Dismiss') : _c, _d = _b.autoHideDuration, autoHideDuration = _d === void 0 ? FIVE_MINUTES : _d, _e = _b.onDismissClick, onDismissClick = _e === void 0 ? core_1.noop : _e;
40
+ var _f = (0, react_1.useState)(false), isOpenSnackbar = _f[0], setIsOpenSnackbar = _f[1];
41
+ var _g = (0, react_1.useState)(''), snackbarMessage = _g[0], setSnackbarMessage = _g[1];
41
42
  var closeSnackbar = (0, react_1.useCallback)(function () {
42
43
  setIsOpenSnackbar(false);
43
44
  setSnackbarMessage('');
44
45
  }, []);
46
+ var handleSnackbarClose = (0, react_1.useCallback)(function (_, reason) {
47
+ if (reason === 'clickaway') {
48
+ return;
49
+ }
50
+ closeSnackbar();
51
+ }, [closeSnackbar]);
45
52
  var showSnackbarMessage = (0, react_1.useCallback)(function (message) {
46
53
  setIsOpenSnackbar(true);
47
54
  setSnackbarMessage(message);
48
55
  }, []);
49
56
  var SnackbarRenderer = (0, react_1.useCallback)(function () {
50
57
  return (react_1.default.createElement(Portal_1.default, { container: document.body },
51
- react_1.default.createElement(Snackbar_1.default, { open: isOpenSnackbar, anchorOrigin: anchorOrigin, autoHideDuration: FIVE_MINUTES, onClose: closeSnackbar, message: snackbarMessage, action: showDismiss ? (react_1.default.createElement(Button_1.default, { color: "primary", onClick: closeSnackbar }, ui_i18n_1.default.text('Dismiss'))) : undefined })));
58
+ react_1.default.createElement(Snackbar_1.default, { open: isOpenSnackbar, anchorOrigin: anchorOrigin, autoHideDuration: autoHideDuration, onClose: handleSnackbarClose, message: snackbarMessage, style: { maxWidth: 500 }, action: showDismiss ? (react_1.default.createElement(Button_1.default, { color: "primary", onClick: (0, ramda_1.pipe)(closeSnackbar, onDismissClick) }, dismissTitle)) : undefined })));
52
59
  // eslint-disable-next-line react-hooks/exhaustive-deps
53
60
  }, [isOpenSnackbar, closeSnackbar, snackbarMessage]);
54
61
  return { SnackbarRenderer: SnackbarRenderer, showSnackbarMessage: showSnackbarMessage };
@@ -1,2 +1,2 @@
1
- declare const styles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"title" | "container" | "negativeRuleIcon" | "labelsContainer" | "matchRuleInfo" | "matchRuleLabel" | "relevanceScore">;
1
+ declare const styles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"title" | "relevanceScore" | "container" | "negativeRuleIcon" | "labelsContainer" | "matchRuleInfo" | "matchRuleLabel">;
2
2
  export default styles;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ type Props = {
3
+ item: {
4
+ primary: string;
5
+ secondary: string;
6
+ onClick: () => void;
7
+ };
8
+ onMenuClose?: () => void;
9
+ };
10
+ declare const MultilineMenuItem: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLLIElement>>;
11
+ export default MultilineMenuItem;
@@ -0,0 +1,21 @@
1
+ import React, { forwardRef } from 'react';
2
+ import MenuItem from '@material-ui/core/MenuItem';
3
+ import ListItemText from '@material-ui/core/ListItemText';
4
+ import { noop } from '../../core';
5
+ import { useStyles } from './styles';
6
+ var MultilineMenuItem = forwardRef(function (_a, ref) {
7
+ var item = _a.item, _b = _a.onMenuClose, onMenuClose = _b === void 0 ? noop : _b;
8
+ var styles = useStyles();
9
+ var primary = item.primary, secondary = item.secondary, onClick = item.onClick;
10
+ var handleClick = function () {
11
+ onMenuClose();
12
+ onClick();
13
+ };
14
+ return (React.createElement(MenuItem, { className: styles.menuItem, ref: ref, onClick: handleClick },
15
+ React.createElement(ListItemText, { primary: primary, secondary: secondary, className: styles.itemText, classes: {
16
+ primary: styles.textPrimary,
17
+ secondary: styles.textSecondary
18
+ } })));
19
+ });
20
+ MultilineMenuItem.displayName = 'MultilineMenuItem';
21
+ export default MultilineMenuItem;
@@ -0,0 +1 @@
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"menuItem" | "textPrimary" | "textSecondary" | "itemText">;
@@ -0,0 +1,20 @@
1
+ import { makeStyles } from '@material-ui/core/styles';
2
+ export var useStyles = makeStyles(function () { return ({
3
+ menuItem: {
4
+ whiteSpace: 'inherit',
5
+ width: 200,
6
+ padding: '9px 12px 7px'
7
+ },
8
+ itemText: {
9
+ margin: 0
10
+ },
11
+ textPrimary: {
12
+ fontSize: 14,
13
+ lineHeight: '16px',
14
+ fontWeight: 500
15
+ },
16
+ textSecondary: {
17
+ fontSize: 10,
18
+ lineHeight: '12px'
19
+ }
20
+ }); });
@@ -28,7 +28,7 @@ var ProfileBandNavigationWidget = function (_a) {
28
28
  formatNumberAsMetric(total, 1000000),
29
29
  " ",
30
30
  total === 1 ? SEARCH_RESULT : SEARCH_RESULTS),
31
- React.createElement(SmallIconButtonWithTooltip, { size: "L", icon: KeyboardArrowLeft, tooltipTitle: PREVIOUS_PROFILE, onClick: onPrev, disabled: isPrevDisabled, showForDisabled: true }),
32
- React.createElement(SmallIconButtonWithTooltip, { size: "L", icon: KeyboardArrowRight, tooltipTitle: NEXT_PROFILE, onClick: onNext, disabled: isNextDisabled, showForDisabled: true })));
31
+ React.createElement(SmallIconButtonWithTooltip, { size: "L", icon: KeyboardArrowLeft, "data-reltio-id": "reltio-previous-profile-button", tooltipTitle: PREVIOUS_PROFILE, onClick: onPrev, disabled: isPrevDisabled, showForDisabled: true }),
32
+ React.createElement(SmallIconButtonWithTooltip, { size: "L", icon: KeyboardArrowRight, "data-reltio-id": "reltio-next-profile-button", tooltipTitle: NEXT_PROFILE, onClick: onNext, disabled: isNextDisabled, showForDisabled: true })));
33
33
  };
34
34
  export { ProfileBandNavigationWidget, LinkWithTooltip };
@@ -20,14 +20,6 @@ type Props<ViewConfig = Record<string, unknown>> = {
20
20
  };
21
21
  declare const _default: React.MemoExoticComponent<{
22
22
  ({ views, layout, layoutOptions, onLayoutChanged, draggableHandle, LayoutItem, onRemove, onDrop, droppingItem, isDroppable, isStatic, classes }: Props<Record<string, unknown>>): JSX.Element;
23
- defaultProps: {
24
- layoutOptions: {
25
- cols: number;
26
- rowHeight: number;
27
- margin: number[];
28
- };
29
- onLayoutChanged: any;
30
- classes: {};
31
- };
23
+ displayName: string;
32
24
  }>;
33
25
  export default _default;
@@ -12,22 +12,28 @@ var __assign = (this && this.__assign) || function () {
12
12
  import React, { useCallback, useMemo, useRef, useState, memo } from 'react';
13
13
  import GridLayout from 'react-grid-layout';
14
14
  import ReactResizeDetector from 'react-resize-detector';
15
- import { equals, identity, pipe } from 'ramda';
15
+ import { pipe, ifElse, always } from 'ramda';
16
16
  import classnames from 'classnames';
17
- import { alignGroupedItemsHeights, reltioLayoutToReactGridLayout, reactGridLayoutToReltioLayout, reactGridLayoutItemToReltioLayoutItem, copyPropsFromPreviousLayout, calcHeight, getReltioLayoutItemById } from './helpers';
17
+ import { alignGroupedItemsHeights, calcLayoutItemsHeight, reltioLayoutToReactGridLayout, reactGridLayoutToReltioLayout, reactGridLayoutItemToReltioLayoutItem, copyPropsFromPreviousLayout, calcHeight, getReltioLayoutItemById } from './helpers';
18
+ import { noop } from '../../core';
18
19
  import { useStyles } from './styles';
20
+ var DEFAULT_LAYOUT_OPTIONS = {
21
+ cols: 4,
22
+ rowHeight: 30,
23
+ margin: [15, 15]
24
+ };
19
25
  var ReltioGridLayout = function (_a) {
20
26
  var _b;
21
- var views = _a.views, layout = _a.layout, layoutOptions = _a.layoutOptions, onLayoutChanged = _a.onLayoutChanged, draggableHandle = _a.draggableHandle, LayoutItem = _a.LayoutItem, onRemove = _a.onRemove, onDrop = _a.onDrop, droppingItem = _a.droppingItem, isDroppable = _a.isDroppable, isStatic = _a.isStatic, classes = _a.classes;
27
+ var views = _a.views, layout = _a.layout, _c = _a.layoutOptions, layoutOptions = _c === void 0 ? DEFAULT_LAYOUT_OPTIONS : _c, _d = _a.onLayoutChanged, onLayoutChanged = _d === void 0 ? noop : _d, draggableHandle = _a.draggableHandle, LayoutItem = _a.LayoutItem, onRemove = _a.onRemove, onDrop = _a.onDrop, droppingItem = _a.droppingItem, isDroppable = _a.isDroppable, isStatic = _a.isStatic, classes = _a.classes;
22
28
  var ref = useRef();
23
29
  var heightsMap = useRef({});
24
30
  var styles = useStyles();
25
- var _c = useState(null), resizingItemId = _c[0], setResizingItemId = _c[1];
26
- var _d = useState(null), fullscreenItemId = _d[0], setFullscreenItemId = _d[1];
27
- var _e = useState(0), width = _e[0], setWidth = _e[1];
31
+ var _e = useState(null), resizingItemId = _e[0], setResizingItemId = _e[1];
32
+ var _f = useState(null), fullscreenItemId = _f[0], setFullscreenItemId = _f[1];
33
+ var _g = useState(0), width = _g[0], setWidth = _g[1];
28
34
  var cols = layoutOptions.cols, rowHeight = layoutOptions.rowHeight, margin = layoutOptions.margin;
29
35
  var processedLayout = useMemo(function () { return reltioLayoutToReactGridLayout(layout); }, [layout]);
30
- var onReltioLayoutChanged = pipe(reactGridLayoutToReltioLayout, copyPropsFromPreviousLayout(['autosizing'], layout), onLayoutChanged);
36
+ var onReltioLayoutChanged = pipe(reactGridLayoutToReltioLayout, copyPropsFromPreviousLayout(['autosizing'], layout), ifElse(always(isStatic), alignGroupedItemsHeights(heightsMap.current), calcLayoutItemsHeight(heightsMap.current)), onLayoutChanged);
31
37
  var handleDrop = function (layout, layoutItem, e) {
32
38
  if (onDrop) {
33
39
  onDrop(reactGridLayoutToReltioLayout(layout), reactGridLayoutItemToReltioLayoutItem(layoutItem), e);
@@ -35,44 +41,18 @@ var ReltioGridLayout = function (_a) {
35
41
  };
36
42
  var onToggleFullscreen = useCallback(function (id) { return setFullscreenItemId(function (prevId) { return (prevId ? null : id); }); }, []);
37
43
  var isFullscreenEnabled = fullscreenItemId !== null;
38
- var onItemHeightResizeInGroupingMode = useCallback(function (height, layoutId) {
39
- if (height) {
40
- heightsMap.current[layoutId] = calcHeight(height, layoutOptions);
41
- var alignedLayout = alignGroupedItemsHeights(heightsMap.current, layout);
42
- if (!equals(alignedLayout, layout)) {
43
- onLayoutChanged(alignedLayout);
44
- }
45
- }
46
- }, [layout, layoutOptions, onLayoutChanged]);
47
- var onItemHeightResize = useCallback(function (height, layoutId) {
48
- var isLayoutChanged = false;
49
- var newLayout = layout.map(function (layoutItem) {
50
- if (layoutItem.id === layoutId && height) {
44
+ var getAutosizeComponent = function (layoutItemId) { return (React.createElement(ReactResizeDetector, { handleHeight: true, onResize: function (_, height) {
45
+ if (height) {
51
46
  var newHeight = calcHeight(height, layoutOptions);
52
- if (layoutItem.height !== newHeight) {
53
- isLayoutChanged = true;
54
- return __assign(__assign({}, layoutItem), { minHeight: newHeight, maxHeight: newHeight, height: newHeight });
47
+ if (newHeight !== heightsMap.current[layoutItemId]) {
48
+ heightsMap.current[layoutItemId] = newHeight;
49
+ onReltioLayoutChanged(processedLayout);
55
50
  }
56
51
  }
57
- return layoutItem;
58
- });
59
- if (isLayoutChanged) {
60
- onLayoutChanged(newLayout);
61
- }
62
- }, [layout, layoutOptions, onLayoutChanged]);
63
- var getAutosizeComponent = function (layoutItemId) {
64
- return (React.createElement(ReactResizeDetector, { handleHeight: true, onResize: function (width, height) {
65
- if (isStatic) {
66
- onItemHeightResizeInGroupingMode(height, layoutItemId);
67
- }
68
- else {
69
- onItemHeightResize(height, layoutItemId);
70
- }
71
- } }));
72
- };
52
+ } })); };
73
53
  return (React.createElement(React.Fragment, null,
74
54
  React.createElement(ReactResizeDetector, { refreshMode: "debounce", refreshRate: 50, handleWidth: true, onResize: function (width) { return setWidth(width); } }),
75
- !!width && (React.createElement(GridLayout, { innerRef: ref, layout: processedLayout, cols: cols, draggableHandle: draggableHandle, autoSize: true, rowHeight: rowHeight, width: width, margin: margin, onLayoutChange: isStatic ? undefined : onReltioLayoutChanged, isResizable: !isStatic && !isFullscreenEnabled, isDraggable: !isStatic && !isFullscreenEnabled, className: classnames(classes.root, styles.gridLayout, (_b = {},
55
+ !!width && (React.createElement(GridLayout, { innerRef: ref, layout: processedLayout, cols: cols, draggableHandle: draggableHandle, autoSize: true, rowHeight: rowHeight, width: width, margin: margin, onLayoutChange: isStatic ? undefined : onReltioLayoutChanged, isResizable: !isStatic && !isFullscreenEnabled, isDraggable: !isStatic && !isFullscreenEnabled, className: classnames(classes === null || classes === void 0 ? void 0 : classes.root, styles.gridLayout, (_b = {},
76
56
  _b[styles.gridFullscreen] = isFullscreenEnabled,
77
57
  _b)), onDrop: handleDrop, droppingItem: droppingItem, isDroppable: !isStatic && isDroppable, onResizeStart: function (_, layoutItem) { return setResizingItemId(layoutItem.i); }, onResizeStop: function () { return setResizingItemId(null); }, "data-reltio-id": "reltio-grid-layout" }, processedLayout.map(function (layoutItem) {
78
58
  var _a;
@@ -82,16 +62,13 @@ var ReltioGridLayout = function (_a) {
82
62
  var autosizeComponent = isAutosize
83
63
  ? { AutosizeComponent: getAutosizeComponent(layoutItem.i) }
84
64
  : {};
85
- return (React.createElement(LayoutItem, __assign({ key: layoutItem.i, layoutItemConfig: layoutItem, views: views, onToggleFullscreen: onToggleFullscreen, onRemove: onRemove, className: classnames((_a = { fullscreen: isItemFullscreen }, _a[styles.isResizing] = isResizing, _a), classes.item, { static: isStatic }), isFullscreen: isItemFullscreen }, autosizeComponent)));
65
+ return (React.createElement(LayoutItem, __assign({ key: layoutItem.i, layoutItemConfig: layoutItem, views: views, onToggleFullscreen: onToggleFullscreen, onRemove: onRemove, className: classnames(classes === null || classes === void 0 ? void 0 : classes.item, (_a = {
66
+ static: isStatic,
67
+ fullscreen: isItemFullscreen
68
+ },
69
+ _a[styles.isResizing] = isResizing,
70
+ _a)), isFullscreen: isItemFullscreen }, autosizeComponent)));
86
71
  })))));
87
72
  };
88
- ReltioGridLayout.defaultProps = {
89
- layoutOptions: {
90
- cols: 4,
91
- rowHeight: 30,
92
- margin: [15, 15]
93
- },
94
- onLayoutChanged: identity,
95
- classes: {}
96
- };
73
+ ReltioGridLayout.displayName = 'ReltioGridLayout';
97
74
  export default memo(ReltioGridLayout);
@@ -8,3 +8,4 @@ export declare const getReltioLayoutItemById: any;
8
8
  export declare const copyPropsFromPreviousLayout: any;
9
9
  export declare const calcHeight: (height: number, options: ReltioGridLayoutOptions) => number;
10
10
  export declare const alignGroupedItemsHeights: any;
11
+ export declare const calcLayoutItemsHeight: any;
@@ -88,3 +88,12 @@ export var alignGroupedItemsHeights = curry(function (heightsMap, layout) {
88
88
  return layoutItem;
89
89
  });
90
90
  });
91
+ export var calcLayoutItemsHeight = curry(function (heightsMap, layout) {
92
+ return layout.map(function (layoutItem) {
93
+ var height = heightsMap[layoutItem.id];
94
+ if (height && layoutItem.autosizing) {
95
+ return __assign(__assign({}, layoutItem), { minHeight: height, maxHeight: height, height: height });
96
+ }
97
+ return layoutItem;
98
+ });
99
+ });
@@ -6,6 +6,7 @@ export var useStyles = makeStyles(function (_) { return ({
6
6
  position: 'relative',
7
7
  width: '100%',
8
8
  '& .react-grid-item': {
9
+ overflow: 'hidden',
9
10
  '&.react-grid-placeholder': {
10
11
  background: 'rgba(0, 0, 0, 0.03)',
11
12
  border: '2px dashed rgba(0, 0, 0, 0.3)',
@@ -20,6 +21,10 @@ export var useStyles = makeStyles(function (_) { return ({
20
21
  '&.static .react-resizable-handle': {
21
22
  display: 'none'
22
23
  },
24
+ '&.customView .react-resizable-handle': {
25
+ width: '10px',
26
+ height: '10px'
27
+ },
23
28
  '&.cssTransforms': {
24
29
  transitionProperty: 'transform'
25
30
  },
@@ -42,7 +42,7 @@ declare function useEditorContext(fieldName: any, dataTypeDefinition: any): {
42
42
  format?: undefined;
43
43
  tenant?: undefined;
44
44
  } | {
45
- format: any;
45
+ format: import("@reltio/mdm-sdk").NumberFormat;
46
46
  entries?: undefined;
47
47
  lookups?: undefined;
48
48
  lookupCode?: undefined;
@@ -10,7 +10,7 @@ var __assign = (this && this.__assign) || function () {
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
12
  import mdm, { profile } from '@reltio/mdm-module';
13
- import { DataTypes, getDependentLookups, getFacetedAttributeData, getLookups, resolveLookupsList } from '@reltio/mdm-sdk';
13
+ import { DataTypes, intl, getDependentLookups, getFacetedAttributeData, getLookups, resolveLookupsList, getNumberFormat } from '@reltio/mdm-sdk';
14
14
  import { useDispatch, useSelector } from 'react-redux';
15
15
  import { useCallback } from 'react';
16
16
  import { propOr, prop, pipe, keys } from 'ramda';
@@ -27,7 +27,7 @@ var useEditorContext = function (fieldName, dataTypeDefinition) {
27
27
  options: __assign(__assign({}, globalSearchRequestOptions), { max: max, pageNo: pageNo })
28
28
  }).then(pipe(prop(fieldName), keys));
29
29
  }, [fieldName, globalSearchRequestOptions]);
30
- var type = dataTypeDefinition.type, values = dataTypeDefinition.values, lookupCode = dataTypeDefinition.lookupCode, uri = dataTypeDefinition.uri, dependentLookupCode = dataTypeDefinition.dependentLookupCode, options = dataTypeDefinition.options;
30
+ var type = dataTypeDefinition.type, values = dataTypeDefinition.values, lookupCode = dataTypeDefinition.lookupCode, dependentLookupCode = dataTypeDefinition.dependentLookupCode, options = dataTypeDefinition.options;
31
31
  switch (type) {
32
32
  case DataTypes.TYPE_ENUM:
33
33
  return { entries: values.map(function (value) { return ({ value: value }); }) };
@@ -75,7 +75,7 @@ var useEditorContext = function (fieldName, dataTypeDefinition) {
75
75
  case DataTypes.TYPE_LONG:
76
76
  case DataTypes.TYPE_INT:
77
77
  return {
78
- format: attributePresentations[uri]
78
+ format: getNumberFormat(dataTypeDefinition, attributePresentations, intl.getLocale())
79
79
  };
80
80
  case DataTypes.TYPE_FILE:
81
81
  return { tenant: tenant };
@@ -24,11 +24,10 @@ import DataTypeValueEditor from '../DataTypeValueEditor/DataTypeValueEditor';
24
24
  import PropTypes from 'prop-types';
25
25
  import React from 'react';
26
26
  import i18n from 'ui-i18n';
27
- import { DataTypes, FilterType, isDateRangeFilterOption, isDateRangeValue, isMultiValueOption, isRangeFilterOption, mapFilterValue, wrapInArray } from '@reltio/mdm-sdk';
27
+ import { DataTypes, FilterType, isDateRangeFilterOption, isDateRangeValue, isMultiValueOption, isRangeFilterOption, mapFilterValue, utils, wrapInArray } from '@reltio/mdm-sdk';
28
28
  import { pipe } from 'ramda';
29
29
  import RangeDataTypeValueEditor from '../RangeDataTypeValueEditor/RangeDataTypeValueEditor';
30
30
  import DateRangeEditor from '../DateRangeEditor/DateRangeEditor';
31
- import { utils } from '@reltio/mdm-sdk';
32
31
  var toEditorValue = function (dataType) { return function (value) {
33
32
  switch (dataType) {
34
33
  case DataTypes.TYPE_DATE:
@@ -1,21 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { NumberFormat as TNumberFormat } from '@reltio/mdm-sdk';
3
+ type NumberEditorProps = {
4
+ multiple?: boolean;
5
+ integer?: boolean;
6
+ format?: TNumberFormat;
7
+ inputProps?: Record<string, unknown>;
8
+ InputProps?: Record<string, unknown>;
9
+ value: string | number | string[] | number[] | undefined;
10
+ onChange: (value: string | number | string[] | number[]) => void;
11
+ };
12
+ declare const NumberEditor: ({ integer, format, inputProps, InputProps, ...otherProps }: NumberEditorProps) => JSX.Element;
1
13
  export default NumberEditor;
2
- declare function NumberEditor({ integer, format, inputProps, InputProps, ...otherProps }: {
3
- [x: string]: any;
4
- integer: any;
5
- format: any;
6
- inputProps: any;
7
- InputProps: any;
8
- }): JSX.Element;
9
- declare namespace NumberEditor {
10
- namespace propTypes {
11
- export const multiple: PropTypes.Requireable<boolean>;
12
- export const integer: PropTypes.Requireable<boolean>;
13
- export { NumberFormatType as format };
14
- export const inputProps: PropTypes.Requireable<object>;
15
- export const InputProps: PropTypes.Requireable<object>;
16
- export const value: PropTypes.Requireable<NonNullable<string | number | string[] | number[]>>;
17
- export const onChange: PropTypes.Requireable<(...args: any[]) => any>;
18
- }
19
- }
20
- import PropTypes from 'prop-types';
21
- import { NumberFormatType } from '../../../constants/prop-types';
@@ -20,45 +20,30 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  }
21
21
  return t;
22
22
  };
23
- import NumberFormat from 'react-number-format';
24
- import PropTypes from 'prop-types';
25
23
  import React from 'react';
24
+ import NumberFormat from 'react-number-format';
26
25
  import TextEditor from '../TextEditor/TextEditor';
27
- import { NumberFormatType } from '../../../constants/prop-types';
28
- import { formatNumber } from '@reltio/mdm-sdk';
26
+ import { applyPresentationStrategyToValue, formatNumber, revertPresentationStrategyForValue } from '@reltio/mdm-sdk';
27
+ var getThousandsGroupStyle = function (groupSize) {
28
+ return ({
29
+ 2: 'lakh',
30
+ 3: 'thousand',
31
+ 4: 'wan'
32
+ }[groupSize]);
33
+ };
29
34
  var NumberFormatCustom = function (_a) {
30
- var inputRef = _a.inputRef, onChange = _a.onChange, integer = _a.integer, customInput = _a.customInput, format = _a.format, otherProps = __rest(_a, ["inputRef", "onChange", "integer", "customInput", "format"]);
31
- return (React.createElement(NumberFormat, __assign({}, otherProps, format, { getInputRef: inputRef, isNumericString: true, onValueChange: function (values) {
35
+ var inputRef = _a.inputRef, onChange = _a.onChange, integer = _a.integer, customInput = _a.customInput, format = _a.format, value = _a.value, otherProps = __rest(_a, ["inputRef", "onChange", "integer", "customInput", "format", "value"]);
36
+ var _b = format || {}, strategy = _b.strategy, groupSize = _b.groupSize, restFormat = __rest(_b, ["strategy", "groupSize"]);
37
+ return (React.createElement(NumberFormat, __assign({}, otherProps, { value: applyPresentationStrategyToValue(strategy, value), thousandsGroupStyle: getThousandsGroupStyle(groupSize) }, restFormat, { getInputRef: inputRef, isNumericString: true, onValueChange: function (values) {
32
38
  onChange({
33
39
  target: {
34
- value: values.value
40
+ value: revertPresentationStrategyForValue(strategy, values.value)
35
41
  }
36
42
  });
37
43
  }, decimalScale: integer ? 0 : undefined, customInput: customInput })));
38
44
  };
39
- NumberFormatCustom.propTypes = {
40
- inputRef: PropTypes.func.isRequired,
41
- onChange: PropTypes.func.isRequired,
42
- integer: PropTypes.bool,
43
- customInput: PropTypes.elementType,
44
- format: NumberFormatType
45
- };
46
45
  var NumberEditor = function (_a) {
47
46
  var integer = _a.integer, format = _a.format, inputProps = _a.inputProps, InputProps = _a.InputProps, otherProps = __rest(_a, ["integer", "format", "inputProps", "InputProps"]);
48
47
  return (React.createElement(TextEditor, __assign({}, otherProps, { inputProps: __assign({ integer: integer, format: format }, inputProps), InputProps: __assign(__assign({}, InputProps), { inputComponent: NumberFormatCustom }), getValueLabel: formatNumber(format) })));
49
48
  };
50
- NumberEditor.propTypes = {
51
- multiple: PropTypes.bool,
52
- integer: PropTypes.bool,
53
- format: NumberFormatType,
54
- inputProps: PropTypes.object,
55
- InputProps: PropTypes.object,
56
- value: PropTypes.oneOfType([
57
- PropTypes.string,
58
- PropTypes.arrayOf(PropTypes.string),
59
- PropTypes.number,
60
- PropTypes.arrayOf(PropTypes.number)
61
- ]),
62
- onChange: PropTypes.func
63
- };
64
49
  export default NumberEditor;
@@ -1,10 +1,10 @@
1
1
  export default TextEditor;
2
2
  declare function TextEditor({ multiple, value, getValueLabel, multiline, ...otherProps }: {
3
3
  [x: string]: any;
4
- multiple: any;
4
+ multiple?: boolean;
5
5
  value: any;
6
6
  getValueLabel: any;
7
- multiline: any;
7
+ multiline?: boolean;
8
8
  }): JSX.Element;
9
9
  declare namespace TextEditor {
10
10
  namespace propTypes {
@@ -25,7 +25,7 @@ import React from 'react';
25
25
  import MultipleInput from '../../MultipleInput/MultipleInput';
26
26
  import SimpleInput from '../../SimpleInput/SimpleInput';
27
27
  var TextEditor = function (_a) {
28
- var multiple = _a.multiple, value = _a.value, getValueLabel = _a.getValueLabel, multiline = _a.multiline, otherProps = __rest(_a, ["multiple", "value", "getValueLabel", "multiline"]);
28
+ var _b = _a.multiple, multiple = _b === void 0 ? false : _b, value = _a.value, getValueLabel = _a.getValueLabel, _c = _a.multiline, multiline = _c === void 0 ? false : _c, otherProps = __rest(_a, ["multiple", "value", "getValueLabel", "multiline"]);
29
29
  return multiple ? (React.createElement(MultipleInput, __assign({}, otherProps, { values: value, getValueLabel: getValueLabel }))) : (React.createElement(SimpleInput, __assign({}, otherProps, { value: value, multiline: multiline })));
30
30
  };
31
31
  TextEditor.propTypes = {
@@ -149,3 +149,4 @@ export { DataTenantBadge } from './DataTenantBadge/DataTenantBadge';
149
149
  export { HierarchyNodeTitle } from './HierarchyNodeTitle/HierarchyNodeTitle';
150
150
  export { default as RequiredMark } from './RequiredMark/RequiredMark';
151
151
  export { RelevanceScoreBadge } from './RelevanceScoreBadge/RelevanceScoreBadge';
152
+ export { default as MultilineMenuItem } from './MultilineMenuItem/MultilineMenuItem';
@@ -149,3 +149,4 @@ export { DataTenantBadge } from './DataTenantBadge/DataTenantBadge';
149
149
  export { HierarchyNodeTitle } from './HierarchyNodeTitle/HierarchyNodeTitle';
150
150
  export { default as RequiredMark } from './RequiredMark/RequiredMark';
151
151
  export { RelevanceScoreBadge } from './RelevanceScoreBadge/RelevanceScoreBadge';
152
+ export { default as MultilineMenuItem } from './MultilineMenuItem/MultilineMenuItem';
@@ -1,9 +1,3 @@
1
- export const NumberFormatType: PropTypes.Requireable<PropTypes.InferProps<{
2
- prefix: PropTypes.Requireable<string>;
3
- suffix: PropTypes.Requireable<string>;
4
- thousandSeparator: PropTypes.Requireable<string>;
5
- decimalSeparator: PropTypes.Requireable<string>;
6
- }>>;
7
1
  export const SelectValueType: PropTypes.Requireable<NonNullable<string | number | object>>;
8
2
  export const DropDownEntryType: PropTypes.Requireable<PropTypes.InferProps<{
9
3
  value: PropTypes.Validator<NonNullable<NonNullable<string | number | object>>>;
@@ -1,11 +1,5 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import { AttributeTypeType, FilterValueType, SortOrderType } from '@reltio/mdm-sdk';
3
- var NumberFormatType = PropTypes.shape({
4
- prefix: PropTypes.string,
5
- suffix: PropTypes.string,
6
- thousandSeparator: PropTypes.string,
7
- decimalSeparator: PropTypes.string
8
- });
9
3
  var SelectValueType = PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.object]);
10
4
  var DropDownEntryType = PropTypes.shape({
11
5
  value: SelectValueType.isRequired,
@@ -61,4 +55,4 @@ var QueryBuilderAttributeType = PropTypes.shape({
61
55
  filter: PropTypes.string,
62
56
  operator: PropTypes.string
63
57
  });
64
- export { NumberFormatType, SelectValueType, DropDownEntryType, DropDownGroupEntryType, ColumnDataType, SortingType, ColumnFilterType, ColumnsDataType, GroupedColumnsDataType, QueryBuilderAttributeDataType, QueryBuilderAttributeType };
58
+ export { SelectValueType, DropDownEntryType, DropDownGroupEntryType, ColumnDataType, SortingType, ColumnFilterType, ColumnsDataType, GroupedColumnsDataType, QueryBuilderAttributeDataType, QueryBuilderAttributeType };
@@ -24,3 +24,4 @@ export { useReadableSearchState } from './useReadableSearchState';
24
24
  export { useSavedStateForEntityType } from './useSavedStateForEntityType';
25
25
  export { useSnackbar } from './useSnackbar';
26
26
  export { useIsMountedRef } from './useIsMountedRef';
27
+ export { useLayoutResetter } from './useLayoutResetter';
@@ -24,3 +24,4 @@ export { useReadableSearchState } from './useReadableSearchState';
24
24
  export { useSavedStateForEntityType } from './useSavedStateForEntityType';
25
25
  export { useSnackbar } from './useSnackbar';
26
26
  export { useIsMountedRef } from './useIsMountedRef';
27
+ export { useLayoutResetter } from './useLayoutResetter';
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ type Props = {
3
+ onLayoutReset: () => void;
4
+ onResetUndo: () => void;
5
+ };
6
+ export declare const useLayoutResetter: ({ onLayoutReset, onResetUndo }: Props) => {
7
+ SnackbarRenderer: () => JSX.Element;
8
+ resetLayout: () => void;
9
+ };
10
+ export {};
@@ -0,0 +1,16 @@
1
+ import i18n from 'ui-i18n';
2
+ import { useSnackbar } from './useSnackbar';
3
+ export var useLayoutResetter = function (_a) {
4
+ var onLayoutReset = _a.onLayoutReset, onResetUndo = _a.onResetUndo;
5
+ var resetLayout = function () {
6
+ onLayoutReset();
7
+ showSnackbarMessage(i18n.text("The default layout is now restored. It's still not too late to revert your changes. Click Undo to go back to your personalized settings."));
8
+ };
9
+ var _b = useSnackbar({
10
+ onDismissClick: onResetUndo,
11
+ showDismiss: true,
12
+ autoHideDuration: 5000,
13
+ dismissTitle: i18n.text('Undo')
14
+ }), SnackbarRenderer = _b.SnackbarRenderer, showSnackbarMessage = _b.showSnackbarMessage;
15
+ return { SnackbarRenderer: SnackbarRenderer, resetLayout: resetLayout };
16
+ };
@@ -3,8 +3,11 @@ import { SnackbarOrigin } from '@material-ui/core/Snackbar';
3
3
  type SnackbarOptions = {
4
4
  anchorOrigin?: SnackbarOrigin;
5
5
  showDismiss?: boolean;
6
+ dismissTitle?: string;
7
+ autoHideDuration?: number;
8
+ onDismissClick?: () => void;
6
9
  };
7
- export declare const useSnackbar: (options?: SnackbarOptions) => {
10
+ export declare const useSnackbar: ({ anchorOrigin, showDismiss, dismissTitle, autoHideDuration, onDismissClick }?: SnackbarOptions) => {
8
11
  SnackbarRenderer: () => JSX.Element;
9
12
  showSnackbarMessage: (message: any) => void;
10
13
  };
@@ -1,25 +1,32 @@
1
1
  import React, { useCallback, useState } from 'react';
2
2
  import i18n from 'ui-i18n';
3
+ import { pipe } from 'ramda';
3
4
  import Portal from '@material-ui/core/Portal';
4
5
  import Button from '@material-ui/core/Button';
5
6
  import Snackbar from '@material-ui/core/Snackbar';
7
+ import { noop } from '../core';
6
8
  var FIVE_MINUTES = 5 * 60 * 1000;
7
- export var useSnackbar = function (options) {
8
- if (options === void 0) { options = {}; }
9
- var anchorOrigin = options.anchorOrigin, showDismiss = options.showDismiss;
10
- var _a = useState(false), isOpenSnackbar = _a[0], setIsOpenSnackbar = _a[1];
11
- var _b = useState(''), snackbarMessage = _b[0], setSnackbarMessage = _b[1];
9
+ export var useSnackbar = function (_a) {
10
+ var _b = _a === void 0 ? {} : _a, anchorOrigin = _b.anchorOrigin, showDismiss = _b.showDismiss, _c = _b.dismissTitle, dismissTitle = _c === void 0 ? i18n.text('Dismiss') : _c, _d = _b.autoHideDuration, autoHideDuration = _d === void 0 ? FIVE_MINUTES : _d, _e = _b.onDismissClick, onDismissClick = _e === void 0 ? noop : _e;
11
+ var _f = useState(false), isOpenSnackbar = _f[0], setIsOpenSnackbar = _f[1];
12
+ var _g = useState(''), snackbarMessage = _g[0], setSnackbarMessage = _g[1];
12
13
  var closeSnackbar = useCallback(function () {
13
14
  setIsOpenSnackbar(false);
14
15
  setSnackbarMessage('');
15
16
  }, []);
17
+ var handleSnackbarClose = useCallback(function (_, reason) {
18
+ if (reason === 'clickaway') {
19
+ return;
20
+ }
21
+ closeSnackbar();
22
+ }, [closeSnackbar]);
16
23
  var showSnackbarMessage = useCallback(function (message) {
17
24
  setIsOpenSnackbar(true);
18
25
  setSnackbarMessage(message);
19
26
  }, []);
20
27
  var SnackbarRenderer = useCallback(function () {
21
28
  return (React.createElement(Portal, { container: document.body },
22
- React.createElement(Snackbar, { open: isOpenSnackbar, anchorOrigin: anchorOrigin, autoHideDuration: FIVE_MINUTES, onClose: closeSnackbar, message: snackbarMessage, action: showDismiss ? (React.createElement(Button, { color: "primary", onClick: closeSnackbar }, i18n.text('Dismiss'))) : undefined })));
29
+ React.createElement(Snackbar, { open: isOpenSnackbar, anchorOrigin: anchorOrigin, autoHideDuration: autoHideDuration, onClose: handleSnackbarClose, message: snackbarMessage, style: { maxWidth: 500 }, action: showDismiss ? (React.createElement(Button, { color: "primary", onClick: pipe(closeSnackbar, onDismissClick) }, dismissTitle)) : undefined })));
23
30
  // eslint-disable-next-line react-hooks/exhaustive-deps
24
31
  }, [isOpenSnackbar, closeSnackbar, snackbarMessage]);
25
32
  return { SnackbarRenderer: SnackbarRenderer, showSnackbarMessage: showSnackbarMessage };
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.1562",
3
+ "version": "1.4.1564",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
7
7
  "dependencies": {
8
8
  "@date-io/moment": "^1.3.5",
9
9
  "@react-google-maps/api": "2.7.0",
10
- "@reltio/mdm-module": "^1.4.1562",
11
- "@reltio/mdm-sdk": "^1.4.1562",
10
+ "@reltio/mdm-module": "^1.4.1564",
11
+ "@reltio/mdm-sdk": "^1.4.1564",
12
12
  "classnames": "^2.2.5",
13
13
  "d3-cloud": "^1.2.5",
14
14
  "d3-geo": "^2.0.1",