From 6b26188d888a1f80bd36a1968e41333bab2af794 Mon Sep 17 00:00:00 2001 From: TheCatLady <52870424+TheCatLady@users.noreply.github.com> Date: Thu, 6 May 2021 22:33:11 -0400 Subject: [PATCH] fix(ui): hide advanced request options when there is only one choice (#1591) * refactor: remove unnecessary elements/indentation * fix(ui): hide advanced request options when there is only one choice --- .../RequestModal/AdvancedRequester/index.tsx | 292 +++++++++--------- src/i18n/locale/en.json | 2 +- 2 files changed, 150 insertions(+), 144 deletions(-) diff --git a/src/components/RequestModal/AdvancedRequester/index.tsx b/src/components/RequestModal/AdvancedRequester/index.tsx index 8ed0adf4..614da3a8 100644 --- a/src/components/RequestModal/AdvancedRequester/index.tsx +++ b/src/components/RequestModal/AdvancedRequester/index.tsx @@ -26,7 +26,7 @@ type OptionType = { const Select = dynamic(() => import('react-select'), { ssr: false }); const messages = defineMessages({ - advancedoptions: 'Advanced Options', + advancedoptions: 'Advanced', destinationserver: 'Destination Server', qualityprofile: 'Quality Profile', rootfolder: 'Root Folder', @@ -276,9 +276,9 @@ const AdvancedRequester: React.FC = ({
{!!data && selectedServer !== null && ( - <> -
-
+
+ {data.filter((server) => server.is4k === is4k).length > 1 && ( +
@@ -288,7 +288,7 @@ const AdvancedRequester: React.FC = ({ value={selectedServer} onChange={(e) => setSelectedServer(Number(e.target.value))} onBlur={(e) => setSelectedServer(Number(e.target.value))} - className="block w-full py-2 pl-3 pr-10 mt-1 text-base leading-6 text-white transition duration-150 ease-in-out bg-gray-800 border-gray-700 rounded-md form-select focus:outline-none focus:ring-blue focus:border-blue-300 sm:text-sm sm:leading-5" + className="bg-gray-800 border-gray-700" > {data .filter((server) => server.is4k === is4k) @@ -306,7 +306,11 @@ const AdvancedRequester: React.FC = ({ ))}
-
+ )} + {(isValidating || + !serverData || + serverData.profiles.length > 1) && ( +
@@ -316,7 +320,7 @@ const AdvancedRequester: React.FC = ({ value={selectedProfile} onChange={(e) => setSelectedProfile(Number(e.target.value))} onBlur={(e) => setSelectedProfile(Number(e.target.value))} - className="block w-full py-2 pl-3 pr-10 mt-1 text-base leading-6 text-white transition duration-150 ease-in-out bg-gray-800 border-gray-700 rounded-md form-select focus:outline-none focus:ring-blue focus:border-blue-300 sm:text-sm sm:leading-5" + className="bg-gray-800 border-gray-700" disabled={isValidating || !serverData} > {(isValidating || !serverData) && ( @@ -346,11 +350,11 @@ const AdvancedRequester: React.FC = ({ ))}
-
+ )} + {(isValidating || + !serverData || + serverData.rootFolders.length > 1) && ( +
@@ -360,7 +364,7 @@ const AdvancedRequester: React.FC = ({ value={selectedFolder} onChange={(e) => setSelectedFolder(e.target.value)} onBlur={(e) => setSelectedFolder(e.target.value)} - className="block w-full py-2 pl-3 pr-10 mt-1 text-base leading-6 text-white transition duration-150 ease-in-out bg-gray-800 border-gray-700 rounded-md form-select focus:outline-none focus:ring-blue focus:border-blue-300 sm:text-sm sm:leading-5" + className="bg-gray-800 border-gray-700" disabled={isValidating || !serverData} > {(isValidating || !serverData) && ( @@ -399,8 +403,12 @@ const AdvancedRequester: React.FC = ({ ))}
- {type === 'tv' && ( -
+ )} + {type === 'tv' && + (isValidating || + !serverData || + (serverData.languageProfiles ?? []).length > 1) && ( +
@@ -414,7 +422,7 @@ const AdvancedRequester: React.FC = ({ onBlur={(e) => setSelectedLanguage(parseInt(e.target.value)) } - className="block w-full py-2 pl-3 pr-10 mt-1 text-base leading-6 text-white transition duration-150 ease-in-out bg-gray-800 border-gray-700 rounded-md form-select focus:outline-none focus:ring-blue focus:border-blue-300 sm:text-sm sm:leading-5" + className="bg-gray-800 border-gray-700" disabled={isValidating || !serverData} > {(isValidating || !serverData) && ( @@ -447,147 +455,145 @@ const AdvancedRequester: React.FC = ({
)} -
- - )} - {!!data && selectedServer !== null && ( -
- - ({ + label: tag.label, + value: tag.id, + }))} + isMulti + isDisabled={isValidating || !serverData} + placeholder={ + isValidating || !serverData + ? intl.formatMessage(globalMessages.loading) + : intl.formatMessage(messages.selecttags) + } + className="react-select-container react-select-container-dark" + classNamePrefix="react-select" + value={selectedTags.map((tagId) => { + const foundTag = serverData?.tags.find( + (tag) => tag.id === tagId + ); + return { + value: foundTag?.id, + label: foundTag?.label, + }; + })} + onChange={( + value: OptionTypeBase | OptionsType | null + ) => { + if (!Array.isArray(value)) { + return; + } + setSelectedTags(value?.map((option) => option.value)); + }} + noOptionsMessage={() => + intl.formatMessage(messages.notagoptions) + } + /> +
+ )} {hasPermission([Permission.MANAGE_REQUESTS, Permission.MANAGE_USERS]) && selectedUser && ( -
- setSelectedUser(value)} - className="space-y-1" - > - {({ open }) => ( - <> - - {intl.formatMessage(messages.requestas)} - -
- - - - - - {selectedUser.displayName} - - - ({selectedUser.email}) - + setSelectedUser(value)} + className="space-y-1" + > + {({ open }) => ( + <> + + {intl.formatMessage(messages.requestas)} + +
+ + + + + + {selectedUser.displayName} - - + + ({selectedUser.email}) - - + + + + + + - + - - {userData?.results.map((user) => ( - - {({ selected, active }) => ( -
( + + {({ selected, active }) => ( +
+ + + + {user.displayName} + + + ({user.email}) + + + {selected && ( - - - {user.displayName} - - - ({user.email}) - + - {selected && ( - - - - )} -
- )} -
- ))} - - -
- - )} - -
+ )} +
+ )} + + ))} + + +
+ + )} + )} {isAnime && (
diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index 965b96db..e6961f51 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -183,7 +183,7 @@ "components.RequestList.showallrequests": "Show All Requests", "components.RequestList.sortAdded": "Request Date", "components.RequestList.sortModified": "Last Modified", - "components.RequestModal.AdvancedRequester.advancedoptions": "Advanced Options", + "components.RequestModal.AdvancedRequester.advancedoptions": "Advanced", "components.RequestModal.AdvancedRequester.animenote": "* This series is an anime.", "components.RequestModal.AdvancedRequester.default": "{name} (Default)", "components.RequestModal.AdvancedRequester.destinationserver": "Destination Server",