Skip to content

Commit ffb7ada

Browse files
authored
feat: isConfirmDangerProp (#1110)
resolves #1109
1 parent 5e16355 commit ffb7ada

2 files changed

Lines changed: 28 additions & 17 deletions

File tree

packages/components/src/BasicModal.test.tsx

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
import React from 'react';
22
import userEvent from '@testing-library/user-event';
33
import { render } from '@testing-library/react';
4-
import BasicModal from './BasicModal';
4+
import BasicModal, { BasicModalProps } from './BasicModal';
55

66
const DEFAULT_BODY_TEXT = 'DEFAULT_TEXT';
77
const DEFAULT_TEST_ID = 'DEFAULT_TEST_ID';
88

9-
function makeWrapper(
10-
isOpen = true,
11-
bodyText = DEFAULT_BODY_TEXT,
12-
dataTestId = DEFAULT_TEST_ID,
13-
onConfirm = jest.fn()
14-
) {
15-
return render(
16-
<BasicModal
17-
data-testid={dataTestId}
18-
isOpen={isOpen}
19-
headerText=""
20-
bodyText={bodyText}
21-
onConfirm={onConfirm}
22-
/>
23-
);
9+
function makeWrapper(partialProps: Partial<BasicModalProps> | undefined = {}) {
10+
const props = {
11+
'data-testid': DEFAULT_TEST_ID,
12+
bodyText: DEFAULT_BODY_TEXT,
13+
headerText: '',
14+
isConfirmDanger: false,
15+
isOpen: true,
16+
onCancel: jest.fn(),
17+
onConfirm: jest.fn(),
18+
...partialProps,
19+
};
20+
21+
// eslint-disable-next-line react/jsx-props-no-spreading
22+
return render(<BasicModal {...props} />);
2423
}
2524

2625
it('mounts and unmounts without failing', () => {
@@ -32,6 +31,16 @@ it('focuses default button on first render after opening', () => {
3231
expect(getByTestId(`${DEFAULT_TEST_ID}-btn-confirm`)).toHaveFocus();
3332
});
3433

34+
it.each([true, false])(
35+
'sets button style based on isConfirmDanger value: %s',
36+
isConfirmDanger => {
37+
const { getByTestId } = makeWrapper({ isConfirmDanger });
38+
expect(getByTestId(`${DEFAULT_TEST_ID}-btn-confirm`)).toHaveClass(
39+
isConfirmDanger ? 'btn-danger' : 'btn-primary'
40+
);
41+
}
42+
);
43+
3544
it('does not re-focus default button on re-render', async () => {
3645
const user = userEvent.setup();
3746
const { getByTestId, rerender } = makeWrapper();

packages/components/src/BasicModal.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export interface BasicModalProps {
1515
cancelButtonText?: string;
1616
confirmButtonText?: string;
1717
discardButtonText?: string;
18+
isConfirmDanger?: boolean;
1819
children?: React.ReactNode;
1920
'data-testid'?: string;
2021
}
@@ -44,6 +45,7 @@ function BasicModal(props: BasicModalProps) {
4445
cancelButtonText = 'Cancel',
4546
confirmButtonText = 'Okay',
4647
discardButtonText = 'Discard',
48+
isConfirmDanger = false,
4749
children,
4850
'data-testid': dataTestId,
4951
} = props;
@@ -126,7 +128,7 @@ function BasicModal(props: BasicModalProps) {
126128
)}
127129
<ButtonGroup>
128130
<Button
129-
kind="primary"
131+
kind={isConfirmDanger ? 'danger' : 'primary'}
130132
onClick={onConfirmClicked}
131133
ref={confirmButton}
132134
data-testid={

0 commit comments

Comments
 (0)