diff options
author | crupest <crupest@outlook.com> | 2023-08-28 01:41:41 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2023-08-28 01:41:41 +0800 |
commit | b66a57071316434356e77e294ec22181e4db54d5 (patch) | |
tree | 2c000b459165834562cf420990e683e78fadae6c /FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx | |
parent | 256cc9592a3f31fc392e1ccdb699aa206b7b47ce (diff) | |
download | timeline-b66a57071316434356e77e294ec22181e4db54d5.tar.gz timeline-b66a57071316434356e77e294ec22181e4db54d5.tar.bz2 timeline-b66a57071316434356e77e294ec22181e4db54d5.zip |
...
Diffstat (limited to 'FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx')
-rw-r--r-- | FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx b/FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx index 011c5059..2fcfef2c 100644 --- a/FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx +++ b/FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx @@ -6,10 +6,7 @@ import { useUser } from "~src/services/user"; import { getHttpUserClient } from "~src/http/user"; -import ImageCropper, { - Clip, - applyClipToImage, -} from "~src/components/ImageCropper"; +import { ImageCropper, useImageCrop } from "~src/components/ImageCropper"; import BlobImage from "~src/components/BlobImage"; import { ButtonRowV2 } from "~src/components/button"; import { Dialog, DialogContainer } from "~src/components/dialog"; @@ -40,10 +37,13 @@ export default function ChangeAvatarDialog({ const [state, setState] = useState<State>("select"); const [file, setFile] = useState<File | null>(null); - const [clip, setClip] = useState<Clip | null>(null); - const [cropImgElement, setCropImgElement] = useState<HTMLImageElement | null>( - null, - ); + + const { canCrop, crop, imageCropperProps } = useImageCrop(file, { + constraint: { + ratio: 1, + }, + }); + const [resultBlob, setResultBlob] = useState<Blob | null>(null); const [message, setMessage] = useState<Text>( "settings.dialogChangeAvatar.prompt.select", @@ -65,18 +65,13 @@ export default function ChangeAvatarDialog({ }; const onCropNext = () => { - if ( - cropImgElement == null || - clip == null || - clip.width === 0 || - file == null - ) { + if (!canCrop) { throw new UiLogicError(); } setState("process-crop"); - void applyClipToImage(cropImgElement, clip, file.type).then((b) => { + void crop().then((b) => { setState("preview"); setResultBlob(b); }); @@ -151,7 +146,7 @@ export default function ChangeAvatarDialog({ action: "primary", text: "operationDialog.nextStep", onClick: onCropNext, - disabled: cropImgElement == null || clip == null || clip.width === 0, + disabled: !canCrop, }, ], "process-crop": [cancelButton, createPreviousButton(onPreviewPrevious)], @@ -214,11 +209,8 @@ export default function ChangeAvatarDialog({ return ( <div className="change-avatar-dialog-container"> <ImageCropper - className="change-avatar-cropper" - clip={clip} - onChange={setClip} - image={file} - imageElementCallback={setCropImgElement} + {...imageCropperProps} + containerClassName="change-avatar-cropper" /> <div className="change-avatar-dialog-prompt"> {c("settings.dialogChangeAvatar.prompt.crop")} |