Skip to content

Commit 12967c4

Browse files
committed
feat: add checkbox option in the prompt component
Signed-off-by: Amit Amrutiya <[email protected]>
1 parent 4528710 commit 12967c4

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed

src/custom/Prompt/promt-component.tsx

+33-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { forwardRef, useImperativeHandle, useRef, useState } from 'react';
2-
import { Typography } from '../../base';
2+
import { Checkbox, FormControlLabel, Typography } from '../../base';
33
import { useTheme } from '../../theme';
44
import { Modal, ModalBody, ModalButtonPrimary, ModalButtonSecondary, ModalFooter } from '../Modal';
55
import { ActionComponent, Subtitle } from './style';
@@ -26,6 +26,8 @@ interface State {
2626
showInfoIcon?: string;
2727
variant?: PromptVariant;
2828
headerIcon?: React.ReactNode;
29+
showCheckbox?: boolean;
30+
isChecked?: boolean;
2931
}
3032

3133
interface ShowParams {
@@ -34,11 +36,13 @@ interface ShowParams {
3436
primaryOption: string;
3537
variant: PromptVariant;
3638
showInfoIcon?: string;
39+
showCheckbox?: boolean;
3740
headerIcon?: React.ReactNode;
3841
}
3942

4043
export interface PromptRef {
4144
show: (params: ShowParams) => Promise<string>;
45+
getCheckboxState: () => boolean;
4246
}
4347

4448
const PromptComponent = forwardRef<PromptRef, PromptProps>(({ variant }, ref) => {
@@ -49,7 +53,9 @@ const PromptComponent = forwardRef<PromptRef, PromptProps>(({ variant }, ref) =>
4953
primaryOption: '',
5054
showInfoIcon: '',
5155
variant,
52-
headerIcon: undefined
56+
headerIcon: undefined,
57+
isChecked: false,
58+
showCheckbox: false
5359
});
5460

5561
/* This ref is used to store the resolve and reject functions of the promise returned by the show method */
@@ -67,7 +73,8 @@ const PromptComponent = forwardRef<PromptRef, PromptProps>(({ variant }, ref) =>
6773
setState({
6874
...params,
6975
isOpen: true,
70-
showInfoIcon: params.showInfoIcon || ''
76+
showInfoIcon: params.showInfoIcon || '',
77+
showCheckbox: !!params.showCheckbox
7178
});
7279
});
7380
};
@@ -77,11 +84,20 @@ const PromptComponent = forwardRef<PromptRef, PromptProps>(({ variant }, ref) =>
7784
setState((prevState) => ({ ...prevState, isOpen: false }));
7885
};
7986

87+
const handleCheckboxChange = () => {
88+
setState((prevState) => ({ ...prevState, isChecked: !prevState.isChecked }));
89+
};
90+
91+
const getCheckboxState = () => {
92+
return !!state.isChecked;
93+
};
94+
8095
useImperativeHandle(ref, () => ({
81-
show
96+
show,
97+
getCheckboxState
8298
}));
8399

84-
const { isOpen, primaryOption, title, subtitle, showInfoIcon, headerIcon } = state;
100+
const { isOpen, primaryOption, title, subtitle, showInfoIcon, headerIcon, showCheckbox } = state;
85101
const { resolve } = promiseInfoRef.current;
86102

87103
return (
@@ -106,6 +122,18 @@ const PromptComponent = forwardRef<PromptRef, PromptProps>(({ variant }, ref) =>
106122
{subtitle}
107123
</Typography>
108124
</Subtitle>
125+
{showCheckbox && (
126+
<FormControlLabel
127+
control={
128+
<Checkbox
129+
checked={getCheckboxState()}
130+
onChange={handleCheckboxChange}
131+
color="primary"
132+
/>
133+
}
134+
label={<span style={{ fontSize: '1rem' }}>Do not show again</span>}
135+
/>
136+
)}
109137
</ModalBody>
110138
)}
111139
<ModalFooter variant="filled" helpText={showInfoIcon}>

0 commit comments

Comments
 (0)