0
Fork 0
mirror of https://github.com/penpot/penpot-exporter-figma-plugin.git synced 2024-12-21 21:23:06 -05:00

Error management (#223)

* error management

* error message

* fixes
This commit is contained in:
Alex Sánchez 2024-10-18 13:34:10 +02:00 committed by GitHub
parent a1f1eb495e
commit 0dbd7d00f1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 585 additions and 518 deletions

View file

@ -0,0 +1,40 @@
import { Banner, Button, IconWarning32, Link } from '@create-figma-plugin/ui';
import { useFigmaContext } from '@ui/context';
import { Stack } from './Stack';
export const LibraryError = () => {
const { reload, cancel, error } = useFigmaContext();
if (!error) return null;
return (
<Stack space="small">
<Stack space="xsmall">
<Banner icon={<IconWarning32 />} variant="warning">
Oops! It looks like there was an <b>error generating the export file</b>.
</Banner>
<span>
Please open an issue in our{' '}
<Link
href="https://github.com/penpot/penpot-exporter-figma-plugin/issues"
target="_blank"
rel="noreferrer"
>
Github repository
</Link>
, and we&apos;ll be happy to assist you!
</span>
<Stack space="xsmall" direction="row">
<Button onClick={reload} fullWidth>
Reload
</Button>
<Button secondary onClick={cancel} fullWidth>
Cancel
</Button>
</Stack>
</Stack>
</Stack>
);
};

View file

@ -1,5 +1,6 @@
import { LoadingIndicator } from '@create-figma-plugin/ui';
import { LibraryError } from '@ui/components/LibraryError';
import { useFigmaContext } from '@ui/context';
import { ExportForm } from './ExportForm';
@ -7,7 +8,7 @@ import { ExporterProgress } from './ExporterProgress';
import { PluginReload } from './PluginReload';
export const PenpotExporter = () => {
const { loading, needsReload, exporting } = useFigmaContext();
const { loading, needsReload, exporting, error } = useFigmaContext();
if (loading) return <LoadingIndicator />;
@ -15,5 +16,7 @@ export const PenpotExporter = () => {
if (needsReload) return <PluginReload />;
if (error) return <LibraryError />;
return <ExportForm />;
};

View file

@ -11,7 +11,8 @@ type PluginMessage =
| ProgressStepMessage
| ProgressCurrentItemMessage
| ProgressTotalItemsMessage
| ProgressProcessedItemsMessage;
| ProgressProcessedItemsMessage
| ErrorMessage;
type PenpotDocumentMessage = {
type: 'PENPOT_DOCUMENT';
@ -47,6 +48,11 @@ type ProgressProcessedItemsMessage = {
data: number;
};
type ErrorMessage = {
type: 'ERROR';
data: string;
};
export const sendMessage = (pluginMessage: PluginMessage) => {
window.dispatchEvent(
new MessageEvent<MessageData>('message', {

View file

@ -10,6 +10,7 @@ export type UseFigmaHook = {
needsReload: boolean;
loading: boolean;
exporting: boolean;
error: boolean;
step: Steps | undefined;
currentItem: string | undefined;
totalItems: number;
@ -38,6 +39,7 @@ export const useFigma = (): UseFigmaHook => {
const [needsReload, setNeedsReload] = useState(false);
const [loading, setLoading] = useState(true);
const [exporting, setExporting] = useState(false);
const [error, setError] = useState(false);
const [step, setStep] = useState<Steps>();
const [currentItem, setCurrentItem] = useState<string | undefined>();
@ -62,9 +64,16 @@ export const useFigma = (): UseFigmaHook => {
data: 'exporting'
});
const blob = await file.export();
const blob = await file.export().catch(error => {
sendMessage({
type: 'ERROR',
data: error.message
});
});
download(blob, `${pluginMessage.data.name}.zip`);
if (blob) {
download(blob, `${pluginMessage.data.name}.zip`);
}
setExporting(false);
setStep(undefined);
@ -98,6 +107,12 @@ export const useFigma = (): UseFigmaHook => {
setProcessedItems(pluginMessage.data);
break;
}
case 'ERROR': {
setError(true);
setLoading(false);
setExporting(false);
break;
}
}
};
@ -113,6 +128,7 @@ export const useFigma = (): UseFigmaHook => {
const reload = () => {
setLoading(true);
setError(false);
postMessage('reload');
};
@ -143,6 +159,7 @@ export const useFigma = (): UseFigmaHook => {
needsReload,
loading,
exporting,
error,
step,
currentItem,
totalItems,

File diff suppressed because it is too large Load diff