From 53ced38221af1c2842a4adbc0ef24fd07e1af72a Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 17 Jun 2023 00:50:29 +0300 Subject: [PATCH] New: Improved page loading errors Closes #2605 --- frontend/src/Activity/Blocklist/Blocklist.js | 9 +++++---- frontend/src/Activity/History/History.js | 13 +++++++------ frontend/src/Activity/Queue/Queue.js | 11 ++++++----- .../src/Author/History/AuthorHistoryTableContent.js | 6 ++++-- frontend/src/Calendar/Calendar.js | 6 ++++-- frontend/src/Components/Page/PageSectionContent.js | 4 +++- .../Quality/SelectQualityModalContent.js | 5 +++-- .../Options/DownloadClientOptions.js | 7 ++++--- frontend/src/Settings/General/GeneralSettings.js | 5 +++-- .../src/Settings/Indexers/Options/IndexerOptions.js | 7 ++++--- .../src/Settings/MediaManagement/MediaManagement.js | 7 ++++--- .../src/Settings/MediaManagement/Naming/Naming.js | 7 ++++--- .../Metadata/MetadataProvider/MetadataProvider.js | 7 ++++--- frontend/src/Settings/UI/UISettings.js | 7 ++++--- frontend/src/System/Backup/Backups.js | 11 ++++++----- 15 files changed, 65 insertions(+), 47 deletions(-) diff --git a/frontend/src/Activity/Blocklist/Blocklist.js b/frontend/src/Activity/Blocklist/Blocklist.js index ecabfcd1d..ad3dd6752 100644 --- a/frontend/src/Activity/Blocklist/Blocklist.js +++ b/frontend/src/Activity/Blocklist/Blocklist.js @@ -1,5 +1,6 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import ConfirmModal from 'Components/Modal/ConfirmModal'; import PageContent from 'Components/Page/PageContent'; @@ -161,16 +162,16 @@ class Blocklist extends Component { { !isAnyFetching && !!error && -
+ {translate('UnableToLoadBlocklist')} -
+ } { isAllPopulated && !error && !items.length && -
+ {translate('NoHistoryBlocklist')} -
+ } { diff --git a/frontend/src/Activity/History/History.js b/frontend/src/Activity/History/History.js index f6e156602..fe0775e4a 100644 --- a/frontend/src/Activity/History/History.js +++ b/frontend/src/Activity/History/History.js @@ -1,5 +1,6 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import FilterMenu from 'Components/Menu/FilterMenu'; import PageContent from 'Components/Page/PageContent'; @@ -11,7 +12,7 @@ import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper'; import TablePager from 'Components/Table/TablePager'; -import { align, icons } from 'Helpers/Props'; +import { align, icons, kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import HistoryRowConnector from './HistoryRowConnector'; @@ -85,9 +86,9 @@ class History extends Component { { !isFetchingAny && hasError && -
+ {translate('UnableToLoadHistory')} -
+ } { @@ -95,9 +96,9 @@ class History extends Component { // wait for the books to populate because they are never coming. isPopulated && !hasError && !items.length && -
- No history found -
+ + {translate('NoHistory')} + } { diff --git a/frontend/src/Activity/Queue/Queue.js b/frontend/src/Activity/Queue/Queue.js index 6df511c49..078282cf9 100644 --- a/frontend/src/Activity/Queue/Queue.js +++ b/frontend/src/Activity/Queue/Queue.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import PageContent from 'Components/Page/PageContent'; import PageContentBody from 'Components/Page/PageContentBody'; @@ -12,7 +13,7 @@ import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper'; import TablePager from 'Components/Table/TablePager'; -import { align, icons } from 'Helpers/Props'; +import { align, icons, kinds } from 'Helpers/Props'; import getRemovedItems from 'Utilities/Object/getRemovedItems'; import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; import translate from 'Utilities/String/translate'; @@ -233,17 +234,17 @@ class Queue extends Component { { !isRefreshing && hasError ? -
+ {translate('FailedToLoadQueue')} -
: + : null } { isAllPopulated && !hasError && !items.length ? -
+ {translate('QueueIsEmpty')} -
: + : null } diff --git a/frontend/src/Author/History/AuthorHistoryTableContent.js b/frontend/src/Author/History/AuthorHistoryTableContent.js index c58ed6500..bab6f3714 100644 --- a/frontend/src/Author/History/AuthorHistoryTableContent.js +++ b/frontend/src/Author/History/AuthorHistoryTableContent.js @@ -1,8 +1,10 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; +import { kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import AuthorHistoryRowConnector from './AuthorHistoryRowConnector'; @@ -70,9 +72,9 @@ class AuthorHistoryTableContent extends Component { { !isFetching && !!error && -
+ {translate('UnableToLoadHistory')} -
+ } { diff --git a/frontend/src/Calendar/Calendar.js b/frontend/src/Calendar/Calendar.js index fec208a00..a0b22f92f 100644 --- a/frontend/src/Calendar/Calendar.js +++ b/frontend/src/Calendar/Calendar.js @@ -1,6 +1,8 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; +import { kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import AgendaConnector from './Agenda/AgendaConnector'; import * as calendarViews from './calendarViews'; @@ -31,9 +33,9 @@ class Calendar extends Component { { !isFetching && !!error && -
+ {translate('UnableToLoadTheCalendar')} -
+ } { diff --git a/frontend/src/Components/Page/PageSectionContent.js b/frontend/src/Components/Page/PageSectionContent.js index 774b88669..2cef9eef1 100644 --- a/frontend/src/Components/Page/PageSectionContent.js +++ b/frontend/src/Components/Page/PageSectionContent.js @@ -1,6 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; +import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; +import { kinds } from 'Helpers/Props'; function PageSectionContent(props) { const { @@ -17,7 +19,7 @@ function PageSectionContent(props) { ); } else if (!isFetching && !!error) { return ( -
{errorMessage}
+ {errorMessage} ); } else if (isPopulated && !error) { return ( diff --git a/frontend/src/InteractiveImport/Quality/SelectQualityModalContent.js b/frontend/src/InteractiveImport/Quality/SelectQualityModalContent.js index 6b57735a6..d27fd806e 100644 --- a/frontend/src/InteractiveImport/Quality/SelectQualityModalContent.js +++ b/frontend/src/InteractiveImport/Quality/SelectQualityModalContent.js @@ -1,5 +1,6 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; @@ -92,9 +93,9 @@ class SelectQualityModalContent extends Component { { !isFetching && !!error && -
+ {translate('UnableToLoadQualities')} -
+ } { diff --git a/frontend/src/Settings/DownloadClients/Options/DownloadClientOptions.js b/frontend/src/Settings/DownloadClients/Options/DownloadClientOptions.js index 5a182f125..f921b5609 100644 --- a/frontend/src/Settings/DownloadClients/Options/DownloadClientOptions.js +++ b/frontend/src/Settings/DownloadClients/Options/DownloadClientOptions.js @@ -1,12 +1,13 @@ import PropTypes from 'prop-types'; import React from 'react'; +import Alert from 'Components/Alert'; import FieldSet from 'Components/FieldSet'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; -import { inputTypes, sizes } from 'Helpers/Props'; +import { inputTypes, kinds, sizes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; function DownloadClientOptions(props) { @@ -28,9 +29,9 @@ function DownloadClientOptions(props) { { !isFetching && error && -
+ {translate('UnableToLoadDownloadClientOptions')} -
+ } { diff --git a/frontend/src/Settings/General/GeneralSettings.js b/frontend/src/Settings/General/GeneralSettings.js index fbce144a3..b9079e319 100644 --- a/frontend/src/Settings/General/GeneralSettings.js +++ b/frontend/src/Settings/General/GeneralSettings.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import Form from 'Components/Form/Form'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import ConfirmModal from 'Components/Modal/ConfirmModal'; @@ -124,9 +125,9 @@ class GeneralSettings extends Component { { !isFetching && error && -
+ {translate('UnableToLoadGeneralSettings')} -
+ } { diff --git a/frontend/src/Settings/Indexers/Options/IndexerOptions.js b/frontend/src/Settings/Indexers/Options/IndexerOptions.js index 98c9a46fa..38334a8eb 100644 --- a/frontend/src/Settings/Indexers/Options/IndexerOptions.js +++ b/frontend/src/Settings/Indexers/Options/IndexerOptions.js @@ -1,12 +1,13 @@ import PropTypes from 'prop-types'; import React from 'react'; +import Alert from 'Components/Alert'; import FieldSet from 'Components/FieldSet'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; -import { inputTypes } from 'Helpers/Props'; +import { inputTypes, kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; function IndexerOptions(props) { @@ -28,9 +29,9 @@ function IndexerOptions(props) { { !isFetching && error && -
+ {translate('UnableToLoadIndexerOptions')} -
+ } { diff --git a/frontend/src/Settings/MediaManagement/MediaManagement.js b/frontend/src/Settings/MediaManagement/MediaManagement.js index bea955792..ae4a3b056 100644 --- a/frontend/src/Settings/MediaManagement/MediaManagement.js +++ b/frontend/src/Settings/MediaManagement/MediaManagement.js @@ -1,5 +1,6 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import FieldSet from 'Components/FieldSet'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; @@ -8,7 +9,7 @@ import FormLabel from 'Components/Form/FormLabel'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import PageContent from 'Components/Page/PageContent'; import PageContentBody from 'Components/Page/PageContentBody'; -import { inputTypes, sizes } from 'Helpers/Props'; +import { inputTypes, kinds, sizes } from 'Helpers/Props'; import RemotePathMappingsConnector from 'Settings/DownloadClients/RemotePathMappings/RemotePathMappingsConnector'; import SettingsToolbarConnector from 'Settings/SettingsToolbarConnector'; import translate from 'Utilities/String/translate'; @@ -79,9 +80,9 @@ class MediaManagement extends Component { { !isFetching && error &&
-
+ {translate('UnableToLoadMediaManagementSettings')} -
+
} diff --git a/frontend/src/Settings/MediaManagement/Naming/Naming.js b/frontend/src/Settings/MediaManagement/Naming/Naming.js index da465d435..fe42fe3a0 100644 --- a/frontend/src/Settings/MediaManagement/Naming/Naming.js +++ b/frontend/src/Settings/MediaManagement/Naming/Naming.js @@ -1,5 +1,6 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import FieldSet from 'Components/FieldSet'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; @@ -7,7 +8,7 @@ import FormInputButton from 'Components/Form/FormInputButton'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; -import { inputTypes, sizes } from 'Helpers/Props'; +import { inputTypes, kinds, sizes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import NamingModal from './NamingModal'; import styles from './Naming.css'; @@ -118,9 +119,9 @@ class Naming extends Component { { !isFetching && error && -
+ {translate('UnableToLoadNamingSettings')} -
+ } { diff --git a/frontend/src/Settings/Metadata/MetadataProvider/MetadataProvider.js b/frontend/src/Settings/Metadata/MetadataProvider/MetadataProvider.js index 09f18b0d4..51fe28fcf 100644 --- a/frontend/src/Settings/Metadata/MetadataProvider/MetadataProvider.js +++ b/frontend/src/Settings/Metadata/MetadataProvider/MetadataProvider.js @@ -1,12 +1,13 @@ import PropTypes from 'prop-types'; import React from 'react'; +import Alert from 'Components/Alert'; import FieldSet from 'Components/FieldSet'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; -import { inputTypes } from 'Helpers/Props'; +import { inputTypes, kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const writeAudioTagOptions = [ @@ -41,9 +42,9 @@ function MetadataProvider(props) { { !isFetching && error && -
+ {translate('UnableToLoadMetadataProviderSettings')} -
+ } { diff --git a/frontend/src/Settings/UI/UISettings.js b/frontend/src/Settings/UI/UISettings.js index 1318bf095..d35c638ec 100644 --- a/frontend/src/Settings/UI/UISettings.js +++ b/frontend/src/Settings/UI/UISettings.js @@ -1,5 +1,6 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import FieldSet from 'Components/FieldSet'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; @@ -8,7 +9,7 @@ import FormLabel from 'Components/Form/FormLabel'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import PageContent from 'Components/Page/PageContent'; import PageContentBody from 'Components/Page/PageContentBody'; -import { inputTypes } from 'Helpers/Props'; +import { inputTypes, kinds } from 'Helpers/Props'; import SettingsToolbarConnector from 'Settings/SettingsToolbarConnector'; import themes from 'Styles/Themes'; import titleCase from 'Utilities/String/titleCase'; @@ -81,9 +82,9 @@ class UISettings extends Component { { !isFetching && error && -
+ {translate('UnableToLoadUISettings')} -
+ } { diff --git a/frontend/src/System/Backup/Backups.js b/frontend/src/System/Backup/Backups.js index 67aa72cc3..7abcf4237 100644 --- a/frontend/src/System/Backup/Backups.js +++ b/frontend/src/System/Backup/Backups.js @@ -1,5 +1,6 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; +import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import PageContent from 'Components/Page/PageContent'; import PageContentBody from 'Components/Page/PageContentBody'; @@ -8,7 +9,7 @@ import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton'; import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; -import { icons } from 'Helpers/Props'; +import { icons, kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import BackupRow from './BackupRow'; import RestoreBackupModalConnector from './RestoreBackupModalConnector'; @@ -107,16 +108,16 @@ class Backups extends Component { { !isFetching && !!error && -
+ {translate('UnableToLoadBackups')} -
+ } { noBackups && -
+ {translate('NoBackupsAreAvailable')} -
+ } {