react-signature-canvas
라이브러리를 통해 유저의 서명을 받아야하는 화면을 개발하였다
참고) 보안상 이유도 있다보니 코드는 축약하거나 단순화해서 기록하였다!
사용하기 위해선 설치 후 import해준다
import SignatureCanvas from 'react-signature-canvas';
<Box>{createSignScreen()}</Box>
const createSignScreen = () => {
if (
signImgPath && resetSign && loadFile) ||
signImgPath && !resetSign && !uploadFile) ||
!signImgPath && resetSign && uploadFile) ||
!signImgPath && !resetSign && uploadFile)
) {
return (
<Box>
<Box
component={'img'}
src={getSignImg()}
/>
<IconSignClear
onClick={() => {
setOpenAlert(true);
}}
/>
</Box>
);
} else {
return (
<>
<IconSignClear
onClick={clearSignature}
/>
<Stack sx={{ position: 'relative', cursor: 'pointer' }}>
<Typography
variant={'Kor_24_b'}
>
서명{' '}
</Typography>
<SignatureCanvas
ref={canvasRef}
canvasProps={{
className: 'signature-canvas',
}}
onBegin={() => {}}
clearOnResize={false}
backgroundColor={'#FAFAFA'}
onEnd={handleSignatureEnd}
/>
</Stack>
</>
);
}
};
const getSignImg = () => {
let src = '';
if (signImgPath && !resetSign && !uploadFile)){
src =
REACT_APP_IMAGE_STORAGE + signImgPath || '/assets/placeholder.svg';
} else {
if (uploadFile) {
src = uploadFile;
}
}
return src;
};
const clearSignature = () => {
canvasRef.current.clear(); //현재 작성한 서명 이미지 삭제 (=clear)
analysisAgreementStore.setProps({
resetSign: true,
}); // 해당 스토어에 resetSign을 true값으로 업데이트
analysisAgreementStore.analysisAgreement.setProps({
uploadFile: '',
}); // 해당 스토어의 uploadFile을 리셋
setIsSigned(false);
};
const handleSignatureEnd = () => {
analysisAgreementStore.analysisAgreement.setProps({
uploadFile: canvasRef.current.toDataURL(),
});
setIsSigned(true);
};