diff --git a/frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolder.js b/frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolder.js
index 1a53a5e44..18352f27e 100644
--- a/frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolder.js
+++ b/frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolder.js
@@ -148,7 +148,7 @@ class ImportMovieSelectFolder extends Component {
className={styles.addErrorAlert}
kind={kinds.DANGER}
>
- {translate('UnableToAddRootFolder')}
+ {translate('AddRootFolderError')}
{
diff --git a/frontend/src/RootFolder/RootFolders.tsx b/frontend/src/RootFolder/RootFolders.tsx
index d887b5b56..3e21845a7 100644
--- a/frontend/src/RootFolder/RootFolders.tsx
+++ b/frontend/src/RootFolder/RootFolders.tsx
@@ -49,7 +49,7 @@ function RootFolders() {
if (!isFetching && !!error) {
return (
- {translate('UnableToLoadRootFolders')}
+ {translate('RootFoldersLoadError')}
);
}
diff --git a/frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.tsx b/frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.tsx
index 54a35e5bf..dee012cc3 100644
--- a/frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.tsx
+++ b/frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.tsx
@@ -1,14 +1,18 @@
import React, { useCallback, useState } from 'react';
-import { useDispatch } from 'react-redux';
+import { useDispatch, useSelector } from 'react-redux';
+import Alert from 'Components/Alert';
import FileBrowserModal from 'Components/FileBrowser/FileBrowserModal';
import Icon from 'Components/Icon';
import Button from 'Components/Link/Button';
import { icons, kinds, sizes } from 'Helpers/Props';
import { addRootFolder } from 'Store/Actions/rootFolderActions';
+import createRootFoldersSelector from 'Store/Selectors/createRootFoldersSelector';
import translate from 'Utilities/String/translate';
import styles from './AddRootFolder.css';
function AddRootFolder() {
+ const { isSaving, saveError } = useSelector(createRootFoldersSelector());
+
const dispatch = useDispatch();
const [isAddNewRootFolderModalOpen, setIsAddNewRootFolderModalOpen] =
@@ -30,24 +34,42 @@ function AddRootFolder() {
}, [setIsAddNewRootFolderModalOpen]);
return (
-
-
+ <>
+ {!isSaving && saveError ? (
+
+ {translate('AddRootFolderError')}
-
-
+
+ {Array.isArray(saveError.responseJSON) ? (
+ saveError.responseJSON.map((e, index) => {
+ return - {e.errorMessage}
;
+ })
+ ) : (
+ - {JSON.stringify(saveError.responseJSON)}
+ )}
+
+
+ ) : null}
+
+
+
+
+
+
+ >
);
}
diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json
index 086639096..85bffea5a 100644
--- a/src/NzbDrone.Core/Localization/Core/en.json
+++ b/src/NzbDrone.Core/Localization/Core/en.json
@@ -30,6 +30,7 @@
"AddRemotePathMapping": "Add Remote Path Mapping",
"AddRestriction": "Add Restriction",
"AddRootFolder": "Add Root Folder",
+ "AddRootFolderError": "Unable to add root folder",
"AddToDownloadQueue": "Add to download queue",
"Added": "Added",
"AddedToDownloadQueue": "Added to download queue",
@@ -1253,7 +1254,6 @@
"UnableToAddANewNotificationPleaseTryAgain": "Unable to add a new notification, please try again.",
"UnableToAddANewQualityProfilePleaseTryAgain": "Unable to add a new quality profile, please try again.",
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Unable to add a new remote path mapping, please try again.",
- "UnableToAddRootFolder": "Unable to add root folder",
"UnableToLoadAltTitle": "Unable to load alternative titles.",
"UnableToLoadAutoTagging": "Unable to load auto tagging",
"UnableToLoadCollections": "Unable to load collections",