@reltio/components 1.4.1810 → 1.4.1811

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.
@@ -3,6 +3,10 @@ type NumberCellValueRendererProps = {
3
3
  columnData: {
4
4
  maxValue?: number;
5
5
  };
6
+ rowValue: {
7
+ onLoadButtonClick?: () => void;
8
+ isLoading?: boolean;
9
+ };
6
10
  };
7
- export declare const NumberCellValueRenderer: ({ value, columnData: { maxValue } }: NumberCellValueRendererProps) => JSX.Element;
11
+ export declare const NumberCellValueRenderer: ({ value, columnData: { maxValue }, rowValue: { onLoadButtonClick, isLoading } }: NumberCellValueRendererProps) => JSX.Element;
8
12
  export {};
@@ -6,16 +6,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.NumberCellValueRenderer = void 0;
7
7
  var react_1 = __importDefault(require("react"));
8
8
  var ramda_1 = require("ramda");
9
+ var ui_i18n_1 = __importDefault(require("ui-i18n"));
9
10
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
10
11
  var Typography_1 = __importDefault(require("@mui/material/Typography"));
12
+ var Cached_1 = __importDefault(require("@mui/icons-material/Cached"));
13
+ var SmallIconButton_1 = require("../../../SmallIconButton");
11
14
  var ColorBar_1 = require("../../../ColorBar");
15
+ var core_1 = require("../../../core");
12
16
  var styles_1 = require("./styles");
13
17
  var NumberCellValueRenderer = function (_a) {
14
- var value = _a.value, maxValue = _a.columnData.maxValue;
18
+ var value = _a.value, maxValue = _a.columnData.maxValue, _b = _a.rowValue, _c = _b.onLoadButtonClick, onLoadButtonClick = _c === void 0 ? core_1.noop : _c, isLoading = _b.isLoading;
15
19
  var styles = (0, styles_1.useStyles)();
16
- return (react_1.default.createElement("div", { className: styles.numberContainer },
20
+ var showLoadButton = value === -1;
21
+ return (react_1.default.createElement("div", { className: styles.numberContainer }, showLoadButton ? (react_1.default.createElement(react_1.default.Fragment, null,
22
+ react_1.default.createElement(SmallIconButton_1.SmallIconButton, { icon: Cached_1.default, disabled: isLoading, onClick: onLoadButtonClick }),
23
+ react_1.default.createElement(Typography_1.default, { className: styles.loadCaption, variant: "caption" }, isLoading ? ui_i18n_1.default.text('Loading data') : ui_i18n_1.default.text('Load data')))) : (react_1.default.createElement(react_1.default.Fragment, null,
17
24
  react_1.default.createElement(Typography_1.default, { className: styles.number }, (0, mdm_sdk_1.formatNumberAsMetric)(value, 9999)),
18
25
  !(0, ramda_1.isNil)(maxValue) && (react_1.default.createElement("div", { className: styles.colorBarContainer },
19
- react_1.default.createElement(ColorBar_1.ColorBar, { width: value, maxWidth: maxValue })))));
26
+ react_1.default.createElement(ColorBar_1.ColorBar, { width: value, maxWidth: maxValue })))))));
20
27
  };
21
28
  exports.NumberCellValueRenderer = NumberCellValueRenderer;
@@ -1,41 +1,90 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
2
38
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
40
  };
5
41
  Object.defineProperty(exports, "__esModule", { value: true });
6
42
  var react_1 = __importDefault(require("react"));
7
- var enzyme_1 = require("enzyme");
43
+ var react_2 = require("@testing-library/react");
44
+ var user_event_1 = __importDefault(require("@testing-library/user-event"));
45
+ var components_1 = require("@reltio/components");
8
46
  var NumberCellValueRenderer_1 = require("./NumberCellValueRenderer");
9
- var ColorBar_1 = require("../../../ColorBar");
10
47
  describe('NumberCellValueRenderer', function () {
11
48
  it('should render main parts', function () {
12
49
  var value = 100;
13
50
  var maxValue = 1000;
14
- var wrapper = (0, enzyme_1.shallow)(react_1.default.createElement(NumberCellValueRenderer_1.NumberCellValueRenderer, { value: value, columnData: { maxValue: maxValue } }));
15
- var number = wrapper.find('.number');
16
- expect(number).toHaveLength(1);
17
- expect(number.text()).toBe(value.toString());
18
- var colorBar = wrapper.find(ColorBar_1.ColorBar);
19
- expect(colorBar).toHaveLength(1);
20
- expect(colorBar.props()).toEqual({
21
- width: value,
22
- maxWidth: maxValue
23
- });
51
+ (0, react_2.render)(react_1.default.createElement(NumberCellValueRenderer_1.NumberCellValueRenderer, { value: value, columnData: { maxValue: maxValue }, rowValue: {} }));
52
+ expect(react_2.screen.getByText(value)).toBeInTheDocument();
53
+ expect(document.querySelector('.bar')).toBeInTheDocument();
24
54
  });
25
55
  it('should not render ColorBar if maxValue is undefined', function () {
26
56
  var value = 100;
27
- var wrapper = (0, enzyme_1.shallow)(react_1.default.createElement(NumberCellValueRenderer_1.NumberCellValueRenderer, { value: value, columnData: {} }));
28
- var number = wrapper.find('.number');
29
- expect(number).toHaveLength(1);
30
- expect(number.text()).toBe(value.toString());
31
- var colorBar = wrapper.find(ColorBar_1.ColorBar);
32
- expect(colorBar).toHaveLength(0);
57
+ (0, react_2.render)(react_1.default.createElement(NumberCellValueRenderer_1.NumberCellValueRenderer, { value: value, columnData: {}, rowValue: {} }));
58
+ expect(react_2.screen.getByText(value)).toBeInTheDocument();
59
+ expect(document.querySelector('.bar')).not.toBeInTheDocument();
33
60
  });
34
61
  it('should format big value', function () {
35
62
  var value = 10000;
36
- var wrapper = (0, enzyme_1.shallow)(react_1.default.createElement(NumberCellValueRenderer_1.NumberCellValueRenderer, { value: value, columnData: {} }));
37
- var number = wrapper.find('.number');
38
- expect(number).toHaveLength(1);
39
- expect(number.text()).toBe('10.0K');
63
+ (0, react_2.render)(react_1.default.createElement(NumberCellValueRenderer_1.NumberCellValueRenderer, { value: value, columnData: {}, rowValue: {} }));
64
+ expect(react_2.screen.getByText('10.0K')).toBeInTheDocument();
40
65
  });
66
+ it('should show load button when value is -1', function () {
67
+ (0, react_2.render)(react_1.default.createElement(NumberCellValueRenderer_1.NumberCellValueRenderer, { value: -1, columnData: { maxValue: 100 }, rowValue: {} }));
68
+ expect((0, components_1.getMuiIconByName)('Cached', react_2.screen.getByRole('button'))).toBeInTheDocument();
69
+ });
70
+ it('should disable load button when isLoading is true', function () {
71
+ (0, react_2.render)(react_1.default.createElement(NumberCellValueRenderer_1.NumberCellValueRenderer, { value: -1, columnData: { maxValue: 100 }, rowValue: { isLoading: true } }));
72
+ expect(react_2.screen.getByRole('button')).toBeDisabled();
73
+ });
74
+ it('should call onLoadButtonClick after click', function () { return __awaiter(void 0, void 0, void 0, function () {
75
+ var user, clickHandler;
76
+ return __generator(this, function (_a) {
77
+ switch (_a.label) {
78
+ case 0:
79
+ user = user_event_1.default.setup();
80
+ clickHandler = jest.fn();
81
+ (0, react_2.render)(react_1.default.createElement(NumberCellValueRenderer_1.NumberCellValueRenderer, { value: -1, columnData: { maxValue: 100 }, rowValue: { onLoadButtonClick: clickHandler } }));
82
+ return [4 /*yield*/, user.click(react_2.screen.getByRole('button'))];
83
+ case 1:
84
+ _a.sent();
85
+ expect(clickHandler).toHaveBeenCalled();
86
+ return [2 /*return*/];
87
+ }
88
+ });
89
+ }); });
41
90
  });
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"number" | "numberContainer" | "colorBarContainer">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"number" | "numberContainer" | "colorBarContainer" | "loadCaption">;
@@ -27,5 +27,10 @@ exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
27
27
  opacity: 1,
28
28
  backgroundColor: '#0072CE'
29
29
  }
30
+ },
31
+ loadCaption: {
32
+ color: 'rgba(0, 0, 0, 0.54)',
33
+ fontWeight: 500,
34
+ paddingLeft: '10px'
30
35
  }
31
36
  }); });
@@ -3,6 +3,10 @@ type NumberCellValueRendererProps = {
3
3
  columnData: {
4
4
  maxValue?: number;
5
5
  };
6
+ rowValue: {
7
+ onLoadButtonClick?: () => void;
8
+ isLoading?: boolean;
9
+ };
6
10
  };
7
- export declare const NumberCellValueRenderer: ({ value, columnData: { maxValue } }: NumberCellValueRendererProps) => JSX.Element;
11
+ export declare const NumberCellValueRenderer: ({ value, columnData: { maxValue }, rowValue: { onLoadButtonClick, isLoading } }: NumberCellValueRendererProps) => JSX.Element;
8
12
  export {};
@@ -1,14 +1,21 @@
1
1
  import React from 'react';
2
2
  import { isNil } from 'ramda';
3
+ import i18n from 'ui-i18n';
3
4
  import { formatNumberAsMetric } from '@reltio/mdm-sdk';
4
5
  import Typography from '@mui/material/Typography';
6
+ import CachedIcon from '@mui/icons-material/Cached';
7
+ import { SmallIconButton } from '../../../SmallIconButton';
5
8
  import { ColorBar } from '../../../ColorBar';
9
+ import { noop } from '../../../core';
6
10
  import { useStyles } from './styles';
7
11
  export var NumberCellValueRenderer = function (_a) {
8
- var value = _a.value, maxValue = _a.columnData.maxValue;
12
+ var value = _a.value, maxValue = _a.columnData.maxValue, _b = _a.rowValue, _c = _b.onLoadButtonClick, onLoadButtonClick = _c === void 0 ? noop : _c, isLoading = _b.isLoading;
9
13
  var styles = useStyles();
10
- return (React.createElement("div", { className: styles.numberContainer },
14
+ var showLoadButton = value === -1;
15
+ return (React.createElement("div", { className: styles.numberContainer }, showLoadButton ? (React.createElement(React.Fragment, null,
16
+ React.createElement(SmallIconButton, { icon: CachedIcon, disabled: isLoading, onClick: onLoadButtonClick }),
17
+ React.createElement(Typography, { className: styles.loadCaption, variant: "caption" }, isLoading ? i18n.text('Loading data') : i18n.text('Load data')))) : (React.createElement(React.Fragment, null,
11
18
  React.createElement(Typography, { className: styles.number }, formatNumberAsMetric(value, 9999)),
12
19
  !isNil(maxValue) && (React.createElement("div", { className: styles.colorBarContainer },
13
- React.createElement(ColorBar, { width: value, maxWidth: maxValue })))));
20
+ React.createElement(ColorBar, { width: value, maxWidth: maxValue })))))));
14
21
  };
@@ -1,36 +1,85 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
1
37
  import React from 'react';
2
- import { shallow } from 'enzyme';
38
+ import { render, screen } from '@testing-library/react';
39
+ import userEvent from '@testing-library/user-event';
40
+ import { getMuiIconByName } from '@reltio/components';
3
41
  import { NumberCellValueRenderer } from './NumberCellValueRenderer';
4
- import { ColorBar } from '../../../ColorBar';
5
42
  describe('NumberCellValueRenderer', function () {
6
43
  it('should render main parts', function () {
7
44
  var value = 100;
8
45
  var maxValue = 1000;
9
- var wrapper = shallow(React.createElement(NumberCellValueRenderer, { value: value, columnData: { maxValue: maxValue } }));
10
- var number = wrapper.find('.number');
11
- expect(number).toHaveLength(1);
12
- expect(number.text()).toBe(value.toString());
13
- var colorBar = wrapper.find(ColorBar);
14
- expect(colorBar).toHaveLength(1);
15
- expect(colorBar.props()).toEqual({
16
- width: value,
17
- maxWidth: maxValue
18
- });
46
+ render(React.createElement(NumberCellValueRenderer, { value: value, columnData: { maxValue: maxValue }, rowValue: {} }));
47
+ expect(screen.getByText(value)).toBeInTheDocument();
48
+ expect(document.querySelector('.bar')).toBeInTheDocument();
19
49
  });
20
50
  it('should not render ColorBar if maxValue is undefined', function () {
21
51
  var value = 100;
22
- var wrapper = shallow(React.createElement(NumberCellValueRenderer, { value: value, columnData: {} }));
23
- var number = wrapper.find('.number');
24
- expect(number).toHaveLength(1);
25
- expect(number.text()).toBe(value.toString());
26
- var colorBar = wrapper.find(ColorBar);
27
- expect(colorBar).toHaveLength(0);
52
+ render(React.createElement(NumberCellValueRenderer, { value: value, columnData: {}, rowValue: {} }));
53
+ expect(screen.getByText(value)).toBeInTheDocument();
54
+ expect(document.querySelector('.bar')).not.toBeInTheDocument();
28
55
  });
29
56
  it('should format big value', function () {
30
57
  var value = 10000;
31
- var wrapper = shallow(React.createElement(NumberCellValueRenderer, { value: value, columnData: {} }));
32
- var number = wrapper.find('.number');
33
- expect(number).toHaveLength(1);
34
- expect(number.text()).toBe('10.0K');
58
+ render(React.createElement(NumberCellValueRenderer, { value: value, columnData: {}, rowValue: {} }));
59
+ expect(screen.getByText('10.0K')).toBeInTheDocument();
60
+ });
61
+ it('should show load button when value is -1', function () {
62
+ render(React.createElement(NumberCellValueRenderer, { value: -1, columnData: { maxValue: 100 }, rowValue: {} }));
63
+ expect(getMuiIconByName('Cached', screen.getByRole('button'))).toBeInTheDocument();
35
64
  });
65
+ it('should disable load button when isLoading is true', function () {
66
+ render(React.createElement(NumberCellValueRenderer, { value: -1, columnData: { maxValue: 100 }, rowValue: { isLoading: true } }));
67
+ expect(screen.getByRole('button')).toBeDisabled();
68
+ });
69
+ it('should call onLoadButtonClick after click', function () { return __awaiter(void 0, void 0, void 0, function () {
70
+ var user, clickHandler;
71
+ return __generator(this, function (_a) {
72
+ switch (_a.label) {
73
+ case 0:
74
+ user = userEvent.setup();
75
+ clickHandler = jest.fn();
76
+ render(React.createElement(NumberCellValueRenderer, { value: -1, columnData: { maxValue: 100 }, rowValue: { onLoadButtonClick: clickHandler } }));
77
+ return [4 /*yield*/, user.click(screen.getByRole('button'))];
78
+ case 1:
79
+ _a.sent();
80
+ expect(clickHandler).toHaveBeenCalled();
81
+ return [2 /*return*/];
82
+ }
83
+ });
84
+ }); });
36
85
  });
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"number" | "numberContainer" | "colorBarContainer">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"number" | "numberContainer" | "colorBarContainer" | "loadCaption">;
@@ -24,5 +24,10 @@ export var useStyles = makeStyles(function (theme) { return ({
24
24
  opacity: 1,
25
25
  backgroundColor: '#0072CE'
26
26
  }
27
+ },
28
+ loadCaption: {
29
+ color: 'rgba(0, 0, 0, 0.54)',
30
+ fontWeight: 500,
31
+ paddingLeft: '10px'
27
32
  }
28
33
  }); });
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.1810",
3
+ "version": "1.4.1811",
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
  "@fluentui/react-context-selector": "^9.1.26",
9
9
  "@react-google-maps/api": "2.7.0",
10
- "@reltio/mdm-sdk": "^1.4.1771",
10
+ "@reltio/mdm-sdk": "^1.4.1772",
11
11
  "classnames": "^2.2.5",
12
12
  "d3-cloud": "^1.2.5",
13
13
  "d3-geo": "^2.0.1",