@dhis2-ui/modal 7.7.10 → 7.8.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.
- package/build/cjs/modal/modal.js +20 -28
- package/build/cjs/modal/modal.stories.js +98 -4
- package/build/cjs/modal/modal.test.js +65 -0
- package/build/cjs/modal-actions/modal-actions.js +3 -6
- package/build/cjs/modal-content/modal-content.js +4 -4
- package/build/cjs/modal-title/modal-title.js +4 -4
- package/build/es/modal/modal.js +22 -28
- package/build/es/modal/modal.stories.js +84 -3
- package/build/es/modal/modal.test.js +50 -0
- package/build/es/modal-actions/modal-actions.js +3 -5
- package/build/es/modal-content/modal-content.js +4 -4
- package/build/es/modal-title/modal-title.js +5 -5
- package/package.json +6 -6
package/build/cjs/modal/modal.js
CHANGED
|
@@ -23,56 +23,47 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
23
23
|
|
|
24
24
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
25
|
|
|
26
|
-
const
|
|
26
|
+
const resolveLayerStyles = hide => ({
|
|
27
27
|
styles: /*#__PURE__*/_react.default.createElement(_style.default, {
|
|
28
|
-
id: "
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
styles: /*#__PURE__*/_react.default.createElement(_style.default, {
|
|
34
|
-
id: "1378205604"
|
|
35
|
-
}, [`.top.jsx-1378205604{padding-top:${_uiConstants.spacers.dp64};}`, `.bottom.jsx-1378205604{padding-bottom:${_uiConstants.spacers.dp64};}`]),
|
|
36
|
-
className: "jsx-1378205604"
|
|
37
|
-
};
|
|
38
|
-
const layerStyles = {
|
|
39
|
-
styles: /*#__PURE__*/_react.default.createElement(_style.default, {
|
|
40
|
-
id: "427720588"
|
|
41
|
-
}, ["div.jsx-427720588{display:none;}"]),
|
|
42
|
-
className: "jsx-427720588"
|
|
43
|
-
};
|
|
28
|
+
id: "1884450060",
|
|
29
|
+
dynamic: [_uiConstants.spacers.dp64, hide ? 'none' : 'block']
|
|
30
|
+
}, [`div.__jsx-style-dynamic-selector{padding:${_uiConstants.spacers.dp64};display:${hide ? 'none' : 'block'};}`]),
|
|
31
|
+
className: _style.default.dynamic([["1884450060", [_uiConstants.spacers.dp64, hide ? 'none' : 'block']]])
|
|
32
|
+
});
|
|
44
33
|
|
|
45
34
|
const Modal = ({
|
|
46
35
|
children,
|
|
47
36
|
className,
|
|
48
37
|
dataTest,
|
|
49
38
|
hide,
|
|
39
|
+
fluid,
|
|
50
40
|
large,
|
|
51
41
|
onClose,
|
|
52
42
|
position,
|
|
53
43
|
small
|
|
54
44
|
}) => {
|
|
45
|
+
const layerStyles = resolveLayerStyles(hide);
|
|
55
46
|
return /*#__PURE__*/_react.default.createElement(_layer.Layer, {
|
|
56
47
|
onClick: onClose,
|
|
57
|
-
className:
|
|
48
|
+
className: layerStyles.className,
|
|
58
49
|
translucent: !hide
|
|
59
50
|
}, /*#__PURE__*/_react.default.createElement(_center.Center, {
|
|
60
|
-
position: position
|
|
61
|
-
className: centeredContent.className
|
|
51
|
+
position: position
|
|
62
52
|
}, /*#__PURE__*/_react.default.createElement("aside", {
|
|
63
53
|
role: "dialog",
|
|
64
54
|
"aria-modal": "true",
|
|
65
55
|
"data-test": dataTest,
|
|
66
|
-
className: _style.default.dynamic([["
|
|
56
|
+
className: _style.default.dynamic([["1701687214", [2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64]]]) + " " + ((0, _classnames.default)(className, {
|
|
67
57
|
small,
|
|
68
|
-
large
|
|
58
|
+
large,
|
|
59
|
+
fluid
|
|
69
60
|
}) || "")
|
|
70
|
-
}, /*#__PURE__*/_react.default.createElement(_card.Card, {
|
|
71
|
-
className:
|
|
72
|
-
}, children)),
|
|
73
|
-
id: "
|
|
74
|
-
dynamic: [2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64]
|
|
75
|
-
}, [`
|
|
61
|
+
}, /*#__PURE__*/_react.default.createElement(_card.Card, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
62
|
+
className: _style.default.dynamic([["1701687214", [2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64]]])
|
|
63
|
+
}, children))), layerStyles.styles), /*#__PURE__*/_react.default.createElement(_style.default, {
|
|
64
|
+
id: "1701687214",
|
|
65
|
+
dynamic: [2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64, 2 * _uiConstants.spacersNum.dp64]
|
|
66
|
+
}, [`div.__jsx-style-dynamic-selector{padding:24px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:column;-ms-flex-flow:column;flex-flow:column;max-width:calc(100vw - ${2 * _uiConstants.spacersNum.dp64}px);max-height:calc(100vh - ${2 * _uiConstants.spacersNum.dp64}px);}`, `aside.__jsx-style-dynamic-selector{height:auto;width:600px;max-width:calc(100vw - ${2 * _uiConstants.spacersNum.dp64}px);max-height:calc(100vh - ${2 * _uiConstants.spacersNum.dp64}px);}`, "aside.small.__jsx-style-dynamic-selector{width:400px;}", "aside.large.__jsx-style-dynamic-selector{width:800px;}", "aside.fluid.__jsx-style-dynamic-selector{width:auto;}"]));
|
|
76
67
|
};
|
|
77
68
|
|
|
78
69
|
exports.Modal = Modal;
|
|
@@ -84,6 +75,7 @@ Modal.propTypes = {
|
|
|
84
75
|
children: _propTypes.default.node,
|
|
85
76
|
className: _propTypes.default.string,
|
|
86
77
|
dataTest: _propTypes.default.string,
|
|
78
|
+
fluid: _propTypes.default.bool,
|
|
87
79
|
hide: _propTypes.default.bool,
|
|
88
80
|
large: _uiConstants.sharedPropTypes.sizePropType,
|
|
89
81
|
position: _uiConstants.sharedPropTypes.insideAlignmentPropType,
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.ModalThatHidesWithStatefulComponens = exports.LargeModalWithMoreNestedModals = exports.LargeWithSelectComponent = exports.SmallLongTitle = exports.BottomScrollable = exports.MiddleScrollable = exports.TopScrollable = exports.SmallClickableScreenCover = exports.SmallDestructivePrimary = exports.SmallContentPrimary = exports.LargeTitleContentPrimary = exports.MediumTitleContentAction = exports.SmallTitleContentAction = exports.AlignmentBottom = exports.AlignmentMiddle = exports.DefaultContent = exports.default = void 0;
|
|
6
|
+
exports.FluidBottom = exports.FluidMiddle = exports.FluidTop = exports.ModalThatHidesWithStatefulComponens = exports.LargeModalWithMoreNestedModals = exports.LargeWithSelectComponent = exports.SmallLongTitle = exports.BottomScrollable = exports.MiddleScrollable = exports.TopScrollable = exports.SmallClickableScreenCover = exports.SmallDestructivePrimary = exports.SmallContentPrimary = exports.FluidTitleContentPrimary = exports.LargeTitleContentPrimary = exports.MediumTitleContentAction = exports.SmallTitleContentAction = exports.AlignmentBottom = exports.AlignmentMiddle = exports.DefaultContent = exports.default = void 0;
|
|
7
7
|
|
|
8
8
|
var _style = _interopRequireDefault(require("styled-jsx/style"));
|
|
9
9
|
|
|
10
|
+
var _box = require("@dhis2-ui/box");
|
|
11
|
+
|
|
10
12
|
var _button = require("@dhis2-ui/button");
|
|
11
13
|
|
|
12
14
|
var _menu = require("@dhis2-ui/menu");
|
|
@@ -121,9 +123,9 @@ const AlignmentBottom = args => /*#__PURE__*/_react.default.createElement(_modal
|
|
|
121
123
|
exports.AlignmentBottom = AlignmentBottom;
|
|
122
124
|
AlignmentBottom.args = {
|
|
123
125
|
onClose,
|
|
124
|
-
|
|
126
|
+
position: 'bottom'
|
|
125
127
|
};
|
|
126
|
-
AlignmentBottom.storyName = '
|
|
128
|
+
AlignmentBottom.storyName = 'Position: Bottom';
|
|
127
129
|
|
|
128
130
|
const SmallTitleContentAction = args => /*#__PURE__*/_react.default.createElement(_modal.Modal, args, /*#__PURE__*/_react.default.createElement(_index.ModalTitle, null, "This is a small modal with title, content and primary action"), /*#__PURE__*/_react.default.createElement(_index.ModalContent, null, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."), /*#__PURE__*/_react.default.createElement(_index.ModalActions, null, /*#__PURE__*/_react.default.createElement(_button.ButtonStrip, {
|
|
129
131
|
end: true
|
|
@@ -180,6 +182,38 @@ LargeTitleContentPrimary.args = {
|
|
|
180
182
|
};
|
|
181
183
|
LargeTitleContentPrimary.storyName = 'Large: Title, Content, Primary';
|
|
182
184
|
|
|
185
|
+
const FluidTitleContentPrimary = args => /*#__PURE__*/_react.default.createElement(_modal.Modal, args, /*#__PURE__*/_react.default.createElement(_index.ModalTitle, null, "This is a modal using custom dimensions, with title, content and primary action"), /*#__PURE__*/_react.default.createElement(_index.ModalContent, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
186
|
+
style: {
|
|
187
|
+
display: 'flex',
|
|
188
|
+
flexFlow: 'row wrap'
|
|
189
|
+
}
|
|
190
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
191
|
+
style: {
|
|
192
|
+
width: '600px',
|
|
193
|
+
backgroundColor: '#fea'
|
|
194
|
+
}
|
|
195
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."), /*#__PURE__*/_react.default.createElement("div", {
|
|
196
|
+
style: {
|
|
197
|
+
width: '300px',
|
|
198
|
+
backgroundColor: '#eaf'
|
|
199
|
+
}
|
|
200
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."))), /*#__PURE__*/_react.default.createElement(_index.ModalActions, null, /*#__PURE__*/_react.default.createElement(_button.ButtonStrip, {
|
|
201
|
+
end: true
|
|
202
|
+
}, /*#__PURE__*/_react.default.createElement(_button.Button, {
|
|
203
|
+
onClick: say('Button secondary'),
|
|
204
|
+
secondary: true
|
|
205
|
+
}, "Secondary action"), /*#__PURE__*/_react.default.createElement(_button.Button, {
|
|
206
|
+
onClick: say('Button primary'),
|
|
207
|
+
primary: true
|
|
208
|
+
}, "Primary action"))));
|
|
209
|
+
|
|
210
|
+
exports.FluidTitleContentPrimary = FluidTitleContentPrimary;
|
|
211
|
+
FluidTitleContentPrimary.args = {
|
|
212
|
+
fluid: true,
|
|
213
|
+
position: 'top'
|
|
214
|
+
};
|
|
215
|
+
FluidTitleContentPrimary.storyName = 'Fluid (Custom sizes): Title, Content, Primary';
|
|
216
|
+
|
|
183
217
|
const SmallContentPrimary = args => /*#__PURE__*/_react.default.createElement(_modal.Modal, args, /*#__PURE__*/_react.default.createElement(_index.ModalContent, null, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."), /*#__PURE__*/_react.default.createElement(_index.ModalActions, null, /*#__PURE__*/_react.default.createElement(_button.ButtonStrip, {
|
|
184
218
|
end: true
|
|
185
219
|
}, /*#__PURE__*/_react.default.createElement(_button.Button, {
|
|
@@ -589,4 +623,64 @@ const ModalThatHidesWithStatefulComponens = () => {
|
|
|
589
623
|
}, "Hide modal")))));
|
|
590
624
|
};
|
|
591
625
|
|
|
592
|
-
exports.ModalThatHidesWithStatefulComponens = ModalThatHidesWithStatefulComponens;
|
|
626
|
+
exports.ModalThatHidesWithStatefulComponens = ModalThatHidesWithStatefulComponens;
|
|
627
|
+
|
|
628
|
+
const FluidTop = args => /*#__PURE__*/_react.default.createElement(_modal.Modal, args, /*#__PURE__*/_react.default.createElement(_index.ModalTitle, null, "This is a modal using custom dimensions, with title, content and primary action"), /*#__PURE__*/_react.default.createElement(_index.ModalContent, null, /*#__PURE__*/_react.default.createElement(_box.Box, {
|
|
629
|
+
width: "666px",
|
|
630
|
+
height: "666px"
|
|
631
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.")), /*#__PURE__*/_react.default.createElement(_index.ModalActions, null, /*#__PURE__*/_react.default.createElement(_button.ButtonStrip, {
|
|
632
|
+
end: true
|
|
633
|
+
}, /*#__PURE__*/_react.default.createElement(_button.Button, {
|
|
634
|
+
onClick: say('Button secondary'),
|
|
635
|
+
secondary: true
|
|
636
|
+
}, "Secondary action"), /*#__PURE__*/_react.default.createElement(_button.Button, {
|
|
637
|
+
onClick: say('Button primary'),
|
|
638
|
+
primary: true
|
|
639
|
+
}, "Primary action"))));
|
|
640
|
+
|
|
641
|
+
exports.FluidTop = FluidTop;
|
|
642
|
+
FluidTop.args = {
|
|
643
|
+
fluid: true,
|
|
644
|
+
position: 'top'
|
|
645
|
+
};
|
|
646
|
+
FluidTop.storyName = 'Fluid (Top)';
|
|
647
|
+
|
|
648
|
+
const FluidMiddle = args => /*#__PURE__*/_react.default.createElement(_modal.Modal, args, /*#__PURE__*/_react.default.createElement(_index.ModalTitle, null, "This is a modal using custom dimensions, with title, content and primary action"), /*#__PURE__*/_react.default.createElement(_index.ModalContent, null, /*#__PURE__*/_react.default.createElement(_box.Box, {
|
|
649
|
+
width: "666px",
|
|
650
|
+
height: "666px"
|
|
651
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.")), /*#__PURE__*/_react.default.createElement(_index.ModalActions, null, /*#__PURE__*/_react.default.createElement(_button.ButtonStrip, {
|
|
652
|
+
end: true
|
|
653
|
+
}, /*#__PURE__*/_react.default.createElement(_button.Button, {
|
|
654
|
+
onClick: say('Button secondary'),
|
|
655
|
+
secondary: true
|
|
656
|
+
}, "Secondary action"), /*#__PURE__*/_react.default.createElement(_button.Button, {
|
|
657
|
+
onClick: say('Button primary'),
|
|
658
|
+
primary: true
|
|
659
|
+
}, "Primary action"))));
|
|
660
|
+
|
|
661
|
+
exports.FluidMiddle = FluidMiddle;
|
|
662
|
+
FluidMiddle.args = {
|
|
663
|
+
fluid: true,
|
|
664
|
+
position: 'middle'
|
|
665
|
+
};
|
|
666
|
+
FluidMiddle.storyName = 'Fluid (Middle)';
|
|
667
|
+
|
|
668
|
+
const FluidBottom = args => /*#__PURE__*/_react.default.createElement(_modal.Modal, args, /*#__PURE__*/_react.default.createElement(_index.ModalTitle, null, "This is a modal using custom dimensions, with title, content and primary action"), /*#__PURE__*/_react.default.createElement(_index.ModalContent, null, /*#__PURE__*/_react.default.createElement(_box.Box, {
|
|
669
|
+
width: "666px",
|
|
670
|
+
height: "666px"
|
|
671
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.")), /*#__PURE__*/_react.default.createElement(_index.ModalActions, null, /*#__PURE__*/_react.default.createElement(_button.ButtonStrip, {
|
|
672
|
+
end: true
|
|
673
|
+
}, /*#__PURE__*/_react.default.createElement(_button.Button, {
|
|
674
|
+
onClick: say('Button secondary'),
|
|
675
|
+
secondary: true
|
|
676
|
+
}, "Secondary action"), /*#__PURE__*/_react.default.createElement(_button.Button, {
|
|
677
|
+
onClick: say('Button primary'),
|
|
678
|
+
primary: true
|
|
679
|
+
}, "Primary action"))));
|
|
680
|
+
|
|
681
|
+
exports.FluidBottom = FluidBottom;
|
|
682
|
+
FluidBottom.args = {
|
|
683
|
+
fluid: true,
|
|
684
|
+
position: 'bottom'
|
|
685
|
+
};
|
|
686
|
+
FluidBottom.storyName = 'Fluid (Bottom)';
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = require("@testing-library/react");
|
|
4
|
+
|
|
5
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _modal = require("./modal.js");
|
|
8
|
+
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
|
|
11
|
+
describe('Modal', () => {
|
|
12
|
+
describe('Regular dimensions', () => {
|
|
13
|
+
it('has the correct dimension styles in its default state', () => {
|
|
14
|
+
(0, _react.render)( /*#__PURE__*/_react2.default.createElement(_modal.Modal, null));
|
|
15
|
+
|
|
16
|
+
const modalEl = _react.screen.getByRole('dialog');
|
|
17
|
+
|
|
18
|
+
const style = window.getComputedStyle(modalEl);
|
|
19
|
+
expect(style.height).toBe('auto');
|
|
20
|
+
expect(style.maxHeight).toBe('calc(100vh - 128px)');
|
|
21
|
+
expect(style.maxWidth).toBe('calc(100vw - 128px)');
|
|
22
|
+
expect(style.width).toBe('600px');
|
|
23
|
+
});
|
|
24
|
+
it('has the correct dimension styles when the "small" prop is provided', () => {
|
|
25
|
+
(0, _react.render)( /*#__PURE__*/_react2.default.createElement(_modal.Modal, {
|
|
26
|
+
small: true
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
const modalEl = _react.screen.getByRole('dialog');
|
|
30
|
+
|
|
31
|
+
console.log('modalEl.outerWidth', modalEl.offsetWidth);
|
|
32
|
+
const style = window.getComputedStyle(modalEl);
|
|
33
|
+
expect(style.height).toBe('auto');
|
|
34
|
+
expect(style.maxHeight).toBe('calc(100vh - 128px)');
|
|
35
|
+
expect(style.maxWidth).toBe('calc(100vw - 128px)');
|
|
36
|
+
expect(style.width).toBe('400px');
|
|
37
|
+
});
|
|
38
|
+
it('has the correct dimension styles when the "large" prop is provided', () => {
|
|
39
|
+
(0, _react.render)( /*#__PURE__*/_react2.default.createElement(_modal.Modal, {
|
|
40
|
+
large: true
|
|
41
|
+
}));
|
|
42
|
+
|
|
43
|
+
const modalEl = _react.screen.getByRole('dialog');
|
|
44
|
+
|
|
45
|
+
const style = window.getComputedStyle(modalEl);
|
|
46
|
+
expect(style.height).toBe('auto');
|
|
47
|
+
expect(style.maxHeight).toBe('calc(100vh - 128px)');
|
|
48
|
+
expect(style.maxWidth).toBe('calc(100vw - 128px)');
|
|
49
|
+
expect(style.width).toBe('800px');
|
|
50
|
+
});
|
|
51
|
+
it('has the correct dimension styles when the "fluid" prop is provided', () => {
|
|
52
|
+
(0, _react.render)( /*#__PURE__*/_react2.default.createElement(_modal.Modal, {
|
|
53
|
+
fluid: true
|
|
54
|
+
}));
|
|
55
|
+
|
|
56
|
+
const modalEl = _react.screen.getByRole('dialog');
|
|
57
|
+
|
|
58
|
+
const style = window.getComputedStyle(modalEl);
|
|
59
|
+
expect(style.height).toBe('auto');
|
|
60
|
+
expect(style.maxHeight).toBe('calc(100vh - 128px)');
|
|
61
|
+
expect(style.maxWidth).toBe('calc(100vw - 128px)');
|
|
62
|
+
expect(style.width).toBe('auto');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
});
|
|
@@ -7,8 +7,6 @@ exports.ModalActions = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _style = _interopRequireDefault(require("styled-jsx/style"));
|
|
9
9
|
|
|
10
|
-
var _uiConstants = require("@dhis2/ui-constants");
|
|
11
|
-
|
|
12
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
11
|
|
|
14
12
|
var _react = _interopRequireDefault(require("react"));
|
|
@@ -20,11 +18,10 @@ const ModalActions = ({
|
|
|
20
18
|
dataTest
|
|
21
19
|
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
22
20
|
"data-test": dataTest,
|
|
23
|
-
className:
|
|
21
|
+
className: "jsx-1854645064"
|
|
24
22
|
}, children, /*#__PURE__*/_react.default.createElement(_style.default, {
|
|
25
|
-
id: "
|
|
26
|
-
|
|
27
|
-
}, [`div.__jsx-style-dynamic-selector{padding:0 ${_uiConstants.spacers.dp24} ${_uiConstants.spacers.dp24} ${_uiConstants.spacers.dp24};display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;}`]));
|
|
23
|
+
id: "1854645064"
|
|
24
|
+
}, ["div.jsx-1854645064{-webkit-order:3;-ms-flex-order:3;order:3;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;}"]));
|
|
28
25
|
|
|
29
26
|
exports.ModalActions = ModalActions;
|
|
30
27
|
ModalActions.defaultProps = {
|
|
@@ -21,11 +21,11 @@ const ModalContent = ({
|
|
|
21
21
|
dataTest
|
|
22
22
|
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
23
23
|
"data-test": dataTest,
|
|
24
|
-
className: _style.default.dynamic([["
|
|
24
|
+
className: _style.default.dynamic([["2007936047", [_uiConstants.spacers.dp24]]]) + " " + (className || "")
|
|
25
25
|
}, children, /*#__PURE__*/_react.default.createElement(_style.default, {
|
|
26
|
-
id: "
|
|
27
|
-
dynamic: [_uiConstants.spacers.dp24
|
|
28
|
-
}, [`div.__jsx-style-dynamic-selector{-webkit-box-flex:
|
|
26
|
+
id: "2007936047",
|
|
27
|
+
dynamic: [_uiConstants.spacers.dp24]
|
|
28
|
+
}, [`div.__jsx-style-dynamic-selector{-webkit-order:2;-ms-flex-order:2;order:2;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;margin:${_uiConstants.spacers.dp24} 0;overflow-y:auto;}`]));
|
|
29
29
|
|
|
30
30
|
exports.ModalContent = ModalContent;
|
|
31
31
|
ModalContent.defaultProps = {
|
|
@@ -22,11 +22,11 @@ const ModalTitle = ({
|
|
|
22
22
|
dataTest
|
|
23
23
|
}) => /*#__PURE__*/_react.default.createElement("h1", {
|
|
24
24
|
"data-test": dataTest,
|
|
25
|
-
className: _style.default.dynamic([["
|
|
25
|
+
className: _style.default.dynamic([["1318387758", [_uiConstants.colors.grey900]]]) + " " + ((0, _classnames.default)('title') || "")
|
|
26
26
|
}, children, /*#__PURE__*/_react.default.createElement(_style.default, {
|
|
27
|
-
id: "
|
|
28
|
-
dynamic: [_uiConstants.colors.grey900
|
|
29
|
-
}, [`h1.__jsx-style-dynamic-selector{color:${_uiConstants.colors.grey900};font-size:20px;font-weight:500;line-height:24px;margin:0;
|
|
27
|
+
id: "1318387758",
|
|
28
|
+
dynamic: [_uiConstants.colors.grey900]
|
|
29
|
+
}, [`h1.__jsx-style-dynamic-selector{-webkit-order:1;-ms-flex-order:1;order:1;-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;color:${_uiConstants.colors.grey900};font-size:20px;font-weight:500;line-height:24px;margin:0;}`]));
|
|
30
30
|
|
|
31
31
|
exports.ModalTitle = ModalTitle;
|
|
32
32
|
ModalTitle.defaultProps = {
|
package/build/es/modal/modal.js
CHANGED
|
@@ -6,55 +6,48 @@ import { spacers, spacersNum, sharedPropTypes } from '@dhis2/ui-constants';
|
|
|
6
6
|
import cx from 'classnames';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
8
|
import React from 'react';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
id: "2814715826"
|
|
12
|
-
}, [`div.jsx-2814715826{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - ${2 * spacersNum.dp64}px);max-width:calc(100vw - ${2 * spacersNum.dp64}px);}`]),
|
|
13
|
-
className: "jsx-2814715826"
|
|
14
|
-
};
|
|
15
|
-
const centeredContent = {
|
|
16
|
-
styles: /*#__PURE__*/React.createElement(_JSXStyle, {
|
|
17
|
-
id: "1378205604"
|
|
18
|
-
}, [`.top.jsx-1378205604{padding-top:${spacers.dp64};}`, `.bottom.jsx-1378205604{padding-bottom:${spacers.dp64};}`]),
|
|
19
|
-
className: "jsx-1378205604"
|
|
20
|
-
};
|
|
21
|
-
const layerStyles = {
|
|
9
|
+
|
|
10
|
+
const resolveLayerStyles = hide => ({
|
|
22
11
|
styles: /*#__PURE__*/React.createElement(_JSXStyle, {
|
|
23
|
-
id: "
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
id: "1884450060",
|
|
13
|
+
dynamic: [spacers.dp64, hide ? 'none' : 'block']
|
|
14
|
+
}, [`div.__jsx-style-dynamic-selector{padding:${spacers.dp64};display:${hide ? 'none' : 'block'};}`]),
|
|
15
|
+
className: _JSXStyle.dynamic([["1884450060", [spacers.dp64, hide ? 'none' : 'block']]])
|
|
16
|
+
});
|
|
17
|
+
|
|
27
18
|
export const Modal = ({
|
|
28
19
|
children,
|
|
29
20
|
className,
|
|
30
21
|
dataTest,
|
|
31
22
|
hide,
|
|
23
|
+
fluid,
|
|
32
24
|
large,
|
|
33
25
|
onClose,
|
|
34
26
|
position,
|
|
35
27
|
small
|
|
36
28
|
}) => {
|
|
29
|
+
const layerStyles = resolveLayerStyles(hide);
|
|
37
30
|
return /*#__PURE__*/React.createElement(Layer, {
|
|
38
31
|
onClick: onClose,
|
|
39
|
-
className:
|
|
32
|
+
className: layerStyles.className,
|
|
40
33
|
translucent: !hide
|
|
41
34
|
}, /*#__PURE__*/React.createElement(Center, {
|
|
42
|
-
position: position
|
|
43
|
-
className: centeredContent.className
|
|
35
|
+
position: position
|
|
44
36
|
}, /*#__PURE__*/React.createElement("aside", {
|
|
45
37
|
role: "dialog",
|
|
46
38
|
"aria-modal": "true",
|
|
47
39
|
"data-test": dataTest,
|
|
48
|
-
className: _JSXStyle.dynamic([["
|
|
40
|
+
className: _JSXStyle.dynamic([["1701687214", [2 * spacersNum.dp64, 2 * spacersNum.dp64, 2 * spacersNum.dp64, 2 * spacersNum.dp64]]]) + " " + (cx(className, {
|
|
49
41
|
small,
|
|
50
|
-
large
|
|
42
|
+
large,
|
|
43
|
+
fluid
|
|
51
44
|
}) || "")
|
|
52
|
-
}, /*#__PURE__*/React.createElement(Card, {
|
|
53
|
-
className:
|
|
54
|
-
}, children)),
|
|
55
|
-
id: "
|
|
56
|
-
dynamic: [2 * spacersNum.dp64, 2 * spacersNum.dp64]
|
|
57
|
-
}, [`
|
|
45
|
+
}, /*#__PURE__*/React.createElement(Card, null, /*#__PURE__*/React.createElement("div", {
|
|
46
|
+
className: _JSXStyle.dynamic([["1701687214", [2 * spacersNum.dp64, 2 * spacersNum.dp64, 2 * spacersNum.dp64, 2 * spacersNum.dp64]]])
|
|
47
|
+
}, children))), layerStyles.styles), /*#__PURE__*/React.createElement(_JSXStyle, {
|
|
48
|
+
id: "1701687214",
|
|
49
|
+
dynamic: [2 * spacersNum.dp64, 2 * spacersNum.dp64, 2 * spacersNum.dp64, 2 * spacersNum.dp64]
|
|
50
|
+
}, [`div.__jsx-style-dynamic-selector{padding:24px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:column;-ms-flex-flow:column;flex-flow:column;max-width:calc(100vw - ${2 * spacersNum.dp64}px);max-height:calc(100vh - ${2 * spacersNum.dp64}px);}`, `aside.__jsx-style-dynamic-selector{height:auto;width:600px;max-width:calc(100vw - ${2 * spacersNum.dp64}px);max-height:calc(100vh - ${2 * spacersNum.dp64}px);}`, "aside.small.__jsx-style-dynamic-selector{width:400px;}", "aside.large.__jsx-style-dynamic-selector{width:800px;}", "aside.fluid.__jsx-style-dynamic-selector{width:auto;}"]));
|
|
58
51
|
};
|
|
59
52
|
Modal.defaultProps = {
|
|
60
53
|
dataTest: 'dhis2-uicore-modal',
|
|
@@ -64,6 +57,7 @@ Modal.propTypes = {
|
|
|
64
57
|
children: PropTypes.node,
|
|
65
58
|
className: PropTypes.string,
|
|
66
59
|
dataTest: PropTypes.string,
|
|
60
|
+
fluid: PropTypes.bool,
|
|
67
61
|
hide: PropTypes.bool,
|
|
68
62
|
large: sharedPropTypes.sizePropType,
|
|
69
63
|
position: sharedPropTypes.insideAlignmentPropType,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import _JSXStyle from "styled-jsx/style";
|
|
2
|
+
import { Box } from '@dhis2-ui/box';
|
|
2
3
|
import { Button, ButtonStrip } from '@dhis2-ui/button';
|
|
3
4
|
import { FlyoutMenu, MenuDivider, MenuItem, MenuSectionHeader } from '@dhis2-ui/menu';
|
|
4
5
|
import { SingleSelect, SingleSelectOption } from '@dhis2-ui/select';
|
|
@@ -89,9 +90,9 @@ AlignmentMiddle.storyName = 'Alignment: Middle';
|
|
|
89
90
|
export const AlignmentBottom = args => /*#__PURE__*/React.createElement(Modal, args, /*#__PURE__*/React.createElement(ModalContent, null, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."));
|
|
90
91
|
AlignmentBottom.args = {
|
|
91
92
|
onClose,
|
|
92
|
-
|
|
93
|
+
position: 'bottom'
|
|
93
94
|
};
|
|
94
|
-
AlignmentBottom.storyName = '
|
|
95
|
+
AlignmentBottom.storyName = 'Position: Bottom';
|
|
95
96
|
export const SmallTitleContentAction = args => /*#__PURE__*/React.createElement(Modal, args, /*#__PURE__*/React.createElement(ModalTitle, null, "This is a small modal with title, content and primary action"), /*#__PURE__*/React.createElement(ModalContent, null, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, {
|
|
96
97
|
end: true
|
|
97
98
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
@@ -138,6 +139,35 @@ LargeTitleContentPrimary.args = {
|
|
|
138
139
|
large: true
|
|
139
140
|
};
|
|
140
141
|
LargeTitleContentPrimary.storyName = 'Large: Title, Content, Primary';
|
|
142
|
+
export const FluidTitleContentPrimary = args => /*#__PURE__*/React.createElement(Modal, args, /*#__PURE__*/React.createElement(ModalTitle, null, "This is a modal using custom dimensions, with title, content and primary action"), /*#__PURE__*/React.createElement(ModalContent, null, /*#__PURE__*/React.createElement("div", {
|
|
143
|
+
style: {
|
|
144
|
+
display: 'flex',
|
|
145
|
+
flexFlow: 'row wrap'
|
|
146
|
+
}
|
|
147
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
148
|
+
style: {
|
|
149
|
+
width: '600px',
|
|
150
|
+
backgroundColor: '#fea'
|
|
151
|
+
}
|
|
152
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."), /*#__PURE__*/React.createElement("div", {
|
|
153
|
+
style: {
|
|
154
|
+
width: '300px',
|
|
155
|
+
backgroundColor: '#eaf'
|
|
156
|
+
}
|
|
157
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."))), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, {
|
|
158
|
+
end: true
|
|
159
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
160
|
+
onClick: say('Button secondary'),
|
|
161
|
+
secondary: true
|
|
162
|
+
}, "Secondary action"), /*#__PURE__*/React.createElement(Button, {
|
|
163
|
+
onClick: say('Button primary'),
|
|
164
|
+
primary: true
|
|
165
|
+
}, "Primary action"))));
|
|
166
|
+
FluidTitleContentPrimary.args = {
|
|
167
|
+
fluid: true,
|
|
168
|
+
position: 'top'
|
|
169
|
+
};
|
|
170
|
+
FluidTitleContentPrimary.storyName = 'Fluid (Custom sizes): Title, Content, Primary';
|
|
141
171
|
export const SmallContentPrimary = args => /*#__PURE__*/React.createElement(Modal, args, /*#__PURE__*/React.createElement(ModalContent, null, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, {
|
|
142
172
|
end: true
|
|
143
173
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
@@ -519,4 +549,55 @@ export const ModalThatHidesWithStatefulComponens = () => {
|
|
|
519
549
|
onClick: () => setHide(true),
|
|
520
550
|
primary: true
|
|
521
551
|
}, "Hide modal")))));
|
|
522
|
-
};
|
|
552
|
+
};
|
|
553
|
+
export const FluidTop = args => /*#__PURE__*/React.createElement(Modal, args, /*#__PURE__*/React.createElement(ModalTitle, null, "This is a modal using custom dimensions, with title, content and primary action"), /*#__PURE__*/React.createElement(ModalContent, null, /*#__PURE__*/React.createElement(Box, {
|
|
554
|
+
width: "666px",
|
|
555
|
+
height: "666px"
|
|
556
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.")), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, {
|
|
557
|
+
end: true
|
|
558
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
559
|
+
onClick: say('Button secondary'),
|
|
560
|
+
secondary: true
|
|
561
|
+
}, "Secondary action"), /*#__PURE__*/React.createElement(Button, {
|
|
562
|
+
onClick: say('Button primary'),
|
|
563
|
+
primary: true
|
|
564
|
+
}, "Primary action"))));
|
|
565
|
+
FluidTop.args = {
|
|
566
|
+
fluid: true,
|
|
567
|
+
position: 'top'
|
|
568
|
+
};
|
|
569
|
+
FluidTop.storyName = 'Fluid (Top)';
|
|
570
|
+
export const FluidMiddle = args => /*#__PURE__*/React.createElement(Modal, args, /*#__PURE__*/React.createElement(ModalTitle, null, "This is a modal using custom dimensions, with title, content and primary action"), /*#__PURE__*/React.createElement(ModalContent, null, /*#__PURE__*/React.createElement(Box, {
|
|
571
|
+
width: "666px",
|
|
572
|
+
height: "666px"
|
|
573
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.")), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, {
|
|
574
|
+
end: true
|
|
575
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
576
|
+
onClick: say('Button secondary'),
|
|
577
|
+
secondary: true
|
|
578
|
+
}, "Secondary action"), /*#__PURE__*/React.createElement(Button, {
|
|
579
|
+
onClick: say('Button primary'),
|
|
580
|
+
primary: true
|
|
581
|
+
}, "Primary action"))));
|
|
582
|
+
FluidMiddle.args = {
|
|
583
|
+
fluid: true,
|
|
584
|
+
position: 'middle'
|
|
585
|
+
};
|
|
586
|
+
FluidMiddle.storyName = 'Fluid (Middle)';
|
|
587
|
+
export const FluidBottom = args => /*#__PURE__*/React.createElement(Modal, args, /*#__PURE__*/React.createElement(ModalTitle, null, "This is a modal using custom dimensions, with title, content and primary action"), /*#__PURE__*/React.createElement(ModalContent, null, /*#__PURE__*/React.createElement(Box, {
|
|
588
|
+
width: "666px",
|
|
589
|
+
height: "666px"
|
|
590
|
+
}, "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.")), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, {
|
|
591
|
+
end: true
|
|
592
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
593
|
+
onClick: say('Button secondary'),
|
|
594
|
+
secondary: true
|
|
595
|
+
}, "Secondary action"), /*#__PURE__*/React.createElement(Button, {
|
|
596
|
+
onClick: say('Button primary'),
|
|
597
|
+
primary: true
|
|
598
|
+
}, "Primary action"))));
|
|
599
|
+
FluidBottom.args = {
|
|
600
|
+
fluid: true,
|
|
601
|
+
position: 'bottom'
|
|
602
|
+
};
|
|
603
|
+
FluidBottom.storyName = 'Fluid (Bottom)';
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Modal } from './modal.js';
|
|
4
|
+
describe('Modal', () => {
|
|
5
|
+
describe('Regular dimensions', () => {
|
|
6
|
+
it('has the correct dimension styles in its default state', () => {
|
|
7
|
+
render( /*#__PURE__*/React.createElement(Modal, null));
|
|
8
|
+
const modalEl = screen.getByRole('dialog');
|
|
9
|
+
const style = window.getComputedStyle(modalEl);
|
|
10
|
+
expect(style.height).toBe('auto');
|
|
11
|
+
expect(style.maxHeight).toBe('calc(100vh - 128px)');
|
|
12
|
+
expect(style.maxWidth).toBe('calc(100vw - 128px)');
|
|
13
|
+
expect(style.width).toBe('600px');
|
|
14
|
+
});
|
|
15
|
+
it('has the correct dimension styles when the "small" prop is provided', () => {
|
|
16
|
+
render( /*#__PURE__*/React.createElement(Modal, {
|
|
17
|
+
small: true
|
|
18
|
+
}));
|
|
19
|
+
const modalEl = screen.getByRole('dialog');
|
|
20
|
+
console.log('modalEl.outerWidth', modalEl.offsetWidth);
|
|
21
|
+
const style = window.getComputedStyle(modalEl);
|
|
22
|
+
expect(style.height).toBe('auto');
|
|
23
|
+
expect(style.maxHeight).toBe('calc(100vh - 128px)');
|
|
24
|
+
expect(style.maxWidth).toBe('calc(100vw - 128px)');
|
|
25
|
+
expect(style.width).toBe('400px');
|
|
26
|
+
});
|
|
27
|
+
it('has the correct dimension styles when the "large" prop is provided', () => {
|
|
28
|
+
render( /*#__PURE__*/React.createElement(Modal, {
|
|
29
|
+
large: true
|
|
30
|
+
}));
|
|
31
|
+
const modalEl = screen.getByRole('dialog');
|
|
32
|
+
const style = window.getComputedStyle(modalEl);
|
|
33
|
+
expect(style.height).toBe('auto');
|
|
34
|
+
expect(style.maxHeight).toBe('calc(100vh - 128px)');
|
|
35
|
+
expect(style.maxWidth).toBe('calc(100vw - 128px)');
|
|
36
|
+
expect(style.width).toBe('800px');
|
|
37
|
+
});
|
|
38
|
+
it('has the correct dimension styles when the "fluid" prop is provided', () => {
|
|
39
|
+
render( /*#__PURE__*/React.createElement(Modal, {
|
|
40
|
+
fluid: true
|
|
41
|
+
}));
|
|
42
|
+
const modalEl = screen.getByRole('dialog');
|
|
43
|
+
const style = window.getComputedStyle(modalEl);
|
|
44
|
+
expect(style.height).toBe('auto');
|
|
45
|
+
expect(style.maxHeight).toBe('calc(100vh - 128px)');
|
|
46
|
+
expect(style.maxWidth).toBe('calc(100vw - 128px)');
|
|
47
|
+
expect(style.width).toBe('auto');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _JSXStyle from "styled-jsx/style";
|
|
2
|
-
import { spacers } from '@dhis2/ui-constants';
|
|
3
2
|
import PropTypes from 'prop-types';
|
|
4
3
|
import React from 'react';
|
|
5
4
|
export const ModalActions = ({
|
|
@@ -7,11 +6,10 @@ export const ModalActions = ({
|
|
|
7
6
|
dataTest
|
|
8
7
|
}) => /*#__PURE__*/React.createElement("div", {
|
|
9
8
|
"data-test": dataTest,
|
|
10
|
-
className:
|
|
9
|
+
className: "jsx-1854645064"
|
|
11
10
|
}, children, /*#__PURE__*/React.createElement(_JSXStyle, {
|
|
12
|
-
id: "
|
|
13
|
-
|
|
14
|
-
}, [`div.__jsx-style-dynamic-selector{padding:0 ${spacers.dp24} ${spacers.dp24} ${spacers.dp24};display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;}`]));
|
|
11
|
+
id: "1854645064"
|
|
12
|
+
}, ["div.jsx-1854645064{-webkit-order:3;-ms-flex-order:3;order:3;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;}"]));
|
|
15
13
|
ModalActions.defaultProps = {
|
|
16
14
|
dataTest: 'dhis2-uicore-modalactions'
|
|
17
15
|
};
|
|
@@ -8,11 +8,11 @@ export const ModalContent = ({
|
|
|
8
8
|
dataTest
|
|
9
9
|
}) => /*#__PURE__*/React.createElement("div", {
|
|
10
10
|
"data-test": dataTest,
|
|
11
|
-
className: _JSXStyle.dynamic([["
|
|
11
|
+
className: _JSXStyle.dynamic([["2007936047", [spacers.dp24]]]) + " " + (className || "")
|
|
12
12
|
}, children, /*#__PURE__*/React.createElement(_JSXStyle, {
|
|
13
|
-
id: "
|
|
14
|
-
dynamic: [spacers.dp24
|
|
15
|
-
}, [`div.__jsx-style-dynamic-selector{-webkit-box-flex:
|
|
13
|
+
id: "2007936047",
|
|
14
|
+
dynamic: [spacers.dp24]
|
|
15
|
+
}, [`div.__jsx-style-dynamic-selector{-webkit-order:2;-ms-flex-order:2;order:2;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;margin:${spacers.dp24} 0;overflow-y:auto;}`]));
|
|
16
16
|
ModalContent.defaultProps = {
|
|
17
17
|
dataTest: 'dhis2-uicore-modalcontent'
|
|
18
18
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _JSXStyle from "styled-jsx/style";
|
|
2
|
-
import { colors
|
|
2
|
+
import { colors } from '@dhis2/ui-constants';
|
|
3
3
|
import cx from 'classnames';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import React from 'react';
|
|
@@ -8,11 +8,11 @@ export const ModalTitle = ({
|
|
|
8
8
|
dataTest
|
|
9
9
|
}) => /*#__PURE__*/React.createElement("h1", {
|
|
10
10
|
"data-test": dataTest,
|
|
11
|
-
className: _JSXStyle.dynamic([["
|
|
11
|
+
className: _JSXStyle.dynamic([["1318387758", [colors.grey900]]]) + " " + (cx('title') || "")
|
|
12
12
|
}, children, /*#__PURE__*/React.createElement(_JSXStyle, {
|
|
13
|
-
id: "
|
|
14
|
-
dynamic: [colors.grey900
|
|
15
|
-
}, [`h1.__jsx-style-dynamic-selector{color:${colors.grey900};font-size:20px;font-weight:500;line-height:24px;margin:0;
|
|
13
|
+
id: "1318387758",
|
|
14
|
+
dynamic: [colors.grey900]
|
|
15
|
+
}, [`h1.__jsx-style-dynamic-selector{-webkit-order:1;-ms-flex-order:1;order:1;-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;color:${colors.grey900};font-size:20px;font-weight:500;line-height:24px;margin:0;}`]));
|
|
16
16
|
ModalTitle.defaultProps = {
|
|
17
17
|
dataTest: 'dhis2-uicore-modaltitle'
|
|
18
18
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhis2-ui/modal",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.8.0",
|
|
4
4
|
"description": "UI Modal",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@dhis2/prop-types": "^3.0.0-beta.1",
|
|
35
|
-
"@dhis2-ui/card": "7.
|
|
36
|
-
"@dhis2-ui/center": "7.
|
|
37
|
-
"@dhis2-ui/layer": "7.
|
|
38
|
-
"@dhis2-ui/portal": "7.
|
|
39
|
-
"@dhis2/ui-constants": "7.
|
|
35
|
+
"@dhis2-ui/card": "7.8.0",
|
|
36
|
+
"@dhis2-ui/center": "7.8.0",
|
|
37
|
+
"@dhis2-ui/layer": "7.8.0",
|
|
38
|
+
"@dhis2-ui/portal": "7.8.0",
|
|
39
|
+
"@dhis2/ui-constants": "7.8.0",
|
|
40
40
|
"classnames": "^2.3.1",
|
|
41
41
|
"prop-types": "^15.7.2"
|
|
42
42
|
},
|