@madie/madie-design-system 1.2.36 → 1.2.38
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/.storybook/main.js +6 -0
- package/components/Instant/Instant.stories.js +28 -0
- package/components/Instant/index.jsx +267 -0
- package/components/MadieConfirmDialog/MadieConfirmDialog.stories.js +104 -0
- package/components/MadieConfirmDialog/index.jsx +64 -0
- package/components/TextField/index.jsx +36 -39
- package/components/index.js +2 -0
- package/coverage/clover.xml +116 -58
- package/coverage/coverage-final.json +8 -6
- package/coverage/lcov-report/index.html +43 -13
- package/coverage/lcov-report/react/components/Accordion/index.html +1 -1
- package/coverage/lcov-report/react/components/Accordion/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Button/index.html +1 -1
- package/coverage/lcov-report/react/components/Button/index.js.html +17 -17
- package/coverage/lcov-report/react/components/DateField/DateField.jsx.html +1 -1
- package/coverage/lcov-report/react/components/DateField/index.html +1 -1
- package/coverage/lcov-report/react/components/DateTimeField/DateTimeField.jsx.html +1 -1
- package/coverage/lcov-report/react/components/DateTimeField/index.html +1 -1
- package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Error/error.js.html +1 -1
- package/coverage/lcov-report/react/components/Error/index.html +1 -1
- package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Footer/footer.js.html +1 -1
- package/coverage/lcov-report/react/components/Footer/index.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
- package/coverage/lcov-report/react/components/Infotip/index.js.html +1 -1
- package/coverage/lcov-report/react/components/InputLabel/index.html +1 -1
- package/coverage/lcov-report/react/components/InputLabel/index.jsx.html +4 -4
- package/coverage/lcov-report/react/components/Instant/index.html +116 -0
- package/coverage/lcov-report/react/components/Instant/index.jsx.html +886 -0
- package/coverage/lcov-report/react/components/MadieAlert/index.html +1 -1
- package/coverage/lcov-report/react/components/MadieAlert/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/MadieConfirmDialog/index.html +116 -0
- package/coverage/lcov-report/react/components/MadieConfirmDialog/index.jsx.html +277 -0
- package/coverage/lcov-report/react/components/MadieDeleteDialog/index.html +1 -1
- package/coverage/lcov-report/react/components/MadieDeleteDialog/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/MadieDialog/index.html +1 -1
- package/coverage/lcov-report/react/components/MadieDialog/index.jsx.html +14 -14
- package/coverage/lcov-report/react/components/MadieDiscardDialog/index.html +1 -1
- package/coverage/lcov-report/react/components/MadieDiscardDialog/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/MadieSpinner/index.html +1 -1
- package/coverage/lcov-report/react/components/MadieSpinner/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/MadieTooltip/index.html +1 -1
- package/coverage/lcov-report/react/components/MadieTooltip/index.jsx.html +3 -3
- package/coverage/lcov-report/react/components/MadieTooltipIcon/index.html +1 -1
- package/coverage/lcov-report/react/components/MadieTooltipIcon/index.jsx.html +3 -3
- package/coverage/lcov-report/react/components/Pagination/index.html +1 -1
- package/coverage/lcov-report/react/components/Pagination/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Popover/index.html +1 -1
- package/coverage/lcov-report/react/components/Popover/index.js.html +1 -1
- package/coverage/lcov-report/react/components/ReadOnlyTextField/index.html +1 -1
- package/coverage/lcov-report/react/components/ReadOnlyTextField/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Select/index.html +1 -1
- package/coverage/lcov-report/react/components/Select/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Tabs/Tab.js.html +1 -1
- package/coverage/lcov-report/react/components/Tabs/index.html +1 -1
- package/coverage/lcov-report/react/components/Tabs/index.js.html +1 -1
- package/coverage/lcov-report/react/components/TextArea/index.html +1 -1
- package/coverage/lcov-report/react/components/TextArea/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/TextField/index.html +9 -9
- package/coverage/lcov-report/react/components/TextField/index.jsx.html +58 -67
- package/coverage/lcov-report/react/components/Toast/index.html +1 -1
- package/coverage/lcov-report/react/components/Toast/index.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +1 -1
- package/coverage/lcov-report/react/components/Tooltip/index.html +1 -1
- package/coverage/lcov-report/react/components/Tooltip/index.js.html +1 -1
- package/coverage/lcov-report/react/components/Tooltip/position.js.html +1 -1
- package/coverage/lcov-report/react/index.html +1 -1
- package/coverage/lcov-report/react/index.js.html +1 -1
- package/coverage/lcov-report/react/lib/Chevron.jsx.html +1 -1
- package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +1 -1
- package/coverage/lcov-report/react/lib/index.html +1 -1
- package/coverage/lcov.info +235 -114
- package/dist/browser.js +1 -1
- package/dist/index.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/package-lock.json +220 -131
- package/package.json +1 -1
- package/styles/_qpp-style.scss +1 -0
- package/styles/components/_madie-confirm-dialog.scss +34 -0
- package/styles/qppds/components/_madie-confirm-dialog.scss +35 -0
- package/styles/qppds/components/index.scss +1 -0
- package/test/components/Instant.test.js +83 -0
- package/test/components/MadieConfirmDialog.test.js +159 -0
- package/webpack.config.react.js +13 -0
package/package.json
CHANGED
package/styles/_qpp-style.scss
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
@import 'components/links';
|
|
15
15
|
@import 'components/madie-discard-dialog';
|
|
16
16
|
@import 'components/madie-delete-dialog';
|
|
17
|
+
@import 'components/madie-confirm-dialog';
|
|
17
18
|
@import 'components/madie-alert';
|
|
18
19
|
@import 'components/madie-tooltip';
|
|
19
20
|
@import 'components/text-field-variable';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#confirm-dialog-body {
|
|
2
|
+
font-family: Rubik, sans-serif;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
|
|
6
|
+
.dialog-warning-body {
|
|
7
|
+
font-size: 16px;
|
|
8
|
+
line-height: 19px;
|
|
9
|
+
|
|
10
|
+
p {
|
|
11
|
+
margin-bottom: 18px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.strong {
|
|
15
|
+
font-weight: 500;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.dialog-warning-action {
|
|
20
|
+
font-size: 14px;
|
|
21
|
+
line-height: 26px;
|
|
22
|
+
font-weight: 400;
|
|
23
|
+
color: #d92f2f;
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: row;
|
|
26
|
+
align-items: center;
|
|
27
|
+
margin-left: -3px;
|
|
28
|
+
|
|
29
|
+
> p {
|
|
30
|
+
margin-left: 8px;
|
|
31
|
+
margin-bottom: 0;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#confirm-dialog-body {
|
|
2
|
+
font-family: Rubik, sans-serif;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
|
|
6
|
+
.dialog-warning-body {
|
|
7
|
+
font-size: 16px;
|
|
8
|
+
line-height: 19px;
|
|
9
|
+
|
|
10
|
+
p {
|
|
11
|
+
margin-bottom: 18px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.strong {
|
|
15
|
+
font-weight: 500;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.dialog-warning-action {
|
|
20
|
+
font-size: 14px;
|
|
21
|
+
line-height: 26px;
|
|
22
|
+
font-weight: 400;
|
|
23
|
+
color: #d92f2f;
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: row;
|
|
26
|
+
align-items: center;
|
|
27
|
+
margin-left: -3px;
|
|
28
|
+
|
|
29
|
+
> p {
|
|
30
|
+
margin-left: 8px;
|
|
31
|
+
margin-bottom: 0;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import React, { useState } from "react";
|
|
3
|
+
import { render, fireEvent, screen } from "@testing-library/react";
|
|
4
|
+
import Instant from "../../components/Instant";
|
|
5
|
+
import dayjs from "dayjs";
|
|
6
|
+
|
|
7
|
+
export const InstantTester = () => {
|
|
8
|
+
const [value, setValue] = useState("");
|
|
9
|
+
const handleDateTimeChange = (v) => {
|
|
10
|
+
setValue(v)
|
|
11
|
+
};
|
|
12
|
+
return (
|
|
13
|
+
<div>
|
|
14
|
+
<div data-testId="test-date">{value}</div>
|
|
15
|
+
<Instant
|
|
16
|
+
disabled={false}
|
|
17
|
+
id="status_date_time"
|
|
18
|
+
label="Status Date"
|
|
19
|
+
handleDateTimeChange={handleDateTimeChange}
|
|
20
|
+
dateTimeValue={value}
|
|
21
|
+
dateFieldSx={{}}
|
|
22
|
+
/>
|
|
23
|
+
</div>)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
describe("Instant", () => {
|
|
28
|
+
const { getByDisplayValue, findByTestId, findByText, getByText, getByTestId } = screen;
|
|
29
|
+
it("It renders as expected with static values", async () => {
|
|
30
|
+
const handleDateTimeChange = jest.fn();
|
|
31
|
+
render(
|
|
32
|
+
<div>
|
|
33
|
+
<Instant
|
|
34
|
+
disabled={false}
|
|
35
|
+
id="status_date_time"
|
|
36
|
+
label="Status Date"
|
|
37
|
+
handleDateTimeChange={handleDateTimeChange}
|
|
38
|
+
dateTimeValue={dayjs("2022-04-17")}
|
|
39
|
+
dateFieldSx={{}}
|
|
40
|
+
/>
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
43
|
+
const labelText = await findByText("Status Date");
|
|
44
|
+
expect(labelText).toBeInTheDocument();
|
|
45
|
+
expect(await findByText("Status Date")).toBeInTheDocument();
|
|
46
|
+
expect(
|
|
47
|
+
getByDisplayValue("04/17/2022")
|
|
48
|
+
).toBeInTheDocument();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("we can change the date from null and when date to date", async () => {
|
|
52
|
+
await render(<InstantTester />)
|
|
53
|
+
const labelText = await findByText("Status Date");
|
|
54
|
+
expect(labelText).toBeInTheDocument();
|
|
55
|
+
expect(await findByText("Status Date")).toBeInTheDocument();
|
|
56
|
+
const inputField = await findByTestId("status_date_time-input");
|
|
57
|
+
fireEvent.change(inputField, { target: { value: "01/01/2026" } })
|
|
58
|
+
expect(
|
|
59
|
+
getByText("2026-01-01T00:00:00.000+00:00")
|
|
60
|
+
).toBeInTheDocument();
|
|
61
|
+
fireEvent.change(inputField, { target: { value: "01/01/2027" } })
|
|
62
|
+
expect(
|
|
63
|
+
getByText("2027-01-01T00:00:00.000+00:00")
|
|
64
|
+
).toBeInTheDocument();
|
|
65
|
+
});
|
|
66
|
+
it("Handles change for Hours, minutes, seconds, ms; does not combust.", async () => {
|
|
67
|
+
|
|
68
|
+
await render(<InstantTester />)
|
|
69
|
+
const labelText = await findByText("Status Date");
|
|
70
|
+
expect(labelText).toBeInTheDocument();
|
|
71
|
+
expect(await findByText("Status Date")).toBeInTheDocument();
|
|
72
|
+
const inputField = await findByTestId("status_date_time-input");
|
|
73
|
+
fireEvent.change(inputField, { target: { value: "01/01/2026" } })
|
|
74
|
+
expect(getByText("2026-01-01T00:00:00.000+00:00")).toBeInTheDocument();
|
|
75
|
+
fireEvent.change(getByTestId("status_date_time-hour-input"), { target : {value: "1"}})
|
|
76
|
+
fireEvent.change(getByTestId("status_date_time-minute-input"), { target : {value: "2"}})
|
|
77
|
+
fireEvent.change(getByTestId("status_date_time-second-input"), { target : {value: "3"}})
|
|
78
|
+
fireEvent.change(getByTestId("status_date_time-millisecond-input"), { target : {value: "4"}})
|
|
79
|
+
expect(
|
|
80
|
+
getByText("2026-01-01T01:02:03.004+00:00")
|
|
81
|
+
).toBeInTheDocument();
|
|
82
|
+
});
|
|
83
|
+
});
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { describe, expect, test } from "@jest/globals";
|
|
3
|
+
import MadieConfirmDialog from "../../components/MadieConfirmDialog/index";
|
|
4
|
+
import { act } from "react-dom/test-utils";
|
|
5
|
+
import { render, fireEvent, waitFor } from "@testing-library/react";
|
|
6
|
+
|
|
7
|
+
import React, { useState } from "react";
|
|
8
|
+
|
|
9
|
+
const DialogTester = () => {
|
|
10
|
+
const [dialogOpen, setDialogOpen] = useState(false);
|
|
11
|
+
return (
|
|
12
|
+
<div>
|
|
13
|
+
<button
|
|
14
|
+
data-testid="dialog-tester"
|
|
15
|
+
onClick={() => setDialogOpen(true)}
|
|
16
|
+
>
|
|
17
|
+
dialog tester
|
|
18
|
+
</button>
|
|
19
|
+
<MadieConfirmDialog
|
|
20
|
+
open={dialogOpen}
|
|
21
|
+
onClose={() => setDialogOpen(false)}
|
|
22
|
+
onContinue={() => setDialogOpen(false)}
|
|
23
|
+
dialogTitle="Are You Sure"
|
|
24
|
+
name="log out of UMLS"
|
|
25
|
+
action="confirm"
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const DialogTesterForDiscard = () => {
|
|
32
|
+
const [dialogOpen, setDialogOpen] = useState(false);
|
|
33
|
+
return (
|
|
34
|
+
<div>
|
|
35
|
+
<button
|
|
36
|
+
data-testid="discard-dialog-tester"
|
|
37
|
+
onClick={() => setDialogOpen(true)}
|
|
38
|
+
>
|
|
39
|
+
discard dialog tester
|
|
40
|
+
</button>
|
|
41
|
+
<MadieConfirmDialog
|
|
42
|
+
open={dialogOpen}
|
|
43
|
+
onClose={() => setDialogOpen(false)}
|
|
44
|
+
onContinue={() => setDialogOpen(false)}
|
|
45
|
+
action="discard"
|
|
46
|
+
dialogTitle="Discard Changes"
|
|
47
|
+
name="discard your changes"
|
|
48
|
+
continueText= "Yes, Discard All Changes"
|
|
49
|
+
cancelText="No, Keep Working"
|
|
50
|
+
/>
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const DialogTesterForDelete = () => {
|
|
56
|
+
const [dialogOpen, setDialogOpen] = useState(false);
|
|
57
|
+
return (
|
|
58
|
+
<div>
|
|
59
|
+
<button
|
|
60
|
+
data-testid="delete-dialog-tester"
|
|
61
|
+
onClick={() => setDialogOpen(true)}
|
|
62
|
+
>
|
|
63
|
+
delete dialog tester
|
|
64
|
+
</button>
|
|
65
|
+
<MadieConfirmDialog
|
|
66
|
+
open={dialogOpen}
|
|
67
|
+
onClose={() => setDialogOpen(false)}
|
|
68
|
+
onContinue={() => setDialogOpen(false)}
|
|
69
|
+
action="delete"
|
|
70
|
+
dialogTitle="Are You Sure"
|
|
71
|
+
name="delete this Definition"
|
|
72
|
+
continueText="Yes, Delete"
|
|
73
|
+
/>
|
|
74
|
+
</div>
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
describe("MadieConfirmDialog", () => {
|
|
79
|
+
test("Confirm Dialog renders", async () => {
|
|
80
|
+
await act(async () => {
|
|
81
|
+
const { findByTestId, getByTestId, queryByText } = await render(
|
|
82
|
+
<DialogTester />
|
|
83
|
+
);
|
|
84
|
+
const result = await findByTestId("dialog-tester");
|
|
85
|
+
fireEvent.click(result);
|
|
86
|
+
const confirmDialog = await getByTestId("confirm-dialog");
|
|
87
|
+
expect(confirmDialog).toBeInTheDocument();
|
|
88
|
+
await waitFor(() => {
|
|
89
|
+
expect(queryByText("log out of UMLS")).toBeVisible();
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test("Discard Dialog renders", async () => {
|
|
95
|
+
await act(async () => {
|
|
96
|
+
const { findByTestId, getByTestId, queryByText } = await render(
|
|
97
|
+
<DialogTesterForDiscard />
|
|
98
|
+
);
|
|
99
|
+
const result = await findByTestId("discard-dialog-tester");
|
|
100
|
+
fireEvent.click(result);
|
|
101
|
+
const confirmDialog = await getByTestId("discard-dialog");
|
|
102
|
+
expect(confirmDialog).toBeInTheDocument();
|
|
103
|
+
await waitFor(() => {
|
|
104
|
+
expect(queryByText("You have unsaved changes.")).toBeVisible();
|
|
105
|
+
expect(queryByText("Discard Changes")).toBeVisible();
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test("Delete Dialog renders", async () => {
|
|
111
|
+
await act(async () => {
|
|
112
|
+
const { findByTestId, getByTestId, queryByText } = await render(
|
|
113
|
+
<DialogTesterForDelete />
|
|
114
|
+
);
|
|
115
|
+
const result = await findByTestId("delete-dialog-tester");
|
|
116
|
+
fireEvent.click(result);
|
|
117
|
+
const confirmDialog = await getByTestId("delete-dialog");
|
|
118
|
+
expect(confirmDialog).toBeInTheDocument();
|
|
119
|
+
await waitFor(() => {
|
|
120
|
+
expect(queryByText("delete this Definition")).toBeVisible();
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
test("Dialog disappears onContinue", async () => {
|
|
126
|
+
await act(async () => {
|
|
127
|
+
const { findByTestId, getByTestId, queryByText } = await render(
|
|
128
|
+
<DialogTester />
|
|
129
|
+
);
|
|
130
|
+
const result = await findByTestId("dialog-tester");
|
|
131
|
+
fireEvent.click(result);
|
|
132
|
+
const continueButton = await getByTestId(
|
|
133
|
+
"confirm-dialog-continue-button"
|
|
134
|
+
);
|
|
135
|
+
expect(continueButton).toBeInTheDocument();
|
|
136
|
+
fireEvent.click(continueButton);
|
|
137
|
+
await waitFor(() => {
|
|
138
|
+
expect(queryByText("log out of UMLS")).not.toBeVisible();
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
test("Dialog disappears onClose", async () => {
|
|
143
|
+
await act(async () => {
|
|
144
|
+
const { findByTestId, getByTestId, queryByText } = await render(
|
|
145
|
+
<DialogTester />
|
|
146
|
+
);
|
|
147
|
+
const result = await findByTestId("dialog-tester");
|
|
148
|
+
fireEvent.click(result);
|
|
149
|
+
const cancelButton = await getByTestId(
|
|
150
|
+
"confirm-dialog-cancel-button"
|
|
151
|
+
);
|
|
152
|
+
expect(cancelButton).toBeInTheDocument();
|
|
153
|
+
fireEvent.click(cancelButton);
|
|
154
|
+
await waitFor(() => {
|
|
155
|
+
expect(queryByText("log out of UMLS")).not.toBeVisible();
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
});
|
package/webpack.config.react.js
CHANGED
|
@@ -80,6 +80,19 @@ module.exports = {
|
|
|
80
80
|
libraryTarget: "umd",
|
|
81
81
|
globalObject: "this",
|
|
82
82
|
},
|
|
83
|
+
// below lines fix hot reload but put CI/CD into a hanging state
|
|
84
|
+
// watch: true,
|
|
85
|
+
// watchOptions: {
|
|
86
|
+
// ignored: /node_modules/, // Don't watch files in node_modules
|
|
87
|
+
// aggregateTimeout: 300,
|
|
88
|
+
// poll: 1000,
|
|
89
|
+
// },
|
|
90
|
+
// devServer: {
|
|
91
|
+
// // static: path.join(__dirname, "dist/react"),
|
|
92
|
+
// // compress: true,
|
|
93
|
+
// hot: true, // Enable hot module replacement
|
|
94
|
+
// watchFiles: ["src/**/*", "components/**/*"], // Watch these files
|
|
95
|
+
// },
|
|
83
96
|
devtool: "source-map",
|
|
84
97
|
module: _module,
|
|
85
98
|
plugins,
|