feat: Closing of "Save to.." Dialog on Save To Disk (#7168)

Co-authored-by: dwelle <luzar.david@gmail.com>
This commit is contained in:
Vaibhav Shukla 2023-10-19 23:21:50 +05:30 committed by GitHub
parent 83f86e2b86
commit b1cac35269
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 37 additions and 13 deletions

View File

@ -80,7 +80,8 @@ export const ExportToExcalidrawPlus: React.FC<{
appState: Partial<AppState>; appState: Partial<AppState>;
files: BinaryFiles; files: BinaryFiles;
onError: (error: Error) => void; onError: (error: Error) => void;
}> = ({ elements, appState, files, onError }) => { onSuccess: () => void;
}> = ({ elements, appState, files, onError, onSuccess }) => {
const { t } = useI18n(); const { t } = useI18n();
return ( return (
<Card color="primary"> <Card color="primary">
@ -107,6 +108,7 @@ export const ExportToExcalidrawPlus: React.FC<{
try { try {
trackEvent("export", "eplus", `ui (${getFrame()})`); trackEvent("export", "eplus", `ui (${getFrame()})`);
await exportToExcalidrawPlus(elements, appState, files); await exportToExcalidrawPlus(elements, appState, files);
onSuccess();
} catch (error: any) { } catch (error: any) {
console.error(error); console.error(error);
if (error.name !== "AbortError") { if (error.name !== "AbortError") {

View File

@ -608,7 +608,7 @@ const ExcalidrawWrapper = () => {
canvas: HTMLCanvasElement, canvas: HTMLCanvasElement,
) => { ) => {
if (exportedElements.length === 0) { if (exportedElements.length === 0) {
return window.alert(t("alerts.cannotExportEmptyCanvas")); throw new Error(t("alerts.cannotExportEmptyCanvas"));
} }
if (canvas) { if (canvas) {
try { try {
@ -624,7 +624,7 @@ const ExcalidrawWrapper = () => {
); );
if (errorMessage) { if (errorMessage) {
setErrorMessage(errorMessage); throw new Error(errorMessage);
} }
if (url) { if (url) {
@ -634,7 +634,7 @@ const ExcalidrawWrapper = () => {
if (error.name !== "AbortError") { if (error.name !== "AbortError") {
const { width, height } = canvas; const { width, height } = canvas;
console.error(error, { width, height }); console.error(error, { width, height });
setErrorMessage(error.message); throw new Error(error.message);
} }
} }
} }
@ -714,6 +714,11 @@ const ExcalidrawWrapper = () => {
}, },
}); });
}} }}
onSuccess={() => {
excalidrawAPI?.updateScene({
appState: { openDialog: null },
});
}}
/> />
); );
}, },

View File

@ -191,7 +191,15 @@ export const actionSaveFileToDisk = register({
}, },
app.files, app.files,
); );
return { commitToHistory: false, appState: { ...appState, fileHandle } }; return {
commitToHistory: false,
appState: {
...appState,
openDialog: null,
fileHandle,
toast: { message: t("toast.fileSaved") },
},
};
} catch (error: any) { } catch (error: any) {
if (error?.name !== "AbortError") { if (error?.name !== "AbortError") {
console.error(error); console.error(error);

View File

@ -23,12 +23,15 @@ export type ExportCB = (
const JSONExportModal = ({ const JSONExportModal = ({
elements, elements,
appState, appState,
setAppState,
files, files,
actionManager, actionManager,
exportOpts, exportOpts,
canvas, canvas,
onCloseRequest,
}: { }: {
appState: UIAppState; appState: UIAppState;
setAppState: React.Component<any, UIAppState>["setState"];
files: BinaryFiles; files: BinaryFiles;
elements: readonly NonDeletedExcalidrawElement[]; elements: readonly NonDeletedExcalidrawElement[];
actionManager: ActionManager; actionManager: ActionManager;
@ -72,9 +75,14 @@ const JSONExportModal = ({
title={t("exportDialog.link_button")} title={t("exportDialog.link_button")}
aria-label={t("exportDialog.link_button")} aria-label={t("exportDialog.link_button")}
showAriaLabel={true} showAriaLabel={true}
onClick={() => { onClick={async () => {
onExportToBackend(elements, appState, files, canvas); try {
trackEvent("export", "link", `ui (${getFrame()})`); trackEvent("export", "link", `ui (${getFrame()})`);
await onExportToBackend(elements, appState, files, canvas);
onCloseRequest();
} catch (error: any) {
setAppState({ errorMessage: error.message });
}
}} }}
/> />
</Card> </Card>
@ -114,6 +122,7 @@ export const JSONExportDialog = ({
<JSONExportModal <JSONExportModal
elements={elements} elements={elements}
appState={appState} appState={appState}
setAppState={setAppState}
files={files} files={files}
actionManager={actionManager} actionManager={actionManager}
onCloseRequest={handleClose} onCloseRequest={handleClose}

View File

@ -83,12 +83,12 @@ export const ToolButton = React.forwardRef((props: ToolButtonProps, ref) => {
} }
}; };
useEffect( useEffect(() => {
() => () => { isMountedRef.current = true;
return () => {
isMountedRef.current = false; isMountedRef.current = false;
}, };
[], }, []);
);
const lastPointerTypeRef = useRef<PointerType | null>(null); const lastPointerTypeRef = useRef<PointerType | null>(null);