+
{t('PROJECT_NAME_EXISTS', { projectName: preferredName })}
+
{
+ inputValue = e.target.value;
+ }}
+ />
+
+ ),
+ okText: t('UPLOAD'),
+ cancelText: t('CANCEL'),
+ onOk: async () => {
+ try {
+ if (props.storage) {
+ await storageProject.uploadProject(props.storage, inputValue, dataUrl);
+ await fetchListOfProjectNames();
+ const project = await storageProject.fetchProject(props.storage, inputValue);
+ props.setCurrentProject(project);
+ await props.onProjectChanged();
+ Antd.message.success(t('UPLOAD_SUCCESS', { projectName: inputValue }));
+ }
+ } catch (error) {
+ console.error('Error uploading file:', error);
+ props.setAlertErrorMessage(t('UPLOAD_FAILED'));
+ }
+ },
+ });
+ } else {
+ // No conflict, upload directly
+ try {
+ if (props.storage) {
+ await storageProject.uploadProject(props.storage, uploadProjectName, dataUrl);
+ await fetchListOfProjectNames();
+ const project = await storageProject.fetchProject(props.storage, uploadProjectName);
+ props.setCurrentProject(project);
+ await props.onProjectChanged();
+ Antd.message.success(t('UPLOAD_SUCCESS', { projectName: uploadProjectName }));
+ }
+ } catch (error) {
+ console.error('Error uploading file:', error);
+ props.setAlertErrorMessage(t('UPLOAD_FAILED'));
+ }
+ }
+ };
+
+ reader.onerror = (_error) => {
+ console.log('Error reading file: ' + reader.error);
+ props.setAlertErrorMessage(t('UPLOAD_FAILED'));
+ };
+
+ reader.readAsDataURL(file);
+ } catch (error) {
+ console.error('Error handling upload:', error);
+ props.setAlertErrorMessage(t('UPLOAD_FAILED'));
+ }
+ };
+
+ input.click();
+ };
+
const handleUpload = (): Antd.UploadProps | null => {
if (!props.storage) {
return null;
@@ -445,8 +573,12 @@ export function Component(props: MenuProps): React.JSX.Element {
};
/** Handles closing the project management modal. */
- const handleProjectModalClose = (): void => {
+ const handleProjectModalClose = async (): Promise