{"version":3,"file":"671-7dd4a02ed5998aef3af0.js","mappings":"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BC,EAAO,cACPC,EAAa,WACb6iB,EAAU,eACVs9D,GACEx6D,EAEJ,OACEjN,EAAAA,cAAC6nE,GAAU,CACTrM,UAAWf,GACXtwD,WAAYA,EACZ/iB,kBAAmBA,EACnBC,QAASA,EACTC,cAAeA,EACf4gF,8BAA+B6mC,GAC/BtnC,eAAgBA,GAGtB,CAUAqnC,GAAwBnqE,aAAe,CACrC6iC,mBAAmB,GAGrB,YCqGA,GArIA,SAA+Bv6D,GAC7B,MAAM,QACJxkB,EAAO,cACPC,EAAa,WACbyhB,EAAU,aACVq6F,GACEv3F,EAEJ,OACEjN,EAAAA,cAACskG,GAAQ,CACPn6F,WAAYA,EACZqxD,UAAWf,IAEXz6D,EAAAA,cAAC27D,GAAW,KACV37D,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,SACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,WAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,YACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,UAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,SACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,WAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,YACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,cAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,iBACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,mBAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,kBACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,oBAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,UACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,YAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,aACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,eAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,aA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AAeA,EACf2hB,QAASm6F,GAER70H,GAAU,UAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,SACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,WAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,mBACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,mBAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,QACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,UAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,OACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,SAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,YACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,cAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,iBACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,mBAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,kBACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,oBAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,cACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,gBAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,aACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,eAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,aACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,eAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,uBACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,yBAGbqwB,EAAAA,cAACukG,GAAY,CACX/3H,KAAK,cACLic,QAASA,EACTC,cAAeA,EACf2hB,QAASm6F,GAER70H,GAAU,gBAGbqwB,EAAAA,cAACukG,GAAY,C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","sources":["webpack://radarr/./frontend/src/Styles/Themes/dark.js","webpack://radarr/./frontend/src/Styles/Themes/light.js","webpack://radarr/./frontend/src/Styles/Variables/dimensions.js","webpack://radarr/./frontend/src/Styles/Variables/fonts.js","webpack://radarr/./frontend/src/Store/thunks.ts","webpack://radarr/./frontend/src/Utilities/createAjaxRequest.js","webpack://radarr/./frontend/src/Utilities/Movie/getNewMovie.js","webpack://radarr/./frontend/src/Utilities/State/getSectionState.js","webpack://radarr/./frontend/src/Utilities/State/updateSectionState.js","webpack://radarr/./frontend/src/Store/Actions/baseActions.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createHandleActions.js","webpack://radarr/./frontend/src/Store/Actions/Creators/Reducers/createSetSettingValueReducer.js","webpack://radarr/./frontend/src/Store/Actions/addMovieActions.js","webpack://radarr/./frontend/src/Utilities/String/translate.ts","webpack://radarr/./frontend/src/Store/Actions/appActions.js","webpack://radarr/./frontend/src/Helpers/Props/align.ts","webpack://radarr/./frontend/src/Helpers/Props/filterTypes.js","webpack://radarr/./frontend/src/Helpers/Props/filterBuilderTypes.js","webpack://radarr/./frontend/src/Helpers/Props/filterBuilderValueTypes.js","webpack://radarr/./frontend/src/Helpers/Props/filterTypePredicates.js","webpack://radarr/./frontend/src/Helpers/Props/icons.ts","webpack://radarr/./frontend/src/Helpers/Props/inputTypes.js","webpack://radarr/./frontend/src/Helpers/Props/kinds.ts","webpack://radarr/./frontend/src/Helpers/Props/scrollDirections.ts","webpack://radarr/./frontend/src/Helpers/Props/sizes.ts","webpack://radarr/./frontend/src/Helpers/Props/sortDirections.ts","webpack://radarr/./frontend/src/Helpers/Props/tooltipPositions.ts","webpack://radarr/./frontend/src/Utilities/serverSideCollectionHandlers.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createRemoveItemHandler.js","webpack://radarr/./frontend/src/Utilities/pages.js","webpack://radarr/./frontend/src/Utilities/Filter/findSelectedFilters.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createFetchServerSideCollectionHandler.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createSetServerSideCollectionPageHandler.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createServerSideCollectionHandlers.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createSetServerSideCollectionSortHandler.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createSetServerSideCollectionFilterHandler.js","webpack://radarr/./frontend/src/Store/Actions/Creators/Reducers/createClearReducer.js","webpack://radarr/./frontend/src/Store/Actions/Creators/Reducers/createSetTableOptionReducer.js","webpack://radarr/./frontend/src/Store/Actions/blocklistActions.js","webpack://radarr/./frontend/src/Calendar/calendarViews.js","webpack://radarr/./frontend/src/Commands/commandNames.js","webpack://radarr/./frontend/src/Utilities/Command/isSameCommand.js","webpack://radarr/./frontend/src/Utilities/Command/findCommand.js","webpack://radarr/./frontend/src/Utilities/Command/isCommandExecuting.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createFetchHandler.js","webpack://radarr/./frontend/src/Store/Actions/commandActions.js","webpack://radarr/./frontend/src/Helpers/Props/messageTypes.js","webpack://radarr/./frontend/src/Store/Actions/calendarActions.js","webpack://radarr/./frontend/src/Utilities/requestAction.js","webpack://radarr/./frontend/src/Store/Actions/captchaActions.js","webpack://radarr/./frontend/src/Utilities/State/getProviderState.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createSaveProviderHandler.js","webpack://radarr/./frontend/src/Store/Actions/customFilterActions.js","webpack://radarr/./frontend/src/Utilities/Array/sortByProp.ts","webpack://radarr/./frontend/src/Store/Actions/Creators/Reducers/createSetClientSideCollectionFilterReducer.js","webpack://radarr/./frontend/src/Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer.js","webpack://radarr/./frontend/src/Utilities/Date/isAfter.js","webpack://radarr/./frontend/src/Utilities/Date/isBefore.js","webpack://radarr/./frontend/src/Utilities/Date/dateFilterPredicate.js","webpack://radarr/./frontend/src/Utilities/Number/padNumber.js","webpack://radarr/./frontend/src/Store/Actions/movieActions.js","webpack://radarr/./frontend/src/Store/Actions/discoverMovieActions.js","webpack://radarr/./frontend/src/Store/Actions/extraFileActions.js","webpack://radarr/./frontend/src/Components/Icon.css?e891","webpack://radarr/./frontend/src/Components/Icon.tsx","webpack://radarr/./frontend/src/Store/Actions/historyActions.js","webpack://radarr/./frontend/src/Store/Actions/rootFolderActions.js","webpack://radarr/./frontend/src/Store/Actions/importMovieActions.js","webpack://radarr/./frontend/src/Utilities/String/naturalExpansion.js","webpack://radarr/./frontend/src/Store/Actions/interactiveImportActions.js","webpack://radarr/./frontend/src/Store/Actions/movieBlocklistActions.js","webpack://radarr/./frontend/src/Store/Actions/movieCollectionActions.js","webpack://radarr/./frontend/src/Store/Actions/movieCreditsActions.js","webpack://radarr/./frontend/src/Components/Link/Link.tsx","webpack://radarr/./frontend/src/Components/Link/Link.css?ce43","webpack://radarr/./frontend/src/Components/Link/IconButton.css?e107","webpack://radarr/./frontend/src/Components/Link/IconButton.tsx","webpack://radarr/./frontend/src/Movie/movieEntities.ts","webpack://radarr/./frontend/src/Store/Actions/movieFileActions.js","webpack://radarr/./frontend/src/Store/Actions/movieHistoryActions.js","webpack://radarr/./frontend/src/Store/Actions/movieIndexActions.js","webpack://radarr/./frontend/src/Store/Actions/oAuthActions.js","webpack://radarr/./frontend/src/Store/Actions/organizePreviewActions.js","webpack://radarr/./frontend/src/Store/Actions/parseActions.ts","webpack://radarr/./frontend/src/Store/Actions/pathActions.js","webpack://radarr/./frontend/src/Store/Actions/providerOptionActions.js","webpack://radarr/./frontend/src/Store/Actions/queueActions.js","webpack://radarr/./frontend/src/Store/Actions/releaseActions.js","webpack://radarr/./frontend/src/Store/Actions/Settings/autoTaggings.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createFetchSchemaHandler.js","webpack://radarr/./frontend/src/Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer.js","webpack://radarr/./frontend/src/Utilities/State/getNextId.js","webpack://radarr/./frontend/src/Utilities/State/selectProviderSchema.js","webpack://radarr/./frontend/src/Store/Actions/Settings/autoTaggingSpecifications.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createBulkEditItemHandler.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createBulkRemoveItemHandler.js","webpack://radarr/./frontend/src/Store/Actions/Settings/customFormats.js","webpack://radarr/./frontend/src/Store/Actions/Settings/customFormatSpecifications.js","webpack://radarr/./frontend/src/Store/Actions/Settings/delayProfiles.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createSaveHandler.js","webpack://radarr/./frontend/src/Store/Actions/Settings/downloadClientOptions.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createTestAllProvidersHandler.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createTestProviderHandler.js","webpack://radarr/./frontend/src/Store/Actions/Settings/downloadClients.js","webpack://radarr/./frontend/src/Store/Actions/Settings/general.js","webpack://radarr/./frontend/src/Store/Actions/Settings/importListExclusions.js","webpack://radarr/./frontend/src/Store/Actions/Settings/importListOptions.js","webpack://radarr/./frontend/src/Store/Actions/Settings/importLists.js","webpack://radarr/./frontend/src/Store/Actions/Settings/indexerFlags.js","webpack://radarr/./frontend/src/Store/Actions/Settings/indexerOptions.js","webpack://radarr/./frontend/src/Store/Actions/Settings/indexers.js","webpack://radarr/./frontend/src/Store/Actions/Settings/languages.js","webpack://radarr/./frontend/src/Store/Actions/Settings/mediaManagement.js","webpack://radarr/./frontend/src/Store/Actions/Settings/metadata.js","webpack://radarr/./frontend/src/Store/Actions/Settings/metadataOptions.js","webpack://radarr/./frontend/src/Store/Actions/Settings/naming.js","webpack://radarr/./frontend/src/Store/Actions/Settings/namingExamples.js","webpack://radarr/./frontend/src/Store/Actions/Settings/notifications.js","webpack://radarr/./frontend/src/Store/Actions/Creators/Reducers/createSetProviderFieldValuesReducer.js","webpack://radarr/./frontend/src/Store/Actions/Settings/qualityDefinitions.js","webpack://radarr/./frontend/src/Store/Actions/Settings/qualityProfiles.js","webpack://radarr/./frontend/src/Store/Actions/Settings/releaseProfiles.js","webpack://radarr/./frontend/src/Store/Actions/Settings/remotePathMappings.js","webpack://radarr/./frontend/src/Store/Actions/Settings/ui.js","webpack://radarr/./frontend/src/Store/Actions/settingsActions.js","webpack://radarr/./frontend/src/Store/Actions/systemActions.js","webpack://radarr/./frontend/src/Store/Actions/tagActions.js","webpack://radarr/./frontend/src/Utilities/Movie/updateMovies.js","webpack://radarr/./frontend/src/Store/Actions/Creators/createBatchToggleMovieMonitoredHandler.js","webpack://radarr/./frontend/src/Store/Actions/wantedActions.js","webpack://radarr/./frontend/src/Store/Actions/index.js","webpack://radarr/./frontend/src/Store/Actions/createReducers.js","webpack://radarr/./frontend/src/Store/Middleware/createPersistState.js","webpack://radarr/./frontend/src/Utilities/String/parseUrl.js","webpack://radarr/./frontend/src/Store/Middleware/createSentryMiddleware.js","webpack://radarr/./frontend/src/Store/Middleware/middlewares.js","webpack://radarr/./frontend/src/Store/Migrators/migrate.js","webpack://radarr/./frontend/src/Store/Migrators/migrateBlacklistToBlocklist.js","webpack://radarr/./frontend/src/Store/Migrators/migratePreDbToReleased.js","webpack://radarr/./frontend/src/Store/Migrators/migrateMonitorToEnum.js","webpack://radarr/./frontend/src/Store/createAppStore.js","webpack://radarr/./frontend/src/Store/Selectors/createDimensionsSelector.ts","webpack://radarr/./frontend/src/Store/Selectors/createSystemStatusSelector.ts","webpack://radarr/./frontend/src/Utilities/Object/getErrorMessage.ts","webpack://radarr/./frontend/src/Components/Page/ErrorPage.css?c425","webpack://radarr/./frontend/src/Components/Page/ErrorPage.js","webpack://radarr/./frontend/src/Components/Loading/LoadingIndicator.css?dbdc","webpack://radarr/./frontend/src/Components/Loading/LoadingIndicator.tsx","webpack://radarr/./frontend/src/Components/Loading/LoadingMessage.tsx","webpack://radarr/./frontend/src/Components/Loading/LoadingMessage.css?b824","webpack://radarr/./frontend/src/Components/Page/LoadingPage.js","webpack://radarr/./frontend/src/Components/Page/LoadingPage.css?2ac8","webpack://radarr/./frontend/src/Components/Error/ErrorBoundary.tsx","webpack://radarr/./frontend/src/Utilities/browser.js","webpack://radarr/./frontend/src/Utilities/getUniqueElementId.js","webpack://radarr/./frontend/src/Utilities/scrollLock.js","webpack://radarr/./frontend/src/Components/Error/ErrorBoundaryError.css?8155","webpack://radarr/./frontend/src/Components/Error/ErrorBoundaryError.tsx","webpack://radarr/./frontend/src/Components/Link/Button.css?5d24","webpack://radarr/./frontend/src/Components/Link/Button.tsx","webpack://radarr/./frontend/src/Components/Scroller/Scroller.css?d85d","webpack://radarr/./frontend/src/Components/Scroller/Scroller.tsx","webpack://radarr/./frontend/src/Components/Modal/ModalBody.js","webpack://radarr/./frontend/src/Components/Modal/ModalBody.css?c915","webpack://radarr/./frontend/src/Components/Modal/ModalContent.js","webpack://radarr/./frontend/src/Components/Modal/ModalContent.css?7044","webpack://radarr/./frontend/src/Components/Modal/ModalFooter.js","webpack://radarr/./frontend/src/Components/Modal/ModalFooter.css?ee47","webpack://radarr/./frontend/src/Components/Modal/ModalHeader.js","webpack://radarr/./frontend/src/Components/Modal/ModalHeader.css?ae6f","webpack://radarr/./frontend/src/Components/Modal/ModalError.js","webpack://radarr/./frontend/src/Components/Modal/ModalError.css?0caf","webpack://radarr/./frontend/src/Components/Modal/Modal.css?9394","webpack://radarr/./frontend/src/Components/Modal/Modal.js","webpack://radarr/./frontend/src/Utilities/Constants/keyCodes.js","webpack://radarr/./frontend/src/Components/Markdown/InlineMarkdown.tsx","webpack://radarr/./frontend/src/Helpers/Hooks/usePrevious.tsx","webpack://radarr/./frontend/src/System/Updates/UpdateChanges.css?6b30","webpack://radarr/./frontend/src/System/Updates/UpdateChanges.tsx","webpack://radarr/./frontend/src/App/AppUpdatedModalContent.tsx","webpack://radarr/./frontend/src/App/AppUpdatedModalContent.css?ffc2","webpack://radarr/./frontend/src/App/AppUpdatedModal.tsx","webpack://radarr/./frontend/src/App/ColorImpairedContext.ts","webpack://radarr/./frontend/src/App/ConnectionLostModal.tsx","webpack://radarr/./frontend/src/App/ConnectionLostModal.css?ae5b","webpack://radarr/./frontend/src/Utilities/pagePopulator.js","webpack://radarr/./frontend/src/Utilities/String/titleCase.js","webpack://radarr/./frontend/src/Components/SignalRConnector.js","webpack://radarr/./frontend/src/Components/Alert.css?23e8","webpack://radarr/./frontend/src/Components/Alert.tsx","webpack://radarr/./frontend/src/Helpers/elementChildren.js","webpack://radarr/./frontend/src/Components/Form/FormGroup.css?d5ac","webpack://radarr/./frontend/src/Components/Form/FormGroup.js","webpack://radarr/./frontend/src/Components/Portal.tsx","webpack://radarr/./frontend/src/Components/Form/AutoSuggestInput.css?c2b4","webpack://radarr/./frontend/src/Components/Form/AutoSuggestInput.js","webpack://radarr/./frontend/src/Components/Form/AutoCompleteInput.js","webpack://radarr/./frontend/src/Components/Measure.js","webpack://radarr/./frontend/src/Components/Form/FormInputHelpText.js","webpack://radarr/./frontend/src/Components/Form/FormInputHelpText.css?2c8b","webpack://radarr/./frontend/src/Components/Form/CheckInput.css?eb2d","webpack://radarr/./frontend/src/Components/Form/CheckInput.js","webpack://radarr/./frontend/src/Components/Form/EnhancedSelectInputOption.js","webpack://radarr/./frontend/src/Components/Form/EnhancedSelectInputOption.css?d786","webpack://radarr/./frontend/src/Components/Form/HintedSelectInputOption.js","webpack://radarr/./frontend/src/Components/Form/HintedSelectInputOption.css?3ed7","webpack://radarr/./frontend/src/Components/Label.css?d560","webpack://radarr/./frontend/src/Components/Label.tsx","webpack://radarr/./frontend/src/Components/Form/EnhancedSelectInputSelectedValue.js","webpack://radarr/./frontend/src/Components/Form/EnhancedSelectInputSelectedValue.css?e35b","webpack://radarr/./frontend/src/Components/Form/HintedSelectInputSelectedValue.js","webpack://radarr/./frontend/src/Components/Form/HintedSelectInputSelectedValue.css?4dcb","webpack://radarr/./frontend/src/Components/Form/TextInput.js","webpack://radarr/./frontend/src/Components/Form/TextInput.css?7ae5","webpack://radarr/./frontend/src/Components/Form/EnhancedSelectInput.css?09a7","webpack://radarr/./frontend/src/Components/Form/EnhancedSelectInput.js","webpack://radarr/./frontend/src/Components/Form/AvailabilitySelectInput.tsx","webpack://radarr/./frontend/src/Components/Link/SpinnerButton.css?be10","webpack://radarr/./frontend/src/Components/Link/SpinnerButton.js","webpack://radarr/./frontend/src/Components/Form/FormInputButton.css?ee78","webpack://radarr/./frontend/src/Components/Form/FormInputButton.tsx","webpack://radarr/./frontend/src/Components/Form/CaptchaInput.js","webpack://radarr/./frontend/src/Components/Form/CaptchaInput.css?8bc6","webpack://radarr/./frontend/src/Components/Form/CaptchaInputConnector.js","webpack://radarr/./frontend/src/Helpers/Props/Shapes/tagShape.js","webpack://radarr/./frontend/src/Components/Form/TagInputInput.js","webpack://radarr/./frontend/src/Components/Form/TagInputInput.css?b74d","webpack://radarr/./frontend/src/Components/Form/TagInputTag.js","webpack://radarr/./frontend/src/Components/Form/TagInputTag.css?666f","webpack://radarr/./frontend/src/Components/Form/TagInput.js","webpack://radarr/./frontend/src/Components/Form/TagInput.css?9eee","webpack://radarr/./frontend/src/Components/Form/DeviceInput.css?5f21","webpack://radarr/./frontend/src/Components/Form/DeviceInput.js","webpack://radarr/./frontend/src/Components/Form/DeviceInputConnector.js","webpack://radarr/./frontend/src/Components/Form/DownloadClientSelectInputConnector.js","webpack://radarr/./frontend/src/Components/Form/EnhancedSelectInputConnector.js","webpack://radarr/./frontend/src/Components/Form/IndexerFlagsSelectInput.tsx","webpack://radarr/./frontend/src/Components/Form/IndexerSelectInputConnector.js","webpack://radarr/./frontend/src/Components/Form/KeyValueListInputItem.tsx","webpack://radarr/./frontend/src/Components/Form/KeyValueListInputItem.css?b22d","webpack://radarr/./frontend/src/Components/Form/KeyValueListInput.css?6a94","webpack://radarr/./frontend/src/Components/Form/KeyValueListInput.tsx","webpack://radarr/./frontend/src/Components/Form/LanguageSelectInputConnector.js","webpack://radarr/./frontend/src/Utilities/Movie/monitorOptions.js","webpack://radarr/./frontend/src/Components/Form/MovieMonitoredSelectInput.js","webpack://radarr/./frontend/src/Store/Selectors/createTagsSelector.ts","webpack://radarr/./frontend/src/Components/Form/TagInputConnector.js","webpack://radarr/./frontend/src/Components/Form/MovieTagInput.tsx","webpack://radarr/./frontend/src/Components/Form/NumberInput.js","webpack://radarr/./frontend/src/Components/Link/SpinnerErrorButton.js","webpack://radarr/./frontend/src/Components/Link/SpinnerErrorButton.css?682f","webpack://radarr/./frontend/src/Components/Form/OAuthInput.js","webpack://radarr/./frontend/src/Components/Form/OAuthInputConnector.js","webpack://radarr/./frontend/src/Components/Form/PasswordInput.js","webpack://radarr/./frontend/src/Components/Form/Form.js","webpack://radarr/./frontend/src/Components/Form/Form.css?df1f","webpack://radarr/./frontend/src/Components/Form/FormLabel.css?c030","webpack://radarr/./frontend/src/Components/Form/FormLabel.js","webpack://radarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumn.js","webpack://radarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumn.css?1f61","webpack://radarr/./frontend/src/Components/DragPreviewLayer.css?56c0","webpack://radarr/./frontend/src/Components/DragPreviewLayer.tsx","webpack://radarr/./frontend/src/Helpers/dragTypes.js","webpack://radarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumnDragPreview.js","webpack://radarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumnDragPreview.css?8045","webpack://radarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumnDragSource.css?154f","webpack://radarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumnDragSource.js","webpack://radarr/./frontend/src/Components/Table/TableOptions/TableOptionsModal.js","webpack://radarr/./frontend/src/Components/Table/TableOptions/TableOptionsModal.css?ec8d","webpack://radarr/./frontend/src/Components/Table/TableOptions/TableOptionsModalWrapper.js","webpack://radarr/./frontend/src/Components/Table/TableHeader.js","webpack://radarr/./frontend/src/Components/Table/TableHeaderCell.js","webpack://radarr/./frontend/src/Components/Table/TableHeaderCell.css?662f","webpack://radarr/./frontend/src/Components/Table/TableSelectAllHeaderCell.js","webpack://radarr/./frontend/src/Components/Table/TableSelectAllHeaderCell.css?bb30","webpack://radarr/./frontend/src/Components/Table/Table.css?b3c5","webpack://radarr/./frontend/src/Components/Table/Table.js","webpack://radarr/./frontend/src/Components/Table/TableBody.js","webpack://radarr/./frontend/src/Components/Table/Cells/TableRowCell.css?5fff","webpack://radarr/./frontend/src/Components/Table/Cells/TableRowCell.tsx","webpack://radarr/./frontend/src/Components/Table/TableRow.js","webpack://radarr/./frontend/src/Components/Table/TableRow.css?dc3c","webpack://radarr/./frontend/src/Components/Table/TableRowButton.js","webpack://radarr/./frontend/src/Components/Table/TableRowButton.css?236d","webpack://radarr/./frontend/src/Components/FileBrowser/FileBrowserRow.tsx","webpack://radarr/./frontend/src/Components/FileBrowser/FileBrowserRow.css?26c4","webpack://radarr/./frontend/src/Components/FileBrowser/FileBrowserModalContent.tsx","webpack://radarr/./frontend/src/Components/FileBrowser/createPathsSelector.ts","webpack://radarr/./frontend/src/Components/FileBrowser/FileBrowserModalContent.css?4b94","webpack://radarr/./frontend/src/Components/FileBrowser/FileBrowserModal.tsx","webpack://radarr/./frontend/src/Components/FileBrowser/FileBrowserModal.css?f894","webpack://radarr/./frontend/src/Components/Form/PathInput.js","webpack://radarr/./frontend/src/Components/Form/PathInput.css?257e","webpack://radarr/./frontend/src/Components/Form/PathInputConnector.js","webpack://radarr/./frontend/src/Store/Selectors/createSortedSectionSelector.ts","webpack://radarr/./frontend/src/Components/Form/QualityProfileSelectInputConnector.js","webpack://radarr/./frontend/src/Store/Selectors/createRootFoldersSelector.ts","webpack://radarr/./frontend/src/Utilities/Number/formatBytes.ts","webpack://radarr/./frontend/src/Components/Form/RootFolderSelectInputOption.js","webpack://radarr/./frontend/src/Components/Form/RootFolderSelectInputOption.css?1fb3","webpack://radarr/./frontend/src/Components/Form/RootFolderSelectInputSelectedValue.js","webpack://radarr/./frontend/src/Components/Form/RootFolderSelectInputSelectedValue.css?f3dc","webpack://radarr/./frontend/src/Components/Form/RootFolderSelectInput.js","webpack://radarr/./frontend/src/Components/Form/RootFolderSelectInputConnector.js","webpack://radarr/./frontend/src/Components/Form/TagSelectInputConnector.js","webpack://radarr/./frontend/src/Components/Form/TextArea.js","webpack://radarr/./frontend/src/Components/Form/TextArea.css?a9fd","webpack://radarr/./frontend/src/Utilities/String/split.js","webpack://radarr/./frontend/src/Components/Form/TextTagInputConnector.js","webpack://radarr/./frontend/src/Components/Form/UMaskInput.css?e609","webpack://radarr/./frontend/src/Components/Form/UMaskInput.js","webpack://radarr/./frontend/src/Components/Form/FormInputGroup.js","webpack://radarr/./frontend/src/Components/Form/FormInputGroup.css?4b7b","webpack://radarr/./frontend/src/Components/FieldSet.tsx","webpack://radarr/./frontend/src/Components/FieldSet.css?1417","webpack://radarr/./frontend/src/Components/Link/ClipboardButton.css?2628","webpack://radarr/./frontend/src/Components/Link/ClipboardButton.tsx","webpack://radarr/./frontend/src/Components/keyboardShortcuts.js","webpack://radarr/./frontend/src/Helpers/getDisplayName.js","webpack://radarr/./frontend/src/Components/Modal/ConfirmModal.js","webpack://radarr/./frontend/src/Settings/General/SecuritySettings.js","webpack://radarr/./frontend/src/Store/Selectors/selectSettings.ts","webpack://radarr/./frontend/src/Store/Selectors/createSettingsSectionSelector.ts","webpack://radarr/./frontend/src/FirstRun/AuthenticationRequiredModalContent.tsx","webpack://radarr/./frontend/src/FirstRun/AuthenticationRequiredModalContent.css?c0cd","webpack://radarr/./frontend/src/FirstRun/AuthenticationRequiredModal.tsx","webpack://radarr/./frontend/src/Helpers/Props/Shapes/locationShape.js","webpack://radarr/./frontend/src/Components/Page/Header/KeyboardShortcutsModalContentConnector.js","webpack://radarr/./frontend/src/Components/Page/Header/KeyboardShortcutsModalContent.js","webpack://radarr/./frontend/src/Components/Page/Header/KeyboardShortcutsModalContent.css?65a6","webpack://radarr/./frontend/src/Components/Page/Header/KeyboardShortcutsModal.js","webpack://radarr/./frontend/src/Store/Selectors/createAllMoviesSelector.ts","webpack://radarr/./frontend/src/Store/Selectors/createDeepEqualSelector.ts","webpack://radarr/./frontend/src/Components/Page/Header/fuse.worker.js","webpack://radarr/./frontend/src/Movie/MovieImage.tsx","webpack://radarr/./frontend/src/Movie/MoviePoster.tsx","webpack://radarr/./frontend/src/Components/Page/Header/MovieSearchResult.css?2848","webpack://radarr/./frontend/src/Components/Page/Header/MovieSearchResult.js","webpack://radarr/./frontend/src/Components/Page/Header/MovieSearchInput.js","webpack://radarr/./frontend/src/Components/Page/Header/MovieSearchInput.css?f5ca","webpack://radarr/./frontend/src/Components/Page/Header/MovieSearchInputConnector.js","webpack://radarr/./frontend/src/Components/Menu/Menu.js","webpack://radarr/./frontend/src/Components/Menu/Menu.css?6383","webpack://radarr/./frontend/src/Components/Menu/MenuButton.js","webpack://radarr/./frontend/src/Components/Menu/MenuButton.css?b71f","webpack://radarr/./frontend/src/Components/Menu/MenuContent.js","webpack://radarr/./frontend/src/Components/Menu/MenuContent.css?a576","webpack://radarr/./frontend/src/Components/Menu/MenuItem.js","webpack://radarr/./frontend/src/Components/Menu/MenuItem.css?a2c6","webpack://radarr/./frontend/src/Components/Menu/MenuItemSeparator.js","webpack://radarr/./frontend/src/Components/Menu/MenuItemSeparator.css?12fb","webpack://radarr/./frontend/src/Components/Page/Header/PageHeaderActionsMenu.css?e948","webpack://radarr/./frontend/src/Components/Page/Header/PageHeaderActionsMenu.tsx","webpack://radarr/./frontend/src/Components/Page/Header/PageHeader.css?5407","webpack://radarr/./frontend/src/Components/Page/Header/PageHeader.js","webpack://radarr/./frontend/src/Components/Page/Sidebar/PageSidebarStatus.js","webpack://radarr/./frontend/src/Activity/Queue/Status/createQueueStatusSelector.ts","webpack://radarr/./frontend/src/Components/Scroller/OverlayScroller.css?fe8f","webpack://radarr/./frontend/src/Components/Scroller/OverlayScroller.tsx","webpack://radarr/./frontend/src/System/Status/Health/createHealthSelector.ts","webpack://radarr/./frontend/src/Components/Page/Sidebar/Messages/Message.css?318c","webpack://radarr/./frontend/src/Components/Page/Sidebar/Messages/Message.js","webpack://radarr/./frontend/src/Components/Page/Sidebar/Messages/MessageConnector.js","webpack://radarr/./frontend/src/Components/Page/Sidebar/Messages/Messages.js","webpack://radarr/./frontend/src/Components/Page/Sidebar/Messages/MessagesConnector.js","webpack://radarr/./frontend/src/Components/Page/Sidebar/Messages/Messages.css?2ae4","webpack://radarr/./frontend/src/Components/Page/Sidebar/PageSidebarItem.js","webpack://radarr/./frontend/src/Components/Page/Sidebar/PageSidebarItem.css?6422","webpack://radarr/./frontend/src/Components/Page/Sidebar/PageSidebar.js","webpack://radarr/./frontend/src/Activity/Queue/Status/QueueStatus.tsx","webpack://radarr/./frontend/src/System/Status/Health/HealthStatus.tsx","webpack://radarr/./frontend/src/Components/Page/Sidebar/PageSidebar.css?67e2","webpack://radarr/./frontend/src/Components/Page/Page.js","webpack://radarr/./frontend/src/Components/Page/Page.css?7f4f","webpack://radarr/./frontend/src/Components/Page/PageConnector.js","webpack://radarr/./frontend/src/Styles/Themes/index.js","webpack://radarr/./frontend/src/App/ApplyTheme.tsx","webpack://radarr/./frontend/src/Utilities/Table/areAllSelected.js","webpack://radarr/./frontend/src/Utilities/Table/selectAll.js","webpack://radarr/./frontend/src/Utilities/Table/toggleSelected.js","webpack://radarr/./frontend/src/Utilities/Table/getToggledRange.js","webpack://radarr/./frontend/src/Helpers/Hooks/useSelectState.tsx","webpack://radarr/./frontend/src/App/SelectContext.tsx","webpack://radarr/./frontend/src/Components/Menu/SelectedMenuItem.js","webpack://radarr/./frontend/src/Components/Menu/SelectedMenuItem.css?9211","webpack://radarr/./frontend/src/Components/Menu/FilterMenuItem.js","webpack://radarr/./frontend/src/Components/Menu/FilterMenuContent.js","webpack://radarr/./frontend/src/Components/Menu/ToolbarMenuButton.js","webpack://radarr/./frontend/src/Components/Menu/ToolbarMenuButton.css?f61a","webpack://radarr/./frontend/src/Components/Menu/FilterMenu.js","webpack://radarr/./frontend/src/Components/Menu/FilterMenu.css?cbc7","webpack://radarr/./frontend/src/Components/Page/PageContentBody.css?9c9d","webpack://radarr/./frontend/src/Components/Page/PageContentBody.tsx","webpack://radarr/./frontend/src/Components/Page/PageContentError.js","webpack://radarr/./frontend/src/Components/Page/PageContentError.css?8924","webpack://radarr/./frontend/src/Components/Page/PageContent.js","webpack://radarr/./frontend/src/Components/Page/PageContent.css?5ee9","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbar.js","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbar.css?e99d","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbarButton.tsx","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbarButton.css?e97f","webpack://radarr/./frontend/src/Components/SpinnerIcon.tsx","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbarOverflowMenuItem.tsx","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbarOverflowMenuItem.css?b883","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbarSection.css?8a51","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbarSection.js","webpack://radarr/./frontend/src/Components/Form/SelectInput.js","webpack://radarr/./frontend/src/Components/Form/SelectInput.css?6dfb","webpack://radarr/./frontend/src/Components/Table/TablePager.css?b436","webpack://radarr/./frontend/src/Components/Table/TablePager.js","webpack://radarr/./frontend/src/Components/Table/usePaging.ts","webpack://radarr/./frontend/src/Helpers/Hooks/useCurrentPage.ts","webpack://radarr/./frontend/src/Store/Selectors/createClientSideCollectionSelector.js","webpack://radarr/./frontend/src/Store/Selectors/createCommandsSelector.ts","webpack://radarr/./frontend/src/Store/Selectors/createCommandSelector.ts","webpack://radarr/./frontend/src/Store/Selectors/createCommandExecutingSelector.ts","webpack://radarr/./frontend/src/Utilities/Table/getSelectedIds.ts","webpack://radarr/./frontend/src/Utilities/Number/convertToBytes.js","webpack://radarr/./frontend/src/Components/Filter/Builder/FilterBuilderRowValueTag.js","webpack://radarr/./frontend/src/Components/Filter/Builder/FilterBuilderRowValueTag.css?8343","webpack://radarr/./frontend/src/Components/Filter/Builder/FilterBuilderRowValue.js","webpack://radarr/./frontend/src/Components/Filter/Builder/BoolFilterBuilderRowValue.js","webpack://radarr/./frontend/src/Utilities/String/isString.js","webpack://radarr/./frontend/src/Components/Filter/Builder/DateFilterBuilderRowValue.css?3b11","webpack://radarr/./frontend/src/Components/Filter/Builder/DateFilterBuilderRowValue.js","webpack://radarr/./frontend/src/Components/Filter/Builder/FilterBuilderRowValueConnector.js","webpack://radarr/./frontend/src/Components/Filter/Builder/HistoryEventTypeFilterBuilderRowValue.tsx","webpack://radarr/./frontend/src/Store/Selectors/createImportListSelector.js","webpack://radarr/./frontend/src/Components/Filter/Builder/ImportListFilterBuilderRowValueConnector.js","webpack://radarr/./frontend/src/Components/Filter/Builder/IndexerFilterBuilderRowValueConnector.js","webpack://radarr/./frontend/src/Store/Selectors/createLanguagesSelector.ts","webpack://radarr/./frontend/src/Components/Filter/Builder/LanguageFilterBuilderRowValue.tsx","webpack://radarr/./frontend/src/Components/Filter/Builder/MinimumAvailabilityFilterBuilderRowValue.js","webpack://radarr/./frontend/src/Components/Filter/Builder/MovieFilterBuilderRowValue.tsx","webpack://radarr/./frontend/src/Components/Filter/Builder/ProtocolFilterBuilderRowValue.js","webpack://radarr/./frontend/src/Utilities/Quality/getQualities.js","webpack://radarr/./frontend/src/Components/Filter/Builder/QualityFilterBuilderRowValueConnector.js","webpack://radarr/./frontend/src/Components/Filter/Builder/QualityProfileFilterBuilderRowValue.tsx","webpack://radarr/./frontend/src/Components/Filter/Builder/QueueStatusFilterBuilderRowValue.tsx","webpack://radarr/./frontend/src/Components/Filter/Builder/ReleaseStatusFilterBuilderRowValue.js","webpack://radarr/./frontend/src/Components/Filter/Builder/TagFilterBuilderRowValueConnector.js","webpack://radarr/./frontend/src/Components/Filter/Builder/FilterBuilderRow.css?a023","webpack://radarr/./frontend/src/Components/Filter/Builder/FilterBuilderRow.js","webpack://radarr/./frontend/src/Components/Filter/Builder/FilterBuilderModalContent.css?3225","webpack://radarr/./frontend/src/Components/Filter/Builder/FilterBuilderModalContent.js","webpack://radarr/./frontend/src/Components/Filter/Builder/FilterBuilderModalContentConnector.js","webpack://radarr/./frontend/src/Components/Link/SpinnerIconButton.js","webpack://radarr/./frontend/src/Components/Filter/CustomFilters/CustomFilter.js","webpack://radarr/./frontend/src/Components/Filter/CustomFilters/CustomFilter.css?8b9b","webpack://radarr/./frontend/src/Components/Filter/CustomFilters/CustomFiltersModalContentConnector.js","webpack://radarr/./frontend/src/Components/Filter/CustomFilters/CustomFiltersModalContent.js","webpack://radarr/./frontend/src/Components/Filter/CustomFilters/CustomFiltersModalContent.css?9e4e","webpack://radarr/./frontend/src/Components/Filter/FilterModal.js","webpack://radarr/./frontend/src/Activity/Blocklist/BlocklistFilterModal.tsx","webpack://radarr/./frontend/src/Store/Selectors/createUISettingsSelector.ts","webpack://radarr/./frontend/src/Utilities/Date/formatTime.js","webpack://radarr/./frontend/src/Utilities/Date/isToday.js","webpack://radarr/./frontend/src/Utilities/Date/isTomorrow.js","webpack://radarr/./frontend/src/Utilities/Date/isYesterday.js","webpack://radarr/./frontend/src/Utilities/Date/formatDateTime.js","webpack://radarr/./frontend/src/Utilities/Date/getRelativeDate.ts","webpack://radarr/./frontend/src/Utilities/Date/isInNextWeek.js","webpack://radarr/./frontend/src/Components/Table/Cells/RelativeDateCell.css?3599","webpack://radarr/./frontend/src/Components/Table/Cells/RelativeDateCell.tsx","webpack://radarr/./frontend/src/Components/Table/Cells/TableSelectCell.js","webpack://radarr/./frontend/src/Components/Table/Cells/TableSelectCell.css?f045","webpack://radarr/./frontend/src/Movie/MovieFormats.tsx","webpack://radarr/./frontend/src/Components/Tooltip/Tooltip.css?eebe","webpack://radarr/./frontend/src/Components/Tooltip/Tooltip.tsx","webpack://radarr/./frontend/src/Components/Tooltip/Popover.tsx","webpack://radarr/./frontend/src/Components/Tooltip/Popover.css?ac94","webpack://radarr/./frontend/src/Movie/MovieLanguages.tsx","webpack://radarr/./frontend/src/Movie/MovieQuality.tsx","webpack://radarr/./frontend/src/Movie/MovieTitleLink.tsx","webpack://radarr/./frontend/src/Movie/useMovie.ts","webpack://radarr/./frontend/src/Components/DescriptionList/DescriptionList.css?c9f5","webpack://radarr/./frontend/src/Components/DescriptionList/DescriptionList.tsx","webpack://radarr/./frontend/src/Components/DescriptionList/DescriptionListItemDescription.css?e688","webpack://radarr/./frontend/src/Components/DescriptionList/DescriptionListItemDescription.tsx","webpack://radarr/./frontend/src/Components/DescriptionList/DescriptionListItemTitle.css?f80f","webpack://radarr/./frontend/src/Components/DescriptionList/DescriptionListItemTitle.tsx","webpack://radarr/./frontend/src/Components/DescriptionList/DescriptionListItem.tsx","webpack://radarr/./frontend/src/Activity/Blocklist/BlocklistDetailsModal.tsx","webpack://radarr/./frontend/src/Activity/Blocklist/BlocklistRow.tsx","webpack://radarr/./frontend/src/Activity/Blocklist/BlocklistRow.css?3a96","webpack://radarr/./frontend/src/Activity/Blocklist/Blocklist.tsx","webpack://radarr/./frontend/src/Movie/createMoviesFetchingSelector.ts","webpack://radarr/./frontend/src/Activity/History/HistoryFilterModal.tsx","webpack://radarr/./frontend/src/Utilities/Number/formatCustomFormatScore.ts","webpack://radarr/./frontend/src/Utilities/Number/formatAge.js","webpack://radarr/./frontend/src/Activity/History/Details/HistoryDetails.css?7532","webpack://radarr/./frontend/src/Activity/History/Details/HistoryDetails.tsx","webpack://radarr/./frontend/src/Activity/History/Details/HistoryDetailsModal.tsx","webpack://radarr/./frontend/src/Activity/History/Details/HistoryDetailsModal.css?88fa","webpack://radarr/./frontend/src/Activity/History/HistoryEventTypeCell.tsx","webpack://radarr/./frontend/src/Activity/History/HistoryEventTypeCell.css?a0df","webpack://radarr/./frontend/src/Activity/History/HistoryRow.tsx","webpack://radarr/./frontend/src/Activity/History/HistoryRow.css?d814","webpack://radarr/./frontend/src/Activity/History/History.tsx","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js","webpack://radarr/./frontend/src/Components/Page/Toolbar/PageToolbarSeparator.css?ffc7","webpack://radarr/./frontend/src/Activity/Queue/QueueFilterModal.tsx","webpack://radarr/./frontend/src/Activity/Queue/QueueOptions.tsx","webpack://radarr/./frontend/src/Activity/Queue/ProtocolLabel.css?da59","webpack://radarr/./frontend/src/Activity/Queue/ProtocolLabel.tsx","webpack://radarr/./frontend/src/Components/ProgressBar.css?9237","webpack://radarr/./frontend/src/Components/ProgressBar.tsx","webpack://radarr/./frontend/src/InteractiveImport/Folder/FavoriteFolderRow.tsx","webpack://radarr/./frontend/src/InteractiveImport/Folder/FavoriteFolderRow.css?cc33","webpack://radarr/./frontend/src/InteractiveImport/Folder/RecentFolderRow.tsx","webpack://radarr/./frontend/src/InteractiveImport/Folder/RecentFolderRow.css?939d","webpack://radarr/./frontend/src/InteractiveImport/Folder/InteractiveImportSelectFolderModalContent.css?cb17","webpack://radarr/./frontend/src/InteractiveImport/Folder/InteractiveImportSelectFolderModalContent.tsx","webpack://radarr/./frontend/src/InteractiveImport/IndexerFlags/SelectIndexerFlagsModalContent.tsx","webpack://radarr/./frontend/src/InteractiveImport/IndexerFlags/SelectIndexerFlagsModalContent.css?922a","webpack://radarr/./frontend/src/InteractiveImport/IndexerFlags/SelectIndexerFlagsModal.tsx","webpack://radarr/./frontend/src/InteractiveImport/Language/SelectLanguageModalContent.tsx","webpack://radarr/./frontend/src/InteractiveImport/Language/SelectLanguageModalContent.css?a9d6","webpack://radarr/./frontend/src/InteractiveImport/Language/SelectLanguageModal.tsx","webpack://radarr/./frontend/src/Components/Table/VirtualTableRow.js","webpack://radarr/./frontend/src/Components/Table/VirtualTableRow.css?847b","webpack://radarr/./frontend/src/Components/Table/VirtualTableRowButton.js","webpack://radarr/./frontend/src/Components/Table/VirtualTableRowButton.css?f5d3","webpack://radarr/./frontend/src/Components/Table/VirtualTableHeader.js","webpack://radarr/./frontend/src/Components/Table/VirtualTableHeader.css?efa4","webpack://radarr/./frontend/src/Components/Table/VirtualTableHeaderCell.js","webpack://radarr/./frontend/src/Components/Table/VirtualTableHeaderCell.css?d517","webpack://radarr/./frontend/src/InteractiveImport/Movie/SelectMovieModalTableHeader.css?e3f0","webpack://radarr/./frontend/src/InteractiveImport/Movie/SelectMovieModalTableHeader.tsx","webpack://radarr/./frontend/src/Components/Table/Cells/VirtualTableRowCell.js","webpack://radarr/./frontend/src/Components/Table/Cells/VirtualTableRowCell.css?a8aa","webpack://radarr/./frontend/src/InteractiveImport/Movie/SelectMovieRow.tsx","webpack://radarr/./frontend/src/InteractiveImport/Movie/SelectMovieRow.css?4d7f","webpack://radarr/./frontend/src/InteractiveImport/Movie/SelectMovieModalContent.tsx","webpack://radarr/./frontend/src/InteractiveImport/Movie/SelectMovieModalContent.css?0786","webpack://radarr/./frontend/src/InteractiveImport/Movie/SelectMovieModal.tsx","webpack://radarr/./frontend/src/InteractiveImport/Quality/SelectQualityModalContent.tsx","webpack://radarr/./frontend/src/InteractiveImport/Quality/SelectQualityModal.tsx","webpack://radarr/./frontend/src/InteractiveImport/ReleaseGroup/SelectReleaseGroupModalContent.tsx","webpack://radarr/./frontend/src/InteractiveImport/ReleaseGroup/SelectReleaseGroupModalContent.css?77fc","webpack://radarr/./frontend/src/InteractiveImport/ReleaseGroup/SelectReleaseGroupModal.tsx","webpack://radarr/./frontend/src/Components/Table/Cells/TableRowCellButton.css?6d83","webpack://radarr/./frontend/src/Components/Table/Cells/TableRowCellButton.tsx","webpack://radarr/./frontend/src/Store/Selectors/createIndexerFlagsSelector.ts","webpack://radarr/./frontend/src/Movie/IndexerFlags.tsx","webpack://radarr/./frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.tsx","webpack://radarr/./frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.css?44e1","webpack://radarr/./frontend/src/InteractiveImport/Interactive/InteractiveImportRow.css?3fcf","webpack://radarr/./frontend/src/InteractiveImport/Interactive/InteractiveImportRow.tsx","webpack://radarr/./frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.tsx","webpack://radarr/./frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.css?5e76","webpack://radarr/./frontend/src/InteractiveImport/InteractiveImportModal.tsx","webpack://radarr/./frontend/src/Activity/Queue/QueueStatus.tsx","webpack://radarr/./frontend/src/Activity/Queue/QueueStatus.css?c921","webpack://radarr/./frontend/src/Activity/Queue/QueueStatusCell.tsx","webpack://radarr/./frontend/src/Activity/Queue/QueueStatusCell.css?f52a","webpack://radarr/./frontend/src/Activity/Queue/RemoveQueueItemModal.tsx","webpack://radarr/./frontend/src/Activity/Queue/RemoveQueueItemModal.css?585d","webpack://radarr/./frontend/src/Utilities/Date/formatTimeSpan.js","webpack://radarr/./frontend/src/Activity/Queue/TimeleftCell.css?164d","webpack://radarr/./frontend/src/Activity/Queue/TimeleftCell.tsx","webpack://radarr/./frontend/src/Activity/Queue/QueueRow.tsx","webpack://radarr/./frontend/src/Activity/Queue/QueueRow.css?3757","webpack://radarr/./frontend/src/Activity/Queue/Queue.tsx","webpack://radarr/./frontend/src/Utilities/Object/hasDifferentItems.js","webpack://radarr/./frontend/src/Utilities/Object/selectUniqueIds.ts","webpack://radarr/./frontend/src/Store/Selectors/createExistingMovieSelector.ts","webpack://radarr/./frontend/src/Components/ImdbRating.tsx","webpack://radarr/./frontend/src/Components/ImdbRating.css?74ec","webpack://radarr/./frontend/src/Components/TmdbRating.tsx","webpack://radarr/./frontend/src/Components/TmdbRating.css?d075","webpack://radarr/./frontend/src/Movie/Details/MovieDetailsLinks.css?1370","webpack://radarr/./frontend/src/Movie/Details/MovieDetailsLinks.tsx","webpack://radarr/./frontend/src/Store/Selectors/createQueueItemSelector.ts","webpack://radarr/./frontend/src/Utilities/String/firstCharToUpper.js","webpack://radarr/./frontend/src/Movie/Details/MovieStatusLabel.css?2756","webpack://radarr/./frontend/src/Movie/Details/MovieStatusLabel.tsx","webpack://radarr/./frontend/src/Utilities/Movie/getQueueStatusText.js","webpack://radarr/./frontend/src/Utilities/Movie/getProgressBarKind.ts","webpack://radarr/./frontend/src/Movie/Index/ProgressBar/MovieIndexProgressBar.tsx","webpack://radarr/./frontend/src/Movie/Index/createMovieQueueDetailsSelector.ts","webpack://radarr/./frontend/src/Movie/Index/ProgressBar/MovieIndexProgressBar.css?2ab6","webpack://radarr/./frontend/src/Movie/MovieGenres.tsx","webpack://radarr/./frontend/src/Utilities/Date/formatRuntime.ts","webpack://radarr/./frontend/src/AddMovie/MovieMinimumAvailabilityPopoverContent.tsx","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovieModalContent.css?2988","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovieModalContent.js","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovieModalContentConnector.js","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovieModal.js","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovieSearchResult.js","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovieSearchResult.css?7e50","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovieSearchResultConnector.js","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovie.css?c1a2","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovie.js","webpack://radarr/./frontend/src/AddMovie/AddNewMovie/AddNewMovieConnector.js","webpack://radarr/./frontend/src/Components/Page/PageContentFooter.js","webpack://radarr/./frontend/src/Components/Page/PageContentFooter.css?e97e","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieFooter.css?ea40","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieFooter.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieFooterConnector.js","webpack://radarr/./frontend/src/Utilities/Object/hasDifferentItemsOrOrder.js","webpack://radarr/./frontend/src/Components/Table/VirtualTable.js","webpack://radarr/./frontend/src/Components/Table/VirtualTable.css?fa1e","webpack://radarr/./frontend/src/Components/Table/VirtualTableSelectAllHeaderCell.js","webpack://radarr/./frontend/src/Components/Table/VirtualTableSelectAllHeaderCell.css?a203","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieHeader.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieHeader.css?9007","webpack://radarr/./frontend/src/Components/Table/Cells/VirtualTableSelectCell.js","webpack://radarr/./frontend/src/Components/Table/Cells/VirtualTableSelectCell.css?ded4","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieTitle.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieTitle.css?2a0c","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSearchResult.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSearchResult.css?3b94","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSearchResultConnector.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSelectMovie.css?98be","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSelectMovie.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSelectMovieConnector.js","webpack://radarr/./frontend/src/Store/Selectors/createImportMovieItemSelector.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieRow.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieRow.css?986d","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieRowConnector.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieTable.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieTableConnector.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/Import/ImportMovieConnector.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieRootFolderRow.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieRootFolderRow.css?6132","webpack://radarr/./frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieRootFolderRowConnector.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolder.css?2909","webpack://radarr/./frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolder.js","webpack://radarr/./frontend/src/AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolderConnector.js","webpack://radarr/./frontend/src/Utilities/getPathWithUrlBase.js","webpack://radarr/./frontend/src/Components/Router/Switch.tsx","webpack://radarr/./frontend/src/AddMovie/ImportMovie/ImportMovies.js","webpack://radarr/./frontend/src/Components/withCurrentPage.js","webpack://radarr/./frontend/src/Movie/NoMovie.css?d302","webpack://radarr/./frontend/src/Movie/NoMovie.tsx","webpack://radarr/./frontend/src/Store/Selectors/createMovieFileSelector.ts","webpack://radarr/./frontend/src/Store/Selectors/createMovieSelector.js","webpack://radarr/./frontend/src/Activity/Queue/QueueDetails.tsx","webpack://radarr/./frontend/src/Activity/Queue/QueueDetails.css?cc63","webpack://radarr/./frontend/src/Components/CircularProgressBar.css?2145","webpack://radarr/./frontend/src/Components/CircularProgressBar.tsx","webpack://radarr/./frontend/src/Calendar/Events/CalendarEventQueueDetails.js","webpack://radarr/./frontend/src/Calendar/getStatusStyle.js","webpack://radarr/./frontend/src/Calendar/Agenda/AgendaEvent.css?881d","webpack://radarr/./frontend/src/Calendar/Agenda/AgendaEvent.js","webpack://radarr/./frontend/src/Calendar/Agenda/AgendaEventConnector.js","webpack://radarr/./frontend/src/Calendar/Agenda/Agenda.js","webpack://radarr/./frontend/src/Calendar/Agenda/AgendaConnector.js","webpack://radarr/./frontend/src/Calendar/Agenda/Agenda.css?ea0c","webpack://radarr/./frontend/src/Calendar/Events/CalendarEvent.css?0dde","webpack://radarr/./frontend/src/Calendar/Events/CalendarEvent.js","webpack://radarr/./frontend/src/Calendar/Events/CalendarEventConnector.js","webpack://radarr/./frontend/src/Calendar/Day/CalendarDay.tsx","webpack://radarr/./frontend/src/Calendar/Day/CalendarDay.css?cd58","webpack://radarr/./frontend/src/Calendar/Day/CalendarDayConnector.js","webpack://radarr/./frontend/src/Calendar/Day/CalendarDays.css?7bf6","webpack://radarr/./frontend/src/Calendar/Day/CalendarDays.js","webpack://radarr/./frontend/src/Calendar/Day/CalendarDaysConnector.js","webpack://radarr/./frontend/src/Calendar/Day/DayOfWeek.js","webpack://radarr/./frontend/src/Calendar/Day/DayOfWeek.css?5eb3","webpack://radarr/./frontend/src/Calendar/Day/DaysOfWeek.js","webpack://radarr/./frontend/src/Calendar/Day/DaysOfWeek.css?5188","webpack://radarr/./frontend/src/Calendar/Day/DaysOfWeekConnector.js","webpack://radarr/./frontend/src/Components/Menu/ViewMenuItem.js","webpack://radarr/./frontend/src/Calendar/Header/CalendarHeaderViewButton.js","webpack://radarr/./frontend/src/Calendar/Header/CalendarHeader.css?2faa","webpack://radarr/./frontend/src/Calendar/Header/CalendarHeader.js","webpack://radarr/./frontend/src/Calendar/Header/CalendarHeaderConnector.js","webpack://radarr/./frontend/src/Calendar/Calendar.css?b3dd","webpack://radarr/./frontend/src/Calendar/Calendar.js","webpack://radarr/./frontend/src/Calendar/CalendarConnector.js","webpack://radarr/./frontend/src/Calendar/CalendarFilterModal.tsx","webpack://radarr/./frontend/src/Calendar/iCal/CalendarLinkModalContent.js","webpack://radarr/./frontend/src/Calendar/iCal/CalendarLinkModalContentConnector.js","webpack://radarr/./frontend/src/Calendar/iCal/CalendarLinkModal.js","webpack://radarr/./frontend/src/Calendar/Legend/LegendIconItem.js","webpack://radarr/./frontend/src/Calendar/Legend/LegendIconItem.css?0574","webpack://radarr/./frontend/src/Calendar/Legend/LegendItem.css?1211","webpack://radarr/./frontend/src/Calendar/Legend/LegendItem.js","webpack://radarr/./frontend/src/Calendar/Legend/LegendConnector.js","webpack://radarr/./frontend/src/Calendar/Legend/Legend.js","webpack://radarr/./frontend/src/Calendar/Legend/Legend.css?dfa4","webpack://radarr/./frontend/src/Settings/AdvancedSettingsButton.js","webpack://radarr/./frontend/src/Settings/AdvancedSettingsButton.css?b25a","webpack://radarr/./frontend/src/Settings/PendingChangesModal.js","webpack://radarr/./frontend/src/Settings/SettingsToolbar.js","webpack://radarr/./frontend/src/Settings/SettingsToolbarConnector.js","webpack://radarr/./frontend/src/Settings/UI/UISettings.js","webpack://radarr/./frontend/src/Calendar/Options/CalendarOptionsModalContent.js","webpack://radarr/./frontend/src/Calendar/Options/CalendarOptionsModalContentConnector.js","webpack://radarr/./frontend/src/Calendar/Options/CalendarOptionsModal.js","webpack://radarr/./frontend/src/Calendar/CalendarPage.js","webpack://radarr/./frontend/src/Calendar/CalendarPage.css?0a83","webpack://radarr/./frontend/src/Calendar/CalendarPageConnector.js","webpack://radarr/./frontend/src/Store/Selectors/createMovieCountSelector.ts","webpack://radarr/./frontend/src/Store/scrollPositions.ts","webpack://radarr/./frontend/src/Components/withScrollPosition.tsx","webpack://radarr/./frontend/src/Store/Selectors/createCollectionClientSideCollectionItemsSelector.js","webpack://radarr/./frontend/src/Components/Page/PageJumpBarItem.js","webpack://radarr/./frontend/src/Components/Page/PageJumpBarItem.css?8ed2","webpack://radarr/./frontend/src/Components/Page/PageJumpBar.js","webpack://radarr/./frontend/src/Components/Page/PageJumpBar.css?9f25","webpack://radarr/./frontend/src/Movie/Index/MovieIndex.css?debb","webpack://radarr/./frontend/src/Collection/CollectionFooterLabel.js","webpack://radarr/./frontend/src/Collection/CollectionFooterLabel.css?8749","webpack://radarr/./frontend/src/Collection/CollectionFooter.css?1a03","webpack://radarr/./frontend/src/Collection/CollectionFooter.js","webpack://radarr/./frontend/src/Collection/CollectionFilterModalConnector.js","webpack://radarr/./frontend/src/Collection/Menus/CollectionFilterMenu.js","webpack://radarr/./frontend/src/Components/Menu/SortMenu.js","webpack://radarr/./frontend/src/Components/Menu/SortMenuItem.js","webpack://radarr/./frontend/src/Collection/Menus/CollectionSortMenu.js","webpack://radarr/./frontend/src/Collection/NoCollection.css?3e96","webpack://radarr/./frontend/src/Collection/NoCollection.js","webpack://radarr/./frontend/src/Store/Selectors/createCollectionSelector.ts","webpack://radarr/./frontend/src/Collection/CollectionItemConnector.js","webpack://radarr/./frontend/src/Utilities/Array/getIndexOfFirstCharacter.js","webpack://radarr/./frontend/src/Collection/Edit/EditCollectionModalContent.css?e8f9","webpack://radarr/./frontend/src/Collection/Edit/EditCollectionModalContent.js","webpack://radarr/./frontend/src/Collection/Edit/EditCollectionModalContentConnector.js","webpack://radarr/./frontend/src/Collection/Edit/EditCollectionModal.js","webpack://radarr/./frontend/src/Collection/Edit/EditCollectionModalConnector.js","webpack://radarr/./frontend/src/Components/MonitorToggleButton.css?a4b8","webpack://radarr/./frontend/src/Components/MonitorToggleButton.tsx","webpack://radarr/./frontend/src/Store/Selectors/createQualityProfileSelector.ts","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileName.tsx","webpack://radarr/./frontend/src/Store/Selectors/createCollectionExistingMovieSelector.js","webpack://radarr/./frontend/src/Movie/MoveMovie/MoveMovieModal.tsx","webpack://radarr/./frontend/src/Movie/MoveMovie/MoveMovieModal.css?8919","webpack://radarr/./frontend/src/Movie/Edit/EditMovieModalContent.tsx","webpack://radarr/./frontend/src/Movie/Edit/EditMovieModalContent.css?8123","webpack://radarr/./frontend/src/Movie/Edit/EditMovieModal.tsx","webpack://radarr/./frontend/src/Collection/AddNewCollectionMovieModalContent.css?bba1","webpack://radarr/./frontend/src/Collection/AddNewCollectionMovieModalContent.js","webpack://radarr/./frontend/src/Collection/AddNewCollectionMovieModalContentConnector.js","webpack://radarr/./frontend/src/Collection/AddNewCollectionMovieModal.js","webpack://radarr/./frontend/src/Collection/Overview/CollectionMovie.css?7ecb","webpack://radarr/./frontend/src/Collection/Overview/CollectionMovie.js","webpack://radarr/./frontend/src/Collection/Overview/CollectionMovieConnector.js","webpack://radarr/./frontend/src/Collection/Overview/CollectionMovieLabel.css?6a54","webpack://radarr/./frontend/src/Collection/Overview/CollectionMovieLabel.js","webpack://radarr/./frontend/src/Collection/Overview/CollectionMovieLabelConnector.js","webpack://radarr/./frontend/src/Collection/Overview/CollectionOverview.css?31c4","webpack://radarr/./frontend/src/Collection/Overview/CollectionOverview.js","webpack://radarr/./frontend/src/Collection/Overview/CollectionOverviewConnector.js","webpack://radarr/./frontend/src/Collection/Overview/CollectionOverviews.js","webpack://radarr/./frontend/src/Collection/Overview/CollectionOverviews.css?e9eb","webpack://radarr/./frontend/src/Collection/Overview/CollectionOverviewsConnector.js","webpack://radarr/./frontend/src/Collection/Overview/Options/CollectionOverviewOptionsModalContent.js","webpack://radarr/./frontend/src/Collection/Overview/Options/CollectionOverviewOptionsModalContentConnector.js","webpack://radarr/./frontend/src/Collection/Overview/Options/CollectionOverviewOptionsModal.js","webpack://radarr/./frontend/src/Collection/Collection.js","webpack://radarr/./frontend/src/Collection/CollectionConnector.js","webpack://radarr/./frontend/src/Components/NotFound.tsx","webpack://radarr/./frontend/src/Components/NotFound.css?6b94","webpack://radarr/./frontend/src/DiscoverMovie/DiscoverMovieFooterLabel.js","webpack://radarr/./frontend/src/DiscoverMovie/DiscoverMovieFooterLabel.css?dff9","webpack://radarr/./frontend/src/DiscoverMovie/Exclusion/ExcludeMovieModalContent.js","webpack://radarr/./frontend/src/DiscoverMovie/Exclusion/ExcludeMovieModalContent.css?c1fc","webpack://radarr/./frontend/src/DiscoverMovie/Exclusion/ExcludeMovieModalContentConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Exclusion/ExcludeMovieModal.js","webpack://radarr/./frontend/src/DiscoverMovie/DiscoverMovieFooter.css?73e4","webpack://radarr/./frontend/src/DiscoverMovie/DiscoverMovieFooter.js","webpack://radarr/./frontend/src/DiscoverMovie/DiscoverMovieFooterConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/DiscoverMovieFilterModalConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Menus/DiscoverMovieFilterMenu.js","webpack://radarr/./frontend/src/DiscoverMovie/Menus/DiscoverMovieSortMenu.js","webpack://radarr/./frontend/src/Components/Menu/ViewMenu.js","webpack://radarr/./frontend/src/DiscoverMovie/Menus/DiscoverMovieViewMenu.js","webpack://radarr/./frontend/src/DiscoverMovie/NoDiscoverMovie.css?d770","webpack://radarr/./frontend/src/DiscoverMovie/NoDiscoverMovie.js","webpack://radarr/./frontend/src/DiscoverMovie/DiscoverMovieItemConnector.js","webpack://radarr/./frontend/src/Store/Selectors/createDiscoverMovieSelector.js","webpack://radarr/./frontend/src/Components/ImportListList.js","webpack://radarr/./frontend/src/Components/ImportListList.css?a6a4","webpack://radarr/./frontend/src/Components/ImportListListConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/AddNewDiscoverMovieModalContentConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/AddNewDiscoverMovieModal.js","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewInfoRow.tsx","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewInfoRow.css?c34c","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewInfo.js","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewInfo.css?86af","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverview.css?69f5","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverview.js","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviews.js","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviews.css?4732","webpack://radarr/./frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewsConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Overview/Options/DiscoverMovieOverviewOptionsModalContent.js","webpack://radarr/./frontend/src/DiscoverMovie/Overview/Options/DiscoverMovieOverviewOptionsModalContentConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Overview/Options/DiscoverMovieOverviewOptionsModal.js","webpack://radarr/./frontend/src/Components/RottenTomatoRating.tsx","webpack://radarr/./frontend/src/Components/RottenTomatoRating.css?8a1e","webpack://radarr/./frontend/src/Components/TraktRating.tsx","webpack://radarr/./frontend/src/Components/TraktRating.css?ef06","webpack://radarr/./frontend/src/Movie/getMovieStatusDetails.ts","webpack://radarr/./frontend/src/DiscoverMovie/Posters/DiscoverMoviePosterInfo.css?f920","webpack://radarr/./frontend/src/DiscoverMovie/Posters/DiscoverMoviePosterInfo.js","webpack://radarr/./frontend/src/DiscoverMovie/Posters/DiscoverMoviePoster.css?ed69","webpack://radarr/./frontend/src/DiscoverMovie/Posters/DiscoverMoviePoster.js","webpack://radarr/./frontend/src/DiscoverMovie/Posters/DiscoverMoviePosterConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Posters/DiscoverMoviePosters.css?ac94","webpack://radarr/./frontend/src/DiscoverMovie/Posters/DiscoverMoviePosters.js","webpack://radarr/./frontend/src/DiscoverMovie/Posters/DiscoverMoviePostersConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Posters/Options/DiscoverMoviePosterOptionsModalContent.js","webpack://radarr/./frontend/src/DiscoverMovie/Posters/Options/DiscoverMoviePosterOptionsModalContentConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Posters/Options/DiscoverMoviePosterOptionsModal.js","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieTableOptions.js","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieTableOptionsConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.css?4be6","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.js","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieHeaderConnector.js","webpack://radarr/./frontend/src/Movie/MoviePopularityIndex.tsx","webpack://radarr/./frontend/src/Movie/MoviePopularityIndex.css?e289","webpack://radarr/./frontend/src/DiscoverMovie/Table/ListMovieStatusCell.css?02f5","webpack://radarr/./frontend/src/DiscoverMovie/Table/ListMovieStatusCell.js","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieRow.css?b790","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieRow.js","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieRowConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieTable.js","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieTable.css?299b","webpack://radarr/./frontend/src/DiscoverMovie/Table/DiscoverMovieTableConnector.js","webpack://radarr/./frontend/src/DiscoverMovie/DiscoverMovie.js","webpack://radarr/./frontend/src/DiscoverMovie/DiscoverMovieConnector.js","webpack://radarr/./frontend/src/Store/Selectors/createDiscoverMovieClientSideCollectionItemsSelector.js","webpack://radarr/./frontend/src/Components/InfoLabel.css?7854","webpack://radarr/./frontend/src/Components/InfoLabel.tsx","webpack://radarr/./frontend/src/Components/Marquee.js","webpack://radarr/./frontend/src/Helpers/Hooks/useMeasure.ts","webpack://radarr/./frontend/src/Movie/Delete/DeleteMovieModalContent.tsx","webpack://radarr/./frontend/src/Movie/Delete/DeleteMovieModalContent.css?905d","webpack://radarr/./frontend/src/Movie/Delete/DeleteMovieModal.tsx","webpack://radarr/./frontend/src/Movie/History/MovieHistoryRow.tsx","webpack://radarr/./frontend/src/Movie/History/MovieHistoryRow.css?928c","webpack://radarr/./frontend/src/Movie/History/MovieHistoryModalContent.tsx","webpack://radarr/./frontend/src/Movie/History/MovieHistoryModal.tsx","webpack://radarr/./frontend/src/Movie/MovieCollectionLabel.tsx","webpack://radarr/./frontend/src/Movie/MovieCollectionLabel.css?be7a","webpack://radarr/./frontend/src/Components/Menu/PageMenuButton.js","webpack://radarr/./frontend/src/Components/Menu/PageMenuButton.css?1d84","webpack://radarr/./frontend/src/InteractiveSearch/InteractiveSearchFilterModal.tsx","webpack://radarr/./frontend/src/Store/Selectors/createEnabledDownloadClientsSelector.ts","webpack://radarr/./frontend/src/InteractiveSearch/OverrideMatch/DownloadClient/SelectDownloadClientRow.css?f910","webpack://radarr/./frontend/src/InteractiveSearch/OverrideMatch/DownloadClient/SelectDownloadClientRow.tsx","webpack://radarr/./frontend/src/InteractiveSearch/OverrideMatch/DownloadClient/SelectDownloadClientModalContent.tsx","webpack://radarr/./frontend/src/InteractiveSearch/OverrideMatch/DownloadClient/SelectDownloadClientModal.tsx","webpack://radarr/./frontend/src/InteractiveSearch/OverrideMatch/OverrideMatchData.tsx","webpack://radarr/./frontend/src/InteractiveSearch/OverrideMatch/OverrideMatchData.css?9c7e","webpack://radarr/./frontend/src/InteractiveSearch/OverrideMatch/OverrideMatchModalContent.css?7621","webpack://radarr/./frontend/src/InteractiveSearch/OverrideMatch/OverrideMatchModalContent.tsx","webpack://radarr/./frontend/src/InteractiveSearch/OverrideMatch/OverrideMatchModal.tsx","webpack://radarr/./frontend/src/InteractiveSearch/Peers.tsx","webpack://radarr/./frontend/src/InteractiveSearch/InteractiveSearchRow.css?8a5a","webpack://radarr/./frontend/src/InteractiveSearch/InteractiveSearchRow.tsx","webpack://radarr/./frontend/src/InteractiveSearch/InteractiveSearch.css?6fee","webpack://radarr/./frontend/src/InteractiveSearch/InteractiveSearch.tsx","webpack://radarr/./frontend/src/Movie/Search/MovieInteractiveSearchModalContent.tsx","webpack://radarr/./frontend/src/Movie/Search/MovieInteractiveSearchModal.tsx","webpack://radarr/./frontend/src/MovieFile/Edit/FileEditModalContent.js","webpack://radarr/./frontend/src/MovieFile/Edit/FileEditModalContentConnector.js","webpack://radarr/./frontend/src/MovieFile/Edit/FileEditModal.js","webpack://radarr/./frontend/src/Utilities/String/getLanguageName.ts","webpack://radarr/./frontend/src/MovieFile/useMovieFile.ts","webpack://radarr/./frontend/src/MovieFile/MediaInfo.tsx","webpack://radarr/./frontend/src/Utilities/Number/formatBitrate.ts","webpack://radarr/./frontend/src/MovieFile/Editor/MediaInfo.tsx","webpack://radarr/./frontend/src/Utilities/Object/getEntries.ts","webpack://radarr/./frontend/src/MovieFile/FileDetailsModal.js","webpack://radarr/./frontend/src/MovieFile/Editor/MovieFileRowCellPlaceholder.js","webpack://radarr/./frontend/src/MovieFile/Editor/MovieFileRowCellPlaceholder.css?be37","webpack://radarr/./frontend/src/MovieFile/Editor/MovieFileEditorRow.css?9016","webpack://radarr/./frontend/src/MovieFile/Editor/MovieFileEditorRow.js","webpack://radarr/./frontend/src/MovieFile/mediaInfoTypes.js","webpack://radarr/./frontend/src/MovieFile/Editor/MovieFileEditorTableContent.js","webpack://radarr/./frontend/src/MovieFile/Editor/MovieFileEditorTableContent.css?755d","webpack://radarr/./frontend/src/MovieFile/Editor/MovieFileEditorTableContentConnector.js","webpack://radarr/./frontend/src/MovieFile/Editor/MovieFileEditorTable.js","webpack://radarr/./frontend/src/MovieFile/Editor/MovieFileEditorTable.css?355e","webpack://radarr/./frontend/src/MovieFile/Extras/ExtraFileDetailsPopover.tsx","webpack://radarr/./frontend/src/MovieFile/Extras/ExtraFileRow.css?057d","webpack://radarr/./frontend/src/MovieFile/Extras/ExtraFileRow.js","webpack://radarr/./frontend/src/MovieFile/Extras/ExtraFileTableContent.js","webpack://radarr/./frontend/src/MovieFile/Extras/ExtraFileTableContent.css?9688","webpack://radarr/./frontend/src/MovieFile/Extras/ExtraFileTableContentConnector.js","webpack://radarr/./frontend/src/MovieFile/Extras/ExtraFileTable.js","webpack://radarr/./frontend/src/MovieFile/Extras/ExtraFileTable.css?618c","webpack://radarr/./frontend/src/Organize/OrganizePreviewRow.css?0c69","webpack://radarr/./frontend/src/Organize/OrganizePreviewRow.tsx","webpack://radarr/./frontend/src/Organize/OrganizePreviewModalContent.tsx","webpack://radarr/./frontend/src/Organize/OrganizePreviewModalContent.css?7712","webpack://radarr/./frontend/src/Organize/OrganizePreviewModal.tsx","webpack://radarr/./frontend/src/Store/Selectors/createMovieCreditsSelector.ts","webpack://radarr/./frontend/src/Movie/Details/Credits/MovieCreditPoster.tsx","webpack://radarr/./frontend/src/Store/Selectors/createMovieCreditImportListSelector.ts","webpack://radarr/./frontend/src/Movie/Details/Credits/MovieCreditPosters.tsx","webpack://radarr/./frontend/src/Movie/Details/Credits/MovieCreditPosters.css?8f5f","webpack://radarr/./frontend/src/Helpers/Hooks/useModalOpenState.ts","webpack://radarr/./frontend/src/Movie/MovieHeadshot.tsx","webpack://radarr/./frontend/src/Store/Selectors/createProviderSettingsSelector.js","webpack://radarr/./frontend/src/Components/Form/ProviderFieldFormGroup.js","webpack://radarr/./frontend/src/Utilities/Date/formatShortTimeSpan.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.css?1ded","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContentConnector.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/EditImportListModal.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/EditImportListModalConnector.js","webpack://radarr/./frontend/src/Movie/Details/Credits/MovieCreditPoster.css?4e88","webpack://radarr/./frontend/src/Movie/Details/Credits/Cast/MovieCastPoster.tsx","webpack://radarr/./frontend/src/Movie/Details/Credits/Cast/MovieCastPosters.tsx","webpack://radarr/./frontend/src/Movie/Details/Credits/Crew/MovieCrewPoster.tsx","webpack://radarr/./frontend/src/Movie/Details/Credits/Crew/MovieCrewPosters.tsx","webpack://radarr/./frontend/src/Utilities/Date/formatDate.js","webpack://radarr/./frontend/src/Movie/Details/MovieReleaseDates.css?52e3","webpack://radarr/./frontend/src/Movie/Details/MovieReleaseDates.tsx","webpack://radarr/./frontend/src/Movie/Details/MovieTags.tsx","webpack://radarr/./frontend/src/Tags/useTags.ts","webpack://radarr/./frontend/src/Movie/Details/Titles/MovieTitlesRow.tsx","webpack://radarr/./frontend/src/Movie/Details/Titles/MovieTitlesTable.tsx","webpack://radarr/./frontend/src/Movie/Details/Titles/MovieTitlesTable.css?37c8","webpack://radarr/./frontend/src/Movie/Details/MovieDetails.css?a549","webpack://radarr/./frontend/src/Movie/Details/MovieDetails.tsx","webpack://radarr/./frontend/src/Movie/Details/MovieDetailsPage.tsx","webpack://radarr/./frontend/src/Store/Selectors/createMovieClientSideCollectionItemsSelector.js","webpack://radarr/./frontend/src/Movie/Index/MovieIndexFilterModal.tsx","webpack://radarr/./frontend/src/Movie/Index/Menus/MovieIndexFilterMenu.tsx","webpack://radarr/./frontend/src/Movie/Index/Menus/MovieIndexSortMenu.tsx","webpack://radarr/./frontend/src/Movie/Index/Menus/MovieIndexViewMenu.tsx","webpack://radarr/./frontend/src/Movie/Index/MovieIndexFooter.css?5985","webpack://radarr/./frontend/src/Movie/Index/MovieIndexFooter.tsx","webpack://radarr/./frontend/src/Movie/Index/MovieIndexRefreshMovieButton.tsx","webpack://radarr/./frontend/src/Movie/Index/MovieIndexSearchButton.tsx","webpack://radarr/./frontend/src/Movie/Index/MovieIndexSearchMenuItem.tsx","webpack://radarr/./frontend/src/Components/TagList.js","webpack://radarr/./frontend/src/Components/TagList.css?26ae","webpack://radarr/./frontend/src/Components/TagListConnector.js","webpack://radarr/./frontend/src/Movie/Index/Select/MovieIndexPosterSelect.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/MovieIndexPosterSelect.css?900b","webpack://radarr/./frontend/src/Store/Selectors/createExecutingCommandsSelector.ts","webpack://radarr/./frontend/src/Movie/Index/createMovieIndexItemSelector.ts","webpack://radarr/./frontend/src/Store/Selectors/createMovieQualityProfileSelector.ts","webpack://radarr/./frontend/src/Movie/Index/Overview/MovieIndexOverviewInfoRow.tsx","webpack://radarr/./frontend/src/Movie/Index/Overview/MovieIndexOverviewInfoRow.css?f91f","webpack://radarr/./frontend/src/Movie/Index/Overview/MovieIndexOverviewInfo.tsx","webpack://radarr/./frontend/src/Movie/Index/Overview/MovieIndexOverviewInfo.css?4d20","webpack://radarr/./frontend/src/Movie/Index/Overview/selectOverviewOptions.ts","webpack://radarr/./frontend/src/Movie/Index/Overview/MovieIndexOverview.css?5f22","webpack://radarr/./frontend/src/Movie/Index/Overview/MovieIndexOverview.tsx","webpack://radarr/./frontend/src/Movie/Index/Overview/MovieIndexOverviews.tsx","webpack://radarr/./frontend/src/Movie/Index/Overview/Options/MovieIndexOverviewOptionsModalContent.tsx","webpack://radarr/./frontend/src/Movie/Index/Overview/Options/MovieIndexOverviewOptionsModal.tsx","webpack://radarr/./frontend/src/Movie/Index/Posters/MovieIndexPosterInfo.css?1ace","webpack://radarr/./frontend/src/Movie/Index/Posters/MovieIndexPosterInfo.tsx","webpack://radarr/./frontend/src/Movie/Index/Posters/selectPosterOptions.ts","webpack://radarr/./frontend/src/Movie/Index/Posters/MovieIndexPoster.css?69fc","webpack://radarr/./frontend/src/Movie/Index/Posters/MovieIndexPoster.tsx","webpack://radarr/./frontend/src/Movie/Index/Posters/MovieIndexPosters.tsx","webpack://radarr/./frontend/src/Movie/Index/Posters/Options/MovieIndexPosterOptionsModalContent.tsx","webpack://radarr/./frontend/src/Movie/Index/Posters/Options/MovieIndexPosterOptionsModal.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/MovieIndexSelectAllButton.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/MovieIndexSelectAllMenuItem.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/Delete/DeleteMovieModalContent.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/Delete/DeleteMovieModalContent.css?ac94","webpack://radarr/./frontend/src/Movie/Index/Select/Delete/DeleteMovieModal.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/Edit/EditMoviesModalContent.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/Edit/EditMoviesModalContent.css?14d6","webpack://radarr/./frontend/src/Movie/Index/Select/Edit/EditMoviesModal.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/Organize/OrganizeMoviesModalContent.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/Organize/OrganizeMoviesModalContent.css?6119","webpack://radarr/./frontend/src/Movie/Index/Select/Organize/OrganizeMoviesModal.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/Tags/TagsModalContent.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/Tags/TagsModalContent.css?7969","webpack://radarr/./frontend/src/Movie/Index/Select/Tags/TagsModal.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/MovieIndexSelectFooter.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/MovieIndexSelectFooter.css?8113","webpack://radarr/./frontend/src/Movie/Index/Select/MovieIndexSelectModeButton.tsx","webpack://radarr/./frontend/src/Movie/Index/Select/MovieIndexSelectModeMenuItem.tsx","webpack://radarr/./frontend/src/Movie/Index/Table/MovieStatusCell.css?483e","webpack://radarr/./frontend/src/Movie/Index/Table/MovieStatusCell.tsx","webpack://radarr/./frontend/src/Movie/Index/Table/selectTableOptions.ts","webpack://radarr/./frontend/src/Movie/Index/Table/MovieIndexRow.css?87f9","webpack://radarr/./frontend/src/Movie/Index/Table/MovieIndexRow.tsx","webpack://radarr/./frontend/src/Movie/Index/Table/MovieIndexTableOptions.tsx","webpack://radarr/./frontend/src/Movie/Index/Table/MovieIndexTableHeader.css?a4ad","webpack://radarr/./frontend/src/Movie/Index/Table/MovieIndexTableHeader.tsx","webpack://radarr/./frontend/src/Movie/Index/Table/MovieIndexTable.tsx","webpack://radarr/./frontend/src/Movie/Index/Table/MovieIndexTable.css?49ba","webpack://radarr/./frontend/src/Movie/Index/MovieIndex.tsx","webpack://radarr/./frontend/src/Parse/ParseResultItem.css?d01e","webpack://radarr/./frontend/src/Parse/ParseResultItem.tsx","webpack://radarr/./frontend/src/Parse/ParseResult.css?55c7","webpack://radarr/./frontend/src/Parse/ParseResult.tsx","webpack://radarr/./frontend/src/Parse/ParseModalContent.css?6bab","webpack://radarr/./frontend/src/Parse/ParseModalContent.tsx","webpack://radarr/./frontend/src/Parse/parseStateSelector.ts","webpack://radarr/./frontend/src/Parse/ParseModal.tsx","webpack://radarr/./frontend/src/Parse/ParseToolbarButton.tsx","webpack://radarr/./frontend/src/Components/Card.css?87c7","webpack://radarr/./frontend/src/Components/Card.tsx","webpack://radarr/./frontend/src/Components/Page/PageSectionContent.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/ImportCustomFormatModalContent.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/ImportCustomFormatModalContent.css?c618","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/ImportCustomFormatModalContentConnector.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/ImportCustomFormatModal.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/AddSpecificationPresetMenuItem.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/AddSpecificationItem.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/AddSpecificationItem.css?2d98","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/AddSpecificationModalContent.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/AddSpecificationModalContent.css?a5f7","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/AddSpecificationModalContentConnector.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/AddSpecificationModal.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.css?a8ba","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContentConnector.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModal.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalConnector.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/Specification.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Specifications/Specification.css?b0bb","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalContent.css?9389","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalContent.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalContentConnector.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModal.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalConnector.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/ExportCustomFormatModalContent.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/ExportCustomFormatModalContent.css?7dc5","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/ExportCustomFormatModalContentConnector.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/ExportCustomFormatModal.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/CustomFormat.css?017c","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/CustomFormat.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/CustomFormats.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/CustomFormats.css?7ec8","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/CustomFormatsConnector.js","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.tsx","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModalContent.css?847b","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Manage/Edit/ManageCustomFormatsEditModal.tsx","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.tsx","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalRow.css?51f8","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.tsx","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModalContent.css?d8ec","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsModal.tsx","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormats/Manage/ManageCustomFormatsToolbarButton.tsx","webpack://radarr/./frontend/src/Settings/CustomFormats/CustomFormatSettingsPage.tsx","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientPresetMenuItem.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientItem.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientItem.css?1d76","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.css?6164","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContentConnector.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModal.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContent.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContent.css?b02f","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContentConnector.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModal.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalConnector.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClient.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClient.css?385e","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClients.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClients.css?4c46","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClientsConnector.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/Edit/ManageDownloadClientsEditModalContent.tsx","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/Edit/ManageDownloadClientsEditModalContent.css?118d","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/Edit/ManageDownloadClientsEditModal.tsx","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalRow.tsx","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalRow.css?f148","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/Tags/TagsModalContent.tsx","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/Tags/TagsModalContent.css?cb6a","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/Tags/TagsModal.tsx","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.css?7bde","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModal.tsx","webpack://radarr/./frontend/src/Settings/DownloadClients/Options/DownloadClientOptions.js","webpack://radarr/./frontend/src/Settings/DownloadClients/Options/DownloadClientOptionsConnector.js","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/EditRemotePathMappingModalContent.css?455f","webpack://radarr/./frontend/src/Helpers/Props/Shapes/settingShape.js","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/EditRemotePathMappingModalContent.js","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/EditRemotePathMappingModalContentConnector.js","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/EditRemotePathMappingModal.js","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/EditRemotePathMappingModalConnector.js","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/RemotePathMapping.css?ba36","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/RemotePathMapping.js","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/RemotePathMappings.css?a71f","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/RemotePathMappings.js","webpack://radarr/./frontend/src/Settings/DownloadClients/RemotePathMappings/RemotePathMappingsConnector.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClientSettings.js","webpack://radarr/./frontend/src/Settings/DownloadClients/DownloadClientSettingsConnector.js","webpack://radarr/./frontend/src/Settings/General/AnalyticSettings.js","webpack://radarr/./frontend/src/Settings/General/BackupSettings.js","webpack://radarr/./frontend/src/Settings/General/HostSettings.js","webpack://radarr/./frontend/src/Settings/General/LoggingSettings.js","webpack://radarr/./frontend/src/Settings/General/ProxySettings.js","webpack://radarr/./frontend/src/Settings/General/UpdateSettings.js","webpack://radarr/./frontend/src/Settings/General/GeneralSettings.js","webpack://radarr/./frontend/src/Settings/General/GeneralSettingsConnector.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportListExclusions/EditImportListExclusionModalContent.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportListExclusions/EditImportListExclusionModalContent.css?8173","webpack://radarr/./frontend/src/Settings/ImportLists/ImportListExclusions/EditImportListExclusionModal.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportListExclusions/ImportListExclusionRow.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportListExclusions/ImportListExclusionRow.css?bf10","webpack://radarr/./frontend/src/Settings/ImportLists/ImportListExclusions/ImportListExclusions.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportListExclusions/ImportListExclusions.css?88ad","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/AddImportListPresetMenuItem.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/AddImportListItem.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/AddImportListItem.css?df7f","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContent.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContent.css?e517","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContentConnector.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/AddImportListModal.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/ImportList.css?2f7e","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/ImportList.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/ImportLists.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/ImportLists.css?23c1","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/ImportListsConnector.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/Edit/ManageImportListsEditModalContent.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/Edit/ManageImportListsEditModalContent.css?b5e4","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/Edit/ManageImportListsEditModal.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/ManageImportListsModalRow.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/ManageImportListsModalRow.css?4a4e","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/Tags/TagsModalContent.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/Tags/TagsModalContent.css?fb23","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/Tags/TagsModal.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/ManageImportListsModalContent.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/ManageImportListsModalContent.css?a8b7","webpack://radarr/./frontend/src/Settings/ImportLists/ImportLists/Manage/ManageImportListsModal.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/Options/ImportListOptions.tsx","webpack://radarr/./frontend/src/Settings/ImportLists/ImportListSettings.js","webpack://radarr/./frontend/src/Settings/ImportLists/ImportListSettingsConnector.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/AddIndexerPresetMenuItem.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/AddIndexerItem.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/AddIndexerItem.css?3666","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/AddIndexerModalContent.css?6ad5","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/AddIndexerModalContent.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/AddIndexerModalContentConnector.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/AddIndexerModal.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/EditIndexerModalContent.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/EditIndexerModalContent.css?512f","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/EditIndexerModalContentConnector.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/EditIndexerModal.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/EditIndexerModalConnector.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Indexer.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Indexer.css?6183","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Indexers.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Indexers.css?2b0d","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/IndexersConnector.js","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/Edit/ManageIndexersEditModalContent.tsx","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/Edit/ManageIndexersEditModalContent.css?b302","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/Edit/ManageIndexersEditModal.tsx","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/ManageIndexersModalRow.tsx","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/ManageIndexersModalRow.css?3f73","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/Tags/TagsModalContent.tsx","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/Tags/TagsModalContent.css?a227","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/Tags/TagsModal.tsx","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/ManageIndexersModalContent.tsx","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/ManageIndexersModalContent.css?7d61","webpack://radarr/./frontend/src/Settings/Indexers/Indexers/Manage/ManageIndexersModal.tsx","webpack://radarr/./frontend/src/Settings/Indexers/Options/IndexerOptions.js","webpack://radarr/./frontend/src/Settings/Indexers/Options/IndexerOptionsConnector.js","webpack://radarr/./frontend/src/Settings/Indexers/IndexerSettings.js","webpack://radarr/./frontend/src/Settings/Indexers/IndexerSettingsConnector.js","webpack://radarr/./frontend/src/RootFolder/RootFolderRow.tsx","webpack://radarr/./frontend/src/RootFolder/RootFolderRow.css?5bb7","webpack://radarr/./frontend/src/RootFolder/RootFolders.tsx","webpack://radarr/./frontend/src/Settings/MediaManagement/Naming/NamingOption.css?19bf","webpack://radarr/./frontend/src/Settings/MediaManagement/Naming/NamingOption.tsx","webpack://radarr/./frontend/src/Settings/MediaManagement/Naming/NamingModal.css?b6a0","webpack://radarr/./frontend/src/Settings/MediaManagement/Naming/NamingModal.tsx","webpack://radarr/./frontend/src/Settings/MediaManagement/Naming/Naming.css?1e3b","webpack://radarr/./frontend/src/Settings/MediaManagement/Naming/Naming.tsx","webpack://radarr/./frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.tsx","webpack://radarr/./frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.css?ed1f","webpack://radarr/./frontend/src/Settings/MediaManagement/MediaManagement.js","webpack://radarr/./frontend/src/Settings/MediaManagement/MediaManagementConnector.js","webpack://radarr/./frontend/src/Settings/Metadata/Metadata/EditMetadataModalContent.tsx","webpack://radarr/./frontend/src/Settings/Metadata/Metadata/EditMetadataModalContent.css?d5d2","webpack://radarr/./frontend/src/Settings/Metadata/Metadata/EditMetadataModal.tsx","webpack://radarr/./frontend/src/Settings/Metadata/Metadata/Metadata.css?fd41","webpack://radarr/./frontend/src/Settings/Metadata/Metadata/Metadata.tsx","webpack://radarr/./frontend/src/Settings/Metadata/Metadata/Metadatas.tsx","webpack://radarr/./frontend/src/Settings/Metadata/Metadata/Metadatas.css?a3a7","webpack://radarr/./frontend/src/Settings/Metadata/Options/MetadataOptions.js","webpack://radarr/./frontend/src/Settings/Metadata/Options/MetadataOptionsConnector.js","webpack://radarr/./frontend/src/Settings/Metadata/MetadataSettings.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationPresetMenuItem.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationItem.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationItem.css?c3eb","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.css?8d50","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationModalContentConnector.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationModal.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/NotificationEventItems.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/NotificationEventItems.css?acbf","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.css?bd9d","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModalContentConnector.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModal.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModalConnector.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/Notification.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/Notification.css?1cd3","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/Notifications.js","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/Notifications.css?8599","webpack://radarr/./frontend/src/Settings/Notifications/Notifications/NotificationsConnector.js","webpack://radarr/./frontend/src/Settings/Notifications/NotificationSettings.js","webpack://radarr/./frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js","webpack://radarr/./frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.css?0765","webpack://radarr/./frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContentConnector.js","webpack://radarr/./frontend/src/Settings/Profiles/Delay/EditDelayProfileModal.js","webpack://radarr/./frontend/src/Settings/Profiles/Delay/EditDelayProfileModalConnector.js","webpack://radarr/./frontend/src/Settings/Profiles/Delay/DelayProfile.css?eba1","webpack://radarr/./frontend/src/Settings/Profiles/Delay/DelayProfile.js","webpack://radarr/./frontend/src/Settings/Profiles/Delay/DelayProfileDragPreview.js","webpack://radarr/./frontend/src/Settings/Profiles/Delay/DelayProfileDragPreview.css?47eb","webpack://radarr/./frontend/src/Settings/Profiles/Delay/DelayProfileDragSource.css?7676","webpack://radarr/./frontend/src/Settings/Profiles/Delay/DelayProfileDragSource.js","webpack://radarr/./frontend/src/Settings/Profiles/Delay/DelayProfiles.css?3f9f","webpack://radarr/./frontend/src/Settings/Profiles/Delay/DelayProfiles.js","webpack://radarr/./frontend/src/Settings/Profiles/Delay/DelayProfilesConnector.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileFormatItem.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileFormatItem.css?ff65","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileFormatItems.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileFormatItems.css?c2ac","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItem.css?5918","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItem.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItemDragPreview.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItemDragPreview.css?7ab8","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItemGroup.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItemGroup.css?983e","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItemDragSource.css?6278","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItemDragSource.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItems.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfileItems.css?798f","webpack://radarr/./frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContent.css?4542","webpack://radarr/./frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContent.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContentConnector.js","webpack://radarr/./frontend/src/Store/Selectors/createProfileInUseSelector.ts","webpack://radarr/./frontend/src/Settings/Profiles/Quality/EditQualityProfileModal.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/EditQualityProfileModalConnector.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfile.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfile.css?fb38","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfiles.js","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfiles.css?7be5","webpack://radarr/./frontend/src/Settings/Profiles/Quality/QualityProfilesConnector.js","webpack://radarr/./frontend/src/Settings/Profiles/Release/EditReleaseProfileModalContent.css?02dd","webpack://radarr/./frontend/src/Settings/Profiles/Release/EditReleaseProfileModalContent.tsx","webpack://radarr/./frontend/src/Settings/Profiles/Release/EditReleaseProfileModal.tsx","webpack://radarr/./frontend/src/Settings/Profiles/Release/ReleaseProfileRow.css?2c16","webpack://radarr/./frontend/src/Settings/Profiles/Release/ReleaseProfileRow.tsx","webpack://radarr/./frontend/src/Settings/Profiles/Release/ReleaseProfiles.tsx","webpack://radarr/./frontend/src/Settings/Profiles/Release/ReleaseProfiles.css?cff6","webpack://radarr/./frontend/src/Settings/Profiles/Profiles.js","webpack://radarr/./frontend/src/Utilities/Number/roundNumber.js","webpack://radarr/./frontend/src/Settings/Quality/Definition/QualityDefinitionLimits.js","webpack://radarr/./frontend/src/Settings/Quality/Definition/QualityDefinition.css?6c66","webpack://radarr/./frontend/src/Settings/Quality/Definition/QualityDefinition.js","webpack://radarr/./frontend/src/Settings/Quality/Definition/QualityDefinitionConnector.js","webpack://radarr/./frontend/src/Settings/Quality/Definition/QualityDefinitions.js","webpack://radarr/./frontend/src/Settings/Quality/Definition/QualityDefinitions.css?273f","webpack://radarr/./frontend/src/Settings/Quality/Definition/QualityDefinitionsConnector.js","webpack://radarr/./frontend/src/Settings/Quality/Reset/ResetQualityDefinitionsModalContent.js","webpack://radarr/./frontend/src/Settings/Quality/Reset/ResetQualityDefinitionsModalContent.css?7d20","webpack://radarr/./frontend/src/Settings/Quality/Reset/ResetQualityDefinitionsModalContentConnector.js","webpack://radarr/./frontend/src/Settings/Quality/Reset/ResetQualityDefinitionsModal.js","webpack://radarr/./frontend/src/Settings/Quality/Quality.js","webpack://radarr/./frontend/src/Settings/Quality/QualityConnector.js","webpack://radarr/./frontend/src/Settings/Settings.css?9e51","webpack://radarr/./frontend/src/Settings/Settings.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/AddSpecificationPresetMenuItem.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/AddSpecificationItem.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/AddSpecificationItem.css?5bb0","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/AddSpecificationModalContent.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/AddSpecificationModalContent.css?a40a","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/AddSpecificationModal.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/EditSpecificationModalContent.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/EditSpecificationModalContent.css?08f8","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/EditSpecificationModal.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/Specification.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/Specifications/Specification.css?1295","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/EditAutoTaggingModalContent.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/EditAutoTaggingModalContent.css?0eaa","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/EditAutoTaggingModal.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/AutoTagging.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/AutoTagging.css?49b0","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/AutoTaggings.js","webpack://radarr/./frontend/src/Settings/Tags/AutoTagging/AutoTaggings.css?83de","webpack://radarr/./frontend/src/Store/Selectors/createTagDetailsSelector.ts","webpack://radarr/./frontend/src/Settings/Tags/Details/TagDetailsDelayProfile.js","webpack://radarr/./frontend/src/Settings/Tags/Details/TagDetailsModalContentConnector.js","webpack://radarr/./frontend/src/Settings/Tags/Details/TagDetailsModalContent.js","webpack://radarr/./frontend/src/Settings/Tags/Details/TagDetailsModalContent.css?901d","webpack://radarr/./frontend/src/Settings/Tags/Details/TagDetailsModal.js","webpack://radarr/./frontend/src/Settings/Tags/TagInUse.js","webpack://radarr/./frontend/src/Settings/Tags/Tag.js","webpack://radarr/./frontend/src/Settings/Tags/Tag.css?27ea","webpack://radarr/./frontend/src/Settings/Tags/TagConnector.js","webpack://radarr/./frontend/src/Settings/Tags/Tags.js","webpack://radarr/./frontend/src/Settings/Tags/Tags.css?a8f6","webpack://radarr/./frontend/src/Settings/Tags/TagsConnector.js","webpack://radarr/./frontend/src/Settings/Tags/TagSettings.js","webpack://radarr/./frontend/src/Settings/UI/UISettingsConnector.js","webpack://radarr/./frontend/src/System/Backup/RestoreBackupModalContent.css?0030","webpack://radarr/./frontend/src/System/Backup/RestoreBackupModalContent.js","webpack://radarr/./frontend/src/System/Backup/RestoreBackupModalContentConnector.js","webpack://radarr/./frontend/src/System/Backup/RestoreBackupModal.js","webpack://radarr/./frontend/src/System/Backup/RestoreBackupModalConnector.js","webpack://radarr/./frontend/src/System/Backup/BackupRow.js","webpack://radarr/./frontend/src/System/Backup/BackupRow.css?9a9a","webpack://radarr/./frontend/src/System/Backup/Backups.js","webpack://radarr/./frontend/src/System/Backup/BackupsConnector.js","webpack://radarr/./frontend/src/System/Events/LogsTableDetailsModal.css?a321","webpack://radarr/./frontend/src/System/Events/LogsTableDetailsModal.js","webpack://radarr/./frontend/src/System/Events/LogsTableRow.css?bec9","webpack://radarr/./frontend/src/System/Events/LogsTableRow.js","webpack://radarr/./frontend/src/System/Events/LogsTable.js","webpack://radarr/./frontend/src/System/Events/LogsTableConnector.js","webpack://radarr/./frontend/src/Utilities/String/combinePath.js","webpack://radarr/./frontend/src/System/Logs/LogsNavMenu.js","webpack://radarr/./frontend/src/System/Logs/Files/LogFilesTableRow.js","webpack://radarr/./frontend/src/System/Logs/Files/LogFilesTableRow.css?df3d","webpack://radarr/./frontend/src/System/Logs/Files/LogFiles.js","webpack://radarr/./frontend/src/System/Logs/Files/LogFilesConnector.js","webpack://radarr/./frontend/src/System/Logs/Updates/UpdateLogFilesConnector.js","webpack://radarr/./frontend/src/System/Logs/Logs.js","webpack://radarr/./frontend/src/System/Status/About/StartTime.tsx","webpack://radarr/./frontend/src/System/Status/About/About.tsx","webpack://radarr/./frontend/src/System/Status/About/About.css?c264","webpack://radarr/./frontend/src/System/Status/DiskSpace/DiskSpace.css?3f80","webpack://radarr/./frontend/src/System/Status/DiskSpace/DiskSpace.tsx","webpack://radarr/./frontend/src/System/Status/styles.css?cbdf","webpack://radarr/./frontend/src/System/Status/Donations/Donations.tsx","webpack://radarr/./frontend/src/System/Status/Health/HealthItemLink.tsx","webpack://radarr/./frontend/src/System/Status/Health/Health.tsx","webpack://radarr/./frontend/src/System/Status/Health/Health.css?bd33","webpack://radarr/./frontend/src/System/Status/MoreInfo/MoreInfo.tsx","webpack://radarr/./frontend/src/System/Status/Status.tsx","webpack://radarr/./frontend/src/System/Tasks/Queued/QueuedTaskRowNameCell.tsx","webpack://radarr/./frontend/src/Store/Selectors/createMultiMoviesSelector.ts","webpack://radarr/./frontend/src/System/Tasks/Queued/QueuedTaskRowNameCell.css?b101","webpack://radarr/./frontend/src/System/Tasks/Queued/QueuedTaskRow.tsx","webpack://radarr/./frontend/src/System/Tasks/Queued/QueuedTaskRow.css?6f48","webpack://radarr/./frontend/src/System/Tasks/Queued/QueuedTasks.tsx","webpack://radarr/./frontend/src/System/Tasks/Scheduled/ScheduledTaskRow.css?887f","webpack://radarr/./frontend/src/System/Tasks/Scheduled/ScheduledTaskRow.tsx","webpack://radarr/./frontend/src/System/Tasks/Scheduled/ScheduledTasks.tsx","webpack://radarr/./frontend/src/System/Tasks/Tasks.tsx","webpack://radarr/./frontend/src/System/Updates/Updates.css?ac42","webpack://radarr/./frontend/src/System/Updates/Updates.tsx","webpack://radarr/./frontend/src/Utilities/Filter/getFilterValue.js","webpack://radarr/./frontend/src/Utilities/Table/removeOldSelectedState.js","webpack://radarr/./frontend/src/Movie/MovieSearchCell.css?73f3","webpack://radarr/./frontend/src/Movie/MovieSearchCell.tsx","webpack://radarr/./frontend/src/Movie/MovieStatus.css?6ce3","webpack://radarr/./frontend/src/Movie/MovieStatus.tsx","webpack://radarr/./frontend/src/MovieFile/MovieFileLanguages.tsx","webpack://radarr/./frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.css?854e","webpack://radarr/./frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js","webpack://radarr/./frontend/src/Wanted/CutoffUnmet/CutoffUnmet.js","webpack://radarr/./frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js","webpack://radarr/./frontend/src/Wanted/Missing/MissingRow.css?8d80","webpack://radarr/./frontend/src/Wanted/Missing/MissingRow.js","webpack://radarr/./frontend/src/Wanted/Missing/Missing.js","webpack://radarr/./frontend/src/Wanted/Missing/MissingConnector.js","webpack://radarr/./frontend/src/App/AppRoutes.tsx","webpack://radarr/./frontend/src/App/App.tsx","webpack://radarr/./frontend/src/Diag/ConsoleApi.js","webpack://radarr/./frontend/src/bootstrap.tsx","webpack://radarr/./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["const radarrYellow = '#ffc230';\r\nconst radarrAlternateYellow = '#2193b5';\r\nconst darkGray = '#888';\r\nconst mediumGray = '#999';\r\nconst gray = '#adadad';\r\nconst black = '#000';\r\nconst white = '#fff';\r\nconst offWhite = '#f5f7fa';\r\nconst purple = '#7a43b6';\r\nconst pink = '#ff69b4';\r\nconst lightGray = '#ddd';\r\n\r\nmodule.exports = {\r\n textColor: '#ccc',\r\n defaultColor: '#ccc',\r\n disabledColor: '#999',\r\n dimColor: '#555',\r\n black,\r\n white,\r\n offWhite,\r\n primaryColor: '#5d9cec',\r\n selectedColor: '#f9be03',\r\n successColor: '#00853d',\r\n dangerColor: '#f05050',\r\n warningColor: '#ffa500',\r\n infoColor: '#5d9cec',\r\n queueColor: '#7a43b6',\r\n purple,\r\n pink,\r\n radarrYellow,\r\n helpTextColor: '#909293',\r\n darkGray,\r\n gray,\r\n lightGray,\r\n mediumGray,\r\n\r\n // Theme Colors\r\n\r\n themeBlue: radarrYellow,\r\n themeAlternateYellow: radarrAlternateYellow,\r\n themeRed: '#c4273c',\r\n themeDarkColor: '#494949',\r\n themeLightColor: '#595959',\r\n pageBackground: '#202020',\r\n pageFooterBackgroud: 'rgba(0, 0, 0, .25)',\r\n\r\n torrentColor: '#00853d',\r\n usenetColor: '#17b1d9',\r\n\r\n // Labels\r\n inverseLabelColor: '#ddd',\r\n inverseLabelTextColor: '#333',\r\n disabledLabelColor: '#838383',\r\n infoTextColor: white,\r\n\r\n // Links\r\n defaultLinkHoverColor: '#fff',\r\n linkColor: '#5d9cec',\r\n linkHoverColor: '#1b72e2',\r\n\r\n // Header\r\n pageHeaderBackgroundColor: '#2a2a2a',\r\n\r\n // Sidebar\r\n\r\n sidebarColor: '#e1e2e3',\r\n sidebarBackgroundColor: '#2a2a2a',\r\n sidebarActiveBackgroundColor: '#333333',\r\n\r\n // Toolbar\r\n toolbarColor: '#e1e2e3',\r\n toolbarBackgroundColor: '#262626',\r\n toolbarMenuItemBackgroundColor: '#303030',\r\n toolbarMenuItemHoverBackgroundColor: '#515151',\r\n toolbarLabelColor: '#e1e2e3',\r\n\r\n // Accents\r\n borderColor: '#858585',\r\n inputBorderColor: '#dde6e9',\r\n inputBoxShadowColor: 'rgba(0, 0, 0, 0.075)',\r\n inputFocusBorderColor: '#66afe9',\r\n inputFocusBoxShadowColor: 'rgba(102, 175, 233, 0.6)',\r\n inputErrorBorderColor: '#f05050',\r\n inputErrorBoxShadowColor: 'rgba(240, 80, 80, 0.6)',\r\n inputWarningBorderColor: '#ffa500',\r\n inputWarningBoxShadowColor: 'rgba(255, 165, 0, 0.6)',\r\n colorImpairedGradient: '#707070',\r\n colorImpairedGradientDark: '#424242',\r\n colorImpairedDangerGradient: '#d84848',\r\n colorImpairedWarningGradient: '#e59400',\r\n colorImpairedPrimaryGradient: '#538cd4',\r\n colorImpairedGrayGradient: '#9b9b9b',\r\n\r\n //\r\n // Buttons\r\n\r\n defaultButtonTextColor: '#eee',\r\n defaultBackgroundColor: '#333',\r\n defaultBorderColor: '#393f45',\r\n defaultHoverBackgroundColor: '#444',\r\n defaultHoverBorderColor: '#5a6265',\r\n\r\n primaryBackgroundColor: '#5d9cec',\r\n primaryBorderColor: '#5899eb',\r\n primaryHoverBackgroundColor: '#4b91ea',\r\n primaryHoverBorderColor: '#3483e7',\r\n\r\n successBackgroundColor: '#27c24c',\r\n successBorderColor: '#26be4a',\r\n successHoverBackgroundColor: '#24b145',\r\n successHoverBorderColor: '#1f9c3d',\r\n\r\n warningBackgroundColor: '#ff902b',\r\n warningBorderColor: '#ff8d26',\r\n warningHoverBackgroundColor: '#ff8517',\r\n warningHoverBorderColor: '#fc7800',\r\n\r\n dangerBackgroundColor: '#f05050',\r\n dangerBorderColor: '#f04b4b',\r\n dangerHoverBackgroundColor: '#ee3d3d',\r\n dangerHoverBorderColor: '#ec2626',\r\n\r\n iconButtonDisabledColor: '#7a7a7a',\r\n iconButtonHoverColor: '#666',\r\n iconButtonHoverLightColor: '#ccc',\r\n\r\n //\r\n // Modal\r\n\r\n modalBackdropBackgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n modalBackgroundColor: '#2a2a2a',\r\n modalCloseButtonHoverColor: '#888',\r\n\r\n //\r\n // Menu\r\n menuItemColor: '#e1e2e3',\r\n menuItemHoverColor: radarrYellow,\r\n menuItemHoverBackgroundColor: '#606060',\r\n\r\n //\r\n // Toolbar\r\n\r\n toobarButtonHoverColor: '#ffc230',\r\n toobarButtonSelectedColor: '#ffc230',\r\n\r\n //\r\n // Scroller\r\n\r\n scrollbarBackgroundColor: '#707070',\r\n scrollbarHoverBackgroundColor: '#606060',\r\n\r\n //\r\n // Card\r\n\r\n cardBackgroundColor: '#333333',\r\n cardShadowColor: '#111',\r\n cardAlternateBackgroundColor: '#333333',\r\n cardCenterBackgroundColor: '#2a2a2a',\r\n\r\n //\r\n // Alert\r\n\r\n alertDangerBorderColor: '#a94442',\r\n alertDangerBackgroundColor: 'rgba(255,0,0,0.1)',\r\n alertDangerColor: '#ccc',\r\n\r\n alertInfoBorderColor: '#31708f',\r\n alertInfoBackgroundColor: 'rgba(0,0,255,0.1)',\r\n alertInfoColor: '#ccc',\r\n\r\n alertSuccessBorderColor: '#3c763d',\r\n alertSuccessBackgroundColor: 'rgba(0,255,0,0.1)',\r\n alertSuccessColor: '#ccc',\r\n\r\n alertWarningBorderColor: '#8a6d3b',\r\n alertWarningBackgroundColor: 'rgba(255,255,0,0.1)',\r\n alertWarningColor: '#ccc',\r\n\r\n //\r\n // Slider\r\n\r\n sliderAccentColor: '#5d9cec',\r\n\r\n //\r\n // Form\r\n\r\n inputBackgroundColor: '#333',\r\n inputReadOnlyBackgroundColor: '#222',\r\n inputHoverBackgroundColor: 'rgba(255, 255, 255, 0.20)',\r\n inputSelectedBackgroundColor: 'rgba(255, 255, 255, 0.05)',\r\n advancedFormLabelColor: '#ff902b',\r\n disabledCheckInputColor: '#ddd',\r\n disabledInputColor: '#808080',\r\n\r\n //\r\n // Popover\r\n\r\n popoverTitleBackgroundColor: '#424242',\r\n popoverTitleBorderColor: '#2a2a2a',\r\n popoverBodyBackgroundColor: '#2a2a2a',\r\n popoverShadowColor: 'rgba(0, 0, 0, 0.2)',\r\n popoverArrowBorderColor: '#2a2a2a',\r\n\r\n popoverTitleBackgroundInverseColor: '#595959',\r\n popoverTitleBorderInverseColor: '#707070',\r\n popoverShadowInverseColor: 'rgba(0, 0, 0, 0.2)',\r\n popoverArrowBorderInverseColor: 'rgba(58, 63, 81, 0.75)',\r\n\r\n //\r\n // Calendar\r\n\r\n calendarTodayBackgroundColor: '#3e3e3e',\r\n calendarBackgroundColor: '#2a2a2a',\r\n calendarBorderColor: '#393f45',\r\n calendarTextDim: '#eee',\r\n calendarTextDimAlternate: '#fff',\r\n\r\n calendarFullColorFilter: 'grayscale(90%) contrast(200%) saturate(50%)',\r\n\r\n //\r\n // Table\r\n\r\n tableRowHoverBackgroundColor: 'rgba(255, 255, 255, 0.08)',\r\n\r\n //\r\n // Movie\r\n\r\n addMovieBackgroundColor: '#2a2a2a',\r\n movieBackgroundColor: '#2a2a2a',\r\n searchIconContainerBackgroundColor: '#2b2b2b',\r\n\r\n //\r\n // Misc\r\n\r\n progressBarFrontTextColor: white,\r\n progressBarBackTextColor: white,\r\n progressBarBackgroundColor: '#727070',\r\n logEventsBackgroundColor: '#2a2a2a'\r\n};\r\n","const radarrYellow = '#ffc230';\r\nconst radarrAlternateYellow = '#2193b5';\r\nconst darkGray = '#888';\r\nconst mediumGray = '#999';\r\nconst gray = '#adadad';\r\nconst black = '#000';\r\nconst white = '#fff';\r\nconst offWhite = '#f5f7fa';\r\nconst purple = '#7a43b6';\r\nconst pink = '#ff69b4';\r\nconst lightGray = '#ddd';\r\nconst defaultColor = '#333';\r\n\r\nmodule.exports = {\r\n textColor: '#515253',\r\n defaultColor,\r\n disabledColor: '#999',\r\n dimColor: '#555',\r\n black,\r\n white,\r\n offWhite,\r\n primaryColor: '#5d9cec',\r\n selectedColor: '#f9be03',\r\n successColor: '#27c24c',\r\n dangerColor: '#f05050',\r\n warningColor: '#ffa500',\r\n infoColor: '#5d9cec',\r\n queueColor: '#7a43b6',\r\n purple,\r\n pink,\r\n radarrYellow,\r\n helpTextColor: '#909293',\r\n darkGray,\r\n gray,\r\n lightGray,\r\n mediumGray,\r\n\r\n // Theme Colors\r\n\r\n themeBlue: radarrYellow,\r\n themeAlternateYellow: radarrAlternateYellow,\r\n themeRed: '#c4273c',\r\n themeDarkColor: '#595959',\r\n themeLightColor: '#707070',\r\n pageBackground: '#f5f7fa',\r\n pageFooterBackgroud: '#f1f1f1',\r\n\r\n torrentColor: '#00853d',\r\n usenetColor: '#17b1d9',\r\n\r\n // Labels\r\n inverseLabelColor: '#ddd',\r\n inverseLabelTextColor: defaultColor,\r\n disabledLabelColor: '#999',\r\n infoTextColor: white,\r\n\r\n // Links\r\n defaultLinkHoverColor: '#fff',\r\n linkColor: '#5d9cec',\r\n linkHoverColor: '#1b72e2',\r\n\r\n // Header\r\n pageHeaderBackgroundColor: '#464b51',\r\n\r\n // Sidebar\r\n\r\n sidebarColor: '#e1e2e3',\r\n sidebarBackgroundColor: '#595959',\r\n sidebarActiveBackgroundColor: '#333333',\r\n\r\n // Toolbar\r\n toolbarColor: '#e1e2e3',\r\n toolbarBackgroundColor: '#707070',\r\n toolbarMenuItemBackgroundColor: '#606060',\r\n toolbarMenuItemHoverBackgroundColor: '#515151',\r\n toolbarLabelColor: '#e1e2e3',\r\n\r\n // Accents\r\n borderColor: '#e5e5e5',\r\n inputBorderColor: '#dde6e9',\r\n inputBoxShadowColor: 'rgba(0, 0, 0, 0.075)',\r\n inputFocusBorderColor: '#66afe9',\r\n inputFocusBoxShadowColor: 'rgba(102, 175, 233, 0.6)',\r\n inputErrorBorderColor: '#f05050',\r\n inputErrorBoxShadowColor: 'rgba(240, 80, 80, 0.6)',\r\n inputWarningBorderColor: '#ffa500',\r\n inputWarningBoxShadowColor: 'rgba(255, 165, 0, 0.6)',\r\n colorImpairedGradient: '#ffffff',\r\n colorImpairedGradientDark: '#f4f5f6',\r\n colorImpairedDangerGradient: '#d84848',\r\n colorImpairedWarningGradient: '#e59400',\r\n colorImpairedPrimaryGradient: '#538cd4',\r\n colorImpairedGrayGradient: '#9b9b9b',\r\n\r\n //\r\n // Buttons\r\n\r\n defaultButtonTextColor: '#eee',\r\n defaultBackgroundColor: '#fff',\r\n defaultBorderColor: '#eaeaea',\r\n defaultHoverBackgroundColor: '#f5f5f5',\r\n defaultHoverBorderColor: '#d6d6d6',\r\n\r\n primaryBackgroundColor: '#5d9cec',\r\n primaryBorderColor: '#5899eb',\r\n primaryHoverBackgroundColor: '#4b91ea',\r\n primaryHoverBorderColor: '#3483e7',\r\n\r\n successBackgroundColor: '#27c24c',\r\n successBorderColor: '#26be4a',\r\n successHoverBackgroundColor: '#24b145',\r\n successHoverBorderColor: '#1f9c3d',\r\n\r\n warningBackgroundColor: '#ff902b',\r\n warningBorderColor: '#ff8d26',\r\n warningHoverBackgroundColor: '#ff8517',\r\n warningHoverBorderColor: '#fc7800',\r\n\r\n dangerBackgroundColor: '#f05050',\r\n dangerBorderColor: '#f04b4b',\r\n dangerHoverBackgroundColor: '#ee3d3d',\r\n dangerHoverBorderColor: '#ec2626',\r\n\r\n iconButtonDisabledColor: '#7a7a7a',\r\n iconButtonHoverColor: '#666',\r\n iconButtonHoverLightColor: '#ccc',\r\n\r\n //\r\n // Modal\r\n\r\n modalBackdropBackgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n modalBackgroundColor: '#fff',\r\n modalCloseButtonHoverColor: '#888',\r\n\r\n //\r\n // Menu\r\n menuItemColor: '#e1e2e3',\r\n menuItemHoverColor: '#fbfcfc',\r\n menuItemHoverBackgroundColor: '#f5f7fa',\r\n\r\n //\r\n // Toolbar\r\n\r\n toobarButtonHoverColor: '#ffc230',\r\n toobarButtonSelectedColor: '#ffc230',\r\n\r\n //\r\n // Scroller\r\n\r\n scrollbarBackgroundColor: '#9ea4b9',\r\n scrollbarHoverBackgroundColor: '#656d8c',\r\n\r\n //\r\n // Card\r\n\r\n cardBackgroundColor: '#fff',\r\n cardShadowColor: '#e1e1e1',\r\n cardAlternateBackgroundColor: '#f5f5f5',\r\n cardCenterBackgroundColor: '#fff',\r\n\r\n //\r\n // Alert\r\n\r\n alertDangerBorderColor: '#ebccd1',\r\n alertDangerBackgroundColor: '#f2dede',\r\n alertDangerColor: '#a94442',\r\n\r\n alertInfoBorderColor: '#bce8f1',\r\n alertInfoBackgroundColor: '#d9edf7',\r\n alertInfoColor: '#31708f',\r\n\r\n alertSuccessBorderColor: '#d6e9c6',\r\n alertSuccessBackgroundColor: '#dff0d8',\r\n alertSuccessColor: '#3c763d',\r\n\r\n alertWarningBorderColor: '#faebcc',\r\n alertWarningBackgroundColor: '#fcf8e3',\r\n alertWarningColor: '#8a6d3b',\r\n\r\n //\r\n // Slider\r\n\r\n sliderAccentColor: '#5d9cec',\r\n\r\n //\r\n // Form\r\n\r\n inputBackgroundColor: '#fff',\r\n inputReadOnlyBackgroundColor: '#eee',\r\n inputHoverBackgroundColor: '#f8f8f8',\r\n inputSelectedBackgroundColor: '#e2e2e2',\r\n advancedFormLabelColor: '#ff902b',\r\n disabledCheckInputColor: '#ddd',\r\n disabledInputColor: '#808080',\r\n\r\n //\r\n // Popover\r\n\r\n popoverTitleBackgroundColor: '#f7f7f7',\r\n popoverTitleBorderColor: '#ebebeb',\r\n popoverBodyBackgroundColor: '#e9e9e9',\r\n popoverShadowColor: 'rgba(0, 0, 0, 0.2)',\r\n popoverArrowBorderColor: '#fff',\r\n\r\n popoverTitleBackgroundInverseColor: '#9b9b9b',\r\n popoverTitleBorderInverseColor: '#bfbfbf',\r\n popoverShadowInverseColor: 'rgba(0, 0, 0, 0.2)',\r\n popoverArrowBorderInverseColor: 'rgba(58, 63, 81, 0.75)',\r\n\r\n //\r\n // Calendar\r\n\r\n calendarTodayBackgroundColor: '#c5c5c5',\r\n calendarBackgroundColor: '#e4eaec',\r\n calendarBorderColor: '#cecece',\r\n calendarTextDim: '#666',\r\n calendarTextDimAlternate: '#242424',\r\n\r\n calendarFullColorFilter: 'brightness(30%)',\r\n\r\n //\r\n // Table\r\n\r\n tableRowHoverBackgroundColor: '#fafbfc',\r\n\r\n //\r\n // Movie\r\n\r\n addMovieBackgroundColor: '#ededed',\r\n movieBackgroundColor: '#fafbfc',\r\n searchIconContainerBackgroundColor: offWhite,\r\n\r\n //\r\n // Misc\r\n\r\n progressBarFrontTextColor: white,\r\n progressBarBackTextColor: darkGray,\r\n progressBarBackgroundColor: white,\r\n logEventsBackgroundColor: white\r\n};\r\n","module.exports = {\r\n // Page\r\n pageContentBodyPadding: '20px',\r\n pageContentBodyPaddingSmallScreen: '10px',\r\n\r\n // Header\r\n headerHeight: '60px',\r\n\r\n // Sidebar\r\n sidebarWidth: '210px',\r\n\r\n // Toolbar\r\n toolbarHeight: '60px',\r\n toolbarButtonWidth: '60px',\r\n toolbarSeparatorMargin: '20px',\r\n\r\n // Break Points\r\n breakpointExtraSmall: '480px',\r\n breakpointSmall: '768px',\r\n breakpointMedium: '992px',\r\n breakpointLarge: '1200px',\r\n breakpointExtraLarge: '1450px',\r\n\r\n // Form\r\n formGroupExtraSmallWidth: '550px',\r\n formGroupSmallWidth: '650px',\r\n formGroupMediumWidth: '800px',\r\n formGroupLargeWidth: '1200px',\r\n formLabelSmallWidth: '150px',\r\n formLabelLargeWidth: '250px',\r\n formLabelRightMarginWidth: '20px',\r\n\r\n // Drag\r\n dragHandleWidth: '40px',\r\n qualityProfileItemHeight: '30px',\r\n qualityProfileItemDragSourcePadding: '4px',\r\n\r\n // Progress Bar\r\n progressBarSmallHeight: '5px',\r\n progressBarMediumHeight: '15px',\r\n progressBarLargeHeight: '20px',\r\n\r\n // Jump Bar\r\n jumpBarItemHeight: '25px',\r\n\r\n // Modal\r\n modalBodyPadding: '30px',\r\n\r\n // Movie\r\n movieIndexColumnPadding: '10px',\r\n movieIndexColumnPaddingSmallScreen: '5px',\r\n movieIndexOverviewInfoRowHeight: '21px'\r\n};\r\n","module.exports = {\r\n // Families\r\n defaultFontFamily: 'Roboto, \"open sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif',\r\n monoSpaceFontFamily: '\"Ubuntu Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;',\r\n\r\n // Sizes\r\n extraSmallFontSize: '11px',\r\n smallFontSize: '12px',\r\n defaultFontSize: '14px',\r\n intermediateFontSize: '15px',\r\n largeFontSize: '16px',\r\n\r\n lineHeight: '1.528571429'\r\n};\r\n","import { Dispatch } from 'redux';\r\nimport AppState from 'App/State/AppState';\r\n\r\ntype GetState = () => AppState;\r\ntype Thunk = (\r\n getState: GetState,\r\n identityFn: never,\r\n dispatch: Dispatch\r\n) => unknown;\r\n\r\nconst thunks: Record = {};\r\n\r\nfunction identity(payload: T): TResult {\r\n return payload as unknown as TResult;\r\n}\r\n\r\nexport function createThunk(type: string, identityFunction = identity) {\r\n return function (payload?: T) {\r\n return function (dispatch: Dispatch, getState: GetState) {\r\n const thunk = thunks[type];\r\n\r\n if (thunk) {\r\n const finalPayload = payload ?? {};\r\n\r\n return thunk(getState, identityFunction(finalPayload), dispatch);\r\n }\r\n\r\n throw Error(`Thunk handler has not been registered for ${type}`);\r\n };\r\n };\r\n}\r\n\r\nexport function handleThunks(handlers: Record) {\r\n const types = Object.keys(handlers);\r\n\r\n types.forEach((type) => {\r\n thunks[type] = handlers[type];\r\n });\r\n}\r\n","import $ from 'jquery';\r\n\r\nconst absUrlRegex = /^(https?:)?\\/\\//i;\r\nconst apiRoot = window.Radarr.apiRoot;\r\n\r\nfunction isRelative(ajaxOptions) {\r\n return !absUrlRegex.test(ajaxOptions.url);\r\n}\r\n\r\nfunction addRootUrl(ajaxOptions) {\r\n ajaxOptions.url = apiRoot + ajaxOptions.url;\r\n}\r\n\r\nfunction addApiKey(ajaxOptions) {\r\n ajaxOptions.headers = ajaxOptions.headers || {};\r\n ajaxOptions.headers['X-Api-Key'] = window.Radarr.apiKey;\r\n}\r\n\r\nfunction addContentType(ajaxOptions) {\r\n if (\r\n ajaxOptions.contentType == null &&\r\n ajaxOptions.dataType === 'json' &&\r\n (ajaxOptions.method === 'PUT' || ajaxOptions.method === 'POST' || ajaxOptions.method === 'DELETE')) {\r\n ajaxOptions.contentType = 'application/json';\r\n }\r\n}\r\n\r\nexport default function createAjaxRequest(originalAjaxOptions) {\r\n const requestXHR = new window.XMLHttpRequest();\r\n let aborted = false;\r\n let complete = false;\r\n\r\n function abortRequest() {\r\n if (!complete) {\r\n aborted = true;\r\n requestXHR.abort();\r\n }\r\n }\r\n\r\n const ajaxOptions = { ...originalAjaxOptions };\r\n\r\n if (isRelative(ajaxOptions)) {\r\n addRootUrl(ajaxOptions);\r\n addApiKey(ajaxOptions);\r\n addContentType(ajaxOptions);\r\n }\r\n\r\n const request = $.ajax({\r\n xhr: () => requestXHR,\r\n ...ajaxOptions\r\n }).then(null, (xhr, textStatus, errorThrown) => {\r\n xhr.aborted = aborted;\r\n\r\n return $.Deferred().reject(xhr, textStatus, errorThrown).promise();\r\n }).always(() => {\r\n complete = true;\r\n });\r\n\r\n return {\r\n request,\r\n abortRequest\r\n };\r\n}\r\n","\r\nfunction getNewMovie(movie, payload) {\r\n const {\r\n rootFolderPath,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n tags,\r\n searchForMovie = false\r\n } = payload;\r\n\r\n const addOptions = {\r\n monitor,\r\n searchForMovie\r\n };\r\n\r\n movie.addOptions = addOptions;\r\n movie.monitored = monitor !== 'none';\r\n movie.qualityProfileId = qualityProfileId;\r\n movie.minimumAvailability = minimumAvailability;\r\n movie.rootFolderPath = rootFolderPath;\r\n movie.tags = tags;\r\n\r\n return movie;\r\n}\r\n\r\nexport default getNewMovie;\r\n","import _ from 'lodash';\r\n\r\nfunction getSectionState(state, section, isFullStateTree = false) {\r\n if (isFullStateTree) {\r\n return _.get(state, section);\r\n }\r\n\r\n const [, subSection] = section.split('.');\r\n\r\n if (subSection) {\r\n return Object.assign({}, state[subSection]);\r\n }\r\n\r\n // TODO: Remove in favour of using subSection\r\n if (state.hasOwnProperty(section)) {\r\n return Object.assign({}, state[section]);\r\n }\r\n\r\n return Object.assign({}, state);\r\n}\r\n\r\nexport default getSectionState;\r\n","function updateSectionState(state, section, newState) {\r\n const [, subSection] = section.split('.');\r\n\r\n if (subSection) {\r\n return Object.assign({}, state, { [subSection]: newState });\r\n }\r\n\r\n // TODO: Remove in favour of using subSection\r\n if (state.hasOwnProperty(section)) {\r\n return Object.assign({}, state, { [section]: newState });\r\n }\r\n\r\n return Object.assign({}, state, newState);\r\n}\r\n\r\nexport default updateSectionState;\r\n","import { createAction } from 'redux-actions';\r\n\r\n//\r\n// Action Types\r\n\r\nexport const SET = 'base/set';\r\n\r\nexport const UPDATE = 'base/update';\r\nexport const UPDATE_ITEM = 'base/updateItem';\r\nexport const UPDATE_SERVER_SIDE_COLLECTION = 'base/updateServerSideCollection';\r\n\r\nexport const SET_SETTING_VALUE = 'base/setSettingValue';\r\nexport const CLEAR_PENDING_CHANGES = 'base/clearPendingChanges';\r\n\r\nexport const REMOVE_ITEM = 'base/removeItem';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const set = createAction(SET);\r\n\r\nexport const update = createAction(UPDATE);\r\nexport const updateItem = createAction(UPDATE_ITEM);\r\nexport const updateServerSideCollection = createAction(UPDATE_SERVER_SIDE_COLLECTION);\r\n\r\nexport const setSettingValue = createAction(SET_SETTING_VALUE);\r\nexport const clearPendingChanges = createAction(CLEAR_PENDING_CHANGES);\r\n\r\nexport const removeItem = createAction(REMOVE_ITEM);\r\n","import _ from 'lodash';\r\nimport { handleActions } from 'redux-actions';\r\nimport {\r\n CLEAR_PENDING_CHANGES,\r\n REMOVE_ITEM,\r\n SET,\r\n UPDATE,\r\n UPDATE_ITEM,\r\n UPDATE_SERVER_SIDE_COLLECTION } from 'Store/Actions/baseActions';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\nconst omittedProperties = [\r\n 'section',\r\n 'id'\r\n];\r\n\r\nfunction createItemMap(data) {\r\n return data.reduce((acc, d, index) => {\r\n acc[d.id] = index;\r\n return acc;\r\n }, {});\r\n}\r\n\r\nexport default function createHandleActions(handlers, defaultState, section) {\r\n return handleActions({\r\n\r\n [SET]: function(state, { payload }) {\r\n const payloadSection = payload.section;\r\n const [baseSection] = payloadSection.split('.');\r\n\r\n if (section === baseSection) {\r\n const newState = Object.assign(getSectionState(state, payloadSection),\r\n _.omit(payload, omittedProperties));\r\n\r\n return updateSectionState(state, payloadSection, newState);\r\n }\r\n\r\n return state;\r\n },\r\n\r\n [UPDATE]: function(state, { payload }) {\r\n const payloadSection = payload.section;\r\n const [baseSection] = payloadSection.split('.');\r\n\r\n if (section === baseSection) {\r\n const newState = getSectionState(state, payloadSection);\r\n\r\n if (_.isArray(payload.data)) {\r\n newState.items = payload.data;\r\n newState.itemMap = createItemMap(payload.data);\r\n } else {\r\n newState.item = payload.data;\r\n }\r\n\r\n return updateSectionState(state, payloadSection, newState);\r\n }\r\n\r\n return state;\r\n },\r\n\r\n [UPDATE_ITEM]: function(state, { payload }) {\r\n const {\r\n section: payloadSection,\r\n updateOnly = false,\r\n ...otherProps\r\n } = payload;\r\n\r\n const [baseSection] = payloadSection.split('.');\r\n\r\n if (section === baseSection) {\r\n const newState = getSectionState(state, payloadSection);\r\n const items = newState.items;\r\n\r\n // Client side collections that are created by adding items to an\r\n // existing array may not have an itemMap, the array is probably empty,\r\n // but on the offchance it's not create a new item map based on the\r\n // items in the array.\r\n const itemMap = newState.itemMap ?? createItemMap(items);\r\n const index = payload.id in itemMap ? itemMap[payload.id] : -1;\r\n\r\n newState.items = [...items];\r\n\r\n // TODO: Move adding to it's own reducer\r\n if (index >= 0) {\r\n const item = items[index];\r\n const newItem = { ...item, ...otherProps };\r\n\r\n // if the item to update is equal to existing, then don't actually update\r\n // to prevent costly reselections\r\n if (_.isEqual(item, newItem)) {\r\n return state;\r\n }\r\n\r\n newState.items.splice(index, 1, newItem);\r\n } else if (!updateOnly) {\r\n const newIndex = newState.items.push({ ...otherProps }) - 1;\r\n\r\n newState.itemMap = { ...itemMap };\r\n newState.itemMap[payload.id] = newIndex;\r\n }\r\n\r\n return updateSectionState(state, payloadSection, newState);\r\n }\r\n\r\n return state;\r\n },\r\n\r\n [CLEAR_PENDING_CHANGES]: function(state, { payload }) {\r\n const payloadSection = payload.section;\r\n const [baseSection] = payloadSection.split('.');\r\n\r\n if (section === baseSection) {\r\n const newState = getSectionState(state, payloadSection);\r\n newState.pendingChanges = {};\r\n\r\n if (newState.hasOwnProperty('saveError')) {\r\n newState.saveError = null;\r\n }\r\n\r\n return updateSectionState(state, payloadSection, newState);\r\n }\r\n\r\n return state;\r\n },\r\n\r\n [REMOVE_ITEM]: function(state, { payload }) {\r\n const payloadSection = payload.section;\r\n const [baseSection] = payloadSection.split('.');\r\n\r\n if (section === baseSection) {\r\n const newState = getSectionState(state, payloadSection);\r\n\r\n newState.items = [...newState.items];\r\n _.remove(newState.items, { id: payload.id });\r\n\r\n newState.itemMap = createItemMap(newState.items);\r\n\r\n return updateSectionState(state, payloadSection, newState);\r\n }\r\n\r\n return state;\r\n },\r\n\r\n [UPDATE_SERVER_SIDE_COLLECTION]: function(state, { payload }) {\r\n const payloadSection = payload.section;\r\n const [baseSection] = payloadSection.split('.');\r\n\r\n if (section === baseSection) {\r\n const data = payload.data;\r\n const newState = getSectionState(state, payloadSection);\r\n\r\n const serverState = _.omit(data, ['records']);\r\n const calculatedState = {\r\n totalPages: Math.max(Math.ceil(data.totalRecords / data.pageSize), 1),\r\n items: data.records,\r\n itemMap: createItemMap(data.records)\r\n };\r\n\r\n return updateSectionState(state, payloadSection, Object.assign(newState, serverState, calculatedState));\r\n }\r\n\r\n return state;\r\n },\r\n\r\n ...handlers\r\n\r\n }, defaultState);\r\n}\r\n","import _ from 'lodash';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\nfunction createSetSettingValueReducer(section) {\r\n return (state, { payload }) => {\r\n if (section === payload.section) {\r\n const { name, value } = payload;\r\n const newState = getSectionState(state, section);\r\n newState.pendingChanges = Object.assign({}, newState.pendingChanges);\r\n\r\n const currentValue = newState.item ? newState.item[name] : null;\r\n const pendingState = newState.pendingChanges;\r\n\r\n let parsedValue = null;\r\n\r\n if (_.isNumber(currentValue) && value != null) {\r\n parsedValue = parseInt(value);\r\n } else {\r\n parsedValue = value;\r\n }\r\n\r\n if (currentValue === parsedValue) {\r\n delete pendingState[name];\r\n } else {\r\n pendingState[name] = parsedValue;\r\n }\r\n\r\n return updateSectionState(state, section, newState);\r\n }\r\n\r\n return state;\r\n };\r\n}\r\n\r\nexport default createSetSettingValueReducer;\r\n","import _ from 'lodash';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport getNewMovie from 'Utilities/Movie/getNewMovie';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport { set, update, updateItem } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createSetSettingValueReducer from './Creators/Reducers/createSetSettingValueReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'addMovie';\r\nlet abortCurrentRequest = null;\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isAdding: false,\r\n isAdded: false,\r\n addError: null,\r\n items: [],\r\n\r\n defaults: {\r\n rootFolderPath: '',\r\n monitor: 'movieOnly',\r\n qualityProfileId: 0,\r\n minimumAvailability: 'released',\r\n searchForMovie: true,\r\n tags: []\r\n }\r\n};\r\n\r\nexport const persistState = [\r\n 'addMovie.defaults'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const LOOKUP_MOVIE = 'addMovie/lookupMovie';\r\nexport const ADD_MOVIE = 'addMovie/addMovie';\r\nexport const SET_ADD_MOVIE_VALUE = 'addMovie/setAddMovieValue';\r\nexport const CLEAR_ADD_MOVIE = 'addMovie/clearAddMovie';\r\nexport const SET_ADD_MOVIE_DEFAULT = 'addMovie/setAddMovieDefault';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const lookupMovie = createThunk(LOOKUP_MOVIE);\r\nexport const addMovie = createThunk(ADD_MOVIE);\r\nexport const clearAddMovie = createAction(CLEAR_ADD_MOVIE);\r\nexport const setAddMovieDefault = createAction(SET_ADD_MOVIE_DEFAULT);\r\n\r\nexport const setAddMovieValue = createAction(SET_ADD_MOVIE_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [LOOKUP_MOVIE]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n if (abortCurrentRequest) {\r\n abortCurrentRequest();\r\n }\r\n\r\n const { request, abortRequest } = createAjaxRequest({\r\n url: '/movie/lookup',\r\n data: {\r\n term: payload.term\r\n }\r\n });\r\n\r\n abortCurrentRequest = abortRequest;\r\n\r\n request.done((data) => {\r\n data = data.map((movie) => ({ ...movie, internalId: movie.id, id: movie.tmdbId }));\r\n\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n request.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr.aborted ? null : xhr\r\n }));\r\n });\r\n },\r\n\r\n [ADD_MOVIE]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isAdding: true }));\r\n\r\n const tmdbId = payload.tmdbId;\r\n const items = getState().addMovie.items;\r\n const newMovie = getNewMovie(_.cloneDeep(_.find(items, { tmdbId })), payload);\r\n newMovie.id = 0;\r\n\r\n const promise = createAjaxRequest({\r\n url: '/movie',\r\n method: 'POST',\r\n dataType: 'json',\r\n contentType: 'application/json',\r\n data: JSON.stringify(newMovie)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n const updatedItem = _.cloneDeep(data);\r\n updatedItem.internalId = updatedItem.id;\r\n updatedItem.id = updatedItem.tmdbId;\r\n delete updatedItem.images;\r\n\r\n const actions = [\r\n updateItem({ section: 'movies', ...data }),\r\n updateItem({ section: 'addMovie', ...updatedItem }),\r\n\r\n set({\r\n section,\r\n isAdding: false,\r\n isAdded: true,\r\n addError: null\r\n })\r\n ];\r\n\r\n if (!newMovie.collection) {\r\n dispatch(batchActions(actions));\r\n return;\r\n }\r\n\r\n const collectionToUpdate = getState().movieCollections.items.find((collection) => collection.tmdbId === newMovie.collection.tmdbId);\r\n\r\n if (collectionToUpdate) {\r\n const collectionData = { ...collectionToUpdate, missingMovies: Math.max(0, collectionToUpdate.missingMovies - 1 ) };\r\n actions.push(updateItem({ section: 'movieCollections', ...collectionData }));\r\n }\r\n\r\n dispatch(batchActions(actions));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isAdding: false,\r\n isAdded: false,\r\n addError: xhr\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_ADD_MOVIE_VALUE]: createSetSettingValueReducer(section),\r\n\r\n [SET_ADD_MOVIE_DEFAULT]: function(state, { payload }) {\r\n const newState = getSectionState(state, section);\r\n\r\n newState.defaults = {\r\n ...newState.defaults,\r\n ...payload\r\n };\r\n\r\n return updateSectionState(state, section, newState);\r\n },\r\n\r\n [CLEAR_ADD_MOVIE]: function(state) {\r\n const {\r\n defaults,\r\n view,\r\n ...otherDefaultState\r\n } = defaultState;\r\n\r\n return Object.assign({}, state, otherDefaultState);\r\n }\r\n\r\n}, defaultState, section);\r\n","import createAjaxRequest from 'Utilities/createAjaxRequest';\r\n\r\nfunction getTranslations() {\r\n return createAjaxRequest({\r\n global: false,\r\n dataType: 'json',\r\n url: '/localization',\r\n }).request;\r\n}\r\n\r\nlet translations: Record = {};\r\n\r\nexport async function fetchTranslations(): Promise {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const data = await getTranslations();\r\n translations = data.Strings;\r\n\r\n resolve(true);\r\n } catch {\r\n resolve(false);\r\n }\r\n });\r\n}\r\n\r\nexport default function translate(\r\n key: string,\r\n tokens: Record = {}\r\n) {\r\n const { isProduction = true } = window.Radarr;\r\n\r\n if (!isProduction && !(key in translations)) {\r\n console.warn(`Missing translation for key: ${key}`);\r\n }\r\n\r\n const translation = translations[key] || key;\r\n\r\n tokens.appName = 'Radarr';\r\n\r\n // Fallback to the old behaviour for translations not yet updated to use named tokens\r\n Object.values(tokens).forEach((value, index) => {\r\n tokens[index] = value;\r\n });\r\n\r\n return translation.replace(/\\{([a-z0-9]+?)\\}/gi, (match, tokenMatch) =>\r\n String(tokens[tokenMatch] ?? match)\r\n );\r\n}\r\n","import _ from 'lodash';\r\nimport { createAction } from 'redux-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport { fetchTranslations as fetchAppTranslations } from 'Utilities/String/translate';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\nfunction getDimensions(width, height) {\r\n const dimensions = {\r\n width,\r\n height,\r\n isExtraSmallScreen: width <= 480,\r\n isSmallScreen: width <= 768,\r\n isMediumScreen: width <= 992,\r\n isLargeScreen: width <= 1200\r\n };\r\n\r\n return dimensions;\r\n}\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'app';\r\nconst messagesSection = 'app.messages';\r\nlet abortPingServer = null;\r\nlet pingTimeout = null;\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n dimensions: getDimensions(window.innerWidth, window.innerHeight),\r\n messages: {\r\n items: []\r\n },\r\n version: window.Radarr.version,\r\n isUpdated: false,\r\n isConnected: true,\r\n isReconnecting: false,\r\n isDisconnected: false,\r\n isRestarting: false,\r\n isSidebarVisible: !getDimensions(window.innerWidth, window.innerHeight).isSmallScreen,\r\n translations: {\r\n isFetching: true,\r\n isPopulated: false,\r\n error: null\r\n }\r\n};\r\n\r\n//\r\n// Action Types\r\n\r\nexport const SHOW_MESSAGE = 'app/showMessage';\r\nexport const HIDE_MESSAGE = 'app/hideMessage';\r\nexport const SAVE_DIMENSIONS = 'app/saveDimensions';\r\nexport const SET_VERSION = 'app/setVersion';\r\nexport const SET_APP_VALUE = 'app/setAppValue';\r\nexport const SET_IS_SIDEBAR_VISIBLE = 'app/setIsSidebarVisible';\r\nexport const FETCH_TRANSLATIONS = 'app/fetchTranslations';\r\n\r\nexport const PING_SERVER = 'app/pingServer';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const saveDimensions = createAction(SAVE_DIMENSIONS);\r\nexport const setVersion = createAction(SET_VERSION);\r\nexport const setIsSidebarVisible = createAction(SET_IS_SIDEBAR_VISIBLE);\r\nexport const setAppValue = createAction(SET_APP_VALUE);\r\nexport const showMessage = createAction(SHOW_MESSAGE);\r\nexport const hideMessage = createAction(HIDE_MESSAGE);\r\nexport const pingServer = createThunk(PING_SERVER);\r\nexport const fetchTranslations = createThunk(FETCH_TRANSLATIONS);\r\n\r\n//\r\n// Helpers\r\n\r\nfunction pingServerAfterTimeout(getState, dispatch) {\r\n if (abortPingServer) {\r\n abortPingServer();\r\n abortPingServer = null;\r\n }\r\n\r\n if (pingTimeout) {\r\n clearTimeout(pingTimeout);\r\n pingTimeout = null;\r\n }\r\n\r\n pingTimeout = setTimeout(() => {\r\n if (!getState().isRestarting && getState().isConnected) {\r\n return;\r\n }\r\n\r\n const ajaxOptions = {\r\n url: '/system/status',\r\n method: 'GET',\r\n contentType: 'application/json'\r\n };\r\n\r\n const { request, abortRequest } = createAjaxRequest(ajaxOptions);\r\n\r\n abortPingServer = abortRequest;\r\n\r\n request.done(() => {\r\n abortPingServer = null;\r\n pingTimeout = null;\r\n\r\n dispatch(setAppValue({\r\n isRestarting: false\r\n }));\r\n });\r\n\r\n request.fail((xhr) => {\r\n abortPingServer = null;\r\n pingTimeout = null;\r\n\r\n // Unauthorized, but back online\r\n if (xhr.status === 401) {\r\n dispatch(setAppValue({\r\n isRestarting: false\r\n }));\r\n } else {\r\n pingServerAfterTimeout(getState, dispatch);\r\n }\r\n });\r\n }, 5000);\r\n}\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [PING_SERVER]: function(getState, payload, dispatch) {\r\n pingServerAfterTimeout(getState, dispatch);\r\n },\r\n [FETCH_TRANSLATIONS]: async function(getState, payload, dispatch) {\r\n const isFetchingComplete = await fetchAppTranslations();\r\n\r\n dispatch(setAppValue({\r\n translations: {\r\n isFetching: false,\r\n isPopulated: isFetchingComplete,\r\n error: isFetchingComplete ? null : 'Failed to load translations from API'\r\n }\r\n }));\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SAVE_DIMENSIONS]: function(state, { payload }) {\r\n const {\r\n width,\r\n height\r\n } = payload;\r\n\r\n const dimensions = getDimensions(width, height);\r\n\r\n return Object.assign({}, state, { dimensions });\r\n },\r\n\r\n [SHOW_MESSAGE]: function(state, { payload }) {\r\n const newState = getSectionState(state, messagesSection);\r\n const items = newState.items;\r\n const index = _.findIndex(items, { id: payload.id });\r\n\r\n newState.items = [...items];\r\n\r\n if (index >= 0) {\r\n const item = items[index];\r\n\r\n newState.items.splice(index, 1, { ...item, ...payload });\r\n } else {\r\n newState.items.push({ ...payload });\r\n }\r\n\r\n return updateSectionState(state, messagesSection, newState);\r\n },\r\n\r\n [HIDE_MESSAGE]: function(state, { payload }) {\r\n const newState = getSectionState(state, messagesSection);\r\n\r\n newState.items = [...newState.items];\r\n _.remove(newState.items, { id: payload.id });\r\n\r\n return updateSectionState(state, messagesSection, newState);\r\n },\r\n\r\n [SET_APP_VALUE]: function(state, { payload }) {\r\n const newState = Object.assign(getSectionState(state, section), payload);\r\n\r\n return updateSectionState(state, section, newState);\r\n },\r\n\r\n [SET_VERSION]: function(state, { payload }) {\r\n const version = payload.version;\r\n\r\n const newState = {\r\n version\r\n };\r\n\r\n if (state.version !== version) {\r\n if (!state.prevVersion) {\r\n newState.prevVersion = state.version;\r\n }\r\n newState.isUpdated = true;\r\n }\r\n\r\n return Object.assign({}, state, newState);\r\n },\r\n\r\n [SET_IS_SIDEBAR_VISIBLE]: function(state, { payload }) {\r\n const newState = {\r\n isSidebarVisible: payload.isSidebarVisible\r\n };\r\n\r\n return Object.assign({}, state, newState);\r\n }\r\n\r\n}, defaultState, section);\r\n","export const LEFT = 'left';\r\nexport const CENTER = 'center';\r\nexport const RIGHT = 'right';\r\n\r\nexport const all = [LEFT, CENTER, RIGHT];\r\n\r\nexport type Align = 'left' | 'center' | 'right';\r\n","export const CONTAINS = 'contains';\r\nexport const EQUAL = 'equal';\r\nexport const GREATER_THAN = 'greaterThan';\r\nexport const GREATER_THAN_OR_EQUAL = 'greaterThanOrEqual';\r\nexport const IN_LAST = 'inLast';\r\nexport const NOT_IN_LAST = 'notInLast';\r\nexport const IN_NEXT = 'inNext';\r\nexport const NOT_IN_NEXT = 'notInNext';\r\nexport const LESS_THAN = 'lessThan';\r\nexport const LESS_THAN_OR_EQUAL = 'lessThanOrEqual';\r\nexport const NOT_CONTAINS = 'notContains';\r\nexport const NOT_EQUAL = 'notEqual';\r\nexport const STARTS_WITH = 'startsWith';\r\nexport const NOT_STARTS_WITH = 'notStartsWith';\r\nexport const ENDS_WITH = 'endsWith';\r\nexport const NOT_ENDS_WITH = 'notEndsWith';\r\n\r\nexport const all = [\r\n CONTAINS,\r\n EQUAL,\r\n GREATER_THAN,\r\n GREATER_THAN_OR_EQUAL,\r\n LESS_THAN,\r\n LESS_THAN_OR_EQUAL,\r\n NOT_CONTAINS,\r\n NOT_EQUAL,\r\n IN_LAST,\r\n NOT_IN_LAST,\r\n IN_NEXT,\r\n NOT_IN_NEXT,\r\n STARTS_WITH,\r\n NOT_STARTS_WITH,\r\n ENDS_WITH,\r\n NOT_ENDS_WITH\r\n];\r\n","import translate from 'Utilities/String/translate';\r\nimport * as filterTypes from './filterTypes';\r\n\r\nexport const ARRAY = 'array';\r\nexport const CONTAINS = 'contains';\r\nexport const DATE = 'date';\r\nexport const EQUAL = 'equal';\r\nexport const EXACT = 'exact';\r\nexport const NUMBER = 'number';\r\nexport const STRING = 'string';\r\n\r\nexport const all = [\r\n ARRAY,\r\n CONTAINS,\r\n DATE,\r\n EQUAL,\r\n EXACT,\r\n NUMBER,\r\n STRING\r\n];\r\n\r\nexport const possibleFilterTypes = {\r\n [ARRAY]: [\r\n {\r\n key: filterTypes.CONTAINS,\r\n value: () => translate('FilterContains')\r\n },\r\n {\r\n key: filterTypes.NOT_CONTAINS,\r\n value: () => translate('FilterDoesNotContain')\r\n }\r\n ],\r\n\r\n [CONTAINS]: [\r\n {\r\n key: filterTypes.CONTAINS,\r\n value: () => translate('FilterContains')\r\n }\r\n ],\r\n\r\n [DATE]: [\r\n {\r\n key: filterTypes.LESS_THAN,\r\n value: () => translate('FilterIsBefore')\r\n },\r\n {\r\n key: filterTypes.GREATER_THAN,\r\n value: () => translate('FilterIsAfter')\r\n },\r\n {\r\n key: filterTypes.IN_LAST,\r\n value: () => translate('FilterInLast')\r\n },\r\n {\r\n key: filterTypes.NOT_IN_LAST,\r\n value: () => translate('FilterNotInLast')\r\n },\r\n {\r\n key: filterTypes.IN_NEXT,\r\n value: () => translate('FilterInNext')\r\n },\r\n {\r\n key: filterTypes.NOT_IN_NEXT,\r\n value: () => translate('FilterNotInNext')\r\n }\r\n ],\r\n\r\n [EQUAL]: [\r\n {\r\n key: filterTypes.EQUAL,\r\n value: () => translate('FilterIs')\r\n }\r\n ],\r\n\r\n [EXACT]: [\r\n {\r\n key: filterTypes.EQUAL,\r\n value: () => translate('FilterIs')\r\n },\r\n {\r\n key: filterTypes.NOT_EQUAL,\r\n value: () => translate('FilterIsNot')\r\n }\r\n ],\r\n\r\n [NUMBER]: [\r\n {\r\n key: filterTypes.EQUAL,\r\n value: () => translate('FilterEqual')\r\n },\r\n {\r\n key: filterTypes.GREATER_THAN,\r\n value: () => translate('FilterGreaterThan')\r\n },\r\n {\r\n key: filterTypes.GREATER_THAN_OR_EQUAL,\r\n value: () => translate('FilterGreaterThanOrEqual')\r\n },\r\n {\r\n key: filterTypes.LESS_THAN,\r\n value: () => translate('FilterLessThan')\r\n },\r\n {\r\n key: filterTypes.LESS_THAN_OR_EQUAL,\r\n value: () => translate('FilterLessThanOrEqual')\r\n },\r\n {\r\n key: filterTypes.NOT_EQUAL,\r\n value: () => translate('FilterNotEqual')\r\n }\r\n ],\r\n\r\n [STRING]: [\r\n {\r\n key: filterTypes.CONTAINS,\r\n value: () => translate('FilterContains')\r\n },\r\n {\r\n key: filterTypes.NOT_CONTAINS,\r\n value: () => translate('FilterDoesNotContain')\r\n },\r\n {\r\n key: filterTypes.EQUAL,\r\n value: () => translate('FilterEqual')\r\n },\r\n {\r\n key: filterTypes.NOT_EQUAL,\r\n value: () => translate('FilterNotEqual')\r\n },\r\n {\r\n key: filterTypes.STARTS_WITH,\r\n value: () => translate('FilterStartsWith')\r\n },\r\n {\r\n key: filterTypes.NOT_STARTS_WITH,\r\n value: () => translate('FilterDoesNotStartWith')\r\n },\r\n {\r\n key: filterTypes.ENDS_WITH,\r\n value: () => translate('FilterEndsWith')\r\n },\r\n {\r\n key: filterTypes.NOT_ENDS_WITH,\r\n value: () => translate('FilterDoesNotEndWith')\r\n }\r\n ]\r\n};\r\n","export const BOOL = 'bool';\r\nexport const BYTES = 'bytes';\r\nexport const DATE = 'date';\r\nexport const DEFAULT = 'default';\r\nexport const HISTORY_EVENT_TYPE = 'historyEventType';\r\nexport const INDEXER = 'indexer';\r\nexport const LANGUAGE = 'language';\r\nexport const PROTOCOL = 'protocol';\r\nexport const QUALITY = 'quality';\r\nexport const QUALITY_PROFILE = 'qualityProfile';\r\nexport const QUEUE_STATUS = 'queueStatus';\r\nexport const MOVIE = 'movie';\r\nexport const RELEASE_STATUS = 'releaseStatus';\r\nexport const MINIMUM_AVAILABILITY = 'minimumAvailability';\r\nexport const TAG = 'tag';\r\nexport const IMPORTLIST = 'importList';\r\n","import * as filterTypes from './filterTypes';\r\n\r\nconst filterTypePredicates = {\r\n [filterTypes.CONTAINS]: function(itemValue, filterValue) {\r\n if (Array.isArray(itemValue)) {\r\n return itemValue.some((v) => v === filterValue);\r\n }\r\n\r\n return itemValue.toLowerCase().contains(filterValue.toLowerCase());\r\n },\r\n\r\n [filterTypes.EQUAL]: function(itemValue, filterValue) {\r\n return itemValue === filterValue;\r\n },\r\n\r\n [filterTypes.GREATER_THAN]: function(itemValue, filterValue) {\r\n return itemValue > filterValue;\r\n },\r\n\r\n [filterTypes.GREATER_THAN_OR_EQUAL]: function(itemValue, filterValue) {\r\n return itemValue >= filterValue;\r\n },\r\n\r\n [filterTypes.LESS_THAN]: function(itemValue, filterValue) {\r\n return itemValue < filterValue;\r\n },\r\n\r\n [filterTypes.LESS_THAN_OR_EQUAL]: function(itemValue, filterValue) {\r\n return itemValue <= filterValue;\r\n },\r\n\r\n [filterTypes.NOT_CONTAINS]: function(itemValue, filterValue) {\r\n if (Array.isArray(itemValue)) {\r\n return !itemValue.some((v) => v === filterValue);\r\n }\r\n\r\n return !itemValue.toLowerCase().contains(filterValue.toLowerCase());\r\n },\r\n\r\n [filterTypes.NOT_EQUAL]: function(itemValue, filterValue) {\r\n return itemValue !== filterValue;\r\n },\r\n\r\n [filterTypes.STARTS_WITH]: function(itemValue, filterValue) {\r\n return itemValue.toLowerCase().startsWith(filterValue.toLowerCase());\r\n },\r\n\r\n [filterTypes.NOT_STARTS_WITH]: function(itemValue, filterValue) {\r\n return !itemValue.toLowerCase().startsWith(filterValue.toLowerCase());\r\n },\r\n\r\n [filterTypes.ENDS_WITH]: function(itemValue, filterValue) {\r\n return itemValue.toLowerCase().endsWith(filterValue.toLowerCase());\r\n },\r\n\r\n [filterTypes.NOT_ENDS_WITH]: function(itemValue, filterValue) {\r\n return !itemValue.toLowerCase().endsWith(filterValue.toLowerCase());\r\n }\r\n};\r\n\r\nexport default filterTypePredicates;\r\n","//\r\n// Brands\r\nimport { faImdb as fabImdb } from '@fortawesome/free-brands-svg-icons';\r\n//\r\n// Regular\r\nimport {\r\n faBookmark as farBookmark,\r\n faCalendar as farCalendar,\r\n faCircle as farCircle,\r\n faClock as farClock,\r\n faClone as farClone,\r\n faDotCircle as farDotCircle,\r\n faFile as farFile,\r\n faFileArchive as farFileArchive,\r\n faFileVideo as farFileVideo,\r\n faFolder as farFolder,\r\n faHdd as farHdd,\r\n faHeart as farHeart,\r\n faKeyboard as farKeyboard,\r\n faObjectGroup as farObjectGroup,\r\n faObjectUngroup as farObjectUngroup,\r\n faSquare as farSquare,\r\n} from '@fortawesome/free-regular-svg-icons';\r\n//\r\n// Solid\r\nimport {\r\n faArrowCircleLeft as fasArrowCircleLeft,\r\n faArrowCircleRight as fasArrowCircleRight,\r\n faArrowTrendUp as fasArrowTrendUp,\r\n faAsterisk as fasAsterisk,\r\n faBackward as fasBackward,\r\n faBan as fasBan,\r\n faBars as fasBars,\r\n faBolt as fasBolt,\r\n faBookmark as fasBookmark,\r\n faBookReader as fasBookReader,\r\n faBroadcastTower as fasBroadcastTower,\r\n faBug as fasBug,\r\n faBuilding as fasBuilding,\r\n faBullhorn as fasBullhorn,\r\n faCalculator as fasCalculator,\r\n faCalendarAlt as fasCalendarAlt,\r\n faCaretDown as fasCaretDown,\r\n faCheck as fasCheck,\r\n faCheckCircle as fasCheckCircle,\r\n faChevronCircleDown as fasChevronCircleDown,\r\n faChevronCircleRight as fasChevronCircleRight,\r\n faChevronCircleUp as fasChevronCircleUp,\r\n faCircle as fasCircle,\r\n faCircleDown as fasCircleDown,\r\n faCloud as fasCloud,\r\n faCloudDownloadAlt as fasCloudDownloadAlt,\r\n faCog as fasCog,\r\n faCogs as fasCogs,\r\n faCompactDisc as fasCompactDisc,\r\n faCopy as fasCopy,\r\n faDesktop as fasDesktop,\r\n faDownload as fasDownload,\r\n faEllipsisH as fasEllipsisH,\r\n faExclamationCircle as fasExclamationCircle,\r\n faExclamationTriangle as fasExclamationTriangle,\r\n faExternalLinkAlt as fasExternalLinkAlt,\r\n faEye as fasEye,\r\n faFastBackward as fasFastBackward,\r\n faFastForward as fasFastForward,\r\n faFileCircleQuestion as fasFileCircleQuestion,\r\n faFileExport as fasFileExport,\r\n faFileInvoice as farFileInvoice,\r\n faFilm as fasFilm,\r\n faFilter as fasFilter,\r\n faFire as fasFire,\r\n faFlag as fasFlag,\r\n faFolderOpen as fasFolderOpen,\r\n faForward as fasForward,\r\n faHeart as fasHeart,\r\n faHistory as fasHistory,\r\n faHome as fasHome,\r\n faInfoCircle as fasInfoCircle,\r\n faLanguage as fasLanguage,\r\n faLaptop as fasLaptop,\r\n faLevelUpAlt as fasLevelUpAlt,\r\n faListCheck as fasListCheck,\r\n faMedkit as fasMedkit,\r\n faMinus as fasMinus,\r\n faPause as fasPause,\r\n faPlay as fasPlay,\r\n faPlus as fasPlus,\r\n faPowerOff as fasPowerOff,\r\n faQuestion as fasQuestion,\r\n faQuestionCircle as fasQuestionCircle,\r\n faRedoAlt as fasRedoAlt,\r\n faRetweet as fasRetweet,\r\n faRocket as fasRocket,\r\n faRss as fasRss,\r\n faSave as fasSave,\r\n faSearch as fasSearch,\r\n faSignOutAlt as fasSignOutAlt,\r\n faSitemap as fasSitemap,\r\n faSort as fasSort,\r\n faSortDown as fasSortDown,\r\n faSortUp as fasSortUp,\r\n faSpinner as fasSpinner,\r\n faSquareCheck as fasSquareCheck,\r\n faSquareMinus as fasSquareMinus,\r\n faStop as fasStop,\r\n faSync as fasSync,\r\n faTable as fasTable,\r\n faTags as fasTags,\r\n faTh as fasTh,\r\n faTheaterMasks as fasTheaterMasks,\r\n faThList as fasThList,\r\n faThumbsUp as fasThumbsUp,\r\n faTicketAlt as fasTicketAlt,\r\n faTimes as fasTimes,\r\n faTimesCircle as fasTimesCircle,\r\n faTrashAlt as fasTrashAlt,\r\n faUser as fasUser,\r\n faUserPlus as fasUserPlus,\r\n faVial as fasVial,\r\n faWrench as fasWrench,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\n//\r\n// Icons\r\n\r\nexport const ACTIONS = fasBolt;\r\nexport const ACTIVITY = farClock;\r\nexport const ADD = fasPlus;\r\nexport const ALTERNATE_TITLES = farClone;\r\nexport const ADVANCED_SETTINGS = fasCog;\r\nexport const ANNOUNCED = fasBullhorn;\r\nexport const ARROW_LEFT = fasArrowCircleLeft;\r\nexport const ARROW_RIGHT = fasArrowCircleRight;\r\nexport const BACKUP = farFileArchive;\r\nexport const BUG = fasBug;\r\nexport const CALENDAR = fasCalendarAlt;\r\nexport const CALENDAR_O = farCalendar;\r\nexport const CARET_DOWN = fasCaretDown;\r\nexport const CHECK = fasCheck;\r\nexport const CHECK_INDETERMINATE = fasMinus;\r\nexport const CHECK_CIRCLE = fasCheckCircle;\r\nexport const CHECK_SQUARE = fasSquareCheck;\r\nexport const CIRCLE = fasCircle;\r\nexport const CIRCLE_DOWN = fasCircleDown;\r\nexport const CIRCLE_OUTLINE = farCircle;\r\nexport const CLEAR = fasTrashAlt;\r\nexport const CLIPBOARD = fasCopy;\r\nexport const CLOSE = fasTimes;\r\nexport const CLONE = farClone;\r\nexport const COLLAPSE = fasChevronCircleUp;\r\nexport const COMPUTER = fasDesktop;\r\nexport const DANGER = fasExclamationCircle;\r\nexport const DELETE = fasTrashAlt;\r\nexport const DISC = fasCompactDisc;\r\nexport const DOWNLOAD = fasDownload;\r\nexport const DOWNLOADED = fasDownload;\r\nexport const DOWNLOADING = fasCloudDownloadAlt;\r\nexport const DRIVE = farHdd;\r\nexport const EDIT = fasWrench;\r\nexport const MOVIE_FILE = farFileVideo;\r\nexport const EXPAND = fasChevronCircleDown;\r\nexport const EXPAND_INDETERMINATE = fasChevronCircleRight;\r\nexport const EXPORT = fasFileExport;\r\nexport const EXTERNAL_LINK = fasExternalLinkAlt;\r\nexport const FATAL = fasTimesCircle;\r\nexport const FILE = farFile;\r\nexport const FILE_MISSING = fasFileCircleQuestion;\r\nexport const FILM = fasFilm;\r\nexport const FILTER = fasFilter;\r\nexport const FLAG = fasFlag;\r\nexport const FOOTNOTE = fasAsterisk;\r\nexport const FOLDER = farFolder;\r\nexport const FOLDER_OPEN = fasFolderOpen;\r\nexport const GENRE = fasTheaterMasks;\r\nexport const GROUP = farObjectGroup;\r\nexport const HEALTH = fasMedkit;\r\nexport const HEART = fasHeart;\r\nexport const HEART_OUTLINE = farHeart;\r\nexport const HISTORY = fasHistory;\r\nexport const HOUSEKEEPING = fasHome;\r\nexport const IGNORE = fasTimesCircle;\r\nexport const IMDB = fabImdb;\r\nexport const IN_CINEMAS = fasTicketAlt;\r\nexport const INFO = fasInfoCircle;\r\nexport const INTERACTIVE = fasUser;\r\nexport const KEYBOARD = farKeyboard;\r\nexport const LANGUAGE = fasLanguage;\r\nexport const LOGOUT = fasSignOutAlt;\r\nexport const MANAGE = fasListCheck;\r\nexport const MEDIA_INFO = farFileInvoice;\r\nexport const MISSING = fasExclamationTriangle;\r\nexport const MONITORED = fasBookmark;\r\nexport const NETWORK = fasBroadcastTower;\r\nexport const NAVBAR_COLLAPSE = fasBars;\r\nexport const NOT_AIRED = farClock;\r\nexport const ORGANIZE = fasSitemap;\r\nexport const OVERFLOW = fasEllipsisH;\r\nexport const OVERVIEW = fasThList;\r\nexport const PAGE_FIRST = fasFastBackward;\r\nexport const PAGE_PREVIOUS = fasBackward;\r\nexport const PAGE_NEXT = fasForward;\r\nexport const PAGE_LAST = fasFastForward;\r\nexport const PARENT = fasLevelUpAlt;\r\nexport const PARSE = fasCalculator;\r\nexport const PAUSED = fasPause;\r\nexport const PENDING = farClock;\r\nexport const PLAY = fasPlay;\r\nexport const PROFILE = fasUser;\r\nexport const POPULAR = fasFire;\r\nexport const POSTER = fasTh;\r\nexport const QUEUED = fasCloud;\r\nexport const QUICK = fasRocket;\r\nexport const RECOMMENDED = fasThumbsUp;\r\nexport const REFRESH = fasSync;\r\nexport const REMOVE = fasTimes;\r\nexport const RESTART = fasRedoAlt;\r\nexport const RESTORE = fasHistory;\r\nexport const REORDER = fasBars;\r\nexport const RSS = fasRss;\r\nexport const SAVE = fasSave;\r\nexport const SCHEDULED = farClock;\r\nexport const SCORE = fasUserPlus;\r\nexport const SEARCH = fasSearch;\r\nexport const MOVIE_CONTINUING = fasPlay;\r\nexport const SERIES_ENDED = fasStop;\r\nexport const MOVIE_DELETED = fasExclamationTriangle;\r\nexport const SETTINGS = fasCogs;\r\nexport const SHUTDOWN = fasPowerOff;\r\nexport const SORT = fasSort;\r\nexport const SORT_ASCENDING = fasSortUp;\r\nexport const SORT_DESCENDING = fasSortDown;\r\nexport const SPINNER = fasSpinner;\r\nexport const SQUARE = farSquare;\r\nexport const SQUARE_MINUS = fasSquareMinus;\r\nexport const STUDIO = fasBuilding;\r\nexport const SUBTRACT = fasMinus;\r\nexport const SYSTEM = fasLaptop;\r\nexport const TABLE = fasTable;\r\nexport const TAGS = fasTags;\r\nexport const TBA = fasQuestionCircle;\r\nexport const TEST = fasVial;\r\nexport const TRANSLATE = fasLanguage;\r\nexport const TRENDING = fasArrowTrendUp;\r\nexport const UNGROUP = farObjectUngroup;\r\nexport const UNKNOWN = fasQuestion;\r\nexport const UNMONITORED = farBookmark;\r\nexport const UPDATE = fasRetweet;\r\nexport const UNSAVED_SETTING = farDotCircle;\r\nexport const VIEW = fasEye;\r\nexport const WARNING = fasExclamationTriangle;\r\nexport const WIKI = fasBookReader;\r\nexport const BLOCKLIST = fasBan;\r\n","export const AUTO_COMPLETE = 'autoComplete';\r\nexport const AVAILABILITY_SELECT = 'availabilitySelect';\r\nexport const CAPTCHA = 'captcha';\r\nexport const CHECK = 'check';\r\nexport const DEVICE = 'device';\r\nexport const KEY_VALUE_LIST = 'keyValueList';\r\nexport const MOVIE_MONITORED_SELECT = 'movieMonitoredSelect';\r\nexport const FLOAT = 'float';\r\nexport const NUMBER = 'number';\r\nexport const OAUTH = 'oauth';\r\nexport const PASSWORD = 'password';\r\nexport const PATH = 'path';\r\nexport const QUALITY_PROFILE_SELECT = 'qualityProfileSelect';\r\nexport const INDEXER_SELECT = 'indexerSelect';\r\nexport const ROOT_FOLDER_SELECT = 'rootFolderSelect';\r\nexport const INDEXER_FLAGS_SELECT = 'indexerFlagsSelect';\r\nexport const LANGUAGE_SELECT = 'languageSelect';\r\nexport const DOWNLOAD_CLIENT_SELECT = 'downloadClientSelect';\r\nexport const SELECT = 'select';\r\nexport const MOVIE_TAG = 'movieTag';\r\nexport const DYNAMIC_SELECT = 'dynamicSelect';\r\nexport const TAG = 'tag';\r\nexport const TEXT = 'text';\r\nexport const TEXT_AREA = 'textArea';\r\nexport const TEXT_TAG = 'textTag';\r\nexport const TAG_SELECT = 'tagSelect';\r\nexport const UMASK = 'umask';\r\n\r\nexport const all = [\r\n AUTO_COMPLETE,\r\n AVAILABILITY_SELECT,\r\n CAPTCHA,\r\n CHECK,\r\n DEVICE,\r\n KEY_VALUE_LIST,\r\n MOVIE_MONITORED_SELECT,\r\n FLOAT,\r\n NUMBER,\r\n OAUTH,\r\n PASSWORD,\r\n PATH,\r\n QUALITY_PROFILE_SELECT,\r\n INDEXER_SELECT,\r\n DOWNLOAD_CLIENT_SELECT,\r\n ROOT_FOLDER_SELECT,\r\n INDEXER_FLAGS_SELECT,\r\n LANGUAGE_SELECT,\r\n SELECT,\r\n MOVIE_TAG,\r\n DYNAMIC_SELECT,\r\n TAG,\r\n TEXT,\r\n TEXT_AREA,\r\n TEXT_TAG,\r\n TAG_SELECT,\r\n UMASK\r\n];\r\n","export const DANGER = 'danger';\r\nexport const DEFAULT = 'default';\r\nexport const DELETE = 'delete';\r\nexport const DISABLED = 'disabled';\r\nexport const INFO = 'info';\r\nexport const INVERSE = 'inverse';\r\nexport const PINK = 'pink';\r\nexport const PRIMARY = 'primary';\r\nexport const PURPLE = 'purple';\r\nexport const SUCCESS = 'success';\r\nexport const WARNING = 'warning';\r\nexport const QUEUE = 'queue';\r\n\r\nexport const all = [\r\n DANGER,\r\n DEFAULT,\r\n DELETE,\r\n DISABLED,\r\n INFO,\r\n INVERSE,\r\n PINK,\r\n PRIMARY,\r\n PURPLE,\r\n SUCCESS,\r\n WARNING,\r\n QUEUE,\r\n] as const;\r\n\r\nexport type Kind =\r\n | 'danger'\r\n | 'default'\r\n | 'disabled'\r\n | 'info'\r\n | 'inverse'\r\n | 'pink'\r\n | 'primary'\r\n | 'purple'\r\n | 'success'\r\n | 'warning'\r\n | 'queue';\r\n","export const NONE = 'none';\r\nexport const BOTH = 'both';\r\nexport const HORIZONTAL = 'horizontal';\r\nexport const VERTICAL = 'vertical';\r\n\r\nexport const all = [NONE, HORIZONTAL, VERTICAL, BOTH];\r\n\r\nexport type ScrollDirection = 'none' | 'both' | 'horizontal' | 'vertical';\r\n","export const EXTRA_SMALL = 'extraSmall';\r\nexport const SMALL = 'small';\r\nexport const MEDIUM = 'medium';\r\nexport const LARGE = 'large';\r\nexport const EXTRA_LARGE = 'extraLarge';\r\nexport const EXTRA_EXTRA_LARGE = 'extraExtraLarge';\r\n\r\nexport const all = [\r\n EXTRA_SMALL,\r\n SMALL,\r\n MEDIUM,\r\n LARGE,\r\n EXTRA_LARGE,\r\n EXTRA_EXTRA_LARGE,\r\n] as const;\r\n\r\nexport type Size =\r\n | 'extraSmall'\r\n | 'small'\r\n | 'medium'\r\n | 'large'\r\n | 'extraLarge'\r\n | 'extraExtraLarge';\r\n","export const ASCENDING = 'ascending';\r\nexport const DESCENDING = 'descending';\r\n\r\nexport const all = [ASCENDING, DESCENDING];\r\n\r\nexport type SortDirection = 'ascending' | 'descending';\r\n","export const TOP = 'top';\r\nexport const RIGHT = 'right';\r\nexport const BOTTOM = 'bottom';\r\nexport const LEFT = 'left';\r\n\r\nexport const all = [TOP, RIGHT, BOTTOM, LEFT];\r\n\r\nexport type TooltipPosition = 'top' | 'right' | 'bottom' | 'left';\r\n","const serverSideCollectionHandlers = {\r\n FETCH: 'fetch',\r\n FIRST_PAGE: 'firstPage',\r\n PREVIOUS_PAGE: 'previousPage',\r\n NEXT_PAGE: 'nextPage',\r\n LAST_PAGE: 'lastPage',\r\n EXACT_PAGE: 'exactPage',\r\n SORT: 'sort',\r\n FILTER: 'filter'\r\n};\r\n\r\nexport default serverSideCollectionHandlers;\r\n","import $ from 'jquery';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { removeItem, set } from '../baseActions';\r\n\r\nfunction createRemoveItemHandler(section, url) {\r\n return function(getState, payload, dispatch) {\r\n const {\r\n id,\r\n queryParams\r\n } = payload;\r\n\r\n dispatch(set({ section, isDeleting: true }));\r\n\r\n const ajaxOptions = {\r\n url: `${url}/${id}?${$.param(queryParams, true)}`,\r\n method: 'DELETE'\r\n };\r\n\r\n const promise = createAjaxRequest(ajaxOptions).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n set({\r\n section,\r\n isDeleting: false,\r\n deleteError: null\r\n }),\r\n\r\n removeItem({ section, id })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isDeleting: false,\r\n deleteError: xhr\r\n }));\r\n });\r\n\r\n return promise;\r\n };\r\n}\r\n\r\nexport default createRemoveItemHandler;\r\n","const pages = {\r\n FIRST: 'first',\r\n PREVIOUS: 'previous',\r\n NEXT: 'next',\r\n LAST: 'last',\r\n EXACT: 'exact'\r\n};\r\n\r\nexport default pages;\r\n","export default function findSelectedFilters(selectedFilterKey, filters = [], customFilters = []) {\r\n if (!selectedFilterKey) {\r\n return [];\r\n }\r\n\r\n let selectedFilter = filters.find((f) => f.key === selectedFilterKey);\r\n\r\n if (!selectedFilter) {\r\n selectedFilter = customFilters.find((f) => f.id === selectedFilterKey);\r\n }\r\n\r\n if (!selectedFilter) {\r\n // TODO: throw in dev\r\n console.error('Matching filter not found');\r\n return [];\r\n }\r\n\r\n return selectedFilter.filters;\r\n}\r\n","import _ from 'lodash';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport findSelectedFilters from 'Utilities/Filter/findSelectedFilters';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport { set, updateServerSideCollection } from '../baseActions';\r\n\r\nfunction createFetchServerSideCollectionHandler(section, url, fetchDataAugmenter) {\r\n const [baseSection] = section.split('.');\r\n\r\n return function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const sectionState = getSectionState(getState(), section, true);\r\n const page = payload.page || sectionState.page || 1;\r\n\r\n const data = Object.assign({ page },\r\n _.pick(sectionState, [\r\n 'pageSize',\r\n 'sortDirection',\r\n 'sortKey'\r\n ]));\r\n\r\n if (fetchDataAugmenter) {\r\n fetchDataAugmenter(getState, payload, data);\r\n }\r\n\r\n const {\r\n selectedFilterKey,\r\n filters\r\n } = sectionState;\r\n\r\n const customFilters = getState().customFilters.items.filter((customFilter) => {\r\n return customFilter.type === section || customFilter.type === baseSection;\r\n });\r\n\r\n const selectedFilters = findSelectedFilters(selectedFilterKey, filters, customFilters);\r\n\r\n selectedFilters.forEach((filter) => {\r\n data[filter.key] = filter.value;\r\n });\r\n\r\n const promise = createAjaxRequest({\r\n url,\r\n data,\r\n traditional: true\r\n }).request;\r\n\r\n promise.done((response) => {\r\n dispatch(batchActions([\r\n updateServerSideCollection({ section, data: response }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n });\r\n };\r\n}\r\n\r\nexport default createFetchServerSideCollectionHandler;\r\n","import pages from 'Utilities/pages';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\n\r\nfunction createSetServerSideCollectionPageHandler(section, page, fetchHandler) {\r\n return function(getState, payload, dispatch) {\r\n const sectionState = getSectionState(getState(), section, true);\r\n const currentPage = sectionState.page || 1;\r\n let nextPage = 0;\r\n\r\n switch (page) {\r\n case pages.FIRST:\r\n nextPage = 1;\r\n break;\r\n case pages.PREVIOUS:\r\n nextPage = currentPage - 1;\r\n break;\r\n case pages.NEXT:\r\n nextPage = currentPage + 1;\r\n break;\r\n case pages.LAST:\r\n nextPage = sectionState.totalPages;\r\n break;\r\n default:\r\n nextPage = payload.page;\r\n }\r\n\r\n // If we prefer to update the page immediately we should\r\n // set the page and not pass a page to the fetch handler.\r\n\r\n // dispatch(set({ section, page: nextPage }));\r\n dispatch(fetchHandler({ page: nextPage }));\r\n };\r\n}\r\n\r\nexport default createSetServerSideCollectionPageHandler;\r\n","import pages from 'Utilities/pages';\r\nimport serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';\r\nimport createFetchServerSideCollectionHandler from './createFetchServerSideCollectionHandler';\r\nimport createSetServerSideCollectionFilterHandler from './createSetServerSideCollectionFilterHandler';\r\nimport createSetServerSideCollectionPageHandler from './createSetServerSideCollectionPageHandler';\r\nimport createSetServerSideCollectionSortHandler from './createSetServerSideCollectionSortHandler';\r\n\r\nfunction createServerSideCollectionHandlers(section, url, fetchThunk, handlers, fetchDataAugmenter) {\r\n const actionHandlers = {};\r\n const fetchHandlerType = handlers[serverSideCollectionHandlers.FETCH];\r\n const fetchHandler = createFetchServerSideCollectionHandler(section, url, fetchDataAugmenter);\r\n actionHandlers[fetchHandlerType] = fetchHandler;\r\n\r\n if (handlers.hasOwnProperty(serverSideCollectionHandlers.FIRST_PAGE)) {\r\n const handlerType = handlers[serverSideCollectionHandlers.FIRST_PAGE];\r\n actionHandlers[handlerType] = createSetServerSideCollectionPageHandler(section, pages.FIRST, fetchThunk);\r\n }\r\n\r\n if (handlers.hasOwnProperty(serverSideCollectionHandlers.PREVIOUS_PAGE)) {\r\n const handlerType = handlers[serverSideCollectionHandlers.PREVIOUS_PAGE];\r\n actionHandlers[handlerType] = createSetServerSideCollectionPageHandler(section, pages.PREVIOUS, fetchThunk);\r\n }\r\n\r\n if (handlers.hasOwnProperty(serverSideCollectionHandlers.NEXT_PAGE)) {\r\n const handlerType = handlers[serverSideCollectionHandlers.NEXT_PAGE];\r\n actionHandlers[handlerType] = createSetServerSideCollectionPageHandler(section, pages.NEXT, fetchThunk);\r\n }\r\n\r\n if (handlers.hasOwnProperty(serverSideCollectionHandlers.LAST_PAGE)) {\r\n const handlerType = handlers[serverSideCollectionHandlers.LAST_PAGE];\r\n actionHandlers[handlerType] = createSetServerSideCollectionPageHandler(section, pages.LAST, fetchThunk);\r\n }\r\n\r\n if (handlers.hasOwnProperty(serverSideCollectionHandlers.EXACT_PAGE)) {\r\n const handlerType = handlers[serverSideCollectionHandlers.EXACT_PAGE];\r\n actionHandlers[handlerType] = createSetServerSideCollectionPageHandler(section, pages.EXACT, fetchThunk);\r\n }\r\n\r\n if (handlers.hasOwnProperty(serverSideCollectionHandlers.SORT)) {\r\n const handlerType = handlers[serverSideCollectionHandlers.SORT];\r\n actionHandlers[handlerType] = createSetServerSideCollectionSortHandler(section, fetchThunk);\r\n }\r\n\r\n if (handlers.hasOwnProperty(serverSideCollectionHandlers.FILTER)) {\r\n const handlerType = handlers[serverSideCollectionHandlers.FILTER];\r\n actionHandlers[handlerType] = createSetServerSideCollectionFilterHandler(section, fetchThunk);\r\n }\r\n\r\n return actionHandlers;\r\n}\r\n\r\nexport default createServerSideCollectionHandlers;\r\n","import { sortDirections } from 'Helpers/Props';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport { set } from '../baseActions';\r\n\r\nfunction createSetServerSideCollectionSortHandler(section, fetchHandler) {\r\n return function(getState, payload, dispatch) {\r\n const sectionState = getSectionState(getState(), section, true);\r\n const sortKey = payload.sortKey || sectionState.sortKey;\r\n let sortDirection = payload.sortDirection;\r\n\r\n if (!sortDirection) {\r\n if (payload.sortKey === sectionState.sortKey) {\r\n sortDirection = sectionState.sortDirection === sortDirections.ASCENDING ?\r\n sortDirections.DESCENDING :\r\n sortDirections.ASCENDING;\r\n } else {\r\n sortDirection = sectionState.sortDirection;\r\n }\r\n }\r\n\r\n dispatch(set({ section, sortKey, sortDirection }));\r\n dispatch(fetchHandler());\r\n };\r\n}\r\n\r\nexport default createSetServerSideCollectionSortHandler;\r\n","import { set } from '../baseActions';\r\n\r\nfunction createSetServerSideCollectionFilterHandler(section, fetchHandler) {\r\n return function(getState, payload, dispatch) {\r\n dispatch(set({ section, ...payload }));\r\n dispatch(fetchHandler({ page: 1 }));\r\n };\r\n}\r\n\r\nexport default createSetServerSideCollectionFilterHandler;\r\n","import getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\nfunction createClearReducer(section, defaultState) {\r\n return (state) => {\r\n const newState = Object.assign(getSectionState(state, section), defaultState);\r\n\r\n return updateSectionState(state, section, newState);\r\n };\r\n}\r\n\r\nexport default createClearReducer;\r\n","import _ from 'lodash';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\nconst whitelistedProperties = [\r\n 'pageSize',\r\n 'columns',\r\n 'tableOptions'\r\n];\r\n\r\nfunction createSetTableOptionReducer(section) {\r\n return (state, { payload }) => {\r\n const newState = Object.assign(\r\n getSectionState(state, section),\r\n _.pick(payload, whitelistedProperties));\r\n\r\n return updateSectionState(state, section, newState);\r\n };\r\n}\r\n\r\nexport default createSetTableOptionReducer;\r\n","import { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, sortDirections } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';\r\nimport translate from 'Utilities/String/translate';\r\nimport { set, updateItem } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createRemoveItemHandler from './Creators/createRemoveItemHandler';\r\nimport createServerSideCollectionHandlers from './Creators/createServerSideCollectionHandlers';\r\nimport createClearReducer from './Creators/Reducers/createClearReducer';\r\nimport createSetTableOptionReducer from './Creators/Reducers/createSetTableOptionReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'blocklist';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n pageSize: 20,\r\n sortKey: 'date',\r\n sortDirection: sortDirections.DESCENDING,\r\n error: null,\r\n items: [],\r\n isRemoving: false,\r\n\r\n columns: [\r\n {\r\n name: 'movieMetadata.sortTitle',\r\n label: () => translate('MovieTitle'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'sourceTitle',\r\n label: () => translate('SourceTitle'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'quality',\r\n label: () => translate('Quality'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'customFormats',\r\n label: () => translate('Formats'),\r\n isSortable: false,\r\n isVisible: true\r\n },\r\n {\r\n name: 'date',\r\n label: () => translate('Date'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'indexer',\r\n label: () => translate('Indexer'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'actions',\r\n columnLabel: () => translate('Actions'),\r\n isVisible: true,\r\n isModifiable: false\r\n }\r\n ],\r\n\r\n selectedFilterKey: 'all',\r\n\r\n filters: [\r\n {\r\n key: 'all',\r\n label: () => translate('All'),\r\n filters: []\r\n }\r\n ],\r\n\r\n filterBuilderProps: [\r\n {\r\n name: 'movieIds',\r\n label: () => translate('Movie'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.MOVIE\r\n },\r\n {\r\n name: 'protocols',\r\n label: () => translate('Protocol'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.PROTOCOL\r\n }\r\n ]\r\n};\r\n\r\nexport const persistState = [\r\n 'blocklist.pageSize',\r\n 'blocklist.sortKey',\r\n 'blocklist.sortDirection',\r\n 'blocklist.selectedFilterKey',\r\n 'blocklist.columns'\r\n];\r\n\r\n//\r\n// Action Types\r\n\r\nexport const FETCH_BLOCKLIST = 'blocklist/fetchBlocklist';\r\nexport const GOTO_BLOCKLIST_PAGE = 'blocklist/gotoBlocklistPage';\r\nexport const SET_BLOCKLIST_SORT = 'blocklist/setBlocklistSort';\r\nexport const SET_BLOCKLIST_FILTER = 'blocklist/setBlocklistFilter';\r\nexport const SET_BLOCKLIST_TABLE_OPTION = 'blocklist/setBlocklistTableOption';\r\nexport const REMOVE_BLOCKLIST_ITEM = 'blocklist/removeBlocklistItem';\r\nexport const REMOVE_BLOCKLIST_ITEMS = 'blocklist/removeBlocklistItems';\r\nexport const CLEAR_BLOCKLIST = 'blocklist/clearBlocklist';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchBlocklist = createThunk(FETCH_BLOCKLIST);\r\nexport const gotoBlocklistPage = createThunk(GOTO_BLOCKLIST_PAGE);\r\nexport const setBlocklistSort = createThunk(SET_BLOCKLIST_SORT);\r\nexport const setBlocklistFilter = createThunk(SET_BLOCKLIST_FILTER);\r\nexport const setBlocklistTableOption = createAction(SET_BLOCKLIST_TABLE_OPTION);\r\nexport const removeBlocklistItem = createThunk(REMOVE_BLOCKLIST_ITEM);\r\nexport const removeBlocklistItems = createThunk(REMOVE_BLOCKLIST_ITEMS);\r\nexport const clearBlocklist = createAction(CLEAR_BLOCKLIST);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n ...createServerSideCollectionHandlers(\r\n section,\r\n '/blocklist',\r\n fetchBlocklist,\r\n {\r\n [serverSideCollectionHandlers.FETCH]: FETCH_BLOCKLIST,\r\n [serverSideCollectionHandlers.EXACT_PAGE]: GOTO_BLOCKLIST_PAGE,\r\n [serverSideCollectionHandlers.SORT]: SET_BLOCKLIST_SORT,\r\n [serverSideCollectionHandlers.FILTER]: SET_BLOCKLIST_FILTER\r\n }),\r\n\r\n [REMOVE_BLOCKLIST_ITEM]: createRemoveItemHandler(section, '/blocklist'),\r\n\r\n [REMOVE_BLOCKLIST_ITEMS]: function(getState, payload, dispatch) {\r\n const {\r\n ids\r\n } = payload;\r\n\r\n dispatch(batchActions([\r\n ...ids.map((id) => {\r\n return updateItem({\r\n section,\r\n id,\r\n isRemoving: true\r\n });\r\n }),\r\n\r\n set({ section, isRemoving: true })\r\n ]));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/blocklist/bulk',\r\n method: 'DELETE',\r\n dataType: 'json',\r\n contentType: 'application/json',\r\n data: JSON.stringify({ ids })\r\n }).request;\r\n\r\n promise.done((data) => {\r\n // Don't use batchActions with thunks\r\n dispatch(fetchBlocklist());\r\n\r\n dispatch(set({ section, isRemoving: false }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(batchActions([\r\n ...ids.map((id) => {\r\n return updateItem({\r\n section,\r\n id,\r\n isRemoving: false\r\n });\r\n }),\r\n\r\n set({ section, isRemoving: false })\r\n ]));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_BLOCKLIST_TABLE_OPTION]: createSetTableOptionReducer(section),\r\n\r\n [CLEAR_BLOCKLIST]: createClearReducer(section, {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n totalPages: 0,\r\n totalRecords: 0\r\n })\r\n\r\n}, defaultState, section);\r\n","export const DAY = 'day';\r\nexport const WEEK = 'week';\r\nexport const MONTH = 'month';\r\nexport const FORECAST = 'forecast';\r\nexport const AGENDA = 'agenda';\r\n\r\nexport const all = [DAY, WEEK, MONTH, FORECAST, AGENDA];\r\n","export const APPLICATION_UPDATE = 'ApplicationUpdate';\r\nexport const BACKUP = 'Backup';\r\nexport const REFRESH_MONITORED_DOWNLOADS = 'RefreshMonitoredDownloads';\r\nexport const CLEAR_BLOCKLIST = 'ClearBlocklist';\r\nexport const CLEAR_LOGS = 'ClearLog';\r\nexport const CUTOFF_UNMET_MOVIES_SEARCH = 'CutoffUnmetMoviesSearch';\r\nexport const DELETE_LOG_FILES = 'DeleteLogFiles';\r\nexport const DELETE_UPDATE_LOG_FILES = 'DeleteUpdateLogFiles';\r\nexport const DOWNLOADED_MOVIES_SCAN = 'DownloadedMoviesScan';\r\nexport const INTERACTIVE_IMPORT = 'ManualImport';\r\nexport const MISSING_MOVIES_SEARCH = 'MissingMoviesSearch';\r\nexport const MOVE_MOVIE = 'MoveMovie';\r\nexport const REFRESH_COLLECTIONS = 'RefreshCollections';\r\nexport const REFRESH_MOVIE = 'RefreshMovie';\r\nexport const RENAME_FILES = 'RenameFiles';\r\nexport const RENAME_MOVIE = 'RenameMovie';\r\nexport const RESET_API_KEY = 'ResetApiKey';\r\nexport const RESET_QUALITY_DEFINITIONS = 'ResetQualityDefinitions';\r\nexport const RSS_SYNC = 'RssSync';\r\nexport const MOVIE_SEARCH = 'MoviesSearch';\r\nexport const IMPORT_LIST_SYNC = 'ImportListSync';\r\n","import _ from 'lodash';\r\n\r\nfunction isSameCommand(commandA, commandB) {\r\n if (commandA.name.toLocaleLowerCase() !== commandB.name.toLocaleLowerCase()) {\r\n return false;\r\n }\r\n\r\n for (const key in commandB) {\r\n if (key !== 'name') {\r\n const value = commandB[key];\r\n if (Array.isArray(value)) {\r\n if (_.difference(value, commandA[key]).length > 0) {\r\n return false;\r\n }\r\n } else if (value !== commandA[key]) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport default isSameCommand;\r\n","import _ from 'lodash';\r\nimport isSameCommand from './isSameCommand';\r\n\r\nfunction findCommand(commands, options) {\r\n return _.findLast(commands, (command) => {\r\n return isSameCommand(command.body, options);\r\n });\r\n}\r\n\r\nexport default findCommand;\r\n","function isCommandExecuting(command) {\r\n if (!command) {\r\n return false;\r\n }\r\n\r\n return command.status === 'queued' || command.status === 'started';\r\n}\r\n\r\nexport default isCommandExecuting;\r\n","import { batchActions } from 'redux-batched-actions';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set, update, updateItem } from '../baseActions';\r\n\r\nexport default function createFetchHandler(section, url) {\r\n return function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const {\r\n id,\r\n ...otherPayload\r\n } = payload;\r\n\r\n const { request, abortRequest } = createAjaxRequest({\r\n url: id == null ? url : `${url}/${id}`,\r\n data: otherPayload,\r\n traditional: true\r\n });\r\n\r\n request.done((data) => {\r\n dispatch(batchActions([\r\n id == null ? update({ section, data }) : updateItem({ section, ...data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n request.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr.aborted ? null : xhr\r\n }));\r\n });\r\n\r\n return abortRequest;\r\n };\r\n}\r\n","import { batchActions } from 'redux-batched-actions';\r\nimport { messageTypes } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport { isSameCommand } from 'Utilities/Command';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { hideMessage, showMessage } from './appActions';\r\nimport { removeItem, updateItem } from './baseActions';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createRemoveItemHandler from './Creators/createRemoveItemHandler';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'commands';\r\n\r\nlet lastCommand = null;\r\nlet lastCommandTimeout = null;\r\nconst removeCommandTimeoutIds = {};\r\nconst commandFinishedCallbacks = {};\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n handlers: {}\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_COMMANDS = 'commands/fetchCommands';\r\nexport const EXECUTE_COMMAND = 'commands/executeCommand';\r\nexport const CANCEL_COMMAND = 'commands/cancelCommand';\r\nexport const ADD_COMMAND = 'commands/addCommand';\r\nexport const UPDATE_COMMAND = 'commands/updateCommand';\r\nexport const FINISH_COMMAND = 'commands/finishCommand';\r\nexport const REMOVE_COMMAND = 'commands/removeCommand';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchCommands = createThunk(FETCH_COMMANDS);\r\nexport const executeCommand = createThunk(EXECUTE_COMMAND);\r\nexport const cancelCommand = createThunk(CANCEL_COMMAND);\r\nexport const addCommand = createThunk(ADD_COMMAND);\r\nexport const updateCommand = createThunk(UPDATE_COMMAND);\r\nexport const finishCommand = createThunk(FINISH_COMMAND);\r\nexport const removeCommand = createThunk(REMOVE_COMMAND);\r\n\r\n//\r\n// Helpers\r\n\r\nfunction showCommandMessage(payload, dispatch) {\r\n const {\r\n id,\r\n name,\r\n trigger,\r\n message,\r\n body = {},\r\n status\r\n } = payload;\r\n\r\n const {\r\n sendUpdatesToClient,\r\n suppressMessages\r\n } = body;\r\n\r\n if (!message || !body || !sendUpdatesToClient || suppressMessages) {\r\n return;\r\n }\r\n\r\n let type = messageTypes.INFO;\r\n let hideAfter = 0;\r\n\r\n if (status === 'completed') {\r\n type = messageTypes.SUCCESS;\r\n hideAfter = 4;\r\n } else if (status === 'failed') {\r\n type = messageTypes.ERROR;\r\n hideAfter = trigger === 'manual' ? 10 : 4;\r\n }\r\n\r\n dispatch(showMessage({\r\n id,\r\n name,\r\n message,\r\n type,\r\n hideAfter\r\n }));\r\n}\r\n\r\nfunction scheduleRemoveCommand(command, dispatch) {\r\n const {\r\n id,\r\n status\r\n } = command;\r\n\r\n if (status === 'queued') {\r\n return;\r\n }\r\n\r\n const timeoutId = removeCommandTimeoutIds[id];\r\n\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n removeCommandTimeoutIds[id] = setTimeout(() => {\r\n dispatch(batchActions([\r\n removeCommand({ section: 'commands', id }),\r\n hideMessage({ id })\r\n ]));\r\n\r\n delete removeCommandTimeoutIds[id];\r\n }, 60000 * 5);\r\n}\r\n\r\nexport function executeCommandHelper(payload, dispatch) {\r\n // TODO: show a message for the user\r\n if (lastCommand && isSameCommand(lastCommand, payload)) {\r\n console.warn('Please wait at least 5 seconds before running this command again');\r\n }\r\n\r\n lastCommand = payload;\r\n\r\n // clear last command after 5 seconds.\r\n if (lastCommandTimeout) {\r\n clearTimeout(lastCommandTimeout);\r\n }\r\n\r\n lastCommandTimeout = setTimeout(() => {\r\n lastCommand = null;\r\n }, 5000);\r\n\r\n const {\r\n commandFinished,\r\n ...requestPayload\r\n } = payload;\r\n\r\n const promise = createAjaxRequest({\r\n url: '/command',\r\n method: 'POST',\r\n data: JSON.stringify(requestPayload),\r\n dataType: 'json'\r\n }).request;\r\n\r\n return promise.then((data) => {\r\n if (commandFinished) {\r\n commandFinishedCallbacks[data.id] = commandFinished;\r\n }\r\n\r\n dispatch(addCommand(data));\r\n });\r\n}\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_COMMANDS]: createFetchHandler('commands', '/command'),\r\n\r\n [EXECUTE_COMMAND]: function(getState, payload, dispatch) {\r\n executeCommandHelper(payload, dispatch);\r\n },\r\n\r\n [CANCEL_COMMAND]: createRemoveItemHandler(section, '/command'),\r\n\r\n [ADD_COMMAND]: function(getState, payload, dispatch) {\r\n dispatch(updateItem({ section: 'commands', ...payload }));\r\n },\r\n\r\n [UPDATE_COMMAND]: function(getState, payload, dispatch) {\r\n dispatch(updateItem({ section: 'commands', ...payload }));\r\n\r\n showCommandMessage(payload, dispatch);\r\n scheduleRemoveCommand(payload, dispatch);\r\n },\r\n\r\n [FINISH_COMMAND]: function(getState, payload, dispatch) {\r\n const state = getState();\r\n const handlers = state.commands.handlers;\r\n\r\n Object.keys(handlers).forEach((key) => {\r\n const handler = handlers[key];\r\n\r\n if (handler.name === payload.name) {\r\n dispatch(handler.handler(payload));\r\n }\r\n });\r\n\r\n const commandFinished = commandFinishedCallbacks[payload.id];\r\n\r\n if (commandFinished) {\r\n commandFinished(payload);\r\n }\r\n\r\n delete commandFinishedCallbacks[payload.id];\r\n\r\n dispatch(updateItem({ section: 'commands', ...payload }));\r\n scheduleRemoveCommand(payload, dispatch);\r\n showCommandMessage(payload, dispatch);\r\n },\r\n\r\n [REMOVE_COMMAND]: function(getState, payload, dispatch) {\r\n dispatch(removeItem({ section: 'commands', ...payload }));\r\n }\r\n\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({}, defaultState, section);\r\n","export const ERROR = 'error';\r\nexport const INFO = 'info';\r\nexport const SUCCESS = 'success';\r\nexport const WARNING = 'warning';\r\n\r\nexport const all = [\r\n ERROR,\r\n INFO,\r\n SUCCESS,\r\n WARNING\r\n];\r\n","import _ from 'lodash';\r\nimport moment from 'moment';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport * as calendarViews from 'Calendar/calendarViews';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, filterTypes } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport findSelectedFilters from 'Utilities/Filter/findSelectedFilters';\r\nimport translate from 'Utilities/String/translate';\r\nimport { set, update } from './baseActions';\r\nimport { executeCommandHelper } from './commandActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createClearReducer from './Creators/Reducers/createClearReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'calendar';\r\n\r\nconst viewRanges = {\r\n [calendarViews.DAY]: 'day',\r\n [calendarViews.WEEK]: 'week',\r\n [calendarViews.MONTH]: 'month',\r\n [calendarViews.FORECAST]: 'day'\r\n};\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n start: null,\r\n end: null,\r\n dates: [],\r\n dayCount: 7,\r\n view: window.innerWidth > 768 ? 'month' : 'day',\r\n error: null,\r\n items: [],\r\n searchMissingCommandId: null,\r\n\r\n options: {\r\n showMovieInformation: true,\r\n showCutoffUnmetIcon: false,\r\n fullColorEvents: false\r\n },\r\n\r\n selectedFilterKey: 'monitored',\r\n\r\n filters: [\r\n {\r\n key: 'all',\r\n label: () => translate('All'),\r\n filters: [\r\n {\r\n key: 'unmonitored',\r\n value: [true],\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'monitored',\r\n label: () => translate('MonitoredOnly'),\r\n filters: [\r\n {\r\n key: 'unmonitored',\r\n value: [false],\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n }\r\n ],\r\n\r\n filterBuilderProps: [\r\n {\r\n name: 'unmonitored',\r\n label: () => translate('IncludeUnmonitored'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.BOOL\r\n },\r\n {\r\n name: 'tags',\r\n label: () => translate('Tags'),\r\n type: filterBuilderTypes.CONTAINS,\r\n valueType: filterBuilderValueTypes.TAG\r\n }\r\n ]\r\n};\r\n\r\nexport const persistState = [\r\n 'calendar.view',\r\n 'calendar.selectedFilterKey',\r\n 'calendar.options',\r\n 'movieIndex.customFilters'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_CALENDAR = 'calendar/fetchCalendar';\r\nexport const SET_CALENDAR_DAYS_COUNT = 'calendar/setCalendarDaysCount';\r\nexport const SET_CALENDAR_FILTER = 'calendar/setCalendarFilter';\r\nexport const SET_CALENDAR_VIEW = 'calendar/setCalendarView';\r\nexport const GOTO_CALENDAR_TODAY = 'calendar/gotoCalendarToday';\r\nexport const GOTO_CALENDAR_NEXT_RANGE = 'calendar/gotoCalendarNextRange';\r\nexport const CLEAR_CALENDAR = 'calendar/clearCalendar';\r\nexport const SET_CALENDAR_OPTION = 'calendar/setCalendarOption';\r\nexport const SEARCH_MISSING = 'calendar/searchMissing';\r\nexport const GOTO_CALENDAR_PREVIOUS_RANGE = 'calendar/gotoCalendarPreviousRange';\r\n\r\n//\r\n// Helpers\r\n\r\nfunction getDays(start, end) {\r\n const startTime = moment(start);\r\n const endTime = moment(end);\r\n const difference = endTime.diff(startTime, 'days');\r\n\r\n // Difference is one less than the number of days we need to account for.\r\n return _.times(difference + 1, (i) => {\r\n return startTime.clone().add(i, 'days').toISOString();\r\n });\r\n}\r\n\r\nfunction getDates(time, view, firstDayOfWeek, dayCount) {\r\n const weekName = firstDayOfWeek === 0 ? 'week' : 'isoWeek';\r\n\r\n let start = time.clone().startOf('day');\r\n let end = time.clone().endOf('day');\r\n\r\n if (view === calendarViews.WEEK) {\r\n start = time.clone().startOf(weekName);\r\n end = time.clone().endOf(weekName);\r\n }\r\n\r\n if (view === calendarViews.FORECAST) {\r\n start = time.clone().subtract(1, 'day').startOf('day');\r\n end = time.clone().add(dayCount - 2, 'days').endOf('day');\r\n }\r\n\r\n if (view === calendarViews.MONTH) {\r\n start = time.clone().startOf('month').startOf(weekName);\r\n end = time.clone().endOf('month').endOf(weekName);\r\n }\r\n\r\n if (view === calendarViews.AGENDA) {\r\n start = time.clone().subtract(1, 'day').startOf('day');\r\n end = time.clone().add(1, 'month').endOf('day');\r\n }\r\n\r\n return {\r\n start: start.toISOString(),\r\n end: end.toISOString(),\r\n time: time.toISOString(),\r\n dates: getDays(start, end)\r\n };\r\n}\r\n\r\nfunction getPopulatableRange(startDate, endDate, view) {\r\n switch (view) {\r\n case calendarViews.DAY:\r\n return {\r\n start: moment(startDate).subtract(1, 'day').toISOString(),\r\n end: moment(endDate).add(1, 'day').toISOString()\r\n };\r\n case calendarViews.WEEK:\r\n case calendarViews.FORECAST:\r\n return {\r\n start: moment(startDate).subtract(1, 'week').toISOString(),\r\n end: moment(endDate).add(1, 'week').toISOString()\r\n };\r\n default:\r\n return {\r\n start: startDate,\r\n end: endDate\r\n };\r\n }\r\n}\r\n\r\nfunction isRangePopulated(start, end, state) {\r\n const {\r\n start: currentStart,\r\n end: currentEnd,\r\n view: currentView\r\n } = state;\r\n\r\n if (!currentStart || !currentEnd) {\r\n return false;\r\n }\r\n\r\n const {\r\n start: currentPopulatedStart,\r\n end: currentPopulatedEnd\r\n } = getPopulatableRange(currentStart, currentEnd, currentView);\r\n\r\n if (\r\n moment(start).isAfter(currentPopulatedStart) &&\r\n moment(start).isBefore(currentPopulatedEnd)\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getCustomFilters(state, type) {\r\n return state.customFilters.items.filter((customFilter) => customFilter.type === type);\r\n}\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchCalendar = createThunk(FETCH_CALENDAR);\r\nexport const setCalendarDaysCount = createThunk(SET_CALENDAR_DAYS_COUNT);\r\nexport const setCalendarFilter = createThunk(SET_CALENDAR_FILTER);\r\nexport const setCalendarView = createThunk(SET_CALENDAR_VIEW);\r\nexport const gotoCalendarToday = createThunk(GOTO_CALENDAR_TODAY);\r\nexport const gotoCalendarPreviousRange = createThunk(GOTO_CALENDAR_PREVIOUS_RANGE);\r\nexport const gotoCalendarNextRange = createThunk(GOTO_CALENDAR_NEXT_RANGE);\r\nexport const clearCalendar = createAction(CLEAR_CALENDAR);\r\nexport const setCalendarOption = createAction(SET_CALENDAR_OPTION);\r\nexport const searchMissing = createThunk(SEARCH_MISSING);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_CALENDAR]: function(getState, payload, dispatch) {\r\n const state = getState();\r\n const calendar = state.calendar;\r\n const customFilters = getCustomFilters(state, section);\r\n const selectedFilters = findSelectedFilters(calendar.selectedFilterKey, calendar.filters, customFilters);\r\n\r\n const {\r\n time = calendar.time,\r\n view = calendar.view\r\n } = payload;\r\n\r\n const dayCount = state.calendar.dayCount;\r\n const dates = getDates(moment(time), view, state.settings.ui.item.firstDayOfWeek, dayCount);\r\n const { start, end } = getPopulatableRange(dates.start, dates.end, view);\r\n const isPrePopulated = isRangePopulated(start, end, state.calendar);\r\n\r\n const basesAttrs = {\r\n section,\r\n isFetching: true\r\n };\r\n\r\n const attrs = isPrePopulated ?\r\n {\r\n view,\r\n ...basesAttrs,\r\n ...dates\r\n } :\r\n basesAttrs;\r\n\r\n dispatch(set(attrs));\r\n\r\n const requestParams = {\r\n start,\r\n end\r\n };\r\n\r\n selectedFilters.forEach((selectedFilter) => {\r\n if (selectedFilter.key === 'unmonitored') {\r\n requestParams.unmonitored = selectedFilter.value.includes(true);\r\n }\r\n\r\n if (selectedFilter.key === 'tags') {\r\n requestParams.tags = selectedFilter.value.join(',');\r\n }\r\n });\r\n\r\n requestParams.unmonitored = requestParams.unmonitored ?? false;\r\n\r\n const promise = createAjaxRequest({\r\n url: '/calendar',\r\n data: requestParams\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n view,\r\n ...dates,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n });\r\n },\r\n\r\n [SET_CALENDAR_DAYS_COUNT]: function(getState, payload, dispatch) {\r\n if (payload.dayCount === getState().calendar.dayCount) {\r\n return;\r\n }\r\n\r\n dispatch(set({\r\n section,\r\n dayCount: payload.dayCount\r\n }));\r\n\r\n const state = getState();\r\n const { time, view } = state.calendar;\r\n\r\n dispatch(fetchCalendar({ time, view }));\r\n },\r\n\r\n [SET_CALENDAR_FILTER]: function(getState, payload, dispatch) {\r\n dispatch(set({\r\n section,\r\n selectedFilterKey: payload.selectedFilterKey\r\n }));\r\n\r\n const state = getState();\r\n const { time, view } = state.calendar;\r\n\r\n dispatch(fetchCalendar({ time, view }));\r\n },\r\n\r\n [SET_CALENDAR_VIEW]: function(getState, payload, dispatch) {\r\n const state = getState();\r\n const view = payload.view;\r\n const time = view === calendarViews.FORECAST || calendarViews.AGENDA ?\r\n moment() :\r\n state.calendar.time;\r\n\r\n dispatch(fetchCalendar({ time, view }));\r\n },\r\n\r\n [GOTO_CALENDAR_TODAY]: function(getState, payload, dispatch) {\r\n const state = getState();\r\n const view = state.calendar.view;\r\n const time = moment();\r\n\r\n dispatch(fetchCalendar({ time, view }));\r\n },\r\n\r\n [GOTO_CALENDAR_PREVIOUS_RANGE]: function(getState, payload, dispatch) {\r\n const state = getState();\r\n\r\n const {\r\n view,\r\n dayCount\r\n } = state.calendar;\r\n\r\n const amount = view === calendarViews.FORECAST ? dayCount : 1;\r\n const time = moment(state.calendar.time).subtract(amount, viewRanges[view]);\r\n\r\n dispatch(fetchCalendar({ time, view }));\r\n },\r\n\r\n [GOTO_CALENDAR_NEXT_RANGE]: function(getState, payload, dispatch) {\r\n const state = getState();\r\n\r\n const {\r\n view,\r\n dayCount\r\n } = state.calendar;\r\n\r\n const amount = view === calendarViews.FORECAST ? dayCount : 1;\r\n const time = moment(state.calendar.time).add(amount, viewRanges[view]);\r\n\r\n dispatch(fetchCalendar({ time, view }));\r\n },\r\n\r\n [SEARCH_MISSING]: function(getState, payload, dispatch) {\r\n const { movieIds } = payload;\r\n\r\n const commandPayload = {\r\n name: commandNames.MOVIE_SEARCH,\r\n movieIds\r\n };\r\n\r\n executeCommandHelper(commandPayload, dispatch).then((data) => {\r\n dispatch(set({\r\n section,\r\n searchMissingCommandId: data.id\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_CALENDAR]: createClearReducer(section, {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n }),\r\n\r\n [SET_CALENDAR_OPTION]: function(state, { payload }) {\r\n const options = state.options;\r\n\r\n return {\r\n ...state,\r\n options: {\r\n ...options,\r\n ...payload\r\n }\r\n };\r\n }\r\n\r\n}, defaultState, section);\r\n","import $ from 'jquery';\r\nimport _ from 'lodash';\r\nimport createAjaxRequest from './createAjaxRequest';\r\n\r\nfunction flattenProviderData(providerData) {\r\n return _.reduce(Object.keys(providerData), (result, key) => {\r\n const property = providerData[key];\r\n\r\n if (key === 'fields') {\r\n result[key] = property;\r\n } else {\r\n result[key] = property.value;\r\n }\r\n\r\n return result;\r\n }, {});\r\n}\r\n\r\nfunction requestAction(payload) {\r\n const {\r\n provider,\r\n action,\r\n providerData,\r\n queryParams\r\n } = payload;\r\n\r\n const ajaxOptions = {\r\n url: `/${provider}/action/${action}`,\r\n contentType: 'application/json',\r\n method: 'POST',\r\n data: JSON.stringify(flattenProviderData(providerData))\r\n };\r\n\r\n if (queryParams) {\r\n ajaxOptions.url += `?${$.param(queryParams, true)}`;\r\n }\r\n\r\n return createAjaxRequest(ajaxOptions).request;\r\n}\r\n\r\nexport default requestAction;\r\n","import { createAction } from 'redux-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport requestAction from 'Utilities/requestAction';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'captcha';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n refreshing: false,\r\n token: null,\r\n siteKey: null,\r\n secretToken: null,\r\n ray: null,\r\n stoken: null,\r\n responseUrl: null\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const REFRESH_CAPTCHA = 'captcha/refreshCaptcha';\r\nexport const GET_CAPTCHA_COOKIE = 'captcha/getCaptchaCookie';\r\nexport const SET_CAPTCHA_VALUE = 'captcha/setCaptchaValue';\r\nexport const RESET_CAPTCHA = 'captcha/resetCaptcha';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const refreshCaptcha = createThunk(REFRESH_CAPTCHA);\r\nexport const getCaptchaCookie = createThunk(GET_CAPTCHA_COOKIE);\r\nexport const setCaptchaValue = createAction(SET_CAPTCHA_VALUE);\r\nexport const resetCaptcha = createAction(RESET_CAPTCHA);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [REFRESH_CAPTCHA]: function(getState, payload, dispatch) {\r\n const actionPayload = {\r\n action: 'checkCaptcha',\r\n ...payload\r\n };\r\n\r\n dispatch(setCaptchaValue({\r\n refreshing: true\r\n }));\r\n\r\n const promise = requestAction(actionPayload);\r\n\r\n promise.done((data) => {\r\n if (!data.captchaRequest) {\r\n dispatch(setCaptchaValue({\r\n refreshing: false\r\n }));\r\n }\r\n\r\n dispatch(setCaptchaValue({\r\n refreshing: false,\r\n ...data.captchaRequest\r\n }));\r\n });\r\n\r\n promise.fail(() => {\r\n dispatch(setCaptchaValue({\r\n refreshing: false\r\n }));\r\n });\r\n },\r\n\r\n [GET_CAPTCHA_COOKIE]: function(getState, payload, dispatch) {\r\n const state = getState().captcha;\r\n\r\n const queryParams = {\r\n responseUrl: state.responseUrl,\r\n ray: state.ray,\r\n captchaResponse: payload.captchaResponse\r\n };\r\n\r\n const actionPayload = {\r\n action: 'getCaptchaCookie',\r\n queryParams,\r\n ...payload\r\n };\r\n\r\n const promise = requestAction(actionPayload);\r\n\r\n promise.done((data) => {\r\n dispatch(setCaptchaValue({\r\n token: data.captchaToken\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_CAPTCHA_VALUE]: function(state, { payload }) {\r\n const newState = Object.assign(getSectionState(state, section), payload);\r\n\r\n return updateSectionState(state, section, newState);\r\n },\r\n\r\n [RESET_CAPTCHA]: function(state) {\r\n return updateSectionState(state, section, defaultState);\r\n }\r\n\r\n}, defaultState);\r\n","import _ from 'lodash';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\n\r\nfunction getProviderState(payload, getState, section, keyValueOnly=true) {\r\n const {\r\n id,\r\n ...otherPayload\r\n } = payload;\r\n\r\n const state = getSectionState(getState(), section, true);\r\n const pendingChanges = Object.assign({}, state.pendingChanges, otherPayload);\r\n const pendingFields = state.pendingChanges.fields || {};\r\n delete pendingChanges.fields;\r\n\r\n const item = id ? _.find(state.items, { id }) : state.selectedSchema || state.schema || {};\r\n\r\n if (item.fields) {\r\n pendingChanges.fields = _.reduce(item.fields, (result, field) => {\r\n const name = field.name;\r\n\r\n const value = pendingFields.hasOwnProperty(name) ?\r\n pendingFields[name] :\r\n field.value;\r\n\r\n // Only send the name and value to the server\r\n if (keyValueOnly) {\r\n result.push({\r\n name,\r\n value\r\n });\r\n } else {\r\n result.push({\r\n ...field,\r\n value\r\n });\r\n }\r\n\r\n return result;\r\n }, []);\r\n }\r\n\r\n const result = Object.assign({}, item, pendingChanges);\r\n\r\n delete result.presets;\r\n\r\n return result;\r\n}\r\n\r\nexport default getProviderState;\r\n","import $ from 'jquery';\r\nimport _ from 'lodash';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport getProviderState from 'Utilities/State/getProviderState';\r\nimport { set, updateItem } from '../baseActions';\r\n\r\nconst abortCurrentRequests = {};\r\nlet lastSaveData = null;\r\n\r\nexport function createCancelSaveProviderHandler(section) {\r\n return function(getState, payload, dispatch) {\r\n if (abortCurrentRequests[section]) {\r\n abortCurrentRequests[section]();\r\n abortCurrentRequests[section] = null;\r\n }\r\n };\r\n}\r\n\r\nfunction createSaveProviderHandler(section, url, options = {}) {\r\n return function(getState, payload, dispatch) {\r\n dispatch(set({ section, isSaving: true }));\r\n\r\n const {\r\n id,\r\n queryParams = {},\r\n ...otherPayload\r\n } = payload;\r\n\r\n const saveData = getProviderState({ id, ...otherPayload }, getState, section);\r\n const requestUrl = id ? `${url}/${id}` : url;\r\n const params = { ...queryParams };\r\n\r\n // If the user is re-saving the same provider without changes\r\n // force it to be saved.\r\n\r\n if (_.isEqual(saveData, lastSaveData)) {\r\n params.forceSave = true;\r\n }\r\n\r\n lastSaveData = saveData;\r\n\r\n const ajaxOptions = {\r\n url: `${requestUrl}?${$.param(params, true)}`,\r\n method: id ? 'PUT' : 'POST',\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n data: JSON.stringify(saveData)\r\n };\r\n\r\n const { request, abortRequest } = createAjaxRequest(ajaxOptions);\r\n\r\n abortCurrentRequests[section] = abortRequest;\r\n\r\n request.done((data) => {\r\n lastSaveData = null;\r\n\r\n dispatch(batchActions([\r\n updateItem({ section, ...data }),\r\n\r\n set({\r\n section,\r\n isSaving: false,\r\n saveError: null,\r\n pendingChanges: {}\r\n })\r\n ]));\r\n });\r\n\r\n request.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: xhr.aborted ? null : xhr\r\n }));\r\n });\r\n };\r\n}\r\n\r\nexport default createSaveProviderHandler;\r\n","import { createThunk, handleThunks } from 'Store/thunks';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createRemoveItemHandler from './Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler from './Creators/createSaveProviderHandler';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'customFilters';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSaving: false,\r\n saveError: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n items: [],\r\n pendingChanges: {}\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_CUSTOM_FILTERS = 'customFilters/fetchCustomFilters';\r\nexport const SAVE_CUSTOM_FILTER = 'customFilters/saveCustomFilter';\r\nexport const DELETE_CUSTOM_FILTER = 'customFilters/deleteCustomFilter';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchCustomFilters = createThunk(FETCH_CUSTOM_FILTERS);\r\nexport const saveCustomFilter = createThunk(SAVE_CUSTOM_FILTER);\r\nexport const deleteCustomFilter = createThunk(DELETE_CUSTOM_FILTER);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_CUSTOM_FILTERS]: createFetchHandler(section, '/customFilter'),\r\n\r\n [SAVE_CUSTOM_FILTER]: createSaveProviderHandler(section, '/customFilter'),\r\n\r\n [DELETE_CUSTOM_FILTER]: createRemoveItemHandler(section, '/customFilter')\r\n\r\n});\r\n\r\n//\r\n// Reducers\r\nexport const reducers = createHandleActions({}, defaultState, section);\r\n","import { StringKey } from 'typings/Helpers/KeysMatching';\r\n\r\nexport function sortByProp<\r\n // eslint-disable-next-line no-use-before-define\r\n T extends Record,\r\n K extends StringKey\r\n>(sortKey: K) {\r\n return (a: T, b: T) => {\r\n return a[sortKey].localeCompare(b[sortKey], undefined, { numeric: true });\r\n };\r\n}\r\n\r\nexport default sortByProp;\r\n","import getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\nfunction createSetClientSideCollectionFilterReducer(section) {\r\n return (state, { payload }) => {\r\n const newState = getSectionState(state, section);\r\n\r\n newState.selectedFilterKey = payload.selectedFilterKey;\r\n\r\n return updateSectionState(state, section, newState);\r\n };\r\n}\r\n\r\nexport default createSetClientSideCollectionFilterReducer;\r\n","import { sortDirections } from 'Helpers/Props';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\nfunction createSetClientSideCollectionSortReducer(section) {\r\n return (state, { payload }) => {\r\n const newState = getSectionState(state, section);\r\n\r\n const sortKey = payload.sortKey || newState.sortKey;\r\n let sortDirection = payload.sortDirection;\r\n\r\n if (!sortDirection) {\r\n if (payload.sortKey === newState.sortKey) {\r\n sortDirection = newState.sortDirection === sortDirections.ASCENDING ?\r\n sortDirections.DESCENDING :\r\n sortDirections.ASCENDING;\r\n } else {\r\n sortDirection = newState.sortDirection;\r\n }\r\n }\r\n\r\n newState.sortKey = sortKey;\r\n newState.sortDirection = sortDirection;\r\n\r\n return updateSectionState(state, section, newState);\r\n };\r\n}\r\n\r\nexport default createSetClientSideCollectionSortReducer;\r\n","import moment from 'moment';\r\n\r\nfunction isAfter(date, offsets = {}) {\r\n if (!date) {\r\n return false;\r\n }\r\n\r\n const offsetTime = moment();\r\n\r\n Object.keys(offsets).forEach((key) => {\r\n offsetTime.add(offsets[key], key);\r\n });\r\n\r\n return moment(date).isAfter(offsetTime);\r\n}\r\n\r\nexport default isAfter;\r\n","import moment from 'moment';\r\n\r\nfunction isBefore(date, offsets = {}) {\r\n if (!date) {\r\n return false;\r\n }\r\n\r\n const offsetTime = moment();\r\n\r\n Object.keys(offsets).forEach((key) => {\r\n offsetTime.add(offsets[key], key);\r\n });\r\n\r\n return moment(date).isBefore(offsetTime);\r\n}\r\n\r\nexport default isBefore;\r\n","import moment from 'moment';\r\nimport * as filterTypes from 'Helpers/Props/filterTypes';\r\nimport isAfter from 'Utilities/Date/isAfter';\r\nimport isBefore from 'Utilities/Date/isBefore';\r\n\r\nexport default function(itemValue, filterValue, type) {\r\n if (!itemValue) {\r\n return false;\r\n }\r\n\r\n switch (type) {\r\n case filterTypes.LESS_THAN:\r\n return moment(itemValue).isBefore(filterValue);\r\n\r\n case filterTypes.GREATER_THAN:\r\n return moment(itemValue).isAfter(filterValue);\r\n\r\n case filterTypes.IN_LAST:\r\n return (\r\n isAfter(itemValue, { [filterValue.time]: filterValue.value * -1 }) &&\r\n isBefore(itemValue)\r\n );\r\n\r\n case filterTypes.NOT_IN_LAST:\r\n return (\r\n isBefore(itemValue, { [filterValue.time]: filterValue.value * -1 })\r\n );\r\n\r\n case filterTypes.IN_NEXT:\r\n return (\r\n isAfter(itemValue) &&\r\n isBefore(itemValue, { [filterValue.time]: filterValue.value })\r\n );\r\n\r\n case filterTypes.NOT_IN_NEXT:\r\n return (\r\n isAfter(itemValue, { [filterValue.time]: filterValue.value })\r\n );\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n","function padNumber(input, width, paddingCharacter = 0) {\r\n if (input == null) {\r\n return '';\r\n }\r\n\r\n input = `${input}`;\r\n return input.length >= width ? input : new Array(width - input.length + 1).join(paddingCharacter) + input;\r\n}\r\n\r\nexport default padNumber;\r\n","import _ from 'lodash';\r\nimport moment from 'moment';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { filterTypePredicates, filterTypes, sortDirections } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\n// import { batchActions } from 'redux-batched-actions';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport dateFilterPredicate from 'Utilities/Date/dateFilterPredicate';\r\nimport padNumber from 'Utilities/Number/padNumber';\r\nimport translate from 'Utilities/String/translate';\r\nimport { set, updateItem } from './baseActions';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createRemoveItemHandler from './Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler from './Creators/createSaveProviderHandler';\r\nimport createSetSettingValueReducer from './Creators/Reducers/createSetSettingValueReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'movies';\r\n\r\nexport const filters = [\r\n {\r\n key: 'all',\r\n label: () => translate('All'),\r\n filters: []\r\n },\r\n {\r\n key: 'monitored',\r\n label: () => translate('MonitoredOnly'),\r\n filters: [\r\n {\r\n key: 'monitored',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'unmonitored',\r\n label: () => translate('Unmonitored'),\r\n filters: [\r\n {\r\n key: 'monitored',\r\n value: false,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'missing',\r\n label: () => translate('Missing'),\r\n filters: [\r\n {\r\n key: 'monitored',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n },\r\n {\r\n key: 'hasFile',\r\n value: false,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'wanted',\r\n label: () => translate('Wanted'),\r\n filters: [\r\n {\r\n key: 'monitored',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n },\r\n {\r\n key: 'hasFile',\r\n value: false,\r\n type: filterTypes.EQUAL\r\n },\r\n {\r\n key: 'isAvailable',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'cutoffunmet',\r\n label: () => translate('CutoffUnmet'),\r\n filters: [\r\n {\r\n key: 'monitored',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n },\r\n {\r\n key: 'hasFile',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n },\r\n {\r\n key: 'qualityCutoffNotMet',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n }\r\n];\r\n\r\nexport const filterPredicates = {\r\n added: function(item, filterValue, type) {\r\n return dateFilterPredicate(item.added, filterValue, type);\r\n },\r\n\r\n collection: function(item, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n const { collection } = item;\r\n\r\n return predicate(collection && collection.title ? collection.title : '', filterValue);\r\n },\r\n\r\n originalLanguage: function(item, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n const { originalLanguage } = item;\r\n\r\n return predicate(originalLanguage ? originalLanguage.name : '', filterValue);\r\n },\r\n\r\n releaseGroups: function(item, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n const { statistics = {} } = item;\r\n const { releaseGroups = [] } = statistics;\r\n\r\n return predicate(releaseGroups, filterValue);\r\n },\r\n\r\n sizeOnDisk: function(item, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n const { statistics = {} } = item;\r\n const sizeOnDisk = statistics && statistics.sizeOnDisk ? statistics.sizeOnDisk : 0;\r\n\r\n return predicate(sizeOnDisk, filterValue);\r\n },\r\n\r\n inCinemas: function(item, filterValue, type) {\r\n return dateFilterPredicate(item.inCinemas, filterValue, type);\r\n },\r\n\r\n physicalRelease: function(item, filterValue, type) {\r\n return dateFilterPredicate(item.physicalRelease, filterValue, type);\r\n },\r\n\r\n digitalRelease: function(item, filterValue, type) {\r\n return dateFilterPredicate(item.digitalRelease, filterValue, type);\r\n },\r\n\r\n releaseDate: function(item, filterValue, type) {\r\n return dateFilterPredicate(item.releaseDate, filterValue, type);\r\n },\r\n\r\n tmdbRating: function({ ratings = {} }, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const rating = ratings.tmdb ? ratings.tmdb.value : 0;\r\n\r\n return predicate(rating * 10, filterValue);\r\n },\r\n\r\n tmdbVotes: function({ ratings = {} }, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const rating = ratings.tmdb ? ratings.tmdb.votes : 0;\r\n\r\n return predicate(rating, filterValue);\r\n },\r\n\r\n imdbRating: function({ ratings = {} }, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const rating = ratings.imdb ? ratings.imdb.value : 0;\r\n\r\n return predicate(rating, filterValue);\r\n },\r\n\r\n imdbVotes: function({ ratings = {} }, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const rating = ratings.imdb ? ratings.imdb.votes : 0;\r\n\r\n return predicate(rating, filterValue);\r\n },\r\n\r\n rottenTomatoesRating: function({ ratings = {} }, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const rating = ratings.rottenTomatoes ? ratings.rottenTomatoes.value : 0;\r\n\r\n return predicate(rating, filterValue);\r\n },\r\n\r\n traktRating: function({ ratings = {} }, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const rating = ratings.trakt ? ratings.trakt.value : 0;\r\n\r\n return predicate(rating * 10, filterValue);\r\n },\r\n\r\n traktVotes: function({ ratings = {} }, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const rating = ratings.trakt ? ratings.trakt.votes : 0;\r\n\r\n return predicate(rating, filterValue);\r\n },\r\n\r\n qualityCutoffNotMet: function(item) {\r\n const { movieFile = {} } = item;\r\n\r\n return movieFile.qualityCutoffNotMet;\r\n }\r\n};\r\n\r\nexport const sortPredicates = {\r\n status: function(item) {\r\n let result = 0;\r\n\r\n if (item.monitored) {\r\n result += 4;\r\n }\r\n\r\n if (item.status === 'announced') {\r\n result++;\r\n }\r\n\r\n if (item.status === 'inCinemas') {\r\n result += 2;\r\n }\r\n\r\n if (item.status === 'released') {\r\n result += 3;\r\n }\r\n\r\n return result;\r\n },\r\n\r\n movieStatus: function(item) {\r\n let result = 0;\r\n let qualityName = '';\r\n\r\n const hasMovieFile = !!item.movieFile;\r\n\r\n if (item.isAvailable) {\r\n result++;\r\n }\r\n\r\n if (item.monitored) {\r\n result += 2;\r\n }\r\n\r\n if (hasMovieFile) {\r\n // TODO: Consider Quality Weight for Sorting within status of hasMovie\r\n if (item.movieFile.qualityCutoffNotMet) {\r\n result += 4;\r\n } else {\r\n result += 8;\r\n }\r\n qualityName = item.movieFile.quality.quality.name;\r\n }\r\n\r\n return padNumber(result.toString(), 2) + qualityName;\r\n },\r\n\r\n year: function(item) {\r\n return item.year || undefined;\r\n },\r\n\r\n inCinemas: function(item, direction) {\r\n const { inCinemas } = item;\r\n\r\n if (inCinemas) {\r\n return moment(inCinemas).unix();\r\n }\r\n\r\n if (direction === sortDirections.DESCENDING) {\r\n return -1 * Number.MAX_VALUE;\r\n }\r\n\r\n return Number.MAX_VALUE;\r\n },\r\n\r\n physicalRelease: function(item, direction) {\r\n const { physicalRelease } = item;\r\n\r\n if (physicalRelease) {\r\n return moment(physicalRelease).unix();\r\n }\r\n\r\n if (direction === sortDirections.DESCENDING) {\r\n return -1 * Number.MAX_VALUE;\r\n }\r\n\r\n return Number.MAX_VALUE;\r\n },\r\n\r\n digitalRelease: function(item, direction) {\r\n const { digitalRelease } = item;\r\n\r\n if (digitalRelease) {\r\n return moment(digitalRelease).unix();\r\n }\r\n\r\n if (direction === sortDirections.DESCENDING) {\r\n return -1 * Number.MAX_VALUE;\r\n }\r\n\r\n return Number.MAX_VALUE;\r\n },\r\n\r\n releaseDate: function(item, direction) {\r\n const { releaseDate } = item;\r\n\r\n if (releaseDate) {\r\n return moment(releaseDate).unix();\r\n }\r\n\r\n if (direction === sortDirections.DESCENDING) {\r\n return -1 * Number.MAX_VALUE;\r\n }\r\n\r\n return Number.MAX_VALUE;\r\n },\r\n\r\n sizeOnDisk: function(item) {\r\n const { statistics = {} } = item;\r\n\r\n return statistics.sizeOnDisk || 0;\r\n }\r\n};\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSaving: false,\r\n saveError: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n items: [],\r\n sortKey: 'sortTitle',\r\n sortDirection: sortDirections.ASCENDING,\r\n pendingChanges: {},\r\n deleteOptions: {\r\n addImportExclusion: false\r\n }\r\n};\r\n\r\nexport const persistState = [\r\n 'movies.deleteOptions'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_MOVIES = 'movies/fetchMovies';\r\nexport const SET_MOVIE_VALUE = 'movies/setMovieValue';\r\nexport const SAVE_MOVIE = 'movies/saveMovie';\r\nexport const DELETE_MOVIE = 'movies/deleteMovie';\r\nexport const SAVE_MOVIE_EDITOR = 'movies/saveMovieEditor';\r\nexport const BULK_DELETE_MOVIE = 'movies/bulkDeleteMovie';\r\n\r\nexport const SET_DELETE_OPTION = 'movies/setDeleteOption';\r\n\r\nexport const TOGGLE_MOVIE_MONITORED = 'movies/toggleMovieMonitored';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMovies = createThunk(FETCH_MOVIES);\r\nexport const saveMovie = createThunk(SAVE_MOVIE, (payload) => {\r\n const newPayload = {\r\n ...payload\r\n };\r\n\r\n if (payload.moveFiles) {\r\n newPayload.queryParams = {\r\n moveFiles: true\r\n };\r\n }\r\n\r\n delete newPayload.moveFiles;\r\n\r\n return newPayload;\r\n});\r\n\r\nexport const deleteMovie = createThunk(DELETE_MOVIE, (payload) => {\r\n return {\r\n ...payload,\r\n queryParams: {\r\n deleteFiles: payload.deleteFiles,\r\n addImportExclusion: payload.addImportExclusion\r\n }\r\n };\r\n});\r\n\r\nexport const toggleMovieMonitored = createThunk(TOGGLE_MOVIE_MONITORED);\r\nexport const saveMovieEditor = createThunk(SAVE_MOVIE_EDITOR);\r\nexport const bulkDeleteMovie = createThunk(BULK_DELETE_MOVIE);\r\n\r\nexport const setMovieValue = createAction(SET_MOVIE_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setDeleteOption = createAction(SET_DELETE_OPTION);\r\n\r\n//\r\n// Helpers\r\n\r\nfunction getSaveAjaxOptions({ ajaxOptions, payload }) {\r\n if (payload.moveFolder) {\r\n ajaxOptions.url = `${ajaxOptions.url}?moveFolder=true`;\r\n }\r\n\r\n return ajaxOptions;\r\n}\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_MOVIES]: createFetchHandler(section, '/movie'),\r\n [SAVE_MOVIE]: createSaveProviderHandler(section, '/movie', { getAjaxOptions: getSaveAjaxOptions }),\r\n [DELETE_MOVIE]: (getState, payload, dispatch) => {\r\n createRemoveItemHandler(section, '/movie')(getState, payload, dispatch);\r\n\r\n if (!payload.collectionTmdbId) {\r\n return;\r\n }\r\n\r\n const collectionToUpdate = getState().movieCollections.items.find((collection) => collection.tmdbId === payload.collectionTmdbId);\r\n\r\n // Skip updating if the last movie in the collection is being deleted\r\n if (collectionToUpdate.movies.length - collectionToUpdate.missingMovies === 1) {\r\n return;\r\n }\r\n\r\n const collectionData = { ...collectionToUpdate, missingMovies: collectionToUpdate.missingMovies + 1 };\r\n\r\n dispatch(updateItem({\r\n section: 'movieCollections',\r\n ...collectionData\r\n }));\r\n },\r\n\r\n [TOGGLE_MOVIE_MONITORED]: (getState, payload, dispatch) => {\r\n const {\r\n movieId: id,\r\n monitored\r\n } = payload;\r\n\r\n const movie = _.find(getState().movies.items, { id });\r\n\r\n dispatch(updateItem({\r\n id,\r\n section,\r\n isSaving: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n url: `/movie/${id}`,\r\n method: 'PUT',\r\n data: JSON.stringify({\r\n ...movie,\r\n monitored\r\n }),\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(updateItem({\r\n id,\r\n section,\r\n isSaving: false,\r\n monitored\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(updateItem({\r\n id,\r\n section,\r\n isSaving: false\r\n }));\r\n });\r\n },\r\n\r\n [SAVE_MOVIE_EDITOR]: function(getState, payload, dispatch) {\r\n dispatch(set({\r\n section,\r\n isSaving: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/movie/editor',\r\n method: 'PUT',\r\n data: JSON.stringify(payload),\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n ...data.map((movie) => {\r\n return updateItem({\r\n id: movie.id,\r\n section: 'movies',\r\n ...movie\r\n });\r\n }),\r\n\r\n set({\r\n section,\r\n isSaving: false,\r\n saveError: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: xhr\r\n }));\r\n });\r\n },\r\n\r\n [BULK_DELETE_MOVIE]: function(getState, payload, dispatch) {\r\n dispatch(set({\r\n section,\r\n isDeleting: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/movie/editor',\r\n method: 'DELETE',\r\n data: JSON.stringify(payload),\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done(() => {\r\n // SignaR will take care of removing the movie from the collection\r\n\r\n dispatch(set({\r\n section,\r\n isDeleting: false,\r\n deleteError: null\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isDeleting: false,\r\n deleteError: xhr\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_MOVIE_VALUE]: createSetSettingValueReducer(section),\r\n [SET_DELETE_OPTION]: (state, { payload }) => {\r\n return {\r\n ...state,\r\n deleteOptions: {\r\n ...payload\r\n }\r\n };\r\n }\r\n\r\n}, defaultState, section);\r\n","import _ from 'lodash';\r\nimport moment from 'moment/moment';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, filterTypes, sortDirections } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport getNewMovie from 'Utilities/Movie/getNewMovie';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport translate from 'Utilities/String/translate';\r\nimport { removeItem, set, update, updateItem } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createClearReducer from './Creators/Reducers/createClearReducer';\r\nimport createSetClientSideCollectionFilterReducer from './Creators/Reducers/createSetClientSideCollectionFilterReducer';\r\nimport createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';\r\nimport createSetSettingValueReducer from './Creators/Reducers/createSetSettingValueReducer';\r\nimport createSetTableOptionReducer from './Creators/Reducers/createSetTableOptionReducer';\r\nimport { filterPredicates } from './movieActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'discoverMovie';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isAdding: false,\r\n isAdded: false,\r\n addError: null,\r\n items: [],\r\n sortKey: 'sortTitle',\r\n sortDirection: sortDirections.ASCENDING,\r\n secondarySortKey: 'sortTitle',\r\n secondarySortDirection: sortDirections.ASCENDING,\r\n view: 'overview',\r\n\r\n options: {\r\n includeRecommendations: true,\r\n includeTrending: true,\r\n includePopular: true\r\n },\r\n\r\n defaults: {\r\n rootFolderPath: '',\r\n monitor: 'movieOnly',\r\n qualityProfileId: 0,\r\n minimumAvailability: 'released',\r\n searchForMovie: true,\r\n tags: []\r\n },\r\n\r\n posterOptions: {\r\n size: 'large',\r\n showTitle: false,\r\n showTmdbRating: false,\r\n showImdbRating: false,\r\n showRottenTomatoesRating: false,\r\n showTraktRating: false\r\n },\r\n\r\n overviewOptions: {\r\n size: 'medium',\r\n showYear: true,\r\n showStudio: true,\r\n showGenres: true,\r\n showTmdbRating: false,\r\n showImdbRating: false,\r\n showCertification: true\r\n },\r\n\r\n tableOptions: {\r\n // showSearchAction: false\r\n },\r\n\r\n columns: [\r\n {\r\n name: 'status',\r\n columnLabel: () => translate('Status'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'isRecommendation',\r\n columnLabel: () => translate('Recommendation'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'isTrending',\r\n columnLabel: () => translate('Trending'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'isPopular',\r\n columnLabel: () => translate('Popular'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'sortTitle',\r\n label: () => translate('MovieTitle'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'originalLanguage',\r\n label: () => translate('OriginalLanguage'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'collection',\r\n label: () => translate('Collection'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'studio',\r\n label: () => translate('Studio'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'inCinemas',\r\n label: () => translate('InCinemas'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'digitalRelease',\r\n label: () => translate('DigitalRelease'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'physicalRelease',\r\n label: () => translate('PhysicalRelease'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'runtime',\r\n label: () => translate('Runtime'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'genres',\r\n label: () => translate('Genres'),\r\n isSortable: false,\r\n isVisible: false\r\n },\r\n {\r\n name: 'tmdbRating',\r\n label: () => translate('TmdbRating'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'imdbRating',\r\n label: () => translate('ImdbRating'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'rottenTomatoesRating',\r\n label: () => translate('RottenTomatoesRating'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'traktRating',\r\n label: () => translate('TraktRating'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'popularity',\r\n label: () => translate('Popularity'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'certification',\r\n label: () => translate('Certification'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'lists',\r\n label: () => translate('Lists'),\r\n isSortable: false,\r\n isVisible: false\r\n },\r\n {\r\n name: 'actions',\r\n columnLabel: () => translate('Actions'),\r\n isVisible: true,\r\n isModifiable: false\r\n }\r\n ],\r\n\r\n sortPredicates: {\r\n status: function(item) {\r\n let result = 0;\r\n\r\n if (item.isExcluded) {\r\n result += 4;\r\n }\r\n\r\n if (item.status === 'announced') {\r\n result++;\r\n }\r\n\r\n if (item.status === 'inCinemas') {\r\n result += 2;\r\n }\r\n\r\n if (item.status === 'released') {\r\n result += 3;\r\n }\r\n\r\n return result;\r\n },\r\n\r\n collection: function(item) {\r\n const { collection ={} } = item;\r\n\r\n return collection.title;\r\n },\r\n\r\n originalLanguage: function(item) {\r\n const { originalLanguage ={} } = item;\r\n\r\n return originalLanguage.name;\r\n },\r\n\r\n studio: function(item) {\r\n const studio = item.studio;\r\n\r\n return studio ? studio.toLowerCase() : '';\r\n },\r\n\r\n inCinemas: function(item, direction) {\r\n if (item.inCinemas) {\r\n return moment(item.inCinemas).unix();\r\n }\r\n\r\n if (direction === sortDirections.DESCENDING) {\r\n return -1 * Number.MAX_VALUE;\r\n }\r\n\r\n return Number.MAX_VALUE;\r\n },\r\n\r\n physicalRelease: function(item, direction) {\r\n if (item.physicalRelease) {\r\n return moment(item.physicalRelease).unix();\r\n }\r\n\r\n if (direction === sortDirections.DESCENDING) {\r\n return -1 * Number.MAX_VALUE;\r\n }\r\n\r\n return Number.MAX_VALUE;\r\n },\r\n\r\n digitalRelease: function(item, direction) {\r\n if (item.digitalRelease) {\r\n return moment(item.digitalRelease).unix();\r\n }\r\n\r\n if (direction === sortDirections.DESCENDING) {\r\n return -1 * Number.MAX_VALUE;\r\n }\r\n\r\n return Number.MAX_VALUE;\r\n },\r\n\r\n tmdbRating: function({ ratings = {} }) {\r\n return ratings.tmdb ? ratings.tmdb.value : 0;\r\n },\r\n\r\n imdbRating: function({ ratings = {} }) {\r\n return ratings.imdb ? ratings.imdb.value : 0;\r\n },\r\n\r\n rottenTomatoesRating: function({ ratings = {} }) {\r\n return ratings.rottenTomatoes ? ratings.rottenTomatoes.value : -1;\r\n },\r\n\r\n traktRating: function({ ratings = {} }) {\r\n return ratings.trakt ? ratings.trakt.value : 0;\r\n }\r\n },\r\n\r\n selectedFilterKey: 'newNotExcluded',\r\n\r\n filters: [\r\n {\r\n key: 'all',\r\n label: () => translate('All'),\r\n filters: []\r\n },\r\n {\r\n key: 'popular',\r\n label: () => translate('Popular'),\r\n filters: [\r\n {\r\n key: 'isPopular',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'trending',\r\n label: () => translate('Trending'),\r\n filters: [\r\n {\r\n key: 'isTrending',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'newNotExcluded',\r\n label: () => translate('NewNonExcluded'),\r\n filters: [\r\n {\r\n key: 'isExisting',\r\n value: false,\r\n type: filterTypes.EQUAL\r\n },\r\n {\r\n key: 'isExcluded',\r\n value: false,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n }\r\n ],\r\n\r\n filterPredicates,\r\n\r\n filterBuilderProps: [\r\n {\r\n name: 'status',\r\n label: () => translate('ReleaseStatus'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.RELEASE_STATUS\r\n },\r\n {\r\n name: 'studio',\r\n label: () => translate('Studio'),\r\n type: filterBuilderTypes.ARRAY,\r\n optionsSelector: function(items) {\r\n const tagList = items.reduce((acc, movie) => {\r\n acc.push({\r\n id: movie.studio,\r\n name: movie.studio\r\n });\r\n\r\n return acc;\r\n }, []);\r\n\r\n return tagList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'collection',\r\n label: () => translate('Collection'),\r\n type: filterBuilderTypes.ARRAY,\r\n optionsSelector: function(items) {\r\n const collectionList = items.reduce((acc, movie) => {\r\n if (movie.collection && movie.collection.title) {\r\n acc.push({\r\n id: movie.collection.title,\r\n name: movie.collection.title\r\n });\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return collectionList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'originalLanguage',\r\n label: () => translate('OriginalLanguage'),\r\n type: filterBuilderTypes.EXACT,\r\n optionsSelector: function(items) {\r\n const collectionList = items.reduce((acc, movie) => {\r\n if (movie.originalLanguage) {\r\n acc.push({\r\n id: movie.originalLanguage.name,\r\n name: movie.originalLanguage.name\r\n });\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return collectionList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'inCinemas',\r\n label: () => translate('InCinemas'),\r\n type: filterBuilderTypes.DATE,\r\n valueType: filterBuilderValueTypes.DATE\r\n },\r\n {\r\n name: 'physicalRelease',\r\n label: () => translate('PhysicalRelease'),\r\n type: filterBuilderTypes.DATE,\r\n valueType: filterBuilderValueTypes.DATE\r\n },\r\n {\r\n name: 'digitalRelease',\r\n label: () => translate('DigitalRelease'),\r\n type: filterBuilderTypes.DATE,\r\n valueType: filterBuilderValueTypes.DATE\r\n },\r\n {\r\n name: 'runtime',\r\n label: () => translate('Runtime'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'genres',\r\n label: () => translate('Genres'),\r\n type: filterBuilderTypes.ARRAY,\r\n optionsSelector: function(items) {\r\n const tagList = items.reduce((acc, movie) => {\r\n movie.genres.forEach((genre) => {\r\n acc.push({\r\n id: genre,\r\n name: genre\r\n });\r\n });\r\n\r\n return acc;\r\n }, []);\r\n\r\n return tagList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'isAvailable',\r\n label: () => translate('ConsideredAvailable'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n },\r\n {\r\n name: 'minimumAvailability',\r\n label: () => translate('MinimumAvailability'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.MINIMUM_AVAILABILITY\r\n },\r\n {\r\n name: 'tmdbRating',\r\n label: () => translate('TmdbRating'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'tmdbVotes',\r\n label: () => translate('TmdbVotes'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'imdbRating',\r\n label: () => translate('ImdbRating'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'imdbVotes',\r\n label: () => translate('ImdbVotes'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'traktRating',\r\n label: () => translate('TraktRating'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'traktVotes',\r\n label: () => translate('TraktVotes'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'popularity',\r\n label: () => translate('Popularity'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'certification',\r\n label: () => translate('Certification'),\r\n type: filterBuilderTypes.EXACT\r\n },\r\n {\r\n name: 'lists',\r\n label: () => translate('Lists'),\r\n type: filterBuilderTypes.ARRAY,\r\n valueType: filterBuilderValueTypes.IMPORTLIST\r\n },\r\n {\r\n name: 'isExcluded',\r\n label: () => translate('OnExcludedList'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n },\r\n {\r\n name: 'isExisting',\r\n label: () => translate('ExistsInLibrary'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n },\r\n {\r\n name: 'isRecommendation',\r\n label: () => translate('Recommended'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n },\r\n {\r\n name: 'isTrending',\r\n label: () => translate('Trending'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n },\r\n {\r\n name: 'isPopular',\r\n label: () => translate('Popular'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n }\r\n ]\r\n};\r\n\r\nexport const persistState = [\r\n 'discoverMovie.defaults',\r\n 'discoverMovie.sortKey',\r\n 'discoverMovie.sortDirection',\r\n 'discoverMovie.selectedFilterKey',\r\n 'discoverMovie.customFilters',\r\n 'discoverMovie.view',\r\n 'discoverMovie.columns',\r\n 'discoverMovie.options',\r\n 'discoverMovie.posterOptions',\r\n 'discoverMovie.overviewOptions',\r\n 'discoverMovie.tableOptions'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const ADD_MOVIE = 'discoverMovie/addMovie';\r\nexport const ADD_MOVIES = 'discoverMovie/addMovies';\r\nexport const SET_ADD_MOVIE_VALUE = 'discoverMovie/setAddMovieValue';\r\nexport const CLEAR_ADD_MOVIE = 'discoverMovie/clearAddMovie';\r\nexport const SET_ADD_MOVIE_DEFAULT = 'discoverMovie/setAddMovieDefault';\r\n\r\nexport const FETCH_DISCOVER_MOVIES = 'discoverMovie/fetchDiscoverMovies';\r\n\r\nexport const SET_LIST_MOVIE_SORT = 'discoverMovie/setListMovieSort';\r\nexport const SET_LIST_MOVIE_FILTER = 'discoverMovie/setListMovieFilter';\r\nexport const SET_LIST_MOVIE_VIEW = 'discoverMovie/setListMovieView';\r\nexport const SET_LIST_MOVIE_OPTION = 'discoverMovie/setListMovieMovieOption';\r\nexport const SET_LIST_MOVIE_TABLE_OPTION = 'discoverMovie/setListMovieTableOption';\r\nexport const SET_LIST_MOVIE_POSTER_OPTION = 'discoverMovie/setListMoviePosterOption';\r\nexport const SET_LIST_MOVIE_OVERVIEW_OPTION = 'discoverMovie/setListMovieOverviewOption';\r\n\r\nexport const ADD_IMPORT_LIST_EXCLUSIONS = 'discoverMovie/addImportListExclusions';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const addMovie = createThunk(ADD_MOVIE);\r\nexport const addMovies = createThunk(ADD_MOVIES);\r\nexport const clearAddMovie = createAction(CLEAR_ADD_MOVIE);\r\nexport const setAddMovieDefault = createAction(SET_ADD_MOVIE_DEFAULT);\r\n\r\nexport const fetchDiscoverMovies = createThunk(FETCH_DISCOVER_MOVIES);\r\n\r\nexport const setListMovieSort = createAction(SET_LIST_MOVIE_SORT);\r\nexport const setListMovieFilter = createAction(SET_LIST_MOVIE_FILTER);\r\nexport const setListMovieView = createAction(SET_LIST_MOVIE_VIEW);\r\nexport const setListMovieOption = createAction(SET_LIST_MOVIE_OPTION);\r\nexport const setListMovieTableOption = createAction(SET_LIST_MOVIE_TABLE_OPTION);\r\nexport const setListMoviePosterOption = createAction(SET_LIST_MOVIE_POSTER_OPTION);\r\nexport const setListMovieOverviewOption = createAction(SET_LIST_MOVIE_OVERVIEW_OPTION);\r\n\r\nexport const addImportListExclusions = createThunk(ADD_IMPORT_LIST_EXCLUSIONS);\r\n\r\nexport const setAddMovieValue = createAction(SET_ADD_MOVIE_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_DISCOVER_MOVIES]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const {\r\n id,\r\n ...otherPayload\r\n } = payload;\r\n\r\n const {\r\n includeRecommendations = false,\r\n includeTrending = false,\r\n includePopular = false\r\n } = getState().discoverMovie.options;\r\n\r\n const promise = createAjaxRequest({\r\n url: `/importlist/movie?includeRecommendations=${includeRecommendations}&includeTrending=${includeTrending}&includePopular=${includePopular}`,\r\n data: otherPayload,\r\n traditional: true\r\n }).request;\r\n\r\n promise.done((data) => {\r\n // set an ID so the selectors and updaters done blow up.\r\n data = data.map((movie) => ({ ...movie, id: movie.tmdbId }));\r\n\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr.aborted ? null : xhr\r\n }));\r\n });\r\n },\r\n\r\n [ADD_MOVIE]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isAdding: true }));\r\n\r\n const tmdbId = payload.tmdbId;\r\n const items = getState().discoverMovie.items;\r\n const itemToUpdate = _.find(items, { tmdbId });\r\n\r\n const newMovie = getNewMovie(_.cloneDeep(itemToUpdate), payload);\r\n newMovie.id = 0;\r\n\r\n const promise = createAjaxRequest({\r\n url: '/movie',\r\n method: 'POST',\r\n contentType: 'application/json',\r\n data: JSON.stringify(newMovie)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n updateItem({ section: 'movies', ...data }),\r\n\r\n itemToUpdate.lists.length === 0 ? removeItem({ section: 'discoverMovie', ...itemToUpdate }) :\r\n updateItem({ section: 'discoverMovie', ...itemToUpdate, isExisting: true }),\r\n\r\n set({\r\n section,\r\n isAdding: false,\r\n isAdded: true,\r\n addError: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isAdding: false,\r\n isAdded: false,\r\n addError: xhr\r\n }));\r\n });\r\n },\r\n\r\n [ADD_MOVIES]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isAdding: true }));\r\n\r\n const ids = payload.ids;\r\n const addOptions = payload.addOptions;\r\n const items = getState().discoverMovie.items;\r\n const addedIds = [];\r\n\r\n const allNewMovies = ids.reduce((acc, id) => {\r\n const item = items.find((i) => i.id === id);\r\n const selectedMovie = item;\r\n\r\n // Make sure we have a selected movie and\r\n // the same movie hasn't been added yet.\r\n if (selectedMovie && !acc.some((a) => a.tmdbId === selectedMovie.tmdbId)) {\r\n if (!selectedMovie.isExisting) {\r\n const newMovie = getNewMovie(_.cloneDeep(selectedMovie), addOptions);\r\n newMovie.id = 0;\r\n\r\n addedIds.push(id);\r\n acc.push(newMovie);\r\n }\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n const promise = createAjaxRequest({\r\n url: '/importlist/movie',\r\n method: 'POST',\r\n contentType: 'application/json',\r\n data: JSON.stringify(allNewMovies)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n set({\r\n section,\r\n isAdding: false,\r\n isAdded: true\r\n }),\r\n\r\n ...data.map((movie) => updateItem({ section: 'movies', ...movie })),\r\n\r\n ...addedIds.map((id) => (items.find((i) => i.id === id).lists.length === 0 ? removeItem({ section, id }) : updateItem({ section, id, isExisting: true })))\r\n\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(\r\n set({\r\n section,\r\n isAdding: false,\r\n isAdded: true\r\n })\r\n );\r\n });\r\n },\r\n\r\n [ADD_IMPORT_LIST_EXCLUSIONS]: function(getState, payload, dispatch) {\r\n\r\n const ids = payload.ids;\r\n const items = getState().discoverMovie.items;\r\n\r\n const exclusions = ids.reduce((acc, id) => {\r\n const item = items.find((i) => i.tmdbId === id);\r\n\r\n const newExclusion = {\r\n tmdbId: id,\r\n movieTitle: item.title,\r\n movieYear: item.year\r\n };\r\n\r\n acc.push(newExclusion);\r\n\r\n return acc;\r\n }, []);\r\n\r\n const promise = createAjaxRequest({\r\n url: '/exclusions/bulk',\r\n method: 'POST',\r\n contentType: 'application/json',\r\n data: JSON.stringify(exclusions)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n ...data.map((item) => updateItem({ section: 'settings.importListExclusions', ...item })),\r\n\r\n ...data.map((item) => updateItem({ section, id: item.tmdbId, isExcluded: true })),\r\n\r\n set({\r\n section,\r\n isSaving: false,\r\n saveError: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: xhr\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_ADD_MOVIE_VALUE]: createSetSettingValueReducer(section),\r\n\r\n [SET_ADD_MOVIE_DEFAULT]: function(state, { payload }) {\r\n const newState = getSectionState(state, section);\r\n\r\n newState.defaults = {\r\n ...newState.defaults,\r\n ...payload\r\n };\r\n\r\n return updateSectionState(state, section, newState);\r\n },\r\n\r\n [SET_LIST_MOVIE_SORT]: createSetClientSideCollectionSortReducer(section),\r\n [SET_LIST_MOVIE_FILTER]: createSetClientSideCollectionFilterReducer(section),\r\n\r\n [SET_LIST_MOVIE_VIEW]: function(state, { payload }) {\r\n return Object.assign({}, state, { view: payload.view });\r\n },\r\n\r\n [SET_LIST_MOVIE_OPTION]: function(state, { payload }) {\r\n const discoveryMovieOptions = state.options;\r\n\r\n return {\r\n ...state,\r\n options: {\r\n ...discoveryMovieOptions,\r\n ...payload\r\n }\r\n };\r\n },\r\n\r\n [SET_LIST_MOVIE_TABLE_OPTION]: createSetTableOptionReducer(section),\r\n\r\n [SET_LIST_MOVIE_POSTER_OPTION]: function(state, { payload }) {\r\n const posterOptions = state.posterOptions;\r\n\r\n return {\r\n ...state,\r\n posterOptions: {\r\n ...posterOptions,\r\n ...payload\r\n }\r\n };\r\n },\r\n\r\n [SET_LIST_MOVIE_OVERVIEW_OPTION]: function(state, { payload }) {\r\n const overviewOptions = state.overviewOptions;\r\n\r\n return {\r\n ...state,\r\n overviewOptions: {\r\n ...overviewOptions,\r\n ...payload\r\n }\r\n };\r\n },\r\n\r\n [CLEAR_ADD_MOVIE]: createClearReducer(section, {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n })\r\n\r\n}, defaultState, section);\r\n","import { createAction } from 'redux-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'extraFiles';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_EXTRA_FILES = 'extraFiles/fetchExtraFiles';\r\nexport const CLEAR_EXTRA_FILES = 'extraFiles/clearExtraFiles';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchExtraFiles = createThunk(FETCH_EXTRA_FILES);\r\nexport const clearExtraFiles = createAction(CLEAR_EXTRA_FILES);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_EXTRA_FILES]: createFetchHandler(section, '/extraFile')\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_EXTRA_FILES]: (state) => {\r\n return Object.assign({}, state, defaultState);\r\n }\r\n\r\n}, defaultState, section);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"danger\":\"Icon-danger-epvdL\",\"default\":\"Icon-default-ZpHc_\",\"disabled\":\"Icon-disabled-cwrUJ\",\"info\":\"Icon-info-GEXUJ\",\"pink\":\"Icon-pink-xAGBW\",\"success\":\"Icon-success-J799D\",\"warning\":\"Icon-warning-wE4s6\",\"purple\":\"Icon-purple-roI8D\"};","import {\r\n FontAwesomeIcon,\r\n FontAwesomeIconProps,\r\n} from '@fortawesome/react-fontawesome';\r\nimport classNames from 'classnames';\r\nimport React, { ComponentProps } from 'react';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { Kind } from 'Helpers/Props/kinds';\r\nimport styles from './Icon.css';\r\n\r\nexport type IconName = FontAwesomeIconProps['icon'];\r\nexport type IconKind = Extract;\r\n\r\nexport interface IconProps\r\n extends Omit<\r\n FontAwesomeIconProps,\r\n 'icon' | 'spin' | 'name' | 'title' | 'size'\r\n > {\r\n containerClassName?: ComponentProps<'span'>['className'];\r\n name: IconName;\r\n kind?: IconKind;\r\n size?: number;\r\n isSpinning?: FontAwesomeIconProps['spin'];\r\n title?: string | (() => string) | null;\r\n}\r\n\r\nexport default function Icon({\r\n containerClassName,\r\n className,\r\n name,\r\n kind = kinds.DEFAULT,\r\n size = 14,\r\n title,\r\n isSpinning = false,\r\n fixedWidth = false,\r\n ...otherProps\r\n}: IconProps) {\r\n const icon = (\r\n \r\n );\r\n\r\n if (title) {\r\n return (\r\n \r\n {icon}\r\n \r\n );\r\n }\r\n\r\n return icon;\r\n}\r\n","import React from 'react';\r\nimport { createAction } from 'redux-actions';\r\nimport Icon from 'Components/Icon';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, filterTypes, icons, sortDirections } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';\r\nimport translate from 'Utilities/String/translate';\r\nimport { updateItem } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createServerSideCollectionHandlers from './Creators/createServerSideCollectionHandlers';\r\nimport createClearReducer from './Creators/Reducers/createClearReducer';\r\nimport createSetTableOptionReducer from './Creators/Reducers/createSetTableOptionReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'history';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pageSize: 20,\r\n sortKey: 'date',\r\n sortDirection: sortDirections.DESCENDING,\r\n items: [],\r\n\r\n columns: [\r\n {\r\n name: 'eventType',\r\n columnLabel: () => translate('EventType'),\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'movieMetadata.sortTitle',\r\n label: () => translate('Movie'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'quality',\r\n label: () => translate('Quality'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'customFormats',\r\n label: () => translate('Formats'),\r\n isSortable: false,\r\n isVisible: true\r\n },\r\n {\r\n name: 'date',\r\n label: () => translate('Date'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'downloadClient',\r\n label: () => translate('DownloadClient'),\r\n isVisible: false\r\n },\r\n {\r\n name: 'indexer',\r\n label: () => translate('Indexer'),\r\n isVisible: false\r\n },\r\n {\r\n name: 'releaseGroup',\r\n label: () => translate('ReleaseGroup'),\r\n isVisible: false\r\n },\r\n {\r\n name: 'sourceTitle',\r\n label: () => translate('SourceTitle'),\r\n isVisible: false\r\n },\r\n {\r\n name: 'customFormatScore',\r\n columnLabel: () => translate('CustomFormatScore'),\r\n label: React.createElement(Icon, {\r\n name: icons.SCORE,\r\n title: () => translate('CustomFormatScore')\r\n }),\r\n isVisible: false\r\n },\r\n {\r\n name: 'details',\r\n columnLabel: () => translate('Details'),\r\n isVisible: true,\r\n isModifiable: false\r\n }\r\n ],\r\n\r\n selectedFilterKey: 'all',\r\n\r\n filters: [\r\n {\r\n key: 'all',\r\n label: () => translate('All'),\r\n filters: []\r\n },\r\n {\r\n key: 'grabbed',\r\n label: () => translate('Grabbed'),\r\n filters: [\r\n {\r\n key: 'eventType',\r\n value: '1',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'imported',\r\n label: () => translate('Imported'),\r\n filters: [\r\n {\r\n key: 'eventType',\r\n value: '3',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'failed',\r\n label: () => translate('Failed'),\r\n filters: [\r\n {\r\n key: 'eventType',\r\n value: '4',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'deleted',\r\n label: () => translate('Deleted'),\r\n filters: [\r\n {\r\n key: 'eventType',\r\n value: '6',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'renamed',\r\n label: () => translate('Renamed'),\r\n filters: [\r\n {\r\n key: 'eventType',\r\n value: '8',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'ignored',\r\n label: () => translate('Ignored'),\r\n filters: [\r\n {\r\n key: 'eventType',\r\n value: '9',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n }\r\n ],\r\n\r\n filterBuilderProps: [\r\n {\r\n name: 'eventType',\r\n label: () => translate('EventType'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.HISTORY_EVENT_TYPE\r\n },\r\n {\r\n name: 'movieIds',\r\n label: () => translate('Movie'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.MOVIE\r\n },\r\n {\r\n name: 'quality',\r\n label: () => translate('Quality'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.QUALITY\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n type: filterBuilderTypes.CONTAINS,\r\n valueType: filterBuilderValueTypes.LANGUAGE\r\n }\r\n ]\r\n\r\n};\r\n\r\nexport const persistState = [\r\n 'history.pageSize',\r\n 'history.sortKey',\r\n 'history.sortDirection',\r\n 'history.selectedFilterKey',\r\n 'history.columns'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_HISTORY = 'history/fetchHistory';\r\nexport const GOTO_FIRST_HISTORY_PAGE = 'history/gotoHistoryFirstPage';\r\nexport const GOTO_PREVIOUS_HISTORY_PAGE = 'history/gotoHistoryPreviousPage';\r\nexport const GOTO_NEXT_HISTORY_PAGE = 'history/gotoHistoryNextPage';\r\nexport const GOTO_LAST_HISTORY_PAGE = 'history/gotoHistoryLastPage';\r\nexport const GOTO_HISTORY_PAGE = 'history/gotoHistoryPage';\r\nexport const SET_HISTORY_SORT = 'history/setHistorySort';\r\nexport const SET_HISTORY_FILTER = 'history/setHistoryFilter';\r\nexport const SET_HISTORY_TABLE_OPTION = 'history/setHistoryTableOption';\r\nexport const CLEAR_HISTORY = 'history/clearHistory';\r\nexport const MARK_AS_FAILED = 'history/markAsFailed';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchHistory = createThunk(FETCH_HISTORY);\r\nexport const gotoHistoryFirstPage = createThunk(GOTO_FIRST_HISTORY_PAGE);\r\nexport const gotoHistoryPreviousPage = createThunk(GOTO_PREVIOUS_HISTORY_PAGE);\r\nexport const gotoHistoryNextPage = createThunk(GOTO_NEXT_HISTORY_PAGE);\r\nexport const gotoHistoryLastPage = createThunk(GOTO_LAST_HISTORY_PAGE);\r\nexport const gotoHistoryPage = createThunk(GOTO_HISTORY_PAGE);\r\nexport const setHistorySort = createThunk(SET_HISTORY_SORT);\r\nexport const setHistoryFilter = createThunk(SET_HISTORY_FILTER);\r\nexport const setHistoryTableOption = createAction(SET_HISTORY_TABLE_OPTION);\r\nexport const clearHistory = createAction(CLEAR_HISTORY);\r\nexport const markAsFailed = createThunk(MARK_AS_FAILED);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n ...createServerSideCollectionHandlers(\r\n section,\r\n '/history',\r\n fetchHistory,\r\n {\r\n [serverSideCollectionHandlers.FETCH]: FETCH_HISTORY,\r\n [serverSideCollectionHandlers.FIRST_PAGE]: GOTO_FIRST_HISTORY_PAGE,\r\n [serverSideCollectionHandlers.PREVIOUS_PAGE]: GOTO_PREVIOUS_HISTORY_PAGE,\r\n [serverSideCollectionHandlers.NEXT_PAGE]: GOTO_NEXT_HISTORY_PAGE,\r\n [serverSideCollectionHandlers.LAST_PAGE]: GOTO_LAST_HISTORY_PAGE,\r\n [serverSideCollectionHandlers.EXACT_PAGE]: GOTO_HISTORY_PAGE,\r\n [serverSideCollectionHandlers.SORT]: SET_HISTORY_SORT,\r\n [serverSideCollectionHandlers.FILTER]: SET_HISTORY_FILTER\r\n }),\r\n\r\n [MARK_AS_FAILED]: function(getState, payload, dispatch) {\r\n const id = payload.id;\r\n\r\n dispatch(updateItem({\r\n section,\r\n id,\r\n isMarkingAsFailed: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n url: `/history/failed/${id}`,\r\n method: 'POST',\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done(() => {\r\n dispatch(updateItem({\r\n section,\r\n id,\r\n isMarkingAsFailed: false,\r\n markAsFailedError: null\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(updateItem({\r\n section,\r\n id,\r\n isMarkingAsFailed: false,\r\n markAsFailedError: xhr\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_HISTORY_TABLE_OPTION]: createSetTableOptionReducer(section),\r\n\r\n [CLEAR_HISTORY]: createClearReducer(section, {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n totalPages: 0,\r\n totalRecords: 0\r\n })\r\n\r\n}, defaultState, section);\r\n","import { batchActions } from 'redux-batched-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set, updateItem } from './baseActions';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createRemoveItemHandler from './Creators/createRemoveItemHandler';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'rootFolders';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSaving: false,\r\n saveError: null,\r\n items: []\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_ROOT_FOLDERS = 'rootFolders/fetchRootFolders';\r\nexport const ADD_ROOT_FOLDER = 'rootFolders/addRootFolder';\r\nexport const DELETE_ROOT_FOLDER = 'rootFolders/deleteRootFolder';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchRootFolders = createThunk(FETCH_ROOT_FOLDERS);\r\nexport const addRootFolder = createThunk(ADD_ROOT_FOLDER);\r\nexport const deleteRootFolder = createThunk(DELETE_ROOT_FOLDER);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_ROOT_FOLDERS]: createFetchHandler('rootFolders', '/rootFolder'),\r\n\r\n [DELETE_ROOT_FOLDER]: createRemoveItemHandler(\r\n 'rootFolders',\r\n '/rootFolder',\r\n (state) => state.rootFolders\r\n ),\r\n\r\n [ADD_ROOT_FOLDER]: function(getState, payload, dispatch) {\r\n const path = payload.path;\r\n\r\n dispatch(set({\r\n section,\r\n isSaving: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/rootFolder',\r\n method: 'POST',\r\n data: JSON.stringify({ path }),\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n updateItem({\r\n section,\r\n ...data\r\n }),\r\n\r\n set({\r\n section,\r\n isSaving: false,\r\n saveError: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: xhr\r\n }));\r\n });\r\n }\r\n\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({}, defaultState, section);\r\n","import _ from 'lodash';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport getNewMovie from 'Utilities/Movie/getNewMovie';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport { removeItem, set, updateItem } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport { fetchRootFolders } from './rootFolderActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'importMovie';\r\nlet concurrentLookups = 0;\r\nlet abortCurrentLookup = null;\r\nconst queue = [];\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isLookingUpMovie: false,\r\n isImporting: false,\r\n isImported: false,\r\n importError: null,\r\n items: []\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const QUEUE_LOOKUP_MOVIE = 'importMovie/queueLookupMovie';\r\nexport const START_LOOKUP_MOVIE = 'importMovie/startLookupMovie';\r\nexport const CANCEL_LOOKUP_MOVIE = 'importMovie/cancelLookupMovie';\r\nexport const LOOKUP_UNSEARCHED_MOVIES = 'importMovie/lookupUnsearchedMovies';\r\nexport const CLEAR_IMPORT_MOVIE = 'importMovie/clearImportMovie';\r\nexport const SET_IMPORT_MOVIE_VALUE = 'importMovie/setImportMovieValue';\r\nexport const IMPORT_MOVIE = 'importMovie/importMovie';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const queueLookupMovie = createThunk(QUEUE_LOOKUP_MOVIE);\r\nexport const startLookupMovie = createThunk(START_LOOKUP_MOVIE);\r\nexport const importMovie = createThunk(IMPORT_MOVIE);\r\nexport const lookupUnsearchedMovies = createThunk(LOOKUP_UNSEARCHED_MOVIES);\r\nexport const clearImportMovie = createAction(CLEAR_IMPORT_MOVIE);\r\nexport const cancelLookupMovie = createAction(CANCEL_LOOKUP_MOVIE);\r\n\r\nexport const setImportMovieValue = createAction(SET_IMPORT_MOVIE_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [QUEUE_LOOKUP_MOVIE]: function(getState, payload, dispatch) {\r\n const {\r\n name,\r\n path,\r\n relativePath,\r\n term,\r\n topOfQueue = false\r\n } = payload;\r\n\r\n const state = getState().importMovie;\r\n const item = _.find(state.items, { id: name }) || {\r\n id: name,\r\n term,\r\n path,\r\n relativePath,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null\r\n };\r\n\r\n dispatch(updateItem({\r\n section,\r\n ...item,\r\n term,\r\n isQueued: true,\r\n items: []\r\n }));\r\n\r\n const itemIndex = queue.indexOf(item.id);\r\n\r\n if (itemIndex >= 0) {\r\n queue.splice(itemIndex, 1);\r\n }\r\n\r\n if (topOfQueue) {\r\n queue.unshift(item.id);\r\n } else {\r\n queue.push(item.id);\r\n }\r\n\r\n if (term && term.length > 2) {\r\n dispatch(startLookupMovie({ start: true }));\r\n }\r\n },\r\n\r\n [START_LOOKUP_MOVIE]: function(getState, payload, dispatch) {\r\n if (concurrentLookups >= 1) {\r\n return;\r\n }\r\n\r\n const state = getState().importMovie;\r\n\r\n const {\r\n isLookingUpMovie,\r\n items\r\n } = state;\r\n\r\n const queueId = queue[0];\r\n\r\n if (payload.start && !isLookingUpMovie) {\r\n dispatch(set({ section, isLookingUpMovie: true }));\r\n } else if (!isLookingUpMovie) {\r\n return;\r\n } else if (!queueId) {\r\n dispatch(set({ section, isLookingUpMovie: false }));\r\n return;\r\n }\r\n\r\n concurrentLookups++;\r\n queue.splice(0, 1);\r\n\r\n const queued = items.find((i) => i.id === queueId);\r\n\r\n dispatch(updateItem({\r\n section,\r\n id: queued.id,\r\n isFetching: true\r\n }));\r\n\r\n const { request, abortRequest } = createAjaxRequest({\r\n url: '/movie/lookup',\r\n data: {\r\n term: queued.term\r\n }\r\n });\r\n\r\n abortCurrentLookup = abortRequest;\r\n\r\n request.done((data) => {\r\n const selectedMovie = queued.selectedMovie || data[0];\r\n\r\n dispatch(updateItem({\r\n section,\r\n id: queued.id,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null,\r\n items: data,\r\n isQueued: false,\r\n selectedMovie,\r\n updateOnly: true\r\n }));\r\n });\r\n\r\n request.fail((xhr) => {\r\n dispatch(updateItem({\r\n section,\r\n id: queued.id,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr,\r\n isQueued: false,\r\n updateOnly: true\r\n }));\r\n });\r\n\r\n request.always(() => {\r\n concurrentLookups--;\r\n\r\n dispatch(startLookupMovie());\r\n });\r\n },\r\n\r\n [LOOKUP_UNSEARCHED_MOVIES]: function(getState, payload, dispatch) {\r\n const state = getState().importMovie;\r\n\r\n if (state.isLookingUpMovie) {\r\n return;\r\n }\r\n\r\n state.items.forEach((item) => {\r\n const id = item.id;\r\n\r\n if (\r\n !item.isPopulated &&\r\n !queue.includes(id)\r\n ) {\r\n queue.push(item.id);\r\n }\r\n });\r\n\r\n if (queue.length) {\r\n dispatch(startLookupMovie({ start: true }));\r\n }\r\n },\r\n\r\n [IMPORT_MOVIE]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isImporting: true }));\r\n\r\n const ids = payload.ids;\r\n const items = getState().importMovie.items;\r\n const addedIds = [];\r\n\r\n const allNewMovies = ids.reduce((acc, id) => {\r\n const item = items.find((i) => i.id === id);\r\n const selectedMovie = item.selectedMovie;\r\n\r\n // Make sure we have a selected movie and\r\n // the same movie hasn't been added yet.\r\n if (selectedMovie && !acc.some((a) => a.tmdbId === selectedMovie.tmdbId)) {\r\n const newMovie = getNewMovie(_.cloneDeep(selectedMovie), item);\r\n newMovie.path = item.path;\r\n\r\n addedIds.push(id);\r\n acc.push(newMovie);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n const promise = createAjaxRequest({\r\n url: '/movie/import',\r\n method: 'POST',\r\n contentType: 'application/json',\r\n data: JSON.stringify(allNewMovies)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n set({\r\n section,\r\n isImporting: false,\r\n isImported: true,\r\n importError: null\r\n }),\r\n\r\n ...data.map((movie) => updateItem({ section: 'movies', ...movie })),\r\n\r\n ...addedIds.map((id) => removeItem({ section, id }))\r\n ]));\r\n\r\n dispatch(fetchRootFolders());\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(batchActions([\r\n set({\r\n section,\r\n isImporting: false,\r\n isImported: true,\r\n importError: xhr\r\n }),\r\n\r\n ...addedIds.map((id) => updateItem({\r\n section,\r\n id\r\n }))\r\n ]));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CANCEL_LOOKUP_MOVIE]: function(state) {\r\n queue.splice(0, queue.length);\r\n\r\n const items = state.items.map((item) => {\r\n if (item.isQueued) {\r\n return {\r\n ...item,\r\n isQueued: false\r\n };\r\n }\r\n\r\n return item;\r\n });\r\n\r\n return Object.assign({}, state, {\r\n isLookingUpMovie: false,\r\n items\r\n });\r\n },\r\n\r\n [CLEAR_IMPORT_MOVIE]: function(state) {\r\n if (abortCurrentLookup) {\r\n abortCurrentLookup();\r\n\r\n abortCurrentLookup = null;\r\n }\r\n\r\n queue.splice(0, queue.length);\r\n\r\n return Object.assign({}, state, defaultState);\r\n },\r\n\r\n [SET_IMPORT_MOVIE_VALUE]: function(state, { payload }) {\r\n const newState = getSectionState(state, section);\r\n const items = newState.items;\r\n const index = items.findIndex((item) => item.id === payload.id);\r\n\r\n newState.items = [...items];\r\n\r\n if (index >= 0) {\r\n const item = items[index];\r\n\r\n newState.items.splice(index, 1, { ...item, ...payload });\r\n } else {\r\n newState.items.push({ ...payload });\r\n }\r\n\r\n return updateSectionState(state, section, newState);\r\n }\r\n\r\n}, defaultState, section);\r\n","const regex = /\\d+/g;\r\n\r\nfunction naturalExpansion(input) {\r\n if (!input) {\r\n return '';\r\n }\r\n\r\n return input.replace(regex, (n) => n.padStart(8, '0'));\r\n}\r\n\r\nexport default naturalExpansion;\r\n","import moment from 'moment';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { sortDirections } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport naturalExpansion from 'Utilities/String/naturalExpansion';\r\nimport { set, update, updateItem } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'interactiveImport';\r\n\r\nconst MAXIMUM_RECENT_FOLDERS = 10;\r\n\r\nlet abortCurrentRequest = null;\r\nlet currentIds = [];\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n isReprocessing: false,\r\n error: null,\r\n items: [],\r\n originalItems: [],\r\n sortKey: 'relativePath',\r\n sortDirection: sortDirections.ASCENDING,\r\n favoriteFolders: [],\r\n recentFolders: [],\r\n importMode: 'chooseImportMode',\r\n sortPredicates: {\r\n relativePath: function(item, direction) {\r\n const relativePath = item.relativePath;\r\n\r\n return naturalExpansion(relativePath.toLowerCase());\r\n },\r\n\r\n movie: function(item, direction) {\r\n const movie = item.movie;\r\n\r\n return movie ? movie.sortTitle : '';\r\n },\r\n\r\n quality: function(item, direction) {\r\n return item.qualityWeight || 0;\r\n },\r\n\r\n customFormats: function(item, direction) {\r\n return item.customFormatScore;\r\n }\r\n }\r\n};\r\n\r\nexport const persistState = [\r\n 'interactiveImport.sortKey',\r\n 'interactiveImport.sortDirection',\r\n 'interactiveImport.favoriteFolders',\r\n 'interactiveImport.recentFolders',\r\n 'interactiveImport.importMode'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_INTERACTIVE_IMPORT_ITEMS = 'interactiveImport/fetchInteractiveImportItems';\r\nexport const REPROCESS_INTERACTIVE_IMPORT_ITEMS = 'interactiveImport/reprocessInteractiveImportItems';\r\nexport const SET_INTERACTIVE_IMPORT_SORT = 'interactiveImport/setInteractiveImportSort';\r\nexport const UPDATE_INTERACTIVE_IMPORT_ITEM = 'interactiveImport/updateInteractiveImportItem';\r\nexport const UPDATE_INTERACTIVE_IMPORT_ITEMS = 'interactiveImport/updateInteractiveImportItems';\r\nexport const CLEAR_INTERACTIVE_IMPORT = 'interactiveImport/clearInteractiveImport';\r\nexport const ADD_RECENT_FOLDER = 'interactiveImport/addRecentFolder';\r\nexport const REMOVE_RECENT_FOLDER = 'interactiveImport/removeRecentFolder';\r\nexport const ADD_FAVORITE_FOLDER = 'interactiveImport/addFavoriteFolder';\r\nexport const REMOVE_FAVORITE_FOLDER = 'interactiveImport/removeFavoriteFolder';\r\nexport const SET_INTERACTIVE_IMPORT_MODE = 'interactiveImport/setInteractiveImportMode';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchInteractiveImportItems = createThunk(FETCH_INTERACTIVE_IMPORT_ITEMS);\r\nexport const reprocessInteractiveImportItems = createThunk(REPROCESS_INTERACTIVE_IMPORT_ITEMS);\r\nexport const setInteractiveImportSort = createAction(SET_INTERACTIVE_IMPORT_SORT);\r\nexport const updateInteractiveImportItem = createAction(UPDATE_INTERACTIVE_IMPORT_ITEM);\r\nexport const updateInteractiveImportItems = createAction(UPDATE_INTERACTIVE_IMPORT_ITEMS);\r\nexport const clearInteractiveImport = createAction(CLEAR_INTERACTIVE_IMPORT);\r\nexport const addRecentFolder = createAction(ADD_RECENT_FOLDER);\r\nexport const removeRecentFolder = createAction(REMOVE_RECENT_FOLDER);\r\nexport const addFavoriteFolder = createAction(ADD_FAVORITE_FOLDER);\r\nexport const removeFavoriteFolder = createAction(REMOVE_FAVORITE_FOLDER);\r\nexport const setInteractiveImportMode = createAction(SET_INTERACTIVE_IMPORT_MODE);\r\n\r\n//\r\n// Action Handlers\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_INTERACTIVE_IMPORT_ITEMS]: function(getState, payload, dispatch) {\r\n if (!payload.downloadId && !payload.folder) {\r\n dispatch(set({ section, error: { message: '`downloadId` or `folder` is required.' } }));\r\n return;\r\n }\r\n\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/manualimport',\r\n data: payload\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null,\r\n originalItems: data\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n });\r\n },\r\n\r\n [REPROCESS_INTERACTIVE_IMPORT_ITEMS]: function(getState, payload, dispatch) {\r\n if (abortCurrentRequest) {\r\n abortCurrentRequest();\r\n }\r\n\r\n dispatch(batchActions([\r\n ...currentIds.map((id) => updateItem({\r\n section,\r\n id,\r\n isReprocessing: false,\r\n updateOnly: true\r\n })),\r\n ...payload.ids.map((id) => updateItem({\r\n section,\r\n id,\r\n isReprocessing: true,\r\n updateOnly: true\r\n }))\r\n ]));\r\n\r\n const items = getState()[section].items;\r\n\r\n const requestPayload = payload.ids.map((id) => {\r\n const item = items.find((i) => i.id === id);\r\n\r\n return {\r\n id,\r\n path: item.path,\r\n movieId: item.movie ? item.movie.id : undefined,\r\n quality: item.quality,\r\n languages: item.languages,\r\n releaseGroup: item.releaseGroup,\r\n indexerFlags: item.indexerFlags,\r\n downloadId: item.downloadId\r\n };\r\n });\r\n\r\n const { request, abortRequest } = createAjaxRequest({\r\n method: 'POST',\r\n url: '/manualimport',\r\n contentType: 'application/json',\r\n data: JSON.stringify(requestPayload)\r\n });\r\n\r\n abortCurrentRequest = abortRequest;\r\n currentIds = payload.ids;\r\n\r\n request.done((data) => {\r\n dispatch(batchActions(\r\n data.map((item) => updateItem({\r\n section,\r\n ...item,\r\n isReprocessing: false,\r\n updateOnly: true\r\n }))\r\n ));\r\n });\r\n\r\n request.fail((xhr) => {\r\n if (xhr.aborted) {\r\n return;\r\n }\r\n\r\n dispatch(batchActions(\r\n payload.ids.map((id) => updateItem({\r\n section,\r\n id,\r\n isReprocessing: false,\r\n updateOnly: true\r\n }))\r\n ));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [UPDATE_INTERACTIVE_IMPORT_ITEM]: (state, { payload }) => {\r\n const id = payload.id;\r\n const newState = Object.assign({}, state);\r\n const items = newState.items;\r\n const index = items.findIndex((item) => item.id === id);\r\n const item = Object.assign({}, items[index], payload);\r\n\r\n newState.items = [...items];\r\n newState.items.splice(index, 1, item);\r\n\r\n return newState;\r\n },\r\n\r\n [UPDATE_INTERACTIVE_IMPORT_ITEMS]: (state, { payload }) => {\r\n const { ids, ...otherPayload } = payload;\r\n const newState = Object.assign({}, state);\r\n const items = [...newState.items];\r\n\r\n ids.forEach((id) => {\r\n const index = items.findIndex((item) => item.id === id);\r\n const item = Object.assign({}, items[index], otherPayload);\r\n\r\n items.splice(index, 1, item);\r\n });\r\n\r\n newState.items = items;\r\n\r\n return newState;\r\n },\r\n\r\n [ADD_RECENT_FOLDER]: function(state, { payload }) {\r\n const folder = payload.folder;\r\n const recentFolder = { folder, lastUsed: moment().toISOString() };\r\n const recentFolders = [...state.recentFolders];\r\n const index = recentFolders.findIndex((r) => r.folder === folder);\r\n\r\n if (index > -1) {\r\n recentFolders.splice(index, 1);\r\n }\r\n\r\n recentFolders.push(recentFolder);\r\n\r\n const sliceIndex = Math.max(recentFolders.length - MAXIMUM_RECENT_FOLDERS, 0);\r\n\r\n return Object.assign({}, state, { recentFolders: recentFolders.slice(sliceIndex) });\r\n },\r\n\r\n [REMOVE_RECENT_FOLDER]: function(state, { payload }) {\r\n const folder = payload.folder;\r\n const recentFolders = [...state.recentFolders];\r\n const index = recentFolders.findIndex((r) => r.folder === folder);\r\n\r\n recentFolders.splice(index, 1);\r\n\r\n return Object.assign({}, state, { recentFolders });\r\n },\r\n\r\n [ADD_FAVORITE_FOLDER]: function(state, { payload }) {\r\n const folder = payload.folder;\r\n const favoriteFolder = { folder };\r\n const favoriteFolders = [...state.favoriteFolders, favoriteFolder].sort(sortByProp('folder'));\r\n\r\n return Object.assign({}, state, { favoriteFolders });\r\n },\r\n\r\n [REMOVE_FAVORITE_FOLDER]: function(state, { payload }) {\r\n const folder = payload.folder;\r\n const favoriteFolders = state.favoriteFolders.reduce((acc, item) => {\r\n if (item.folder !== folder) {\r\n acc.push(item);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return Object.assign({}, state, { favoriteFolders });\r\n },\r\n\r\n [CLEAR_INTERACTIVE_IMPORT]: function(state) {\r\n const newState = {\r\n ...defaultState,\r\n favoriteFolders: state.favoriteFolders,\r\n recentFolders: state.recentFolders,\r\n importMode: state.importMode\r\n };\r\n\r\n return newState;\r\n },\r\n\r\n [SET_INTERACTIVE_IMPORT_SORT]: createSetClientSideCollectionSortReducer(section),\r\n\r\n [SET_INTERACTIVE_IMPORT_MODE]: function(state, { payload }) {\r\n return Object.assign({}, state, { importMode: payload.importMode });\r\n }\r\n\r\n}, defaultState, section);\r\n","import { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set, update } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'movieBlocklist';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_MOVIE_BLOCKLIST = 'movieBlocklist/fetchMovieBlocklist';\r\nexport const CLEAR_MOVIE_BLOCKLIST = 'movieBlocklist/clearMovieBlocklist';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMovieBlocklist = createThunk(FETCH_MOVIE_BLOCKLIST);\r\nexport const clearMovieBlocklist = createAction(CLEAR_MOVIE_BLOCKLIST);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_MOVIE_BLOCKLIST]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/blocklist/movie',\r\n data: payload\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_MOVIE_BLOCKLIST]: (state) => {\r\n return Object.assign({}, state, defaultState);\r\n }\r\n\r\n}, defaultState, section);\r\n\r\n","import _ from 'lodash';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, filterTypePredicates, filterTypes, sortDirections } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport getNewMovie from 'Utilities/Movie/getNewMovie';\r\nimport translate from 'Utilities/String/translate';\r\nimport { set, update, updateItem } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createSaveProviderHandler from './Creators/createSaveProviderHandler';\r\nimport createSetClientSideCollectionFilterReducer from './Creators/Reducers/createSetClientSideCollectionFilterReducer';\r\nimport createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';\r\nimport createSetSettingValueReducer from './Creators/Reducers/createSetSettingValueReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'movieCollections';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n isSaving: false,\r\n saveError: null,\r\n isAdding: false,\r\n addError: null,\r\n sortKey: 'sortTitle',\r\n sortDirection: sortDirections.ASCENDING,\r\n secondarySortKey: 'sortTitle',\r\n secondarySortDirection: sortDirections.ASCENDING,\r\n view: 'overview',\r\n pendingChanges: {},\r\n\r\n overviewOptions: {\r\n detailedProgressBar: false,\r\n size: 'medium',\r\n showDetails: true,\r\n showOverview: true,\r\n showPosters: true\r\n },\r\n\r\n defaults: {\r\n rootFolderPath: '',\r\n monitor: 'movieOnly',\r\n qualityProfileId: 0,\r\n minimumAvailability: 'released',\r\n searchForMovie: true,\r\n tags: []\r\n },\r\n\r\n selectedFilterKey: 'all',\r\n\r\n filters: [\r\n {\r\n key: 'all',\r\n label: () => translate('All'),\r\n filters: []\r\n },\r\n {\r\n key: 'missing',\r\n label: () => translate('Missing'),\r\n filters: [\r\n {\r\n key: 'missingMovies',\r\n value: 0,\r\n type: filterTypes.GREATER_THAN\r\n }\r\n ]\r\n },\r\n {\r\n key: 'complete',\r\n label: () => translate('Complete'),\r\n filters: [\r\n {\r\n key: 'missingMovies',\r\n value: 0,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n }\r\n ],\r\n\r\n filterPredicates: {\r\n genres: function(item, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const allGenres = item.movies.flatMap(({ genres }) => genres);\r\n const genres = Array.from(new Set(allGenres));\r\n\r\n return predicate(genres, filterValue);\r\n },\r\n totalMovies: function(item, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n const { movies } = item;\r\n\r\n const totalMovies = movies.length;\r\n return predicate(totalMovies, filterValue);\r\n }\r\n },\r\n\r\n filterBuilderProps: [\r\n {\r\n name: 'title',\r\n label: () => translate('Title'),\r\n type: filterBuilderTypes.STRING\r\n },\r\n {\r\n name: 'monitored',\r\n label: () => translate('Monitored'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n },\r\n {\r\n name: 'qualityProfileId',\r\n label: () => translate('QualityProfile'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.QUALITY_PROFILE\r\n },\r\n {\r\n name: 'rootFolderPath',\r\n label: () => translate('RootFolder'),\r\n type: filterBuilderTypes.STRING\r\n },\r\n {\r\n name: 'genres',\r\n label: () => translate('Genres'),\r\n type: filterBuilderTypes.ARRAY,\r\n optionsSelector: function(items) {\r\n const genreList = items.reduce((acc, collection) => {\r\n const collectionGenres = collection.movies.flatMap(({ genres }) => genres);\r\n const genres = Array.from(new Set(collectionGenres));\r\n\r\n genres.forEach((genre) => {\r\n acc.push({\r\n id: genre,\r\n name: genre\r\n });\r\n });\r\n\r\n return acc;\r\n }, []);\r\n\r\n return genreList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'totalMovies',\r\n label: () => translate('TotalMovies'),\r\n type: filterBuilderTypes.NUMBER\r\n }\r\n ]\r\n};\r\n\r\nexport const persistState = [\r\n 'movieCollections.defaults',\r\n 'movieCollections.sortKey',\r\n 'movieCollections.sortDirection',\r\n 'movieCollections.selectedFilterKey',\r\n 'movieCollections.customFilters',\r\n 'movieCollections.options',\r\n 'movieCollections.overviewOptions'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_MOVIE_COLLECTIONS = 'movieCollections/fetchMovieCollections';\r\nexport const CLEAR_MOVIE_COLLECTIONS = 'movieCollections/clearMovieCollections';\r\nexport const SAVE_MOVIE_COLLECTION = 'movieCollections/saveMovieCollection';\r\nexport const SAVE_MOVIE_COLLECTIONS = 'movieCollections/saveMovieCollections';\r\nexport const SET_MOVIE_COLLECTION_VALUE = 'movieCollections/setMovieCollectionValue';\r\n\r\nexport const ADD_MOVIE = 'movieCollections/addMovie';\r\n\r\nexport const TOGGLE_COLLECTION_MONITORED = 'movieCollections/toggleCollectionMonitored';\r\n\r\nexport const SET_MOVIE_COLLECTIONS_SORT = 'movieCollections/setMovieCollectionsSort';\r\nexport const SET_MOVIE_COLLECTIONS_FILTER = 'movieCollections/setMovieCollectionsFilter';\r\nexport const SET_MOVIE_COLLECTIONS_OPTION = 'movieCollections/setMovieCollectionsOption';\r\nexport const SET_MOVIE_COLLECTIONS_OVERVIEW_OPTION = 'movieCollections/setMovieCollectionsOverviewOption';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMovieCollections = createThunk(FETCH_MOVIE_COLLECTIONS);\r\nexport const clearMovieCollections = createAction(CLEAR_MOVIE_COLLECTIONS);\r\nexport const saveMovieCollection = createThunk(SAVE_MOVIE_COLLECTION);\r\nexport const saveMovieCollections = createThunk(SAVE_MOVIE_COLLECTIONS);\r\n\r\nexport const addMovie = createThunk(ADD_MOVIE);\r\n\r\nexport const toggleCollectionMonitored = createThunk(TOGGLE_COLLECTION_MONITORED);\r\n\r\nexport const setMovieCollectionsSort = createAction(SET_MOVIE_COLLECTIONS_SORT);\r\nexport const setMovieCollectionsFilter = createAction(SET_MOVIE_COLLECTIONS_FILTER);\r\nexport const setMovieCollectionsOption = createAction(SET_MOVIE_COLLECTIONS_OPTION);\r\nexport const setMovieCollectionsOverviewOption = createAction(SET_MOVIE_COLLECTIONS_OVERVIEW_OPTION);\r\n\r\nexport const setMovieCollectionValue = createAction(SET_MOVIE_COLLECTION_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [SAVE_MOVIE_COLLECTION]: createSaveProviderHandler(section, '/collection'),\r\n [FETCH_MOVIE_COLLECTIONS]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/collection',\r\n data: payload\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n });\r\n },\r\n\r\n [ADD_MOVIE]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isAdding: true }));\r\n\r\n const tmdbId = payload.tmdbId;\r\n const title = payload.title;\r\n\r\n const newMovie = getNewMovie({ tmdbId, title }, payload);\r\n newMovie.id = 0;\r\n\r\n const promise = createAjaxRequest({\r\n url: '/movie',\r\n method: 'POST',\r\n contentType: 'application/json',\r\n data: JSON.stringify(newMovie)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n const collectionToUpdate = getState().movieCollections.items.find((collection) => collection.tmdbId === data.collection.tmdbId);\r\n const collectionData = { ...collectionToUpdate, missingMovies: Math.max(0, collectionToUpdate.missingMovies - 1 ) };\r\n\r\n dispatch(batchActions([\r\n updateItem({ section: 'movies', ...data }),\r\n\r\n set({\r\n section,\r\n isAdding: false,\r\n isAdded: true,\r\n addError: null\r\n }),\r\n\r\n updateItem({ section, ...collectionData })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isAdding: false,\r\n isAdded: false,\r\n addError: xhr\r\n }));\r\n });\r\n },\r\n\r\n [TOGGLE_COLLECTION_MONITORED]: (getState, payload, dispatch) => {\r\n const {\r\n collectionId: id,\r\n monitored\r\n } = payload;\r\n\r\n const collection = _.find(getState().movieCollections.items, { id });\r\n\r\n dispatch(updateItem({\r\n id,\r\n section,\r\n isSaving: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n url: `/collection/${id}`,\r\n method: 'PUT',\r\n data: JSON.stringify({\r\n ...collection,\r\n monitored\r\n }),\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(updateItem({\r\n id,\r\n section,\r\n isSaving: false,\r\n monitored\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(updateItem({\r\n id,\r\n section,\r\n isSaving: false\r\n }));\r\n });\r\n },\r\n\r\n [SAVE_MOVIE_COLLECTIONS]: function(getState, payload, dispatch) {\r\n const {\r\n collectionIds,\r\n monitored,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n rootFolderPath,\r\n searchOnAdd\r\n } = payload;\r\n\r\n const response = {};\r\n\r\n if (payload.hasOwnProperty('monitored')) {\r\n response.monitored = monitored;\r\n }\r\n\r\n if (payload.hasOwnProperty('monitor')) {\r\n response.monitorMovies = monitor === 'monitored';\r\n }\r\n\r\n if (payload.hasOwnProperty('qualityProfileId')) {\r\n response.qualityProfileId = qualityProfileId;\r\n }\r\n\r\n if (payload.hasOwnProperty('minimumAvailability')) {\r\n response.minimumAvailability = minimumAvailability;\r\n }\r\n\r\n if (payload.hasOwnProperty('searchOnAdd')) {\r\n response.searchOnAdd = searchOnAdd;\r\n }\r\n\r\n response.rootFolderPath = rootFolderPath;\r\n response.collectionIds = collectionIds;\r\n\r\n dispatch(set({\r\n section,\r\n isSaving: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/collection',\r\n method: 'PUT',\r\n data: JSON.stringify(response),\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(fetchMovieCollections());\r\n\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: null\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: xhr\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_MOVIE_COLLECTIONS_SORT]: createSetClientSideCollectionSortReducer(section),\r\n [SET_MOVIE_COLLECTIONS_FILTER]: createSetClientSideCollectionFilterReducer(section),\r\n [SET_MOVIE_COLLECTION_VALUE]: createSetSettingValueReducer(section),\r\n\r\n [SET_MOVIE_COLLECTIONS_OPTION]: function(state, { payload }) {\r\n const movieCollectionsOptions = state.options;\r\n\r\n return {\r\n ...state,\r\n options: {\r\n ...movieCollectionsOptions,\r\n ...payload\r\n }\r\n };\r\n },\r\n\r\n [SET_MOVIE_COLLECTIONS_OVERVIEW_OPTION]: function(state, { payload }) {\r\n const overviewOptions = state.overviewOptions;\r\n\r\n return {\r\n ...state,\r\n overviewOptions: {\r\n ...overviewOptions,\r\n ...payload\r\n }\r\n };\r\n },\r\n\r\n [CLEAR_MOVIE_COLLECTIONS]: (state) => {\r\n return Object.assign({}, state, defaultState);\r\n }\r\n\r\n}, defaultState, section);\r\n","import { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set, update } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'movieCredits';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_MOVIE_CREDITS = 'movieCredits/fetchMovieCredits';\r\nexport const CLEAR_MOVIE_CREDITS = 'movieCredits/clearMovieCredits';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMovieCredits = createThunk(FETCH_MOVIE_CREDITS);\r\nexport const clearMovieCredits = createAction(CLEAR_MOVIE_CREDITS);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_MOVIE_CREDITS]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/credit',\r\n data: payload\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_MOVIE_CREDITS]: (state) => {\r\n return Object.assign({}, state, defaultState);\r\n }\r\n\r\n}, defaultState, section);\r\n","import classNames from 'classnames';\r\nimport React, {\r\n ComponentPropsWithoutRef,\r\n ElementType,\r\n SyntheticEvent,\r\n useCallback,\r\n} from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport styles from './Link.css';\r\n\r\nexport type LinkProps =\r\n ComponentPropsWithoutRef & {\r\n component?: C;\r\n to?: string;\r\n target?: string;\r\n isDisabled?: LinkProps['disabled'];\r\n noRouter?: boolean;\r\n onPress?(event: SyntheticEvent): void;\r\n };\r\n\r\nexport default function Link({\r\n className,\r\n component,\r\n to,\r\n target,\r\n type,\r\n isDisabled,\r\n noRouter,\r\n onPress,\r\n ...otherProps\r\n}: LinkProps) {\r\n const Component = component || 'button';\r\n\r\n const onClick = useCallback(\r\n (event: SyntheticEvent) => {\r\n if (isDisabled) {\r\n return;\r\n }\r\n\r\n onPress?.(event);\r\n },\r\n [isDisabled, onPress]\r\n );\r\n\r\n const linkClass = classNames(\r\n className,\r\n styles.link,\r\n to && styles.to,\r\n isDisabled && 'isDisabled'\r\n );\r\n\r\n if (to) {\r\n const toLink = /\\w+?:\\/\\//.test(to);\r\n\r\n if (toLink || noRouter) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"Link-link-RInnp\",\"to\":\"Link-to-kylTi\"};","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"IconButton-button-t4C5V Link-link-RInnp\",\"isDisabled\":\"IconButton-isDisabled-qx70J\"};","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport Icon, { IconProps } from 'Components/Icon';\r\nimport translate from 'Utilities/String/translate';\r\nimport Link, { LinkProps } from './Link';\r\nimport styles from './IconButton.css';\r\n\r\nexport interface IconButtonProps\r\n extends Omit,\r\n Pick {\r\n iconClassName?: IconProps['className'];\r\n}\r\n\r\nexport default function IconButton({\r\n className = styles.button,\r\n iconClassName,\r\n name,\r\n kind,\r\n size = 12,\r\n isSpinning,\r\n ...otherProps\r\n}: IconButtonProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","export const CALENDAR = 'calendar';\r\nexport const MOVIES = 'movies';\r\nexport const INTERACTIVE_IMPORT = 'interactiveImport.movies';\r\nexport const WANTED_CUTOFF_UNMET = 'wanted.cutoffUnmet';\r\nexport const WANTED_MISSING = 'wanted.missing';\r\n\r\nexport default {\r\n CALENDAR,\r\n MOVIES,\r\n INTERACTIVE_IMPORT,\r\n WANTED_CUTOFF_UNMET,\r\n WANTED_MISSING,\r\n} as const;\r\n","import _ from 'lodash';\r\nimport React from 'react';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport Icon from 'Components/Icon';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport { icons, sortDirections } from 'Helpers/Props';\r\nimport movieEntities from 'Movie/movieEntities';\r\nimport createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';\r\nimport createSetTableOptionReducer from 'Store/Actions/Creators/Reducers/createSetTableOptionReducer';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport translate from 'Utilities/String/translate';\r\nimport { removeItem, set, updateItem } from './baseActions';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createRemoveItemHandler from './Creators/createRemoveItemHandler';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'movieFiles';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n isSaving: false,\r\n saveError: null,\r\n sortKey: 'relativePath',\r\n sortDirection: sortDirections.ASCENDING,\r\n items: [],\r\n\r\n columns: [\r\n {\r\n name: 'relativePath',\r\n label: () => translate('RelativePath'),\r\n isVisible: true,\r\n isSortable: true\r\n },\r\n {\r\n name: 'videoCodec',\r\n label: () => translate('VideoCodec'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'videoDynamicRangeType',\r\n label: () => translate('VideoDynamicRange'),\r\n isVisible: false\r\n },\r\n {\r\n name: 'audioInfo',\r\n label: () => translate('AudioInfo'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'audioLanguages',\r\n label: () => translate('AudioLanguages'),\r\n isVisible: false\r\n },\r\n {\r\n name: 'subtitleLanguages',\r\n label: () => translate('SubtitleLanguages'),\r\n isVisible: false\r\n },\r\n {\r\n name: 'size',\r\n label: () => translate('Size'),\r\n isVisible: true,\r\n isSortable: true\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'quality',\r\n label: () => translate('Quality'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'releaseGroup',\r\n label: () => translate('ReleaseGroup'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'customFormats',\r\n label: () => translate('Formats'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'customFormatScore',\r\n columnLabel: () => translate('CustomFormatScore'),\r\n label: React.createElement(Icon, {\r\n name: icons.SCORE,\r\n title: () => translate('CustomFormatScore')\r\n }),\r\n isVisible: true,\r\n isSortable: true\r\n },\r\n {\r\n name: 'indexerFlags',\r\n columnLabel: () => translate('IndexerFlags'),\r\n label: React.createElement(Icon, {\r\n name: icons.FLAG,\r\n title: () => translate('IndexerFlags')\r\n }),\r\n isVisible: false\r\n },\r\n {\r\n name: 'dateAdded',\r\n label: () => translate('Added'),\r\n isVisible: false,\r\n isSortable: true\r\n },\r\n {\r\n name: 'actions',\r\n columnLabel: () => translate('Actions'),\r\n label: React.createElement(IconButton, { name: icons.ADVANCED_SETTINGS }),\r\n isVisible: true,\r\n isModifiable: false\r\n }\r\n ]\r\n};\r\n\r\nexport const persistState = [\r\n 'movieFiles.columns',\r\n 'movieFiles.sortDirection',\r\n 'movieFiles.sortKey'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_MOVIE_FILES = 'movieFiles/fetchMovieFiles';\r\nexport const DELETE_MOVIE_FILE = 'movieFiles/deleteMovieFile';\r\nexport const DELETE_MOVIE_FILES = 'movieFiles/deleteMovieFiles';\r\nexport const UPDATE_MOVIE_FILES = 'movieFiles/updateMovieFiles';\r\nexport const CLEAR_MOVIE_FILES = 'movieFiles/clearMovieFiles';\r\nexport const SET_MOVIE_FILES_SORT = 'movieFiles/setMovieFilesSort';\r\nexport const SET_MOVIE_FILES_TABLE_OPTION = 'movieFiles/setMovieFilesTableOption';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMovieFiles = createThunk(FETCH_MOVIE_FILES);\r\nexport const deleteMovieFile = createThunk(DELETE_MOVIE_FILE);\r\nexport const deleteMovieFiles = createThunk(DELETE_MOVIE_FILES);\r\nexport const updateMovieFiles = createThunk(UPDATE_MOVIE_FILES);\r\nexport const clearMovieFiles = createAction(CLEAR_MOVIE_FILES);\r\nexport const setMovieFilesSort = createAction(SET_MOVIE_FILES_SORT);\r\nexport const setMovieFilesTableOption = createAction(SET_MOVIE_FILES_TABLE_OPTION);\r\n\r\n//\r\n// Helpers\r\n\r\nconst deleteMovieFileHelper = createRemoveItemHandler(section, '/movieFile');\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_MOVIE_FILES]: createFetchHandler(section, '/movieFile'),\r\n\r\n [DELETE_MOVIE_FILE]: function(getState, payload, dispatch) {\r\n const {\r\n id: movieFileId,\r\n movieEntity = movieEntities.MOVIES\r\n } = payload;\r\n\r\n const movieSection = _.last(movieEntity.split('.'));\r\n const deletePromise = deleteMovieFileHelper(getState, payload, dispatch);\r\n\r\n deletePromise.done(() => {\r\n const movies = getState().movies.items;\r\n const moviesWithRemovedFiles = _.filter(movies, { movieFileId });\r\n\r\n dispatch(batchActions([\r\n ...moviesWithRemovedFiles.map((movie) => {\r\n return updateItem({\r\n section: movieSection,\r\n ...movie,\r\n movieFileId: 0,\r\n hasFile: false\r\n });\r\n })\r\n ]));\r\n });\r\n },\r\n\r\n [DELETE_MOVIE_FILES]: function(getState, payload, dispatch) {\r\n const {\r\n movieFileIds\r\n } = payload;\r\n\r\n dispatch(set({ section, isDeleting: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/movieFile/bulk',\r\n method: 'DELETE',\r\n dataType: 'json',\r\n data: JSON.stringify({ movieFileIds })\r\n }).request;\r\n\r\n promise.done(() => {\r\n const movies = getState().movies.items;\r\n const moviesWithRemovedFiles = movieFileIds.reduce((acc, movieFileId) => {\r\n acc.push(..._.filter(movies, { movieFileId }));\r\n\r\n return acc;\r\n }, []);\r\n\r\n dispatch(batchActions([\r\n ...movieFileIds.map((id) => {\r\n return removeItem({ section, id });\r\n }),\r\n\r\n ...moviesWithRemovedFiles.map((movie) => {\r\n return updateItem({\r\n section: 'movies',\r\n ...movie,\r\n movieFileId: 0,\r\n hasFile: false\r\n });\r\n }),\r\n\r\n set({\r\n section,\r\n isDeleting: false,\r\n deleteError: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isDeleting: false,\r\n deleteError: xhr\r\n }));\r\n });\r\n },\r\n\r\n [UPDATE_MOVIE_FILES]: function(getState, payload, dispatch) {\r\n const { files } = payload;\r\n\r\n dispatch(set({ section, isSaving: true }));\r\n\r\n const requestData = files;\r\n\r\n const promise = createAjaxRequest({\r\n url: '/movieFile/bulk',\r\n method: 'PUT',\r\n dataType: 'json',\r\n data: JSON.stringify(requestData)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n ...files.map((file) => {\r\n const id = file.id;\r\n const props = {};\r\n const movieFile = data.find((f) => f.id === id);\r\n\r\n props.qualityCutoffNotMet = movieFile.qualityCutoffNotMet;\r\n props.customFormats = movieFile.customFormats;\r\n props.customFormatScore = movieFile.customFormatScore;\r\n props.languages = movieFile.languages;\r\n props.quality = movieFile.quality;\r\n props.edition = movieFile.edition;\r\n props.releaseGroup = movieFile.releaseGroup;\r\n props.indexerFlags = movieFile.indexerFlags;\r\n\r\n return updateItem({\r\n section,\r\n id,\r\n ...props\r\n });\r\n }),\r\n\r\n set({\r\n section,\r\n isSaving: false,\r\n saveError: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: xhr\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_MOVIE_FILES_TABLE_OPTION]: createSetTableOptionReducer(section),\r\n\r\n [CLEAR_MOVIE_FILES]: (state) => {\r\n return Object.assign({}, state, {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n isSaving: false,\r\n saveError: null,\r\n items: []\r\n });\r\n },\r\n\r\n [SET_MOVIE_FILES_SORT]: createSetClientSideCollectionSortReducer(section)\r\n\r\n}, defaultState, section);\r\n","import { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set, update } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'movieHistory';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_MOVIE_HISTORY = 'movieHistory/fetchMovieHistory';\r\nexport const CLEAR_MOVIE_HISTORY = 'movieHistory/clearMovieHistory';\r\nexport const MOVIE_HISTORY_MARK_AS_FAILED = 'movieHistory/movieHistoryMarkAsFailed';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMovieHistory = createThunk(FETCH_MOVIE_HISTORY);\r\nexport const clearMovieHistory = createAction(CLEAR_MOVIE_HISTORY);\r\nexport const movieHistoryMarkAsFailed = createThunk(MOVIE_HISTORY_MARK_AS_FAILED);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_MOVIE_HISTORY]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/history/movie',\r\n data: payload\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n });\r\n },\r\n\r\n [MOVIE_HISTORY_MARK_AS_FAILED]: function(getState, payload, dispatch) {\r\n const {\r\n historyId,\r\n movieId\r\n } = payload;\r\n\r\n const promise = createAjaxRequest({\r\n url: `/history/failed/${historyId}`,\r\n method: 'POST',\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done(() => {\r\n dispatch(fetchMovieHistory({ movieId }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_MOVIE_HISTORY]: (state) => {\r\n return Object.assign({}, state, defaultState);\r\n }\r\n\r\n}, defaultState, section);\r\n","import { createAction } from 'redux-actions';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, sortDirections } from 'Helpers/Props';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createSetClientSideCollectionFilterReducer from './Creators/Reducers/createSetClientSideCollectionFilterReducer';\r\nimport createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';\r\nimport createSetTableOptionReducer from './Creators/Reducers/createSetTableOptionReducer';\r\nimport { filterPredicates, filters, sortPredicates } from './movieActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'movieIndex';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isSaving: false,\r\n saveError: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n sortKey: 'sortTitle',\r\n sortDirection: sortDirections.ASCENDING,\r\n secondarySortKey: 'sortTitle',\r\n secondarySortDirection: sortDirections.ASCENDING,\r\n view: 'posters',\r\n\r\n posterOptions: {\r\n detailedProgressBar: false,\r\n size: 'large',\r\n showTitle: false,\r\n showMonitored: true,\r\n showQualityProfile: true,\r\n showCinemaRelease: false,\r\n showDigitalRelease: false,\r\n showPhysicalRelease: false,\r\n showReleaseDate: false,\r\n showTmdbRating: false,\r\n showImdbRating: false,\r\n showRottenTomatoesRating: false,\r\n showTraktRating: false,\r\n showTags: false,\r\n showSearchAction: false\r\n },\r\n\r\n overviewOptions: {\r\n detailedProgressBar: false,\r\n size: 'medium',\r\n showMonitored: true,\r\n showStudio: true,\r\n showQualityProfile: true,\r\n showAdded: false,\r\n showPath: false,\r\n showSizeOnDisk: false,\r\n showTags: false,\r\n showSearchAction: false\r\n },\r\n\r\n tableOptions: {\r\n showSearchAction: false\r\n },\r\n\r\n columns: [\r\n {\r\n name: 'select',\r\n columnLabel: 'Select',\r\n isSortable: false,\r\n isVisible: true,\r\n isModifiable: false,\r\n isHidden: true\r\n },\r\n {\r\n name: 'status',\r\n columnLabel: () => translate('ReleaseStatus'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'sortTitle',\r\n label: () => translate('MovieTitle'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'originalTitle',\r\n label: () => translate('OriginalTitle'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'collection',\r\n label: () => translate('Collection'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'studio',\r\n label: () => translate('Studio'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'qualityProfileId',\r\n label: () => translate('QualityProfile'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'originalLanguage',\r\n label: () => translate('OriginalLanguage'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'added',\r\n label: () => translate('Added'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'year',\r\n label: () => translate('Year'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'inCinemas',\r\n label: () => translate('InCinemas'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'digitalRelease',\r\n label: () => translate('DigitalRelease'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'physicalRelease',\r\n label: () => translate('PhysicalRelease'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'releaseDate',\r\n label: () => translate('ReleaseDate'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'runtime',\r\n label: () => translate('Runtime'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'minimumAvailability',\r\n label: () => translate('MinimumAvailability'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'path',\r\n label: () => translate('Path'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'sizeOnDisk',\r\n label: () => translate('SizeOnDisk'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'genres',\r\n label: () => translate('Genres'),\r\n isSortable: false,\r\n isVisible: false\r\n },\r\n {\r\n name: 'movieStatus',\r\n label: () => translate('Status'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'tmdbRating',\r\n label: () => translate('TmdbRating'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'imdbRating',\r\n label: () => translate('ImdbRating'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'rottenTomatoesRating',\r\n label: () => translate('RottenTomatoesRating'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'traktRating',\r\n label: () => translate('TraktRating'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'popularity',\r\n label: () => translate('Popularity'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'certification',\r\n label: () => translate('Certification'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'releaseGroups',\r\n label: () => translate('ReleaseGroup'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'tags',\r\n label: () => translate('Tags'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'actions',\r\n columnLabel: () => translate('Actions'),\r\n isVisible: true,\r\n isModifiable: false\r\n }\r\n ],\r\n\r\n sortPredicates: {\r\n ...sortPredicates,\r\n\r\n studio: function(item) {\r\n const studio = item.studio;\r\n\r\n return studio ? studio.toLowerCase() : '';\r\n },\r\n\r\n collection: function(item) {\r\n const { collection ={} } = item;\r\n\r\n return collection.title;\r\n },\r\n\r\n originalLanguage: function(item) {\r\n const { originalLanguage ={} } = item;\r\n\r\n return originalLanguage.name;\r\n },\r\n\r\n releaseGroups: function(item) {\r\n const { statistics = {} } = item;\r\n const { releaseGroups = [] } = statistics;\r\n\r\n return releaseGroups.length ?\r\n releaseGroups\r\n .map((group) => group.toLowerCase())\r\n .sort((a, b) => a.localeCompare(b)) :\r\n undefined;\r\n },\r\n\r\n tmdbRating: function({ ratings = {} }) {\r\n return ratings.tmdb ? ratings.tmdb.value : 0;\r\n },\r\n\r\n imdbRating: function({ ratings = {} }) {\r\n return ratings.imdb ? ratings.imdb.value : 0;\r\n },\r\n\r\n rottenTomatoesRating: function({ ratings = {} }) {\r\n return ratings.rottenTomatoes ? ratings.rottenTomatoes.value : -1;\r\n },\r\n\r\n traktRating: function({ ratings = {} }) {\r\n return ratings.trakt ? ratings.trakt.value : 0;\r\n }\r\n },\r\n\r\n selectedFilterKey: 'all',\r\n\r\n filters,\r\n filterPredicates,\r\n\r\n filterBuilderProps: [\r\n {\r\n name: 'monitored',\r\n label: () => translate('Monitored'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n },\r\n {\r\n name: 'isAvailable',\r\n label: () => translate('ConsideredAvailable'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n },\r\n {\r\n name: 'minimumAvailability',\r\n label: () => translate('MinimumAvailability'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.MINIMUM_AVAILABILITY\r\n },\r\n {\r\n name: 'title',\r\n label: () => translate('Title'),\r\n type: filterBuilderTypes.STRING\r\n },\r\n {\r\n name: 'originalTitle',\r\n label: () => translate('OriginalTitle'),\r\n type: filterBuilderTypes.STRING\r\n },\r\n {\r\n name: 'originalLanguage',\r\n label: () => translate('OriginalLanguage'),\r\n type: filterBuilderTypes.EXACT,\r\n optionsSelector: function(items) {\r\n const collectionList = items.reduce((acc, movie) => {\r\n if (movie.originalLanguage) {\r\n acc.push({\r\n id: movie.originalLanguage.name,\r\n name: movie.originalLanguage.name\r\n });\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return collectionList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'releaseGroups',\r\n label: () => translate('ReleaseGroups'),\r\n type: filterBuilderTypes.ARRAY,\r\n optionsSelector: function(items) {\r\n const groupList = items.reduce((acc, movie) => {\r\n const { statistics = {} } = movie;\r\n const { releaseGroups = [] } = statistics;\r\n\r\n releaseGroups.forEach((releaseGroup) => {\r\n acc.push({\r\n id: releaseGroup,\r\n name: releaseGroup\r\n });\r\n });\r\n\r\n return acc;\r\n }, []);\r\n\r\n return groupList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'status',\r\n label: () => translate('ReleaseStatus'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.RELEASE_STATUS\r\n },\r\n {\r\n name: 'studio',\r\n label: () => translate('Studio'),\r\n type: filterBuilderTypes.EXACT,\r\n optionsSelector: function(items) {\r\n const tagList = items.reduce((acc, movie) => {\r\n if (movie.studio) {\r\n acc.push({\r\n id: movie.studio,\r\n name: movie.studio\r\n });\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return tagList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'collection',\r\n label: () => translate('Collection'),\r\n type: filterBuilderTypes.ARRAY,\r\n optionsSelector: function(items) {\r\n const collectionList = items.reduce((acc, movie) => {\r\n if (movie.collection && movie.collection.title) {\r\n acc.push({\r\n id: movie.collection.title,\r\n name: movie.collection.title\r\n });\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return collectionList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'qualityProfileId',\r\n label: () => translate('QualityProfile'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.QUALITY_PROFILE\r\n },\r\n {\r\n name: 'added',\r\n label: () => translate('Added'),\r\n type: filterBuilderTypes.DATE,\r\n valueType: filterBuilderValueTypes.DATE\r\n },\r\n {\r\n name: 'year',\r\n label: () => translate('Year'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'inCinemas',\r\n label: () => translate('InCinemas'),\r\n type: filterBuilderTypes.DATE,\r\n valueType: filterBuilderValueTypes.DATE\r\n },\r\n {\r\n name: 'physicalRelease',\r\n label: () => translate('PhysicalRelease'),\r\n type: filterBuilderTypes.DATE,\r\n valueType: filterBuilderValueTypes.DATE\r\n },\r\n {\r\n name: 'digitalRelease',\r\n label: () => translate('DigitalRelease'),\r\n type: filterBuilderTypes.DATE,\r\n valueType: filterBuilderValueTypes.DATE\r\n },\r\n {\r\n name: 'releaseDate',\r\n label: () => translate('ReleaseDate'),\r\n type: filterBuilderTypes.DATE,\r\n valueType: filterBuilderValueTypes.DATE\r\n },\r\n {\r\n name: 'runtime',\r\n label: () => translate('Runtime'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'path',\r\n label: () => translate('Path'),\r\n type: filterBuilderTypes.STRING\r\n },\r\n {\r\n name: 'sizeOnDisk',\r\n label: () => translate('SizeOnDisk'),\r\n type: filterBuilderTypes.NUMBER,\r\n valueType: filterBuilderValueTypes.BYTES\r\n },\r\n {\r\n name: 'genres',\r\n label: () => translate('Genres'),\r\n type: filterBuilderTypes.ARRAY,\r\n optionsSelector: function(items) {\r\n const genreList = items.reduce((acc, movie) => {\r\n movie.genres.forEach((genre) => {\r\n acc.push({\r\n id: genre,\r\n name: genre\r\n });\r\n });\r\n\r\n return acc;\r\n }, []);\r\n\r\n return genreList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'tmdbRating',\r\n label: () => translate('TmdbRating'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'tmdbVotes',\r\n label: () => translate('TmdbVotes'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'imdbRating',\r\n label: () => translate('ImdbRating'),\r\n type: filterBuilderTypes.NUMBER,\r\n numberFractionDigits: 1\r\n },\r\n {\r\n name: 'imdbVotes',\r\n label: () => translate('ImdbVotes'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'rottenTomatoesRating',\r\n label: () => translate('RottenTomatoesRating'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'traktRating',\r\n label: () => translate('TraktRating'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'traktVotes',\r\n label: () => translate('TraktVotes'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'popularity',\r\n label: () => translate('Popularity'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'certification',\r\n label: () => translate('Certification'),\r\n type: filterBuilderTypes.EXACT,\r\n optionsSelector: function(items) {\r\n const certificationList = items.reduce((acc, movie) => {\r\n if (movie.certification) {\r\n acc.push({\r\n id: movie.certification,\r\n name: movie.certification\r\n });\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return certificationList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'tags',\r\n label: () => translate('Tags'),\r\n type: filterBuilderTypes.ARRAY,\r\n valueType: filterBuilderValueTypes.TAG\r\n }\r\n ]\r\n};\r\n\r\nexport const persistState = [\r\n 'movieIndex.sortKey',\r\n 'movieIndex.sortDirection',\r\n 'movieIndex.selectedFilterKey',\r\n 'movieIndex.customFilters',\r\n 'movieIndex.view',\r\n 'movieIndex.columns',\r\n 'movieIndex.posterOptions',\r\n 'movieIndex.overviewOptions',\r\n 'movieIndex.tableOptions'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const SET_MOVIE_SORT = 'movieIndex/setMovieSort';\r\nexport const SET_MOVIE_FILTER = 'movieIndex/setMovieFilter';\r\nexport const SET_MOVIE_VIEW = 'movieIndex/setMovieView';\r\nexport const SET_MOVIE_TABLE_OPTION = 'movieIndex/setMovieTableOption';\r\nexport const SET_MOVIE_POSTER_OPTION = 'movieIndex/setMoviePosterOption';\r\nexport const SET_MOVIE_OVERVIEW_OPTION = 'movieIndex/setMovieOverviewOption';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const setMovieSort = createAction(SET_MOVIE_SORT);\r\nexport const setMovieFilter = createAction(SET_MOVIE_FILTER);\r\nexport const setMovieView = createAction(SET_MOVIE_VIEW);\r\nexport const setMovieTableOption = createAction(SET_MOVIE_TABLE_OPTION);\r\nexport const setMoviePosterOption = createAction(SET_MOVIE_POSTER_OPTION);\r\nexport const setMovieOverviewOption = createAction(SET_MOVIE_OVERVIEW_OPTION);\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_MOVIE_SORT]: createSetClientSideCollectionSortReducer(section),\r\n [SET_MOVIE_FILTER]: createSetClientSideCollectionFilterReducer(section),\r\n\r\n [SET_MOVIE_VIEW]: function(state, { payload }) {\r\n return Object.assign({}, state, { view: payload.view });\r\n },\r\n\r\n [SET_MOVIE_TABLE_OPTION]: createSetTableOptionReducer(section),\r\n\r\n [SET_MOVIE_POSTER_OPTION]: function(state, { payload }) {\r\n const posterOptions = state.posterOptions;\r\n\r\n return {\r\n ...state,\r\n posterOptions: {\r\n ...posterOptions,\r\n ...payload\r\n }\r\n };\r\n },\r\n\r\n [SET_MOVIE_OVERVIEW_OPTION]: function(state, { payload }) {\r\n const overviewOptions = state.overviewOptions;\r\n\r\n return {\r\n ...state,\r\n overviewOptions: {\r\n ...overviewOptions,\r\n ...payload\r\n }\r\n };\r\n }\r\n\r\n}, defaultState, section);\r\n","import $ from 'jquery';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { set } from 'Store/Actions/baseActions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport requestAction from 'Utilities/requestAction';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport translate from 'Utilities/String/translate';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'oAuth';\r\nconst callbackUrl = `${window.location.origin}${window.Radarr.urlBase}/oauth.html`;\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n authorizing: false,\r\n result: null,\r\n error: null\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const START_OAUTH = 'oAuth/startOAuth';\r\nexport const SET_OAUTH_VALUE = 'oAuth/setOAuthValue';\r\nexport const RESET_OAUTH = 'oAuth/resetOAuth';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const startOAuth = createThunk(START_OAUTH);\r\nexport const setOAuthValue = createAction(SET_OAUTH_VALUE);\r\nexport const resetOAuth = createAction(RESET_OAUTH);\r\n\r\n//\r\n// Helpers\r\n\r\nfunction showOAuthWindow(url, payload) {\r\n const deferred = $.Deferred();\r\n const selfWindow = window;\r\n\r\n const newWindow = window.open(url);\r\n\r\n if (\r\n !newWindow ||\r\n newWindow.closed ||\r\n typeof newWindow.closed == 'undefined'\r\n ) {\r\n\r\n // A fake validation error to mimic a 400 response from the API.\r\n const error = {\r\n status: 400,\r\n responseJSON: [\r\n {\r\n propertyName: payload.name,\r\n errorMessage: translate('OAuthPopupMessage')\r\n }\r\n ]\r\n };\r\n\r\n return deferred.reject(error).promise();\r\n }\r\n\r\n selfWindow.onCompleteOauth = function(query, onComplete) {\r\n delete selfWindow.onCompleteOauth;\r\n\r\n const queryParams = {};\r\n const splitQuery = query.substring(1).split('&');\r\n\r\n splitQuery.forEach((param) => {\r\n if (param) {\r\n const paramSplit = param.split('=');\r\n\r\n queryParams[paramSplit[0]] = paramSplit[1];\r\n }\r\n });\r\n\r\n onComplete();\r\n deferred.resolve(queryParams);\r\n };\r\n\r\n return deferred.promise();\r\n}\r\n\r\nfunction executeIntermediateRequest(payload, ajaxOptions) {\r\n return createAjaxRequest(ajaxOptions).request.then((data) => {\r\n return requestAction({\r\n action: 'continueOAuth',\r\n queryParams: {\r\n ...data,\r\n callbackUrl\r\n },\r\n ...payload\r\n });\r\n });\r\n}\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [START_OAUTH]: function(getState, payload, dispatch) {\r\n const {\r\n name,\r\n section: actionSection,\r\n ...otherPayload\r\n } = payload;\r\n\r\n const actionPayload = {\r\n action: 'startOAuth',\r\n queryParams: { callbackUrl },\r\n ...otherPayload\r\n };\r\n\r\n dispatch(setOAuthValue({\r\n authorizing: true\r\n }));\r\n\r\n let startResponse = {};\r\n\r\n const promise = requestAction(actionPayload)\r\n .then((response) => {\r\n startResponse = response;\r\n\r\n if (response.oauthUrl) {\r\n return showOAuthWindow(response.oauthUrl, payload);\r\n }\r\n\r\n return executeIntermediateRequest(otherPayload, response).then((intermediateResponse) => {\r\n startResponse = intermediateResponse;\r\n\r\n return showOAuthWindow(intermediateResponse.oauthUrl, payload);\r\n });\r\n })\r\n .then((queryParams) => {\r\n return requestAction({\r\n action: 'getOAuthToken',\r\n queryParams: {\r\n ...startResponse,\r\n ...queryParams\r\n },\r\n ...otherPayload\r\n });\r\n })\r\n .then((response) => {\r\n dispatch(setOAuthValue({\r\n authorizing: false,\r\n result: response,\r\n error: null\r\n }));\r\n });\r\n\r\n promise.done(() => {\r\n // Clear any previously set save error.\r\n dispatch(set({\r\n section: actionSection,\r\n saveError: null\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n const actions = [\r\n setOAuthValue({\r\n authorizing: false,\r\n result: null,\r\n error: xhr\r\n })\r\n ];\r\n\r\n if (xhr.status === 400) {\r\n // Set a save error so the UI can display validation errors to the user.\r\n actions.splice(0, 0, set({\r\n section: actionSection,\r\n saveError: xhr\r\n }));\r\n }\r\n\r\n dispatch(batchActions(actions));\r\n });\r\n }\r\n\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_OAUTH_VALUE]: function(state, { payload }) {\r\n const newState = Object.assign(getSectionState(state, section), payload);\r\n\r\n return updateSectionState(state, section, newState);\r\n },\r\n\r\n [RESET_OAUTH]: function(state) {\r\n return updateSectionState(state, section, defaultState);\r\n }\r\n\r\n}, defaultState, section);\r\n","import { createAction } from 'redux-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'organizePreview';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_ORGANIZE_PREVIEW = 'organizePreview/fetchOrganizePreview';\r\nexport const CLEAR_ORGANIZE_PREVIEW = 'organizePreview/clearOrganizePreview';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchOrganizePreview = createThunk(FETCH_ORGANIZE_PREVIEW);\r\nexport const clearOrganizePreview = createAction(CLEAR_ORGANIZE_PREVIEW);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_ORGANIZE_PREVIEW]: createFetchHandler('organizePreview', '/rename')\r\n\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_ORGANIZE_PREVIEW]: (state) => {\r\n return Object.assign({}, state, defaultState);\r\n }\r\n\r\n}, defaultState, section);\r\n","import { Dispatch } from 'redux';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport AppState from 'App/State/AppState';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set, update } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createClearReducer from './Creators/Reducers/createClearReducer';\r\n\r\ninterface FetchPayload {\r\n title: string;\r\n}\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'parse';\r\nlet parseTimeout: number | null = null;\r\nlet abortCurrentRequest: (() => void) | null = null;\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n item: {},\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH = 'parse/fetch';\r\nexport const CLEAR = 'parse/clear';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetch = createThunk(FETCH);\r\nexport const clear = createAction(CLEAR);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH]: function (\r\n _getState: () => AppState,\r\n payload: FetchPayload,\r\n dispatch: Dispatch\r\n ) {\r\n if (parseTimeout) {\r\n clearTimeout(parseTimeout);\r\n }\r\n\r\n parseTimeout = window.setTimeout(async () => {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n if (abortCurrentRequest) {\r\n abortCurrentRequest();\r\n }\r\n\r\n const { request, abortRequest } = createAjaxRequest({\r\n url: '/parse',\r\n data: {\r\n title: payload.title,\r\n },\r\n });\r\n\r\n try {\r\n const data = await request;\r\n\r\n dispatch(\r\n batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null,\r\n }),\r\n ])\r\n );\r\n } catch (error) {\r\n dispatch(\r\n set({\r\n section,\r\n isAdding: false,\r\n isAdded: false,\r\n addError: error,\r\n })\r\n );\r\n }\r\n\r\n abortCurrentRequest = abortRequest;\r\n }, 300);\r\n },\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions(\r\n {\r\n [CLEAR]: createClearReducer(section, defaultState),\r\n },\r\n defaultState,\r\n section\r\n);\r\n","import { createAction } from 'redux-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'paths';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n currentPath: '',\r\n isPopulated: false,\r\n isFetching: false,\r\n error: null,\r\n directories: [],\r\n files: [],\r\n parent: null\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_PATHS = 'paths/fetchPaths';\r\nexport const UPDATE_PATHS = 'paths/updatePaths';\r\nexport const CLEAR_PATHS = 'paths/clearPaths';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchPaths = createThunk(FETCH_PATHS);\r\nexport const updatePaths = createAction(UPDATE_PATHS);\r\nexport const clearPaths = createAction(CLEAR_PATHS);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_PATHS]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const {\r\n path,\r\n allowFoldersWithoutTrailingSlashes = false,\r\n includeFiles = false\r\n } = payload;\r\n\r\n const promise = createAjaxRequest({\r\n url: '/filesystem',\r\n data: {\r\n path,\r\n allowFoldersWithoutTrailingSlashes,\r\n includeFiles\r\n }\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(updatePaths({ path, ...data }));\r\n\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n });\r\n }\r\n\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [UPDATE_PATHS]: (state, { payload }) => {\r\n const newState = Object.assign({}, state);\r\n\r\n newState.currentPath = payload.path;\r\n newState.directories = payload.directories;\r\n newState.files = payload.files;\r\n newState.parent = payload.parent;\r\n\r\n return newState;\r\n },\r\n\r\n [CLEAR_PATHS]: (state, { payload }) => {\r\n const newState = Object.assign({}, state);\r\n\r\n newState.path = '';\r\n newState.directories = [];\r\n newState.files = [];\r\n newState.parent = '';\r\n\r\n return newState;\r\n }\r\n\r\n}, defaultState, section);\r\n","import _ from 'lodash';\r\nimport { createAction } from 'redux-actions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport requestAction from 'Utilities/requestAction';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport { set } from './baseActions';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'providerOptions';\r\n\r\nconst lastActions = {};\r\nlet lastActionId = 0;\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n items: [],\r\n isFetching: false,\r\n isPopulated: false,\r\n error: false\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_OPTIONS = 'providers/fetchOptions';\r\nexport const CLEAR_OPTIONS = 'providers/clearOptions';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchOptions = createThunk(FETCH_OPTIONS);\r\nexport const clearOptions = createAction(CLEAR_OPTIONS);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_OPTIONS]: function(getState, payload, dispatch) {\r\n const subsection = `${section}.${payload.section}`;\r\n\r\n if (lastActions[payload.section] && _.isEqual(payload, lastActions[payload.section].payload)) {\r\n return;\r\n }\r\n\r\n const actionId = ++lastActionId;\r\n\r\n lastActions[payload.section] = {\r\n actionId,\r\n payload\r\n };\r\n\r\n dispatch(set({\r\n section: subsection,\r\n isFetching: true\r\n }));\r\n\r\n const promise = requestAction(payload);\r\n\r\n promise.done((data) => {\r\n if (lastActions[payload.section]) {\r\n if (lastActions[payload.section].actionId === actionId) {\r\n lastActions[payload.section] = null;\r\n }\r\n\r\n dispatch(set({\r\n section: subsection,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null,\r\n items: data.options || []\r\n }));\r\n }\r\n });\r\n\r\n promise.fail((xhr) => {\r\n if (lastActions[payload.section]) {\r\n if (lastActions[payload.section].actionId === actionId) {\r\n lastActions[payload.section] = null;\r\n }\r\n\r\n dispatch(set({\r\n section: subsection,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n }\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_OPTIONS]: function(state, { payload }) {\r\n const subsection = `${section}.${payload.section}`;\r\n\r\n lastActions[payload.section] = null;\r\n\r\n return updateSectionState(state, subsection, defaultState);\r\n }\r\n\r\n}, {}, section);\r\n","import _ from 'lodash';\r\nimport moment from 'moment';\r\nimport React from 'react';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport Icon from 'Components/Icon';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, icons, sortDirections } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';\r\nimport translate from 'Utilities/String/translate';\r\nimport { set, updateItem } from './baseActions';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createServerSideCollectionHandlers from './Creators/createServerSideCollectionHandlers';\r\nimport createClearReducer from './Creators/Reducers/createClearReducer';\r\nimport createSetTableOptionReducer from './Creators/Reducers/createSetTableOptionReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'queue';\r\nconst status = `${section}.status`;\r\nconst details = `${section}.details`;\r\nconst paged = `${section}.paged`;\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n options: {\r\n includeUnknownMovieItems: true\r\n },\r\n\r\n status: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n item: {}\r\n },\r\n\r\n details: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n params: {}\r\n },\r\n\r\n paged: {\r\n isFetching: false,\r\n isPopulated: false,\r\n pageSize: 20,\r\n sortKey: 'timeleft',\r\n sortDirection: sortDirections.ASCENDING,\r\n error: null,\r\n items: [],\r\n isGrabbing: false,\r\n isRemoving: false,\r\n\r\n columns: [\r\n {\r\n name: 'status',\r\n columnLabel: () => translate('Status'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'movies.sortTitle',\r\n label: () => translate('Movie'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'year',\r\n label: () => translate('Year'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'quality',\r\n label: () => translate('Quality'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'customFormats',\r\n label: () => translate('Formats'),\r\n isSortable: false,\r\n isVisible: true\r\n },\r\n {\r\n name: 'customFormatScore',\r\n columnLabel: () => translate( 'CustomFormatScore'),\r\n label: React.createElement(Icon, {\r\n name: icons.SCORE,\r\n title: () => translate( 'CustomFormatScore')\r\n }),\r\n isVisible: false\r\n },\r\n {\r\n name: 'protocol',\r\n label: () => translate('Protocol'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'indexer',\r\n label: () => translate('Indexer'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'downloadClient',\r\n label: () => translate('DownloadClient'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'size',\r\n label: () => translate('Size'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'title',\r\n label: () => translate('ReleaseTitle'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'outputPath',\r\n label: () => translate('OutputPath'),\r\n isSortable: false,\r\n isVisible: false\r\n },\r\n {\r\n name: 'estimatedCompletionTime',\r\n label: () => translate('Timeleft'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'added',\r\n label: () => translate('Added'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'progress',\r\n label: () => translate('Progress'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'actions',\r\n columnLabel: () => translate('Actions'),\r\n isVisible: true,\r\n isModifiable: false\r\n }\r\n ],\r\n\r\n selectedFilterKey: 'all',\r\n\r\n filters: [\r\n {\r\n key: 'all',\r\n label: 'All',\r\n filters: []\r\n }\r\n ],\r\n\r\n filterBuilderProps: [\r\n {\r\n name: 'movieIds',\r\n label: () => translate('Movie'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.MOVIE\r\n },\r\n {\r\n name: 'quality',\r\n label: () => translate('Quality'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.QUALITY\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n type: filterBuilderTypes.CONTAINS,\r\n valueType: filterBuilderValueTypes.LANGUAGE\r\n },\r\n {\r\n name: 'protocol',\r\n label: () => translate('Protocol'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.PROTOCOL\r\n },\r\n {\r\n name: 'status',\r\n label: () => translate('Status'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.QUEUE_STATUS\r\n }\r\n ]\r\n },\r\n sortPredicates: {\r\n estimatedCompletionTime: function(item, direction) {\r\n return moment.duration(item.timeleft).asMilliseconds();\r\n }\r\n }\r\n};\r\n\r\nexport const persistState = [\r\n 'queue.options',\r\n 'queue.paged.pageSize',\r\n 'queue.paged.sortKey',\r\n 'queue.paged.sortDirection',\r\n 'queue.paged.columns',\r\n 'queue.paged.selectedFilterKey'\r\n];\r\n\r\n//\r\n// Helpers\r\n\r\nfunction fetchDataAugmenter(getState, payload, data) {\r\n data.includeUnknownMovieItems = getState().queue.options.includeUnknownMovieItems;\r\n}\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_QUEUE_STATUS = 'queue/fetchQueueStatus';\r\n\r\nexport const FETCH_QUEUE_DETAILS = 'queue/fetchQueueDetails';\r\nexport const CLEAR_QUEUE_DETAILS = 'queue/clearQueueDetails';\r\n\r\nexport const FETCH_QUEUE = 'queue/fetchQueue';\r\nexport const GOTO_FIRST_QUEUE_PAGE = 'queue/gotoQueueFirstPage';\r\nexport const GOTO_PREVIOUS_QUEUE_PAGE = 'queue/gotoQueuePreviousPage';\r\nexport const GOTO_NEXT_QUEUE_PAGE = 'queue/gotoQueueNextPage';\r\nexport const GOTO_LAST_QUEUE_PAGE = 'queue/gotoQueueLastPage';\r\nexport const GOTO_QUEUE_PAGE = 'queue/gotoQueuePage';\r\nexport const SET_QUEUE_SORT = 'queue/setQueueSort';\r\nexport const SET_QUEUE_FILTER = 'queue/setQueueFilter';\r\nexport const SET_QUEUE_TABLE_OPTION = 'queue/setQueueTableOption';\r\nexport const SET_QUEUE_OPTION = 'queue/setQueueOption';\r\nexport const CLEAR_QUEUE = 'queue/clearQueue';\r\n\r\nexport const GRAB_QUEUE_ITEM = 'queue/grabQueueItem';\r\nexport const GRAB_QUEUE_ITEMS = 'queue/grabQueueItems';\r\nexport const REMOVE_QUEUE_ITEM = 'queue/removeQueueItem';\r\nexport const REMOVE_QUEUE_ITEMS = 'queue/removeQueueItems';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchQueueStatus = createThunk(FETCH_QUEUE_STATUS);\r\n\r\nexport const fetchQueueDetails = createThunk(FETCH_QUEUE_DETAILS);\r\nexport const clearQueueDetails = createAction(CLEAR_QUEUE_DETAILS);\r\n\r\nexport const fetchQueue = createThunk(FETCH_QUEUE);\r\nexport const gotoQueueFirstPage = createThunk(GOTO_FIRST_QUEUE_PAGE);\r\nexport const gotoQueuePreviousPage = createThunk(GOTO_PREVIOUS_QUEUE_PAGE);\r\nexport const gotoQueueNextPage = createThunk(GOTO_NEXT_QUEUE_PAGE);\r\nexport const gotoQueueLastPage = createThunk(GOTO_LAST_QUEUE_PAGE);\r\nexport const gotoQueuePage = createThunk(GOTO_QUEUE_PAGE);\r\nexport const setQueueSort = createThunk(SET_QUEUE_SORT);\r\nexport const setQueueFilter = createThunk(SET_QUEUE_FILTER);\r\nexport const setQueueTableOption = createAction(SET_QUEUE_TABLE_OPTION);\r\nexport const setQueueOption = createAction(SET_QUEUE_OPTION);\r\nexport const clearQueue = createAction(CLEAR_QUEUE);\r\n\r\nexport const grabQueueItem = createThunk(GRAB_QUEUE_ITEM);\r\nexport const grabQueueItems = createThunk(GRAB_QUEUE_ITEMS);\r\nexport const removeQueueItem = createThunk(REMOVE_QUEUE_ITEM);\r\nexport const removeQueueItems = createThunk(REMOVE_QUEUE_ITEMS);\r\n\r\n//\r\n// Helpers\r\n\r\nconst fetchQueueDetailsHelper = createFetchHandler(details, '/queue/details');\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_QUEUE_STATUS]: createFetchHandler(status, '/queue/status'),\r\n\r\n [FETCH_QUEUE_DETAILS]: function(getState, payload, dispatch) {\r\n let params = payload;\r\n\r\n // If the payload params are empty try to get params from state.\r\n\r\n if (params && !_.isEmpty(params)) {\r\n dispatch(set({ section: details, params }));\r\n } else {\r\n params = getState().queue.details.params;\r\n }\r\n\r\n fetchQueueDetailsHelper(getState, params, dispatch);\r\n },\r\n\r\n ...createServerSideCollectionHandlers(\r\n paged,\r\n '/queue',\r\n fetchQueue,\r\n {\r\n [serverSideCollectionHandlers.FETCH]: FETCH_QUEUE,\r\n [serverSideCollectionHandlers.FIRST_PAGE]: GOTO_FIRST_QUEUE_PAGE,\r\n [serverSideCollectionHandlers.PREVIOUS_PAGE]: GOTO_PREVIOUS_QUEUE_PAGE,\r\n [serverSideCollectionHandlers.NEXT_PAGE]: GOTO_NEXT_QUEUE_PAGE,\r\n [serverSideCollectionHandlers.LAST_PAGE]: GOTO_LAST_QUEUE_PAGE,\r\n [serverSideCollectionHandlers.EXACT_PAGE]: GOTO_QUEUE_PAGE,\r\n [serverSideCollectionHandlers.SORT]: SET_QUEUE_SORT,\r\n [serverSideCollectionHandlers.FILTER]: SET_QUEUE_FILTER\r\n },\r\n fetchDataAugmenter\r\n ),\r\n\r\n [GRAB_QUEUE_ITEM]: function(getState, payload, dispatch) {\r\n const id = payload.id;\r\n\r\n dispatch(updateItem({ section: paged, id, isGrabbing: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: `/queue/grab/${id}`,\r\n method: 'POST'\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n fetchQueue(),\r\n\r\n set({\r\n section: paged,\r\n isGrabbing: false,\r\n grabError: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(updateItem({\r\n section: paged,\r\n id,\r\n isGrabbing: false,\r\n grabError: xhr\r\n }));\r\n });\r\n },\r\n\r\n [GRAB_QUEUE_ITEMS]: function(getState, payload, dispatch) {\r\n const ids = payload.ids;\r\n\r\n dispatch(batchActions([\r\n ...ids.map((id) => {\r\n return updateItem({\r\n section: paged,\r\n id,\r\n isGrabbing: true\r\n });\r\n }),\r\n\r\n set({\r\n section: paged,\r\n isGrabbing: true\r\n })\r\n ]));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/queue/grab/bulk',\r\n method: 'POST',\r\n dataType: 'json',\r\n data: JSON.stringify(payload)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(fetchQueue());\r\n\r\n dispatch(batchActions([\r\n ...ids.map((id) => {\r\n return updateItem({\r\n section: paged,\r\n id,\r\n isGrabbing: false,\r\n grabError: null\r\n });\r\n }),\r\n\r\n set({\r\n section: paged,\r\n isGrabbing: false,\r\n grabError: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(batchActions([\r\n ...ids.map((id) => {\r\n return updateItem({\r\n section: paged,\r\n id,\r\n isGrabbing: false,\r\n grabError: null\r\n });\r\n }),\r\n\r\n set({ section: paged, isGrabbing: false })\r\n ]));\r\n });\r\n },\r\n\r\n [REMOVE_QUEUE_ITEM]: function(getState, payload, dispatch) {\r\n const {\r\n id,\r\n remove,\r\n blocklist,\r\n skipRedownload,\r\n changeCategory\r\n } = payload;\r\n\r\n dispatch(updateItem({ section: paged, id, isRemoving: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: `/queue/${id}?removeFromClient=${remove}&blocklist=${blocklist}&skipRedownload=${skipRedownload}&changeCategory=${changeCategory}`,\r\n method: 'DELETE'\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(fetchQueue());\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(updateItem({ section: paged, id, isRemoving: false }));\r\n });\r\n },\r\n\r\n [REMOVE_QUEUE_ITEMS]: function(getState, payload, dispatch) {\r\n const {\r\n ids,\r\n remove,\r\n blocklist,\r\n skipRedownload,\r\n changeCategory\r\n } = payload;\r\n\r\n dispatch(batchActions([\r\n ...ids.map((id) => {\r\n return updateItem({\r\n section: paged,\r\n id,\r\n isRemoving: true\r\n });\r\n }),\r\n\r\n set({ section: paged, isRemoving: true })\r\n ]));\r\n\r\n const promise = createAjaxRequest({\r\n url: `/queue/bulk?removeFromClient=${remove}&blocklist=${blocklist}&skipRedownload=${skipRedownload}&changeCategory=${changeCategory}`,\r\n method: 'DELETE',\r\n dataType: 'json',\r\n contentType: 'application/json',\r\n data: JSON.stringify({ ids })\r\n }).request;\r\n\r\n promise.done((data) => {\r\n // Don't use batchActions with thunks\r\n dispatch(fetchQueue());\r\n\r\n dispatch(set({ section: paged, isRemoving: false }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(batchActions([\r\n ...ids.map((id) => {\r\n return updateItem({\r\n section: paged,\r\n id,\r\n isRemoving: false\r\n });\r\n }),\r\n\r\n set({ section: paged, isRemoving: false })\r\n ]));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_QUEUE_DETAILS]: createClearReducer(details, defaultState.details),\r\n\r\n [SET_QUEUE_TABLE_OPTION]: createSetTableOptionReducer(paged),\r\n\r\n [SET_QUEUE_OPTION]: function(state, { payload }) {\r\n const queueOptions = state.options;\r\n\r\n return {\r\n ...state,\r\n options: {\r\n ...queueOptions,\r\n ...payload\r\n }\r\n };\r\n },\r\n\r\n [CLEAR_QUEUE]: createClearReducer(paged, {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n totalPages: 0,\r\n totalRecords: 0\r\n })\r\n\r\n}, defaultState, section);\r\n","import { createAction } from 'redux-actions';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, filterTypePredicates, filterTypes, sortDirections } from 'Helpers/Props';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport translate from 'Utilities/String/translate';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createSetClientSideCollectionFilterReducer from './Creators/Reducers/createSetClientSideCollectionFilterReducer';\r\nimport createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'releases';\r\n\r\nlet abortCurrentRequest = null;\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n sortKey: 'releaseWeight',\r\n sortDirection: sortDirections.ASCENDING,\r\n sortPredicates: {\r\n age: function(item, direction) {\r\n return item.ageMinutes;\r\n },\r\n\r\n peers: function(item, direction) {\r\n const seeders = item.seeders || 0;\r\n const leechers = item.leechers || 0;\r\n\r\n return seeders * 1000000 + leechers;\r\n },\r\n\r\n languages: function(item, direction) {\r\n if (item.languages.length > 1) {\r\n return 10000;\r\n }\r\n\r\n return item.languages[0]?.id ?? 0;\r\n },\r\n\r\n indexerFlags: function(item, direction) {\r\n const indexerFlags = item.indexerFlags;\r\n const releaseWeight = item.releaseWeight;\r\n\r\n if (indexerFlags.length === 0) {\r\n return releaseWeight + 1000000;\r\n }\r\n\r\n return releaseWeight;\r\n },\r\n\r\n rejections: function(item, direction) {\r\n const rejections = item.rejections;\r\n const releaseWeight = item.releaseWeight;\r\n\r\n if (rejections.length !== 0) {\r\n return releaseWeight + 1000000;\r\n }\r\n\r\n return releaseWeight;\r\n }\r\n },\r\n\r\n filters: [\r\n {\r\n key: 'all',\r\n label: () => translate('All'),\r\n filters: []\r\n }\r\n ],\r\n\r\n filterPredicates: {\r\n quality: function(item, value, type) {\r\n const qualityId = item.quality.quality.id;\r\n\r\n if (type === filterTypes.EQUAL) {\r\n return qualityId === value;\r\n }\r\n\r\n if (type === filterTypes.NOT_EQUAL) {\r\n return qualityId !== value;\r\n }\r\n\r\n // Default to false\r\n return false;\r\n },\r\n\r\n languages: function(item, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const languages = item.languages.map((language) => language.name);\r\n\r\n return predicate(languages, filterValue);\r\n },\r\n\r\n peers: function(item, value, type) {\r\n const predicate = filterTypePredicates[type];\r\n const seeders = item.seeders || 0;\r\n const leechers = item.leechers || 0;\r\n\r\n return predicate(seeders + leechers, value);\r\n },\r\n\r\n rejectionCount: function(item, value, type) {\r\n const rejectionCount = item.rejections.length;\r\n\r\n switch (type) {\r\n case filterTypes.EQUAL:\r\n return rejectionCount === value;\r\n\r\n case filterTypes.GREATER_THAN:\r\n return rejectionCount > value;\r\n\r\n case filterTypes.GREATER_THAN_OR_EQUAL:\r\n return rejectionCount >= value;\r\n\r\n case filterTypes.LESS_THAN:\r\n return rejectionCount < value;\r\n\r\n case filterTypes.LESS_THAN_OR_EQUAL:\r\n return rejectionCount <= value;\r\n\r\n case filterTypes.NOT_EQUAL:\r\n return rejectionCount !== value;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n },\r\n\r\n filterBuilderProps: [\r\n {\r\n name: 'title',\r\n label: () => translate('Title'),\r\n type: filterBuilderTypes.STRING\r\n },\r\n {\r\n name: 'age',\r\n label: () => translate('Age'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'protocol',\r\n label: () => translate('Protocol'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.PROTOCOL\r\n },\r\n {\r\n name: 'indexerId',\r\n label: () => translate('Indexer'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.INDEXER\r\n },\r\n {\r\n name: 'size',\r\n label: () => translate('Size'),\r\n type: filterBuilderTypes.NUMBER,\r\n valueType: filterBuilderValueTypes.BYTES\r\n },\r\n {\r\n name: 'seeders',\r\n label: () => translate('Seeders'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'peers',\r\n label: () => translate('Peers'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'quality',\r\n label: () => translate('Quality'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.QUALITY\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n type: filterBuilderTypes.ARRAY,\r\n optionsSelector: function(items) {\r\n const genreList = items.reduce((acc, release) => {\r\n release.languages.forEach((language) => {\r\n acc.push({\r\n id: language.name,\r\n name: language.name\r\n });\r\n });\r\n\r\n return acc;\r\n }, []);\r\n\r\n return genreList.sort(sortByProp('name'));\r\n }\r\n },\r\n {\r\n name: 'customFormatScore',\r\n label: () => translate('CustomFormatScore'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'rejectionCount',\r\n label: () => translate('RejectionCount'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'movieRequested',\r\n label: () => translate('MovieRequested'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\r\n }\r\n ],\r\n selectedFilterKey: 'all'\r\n\r\n};\r\n\r\nexport const persistState = [\r\n 'releases.customFilters',\r\n 'releases.selectedFilterKey'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_RELEASES = 'releases/fetchReleases';\r\nexport const CANCEL_FETCH_RELEASES = 'releases/cancelFetchReleases';\r\nexport const SET_RELEASES_SORT = 'releases/setReleasesSort';\r\nexport const CLEAR_RELEASES = 'releases/clearReleases';\r\nexport const GRAB_RELEASE = 'releases/grabRelease';\r\nexport const UPDATE_RELEASE = 'releases/updateRelease';\r\nexport const SET_RELEASES_FILTER = 'releases/setMovieReleasesFilter';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchReleases = createThunk(FETCH_RELEASES);\r\nexport const cancelFetchReleases = createThunk(CANCEL_FETCH_RELEASES);\r\nexport const setReleasesSort = createAction(SET_RELEASES_SORT);\r\nexport const clearReleases = createAction(CLEAR_RELEASES);\r\nexport const grabRelease = createThunk(GRAB_RELEASE);\r\nexport const updateRelease = createAction(UPDATE_RELEASE);\r\nexport const setReleasesFilter = createAction(SET_RELEASES_FILTER);\r\n\r\n//\r\n// Helpers\r\n\r\nconst fetchReleasesHelper = createFetchHandler(section, '/release');\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_RELEASES]: function(getState, payload, dispatch) {\r\n const abortRequest = fetchReleasesHelper(getState, payload, dispatch);\r\n\r\n abortCurrentRequest = abortRequest;\r\n },\r\n\r\n [CANCEL_FETCH_RELEASES]: function(getState, payload, dispatch) {\r\n if (abortCurrentRequest) {\r\n abortCurrentRequest = abortCurrentRequest();\r\n }\r\n },\r\n\r\n [GRAB_RELEASE]: function(getState, payload, dispatch) {\r\n const guid = payload.guid;\r\n\r\n dispatch(updateRelease({ guid, isGrabbing: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/release',\r\n method: 'POST',\r\n dataType: 'json',\r\n contentType: 'application/json',\r\n data: JSON.stringify(payload)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(updateRelease({\r\n guid,\r\n isGrabbing: false,\r\n isGrabbed: true,\r\n grabError: null\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n const grabError = xhr.responseJSON && xhr.responseJSON.message || 'Failed to add to download queue';\r\n\r\n dispatch(updateRelease({\r\n guid,\r\n isGrabbing: false,\r\n isGrabbed: false,\r\n grabError\r\n }));\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_RELEASES]: (state) => {\r\n const {\r\n selectedFilterKey,\r\n ...otherDefaultState\r\n } = defaultState;\r\n\r\n return Object.assign({}, state, otherDefaultState);\r\n },\r\n\r\n [UPDATE_RELEASE]: (state, { payload }) => {\r\n const guid = payload.guid;\r\n const newState = Object.assign({}, state);\r\n const items = newState.items;\r\n const index = items.findIndex((item) => item.guid === guid);\r\n\r\n // Don't try to update if there isnt a matching item (the user closed the modal)\r\n if (index >= 0) {\r\n const item = Object.assign({}, items[index], payload);\r\n\r\n newState.items = [...items];\r\n newState.items.splice(index, 1, item);\r\n }\r\n\r\n return newState;\r\n },\r\n\r\n [SET_RELEASES_FILTER]: createSetClientSideCollectionFilterReducer(section),\r\n [SET_RELEASES_SORT]: createSetClientSideCollectionSortReducer(section)\r\n\r\n}, defaultState, section);\r\n","import { createAction } from 'redux-actions';\r\nimport { set } from 'Store/Actions/baseActions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport translate from 'Utilities/String/translate';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.autoTaggings';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_AUTO_TAGGINGS = 'settings/autoTaggings/fetchAutoTaggings';\r\nexport const SAVE_AUTO_TAGGING = 'settings/autoTaggings/saveAutoTagging';\r\nexport const DELETE_AUTO_TAGGING = 'settings/autoTaggings/deleteAutoTagging';\r\nexport const SET_AUTO_TAGGING_VALUE = 'settings/autoTaggings/setAutoTaggingValue';\r\nexport const CLONE_AUTO_TAGGING = 'settings/autoTaggings/cloneAutoTagging';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchAutoTaggings = createThunk(FETCH_AUTO_TAGGINGS);\r\nexport const saveAutoTagging = createThunk(SAVE_AUTO_TAGGING);\r\nexport const deleteAutoTagging = createThunk(DELETE_AUTO_TAGGING);\r\n\r\nexport const setAutoTaggingValue = createAction(SET_AUTO_TAGGING_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const cloneAutoTagging = createAction(CLONE_AUTO_TAGGING);\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n isFetching: false,\r\n isPopulated: false,\r\n schema: {\r\n removeTagsAutomatically: false,\r\n tags: []\r\n },\r\n error: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n isSaving: false,\r\n saveError: null,\r\n items: [],\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_AUTO_TAGGINGS]: createFetchHandler(section, '/autoTagging'),\r\n\r\n [DELETE_AUTO_TAGGING]: createRemoveItemHandler(section, '/autoTagging'),\r\n\r\n [SAVE_AUTO_TAGGING]: (getState, payload, dispatch) => {\r\n // move the format tags in as a pending change\r\n const state = getState();\r\n const pendingChanges = state.settings.autoTaggings.pendingChanges;\r\n pendingChanges.specifications = state.settings.autoTaggingSpecifications.items;\r\n dispatch(set({\r\n section,\r\n pendingChanges\r\n }));\r\n\r\n createSaveProviderHandler(section, '/autoTagging')(getState, payload, dispatch);\r\n }\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_AUTO_TAGGING_VALUE]: createSetSettingValueReducer(section),\r\n\r\n [CLONE_AUTO_TAGGING]: function(state, { payload }) {\r\n const id = payload.id;\r\n const newState = getSectionState(state, section);\r\n const item = newState.items.find((i) => i.id === id);\r\n const pendingChanges = { ...item, id: 0 };\r\n delete pendingChanges.id;\r\n\r\n pendingChanges.name = translate('DefaultNameCopiedProfile', { name: pendingChanges.name });\r\n newState.pendingChanges = pendingChanges;\r\n\r\n return updateSectionState(state, section, newState);\r\n }\r\n }\r\n\r\n};\r\n","import createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set } from '../baseActions';\r\n\r\nfunction createFetchSchemaHandler(section, url) {\r\n return function(getState, payload, dispatch) {\r\n dispatch(set({ section, isSchemaFetching: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(set({\r\n section,\r\n isSchemaFetching: false,\r\n isSchemaPopulated: true,\r\n schemaError: null,\r\n schema: data\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSchemaFetching: false,\r\n isSchemaPopulated: true,\r\n schemaError: xhr\r\n }));\r\n });\r\n };\r\n}\r\n\r\nexport default createFetchSchemaHandler;\r\n","import getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\nfunction createSetProviderFieldValueReducer(section) {\r\n return (state, { payload }) => {\r\n if (section === payload.section) {\r\n const { name, value } = payload;\r\n const newState = getSectionState(state, section);\r\n newState.pendingChanges = Object.assign({}, newState.pendingChanges);\r\n const fields = Object.assign({}, newState.pendingChanges.fields || {});\r\n\r\n fields[name] = value;\r\n\r\n newState.pendingChanges.fields = fields;\r\n\r\n return updateSectionState(state, section, newState);\r\n }\r\n\r\n return state;\r\n };\r\n}\r\n\r\nexport default createSetProviderFieldValueReducer;\r\n","function getNextId(items) {\r\n return items.reduce((id, x) => Math.max(id, x.id), 1) + 1;\r\n}\r\n\r\nexport default getNextId;\r\n","import _ from 'lodash';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\nfunction applySchemaDefaults(selectedSchema, schemaDefaults) {\r\n if (!schemaDefaults) {\r\n return selectedSchema;\r\n } else if (_.isFunction(schemaDefaults)) {\r\n return schemaDefaults(selectedSchema);\r\n }\r\n\r\n return Object.assign(selectedSchema, schemaDefaults);\r\n}\r\n\r\nfunction selectProviderSchema(state, section, payload, schemaDefaults) {\r\n const newState = getSectionState(state, section);\r\n\r\n const {\r\n implementation,\r\n presetName\r\n } = payload;\r\n\r\n const selectedImplementation = _.find(newState.schema, { implementation });\r\n\r\n const selectedSchema = presetName ?\r\n _.find(selectedImplementation.presets, { name: presetName }) :\r\n selectedImplementation;\r\n\r\n newState.selectedSchema = applySchemaDefaults(_.cloneDeep(selectedSchema), schemaDefaults);\r\n\r\n return updateSectionState(state, section, newState);\r\n}\r\n\r\nexport default selectProviderSchema;\r\n","import { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport createFetchSchemaHandler from 'Store/Actions/Creators/createFetchSchemaHandler';\r\nimport createClearReducer from 'Store/Actions/Creators/Reducers/createClearReducer';\r\nimport createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport getNextId from 'Utilities/State/getNextId';\r\nimport getProviderState from 'Utilities/State/getProviderState';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport selectProviderSchema from 'Utilities/State/selectProviderSchema';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport translate from 'Utilities/String/translate';\r\nimport { removeItem, set, update, updateItem } from '../baseActions';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.autoTaggingSpecifications';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_AUTO_TAGGING_SPECIFICATIONS = 'settings/autoTaggingSpecifications/fetchAutoTaggingSpecifications';\r\nexport const FETCH_AUTO_TAGGING_SPECIFICATION_SCHEMA = 'settings/autoTaggingSpecifications/fetchAutoTaggingSpecificationSchema';\r\nexport const SELECT_AUTO_TAGGING_SPECIFICATION_SCHEMA = 'settings/autoTaggingSpecifications/selectAutoTaggingSpecificationSchema';\r\nexport const SET_AUTO_TAGGING_SPECIFICATION_VALUE = 'settings/autoTaggingSpecifications/setAutoTaggingSpecificationValue';\r\nexport const SET_AUTO_TAGGING_SPECIFICATION_FIELD_VALUE = 'settings/autoTaggingSpecifications/setAutoTaggingSpecificationFieldValue';\r\nexport const SAVE_AUTO_TAGGING_SPECIFICATION = 'settings/autoTaggingSpecifications/saveAutoTaggingSpecification';\r\nexport const DELETE_AUTO_TAGGING_SPECIFICATION = 'settings/autoTaggingSpecifications/deleteAutoTaggingSpecification';\r\nexport const DELETE_ALL_AUTO_TAGGING_SPECIFICATION = 'settings/autoTaggingSpecifications/deleteAllAutoTaggingSpecification';\r\nexport const CLONE_AUTO_TAGGING_SPECIFICATION = 'settings/autoTaggingSpecifications/cloneAutoTaggingSpecification';\r\nexport const CLEAR_AUTO_TAGGING_SPECIFICATIONS = 'settings/autoTaggingSpecifications/clearAutoTaggingSpecifications';\r\nexport const CLEAR_AUTO_TAGGING_SPECIFICATION_PENDING = 'settings/autoTaggingSpecifications/clearAutoTaggingSpecificationPending';\r\n//\r\n// Action Creators\r\n\r\nexport const fetchAutoTaggingSpecifications = createThunk(FETCH_AUTO_TAGGING_SPECIFICATIONS);\r\nexport const fetchAutoTaggingSpecificationSchema = createThunk(FETCH_AUTO_TAGGING_SPECIFICATION_SCHEMA);\r\nexport const selectAutoTaggingSpecificationSchema = createAction(SELECT_AUTO_TAGGING_SPECIFICATION_SCHEMA);\r\n\r\nexport const saveAutoTaggingSpecification = createThunk(SAVE_AUTO_TAGGING_SPECIFICATION);\r\nexport const deleteAutoTaggingSpecification = createThunk(DELETE_AUTO_TAGGING_SPECIFICATION);\r\nexport const deleteAllAutoTaggingSpecification = createThunk(DELETE_ALL_AUTO_TAGGING_SPECIFICATION);\r\n\r\nexport const setAutoTaggingSpecificationValue = createAction(SET_AUTO_TAGGING_SPECIFICATION_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setAutoTaggingSpecificationFieldValue = createAction(SET_AUTO_TAGGING_SPECIFICATION_FIELD_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const cloneAutoTaggingSpecification = createAction(CLONE_AUTO_TAGGING_SPECIFICATION);\r\n\r\nexport const clearAutoTaggingSpecification = createAction(CLEAR_AUTO_TAGGING_SPECIFICATIONS);\r\n\r\nexport const clearAutoTaggingSpecificationPending = createThunk(CLEAR_AUTO_TAGGING_SPECIFICATION_PENDING);\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isPopulated: false,\r\n error: null,\r\n isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n schemaError: null,\r\n schema: [],\r\n selectedSchema: {},\r\n isSaving: false,\r\n saveError: null,\r\n items: [],\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_AUTO_TAGGING_SPECIFICATION_SCHEMA]: createFetchSchemaHandler(section, '/autoTagging/schema'),\r\n\r\n [FETCH_AUTO_TAGGING_SPECIFICATIONS]: (getState, payload, dispatch) => {\r\n let tags = [];\r\n if (payload.id) {\r\n const cfState = getSectionState(getState(), 'settings.autoTaggings', true);\r\n const cf = cfState.items[cfState.itemMap[payload.id]];\r\n tags = cf.specifications.map((tag, i) => {\r\n return {\r\n id: i + 1,\r\n ...tag\r\n };\r\n });\r\n }\r\n\r\n dispatch(batchActions([\r\n update({ section, data: tags }),\r\n set({\r\n section,\r\n isPopulated: true\r\n })\r\n ]));\r\n },\r\n\r\n [SAVE_AUTO_TAGGING_SPECIFICATION]: (getState, payload, dispatch) => {\r\n const {\r\n id,\r\n ...otherPayload\r\n } = payload;\r\n\r\n const saveData = getProviderState({ id, ...otherPayload }, getState, section, false);\r\n\r\n // we have to set id since not actually posting to server yet\r\n if (!saveData.id) {\r\n saveData.id = getNextId(getState().settings.autoTaggingSpecifications.items);\r\n }\r\n\r\n dispatch(batchActions([\r\n updateItem({ section, ...saveData }),\r\n set({\r\n section,\r\n pendingChanges: {}\r\n })\r\n ]));\r\n },\r\n\r\n [DELETE_AUTO_TAGGING_SPECIFICATION]: (getState, payload, dispatch) => {\r\n const id = payload.id;\r\n return dispatch(removeItem({ section, id }));\r\n },\r\n\r\n [DELETE_ALL_AUTO_TAGGING_SPECIFICATION]: (getState, payload, dispatch) => {\r\n return dispatch(set({\r\n section,\r\n items: []\r\n }));\r\n },\r\n\r\n [CLEAR_AUTO_TAGGING_SPECIFICATION_PENDING]: (getState, payload, dispatch) => {\r\n return dispatch(set({\r\n section,\r\n pendingChanges: {}\r\n }));\r\n }\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_AUTO_TAGGING_SPECIFICATION_VALUE]: createSetSettingValueReducer(section),\r\n [SET_AUTO_TAGGING_SPECIFICATION_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n\r\n [SELECT_AUTO_TAGGING_SPECIFICATION_SCHEMA]: (state, { payload }) => {\r\n return selectProviderSchema(state, section, payload, (selectedSchema) => {\r\n return selectedSchema;\r\n });\r\n },\r\n\r\n [CLONE_AUTO_TAGGING_SPECIFICATION]: function(state, { payload }) {\r\n const id = payload.id;\r\n const newState = getSectionState(state, section);\r\n const items = newState.items;\r\n const item = items.find((i) => i.id === id);\r\n const newId = getNextId(newState.items);\r\n const newItem = {\r\n ...item,\r\n id: newId,\r\n name: translate('DefaultNameCopiedSpecification', { name: item.name })\r\n };\r\n newState.items = [...items, newItem];\r\n newState.itemMap[newId] = newState.items.length - 1;\r\n\r\n return updateSectionState(state, section, newState);\r\n },\r\n\r\n [CLEAR_AUTO_TAGGING_SPECIFICATIONS]: createClearReducer(section, {\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n })\r\n }\r\n};\r\n","import { batchActions } from 'redux-batched-actions';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set, updateItem } from '../baseActions';\r\n\r\nfunction createBulkEditItemHandler(section, url) {\r\n return function(getState, payload, dispatch) {\r\n\r\n dispatch(set({ section, isSaving: true }));\r\n\r\n const ajaxOptions = {\r\n url: `${url}`,\r\n method: 'PUT',\r\n data: JSON.stringify(payload),\r\n dataType: 'json'\r\n };\r\n\r\n const promise = createAjaxRequest(ajaxOptions).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n set({\r\n section,\r\n isSaving: false,\r\n saveError: null\r\n }),\r\n\r\n ...data.map((provider) => {\r\n\r\n const {\r\n ...propsToUpdate\r\n } = provider;\r\n\r\n return updateItem({\r\n id: provider.id,\r\n section,\r\n ...propsToUpdate\r\n });\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: xhr\r\n }));\r\n });\r\n\r\n return promise;\r\n };\r\n}\r\n\r\nexport default createBulkEditItemHandler;\r\n","import { batchActions } from 'redux-batched-actions';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { removeItem, set } from '../baseActions';\r\n\r\nfunction createBulkRemoveItemHandler(section, url) {\r\n return function(getState, payload, dispatch) {\r\n const {\r\n ids\r\n } = payload;\r\n\r\n dispatch(set({ section, isDeleting: true }));\r\n\r\n const ajaxOptions = {\r\n url: `${url}`,\r\n method: 'DELETE',\r\n data: JSON.stringify(payload),\r\n dataType: 'json'\r\n };\r\n\r\n const promise = createAjaxRequest(ajaxOptions).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n set({\r\n section,\r\n isDeleting: false,\r\n deleteError: null\r\n }),\r\n\r\n ...ids.map((id) => {\r\n return removeItem({ section, id });\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isDeleting: false,\r\n deleteError: xhr\r\n }));\r\n });\r\n\r\n return promise;\r\n };\r\n}\r\n\r\nexport default createBulkRemoveItemHandler;\r\n","import { createAction } from 'redux-actions';\r\nimport { sortDirections } from 'Helpers/Props';\r\nimport createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';\r\nimport createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createSetClientSideCollectionSortReducer\r\n from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport translate from 'Utilities/String/translate';\r\nimport { set } from '../baseActions';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.customFormats';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_CUSTOM_FORMATS = 'settings/customFormats/fetchCustomFormats';\r\nexport const SAVE_CUSTOM_FORMAT = 'settings/customFormats/saveCustomFormat';\r\nexport const DELETE_CUSTOM_FORMAT = 'settings/customFormats/deleteCustomFormat';\r\nexport const SET_CUSTOM_FORMAT_VALUE = 'settings/customFormats/setCustomFormatValue';\r\nexport const CLONE_CUSTOM_FORMAT = 'settings/customFormats/cloneCustomFormat';\r\nexport const BULK_EDIT_CUSTOM_FORMATS = 'settings/downloadClients/bulkEditCustomFormats';\r\nexport const BULK_DELETE_CUSTOM_FORMATS = 'settings/downloadClients/bulkDeleteCustomFormats';\r\nexport const SET_MANAGE_CUSTOM_FORMATS_SORT = 'settings/downloadClients/setManageCustomFormatsSort';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchCustomFormats = createThunk(FETCH_CUSTOM_FORMATS);\r\nexport const saveCustomFormat = createThunk(SAVE_CUSTOM_FORMAT);\r\nexport const deleteCustomFormat = createThunk(DELETE_CUSTOM_FORMAT);\r\nexport const bulkEditCustomFormats = createThunk(BULK_EDIT_CUSTOM_FORMATS);\r\nexport const bulkDeleteCustomFormats = createThunk(BULK_DELETE_CUSTOM_FORMATS);\r\nexport const setManageCustomFormatsSort = createAction(SET_MANAGE_CUSTOM_FORMATS_SORT);\r\n\r\nexport const setCustomFormatValue = createAction(SET_CUSTOM_FORMAT_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const cloneCustomFormat = createAction(CLONE_CUSTOM_FORMAT);\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSaving: false,\r\n saveError: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n items: [],\r\n pendingChanges: {},\r\n\r\n isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n schemaError: null,\r\n schema: {\r\n includeCustomFormatWhenRenaming: false\r\n },\r\n\r\n sortKey: 'name',\r\n sortDirection: sortDirections.ASCENDING,\r\n sortPredicates: {\r\n name: ({ name }) => {\r\n return name.toLocaleLowerCase();\r\n }\r\n }\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_CUSTOM_FORMATS]: createFetchHandler(section, '/customformat'),\r\n\r\n [DELETE_CUSTOM_FORMAT]: createRemoveItemHandler(section, '/customformat'),\r\n\r\n [SAVE_CUSTOM_FORMAT]: (getState, payload, dispatch) => {\r\n // move the format tags in as a pending change\r\n const state = getState();\r\n const pendingChanges = state.settings.customFormats.pendingChanges;\r\n pendingChanges.specifications = state.settings.customFormatSpecifications.items;\r\n dispatch(set({\r\n section,\r\n pendingChanges\r\n }));\r\n\r\n createSaveProviderHandler(section, '/customformat')(getState, payload, dispatch);\r\n },\r\n\r\n [BULK_EDIT_CUSTOM_FORMATS]: createBulkEditItemHandler(section, '/customformat/bulk'),\r\n [BULK_DELETE_CUSTOM_FORMATS]: createBulkRemoveItemHandler(section, '/customformat/bulk')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_CUSTOM_FORMAT_VALUE]: createSetSettingValueReducer(section),\r\n\r\n [CLONE_CUSTOM_FORMAT]: function(state, { payload }) {\r\n const id = payload.id;\r\n const newState = getSectionState(state, section);\r\n const item = newState.items.find((i) => i.id === id);\r\n const pendingChanges = { ...item, id: 0 };\r\n delete pendingChanges.id;\r\n\r\n pendingChanges.name = translate('DefaultNameCopiedProfile', { name: pendingChanges.name });\r\n newState.pendingChanges = pendingChanges;\r\n\r\n return updateSectionState(state, section, newState);\r\n },\r\n\r\n [SET_MANAGE_CUSTOM_FORMATS_SORT]: createSetClientSideCollectionSortReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport createFetchSchemaHandler from 'Store/Actions/Creators/createFetchSchemaHandler';\r\nimport createClearReducer from 'Store/Actions/Creators/Reducers/createClearReducer';\r\nimport createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport getNextId from 'Utilities/State/getNextId';\r\nimport getProviderState from 'Utilities/State/getProviderState';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport selectProviderSchema from 'Utilities/State/selectProviderSchema';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport translate from 'Utilities/String/translate';\r\nimport { removeItem, set, update, updateItem } from '../baseActions';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.customFormatSpecifications';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_CUSTOM_FORMAT_SPECIFICATIONS = 'settings/customFormatSpecifications/fetchCustomFormatSpecifications';\r\nexport const FETCH_CUSTOM_FORMAT_SPECIFICATION_SCHEMA = 'settings/customFormatSpecifications/fetchCustomFormatSpecificationSchema';\r\nexport const SELECT_CUSTOM_FORMAT_SPECIFICATION_SCHEMA = 'settings/customFormatSpecifications/selectCustomFormatSpecificationSchema';\r\nexport const SET_CUSTOM_FORMAT_SPECIFICATION_VALUE = 'settings/customFormatSpecifications/setCustomFormatSpecificationValue';\r\nexport const SET_CUSTOM_FORMAT_SPECIFICATION_FIELD_VALUE = 'settings/customFormatSpecifications/setCustomFormatSpecificationFieldValue';\r\nexport const SAVE_CUSTOM_FORMAT_SPECIFICATION = 'settings/customFormatSpecifications/saveCustomFormatSpecification';\r\nexport const DELETE_CUSTOM_FORMAT_SPECIFICATION = 'settings/customFormatSpecifications/deleteCustomFormatSpecification';\r\nexport const DELETE_ALL_CUSTOM_FORMAT_SPECIFICATION = 'settings/customFormatSpecifications/deleteAllCustomFormatSpecification';\r\nexport const CLONE_CUSTOM_FORMAT_SPECIFICATION = 'settings/customFormatSpecifications/cloneCustomFormatSpecification';\r\nexport const CLEAR_CUSTOM_FORMAT_SPECIFICATIONS = 'settings/customFormatSpecifications/clearCustomFormatSpecifications';\r\nexport const CLEAR_CUSTOM_FORMAT_SPECIFICATION_PENDING = 'settings/customFormatSpecifications/clearCustomFormatSpecificationPending';\r\n//\r\n// Action Creators\r\n\r\nexport const fetchCustomFormatSpecifications = createThunk(FETCH_CUSTOM_FORMAT_SPECIFICATIONS);\r\nexport const fetchCustomFormatSpecificationSchema = createThunk(FETCH_CUSTOM_FORMAT_SPECIFICATION_SCHEMA);\r\nexport const selectCustomFormatSpecificationSchema = createAction(SELECT_CUSTOM_FORMAT_SPECIFICATION_SCHEMA);\r\n\r\nexport const saveCustomFormatSpecification = createThunk(SAVE_CUSTOM_FORMAT_SPECIFICATION);\r\nexport const deleteCustomFormatSpecification = createThunk(DELETE_CUSTOM_FORMAT_SPECIFICATION);\r\nexport const deleteAllCustomFormatSpecification = createThunk(DELETE_ALL_CUSTOM_FORMAT_SPECIFICATION);\r\n\r\nexport const setCustomFormatSpecificationValue = createAction(SET_CUSTOM_FORMAT_SPECIFICATION_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setCustomFormatSpecificationFieldValue = createAction(SET_CUSTOM_FORMAT_SPECIFICATION_FIELD_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const cloneCustomFormatSpecification = createAction(CLONE_CUSTOM_FORMAT_SPECIFICATION);\r\n\r\nexport const clearCustomFormatSpecification = createAction(CLEAR_CUSTOM_FORMAT_SPECIFICATIONS);\r\n\r\nexport const clearCustomFormatSpecificationPending = createThunk(CLEAR_CUSTOM_FORMAT_SPECIFICATION_PENDING);\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isPopulated: false,\r\n error: null,\r\n isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n schemaError: null,\r\n schema: [],\r\n selectedSchema: {},\r\n isSaving: false,\r\n saveError: null,\r\n items: [],\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_CUSTOM_FORMAT_SPECIFICATION_SCHEMA]: createFetchSchemaHandler(section, '/customformat/schema'),\r\n\r\n [FETCH_CUSTOM_FORMAT_SPECIFICATIONS]: (getState, payload, dispatch) => {\r\n let tags = [];\r\n if (payload.id) {\r\n const cfState = getSectionState(getState(), 'settings.customFormats', true);\r\n const cf = cfState.items[cfState.itemMap[payload.id]];\r\n tags = cf.specifications.map((tag, i) => {\r\n return {\r\n id: i + 1,\r\n ...tag\r\n };\r\n });\r\n }\r\n\r\n dispatch(batchActions([\r\n update({ section, data: tags }),\r\n set({\r\n section,\r\n isPopulated: true\r\n })\r\n ]));\r\n },\r\n\r\n [SAVE_CUSTOM_FORMAT_SPECIFICATION]: (getState, payload, dispatch) => {\r\n const {\r\n id,\r\n ...otherPayload\r\n } = payload;\r\n\r\n const saveData = getProviderState({ id, ...otherPayload }, getState, section, false);\r\n\r\n // we have to set id since not actually posting to server yet\r\n if (!saveData.id) {\r\n saveData.id = getNextId(getState().settings.customFormatSpecifications.items);\r\n }\r\n\r\n dispatch(batchActions([\r\n updateItem({ section, ...saveData }),\r\n set({\r\n section,\r\n pendingChanges: {}\r\n })\r\n ]));\r\n },\r\n\r\n [DELETE_CUSTOM_FORMAT_SPECIFICATION]: (getState, payload, dispatch) => {\r\n const id = payload.id;\r\n return dispatch(removeItem({ section, id }));\r\n },\r\n\r\n [DELETE_ALL_CUSTOM_FORMAT_SPECIFICATION]: (getState, payload, dispatch) => {\r\n return dispatch(set({\r\n section,\r\n items: []\r\n }));\r\n },\r\n\r\n [CLEAR_CUSTOM_FORMAT_SPECIFICATION_PENDING]: (getState, payload, dispatch) => {\r\n return dispatch(set({\r\n section,\r\n pendingChanges: {}\r\n }));\r\n }\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_CUSTOM_FORMAT_SPECIFICATION_VALUE]: createSetSettingValueReducer(section),\r\n [SET_CUSTOM_FORMAT_SPECIFICATION_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n\r\n [SELECT_CUSTOM_FORMAT_SPECIFICATION_SCHEMA]: (state, { payload }) => {\r\n return selectProviderSchema(state, section, payload, (selectedSchema) => {\r\n return selectedSchema;\r\n });\r\n },\r\n\r\n [CLONE_CUSTOM_FORMAT_SPECIFICATION]: function(state, { payload }) {\r\n const id = payload.id;\r\n const newState = getSectionState(state, section);\r\n const items = newState.items;\r\n const item = items.find((i) => i.id === id);\r\n const newId = getNextId(newState.items);\r\n const newItem = {\r\n ...item,\r\n id: newId,\r\n name: translate('DefaultNameCopiedSpecification', { name: item.name })\r\n };\r\n newState.items = [...items, newItem];\r\n newState.itemMap[newId] = newState.items.length - 1;\r\n\r\n return updateSectionState(state, section, newState);\r\n },\r\n\r\n [CLEAR_CUSTOM_FORMAT_SPECIFICATIONS]: createClearReducer(section, {\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n })\r\n }\r\n};\r\n","import _ from 'lodash';\r\nimport { createAction } from 'redux-actions';\r\nimport { update } from 'Store/Actions/baseActions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createFetchSchemaHandler from 'Store/Actions/Creators/createFetchSchemaHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.delayProfiles';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_DELAY_PROFILES = 'settings/delayProfiles/fetchDelayProfiles';\r\nexport const FETCH_DELAY_PROFILE_SCHEMA = 'settings/delayProfiles/fetchDelayProfileSchema';\r\nexport const SAVE_DELAY_PROFILE = 'settings/delayProfiles/saveDelayProfile';\r\nexport const DELETE_DELAY_PROFILE = 'settings/delayProfiles/deleteDelayProfile';\r\nexport const REORDER_DELAY_PROFILE = 'settings/delayProfiles/reorderDelayProfile';\r\nexport const SET_DELAY_PROFILE_VALUE = 'settings/delayProfiles/setDelayProfileValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchDelayProfiles = createThunk(FETCH_DELAY_PROFILES);\r\nexport const fetchDelayProfileSchema = createThunk(FETCH_DELAY_PROFILE_SCHEMA);\r\nexport const saveDelayProfile = createThunk(SAVE_DELAY_PROFILE);\r\nexport const deleteDelayProfile = createThunk(DELETE_DELAY_PROFILE);\r\nexport const reorderDelayProfile = createThunk(REORDER_DELAY_PROFILE);\r\n\r\nexport const setDelayProfileValue = createAction(SET_DELAY_PROFILE_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n isSaving: false,\r\n saveError: null,\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_DELAY_PROFILES]: createFetchHandler(section, '/delayprofile'),\r\n [FETCH_DELAY_PROFILE_SCHEMA]: createFetchSchemaHandler(section, '/delayprofile/schema'),\r\n\r\n [SAVE_DELAY_PROFILE]: createSaveProviderHandler(section, '/delayprofile'),\r\n [DELETE_DELAY_PROFILE]: createRemoveItemHandler(section, '/delayprofile'),\r\n\r\n [REORDER_DELAY_PROFILE]: (getState, payload, dispatch) => {\r\n const { id, moveIndex } = payload;\r\n const moveOrder = moveIndex + 1;\r\n const delayProfiles = getState().settings.delayProfiles.items;\r\n const moving = _.find(delayProfiles, { id });\r\n\r\n // Don't move if the order hasn't changed\r\n if (moving.order === moveOrder) {\r\n return;\r\n }\r\n\r\n const after = moveIndex > 0 ? _.find(delayProfiles, { order: moveIndex }) : null;\r\n const afterQueryParam = after ? `after=${after.id}` : '';\r\n\r\n const promise = createAjaxRequest({\r\n method: 'PUT',\r\n url: `/delayprofile/reorder/${id}?${afterQueryParam}`\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(update({ section, data }));\r\n });\r\n }\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_DELAY_PROFILE_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { batchActions } from 'redux-batched-actions';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport { set, update } from '../baseActions';\r\n\r\nfunction createSaveHandler(section, url) {\r\n return function(getState, payload, dispatch) {\r\n dispatch(set({ section, isSaving: true }));\r\n\r\n const state = getSectionState(getState(), section, true);\r\n const saveData = Object.assign({}, state.item, state.pendingChanges, payload);\r\n\r\n const promise = createAjaxRequest({\r\n url,\r\n method: 'PUT',\r\n dataType: 'json',\r\n data: JSON.stringify(saveData)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isSaving: false,\r\n saveError: null,\r\n pendingChanges: {}\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: xhr\r\n }));\r\n });\r\n };\r\n}\r\n\r\nexport default createSaveHandler;\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveHandler from 'Store/Actions/Creators/createSaveHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.downloadClientOptions';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_DOWNLOAD_CLIENT_OPTIONS = 'FETCH_DOWNLOAD_CLIENT_OPTIONS';\r\nexport const SET_DOWNLOAD_CLIENT_OPTIONS_VALUE = 'SET_DOWNLOAD_CLIENT_OPTIONS_VALUE';\r\nexport const SAVE_DOWNLOAD_CLIENT_OPTIONS = 'SAVE_DOWNLOAD_CLIENT_OPTIONS';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchDownloadClientOptions = createThunk(FETCH_DOWNLOAD_CLIENT_OPTIONS);\r\nexport const saveDownloadClientOptions = createThunk(SAVE_DOWNLOAD_CLIENT_OPTIONS);\r\nexport const setDownloadClientOptionsValue = createAction(SET_DOWNLOAD_CLIENT_OPTIONS_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pendingChanges: {},\r\n isSaving: false,\r\n saveError: null,\r\n item: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_DOWNLOAD_CLIENT_OPTIONS]: createFetchHandler(section, '/config/downloadclient'),\r\n [SAVE_DOWNLOAD_CLIENT_OPTIONS]: createSaveHandler(section, '/config/downloadclient')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_DOWNLOAD_CLIENT_OPTIONS_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { set } from '../baseActions';\r\n\r\nfunction createTestAllProvidersHandler(section, url) {\r\n return function(getState, payload, dispatch) {\r\n dispatch(set({ section, isTestingAll: true }));\r\n\r\n const ajaxOptions = {\r\n url: `${url}/testall`,\r\n method: 'POST',\r\n contentType: 'application/json',\r\n dataType: 'json'\r\n };\r\n\r\n const { request } = createAjaxRequest(ajaxOptions);\r\n\r\n request.done((data) => {\r\n dispatch(set({\r\n section,\r\n isTestingAll: false,\r\n saveError: null\r\n }));\r\n });\r\n\r\n request.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isTestingAll: false\r\n }));\r\n });\r\n };\r\n}\r\n\r\nexport default createTestAllProvidersHandler;\r\n","import $ from 'jquery';\r\nimport _ from 'lodash';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport getProviderState from 'Utilities/State/getProviderState';\r\nimport { set } from '../baseActions';\r\n\r\nconst abortCurrentRequests = {};\r\nlet lastTestData = null;\r\n\r\nexport function createCancelTestProviderHandler(section) {\r\n return function(getState, payload, dispatch) {\r\n if (abortCurrentRequests[section]) {\r\n abortCurrentRequests[section]();\r\n abortCurrentRequests[section] = null;\r\n }\r\n };\r\n}\r\n\r\nfunction createTestProviderHandler(section, url) {\r\n return function(getState, payload, dispatch) {\r\n dispatch(set({ section, isTesting: true }));\r\n\r\n const {\r\n queryParams = {},\r\n ...otherPayload\r\n } = payload;\r\n\r\n const testData = getProviderState({ ...otherPayload }, getState, section);\r\n const params = { ...queryParams };\r\n\r\n // If the user is re-testing the same provider without changes\r\n // force it to be tested.\r\n\r\n if (_.isEqual(testData, lastTestData)) {\r\n params.forceTest = true;\r\n }\r\n\r\n lastTestData = testData;\r\n\r\n const ajaxOptions = {\r\n url: `${url}/test?${$.param(params, true)}`,\r\n method: 'POST',\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n data: JSON.stringify(testData)\r\n };\r\n\r\n const { request, abortRequest } = createAjaxRequest(ajaxOptions);\r\n\r\n abortCurrentRequests[section] = abortRequest;\r\n\r\n request.done((data) => {\r\n lastTestData = null;\r\n\r\n dispatch(set({\r\n section,\r\n isTesting: false,\r\n saveError: null\r\n }));\r\n });\r\n\r\n request.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isTesting: false,\r\n saveError: xhr.aborted ? null : xhr\r\n }));\r\n });\r\n };\r\n}\r\n\r\nexport default createTestProviderHandler;\r\n","import { createAction } from 'redux-actions';\r\nimport { sortDirections } from 'Helpers/Props';\r\nimport createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';\r\nimport createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createFetchSchemaHandler from 'Store/Actions/Creators/createFetchSchemaHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';\r\nimport createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';\r\nimport createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';\r\nimport createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport selectProviderSchema from 'Utilities/State/selectProviderSchema';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.downloadClients';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_DOWNLOAD_CLIENTS = 'settings/downloadClients/fetchDownloadClients';\r\nexport const FETCH_DOWNLOAD_CLIENT_SCHEMA = 'settings/downloadClients/fetchDownloadClientSchema';\r\nexport const SELECT_DOWNLOAD_CLIENT_SCHEMA = 'settings/downloadClients/selectDownloadClientSchema';\r\nexport const SET_DOWNLOAD_CLIENT_VALUE = 'settings/downloadClients/setDownloadClientValue';\r\nexport const SET_DOWNLOAD_CLIENT_FIELD_VALUE = 'settings/downloadClients/setDownloadClientFieldValue';\r\nexport const SAVE_DOWNLOAD_CLIENT = 'settings/downloadClients/saveDownloadClient';\r\nexport const CANCEL_SAVE_DOWNLOAD_CLIENT = 'settings/downloadClients/cancelSaveDownloadClient';\r\nexport const DELETE_DOWNLOAD_CLIENT = 'settings/downloadClients/deleteDownloadClient';\r\nexport const TEST_DOWNLOAD_CLIENT = 'settings/downloadClients/testDownloadClient';\r\nexport const CANCEL_TEST_DOWNLOAD_CLIENT = 'settings/downloadClients/cancelTestDownloadClient';\r\nexport const TEST_ALL_DOWNLOAD_CLIENTS = 'settings/downloadClients/testAllDownloadClients';\r\nexport const BULK_EDIT_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkEditDownloadClients';\r\nexport const BULK_DELETE_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkDeleteDownloadClients';\r\nexport const SET_MANAGE_DOWNLOAD_CLIENTS_SORT = 'settings/downloadClients/setManageDownloadClientsSort';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchDownloadClients = createThunk(FETCH_DOWNLOAD_CLIENTS);\r\nexport const fetchDownloadClientSchema = createThunk(FETCH_DOWNLOAD_CLIENT_SCHEMA);\r\nexport const selectDownloadClientSchema = createAction(SELECT_DOWNLOAD_CLIENT_SCHEMA);\r\n\r\nexport const saveDownloadClient = createThunk(SAVE_DOWNLOAD_CLIENT);\r\nexport const cancelSaveDownloadClient = createThunk(CANCEL_SAVE_DOWNLOAD_CLIENT);\r\nexport const deleteDownloadClient = createThunk(DELETE_DOWNLOAD_CLIENT);\r\nexport const testDownloadClient = createThunk(TEST_DOWNLOAD_CLIENT);\r\nexport const cancelTestDownloadClient = createThunk(CANCEL_TEST_DOWNLOAD_CLIENT);\r\nexport const testAllDownloadClients = createThunk(TEST_ALL_DOWNLOAD_CLIENTS);\r\nexport const bulkEditDownloadClients = createThunk(BULK_EDIT_DOWNLOAD_CLIENTS);\r\nexport const bulkDeleteDownloadClients = createThunk(BULK_DELETE_DOWNLOAD_CLIENTS);\r\nexport const setManageDownloadClientsSort = createAction(SET_MANAGE_DOWNLOAD_CLIENTS_SORT);\r\n\r\nexport const setDownloadClientValue = createAction(SET_DOWNLOAD_CLIENT_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setDownloadClientFieldValue = createAction(SET_DOWNLOAD_CLIENT_FIELD_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n schemaError: null,\r\n schema: [],\r\n selectedSchema: {},\r\n isSaving: false,\r\n saveError: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n isTesting: false,\r\n isTestingAll: false,\r\n items: [],\r\n pendingChanges: {},\r\n sortKey: 'name',\r\n sortDirection: sortDirections.ASCENDING,\r\n sortPredicates: {\r\n name: ({ name }) => {\r\n return name.toLocaleLowerCase();\r\n }\r\n }\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_DOWNLOAD_CLIENTS]: createFetchHandler(section, '/downloadclient'),\r\n [FETCH_DOWNLOAD_CLIENT_SCHEMA]: createFetchSchemaHandler(section, '/downloadclient/schema'),\r\n\r\n [SAVE_DOWNLOAD_CLIENT]: createSaveProviderHandler(section, '/downloadclient'),\r\n [CANCEL_SAVE_DOWNLOAD_CLIENT]: createCancelSaveProviderHandler(section),\r\n [DELETE_DOWNLOAD_CLIENT]: createRemoveItemHandler(section, '/downloadclient'),\r\n [TEST_DOWNLOAD_CLIENT]: createTestProviderHandler(section, '/downloadclient'),\r\n [CANCEL_TEST_DOWNLOAD_CLIENT]: createCancelTestProviderHandler(section),\r\n [TEST_ALL_DOWNLOAD_CLIENTS]: createTestAllProvidersHandler(section, '/downloadclient'),\r\n [BULK_DELETE_DOWNLOAD_CLIENTS]: createBulkRemoveItemHandler(section, '/downloadclient/bulk'),\r\n [BULK_EDIT_DOWNLOAD_CLIENTS]: createBulkEditItemHandler(section, '/downloadclient/bulk')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_DOWNLOAD_CLIENT_VALUE]: createSetSettingValueReducer(section),\r\n [SET_DOWNLOAD_CLIENT_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n\r\n [SELECT_DOWNLOAD_CLIENT_SCHEMA]: (state, { payload }) => {\r\n return selectProviderSchema(state, section, payload, (selectedSchema) => {\r\n selectedSchema.name = selectedSchema.implementationName;\r\n selectedSchema.enable = true;\r\n\r\n return selectedSchema;\r\n });\r\n },\r\n\r\n [SET_MANAGE_DOWNLOAD_CLIENTS_SORT]: createSetClientSideCollectionSortReducer(section)\r\n\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveHandler from 'Store/Actions/Creators/createSaveHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.general';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_GENERAL_SETTINGS = 'settings/general/fetchGeneralSettings';\r\nexport const SET_GENERAL_SETTINGS_VALUE = 'settings/general/setGeneralSettingsValue';\r\nexport const SAVE_GENERAL_SETTINGS = 'settings/general/saveGeneralSettings';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchGeneralSettings = createThunk(FETCH_GENERAL_SETTINGS);\r\nexport const saveGeneralSettings = createThunk(SAVE_GENERAL_SETTINGS);\r\nexport const setGeneralSettingsValue = createAction(SET_GENERAL_SETTINGS_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pendingChanges: {},\r\n isSaving: false,\r\n saveError: null,\r\n item: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_GENERAL_SETTINGS]: createFetchHandler(section, '/config/host'),\r\n [SAVE_GENERAL_SETTINGS]: createSaveHandler(section, '/config/host')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_GENERAL_SETTINGS_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createServerSideCollectionHandlers from 'Store/Actions/Creators/createServerSideCollectionHandlers';\r\nimport createClearReducer from 'Store/Actions/Creators/Reducers/createClearReducer';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport createSetTableOptionReducer from 'Store/Actions/Creators/Reducers/createSetTableOptionReducer';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.importListExclusions';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_IMPORT_LIST_EXCLUSIONS = 'settings/importListExclusions/fetchImportListExclusions';\r\nexport const GOTO_IMPORT_LIST_EXCLUSION_PAGE = 'settings/importListExclusions/gotoImportListExclusionPage';\r\nexport const SET_IMPORT_LIST_EXCLUSION_SORT = 'settings/importListExclusions/setImportListExclusionSort';\r\nexport const SAVE_IMPORT_LIST_EXCLUSION = 'settings/importListExclusions/saveImportListExclusion';\r\nexport const DELETE_IMPORT_LIST_EXCLUSION = 'settings/importListExclusions/deleteImportListExclusion';\r\nexport const BULK_DELETE_IMPORT_LIST_EXCLUSIONS = 'settings/importListExclusions/bulkDeleteImportListExclusions';\r\nexport const CLEAR_IMPORT_LIST_EXCLUSIONS = 'settings/importListExclusions/clearImportListExclusions';\r\n\r\nexport const SET_IMPORT_LIST_EXCLUSION_TABLE_OPTION = 'settings/importListExclusions/setImportListExclusionTableOption';\r\nexport const SET_IMPORT_LIST_EXCLUSION_VALUE = 'settings/importListExclusions/setImportListExclusionValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchImportListExclusions = createThunk(FETCH_IMPORT_LIST_EXCLUSIONS);\r\nexport const gotoImportListExclusionPage = createThunk(GOTO_IMPORT_LIST_EXCLUSION_PAGE);\r\nexport const setImportListExclusionSort = createThunk(SET_IMPORT_LIST_EXCLUSION_SORT);\r\nexport const saveImportListExclusion = createThunk(SAVE_IMPORT_LIST_EXCLUSION);\r\nexport const deleteImportListExclusion = createThunk(DELETE_IMPORT_LIST_EXCLUSION);\r\nexport const bulkDeleteImportListExclusions = createThunk(BULK_DELETE_IMPORT_LIST_EXCLUSIONS);\r\nexport const clearImportListExclusions = createAction(CLEAR_IMPORT_LIST_EXCLUSIONS);\r\n\r\nexport const setImportListExclusionTableOption = createAction(SET_IMPORT_LIST_EXCLUSION_TABLE_OPTION);\r\nexport const setImportListExclusionValue = createAction(SET_IMPORT_LIST_EXCLUSION_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pageSize: 20,\r\n items: [],\r\n isSaving: false,\r\n saveError: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: handleThunks({\r\n ...createServerSideCollectionHandlers(\r\n section,\r\n '/exclusions/paged',\r\n fetchImportListExclusions,\r\n {\r\n [serverSideCollectionHandlers.FETCH]: FETCH_IMPORT_LIST_EXCLUSIONS,\r\n [serverSideCollectionHandlers.EXACT_PAGE]: GOTO_IMPORT_LIST_EXCLUSION_PAGE,\r\n [serverSideCollectionHandlers.SORT]: SET_IMPORT_LIST_EXCLUSION_SORT\r\n }\r\n ),\r\n [SAVE_IMPORT_LIST_EXCLUSION]: createSaveProviderHandler(section, '/exclusions'),\r\n [DELETE_IMPORT_LIST_EXCLUSION]: createRemoveItemHandler(section, '/exclusions'),\r\n [BULK_DELETE_IMPORT_LIST_EXCLUSIONS]: createBulkRemoveItemHandler(section, '/exclusions/bulk')\r\n }),\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_IMPORT_LIST_EXCLUSION_VALUE]: createSetSettingValueReducer(section),\r\n [SET_IMPORT_LIST_EXCLUSION_TABLE_OPTION]: createSetTableOptionReducer(section),\r\n\r\n [CLEAR_IMPORT_LIST_EXCLUSIONS]: createClearReducer(section, {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n isDeleting: false,\r\n deleteError: null,\r\n pendingChanges: {},\r\n totalPages: 0,\r\n totalRecords: 0\r\n })\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveHandler from 'Store/Actions/Creators/createSaveHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.importListOptions';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_IMPORT_LIST_OPTIONS = 'settings/importListOptions/fetchImportListOptions';\r\nexport const SAVE_IMPORT_LIST_OPTIONS = 'settings/importListOptions/saveImportListOptions';\r\nexport const SET_IMPORT_LIST_OPTIONS_VALUE = 'settings/importListOptions/setImportListOptionsValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchImportListOptions = createThunk(FETCH_IMPORT_LIST_OPTIONS);\r\nexport const saveImportListOptions = createThunk(SAVE_IMPORT_LIST_OPTIONS);\r\nexport const setImportListOptionsValue = createAction(SET_IMPORT_LIST_OPTIONS_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pendingChanges: {},\r\n isSaving: false,\r\n saveError: null,\r\n item: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_IMPORT_LIST_OPTIONS]: createFetchHandler(section, '/config/importlist'),\r\n [SAVE_IMPORT_LIST_OPTIONS]: createSaveHandler(section, '/config/importlist')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_IMPORT_LIST_OPTIONS_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';\r\nimport createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createFetchSchemaHandler from 'Store/Actions/Creators/createFetchSchemaHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';\r\nimport createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';\r\nimport createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport selectProviderSchema from 'Utilities/State/selectProviderSchema';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.importLists';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_IMPORT_LISTS = 'settings/importLists/fetchImportLists';\r\nexport const FETCH_IMPORT_LIST_SCHEMA = 'settings/importLists/fetchImportListSchema';\r\nexport const SELECT_IMPORT_LIST_SCHEMA = 'settings/importLists/selectImportListSchema';\r\nexport const SET_IMPORT_LIST_VALUE = 'settings/importLists/setImportListValue';\r\nexport const SET_IMPORT_LIST_FIELD_VALUE = 'settings/importLists/setImportListFieldValue';\r\nexport const SAVE_IMPORT_LIST = 'settings/importLists/saveImportList';\r\nexport const CANCEL_SAVE_IMPORT_LIST = 'settings/importLists/cancelSaveImportList';\r\nexport const DELETE_IMPORT_LIST = 'settings/importLists/deleteImportList';\r\nexport const TEST_IMPORT_LIST = 'settings/importLists/testImportList';\r\nexport const CANCEL_TEST_IMPORT_LIST = 'settings/importLists/cancelTestImportList';\r\nexport const TEST_ALL_IMPORT_LISTS = 'settings/importLists/testAllImportLists';\r\n\r\nexport const BULK_DELETE_IMPORT_LISTS = 'settings/importLists/bulkDeleteImportLists';\r\nexport const BULK_EDIT_IMPORT_LISTS = 'settings/importLists/bulkEditImportLists';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchImportLists = createThunk(FETCH_IMPORT_LISTS);\r\nexport const fetchImportListSchema = createThunk(FETCH_IMPORT_LIST_SCHEMA);\r\nexport const selectImportListSchema = createAction(SELECT_IMPORT_LIST_SCHEMA);\r\n\r\nexport const saveImportList = createThunk(SAVE_IMPORT_LIST);\r\nexport const cancelSaveImportList = createThunk(CANCEL_SAVE_IMPORT_LIST);\r\nexport const deleteImportList = createThunk(DELETE_IMPORT_LIST);\r\nexport const testImportList = createThunk(TEST_IMPORT_LIST);\r\nexport const cancelTestImportList = createThunk(CANCEL_TEST_IMPORT_LIST);\r\nexport const testAllImportLists = createThunk(TEST_ALL_IMPORT_LISTS);\r\n\r\nexport const bulkDeleteImportLists = createThunk(BULK_DELETE_IMPORT_LISTS);\r\nexport const bulkEditImportLists = createThunk(BULK_EDIT_IMPORT_LISTS);\r\n\r\nexport const setImportListValue = createAction(SET_IMPORT_LIST_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setImportListFieldValue = createAction(SET_IMPORT_LIST_FIELD_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n schemaError: null,\r\n schema: [],\r\n selectedSchema: {},\r\n isSaving: false,\r\n saveError: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n isTesting: false,\r\n isTestingAll: false,\r\n items: [],\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_IMPORT_LISTS]: createFetchHandler(section, '/importlist'),\r\n [FETCH_IMPORT_LIST_SCHEMA]: createFetchSchemaHandler(section, '/importlist/schema'),\r\n\r\n [SAVE_IMPORT_LIST]: createSaveProviderHandler(section, '/importlist'),\r\n [CANCEL_SAVE_IMPORT_LIST]: createCancelSaveProviderHandler(section),\r\n [DELETE_IMPORT_LIST]: createRemoveItemHandler(section, '/importlist'),\r\n [TEST_IMPORT_LIST]: createTestProviderHandler(section, '/importlist'),\r\n [CANCEL_TEST_IMPORT_LIST]: createCancelTestProviderHandler(section),\r\n [TEST_ALL_IMPORT_LISTS]: createTestAllProvidersHandler(section, '/importlist'),\r\n\r\n [BULK_DELETE_IMPORT_LISTS]: createBulkRemoveItemHandler(section, '/importlist/bulk'),\r\n [BULK_EDIT_IMPORT_LISTS]: createBulkEditItemHandler(section, '/importlist/bulk')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_IMPORT_LIST_VALUE]: createSetSettingValueReducer(section),\r\n [SET_IMPORT_LIST_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n\r\n [SELECT_IMPORT_LIST_SCHEMA]: (state, { payload }) => {\r\n return selectProviderSchema(state, section, payload, (selectedSchema) => {\r\n selectedSchema.name = payload.presetName ?? payload.implementationName;\r\n selectedSchema.implementationName = payload.implementationName;\r\n selectedSchema.minRefreshInterval = selectedSchema.minRefreshInterval ?? payload.minRefreshInterval;\r\n selectedSchema.minimumAvailability = 'released';\r\n selectedSchema.rootFolderPath = '';\r\n\r\n return selectedSchema;\r\n });\r\n }\r\n }\r\n\r\n};\r\n","import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.indexerFlags';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_INDEXER_FLAGS = 'settings/indexerFlags/fetchIndexerFlags';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchIndexerFlags = createThunk(FETCH_INDEXER_FLAGS);\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_INDEXER_FLAGS]: createFetchHandler(section, '/indexerFlag')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveHandler from 'Store/Actions/Creators/createSaveHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.indexerOptions';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_INDEXER_OPTIONS = 'settings/indexerOptions/fetchIndexerOptions';\r\nexport const SAVE_INDEXER_OPTIONS = 'settings/indexerOptions/saveIndexerOptions';\r\nexport const SET_INDEXER_OPTIONS_VALUE = 'settings/indexerOptions/setIndexerOptionsValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchIndexerOptions = createThunk(FETCH_INDEXER_OPTIONS);\r\nexport const saveIndexerOptions = createThunk(SAVE_INDEXER_OPTIONS);\r\nexport const setIndexerOptionsValue = createAction(SET_INDEXER_OPTIONS_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pendingChanges: {},\r\n isSaving: false,\r\n saveError: null,\r\n item: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_INDEXER_OPTIONS]: createFetchHandler(section, '/config/indexer'),\r\n [SAVE_INDEXER_OPTIONS]: createSaveHandler(section, '/config/indexer')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_INDEXER_OPTIONS_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport { sortDirections } from 'Helpers/Props';\r\nimport createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';\r\nimport createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createFetchSchemaHandler from 'Store/Actions/Creators/createFetchSchemaHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';\r\nimport createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';\r\nimport createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';\r\nimport createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport selectProviderSchema from 'Utilities/State/selectProviderSchema';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport translate from 'Utilities/String/translate';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.indexers';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_INDEXERS = 'settings/indexers/fetchIndexers';\r\nexport const FETCH_INDEXER_SCHEMA = 'settings/indexers/fetchIndexerSchema';\r\nexport const SELECT_INDEXER_SCHEMA = 'settings/indexers/selectIndexerSchema';\r\nexport const CLONE_INDEXER = 'settings/indexers/cloneIndexer';\r\nexport const SET_INDEXER_VALUE = 'settings/indexers/setIndexerValue';\r\nexport const SET_INDEXER_FIELD_VALUE = 'settings/indexers/setIndexerFieldValue';\r\nexport const SAVE_INDEXER = 'settings/indexers/saveIndexer';\r\nexport const CANCEL_SAVE_INDEXER = 'settings/indexers/cancelSaveIndexer';\r\nexport const DELETE_INDEXER = 'settings/indexers/deleteIndexer';\r\nexport const TEST_INDEXER = 'settings/indexers/testIndexer';\r\nexport const CANCEL_TEST_INDEXER = 'settings/indexers/cancelTestIndexer';\r\nexport const TEST_ALL_INDEXERS = 'settings/indexers/testAllIndexers';\r\nexport const BULK_EDIT_INDEXERS = 'settings/indexers/bulkEditIndexers';\r\nexport const BULK_DELETE_INDEXERS = 'settings/indexers/bulkDeleteIndexers';\r\nexport const SET_MANAGE_INDEXERS_SORT = 'settings/indexers/setManageIndexersSort';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchIndexers = createThunk(FETCH_INDEXERS);\r\nexport const fetchIndexerSchema = createThunk(FETCH_INDEXER_SCHEMA);\r\nexport const selectIndexerSchema = createAction(SELECT_INDEXER_SCHEMA);\r\nexport const cloneIndexer = createAction(CLONE_INDEXER);\r\n\r\nexport const saveIndexer = createThunk(SAVE_INDEXER);\r\nexport const cancelSaveIndexer = createThunk(CANCEL_SAVE_INDEXER);\r\nexport const deleteIndexer = createThunk(DELETE_INDEXER);\r\nexport const testIndexer = createThunk(TEST_INDEXER);\r\nexport const cancelTestIndexer = createThunk(CANCEL_TEST_INDEXER);\r\nexport const testAllIndexers = createThunk(TEST_ALL_INDEXERS);\r\nexport const bulkEditIndexers = createThunk(BULK_EDIT_INDEXERS);\r\nexport const bulkDeleteIndexers = createThunk(BULK_DELETE_INDEXERS);\r\nexport const setManageIndexersSort = createAction(SET_MANAGE_INDEXERS_SORT);\r\n\r\nexport const setIndexerValue = createAction(SET_INDEXER_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setIndexerFieldValue = createAction(SET_INDEXER_FIELD_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n schemaError: null,\r\n schema: [],\r\n selectedSchema: {},\r\n isSaving: false,\r\n saveError: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n isTesting: false,\r\n isTestingAll: false,\r\n items: [],\r\n pendingChanges: {},\r\n sortKey: 'name',\r\n sortDirection: sortDirections.ASCENDING,\r\n sortPredicates: {\r\n name: ({ name }) => {\r\n return name.toLocaleLowerCase();\r\n }\r\n }\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_INDEXERS]: createFetchHandler(section, '/indexer'),\r\n [FETCH_INDEXER_SCHEMA]: createFetchSchemaHandler(section, '/indexer/schema'),\r\n\r\n [SAVE_INDEXER]: createSaveProviderHandler(section, '/indexer'),\r\n [CANCEL_SAVE_INDEXER]: createCancelSaveProviderHandler(section),\r\n [DELETE_INDEXER]: createRemoveItemHandler(section, '/indexer'),\r\n [TEST_INDEXER]: createTestProviderHandler(section, '/indexer'),\r\n [CANCEL_TEST_INDEXER]: createCancelTestProviderHandler(section),\r\n [TEST_ALL_INDEXERS]: createTestAllProvidersHandler(section, '/indexer'),\r\n\r\n [BULK_DELETE_INDEXERS]: createBulkRemoveItemHandler(section, '/indexer/bulk'),\r\n [BULK_EDIT_INDEXERS]: createBulkEditItemHandler(section, '/indexer/bulk')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_INDEXER_VALUE]: createSetSettingValueReducer(section),\r\n [SET_INDEXER_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n\r\n [SELECT_INDEXER_SCHEMA]: (state, { payload }) => {\r\n return selectProviderSchema(state, section, payload, (selectedSchema) => {\r\n selectedSchema.name = payload.presetName ?? payload.implementationName;\r\n selectedSchema.implementationName = payload.implementationName;\r\n selectedSchema.enableRss = selectedSchema.supportsRss;\r\n selectedSchema.enableAutomaticSearch = selectedSchema.supportsSearch;\r\n selectedSchema.enableInteractiveSearch = selectedSchema.supportsSearch;\r\n\r\n return selectedSchema;\r\n });\r\n },\r\n\r\n [CLONE_INDEXER]: function(state, { payload }) {\r\n const id = payload.id;\r\n const newState = getSectionState(state, section);\r\n const item = newState.items.find((i) => i.id === id);\r\n\r\n // Use selectedSchema so `createProviderSettingsSelector` works properly\r\n const selectedSchema = { ...item };\r\n delete selectedSchema.id;\r\n delete selectedSchema.name;\r\n\r\n selectedSchema.fields = selectedSchema.fields.map((field) => {\r\n const newField = { ...field };\r\n\r\n if (newField.privacy === 'apiKey' || newField.privacy === 'password') {\r\n newField.value = '';\r\n }\r\n\r\n return newField;\r\n });\r\n\r\n newState.selectedSchema = selectedSchema;\r\n\r\n // Set the name in pendingChanges\r\n newState.pendingChanges = {\r\n name: translate('DefaultNameCopiedProfile', { name: item.name })\r\n };\r\n\r\n return updateSectionState(state, section, newState);\r\n },\r\n\r\n [SET_MANAGE_INDEXERS_SORT]: createSetClientSideCollectionSortReducer(section)\r\n\r\n }\r\n\r\n};\r\n","import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.languages';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_LANGUAGES = 'settings/languages/fetchLanguages';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchLanguages = createThunk(FETCH_LANGUAGES);\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_LANGUAGES]: createFetchHandler(section, '/language')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveHandler from 'Store/Actions/Creators/createSaveHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.mediaManagement';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_MEDIA_MANAGEMENT_SETTINGS = 'settings/mediaManagement/fetchMediaManagementSettings';\r\nexport const SAVE_MEDIA_MANAGEMENT_SETTINGS = 'settings/mediaManagement/saveMediaManagementSettings';\r\nexport const SET_MEDIA_MANAGEMENT_SETTINGS_VALUE = 'settings/mediaManagement/setMediaManagementSettingsValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMediaManagementSettings = createThunk(FETCH_MEDIA_MANAGEMENT_SETTINGS);\r\nexport const saveMediaManagementSettings = createThunk(SAVE_MEDIA_MANAGEMENT_SETTINGS);\r\nexport const setMediaManagementSettingsValue = createAction(SET_MEDIA_MANAGEMENT_SETTINGS_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pendingChanges: {},\r\n isSaving: false,\r\n saveError: null,\r\n item: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_MEDIA_MANAGEMENT_SETTINGS]: createFetchHandler(section, '/config/mediamanagement'),\r\n [SAVE_MEDIA_MANAGEMENT_SETTINGS]: createSaveHandler(section, '/config/mediamanagement')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_MEDIA_MANAGEMENT_SETTINGS_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveProviderHandler from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.metadata';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_METADATA = 'settings/metadata/fetchMetadata';\r\nexport const SET_METADATA_VALUE = 'settings/metadata/setMetadataValue';\r\nexport const SET_METADATA_FIELD_VALUE = 'settings/metadata/setMetadataFieldValue';\r\nexport const SAVE_METADATA = 'settings/metadata/saveMetadata';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMetadata = createThunk(FETCH_METADATA);\r\nexport const saveMetadata = createThunk(SAVE_METADATA);\r\n\r\nexport const setMetadataValue = createAction(SET_METADATA_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setMetadataFieldValue = createAction(SET_METADATA_FIELD_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSaving: false,\r\n saveError: null,\r\n items: [],\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_METADATA]: createFetchHandler(section, '/metadata'),\r\n [SAVE_METADATA]: createSaveProviderHandler(section, '/metadata')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_METADATA_VALUE]: createSetSettingValueReducer(section),\r\n [SET_METADATA_FIELD_VALUE]: createSetProviderFieldValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveHandler from 'Store/Actions/Creators/createSaveHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.metadataOptions';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_METADATA_OPTIONS = 'settings/metadataOptions/fetchMetadataOptions';\r\nexport const SAVE_METADATA_OPTIONS = 'settings/metadataOptions/saveMetadataOptions';\r\nexport const SET_METADATA_OPTIONS_VALUE = 'settings/metadataOptions/setMetadataOptionsValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMetadataOptions = createThunk(FETCH_METADATA_OPTIONS);\r\nexport const saveMetadataOptions = createThunk(SAVE_METADATA_OPTIONS);\r\nexport const setMetadataOptionsValue = createAction(SET_METADATA_OPTIONS_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pendingChanges: {},\r\n isSaving: false,\r\n saveError: null,\r\n item: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_METADATA_OPTIONS]: createFetchHandler(section, '/config/metadata'),\r\n [SAVE_METADATA_OPTIONS]: createSaveHandler(section, '/config/metadata')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_METADATA_OPTIONS_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveHandler from 'Store/Actions/Creators/createSaveHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.naming';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_NAMING_SETTINGS = 'settings/naming/fetchNamingSettings';\r\nexport const SAVE_NAMING_SETTINGS = 'settings/naming/saveNamingSettings';\r\nexport const SET_NAMING_SETTINGS_VALUE = 'settings/naming/setNamingSettingsValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchNamingSettings = createThunk(FETCH_NAMING_SETTINGS);\r\nexport const saveNamingSettings = createThunk(SAVE_NAMING_SETTINGS);\r\nexport const setNamingSettingsValue = createAction(SET_NAMING_SETTINGS_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pendingChanges: {},\r\n isSaving: false,\r\n saveError: null,\r\n item: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_NAMING_SETTINGS]: createFetchHandler(section, '/config/naming'),\r\n [SAVE_NAMING_SETTINGS]: createSaveHandler(section, '/config/naming')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_NAMING_SETTINGS_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { batchActions } from 'redux-batched-actions';\r\nimport { set, update } from 'Store/Actions/baseActions';\r\nimport { createThunk } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.namingExamples';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_NAMING_EXAMPLES = 'settings/namingExamples/fetchNamingExamples';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchNamingExamples = createThunk(FETCH_NAMING_EXAMPLES);\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n item: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_NAMING_EXAMPLES]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const naming = getState().settings.naming;\r\n\r\n const promise = createAjaxRequest({\r\n url: '/config/naming/examples',\r\n data: Object.assign({}, naming.item, naming.pendingChanges)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n update({ section, data }),\r\n\r\n set({\r\n section,\r\n isFetching: false,\r\n isPopulated: true,\r\n error: null\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isFetching: false,\r\n isPopulated: false,\r\n error: xhr\r\n }));\r\n });\r\n }\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {}\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createFetchSchemaHandler from 'Store/Actions/Creators/createFetchSchemaHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';\r\nimport createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';\r\nimport createSetProviderFieldValuesReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValuesReducer';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport selectProviderSchema from 'Utilities/State/selectProviderSchema';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.notifications';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_NOTIFICATIONS = 'settings/notifications/fetchNotifications';\r\nexport const FETCH_NOTIFICATION_SCHEMA = 'settings/notifications/fetchNotificationSchema';\r\nexport const SELECT_NOTIFICATION_SCHEMA = 'settings/notifications/selectNotificationSchema';\r\nexport const SET_NOTIFICATION_VALUE = 'settings/notifications/setNotificationValue';\r\nexport const SET_NOTIFICATION_FIELD_VALUE = 'settings/notifications/setNotificationFieldValue';\r\nexport const SET_NOTIFICATION_FIELD_VALUES = 'settings/notifications/setNotificationFieldValues';\r\nexport const SAVE_NOTIFICATION = 'settings/notifications/saveNotification';\r\nexport const CANCEL_SAVE_NOTIFICATION = 'settings/notifications/cancelSaveNotification';\r\nexport const DELETE_NOTIFICATION = 'settings/notifications/deleteNotification';\r\nexport const TEST_NOTIFICATION = 'settings/notifications/testNotification';\r\nexport const CANCEL_TEST_NOTIFICATION = 'settings/notifications/cancelTestNotification';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchNotifications = createThunk(FETCH_NOTIFICATIONS);\r\nexport const fetchNotificationSchema = createThunk(FETCH_NOTIFICATION_SCHEMA);\r\nexport const selectNotificationSchema = createAction(SELECT_NOTIFICATION_SCHEMA);\r\n\r\nexport const saveNotification = createThunk(SAVE_NOTIFICATION);\r\nexport const cancelSaveNotification = createThunk(CANCEL_SAVE_NOTIFICATION);\r\nexport const deleteNotification = createThunk(DELETE_NOTIFICATION);\r\nexport const testNotification = createThunk(TEST_NOTIFICATION);\r\nexport const cancelTestNotification = createThunk(CANCEL_TEST_NOTIFICATION);\r\n\r\nexport const setNotificationValue = createAction(SET_NOTIFICATION_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setNotificationFieldValue = createAction(SET_NOTIFICATION_FIELD_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setNotificationFieldValues = createAction(SET_NOTIFICATION_FIELD_VALUES, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n schemaError: null,\r\n schema: [],\r\n selectedSchema: {},\r\n isSaving: false,\r\n saveError: null,\r\n isTesting: false,\r\n items: [],\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_NOTIFICATIONS]: createFetchHandler(section, '/notification'),\r\n [FETCH_NOTIFICATION_SCHEMA]: createFetchSchemaHandler(section, '/notification/schema'),\r\n\r\n [SAVE_NOTIFICATION]: createSaveProviderHandler(section, '/notification'),\r\n [CANCEL_SAVE_NOTIFICATION]: createCancelSaveProviderHandler(section),\r\n [DELETE_NOTIFICATION]: createRemoveItemHandler(section, '/notification'),\r\n [TEST_NOTIFICATION]: createTestProviderHandler(section, '/notification'),\r\n [CANCEL_TEST_NOTIFICATION]: createCancelTestProviderHandler(section)\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_NOTIFICATION_VALUE]: createSetSettingValueReducer(section),\r\n [SET_NOTIFICATION_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n [SET_NOTIFICATION_FIELD_VALUES]: createSetProviderFieldValuesReducer(section),\r\n\r\n [SELECT_NOTIFICATION_SCHEMA]: (state, { payload }) => {\r\n return selectProviderSchema(state, section, payload, (selectedSchema) => {\r\n selectedSchema.name = selectedSchema.implementationName;\r\n selectedSchema.onGrab = selectedSchema.supportsOnGrab;\r\n selectedSchema.onDownload = selectedSchema.supportsOnDownload;\r\n selectedSchema.onUpgrade = selectedSchema.supportsOnUpgrade;\r\n selectedSchema.onRename = selectedSchema.supportsOnRename;\r\n selectedSchema.onMovieAdded = selectedSchema.supportsOnMovieAdded;\r\n selectedSchema.onMovieDelete = selectedSchema.supportsOnMovieDelete;\r\n selectedSchema.onMovieFileDelete = selectedSchema.supportsOnMovieFileDelete;\r\n selectedSchema.onMovieFileDeleteForUpgrade = selectedSchema.supportsOnMovieFileDeleteForUpgrade;\r\n selectedSchema.onApplicationUpdate = selectedSchema.supportsOnApplicationUpdate;\r\n selectedSchema.onManualInteractionRequired = selectedSchema.supportsOnManualInteractionRequired;\r\n\r\n return selectedSchema;\r\n });\r\n }\r\n }\r\n\r\n};\r\n","import getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\nfunction createSetProviderFieldValuesReducer(section) {\r\n return (state, { payload }) => {\r\n if (section === payload.section) {\r\n const { properties } = payload;\r\n const newState = getSectionState(state, section);\r\n newState.pendingChanges = Object.assign({}, newState.pendingChanges);\r\n const fields = Object.assign({}, newState.pendingChanges.fields || {});\r\n\r\n Object.keys(properties).forEach((name) => {\r\n fields[name] = properties[name];\r\n });\r\n\r\n newState.pendingChanges.fields = fields;\r\n\r\n return updateSectionState(state, section, newState);\r\n }\r\n\r\n return state;\r\n };\r\n}\r\n\r\nexport default createSetProviderFieldValuesReducer;\r\n","import _ from 'lodash';\r\nimport { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { clearPendingChanges, set, update } from 'Store/Actions/baseActions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveHandler from 'Store/Actions/Creators/createSaveHandler';\r\nimport { createThunk } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.qualityDefinitions';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_QUALITY_DEFINITIONS = 'settings/qualityDefinitions/fetchQualityDefinitions';\r\nexport const SAVE_QUALITY_DEFINITIONS = 'settings/qualityDefinitions/saveQualityDefinitions';\r\nexport const SET_QUALITY_DEFINITION_VALUE = 'settings/qualityDefinitions/setQualityDefinitionValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchQualityDefinitions = createThunk(FETCH_QUALITY_DEFINITIONS);\r\nexport const saveQualityDefinitions = createThunk(SAVE_QUALITY_DEFINITIONS);\r\n\r\nexport const setQualityDefinitionValue = createAction(SET_QUALITY_DEFINITION_VALUE);\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n isSaving: false,\r\n saveError: null,\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_QUALITY_DEFINITIONS]: createFetchHandler(section, '/qualitydefinition'),\r\n [SAVE_QUALITY_DEFINITIONS]: createSaveHandler(section, '/qualitydefinition'),\r\n\r\n [SAVE_QUALITY_DEFINITIONS]: function(getState, payload, dispatch) {\r\n const qualityDefinitions = getState().settings.qualityDefinitions;\r\n\r\n const upatedDefinitions = Object.keys(qualityDefinitions.pendingChanges).map((key) => {\r\n const id = parseInt(key);\r\n const pendingChanges = qualityDefinitions.pendingChanges[id] || {};\r\n const item = _.find(qualityDefinitions.items, { id });\r\n\r\n return Object.assign({}, item, pendingChanges);\r\n });\r\n\r\n // If there is nothing to save don't bother isSaving\r\n if (!upatedDefinitions || !upatedDefinitions.length) {\r\n return;\r\n }\r\n\r\n dispatch(set({\r\n section,\r\n isSaving: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n method: 'PUT',\r\n url: '/qualitydefinition/update',\r\n data: JSON.stringify(upatedDefinitions),\r\n contentType: 'application/json',\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n set({\r\n section,\r\n isSaving: false,\r\n saveError: null\r\n }),\r\n\r\n update({ section, data }),\r\n clearPendingChanges({ section })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isSaving: false,\r\n saveError: xhr\r\n }));\r\n });\r\n }\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_QUALITY_DEFINITION_VALUE]: function(state, { payload }) {\r\n const { id, name, value } = payload;\r\n const newState = getSectionState(state, section);\r\n newState.pendingChanges = _.cloneDeep(newState.pendingChanges);\r\n\r\n const pendingState = newState.pendingChanges[id] || {};\r\n const currentValue = _.find(newState.items, { id })[name];\r\n\r\n if (currentValue === value) {\r\n delete pendingState[name];\r\n } else {\r\n pendingState[name] = value;\r\n }\r\n\r\n if (_.isEmpty(pendingState)) {\r\n delete newState.pendingChanges[id];\r\n } else {\r\n newState.pendingChanges[id] = pendingState;\r\n }\r\n\r\n return updateSectionState(state, section, newState);\r\n }\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createFetchSchemaHandler from 'Store/Actions/Creators/createFetchSchemaHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport translate from 'Utilities/String/translate';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.qualityProfiles';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_QUALITY_PROFILES = 'settings/qualityProfiles/fetchQualityProfiles';\r\nexport const FETCH_QUALITY_PROFILE_SCHEMA = 'settings/qualityProfiles/fetchQualityProfileSchema';\r\nexport const SAVE_QUALITY_PROFILE = 'settings/qualityProfiles/saveQualityProfile';\r\nexport const DELETE_QUALITY_PROFILE = 'settings/qualityProfiles/deleteQualityProfile';\r\nexport const SET_QUALITY_PROFILE_VALUE = 'settings/qualityProfiles/setQualityProfileValue';\r\nexport const CLONE_QUALITY_PROFILE = 'settings/qualityProfiles/cloneQualityProfile';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchQualityProfiles = createThunk(FETCH_QUALITY_PROFILES);\r\nexport const fetchQualityProfileSchema = createThunk(FETCH_QUALITY_PROFILE_SCHEMA);\r\nexport const saveQualityProfile = createThunk(SAVE_QUALITY_PROFILE);\r\nexport const deleteQualityProfile = createThunk(DELETE_QUALITY_PROFILE);\r\n\r\nexport const setQualityProfileValue = createAction(SET_QUALITY_PROFILE_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const cloneQualityProfile = createAction(CLONE_QUALITY_PROFILE);\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n schemaError: null,\r\n schema: {},\r\n isSaving: false,\r\n saveError: null,\r\n items: [],\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_QUALITY_PROFILES]: createFetchHandler(section, '/qualityprofile'),\r\n [FETCH_QUALITY_PROFILE_SCHEMA]: createFetchSchemaHandler(section, '/qualityprofile/schema'),\r\n [SAVE_QUALITY_PROFILE]: createSaveProviderHandler(section, '/qualityprofile'),\r\n [DELETE_QUALITY_PROFILE]: createRemoveItemHandler(section, '/qualityprofile')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_QUALITY_PROFILE_VALUE]: createSetSettingValueReducer(section),\r\n\r\n [CLONE_QUALITY_PROFILE]: function(state, { payload }) {\r\n const id = payload.id;\r\n const newState = getSectionState(state, section);\r\n const item = newState.items.find((i) => i.id === id);\r\n const pendingChanges = { ...item, id: 0 };\r\n delete pendingChanges.id;\r\n\r\n pendingChanges.name = translate('DefaultNameCopiedProfile', { name: pendingChanges.name });\r\n newState.pendingChanges = pendingChanges;\r\n\r\n return updateSectionState(state, section, newState);\r\n }\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.releaseProfiles';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_RELEASE_PROFILES = 'settings/releaseProfiles/fetchReleaseProfiles';\r\nexport const SAVE_RELEASE_PROFILE = 'settings/releaseProfiles/saveReleaseProfile';\r\nexport const DELETE_RELEASE_PROFILE = 'settings/releaseProfiles/deleteReleaseProfile';\r\nexport const SET_RELEASE_PROFILE_VALUE = 'settings/releaseProfiles/setReleaseProfileValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchReleaseProfiles = createThunk(FETCH_RELEASE_PROFILES);\r\nexport const saveReleaseProfile = createThunk(SAVE_RELEASE_PROFILE);\r\nexport const deleteReleaseProfile = createThunk(DELETE_RELEASE_PROFILE);\r\n\r\nexport const setReleaseProfileValue = createAction(SET_RELEASE_PROFILE_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isSaving: false,\r\n saveError: null,\r\n items: [],\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_RELEASE_PROFILES]: createFetchHandler(section, '/releaseprofile'),\r\n\r\n [SAVE_RELEASE_PROFILE]: createSaveProviderHandler(section, '/releaseprofile'),\r\n\r\n [DELETE_RELEASE_PROFILE]: createRemoveItemHandler(section, '/releaseprofile')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_RELEASE_PROFILE_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.remotePathMappings';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_REMOTE_PATH_MAPPINGS = 'settings/remotePathMappings/fetchRemotePathMappings';\r\nexport const SAVE_REMOTE_PATH_MAPPING = 'settings/remotePathMappings/saveRemotePathMapping';\r\nexport const DELETE_REMOTE_PATH_MAPPING = 'settings/remotePathMappings/deleteRemotePathMapping';\r\nexport const SET_REMOTE_PATH_MAPPING_VALUE = 'settings/remotePathMappings/setRemotePathMappingValue';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchRemotePathMappings = createThunk(FETCH_REMOTE_PATH_MAPPINGS);\r\nexport const saveRemotePathMapping = createThunk(SAVE_REMOTE_PATH_MAPPING);\r\nexport const deleteRemotePathMapping = createThunk(DELETE_REMOTE_PATH_MAPPING);\r\n\r\nexport const setRemotePathMappingValue = createAction(SET_REMOTE_PATH_MAPPING_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n isSaving: false,\r\n saveError: null,\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_REMOTE_PATH_MAPPINGS]: createFetchHandler(section, '/remotepathmapping'),\r\n [SAVE_REMOTE_PATH_MAPPING]: createSaveProviderHandler(section, '/remotepathmapping'),\r\n [DELETE_REMOTE_PATH_MAPPING]: createRemoveItemHandler(section, '/remotepathmapping')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_REMOTE_PATH_MAPPING_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createSaveHandler from 'Store/Actions/Creators/createSaveHandler';\r\nimport createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';\r\nimport { createThunk } from 'Store/thunks';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.ui';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_UI_SETTINGS = 'settings/ui/fetchUiSettings';\r\nexport const SET_UI_SETTINGS_VALUE = 'SET_UI_SETTINGS_VALUE';\r\nexport const SAVE_UI_SETTINGS = 'SAVE_UI_SETTINGS';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchUISettings = createThunk(FETCH_UI_SETTINGS);\r\nexport const saveUISettings = createThunk(SAVE_UI_SETTINGS);\r\nexport const setUISettingsValue = createAction(SET_UI_SETTINGS_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\n//\r\n// Details\r\n\r\nexport default {\r\n\r\n //\r\n // State\r\n\r\n defaultState: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n pendingChanges: {},\r\n isSaving: false,\r\n saveError: null,\r\n item: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_UI_SETTINGS]: createFetchHandler(section, '/config/ui'),\r\n [SAVE_UI_SETTINGS]: createSaveHandler(section, '/config/ui')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_UI_SETTINGS_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport { handleThunks } from 'Store/thunks';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport autoTaggings from './Settings/autoTaggings';\r\nimport autoTaggingSpecifications from './Settings/autoTaggingSpecifications';\r\nimport customFormats from './Settings/customFormats';\r\nimport customFormatSpecifications from './Settings/customFormatSpecifications';\r\nimport delayProfiles from './Settings/delayProfiles';\r\nimport downloadClientOptions from './Settings/downloadClientOptions';\r\nimport downloadClients from './Settings/downloadClients';\r\nimport general from './Settings/general';\r\nimport importListExclusions from './Settings/importListExclusions';\r\nimport importListOptions from './Settings/importListOptions';\r\nimport importLists from './Settings/importLists';\r\nimport indexerFlags from './Settings/indexerFlags';\r\nimport indexerOptions from './Settings/indexerOptions';\r\nimport indexers from './Settings/indexers';\r\nimport languages from './Settings/languages';\r\nimport mediaManagement from './Settings/mediaManagement';\r\nimport metadata from './Settings/metadata';\r\nimport metadataOptions from './Settings/metadataOptions';\r\nimport naming from './Settings/naming';\r\nimport namingExamples from './Settings/namingExamples';\r\nimport notifications from './Settings/notifications';\r\nimport qualityDefinitions from './Settings/qualityDefinitions';\r\nimport qualityProfiles from './Settings/qualityProfiles';\r\nimport releaseProfiles from './Settings/releaseProfiles';\r\nimport remotePathMappings from './Settings/remotePathMappings';\r\nimport ui from './Settings/ui';\r\n\r\nexport * from './Settings/autoTaggingSpecifications';\r\nexport * from './Settings/autoTaggings';\r\nexport * from './Settings/customFormatSpecifications.js';\r\nexport * from './Settings/customFormats';\r\nexport * from './Settings/delayProfiles';\r\nexport * from './Settings/downloadClients';\r\nexport * from './Settings/downloadClientOptions';\r\nexport * from './Settings/general';\r\nexport * from './Settings/importListOptions';\r\nexport * from './Settings/importLists';\r\nexport * from './Settings/importListExclusions';\r\nexport * from './Settings/indexerFlags';\r\nexport * from './Settings/indexerOptions';\r\nexport * from './Settings/indexers';\r\nexport * from './Settings/languages';\r\nexport * from './Settings/mediaManagement';\r\nexport * from './Settings/metadata';\r\nexport * from './Settings/metadataOptions';\r\nexport * from './Settings/naming';\r\nexport * from './Settings/namingExamples';\r\nexport * from './Settings/notifications';\r\nexport * from './Settings/qualityDefinitions';\r\nexport * from './Settings/qualityProfiles';\r\nexport * from './Settings/releaseProfiles';\r\nexport * from './Settings/remotePathMappings';\r\nexport * from './Settings/ui';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'settings';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n advancedSettings: false,\r\n autoTaggingSpecifications: autoTaggingSpecifications.defaultState,\r\n autoTaggings: autoTaggings.defaultState,\r\n customFormatSpecifications: customFormatSpecifications.defaultState,\r\n customFormats: customFormats.defaultState,\r\n delayProfiles: delayProfiles.defaultState,\r\n downloadClients: downloadClients.defaultState,\r\n downloadClientOptions: downloadClientOptions.defaultState,\r\n general: general.defaultState,\r\n importLists: importLists.defaultState,\r\n importListExclusions: importListExclusions.defaultState,\r\n importListOptions: importListOptions.defaultState,\r\n indexerFlags: indexerFlags.defaultState,\r\n indexerOptions: indexerOptions.defaultState,\r\n indexers: indexers.defaultState,\r\n languages: languages.defaultState,\r\n mediaManagement: mediaManagement.defaultState,\r\n metadata: metadata.defaultState,\r\n metadataOptions: metadataOptions.defaultState,\r\n naming: naming.defaultState,\r\n namingExamples: namingExamples.defaultState,\r\n notifications: notifications.defaultState,\r\n qualityDefinitions: qualityDefinitions.defaultState,\r\n qualityProfiles: qualityProfiles.defaultState,\r\n releaseProfiles: releaseProfiles.defaultState,\r\n remotePathMappings: remotePathMappings.defaultState,\r\n ui: ui.defaultState\r\n};\r\n\r\nexport const persistState = [\r\n 'settings.advancedSettings',\r\n 'settings.importListExclusions.pageSize'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const TOGGLE_ADVANCED_SETTINGS = 'settings/toggleAdvancedSettings';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const toggleAdvancedSettings = createAction(TOGGLE_ADVANCED_SETTINGS);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n ...autoTaggingSpecifications.actionHandlers,\r\n ...autoTaggings.actionHandlers,\r\n ...customFormatSpecifications.actionHandlers,\r\n ...customFormats.actionHandlers,\r\n ...delayProfiles.actionHandlers,\r\n ...downloadClients.actionHandlers,\r\n ...downloadClientOptions.actionHandlers,\r\n ...general.actionHandlers,\r\n ...importLists.actionHandlers,\r\n ...importListExclusions.actionHandlers,\r\n ...importListOptions.actionHandlers,\r\n ...indexerFlags.actionHandlers,\r\n ...indexerOptions.actionHandlers,\r\n ...indexers.actionHandlers,\r\n ...languages.actionHandlers,\r\n ...mediaManagement.actionHandlers,\r\n ...metadata.actionHandlers,\r\n ...metadataOptions.actionHandlers,\r\n ...naming.actionHandlers,\r\n ...namingExamples.actionHandlers,\r\n ...notifications.actionHandlers,\r\n ...qualityDefinitions.actionHandlers,\r\n ...qualityProfiles.actionHandlers,\r\n ...releaseProfiles.actionHandlers,\r\n ...remotePathMappings.actionHandlers,\r\n ...ui.actionHandlers\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [TOGGLE_ADVANCED_SETTINGS]: (state, { payload }) => {\r\n return Object.assign({}, state, { advancedSettings: !state.advancedSettings });\r\n },\r\n\r\n ...autoTaggingSpecifications.reducers,\r\n ...autoTaggings.reducers,\r\n ...customFormatSpecifications.reducers,\r\n ...customFormats.reducers,\r\n ...delayProfiles.reducers,\r\n ...downloadClients.reducers,\r\n ...downloadClientOptions.reducers,\r\n ...general.reducers,\r\n ...importLists.reducers,\r\n ...importListExclusions.reducers,\r\n ...importListOptions.reducers,\r\n ...indexerFlags.reducers,\r\n ...indexerOptions.reducers,\r\n ...indexers.reducers,\r\n ...languages.reducers,\r\n ...mediaManagement.reducers,\r\n ...metadata.reducers,\r\n ...metadataOptions.reducers,\r\n ...naming.reducers,\r\n ...namingExamples.reducers,\r\n ...notifications.reducers,\r\n ...qualityDefinitions.reducers,\r\n ...qualityProfiles.reducers,\r\n ...releaseProfiles.reducers,\r\n ...remotePathMappings.reducers,\r\n ...ui.reducers\r\n\r\n}, defaultState, section);\r\n","import { createAction } from 'redux-actions';\r\nimport { filterTypes, sortDirections } from 'Helpers/Props';\r\nimport { setAppValue } from 'Store/Actions/appActions';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';\r\nimport translate from 'Utilities/String/translate';\r\nimport { pingServer } from './appActions';\r\nimport { set } from './baseActions';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createRemoveItemHandler from './Creators/createRemoveItemHandler';\r\nimport createServerSideCollectionHandlers from './Creators/createServerSideCollectionHandlers';\r\nimport createClearReducer from './Creators/Reducers/createClearReducer';\r\nimport createSetTableOptionReducer from './Creators/Reducers/createSetTableOptionReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'system';\r\nconst backupsSection = 'system.backups';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n status: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n item: {}\r\n },\r\n\r\n health: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n },\r\n\r\n diskSpace: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n },\r\n\r\n tasks: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n },\r\n\r\n backups: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n isRestoring: false,\r\n restoreError: null,\r\n isDeleting: false,\r\n deleteError: null,\r\n items: []\r\n },\r\n\r\n updates: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n },\r\n\r\n logs: {\r\n isFetching: false,\r\n isPopulated: false,\r\n pageSize: 50,\r\n sortKey: 'time',\r\n sortDirection: sortDirections.DESCENDING,\r\n error: null,\r\n items: [],\r\n\r\n columns: [\r\n {\r\n name: 'level',\r\n columnLabel: () => translate('Level'),\r\n isSortable: false,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'time',\r\n label: () => translate('Time'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'logger',\r\n label: () => translate('Component'),\r\n isSortable: false,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'message',\r\n label: () => translate('Message'),\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'actions',\r\n columnLabel: () => translate('Actions'),\r\n isVisible: true,\r\n isModifiable: false\r\n }\r\n ],\r\n\r\n selectedFilterKey: 'all',\r\n\r\n filters: [\r\n {\r\n key: 'all',\r\n label: () => translate('All'),\r\n filters: []\r\n },\r\n {\r\n key: 'info',\r\n label: () => translate('Info'),\r\n filters: [\r\n {\r\n key: 'level',\r\n value: 'info',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'warn',\r\n label: () => translate('Warn'),\r\n filters: [\r\n {\r\n key: 'level',\r\n value: 'warn',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'error',\r\n label: () => translate('Error'),\r\n filters: [\r\n {\r\n key: 'level',\r\n value: 'error',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n\r\n logFiles: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n },\r\n\r\n updateLogFiles: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n }\r\n};\r\n\r\nexport const persistState = [\r\n 'system.logs.pageSize',\r\n 'system.logs.sortKey',\r\n 'system.logs.sortDirection',\r\n 'system.logs.selectedFilterKey'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_STATUS = 'system/status/fetchStatus';\r\nexport const FETCH_HEALTH = 'system/health/fetchHealth';\r\nexport const FETCH_DISK_SPACE = 'system/diskSpace/fetchDiskSPace';\r\n\r\nexport const FETCH_TASK = 'system/tasks/fetchTask';\r\nexport const FETCH_TASKS = 'system/tasks/fetchTasks';\r\n\r\nexport const FETCH_BACKUPS = 'system/backups/fetchBackups';\r\nexport const RESTORE_BACKUP = 'system/backups/restoreBackup';\r\nexport const CLEAR_RESTORE_BACKUP = 'system/backups/clearRestoreBackup';\r\nexport const DELETE_BACKUP = 'system/backups/deleteBackup';\r\n\r\nexport const FETCH_UPDATES = 'system/updates/fetchUpdates';\r\n\r\nexport const FETCH_LOGS = 'system/logs/fetchLogs';\r\nexport const GOTO_FIRST_LOGS_PAGE = 'system/logs/gotoLogsFirstPage';\r\nexport const GOTO_PREVIOUS_LOGS_PAGE = 'system/logs/gotoLogsPreviousPage';\r\nexport const GOTO_NEXT_LOGS_PAGE = 'system/logs/gotoLogsNextPage';\r\nexport const GOTO_LAST_LOGS_PAGE = 'system/logs/gotoLogsLastPage';\r\nexport const GOTO_LOGS_PAGE = 'system/logs/gotoLogsPage';\r\nexport const SET_LOGS_SORT = 'system/logs/setLogsSort';\r\nexport const SET_LOGS_FILTER = 'system/logs/setLogsFilter';\r\nexport const SET_LOGS_TABLE_OPTION = 'system/logs/setLogsTableOption';\r\nexport const CLEAR_LOGS_TABLE = 'system/logs/clearLogsTable';\r\n\r\nexport const FETCH_LOG_FILES = 'system/logFiles/fetchLogFiles';\r\nexport const FETCH_UPDATE_LOG_FILES = 'system/updateLogFiles/fetchUpdateLogFiles';\r\n\r\nexport const RESTART = 'system/restart';\r\nexport const SHUTDOWN = 'system/shutdown';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchStatus = createThunk(FETCH_STATUS);\r\nexport const fetchHealth = createThunk(FETCH_HEALTH);\r\nexport const fetchDiskSpace = createThunk(FETCH_DISK_SPACE);\r\n\r\nexport const fetchTask = createThunk(FETCH_TASK);\r\nexport const fetchTasks = createThunk(FETCH_TASKS);\r\n\r\nexport const fetchBackups = createThunk(FETCH_BACKUPS);\r\nexport const restoreBackup = createThunk(RESTORE_BACKUP);\r\nexport const clearRestoreBackup = createAction(CLEAR_RESTORE_BACKUP);\r\nexport const deleteBackup = createThunk(DELETE_BACKUP);\r\n\r\nexport const fetchUpdates = createThunk(FETCH_UPDATES);\r\n\r\nexport const fetchLogs = createThunk(FETCH_LOGS);\r\nexport const gotoLogsFirstPage = createThunk(GOTO_FIRST_LOGS_PAGE);\r\nexport const gotoLogsPreviousPage = createThunk(GOTO_PREVIOUS_LOGS_PAGE);\r\nexport const gotoLogsNextPage = createThunk(GOTO_NEXT_LOGS_PAGE);\r\nexport const gotoLogsLastPage = createThunk(GOTO_LAST_LOGS_PAGE);\r\nexport const gotoLogsPage = createThunk(GOTO_LOGS_PAGE);\r\nexport const setLogsSort = createThunk(SET_LOGS_SORT);\r\nexport const setLogsFilter = createThunk(SET_LOGS_FILTER);\r\nexport const setLogsTableOption = createAction(SET_LOGS_TABLE_OPTION);\r\nexport const clearLogsTable = createAction(CLEAR_LOGS_TABLE);\r\n\r\nexport const fetchLogFiles = createThunk(FETCH_LOG_FILES);\r\nexport const fetchUpdateLogFiles = createThunk(FETCH_UPDATE_LOG_FILES);\r\n\r\nexport const restart = createThunk(RESTART);\r\nexport const shutdown = createThunk(SHUTDOWN);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_STATUS]: createFetchHandler('system.status', '/system/status'),\r\n [FETCH_HEALTH]: createFetchHandler('system.health', '/health'),\r\n [FETCH_DISK_SPACE]: createFetchHandler('system.diskSpace', '/diskspace'),\r\n [FETCH_TASK]: createFetchHandler('system.tasks', '/system/task'),\r\n [FETCH_TASKS]: createFetchHandler('system.tasks', '/system/task'),\r\n\r\n [FETCH_BACKUPS]: createFetchHandler(backupsSection, '/system/backup'),\r\n\r\n [RESTORE_BACKUP]: function(getState, payload, dispatch) {\r\n const {\r\n id,\r\n file\r\n } = payload;\r\n\r\n dispatch(set({\r\n section: backupsSection,\r\n isRestoring: true\r\n }));\r\n\r\n let ajaxOptions = null;\r\n\r\n if (id) {\r\n ajaxOptions = {\r\n url: `/system/backup/restore/${id}`,\r\n method: 'POST',\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n data: JSON.stringify({\r\n id\r\n })\r\n };\r\n } else if (file) {\r\n const formData = new FormData();\r\n formData.append('restore', file);\r\n\r\n ajaxOptions = {\r\n url: '/system/backup/restore/upload',\r\n method: 'POST',\r\n processData: false,\r\n contentType: false,\r\n data: formData\r\n };\r\n } else {\r\n dispatch(set({\r\n section: backupsSection,\r\n isRestoring: false,\r\n restoreError: 'Error restoring backup'\r\n }));\r\n }\r\n\r\n const promise = createAjaxRequest(ajaxOptions).request;\r\n\r\n promise.done((data) => {\r\n dispatch(set({\r\n section: backupsSection,\r\n isRestoring: false,\r\n restoreError: null\r\n }));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section: backupsSection,\r\n isRestoring: false,\r\n restoreError: xhr\r\n }));\r\n });\r\n },\r\n\r\n [DELETE_BACKUP]: createRemoveItemHandler(backupsSection, '/system/backup'),\r\n\r\n [FETCH_UPDATES]: createFetchHandler('system.updates', '/update'),\r\n [FETCH_LOG_FILES]: createFetchHandler('system.logFiles', '/log/file'),\r\n [FETCH_UPDATE_LOG_FILES]: createFetchHandler('system.updateLogFiles', '/log/file/update'),\r\n\r\n ...createServerSideCollectionHandlers(\r\n 'system.logs',\r\n '/log',\r\n fetchLogs,\r\n {\r\n [serverSideCollectionHandlers.FETCH]: FETCH_LOGS,\r\n [serverSideCollectionHandlers.FIRST_PAGE]: GOTO_FIRST_LOGS_PAGE,\r\n [serverSideCollectionHandlers.PREVIOUS_PAGE]: GOTO_PREVIOUS_LOGS_PAGE,\r\n [serverSideCollectionHandlers.NEXT_PAGE]: GOTO_NEXT_LOGS_PAGE,\r\n [serverSideCollectionHandlers.LAST_PAGE]: GOTO_LAST_LOGS_PAGE,\r\n [serverSideCollectionHandlers.EXACT_PAGE]: GOTO_LOGS_PAGE,\r\n [serverSideCollectionHandlers.SORT]: SET_LOGS_SORT,\r\n [serverSideCollectionHandlers.FILTER]: SET_LOGS_FILTER\r\n }\r\n ),\r\n\r\n [RESTART]: function(getState, payload, dispatch) {\r\n const promise = createAjaxRequest({\r\n url: '/system/restart',\r\n method: 'POST'\r\n }).request;\r\n\r\n promise.done(() => {\r\n dispatch(setAppValue({ isRestarting: true }));\r\n dispatch(pingServer());\r\n });\r\n },\r\n\r\n [SHUTDOWN]: function() {\r\n createAjaxRequest({\r\n url: '/system/shutdown',\r\n method: 'POST'\r\n });\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [CLEAR_RESTORE_BACKUP]: function(state, { payload }) {\r\n return {\r\n ...state,\r\n backups: {\r\n ...state.backups,\r\n isRestoring: false,\r\n restoreError: null\r\n }\r\n };\r\n },\r\n\r\n [SET_LOGS_TABLE_OPTION]: createSetTableOptionReducer('logs'),\r\n\r\n [CLEAR_LOGS_TABLE]: createClearReducer(section, {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n totalPages: 0,\r\n totalRecords: 0\r\n })\r\n\r\n}, defaultState, section);\r\n","import { createThunk, handleThunks } from 'Store/thunks';\r\nimport createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport { update } from './baseActions';\r\nimport createFetchHandler from './Creators/createFetchHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createRemoveItemHandler from './Creators/createRemoveItemHandler';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'tags';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n\r\n details: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n }\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_TAGS = 'tags/fetchTags';\r\nexport const ADD_TAG = 'tags/addTag';\r\nexport const DELETE_TAG = 'tags/deleteTag';\r\nexport const FETCH_TAG_DETAILS = 'tags/fetchTagDetails';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchTags = createThunk(FETCH_TAGS);\r\nexport const addTag = createThunk(ADD_TAG);\r\nexport const deleteTag = createThunk(DELETE_TAG);\r\nexport const fetchTagDetails = createThunk(FETCH_TAG_DETAILS);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_TAGS]: createFetchHandler(section, '/tag'),\r\n\r\n [ADD_TAG]: function(getState, payload, dispatch) {\r\n const promise = createAjaxRequest({\r\n url: '/tag',\r\n method: 'POST',\r\n data: JSON.stringify(payload.tag),\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done((data) => {\r\n const tags = getState().tags.items.slice();\r\n tags.push(data);\r\n\r\n dispatch(update({ section, data: tags }));\r\n payload.onTagCreated(data);\r\n });\r\n },\r\n\r\n [DELETE_TAG]: createRemoveItemHandler(section, '/tag'),\r\n [FETCH_TAG_DETAILS]: createFetchHandler('tags.details', '/tag/detail')\r\n\r\n});\r\n\r\n//\r\n// Reducers\r\nexport const reducers = createHandleActions({}, defaultState, section);\r\n","import _ from 'lodash';\r\nimport { update } from 'Store/Actions/baseActions';\r\n\r\nfunction updateMovies(section, movies, movieIds, options) {\r\n const data = _.reduce(movies, (result, item) => {\r\n if (movieIds.indexOf(item.id) > -1) {\r\n result.push({\r\n ...item,\r\n ...options\r\n });\r\n } else {\r\n result.push(item);\r\n }\r\n\r\n return result;\r\n }, []);\r\n\r\n return update({ section, data });\r\n}\r\n\r\nexport default updateMovies;\r\n","import createAjaxRequest from 'Utilities/createAjaxRequest';\r\nimport updateMovies from 'Utilities/Movie/updateMovies';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\n\r\nfunction createBatchToggleMovieMonitoredHandler(section, fetchHandler) {\r\n return function(getState, payload, dispatch) {\r\n const {\r\n movieIds,\r\n monitored\r\n } = payload;\r\n\r\n const state = getSectionState(getState(), section, true);\r\n\r\n dispatch(updateMovies(section, state.items, movieIds, {\r\n isSaving: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/movie/editor',\r\n method: 'PUT',\r\n data: JSON.stringify({ movieIds, monitored }),\r\n dataType: 'json'\r\n }).request;\r\n\r\n promise.done(() => {\r\n dispatch(updateMovies(section, state.items, movieIds, {\r\n isSaving: false,\r\n monitored\r\n }));\r\n\r\n dispatch(fetchHandler());\r\n });\r\n\r\n promise.fail(() => {\r\n dispatch(updateMovies(section, state.items, movieIds, {\r\n isSaving: false\r\n }));\r\n });\r\n };\r\n}\r\n\r\nexport default createBatchToggleMovieMonitoredHandler;\r\n","import { createAction } from 'redux-actions';\r\nimport { filterTypes, sortDirections } from 'Helpers/Props';\r\nimport createBatchToggleMovieMonitoredHandler from 'Store/Actions/Creators/createBatchToggleMovieMonitoredHandler';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';\r\nimport translate from 'Utilities/String/translate';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createServerSideCollectionHandlers from './Creators/createServerSideCollectionHandlers';\r\nimport createClearReducer from './Creators/Reducers/createClearReducer';\r\nimport createSetTableOptionReducer from './Creators/Reducers/createSetTableOptionReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'wanted';\r\n\r\n//\r\n// State\r\n\r\nexport const defaultState = {\r\n missing: {\r\n isFetching: false,\r\n isPopulated: false,\r\n pageSize: 20,\r\n sortKey: 'movieMetadata.sortTitle',\r\n sortDirection: sortDirections.ASCENDING,\r\n error: null,\r\n items: [],\r\n\r\n columns: [\r\n {\r\n name: 'movieMetadata.sortTitle',\r\n label: () => translate('MovieTitle'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'movieMetadata.year',\r\n label: () => translate('Year'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'movieMetadata.inCinemas',\r\n label: () => translate('InCinemas'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'movieMetadata.digitalRelease',\r\n label: () => translate('DigitalRelease'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'movieMetadata.physicalRelease',\r\n label: () => translate('PhysicalRelease'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'movies.lastSearchTime',\r\n label: () => translate('LastSearched'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'status',\r\n label: () => translate('Status'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'actions',\r\n columnLabel: () => translate('Actions'),\r\n isVisible: true,\r\n isModifiable: false\r\n }\r\n ],\r\n\r\n selectedFilterKey: 'monitored',\r\n\r\n filters: [\r\n {\r\n key: 'monitored',\r\n label: () => translate('Monitored'),\r\n filters: [\r\n {\r\n key: 'monitored',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'unmonitored',\r\n label: () => translate('Unmonitored'),\r\n filters: [\r\n {\r\n key: 'monitored',\r\n value: false,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n\r\n cutoffUnmet: {\r\n isFetching: false,\r\n isPopulated: false,\r\n pageSize: 20,\r\n sortKey: 'movieMetadata.sortTitle',\r\n sortDirection: sortDirections.ASCENDING,\r\n items: [],\r\n\r\n columns: [\r\n {\r\n name: 'movieMetadata.sortTitle',\r\n label: () => translate('MovieTitle'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'movieMetadata.year',\r\n label: () => translate('Year'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'movieMetadata.inCinemas',\r\n label: () => translate('InCinemas'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'movieMetadata.digitalRelease',\r\n label: () => translate('DigitalRelease'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'movieMetadata.physicalRelease',\r\n label: () => translate('PhysicalRelease'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n isVisible: false\r\n },\r\n {\r\n name: 'movies.lastSearchTime',\r\n label: () => translate('LastSearched'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'status',\r\n label: () => translate('Status'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'actions',\r\n columnLabel: () => translate('Actions'),\r\n isVisible: true,\r\n isModifiable: false\r\n }\r\n ],\r\n\r\n selectedFilterKey: 'monitored',\r\n\r\n filters: [\r\n {\r\n key: 'monitored',\r\n label: () => translate('Monitored'),\r\n filters: [\r\n {\r\n key: 'monitored',\r\n value: true,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'unmonitored',\r\n label: () => translate('Unmonitored'),\r\n filters: [\r\n {\r\n key: 'monitored',\r\n value: false,\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n};\r\n\r\nexport const persistState = [\r\n 'wanted.missing.pageSize',\r\n 'wanted.missing.sortKey',\r\n 'wanted.missing.sortDirection',\r\n 'wanted.missing.selectedFilterKey',\r\n 'wanted.missing.columns',\r\n 'wanted.cutoffUnmet.pageSize',\r\n 'wanted.cutoffUnmet.sortKey',\r\n 'wanted.cutoffUnmet.sortDirection',\r\n 'wanted.cutoffUnmet.selectedFilterKey',\r\n 'wanted.cutoffUnmet.columns'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_MISSING = 'wanted/missing/fetchMissing';\r\nexport const GOTO_FIRST_MISSING_PAGE = 'wanted/missing/gotoMissingFirstPage';\r\nexport const GOTO_PREVIOUS_MISSING_PAGE = 'wanted/missing/gotoMissingPreviousPage';\r\nexport const GOTO_NEXT_MISSING_PAGE = 'wanted/missing/gotoMissingNextPage';\r\nexport const GOTO_LAST_MISSING_PAGE = 'wanted/missing/gotoMissingLastPage';\r\nexport const GOTO_MISSING_PAGE = 'wanted/missing/gotoMissingPage';\r\nexport const SET_MISSING_SORT = 'wanted/missing/setMissingSort';\r\nexport const SET_MISSING_FILTER = 'wanted/missing/setMissingFilter';\r\nexport const SET_MISSING_TABLE_OPTION = 'wanted/missing/setMissingTableOption';\r\nexport const CLEAR_MISSING = 'wanted/missing/clearMissing';\r\n\r\nexport const BATCH_TOGGLE_MISSING_MOVIES = 'wanted/missing/batchToggleMissingMovies';\r\n\r\nexport const FETCH_CUTOFF_UNMET = 'wanted/cutoffUnmet/fetchCutoffUnmet';\r\nexport const GOTO_FIRST_CUTOFF_UNMET_PAGE = 'wanted/cutoffUnmet/gotoCutoffUnmetFirstPage';\r\nexport const GOTO_PREVIOUS_CUTOFF_UNMET_PAGE = 'wanted/cutoffUnmet/gotoCutoffUnmetPreviousPage';\r\nexport const GOTO_NEXT_CUTOFF_UNMET_PAGE = 'wanted/cutoffUnmet/gotoCutoffUnmetNextPage';\r\nexport const GOTO_LAST_CUTOFF_UNMET_PAGE = 'wanted/cutoffUnmet/gotoCutoffUnmetFastPage';\r\nexport const GOTO_CUTOFF_UNMET_PAGE = 'wanted/cutoffUnmet/gotoCutoffUnmetPage';\r\nexport const SET_CUTOFF_UNMET_SORT = 'wanted/cutoffUnmet/setCutoffUnmetSort';\r\nexport const SET_CUTOFF_UNMET_FILTER = 'wanted/cutoffUnmet/setCutoffUnmetFilter';\r\nexport const SET_CUTOFF_UNMET_TABLE_OPTION = 'wanted/cutoffUnmet/setCutoffUnmetTableOption';\r\nexport const CLEAR_CUTOFF_UNMET = 'wanted/cutoffUnmet/clearCutoffUnmet';\r\n\r\nexport const BATCH_TOGGLE_CUTOFF_UNMET_MOVIES = 'wanted/cutoffUnmet/batchToggleCutoffUnmetMovies';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchMissing = createThunk(FETCH_MISSING);\r\nexport const gotoMissingFirstPage = createThunk(GOTO_FIRST_MISSING_PAGE);\r\nexport const gotoMissingPreviousPage = createThunk(GOTO_PREVIOUS_MISSING_PAGE);\r\nexport const gotoMissingNextPage = createThunk(GOTO_NEXT_MISSING_PAGE);\r\nexport const gotoMissingLastPage = createThunk(GOTO_LAST_MISSING_PAGE);\r\nexport const gotoMissingPage = createThunk(GOTO_MISSING_PAGE);\r\nexport const setMissingSort = createThunk(SET_MISSING_SORT);\r\nexport const setMissingFilter = createThunk(SET_MISSING_FILTER);\r\nexport const setMissingTableOption = createAction(SET_MISSING_TABLE_OPTION);\r\nexport const clearMissing = createAction(CLEAR_MISSING);\r\n\r\nexport const batchToggleMissingMovies = createThunk(BATCH_TOGGLE_MISSING_MOVIES);\r\n\r\nexport const fetchCutoffUnmet = createThunk(FETCH_CUTOFF_UNMET);\r\nexport const gotoCutoffUnmetFirstPage = createThunk(GOTO_FIRST_CUTOFF_UNMET_PAGE);\r\nexport const gotoCutoffUnmetPreviousPage = createThunk(GOTO_PREVIOUS_CUTOFF_UNMET_PAGE);\r\nexport const gotoCutoffUnmetNextPage = createThunk(GOTO_NEXT_CUTOFF_UNMET_PAGE);\r\nexport const gotoCutoffUnmetLastPage = createThunk(GOTO_LAST_CUTOFF_UNMET_PAGE);\r\nexport const gotoCutoffUnmetPage = createThunk(GOTO_CUTOFF_UNMET_PAGE);\r\nexport const setCutoffUnmetSort = createThunk(SET_CUTOFF_UNMET_SORT);\r\nexport const setCutoffUnmetFilter = createThunk(SET_CUTOFF_UNMET_FILTER);\r\nexport const setCutoffUnmetTableOption = createAction(SET_CUTOFF_UNMET_TABLE_OPTION);\r\nexport const clearCutoffUnmet = createAction(CLEAR_CUTOFF_UNMET);\r\n\r\nexport const batchToggleCutoffUnmetMovies = createThunk(BATCH_TOGGLE_CUTOFF_UNMET_MOVIES);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n ...createServerSideCollectionHandlers(\r\n 'wanted.missing',\r\n '/wanted/missing',\r\n fetchMissing,\r\n {\r\n [serverSideCollectionHandlers.FETCH]: FETCH_MISSING,\r\n [serverSideCollectionHandlers.FIRST_PAGE]: GOTO_FIRST_MISSING_PAGE,\r\n [serverSideCollectionHandlers.PREVIOUS_PAGE]: GOTO_PREVIOUS_MISSING_PAGE,\r\n [serverSideCollectionHandlers.NEXT_PAGE]: GOTO_NEXT_MISSING_PAGE,\r\n [serverSideCollectionHandlers.LAST_PAGE]: GOTO_LAST_MISSING_PAGE,\r\n [serverSideCollectionHandlers.EXACT_PAGE]: GOTO_MISSING_PAGE,\r\n [serverSideCollectionHandlers.SORT]: SET_MISSING_SORT,\r\n [serverSideCollectionHandlers.FILTER]: SET_MISSING_FILTER\r\n }\r\n ),\r\n\r\n [BATCH_TOGGLE_MISSING_MOVIES]: createBatchToggleMovieMonitoredHandler('wanted.missing', fetchMissing),\r\n\r\n ...createServerSideCollectionHandlers(\r\n 'wanted.cutoffUnmet',\r\n '/wanted/cutoff',\r\n fetchCutoffUnmet,\r\n {\r\n [serverSideCollectionHandlers.FETCH]: FETCH_CUTOFF_UNMET,\r\n [serverSideCollectionHandlers.FIRST_PAGE]: GOTO_FIRST_CUTOFF_UNMET_PAGE,\r\n [serverSideCollectionHandlers.PREVIOUS_PAGE]: GOTO_PREVIOUS_CUTOFF_UNMET_PAGE,\r\n [serverSideCollectionHandlers.NEXT_PAGE]: GOTO_NEXT_CUTOFF_UNMET_PAGE,\r\n [serverSideCollectionHandlers.LAST_PAGE]: GOTO_LAST_CUTOFF_UNMET_PAGE,\r\n [serverSideCollectionHandlers.EXACT_PAGE]: GOTO_CUTOFF_UNMET_PAGE,\r\n [serverSideCollectionHandlers.SORT]: SET_CUTOFF_UNMET_SORT,\r\n [serverSideCollectionHandlers.FILTER]: SET_CUTOFF_UNMET_FILTER\r\n }\r\n ),\r\n\r\n [BATCH_TOGGLE_CUTOFF_UNMET_MOVIES]: createBatchToggleMovieMonitoredHandler('wanted.cutoffUnmet', fetchCutoffUnmet)\r\n\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_MISSING_TABLE_OPTION]: createSetTableOptionReducer('wanted.missing'),\r\n [SET_CUTOFF_UNMET_TABLE_OPTION]: createSetTableOptionReducer('wanted.cutoffUnmet'),\r\n\r\n [CLEAR_MISSING]: createClearReducer(\r\n 'wanted.missing',\r\n {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n totalPages: 0,\r\n totalRecords: 0\r\n }\r\n ),\r\n\r\n [CLEAR_CUTOFF_UNMET]: createClearReducer(\r\n 'wanted.cutoffUnmet',\r\n {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n items: [],\r\n totalPages: 0,\r\n totalRecords: 0\r\n }\r\n )\r\n\r\n}, defaultState, section);\r\n","import * as addMovie from './addMovieActions';\r\nimport * as app from './appActions';\r\nimport * as blocklist from './blocklistActions';\r\nimport * as calendar from './calendarActions';\r\nimport * as captcha from './captchaActions';\r\nimport * as commands from './commandActions';\r\nimport * as customFilters from './customFilterActions';\r\nimport * as discoverMovie from './discoverMovieActions';\r\nimport * as extraFiles from './extraFileActions';\r\nimport * as history from './historyActions';\r\nimport * as importMovie from './importMovieActions';\r\nimport * as interactiveImportActions from './interactiveImportActions';\r\nimport * as movies from './movieActions';\r\nimport * as movieBlocklist from './movieBlocklistActions';\r\nimport * as movieCollections from './movieCollectionActions';\r\nimport * as movieCredits from './movieCreditsActions';\r\nimport * as movieFiles from './movieFileActions';\r\nimport * as movieHistory from './movieHistoryActions';\r\nimport * as movieIndex from './movieIndexActions';\r\nimport * as oAuth from './oAuthActions';\r\nimport * as organizePreview from './organizePreviewActions';\r\nimport * as parse from './parseActions';\r\nimport * as paths from './pathActions';\r\nimport * as providerOptions from './providerOptionActions';\r\nimport * as queue from './queueActions';\r\nimport * as releases from './releaseActions';\r\nimport * as rootFolders from './rootFolderActions';\r\nimport * as settings from './settingsActions';\r\nimport * as system from './systemActions';\r\nimport * as tags from './tagActions';\r\nimport * as wanted from './wantedActions';\r\n\r\nexport default [\r\n addMovie,\r\n app,\r\n blocklist,\r\n calendar,\r\n captcha,\r\n commands,\r\n customFilters,\r\n discoverMovie,\r\n movieFiles,\r\n extraFiles,\r\n history,\r\n importMovie,\r\n interactiveImportActions,\r\n oAuth,\r\n organizePreview,\r\n parse,\r\n paths,\r\n providerOptions,\r\n queue,\r\n releases,\r\n rootFolders,\r\n movies,\r\n movieBlocklist,\r\n movieCollections,\r\n movieHistory,\r\n movieIndex,\r\n movieCredits,\r\n settings,\r\n system,\r\n tags,\r\n wanted\r\n];\r\n","import { connectRouter } from 'connected-react-router';\r\nimport { combineReducers } from 'redux';\r\nimport { enableBatching } from 'redux-batched-actions';\r\nimport actions from 'Store/Actions';\r\n\r\nconst defaultState = {};\r\nconst reducers = {};\r\n\r\nactions.forEach((action) => {\r\n const section = action.section;\r\n\r\n defaultState[section] = action.defaultState;\r\n reducers[section] = action.reducers;\r\n});\r\n\r\nexport { defaultState };\r\n\r\nexport default function(history) {\r\n return enableBatching(combineReducers({\r\n ...reducers,\r\n router: connectRouter(history)\r\n }));\r\n}\r\n","import _ from 'lodash';\r\nimport persistState from 'redux-localstorage';\r\nimport actions from 'Store/Actions';\r\nimport migrate from 'Store/Migrators/migrate';\r\n\r\nconst columnPaths = [];\r\n\r\nconst paths = _.reduce([...actions], (acc, action) => {\r\n if (action.persistState) {\r\n action.persistState.forEach((path) => {\r\n if (path.match(/\\.columns$/)) {\r\n columnPaths.push(path);\r\n }\r\n\r\n acc.push(path);\r\n });\r\n }\r\n\r\n return acc;\r\n}, []);\r\n\r\nfunction mergeColumns(path, initialState, persistedState, computedState) {\r\n const initialColumns = _.get(initialState, path);\r\n const persistedColumns = _.get(persistedState, path);\r\n\r\n if (!persistedColumns || !persistedColumns.length) {\r\n return;\r\n }\r\n\r\n const columns = [];\r\n\r\n // Add persisted columns in the same order they're currently in\r\n // as long as they haven't been removed.\r\n\r\n persistedColumns.forEach((persistedColumn) => {\r\n const column = initialColumns.find((i) => i.name === persistedColumn.name);\r\n\r\n if (column) {\r\n const newColumn = {};\r\n\r\n // We can't use a spread operator or Object.assign to clone the column\r\n // or any accessors are lost and can break translations.\r\n for (const prop of Object.keys(column)) {\r\n Object.defineProperty(newColumn, prop, Object.getOwnPropertyDescriptor(column, prop));\r\n }\r\n\r\n newColumn.isVisible = persistedColumn.isVisible;\r\n\r\n columns.push(newColumn);\r\n }\r\n });\r\n\r\n // Add any columns added to the app in the initial position.\r\n initialColumns.forEach((initialColumn, index) => {\r\n const persistedColumnIndex = persistedColumns.findIndex((i) => i.name === initialColumn.name);\r\n const column = Object.assign({}, initialColumn);\r\n\r\n if (persistedColumnIndex === -1) {\r\n columns.splice(index, 0, column);\r\n }\r\n });\r\n\r\n // Set the columns in the persisted state\r\n _.set(computedState, path, columns);\r\n}\r\n\r\nfunction slicer(paths_) {\r\n return (state) => {\r\n const subset = {};\r\n\r\n paths_.forEach((path) => {\r\n _.set(subset, path, _.get(state, path));\r\n });\r\n\r\n return subset;\r\n };\r\n}\r\n\r\nfunction serialize(obj) {\r\n return JSON.stringify(obj, null, 2);\r\n}\r\n\r\nfunction merge(initialState, persistedState) {\r\n if (!persistedState) {\r\n return initialState;\r\n }\r\n\r\n const computedState = {};\r\n\r\n _.merge(computedState, initialState, persistedState);\r\n\r\n columnPaths.forEach((columnPath) => {\r\n mergeColumns(columnPath, initialState, persistedState, computedState);\r\n });\r\n\r\n return computedState;\r\n}\r\n\r\nconst config = {\r\n slicer,\r\n serialize,\r\n merge,\r\n key: 'radarr'\r\n};\r\n\r\nexport default function createPersistState() {\r\n // Migrate existing local storage before proceeding\r\n const persistedState = JSON.parse(localStorage.getItem(config.key));\r\n migrate(persistedState);\r\n localStorage.setItem(config.key, serialize(persistedState));\r\n\r\n return persistState(paths, config);\r\n}\r\n","import qs from 'qs';\r\n\r\n// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils\r\nconst anchor = document.createElement('a');\r\n\r\nexport default function parseUrl(url) {\r\n anchor.href = url;\r\n\r\n // The `origin`, `password`, and `username` properties are unavailable in\r\n // Opera Presto. We synthesize `origin` if it's not present. While `password`\r\n // and `username` are ignored intentionally.\r\n const properties = {\r\n hash: anchor.hash,\r\n host: anchor.host,\r\n hostname: anchor.hostname,\r\n href: anchor.href,\r\n origin: anchor.origin,\r\n pathname: anchor.pathname,\r\n port: anchor.port,\r\n protocol: anchor.protocol,\r\n search: anchor.search\r\n };\r\n\r\n properties.isAbsolute = (/^[\\w:]*\\/\\//).test(url);\r\n\r\n if (properties.search) {\r\n // Remove leading ? from querystring before parsing.\r\n properties.params = qs.parse(properties.search.substring(1));\r\n } else {\r\n properties.params = {};\r\n }\r\n\r\n return properties;\r\n}\r\n","import * as sentry from '@sentry/browser';\r\nimport * as Integrations from '@sentry/integrations';\r\nimport _ from 'lodash';\r\nimport parseUrl from 'Utilities/String/parseUrl';\r\n\r\nconst IgnoreErrors = [\r\n // Innocuous browser errors\r\n /ResizeObserver loop limit exceeded/,\r\n /ResizeObserver loop completed with undelivered notifications/\r\n];\r\n\r\nfunction cleanseUrl(url) {\r\n const properties = parseUrl(url);\r\n\r\n return `${properties.pathname}${properties.search}`;\r\n}\r\n\r\nfunction shouldIgnoreException(s) {\r\n return s && IgnoreErrors.find((pattern) => pattern.test(s));\r\n}\r\n\r\nfunction cleanseData(event, hint) {\r\n const result = _.cloneDeep(event);\r\n\r\n const error = hint && hint.originalException;\r\n\r\n result.transaction = cleanseUrl(result.transaction);\r\n\r\n if (result.exception) {\r\n result.exception.values.forEach((exception) => {\r\n const stacktrace = exception.stacktrace;\r\n\r\n if (stacktrace) {\r\n stacktrace.frames.forEach((frame) => {\r\n frame.filename = cleanseUrl(frame.filename);\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (\r\n error &&\r\n error.message &&\r\n shouldIgnoreException(error.message)\r\n ) {\r\n return null;\r\n }\r\n\r\n result.request.url = cleanseUrl(result.request.url);\r\n\r\n return result;\r\n}\r\n\r\nfunction identity(stuff) {\r\n return stuff;\r\n}\r\n\r\nfunction stripUrlBase(frame) {\r\n if (frame.filename && window.Radarr.urlBase) {\r\n frame.filename = frame.filename.replace(window.Radarr.urlBase, '');\r\n }\r\n return frame;\r\n}\r\n\r\nfunction createMiddleware() {\r\n return (store) => (next) => (action) => {\r\n try {\r\n // Adds a breadcrumb for reporting later (if necessary).\r\n sentry.addBreadcrumb({\r\n category: 'redux',\r\n message: action.type\r\n });\r\n\r\n return next(action);\r\n } catch (err) {\r\n console.error(`[sentry] Reporting error to Sentry: ${err}`);\r\n\r\n // Send the report including breadcrumbs.\r\n sentry.captureException(err, {\r\n extra: {\r\n action: identity(action),\r\n state: identity(store.getState())\r\n }\r\n });\r\n }\r\n };\r\n}\r\n\r\nexport default function createSentryMiddleware() {\r\n const {\r\n analytics,\r\n branch,\r\n version,\r\n release,\r\n userHash,\r\n isProduction\r\n } = window.Radarr;\r\n\r\n if (!analytics) {\r\n return;\r\n }\r\n\r\n const dsn = isProduction ? 'https://7794f2858478485ea337fb5535624fbd@sentry.servarr.com/12' :\r\n 'https://da610619280249f891ec3ee306906793@sentry.servarr.com/13';\r\n\r\n sentry.init({\r\n dsn,\r\n environment: branch,\r\n release,\r\n sendDefaultPii: true,\r\n beforeSend: cleanseData,\r\n integrations: [\r\n new Integrations.RewriteFrames({ iteratee: stripUrlBase }),\r\n new Integrations.Dedupe()\r\n ]\r\n });\r\n\r\n sentry.configureScope((scope) => {\r\n scope.setUser({ username: userHash });\r\n scope.setTag('version', version);\r\n scope.setTag('production', isProduction);\r\n });\r\n\r\n return createMiddleware();\r\n}\r\n","import { routerMiddleware } from 'connected-react-router';\r\nimport { applyMiddleware, compose } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport createPersistState from './createPersistState';\r\nimport createSentryMiddleware from './createSentryMiddleware';\r\n\r\nexport default function(history) {\r\n const middlewares = [];\r\n const sentryMiddleware = createSentryMiddleware();\r\n\r\n if (sentryMiddleware) {\r\n middlewares.push(sentryMiddleware);\r\n }\r\n\r\n middlewares.push(routerMiddleware(history));\r\n middlewares.push(thunk);\r\n\r\n // eslint-disable-next-line no-underscore-dangle\r\n const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\n\r\n return composeEnhancers(\r\n applyMiddleware(...middlewares),\r\n createPersistState()\r\n );\r\n}\r\n","import migrateBlacklistToBlocklist from './migrateBlacklistToBlocklist';\r\nimport migrateMonitorToEnum from './migrateMonitorToEnum';\r\nimport migratePreDbToReleased from './migratePreDbToReleased';\r\n\r\nexport default function migrate(persistedState) {\r\n migrateBlacklistToBlocklist(persistedState);\r\n migratePreDbToReleased(persistedState);\r\n migrateMonitorToEnum(persistedState);\r\n}\r\n","import _, { get } from 'lodash';\r\n\r\nexport default function migrateBlacklistToBlocklist(persistedState) {\r\n const blocklist = get(persistedState, 'blacklist');\r\n\r\n if (!blocklist) {\r\n return;\r\n }\r\n\r\n persistedState.blocklist = blocklist;\r\n _.remove(persistedState, 'blacklist');\r\n}\r\n","import _ from 'lodash';\r\n\r\nexport default function migratePreDbToReleased(persistedState) {\r\n const addMovie = _.get(persistedState, 'addMovie.defaults.minimumAvailability');\r\n const discoverMovie = _.get(persistedState, 'discoverMovie.defaults.minimumAvailability');\r\n\r\n if (!addMovie && !discoverMovie) {\r\n return;\r\n }\r\n\r\n if (addMovie === 'preDB') {\r\n persistedState.addMovie.defaults.minimumAvailability = 'released';\r\n }\r\n\r\n if (discoverMovie === 'preDB') {\r\n persistedState.discoverMovie.defaults.minimumAvailability = 'released';\r\n }\r\n}\r\n","import _ from 'lodash';\r\n\r\nexport default function migrateMonitorToEnum(persistedState) {\r\n const addMovie = _.get(persistedState, 'addMovie.defaults.monitor');\r\n const discoverMovie = _.get(persistedState, 'discoverMovie.defaults.monitor');\r\n\r\n if (addMovie) {\r\n if (addMovie === 'true') {\r\n persistedState.addMovie.defaults.monitor = 'movieOnly';\r\n }\r\n\r\n if (addMovie === 'false') {\r\n persistedState.addMovie.defaults.monitor = 'none';\r\n }\r\n }\r\n\r\n if (discoverMovie) {\r\n if (discoverMovie === 'true') {\r\n persistedState.discoverMovie.defaults.monitor = 'movieOnly';\r\n }\r\n\r\n if (discoverMovie === 'false') {\r\n persistedState.discoverMovie.defaults.monitor = 'none';\r\n }\r\n }\r\n}\r\n","import { createStore } from 'redux';\r\nimport createReducers, { defaultState } from 'Store/Actions/createReducers';\r\nimport middlewares from 'Store/Middleware/middlewares';\r\n\r\nfunction createAppStore(history) {\r\n const appStore = createStore(\r\n createReducers(history),\r\n defaultState,\r\n middlewares(history)\r\n );\r\n\r\n return appStore;\r\n}\r\n\r\nexport default createAppStore;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createDimensionsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.app.dimensions,\r\n (dimensions) => {\r\n return dimensions;\r\n }\r\n );\r\n}\r\n\r\nexport default createDimensionsSelector;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createSystemStatusSelector() {\r\n return createSelector(\r\n (state: AppState) => state.system.status,\r\n (status) => {\r\n return status.item;\r\n }\r\n );\r\n}\r\n\r\nexport default createSystemStatusSelector;\r\n","import { Error } from 'App/State/AppSectionState';\r\n\r\nfunction getErrorMessage(xhr: Error, fallbackErrorMessage?: string) {\r\n if (!xhr || !xhr.responseJSON) {\r\n return fallbackErrorMessage;\r\n }\r\n\r\n if ('message' in xhr.responseJSON && xhr.responseJSON.message) {\r\n return xhr.responseJSON.message;\r\n }\r\n\r\n return fallbackErrorMessage;\r\n}\r\n\r\nexport default getErrorMessage;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"ErrorPage-page-Jiv2O Page-page-TorHA\",\"version\":\"ErrorPage-version-PGaC9\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport styles from './ErrorPage.css';\r\n\r\nfunction ErrorPage(props) {\r\n const {\r\n version,\r\n isLocalStorageSupported,\r\n translationsError,\r\n moviesError,\r\n customFiltersError,\r\n tagsError,\r\n qualityProfilesError,\r\n languagesError,\r\n uiSettingsError,\r\n systemStatusError\r\n } = props;\r\n\r\n let errorMessage = 'Failed to load Radarr';\r\n\r\n if (!isLocalStorageSupported) {\r\n errorMessage = 'Local Storage is not supported or disabled. A plugin or private browsing may have disabled it.';\r\n } else if (translationsError) {\r\n errorMessage = getErrorMessage(translationsError, 'Failed to load translations from API');\r\n } else if (moviesError) {\r\n errorMessage = getErrorMessage(moviesError, 'Failed to load movie from API');\r\n } else if (customFiltersError) {\r\n errorMessage = getErrorMessage(customFiltersError, 'Failed to load custom filters from API');\r\n } else if (tagsError) {\r\n errorMessage = getErrorMessage(tagsError, 'Failed to load tags from API');\r\n } else if (qualityProfilesError) {\r\n errorMessage = getErrorMessage(qualityProfilesError, 'Failed to load quality profiles from API');\r\n } else if (languagesError) {\r\n errorMessage = getErrorMessage(languagesError, 'Failed to load languages from API');\r\n } else if (uiSettingsError) {\r\n errorMessage = getErrorMessage(uiSettingsError, 'Failed to load UI settings from API');\r\n } else if (systemStatusError) {\r\n errorMessage = getErrorMessage(uiSettingsError, 'Failed to load system status from API');\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {errorMessage}\r\n
\r\n\r\n
\r\n Version {version}\r\n
\r\n
\r\n );\r\n}\r\n\r\nErrorPage.propTypes = {\r\n version: PropTypes.string.isRequired,\r\n isLocalStorageSupported: PropTypes.bool.isRequired,\r\n translationsError: PropTypes.object,\r\n moviesError: PropTypes.object,\r\n customFiltersError: PropTypes.object,\r\n tagsError: PropTypes.object,\r\n qualityProfilesError: PropTypes.object,\r\n languagesError: PropTypes.object,\r\n uiSettingsError: PropTypes.object,\r\n systemStatusError: PropTypes.object\r\n};\r\n\r\nexport default ErrorPage;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"loading\":\"LoadingIndicator-loading-DWfav\",\"rippleContainer\":\"LoadingIndicator-rippleContainer-b3h1D\",\"ripple\":\"LoadingIndicator-ripple-Dn9J1\"};","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport styles from './LoadingIndicator.css';\r\n\r\ninterface LoadingIndicatorProps {\r\n className?: string;\r\n rippleClassName?: string;\r\n size?: number;\r\n}\r\n\r\nfunction LoadingIndicator({\r\n className = styles.loading,\r\n rippleClassName = styles.ripple,\r\n size = 50,\r\n}: LoadingIndicatorProps) {\r\n const sizeInPx = `${size}px`;\r\n const width = sizeInPx;\r\n const height = sizeInPx;\r\n\r\n return (\r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default LoadingIndicator;\r\n","import React from 'react';\r\nimport styles from './LoadingMessage.css';\r\n\r\nconst messages = [\r\n 'Downloading more RAM',\r\n 'Now in Technicolor',\r\n 'Previously on Radarr...',\r\n 'Bleep Bloop.',\r\n 'Locating the required gigapixels to render...',\r\n 'Spinning up the hamster wheel...',\r\n \"At least you're not on hold\",\r\n 'Hum something loud while others stare',\r\n 'Loading humorous message... Please Wait',\r\n \"I could've been faster in Python\",\r\n \"Don't forget to rewind your movies\",\r\n 'Congratulations! You are the 1000th visitor.',\r\n \"HELP! I'm being held hostage and forced to write these stupid lines!\",\r\n 'RE-calibrating the internet...',\r\n \"I'll be here all week\",\r\n \"Don't forget to tip your waitress\",\r\n 'Apply directly to the forehead',\r\n 'Loading Battlestation',\r\n];\r\n\r\nlet message: string | null = null;\r\n\r\nfunction LoadingMessage() {\r\n if (!message) {\r\n const index = Math.floor(Math.random() * messages.length);\r\n message = messages[index];\r\n }\r\n\r\n return
{message}
;\r\n}\r\n\r\nexport default LoadingMessage;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"loadingMessage\":\"LoadingMessage-loadingMessage-WU8sQ\"};","import React from 'react';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport LoadingMessage from 'Components/Loading/LoadingMessage';\r\nimport styles from './LoadingPage.css';\r\n\r\nconst radarrLogo = 'data:image/png;base64,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';\r\n\r\nfunction LoadingPage() {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default LoadingPage;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"LoadingPage-page-TN4QY Page-page-TorHA\",\"logoFull\":\"LoadingPage-logoFull-_XCIG\"};","import * as sentry from '@sentry/browser';\r\nimport React, { Component, ErrorInfo } from 'react';\r\n\r\ninterface ErrorBoundaryProps {\r\n children: React.ReactNode;\r\n errorComponent: React.ElementType;\r\n}\r\n\r\ninterface ErrorBoundaryState {\r\n error: Error | null;\r\n info: ErrorInfo | null;\r\n}\r\n\r\n// Class component until componentDidCatch is supported in functional components\r\nclass ErrorBoundary extends Component {\r\n constructor(props: ErrorBoundaryProps) {\r\n super(props);\r\n\r\n this.state = {\r\n error: null,\r\n info: null,\r\n };\r\n }\r\n\r\n componentDidCatch(error: Error, info: ErrorInfo) {\r\n this.setState({\r\n error,\r\n info,\r\n });\r\n\r\n sentry.captureException(error);\r\n }\r\n\r\n render() {\r\n const { children, errorComponent: ErrorComponent } = this.props;\r\n const { error, info } = this.state;\r\n\r\n if (error) {\r\n return ;\r\n }\r\n\r\n return children;\r\n }\r\n}\r\n\r\nexport default ErrorBoundary;\r\n","import MobileDetect from 'mobile-detect';\r\n\r\nconst mobileDetect = new MobileDetect(window.navigator.userAgent);\r\n\r\nexport function isMobile() {\r\n\r\n return mobileDetect.mobile() != null;\r\n}\r\n\r\nexport function isIOS() {\r\n return mobileDetect.is('iOS');\r\n}\r\n\r\nexport function isFirefox() {\r\n return window.navigator.userAgent.toLowerCase().indexOf('firefox/') >= 0;\r\n}\r\n","let i = 0;\r\n\r\n/**\r\n * @deprecated Use React's useId() instead\r\n * @returns An HTML 4.0 compliant element IDs (http://stackoverflow.com/a/79022)\r\n */\r\nexport default function getUniqueElementId() {\r\n return `id-${i++}`;\r\n}\r\n","// Allow iOS devices to disable scrolling of the body/virtual table\r\n// when a modal is open. This will prevent focusing an input in a\r\n// modal causing the modal to close due to scrolling.\r\n\r\nlet scrollLock = false;\r\n\r\nexport function isLocked() {\r\n return scrollLock;\r\n}\r\n\r\nexport function setScrollLock(locked) {\r\n scrollLock = locked;\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"ErrorBoundaryError-container-u1Yk8\",\"message\":\"ErrorBoundaryError-message-YnXdu\",\"imageContainer\":\"ErrorBoundaryError-imageContainer-GMwwj\",\"image\":\"ErrorBoundaryError-image-jfjKW\",\"details\":\"ErrorBoundaryError-details-c3TVO\",\"version\":\"ErrorBoundaryError-version-KXhFf\"};","import React, { useEffect, useState } from 'react';\r\nimport StackTrace from 'stacktrace-js';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ErrorBoundaryError.css';\r\n\r\ninterface ErrorBoundaryErrorProps {\r\n className: string;\r\n messageClassName: string;\r\n detailsClassName: string;\r\n message: string;\r\n error: Error;\r\n info: {\r\n componentStack: string;\r\n };\r\n}\r\n\r\nfunction ErrorBoundaryError(props: ErrorBoundaryErrorProps) {\r\n const {\r\n className = styles.container,\r\n messageClassName = styles.message,\r\n detailsClassName = styles.details,\r\n message = translate('ErrorLoadingContent'),\r\n error,\r\n info,\r\n } = props;\r\n\r\n const [detailedError, setDetailedError] = useState<\r\n StackTrace.StackFrame[] | null\r\n >(null);\r\n\r\n useEffect(() => {\r\n if (error) {\r\n StackTrace.fromError(error).then((de) => {\r\n setDetailedError(de);\r\n });\r\n } else {\r\n setDetailedError(null);\r\n }\r\n }, [error, setDetailedError]);\r\n\r\n return (\r\n
\r\n
{message}
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n {error ?
{error.message}
: null}\r\n\r\n {detailedError ? (\r\n detailedError.map((d, index) => {\r\n return (\r\n
\r\n {` at ${d.functionName} (${d.fileName}:${d.lineNumber}:${d.columnNumber})`}\r\n
\r\n );\r\n })\r\n ) : (\r\n
{info.componentStack}
\r\n )}\r\n\r\n
Version: {window.Radarr.version}
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ErrorBoundaryError;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"Button-button-paJ9a Link-link-RInnp\",\"danger\":\"Button-danger-vthZW\",\"default\":\"Button-default-UXlBi\",\"primary\":\"Button-primary-MZWFG\",\"success\":\"Button-success-MO1fp\",\"warning\":\"Button-warning-Ta5XG\",\"small\":\"Button-small-aExXc\",\"medium\":\"Button-medium-ZwfFe\",\"large\":\"Button-large-W5TD4\",\"left\":\"Button-left-XRzO_\",\"center\":\"Button-center-tF4Zr\",\"right\":\"Button-right-zEjWk\"};","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport { align, kinds, sizes } from 'Helpers/Props';\r\nimport { Kind } from 'Helpers/Props/kinds';\r\nimport { Size } from 'Helpers/Props/sizes';\r\nimport Link, { LinkProps } from './Link';\r\nimport styles from './Button.css';\r\n\r\nexport interface ButtonProps extends Omit {\r\n buttonGroupPosition?: Extract<\r\n (typeof align.all)[number],\r\n keyof typeof styles\r\n >;\r\n kind?: Extract;\r\n size?: Extract;\r\n children: Required;\r\n}\r\n\r\nexport default function Button({\r\n className = styles.button,\r\n buttonGroupPosition,\r\n kind = kinds.DEFAULT,\r\n size = sizes.MEDIUM,\r\n ...otherProps\r\n}: ButtonProps) {\r\n return (\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"scroller\":\"Scroller-scroller-lhubq\",\"none\":\"Scroller-none-lIEhI\",\"vertical\":\"Scroller-vertical-OLDmS\",\"autoScroll\":\"Scroller-autoScroll-RVZ6m\",\"horizontal\":\"Scroller-horizontal-Od7JK\",\"both\":\"Scroller-both-u6blh\"};","import classNames from 'classnames';\r\nimport { throttle } from 'lodash';\r\nimport React, {\r\n ForwardedRef,\r\n forwardRef,\r\n MutableRefObject,\r\n ReactNode,\r\n useEffect,\r\n useRef,\r\n} from 'react';\r\nimport { ScrollDirection } from 'Helpers/Props/scrollDirections';\r\nimport styles from './Scroller.css';\r\n\r\nexport interface OnScroll {\r\n scrollLeft: number;\r\n scrollTop: number;\r\n}\r\n\r\ninterface ScrollerProps {\r\n className?: string;\r\n scrollDirection?: ScrollDirection;\r\n autoFocus?: boolean;\r\n autoScroll?: boolean;\r\n scrollTop?: number;\r\n initialScrollTop?: number;\r\n children?: ReactNode;\r\n onScroll?: (payload: OnScroll) => void;\r\n}\r\n\r\nconst Scroller = forwardRef(\r\n (props: ScrollerProps, ref: ForwardedRef) => {\r\n const {\r\n className,\r\n autoFocus = false,\r\n autoScroll = true,\r\n scrollDirection = 'vertical',\r\n children,\r\n scrollTop,\r\n initialScrollTop,\r\n onScroll,\r\n ...otherProps\r\n } = props;\r\n\r\n const internalRef = useRef();\r\n const currentRef = (ref as MutableRefObject) ?? internalRef;\r\n\r\n useEffect(\r\n () => {\r\n if (initialScrollTop != null) {\r\n currentRef.current.scrollTop = initialScrollTop;\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n useEffect(() => {\r\n if (scrollTop != null) {\r\n currentRef.current.scrollTop = scrollTop;\r\n }\r\n\r\n if (autoFocus && scrollDirection !== 'none') {\r\n currentRef.current.focus({ preventScroll: true });\r\n }\r\n }, [autoFocus, currentRef, scrollDirection, scrollTop]);\r\n\r\n useEffect(() => {\r\n const div = currentRef.current;\r\n\r\n const handleScroll = throttle(() => {\r\n const scrollLeft = div.scrollLeft;\r\n const scrollTop = div.scrollTop;\r\n\r\n onScroll?.({ scrollLeft, scrollTop });\r\n }, 10);\r\n\r\n div.addEventListener('scroll', handleScroll);\r\n\r\n return () => {\r\n div.removeEventListener('scroll', handleScroll);\r\n };\r\n }, [currentRef, onScroll]);\r\n\r\n return (\r\n \r\n {children}\r\n
\r\n );\r\n }\r\n);\r\n\r\nexport default Scroller;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport { scrollDirections } from 'Helpers/Props';\r\nimport styles from './ModalBody.css';\r\n\r\nclass ModalBody extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n innerClassName,\r\n scrollDirection,\r\n children,\r\n ...otherProps\r\n } = this.props;\r\n\r\n let className = this.props.className;\r\n const hasScroller = scrollDirection !== scrollDirections.NONE;\r\n\r\n if (!className) {\r\n className = hasScroller ? styles.modalScroller : styles.modalBody;\r\n }\r\n\r\n return (\r\n \r\n {\r\n hasScroller ?\r\n
\r\n {children}\r\n
:\r\n children\r\n }\r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nModalBody.propTypes = {\r\n className: PropTypes.string,\r\n innerClassName: PropTypes.string,\r\n children: PropTypes.node,\r\n scrollDirection: PropTypes.oneOf(scrollDirections.all)\r\n};\r\n\r\nModalBody.defaultProps = {\r\n innerClassName: styles.innerModalBody,\r\n scrollDirection: scrollDirections.VERTICAL\r\n};\r\n\r\nexport default ModalBody;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalBody\":\"ModalBody-modalBody-RVK6D\",\"modalScroller\":\"ModalBody-modalScroller-Oqq2l\",\"innerModalBody\":\"ModalBody-innerModalBody-XiTXT\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ModalContent.css';\r\n\r\nfunction ModalContent(props) {\r\n const {\r\n className,\r\n children,\r\n showCloseButton,\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n {\r\n showCloseButton &&\r\n \r\n \r\n \r\n }\r\n\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nModalContent.propTypes = {\r\n className: PropTypes.string,\r\n children: PropTypes.node,\r\n showCloseButton: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nModalContent.defaultProps = {\r\n className: styles.modalContent,\r\n showCloseButton: true\r\n};\r\n\r\nexport default ModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalContent\":\"ModalContent-modalContent-bdTLe\",\"closeButton\":\"ModalContent-closeButton-GYCdL\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './ModalFooter.css';\r\n\r\nclass ModalFooter extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n children,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nModalFooter.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default ModalFooter;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalFooter\":\"ModalFooter-modalFooter-wjkx5\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './ModalHeader.css';\r\n\r\nclass ModalHeader extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n children,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nModalHeader.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default ModalHeader;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalHeader\":\"ModalHeader-modalHeader-THPud\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport ErrorBoundaryError from 'Components/Error/ErrorBoundaryError';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ModalError.css';\r\n\r\nfunction ModalError(props) {\r\n const {\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {translate('Error')}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nModalError.propTypes = {\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ModalError;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"ModalError-message-HZzN5 ErrorBoundaryError-message-YnXdu\",\"details\":\"ModalError-details-bpGAW ErrorBoundaryError-details-c3TVO\"};","// extracted by mini-css-extract-plugin\nexport default {\"modalContainer\":\"Modal-modalContainer-xTUsI\",\"modalBackdrop\":\"Modal-modalBackdrop-XqzNZ\",\"modal\":\"Modal-modal-_3qBG\",\"modalOpen\":\"Modal-modalOpen-pzkAX\",\"modalOpenIOS\":\"Modal-modalOpenIOS-_maM4\",\"small\":\"Modal-small-oEjjG Modal-modal-_3qBG\",\"medium\":\"Modal-medium-keEoF Modal-modal-_3qBG\",\"large\":\"Modal-large-EKpkE Modal-modal-_3qBG\",\"extraLarge\":\"Modal-extraLarge-wEJo5 Modal-modal-_3qBG\",\"extraExtraLarge\":\"Modal-extraExtraLarge-NtrWr Modal-modal-_3qBG\"};","import classNames from 'classnames';\r\nimport elementClass from 'element-class';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport FocusLock from 'react-focus-lock';\r\nimport ErrorBoundary from 'Components/Error/ErrorBoundary';\r\nimport { sizes } from 'Helpers/Props';\r\nimport { isIOS } from 'Utilities/browser';\r\nimport * as keyCodes from 'Utilities/Constants/keyCodes';\r\nimport getUniqueElememtId from 'Utilities/getUniqueElementId';\r\nimport { setScrollLock } from 'Utilities/scrollLock';\r\nimport ModalError from './ModalError';\r\nimport styles from './Modal.css';\r\n\r\nconst openModals = [];\r\n\r\nfunction removeFromOpenModals(id) {\r\n const index = openModals.indexOf(id);\r\n\r\n if (index >= 0) {\r\n openModals.splice(index, 1);\r\n }\r\n}\r\n\r\nclass Modal extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._node = document.getElementById('portal-root');\r\n this._backgroundRef = null;\r\n this._modalId = getUniqueElememtId();\r\n this._bodyScrollTop = 0;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.isOpen) {\r\n this._openModal();\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n isOpen\r\n } = this.props;\r\n\r\n if (!prevProps.isOpen && isOpen) {\r\n this._openModal();\r\n } else if (prevProps.isOpen && !isOpen) {\r\n this._closeModal();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.props.isOpen) {\r\n this._closeModal();\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n _setBackgroundRef = (ref) => {\r\n this._backgroundRef = ref;\r\n };\r\n\r\n _openModal() {\r\n openModals.push(this._modalId);\r\n window.addEventListener('keydown', this.onKeyDown);\r\n\r\n if (openModals.length === 1) {\r\n if (isIOS()) {\r\n setScrollLock(true);\r\n const scrollTop = document.body.scrollTop;\r\n this._bodyScrollTop = scrollTop;\r\n elementClass(document.body).add(styles.modalOpenIOS);\r\n } else {\r\n elementClass(document.body).add(styles.modalOpen);\r\n }\r\n }\r\n }\r\n\r\n _closeModal() {\r\n removeFromOpenModals(this._modalId);\r\n window.removeEventListener('keydown', this.onKeyDown);\r\n\r\n if (openModals.length === 0) {\r\n setScrollLock(false);\r\n\r\n if (isIOS()) {\r\n elementClass(document.body).remove(styles.modalOpenIOS);\r\n document.body.scrollTop = this._bodyScrollTop;\r\n } else {\r\n elementClass(document.body).remove(styles.modalOpen);\r\n }\r\n }\r\n }\r\n\r\n _isBackdropTarget(event) {\r\n const targetElement = this._findEventTarget(event);\r\n\r\n if (targetElement) {\r\n const backgroundElement = ReactDOM.findDOMNode(this._backgroundRef);\r\n\r\n return backgroundElement.isEqualNode(targetElement);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _findEventTarget(event) {\r\n const changedTouches = event.changedTouches;\r\n\r\n if (!changedTouches) {\r\n return event.target;\r\n }\r\n\r\n if (changedTouches.length === 1) {\r\n const touch = changedTouches[0];\r\n\r\n return document.elementFromPoint(touch.clientX, touch.clientY);\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onBackdropBeginPress = (event) => {\r\n this._isBackdropPressed = this._isBackdropTarget(event);\r\n };\r\n\r\n onBackdropEndPress = (event) => {\r\n const {\r\n closeOnBackgroundClick,\r\n onModalClose\r\n } = this.props;\r\n\r\n if (\r\n this._isBackdropPressed &&\r\n this._isBackdropTarget(event) &&\r\n closeOnBackgroundClick\r\n ) {\r\n onModalClose();\r\n }\r\n\r\n this._isBackdropPressed = false;\r\n };\r\n\r\n onKeyDown = (event) => {\r\n const keyCode = event.keyCode;\r\n\r\n if (keyCode === keyCodes.ESCAPE) {\r\n if (openModals.indexOf(this._modalId) === openModals.length - 1) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.props.onModalClose();\r\n }\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n style,\r\n backdropClassName,\r\n size,\r\n children,\r\n isOpen,\r\n onModalClose\r\n } = this.props;\r\n\r\n if (!isOpen) {\r\n return null;\r\n }\r\n\r\n return ReactDOM.createPortal(\r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n ,\r\n this._node\r\n );\r\n }\r\n}\r\n\r\nModal.propTypes = {\r\n className: PropTypes.string,\r\n style: PropTypes.object,\r\n backdropClassName: PropTypes.string,\r\n size: PropTypes.oneOf(sizes.all),\r\n children: PropTypes.node,\r\n isOpen: PropTypes.bool.isRequired,\r\n closeOnBackgroundClick: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nModal.defaultProps = {\r\n className: styles.modal,\r\n backdropClassName: styles.modalBackdrop,\r\n size: sizes.LARGE,\r\n closeOnBackgroundClick: true\r\n};\r\n\r\nexport default Modal;\r\n","export const TAB = 9;\r\nexport const ENTER = 13;\r\nexport const SHIFT = 16;\r\nexport const CONTROL = 17;\r\nexport const ESCAPE = 27;\r\nexport const HOME = 36;\r\nexport const END = 35;\r\nexport const UP_ARROW = 38;\r\nexport const DOWN_ARROW = 40;\r\nexport const LEFT_ARROW = 37;\r\nexport const RIGHT_ARROW = 39;\r\n","import React, { ReactElement } from 'react';\r\nimport Link from 'Components/Link/Link';\r\n\r\ninterface InlineMarkdownProps {\r\n className?: string;\r\n data?: string;\r\n blockClassName?: string;\r\n}\r\n\r\nfunction InlineMarkdown(props: InlineMarkdownProps) {\r\n const { className, data, blockClassName } = props;\r\n\r\n // For now only replace links or code blocks (not both)\r\n const markdownBlocks: (ReactElement | string)[] = [];\r\n\r\n if (data) {\r\n const linkRegex = RegExp(/\\[(.+?)\\]\\((.+?)\\)/g);\r\n\r\n let endIndex = 0;\r\n let match = null;\r\n\r\n while ((match = linkRegex.exec(data)) !== null) {\r\n if (match.index > endIndex) {\r\n markdownBlocks.push(data.substr(endIndex, match.index - endIndex));\r\n }\r\n\r\n markdownBlocks.push(\r\n \r\n {match[1]}\r\n \r\n );\r\n endIndex = match.index + match[0].length;\r\n }\r\n\r\n if (endIndex !== data.length && markdownBlocks.length > 0) {\r\n markdownBlocks.push(data.substr(endIndex, data.length - endIndex));\r\n }\r\n\r\n const codeRegex = RegExp(/(?=`)`(?!`)[^`]*(?=`)`(?!`)/g);\r\n\r\n endIndex = 0;\r\n match = null;\r\n let matchedCode = false;\r\n\r\n while ((match = codeRegex.exec(data)) !== null) {\r\n matchedCode = true;\r\n\r\n if (match.index > endIndex) {\r\n markdownBlocks.push(data.substr(endIndex, match.index - endIndex));\r\n }\r\n\r\n markdownBlocks.push(\r\n \r\n {match[0].substring(1, match[0].length - 1)}\r\n \r\n );\r\n endIndex = match.index + match[0].length;\r\n }\r\n\r\n if (endIndex !== data.length && markdownBlocks.length > 0 && matchedCode) {\r\n markdownBlocks.push(data.substr(endIndex, data.length - endIndex));\r\n }\r\n\r\n if (markdownBlocks.length === 0) {\r\n markdownBlocks.push(data);\r\n }\r\n }\r\n\r\n return {markdownBlocks};\r\n}\r\n\r\nexport default InlineMarkdown;\r\n","import { useEffect, useRef } from 'react';\r\n\r\nexport default function usePrevious(value: T): T | undefined {\r\n const ref = useRef();\r\n\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n\r\n return ref.current;\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"UpdateChanges-title-iaqWz\"};","import React from 'react';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport styles from './UpdateChanges.css';\r\n\r\ninterface UpdateChangesProps {\r\n title: string;\r\n changes: string[];\r\n}\r\n\r\nfunction UpdateChanges(props: UpdateChangesProps) {\r\n const { title, changes } = props;\r\n\r\n if (changes.length === 0) {\r\n return null;\r\n }\r\n\r\n const uniqueChanges = [...new Set(changes)];\r\n\r\n return (\r\n
\r\n
{title}
\r\n
    \r\n {uniqueChanges.map((change, index) => {\r\n const checkChange = change.replace(\r\n /#\\d{4,5}\\b/g,\r\n (match) =>\r\n `[${match}](https://github.com/Radarr/Radarr/issues/${match.substring(\r\n 1\r\n )})`\r\n );\r\n\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default UpdateChanges;\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { fetchUpdates } from 'Store/Actions/systemActions';\r\nimport UpdateChanges from 'System/Updates/UpdateChanges';\r\nimport Update from 'typings/Update';\r\nimport translate from 'Utilities/String/translate';\r\nimport AppState from './State/AppState';\r\nimport styles from './AppUpdatedModalContent.css';\r\n\r\nfunction mergeUpdates(items: Update[], version: string, prevVersion?: string) {\r\n let installedIndex = items.findIndex((u) => u.version === version);\r\n let installedPreviouslyIndex = items.findIndex(\r\n (u) => u.version === prevVersion\r\n );\r\n\r\n if (installedIndex === -1) {\r\n installedIndex = 0;\r\n }\r\n\r\n if (installedPreviouslyIndex === -1) {\r\n installedPreviouslyIndex = items.length;\r\n } else if (installedPreviouslyIndex === installedIndex && items.length) {\r\n installedPreviouslyIndex += 1;\r\n }\r\n\r\n const appliedUpdates = items.slice(installedIndex, installedPreviouslyIndex);\r\n\r\n if (!appliedUpdates.length) {\r\n return null;\r\n }\r\n\r\n const appliedChanges: Update['changes'] = { new: [], fixed: [] };\r\n\r\n appliedUpdates.forEach((u: Update) => {\r\n if (u.changes) {\r\n appliedChanges.new.push(...u.changes.new);\r\n appliedChanges.fixed.push(...u.changes.fixed);\r\n }\r\n });\r\n\r\n const mergedUpdate: Update = Object.assign({}, appliedUpdates[0], {\r\n changes: appliedChanges,\r\n });\r\n\r\n if (!appliedChanges.new.length && !appliedChanges.fixed.length) {\r\n mergedUpdate.changes = null;\r\n }\r\n\r\n return mergedUpdate;\r\n}\r\n\r\ninterface AppUpdatedModalContentProps {\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction AppUpdatedModalContent(props: AppUpdatedModalContentProps) {\r\n const dispatch = useDispatch();\r\n const { version, prevVersion } = useSelector((state: AppState) => state.app);\r\n const { isPopulated, error, items } = useSelector(\r\n (state: AppState) => state.system.updates\r\n );\r\n const previousVersion = usePrevious(version);\r\n\r\n const { onModalClose } = props;\r\n\r\n const update = mergeUpdates(items, version, prevVersion);\r\n\r\n const handleSeeChangesPress = useCallback(() => {\r\n window.location.href = `${window.Radarr.urlBase}/system/updates`;\r\n }, []);\r\n\r\n useEffect(() => {\r\n dispatch(fetchUpdates());\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n if (version !== previousVersion) {\r\n dispatch(fetchUpdates());\r\n }\r\n }, [version, previousVersion, dispatch]);\r\n\r\n return (\r\n \r\n {translate('AppUpdated')}\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n {isPopulated && !error && !!update ? (\r\n
\r\n {update.changes ? (\r\n
\r\n {translate('MaintenanceRelease')}\r\n
\r\n ) : null}\r\n\r\n {update.changes ? (\r\n
\r\n
{translate('WhatsNew')}
\r\n\r\n \r\n\r\n \r\n
\r\n ) : null}\r\n
\r\n ) : null}\r\n\r\n {!isPopulated && !error ? : null}\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default AppUpdatedModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"version\":\"AppUpdatedModalContent-version-FNMj4\",\"maintenance\":\"AppUpdatedModalContent-maintenance-icjTi\",\"changes\":\"AppUpdatedModalContent-changes-pxSEa\"};","import React, { useCallback } from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AppUpdatedModalContent from './AppUpdatedModalContent';\r\n\r\ninterface AppUpdatedModalProps {\r\n isOpen: boolean;\r\n onModalClose: (...args: unknown[]) => unknown;\r\n}\r\n\r\nfunction AppUpdatedModal(props: AppUpdatedModalProps) {\r\n const { isOpen, onModalClose } = props;\r\n\r\n const handleModalClose = useCallback(() => {\r\n location.reload();\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default AppUpdatedModal;\r\n","import React from 'react';\r\n\r\nconst ColorImpairedContext = React.createContext(false);\r\nexport const ColorImpairedConsumer = ColorImpairedContext.Consumer;\r\n\r\nexport default ColorImpairedContext;\r\n","import React, { useCallback } from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ConnectionLostModal.css';\r\n\r\ninterface ConnectionLostModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nfunction ConnectionLostModal(props: ConnectionLostModalProps) {\r\n const { isOpen } = props;\r\n\r\n const handleModalClose = useCallback(() => {\r\n location.reload();\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n {translate('ConnectionLost')}\r\n\r\n \r\n
{translate('ConnectionLostToBackend')}
\r\n\r\n
\r\n {translate('ConnectionLostReconnect')}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ConnectionLostModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"automatic\":\"ConnectionLostModal-automatic-O5Z3a\"};","let currentPopulator = null;\r\nlet currentReasons = [];\r\n\r\nexport function registerPagePopulator(populator, reasons = []) {\r\n currentPopulator = populator;\r\n currentReasons = reasons;\r\n}\r\n\r\nexport function unregisterPagePopulator(populator) {\r\n if (currentPopulator === populator) {\r\n currentPopulator = null;\r\n currentReasons = [];\r\n }\r\n}\r\n\r\nexport function repopulatePage(reason) {\r\n if (!currentPopulator) {\r\n return;\r\n }\r\n\r\n if (!reason) {\r\n currentPopulator();\r\n }\r\n\r\n if (reason && currentReasons.includes(reason)) {\r\n currentPopulator();\r\n }\r\n}\r\n","const regex = /\\b\\w+/g;\r\n\r\nfunction titleCase(input) {\r\n if (!input) {\r\n return '';\r\n }\r\n\r\n return input.replace(regex, (match) => {\r\n return match.charAt(0).toUpperCase() + match.substr(1).toLowerCase();\r\n });\r\n}\r\n\r\nexport default titleCase;\r\n","import * as signalR from '@microsoft/signalr/dist/browser/signalr.js';\r\nimport PropTypes from 'prop-types';\r\nimport { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { setAppValue, setVersion } from 'Store/Actions/appActions';\r\nimport { removeItem, update, updateItem } from 'Store/Actions/baseActions';\r\nimport { fetchCommands, finishCommand, updateCommand } from 'Store/Actions/commandActions';\r\nimport { fetchMovies } from 'Store/Actions/movieActions';\r\nimport { fetchQueue, fetchQueueDetails } from 'Store/Actions/queueActions';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport { fetchQualityDefinitions } from 'Store/Actions/settingsActions';\r\nimport { fetchHealth } from 'Store/Actions/systemActions';\r\nimport { fetchTagDetails, fetchTags } from 'Store/Actions/tagActions';\r\nimport { repopulatePage } from 'Utilities/pagePopulator';\r\nimport titleCase from 'Utilities/String/titleCase';\r\n\r\nfunction getHandlerName(name) {\r\n name = titleCase(name);\r\n name = name.replace('/', '');\r\n\r\n return `handle${name}`;\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.app.isReconnecting,\r\n (state) => state.app.isDisconnected,\r\n (state) => state.queue.paged.isPopulated,\r\n (isReconnecting, isDisconnected, isQueuePopulated) => {\r\n return {\r\n isReconnecting,\r\n isDisconnected,\r\n isQueuePopulated\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchCommands: fetchCommands,\r\n dispatchUpdateCommand: updateCommand,\r\n dispatchFinishCommand: finishCommand,\r\n dispatchSetAppValue: setAppValue,\r\n dispatchSetVersion: setVersion,\r\n dispatchUpdate: update,\r\n dispatchUpdateItem: updateItem,\r\n dispatchRemoveItem: removeItem,\r\n dispatchFetchHealth: fetchHealth,\r\n dispatchFetchQualityDefinitions: fetchQualityDefinitions,\r\n dispatchFetchQueue: fetchQueue,\r\n dispatchFetchQueueDetails: fetchQueueDetails,\r\n dispatchFetchRootFolders: fetchRootFolders,\r\n dispatchFetchMovies: fetchMovies,\r\n dispatchFetchTags: fetchTags,\r\n dispatchFetchTagDetails: fetchTagDetails\r\n};\r\n\r\nfunction Logger(minimumLogLevel) {\r\n this.minimumLogLevel = minimumLogLevel;\r\n}\r\n\r\nLogger.prototype.cleanse = function(message) {\r\n const apikey = new RegExp(`access_token=${encodeURIComponent(window.Radarr.apiKey)}`, 'g');\r\n return message.replace(apikey, 'access_token=(removed)');\r\n};\r\n\r\nLogger.prototype.log = function(logLevel, message) {\r\n // see https://github.com/aspnet/AspNetCore/blob/21c9e2cc954c10719878839cd3f766aca5f57b34/src/SignalR/clients/ts/signalr/src/Utils.ts#L147\r\n if (logLevel >= this.minimumLogLevel) {\r\n switch (logLevel) {\r\n case signalR.LogLevel.Critical:\r\n case signalR.LogLevel.Error:\r\n console.error(`[signalR] ${signalR.LogLevel[logLevel]}: ${this.cleanse(message)}`);\r\n break;\r\n case signalR.LogLevel.Warning:\r\n console.warn(`[signalR] ${signalR.LogLevel[logLevel]}: ${this.cleanse(message)}`);\r\n break;\r\n case signalR.LogLevel.Information:\r\n console.info(`[signalR] ${signalR.LogLevel[logLevel]}: ${this.cleanse(message)}`);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n console.log(`[signalR] ${signalR.LogLevel[logLevel]}: ${this.cleanse(message)}`);\r\n break;\r\n }\r\n }\r\n};\r\n\r\nclass SignalRConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.connection = null;\r\n }\r\n\r\n componentDidMount() {\r\n console.log('[signalR] starting');\r\n\r\n const url = `${window.Radarr.urlBase}/signalr/messages`;\r\n\r\n this.connection = new signalR.HubConnectionBuilder()\r\n .configureLogging(new Logger(signalR.LogLevel.Information))\r\n .withUrl(`${url}?access_token=${encodeURIComponent(window.Radarr.apiKey)}`)\r\n .withAutomaticReconnect({\r\n nextRetryDelayInMilliseconds: (retryContext) => {\r\n if (retryContext.elapsedMilliseconds > 180000) {\r\n this.props.dispatchSetAppValue({ isDisconnected: true });\r\n }\r\n return Math.min(retryContext.previousRetryCount, 10) * 1000;\r\n }\r\n })\r\n .build();\r\n\r\n this.connection.onreconnecting(this.onReconnecting);\r\n this.connection.onreconnected(this.onReconnected);\r\n this.connection.onclose(this.onClose);\r\n\r\n this.connection.on('receiveMessage', this.onReceiveMessage);\r\n\r\n this.connection.start().then(this.onStart, this.onStartFail);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.connection.stop();\r\n this.connection = null;\r\n }\r\n\r\n //\r\n // Control\r\n handleMessage = (message) => {\r\n const {\r\n name,\r\n body\r\n } = message;\r\n\r\n const handler = this[getHandlerName(name)];\r\n\r\n if (handler) {\r\n handler(body);\r\n return;\r\n }\r\n\r\n console.error(`signalR: Unable to find handler for ${name}`);\r\n };\r\n\r\n handleCalendar = (body) => {\r\n if (body.action === 'updated') {\r\n this.props.dispatchUpdateItem({\r\n section: 'calendar',\r\n updateOnly: true,\r\n ...body.resource\r\n });\r\n }\r\n };\r\n\r\n handleCommand = (body) => {\r\n if (body.action === 'sync') {\r\n this.props.dispatchFetchCommands();\r\n return;\r\n }\r\n\r\n const resource = body.resource;\r\n const status = resource.status;\r\n\r\n // Both successful and failed commands need to be\r\n // completed, otherwise they spin until they time out.\r\n\r\n if (status === 'completed' || status === 'failed') {\r\n this.props.dispatchFinishCommand(resource);\r\n } else {\r\n this.props.dispatchUpdateCommand(resource);\r\n }\r\n };\r\n\r\n handleMoviefile = (body) => {\r\n const section = 'movieFiles';\r\n\r\n if (body.action === 'updated') {\r\n this.props.dispatchUpdateItem({ section, ...body.resource });\r\n\r\n // Repopulate the page to handle recently imported file\r\n repopulatePage('movieFileUpdated');\r\n } else if (body.action === 'deleted') {\r\n this.props.dispatchRemoveItem({ section, id: body.resource.id });\r\n\r\n repopulatePage('movieFileDeleted');\r\n }\r\n };\r\n\r\n handleDownloadclient = ({ action, resource }) => {\r\n const section = 'settings.downloadClients';\r\n\r\n if (action === 'created' || action === 'updated') {\r\n this.props.dispatchUpdateItem({ section, ...resource });\r\n } else if (action === 'deleted') {\r\n this.props.dispatchRemoveItem({ section, id: resource.id });\r\n }\r\n };\r\n\r\n handleHealth = () => {\r\n this.props.dispatchFetchHealth();\r\n };\r\n\r\n handleImportlist = ({ action, resource }) => {\r\n const section = 'settings.importLists';\r\n\r\n if (action === 'created' || action === 'updated') {\r\n this.props.dispatchUpdateItem({ section, ...resource });\r\n } else if (action === 'deleted') {\r\n this.props.dispatchRemoveItem({ section, id: resource.id });\r\n }\r\n };\r\n\r\n handleIndexer = ({ action, resource }) => {\r\n const section = 'settings.indexers';\r\n\r\n if (action === 'created' || action === 'updated') {\r\n this.props.dispatchUpdateItem({ section, ...resource });\r\n } else if (action === 'deleted') {\r\n this.props.dispatchRemoveItem({ section, id: resource.id });\r\n }\r\n };\r\n\r\n handleMetadata = ({ action, resource }) => {\r\n const section = 'settings.metadata';\r\n\r\n if (action === 'updated') {\r\n this.props.dispatchUpdateItem({ section, ...resource });\r\n }\r\n };\r\n\r\n handleNotification = ({ action, resource }) => {\r\n const section = 'settings.notifications';\r\n\r\n if (action === 'created' || action === 'updated') {\r\n this.props.dispatchUpdateItem({ section, ...resource });\r\n } else if (action === 'deleted') {\r\n this.props.dispatchRemoveItem({ section, id: resource.id });\r\n }\r\n };\r\n\r\n handleMovie = (body) => {\r\n const action = body.action;\r\n const section = 'movies';\r\n\r\n if (action === 'updated') {\r\n this.props.dispatchUpdateItem({ section, ...body.resource });\r\n\r\n repopulatePage('movieUpdated');\r\n } else if (action === 'deleted') {\r\n this.props.dispatchRemoveItem({ section, id: body.resource.id });\r\n }\r\n };\r\n\r\n handleCollection = (body) => {\r\n const action = body.action;\r\n const section = 'movieCollections';\r\n\r\n console.log(body);\r\n\r\n if (action === 'updated') {\r\n this.props.dispatchUpdateItem({ section, ...body.resource });\r\n } else if (action === 'deleted') {\r\n this.props.dispatchRemoveItem({ section, id: body.resource.id });\r\n }\r\n };\r\n\r\n handleQualitydefinition = () => {\r\n this.props.dispatchFetchQualityDefinitions();\r\n };\r\n\r\n handleQueue = () => {\r\n if (this.props.isQueuePopulated) {\r\n this.props.dispatchFetchQueue();\r\n }\r\n };\r\n\r\n handleQueueDetails = () => {\r\n this.props.dispatchFetchQueueDetails();\r\n };\r\n\r\n handleQueueStatus = (body) => {\r\n this.props.dispatchUpdate({ section: 'queue.status', data: body.resource });\r\n };\r\n\r\n handleVersion = (body) => {\r\n const version = body.version;\r\n\r\n this.props.dispatchSetVersion({ version });\r\n };\r\n\r\n handleWantedCutoff = (body) => {\r\n if (body.action === 'updated') {\r\n this.props.dispatchUpdateItem({\r\n section: 'wanted.cutoffUnmet',\r\n updateOnly: true,\r\n ...body.resource\r\n });\r\n }\r\n };\r\n\r\n handleWantedMissing = (body) => {\r\n if (body.action === 'updated') {\r\n this.props.dispatchUpdateItem({\r\n section: 'wanted.missing',\r\n updateOnly: true,\r\n ...body.resource\r\n });\r\n }\r\n };\r\n\r\n handleSystemTask = () => {\r\n this.props.dispatchFetchCommands();\r\n };\r\n\r\n handleRootfolder = () => {\r\n this.props.dispatchFetchRootFolders();\r\n };\r\n\r\n handleTag = (body) => {\r\n if (body.action === 'sync') {\r\n this.props.dispatchFetchTags();\r\n this.props.dispatchFetchTagDetails();\r\n return;\r\n }\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onStartFail = (error) => {\r\n console.error('[signalR] failed to connect');\r\n console.error(error);\r\n\r\n this.props.dispatchSetAppValue({\r\n isConnected: false,\r\n isReconnecting: false,\r\n isDisconnected: false,\r\n isRestarting: false\r\n });\r\n };\r\n\r\n onStart = () => {\r\n console.debug('[signalR] connected');\r\n\r\n this.props.dispatchSetAppValue({\r\n isConnected: true,\r\n isReconnecting: false,\r\n isDisconnected: false,\r\n isRestarting: false\r\n });\r\n };\r\n\r\n onReconnecting = () => {\r\n this.props.dispatchSetAppValue({ isReconnecting: true });\r\n };\r\n\r\n onReconnected = () => {\r\n\r\n const {\r\n dispatchFetchCommands,\r\n dispatchFetchMovies,\r\n dispatchSetAppValue\r\n } = this.props;\r\n\r\n dispatchSetAppValue({\r\n isConnected: true,\r\n isReconnecting: false,\r\n isDisconnected: false,\r\n isRestarting: false\r\n });\r\n\r\n // Repopulate the page (if a repopulator is set) to ensure things\r\n // are in sync after reconnecting.\r\n dispatchFetchMovies();\r\n dispatchFetchCommands();\r\n repopulatePage();\r\n };\r\n\r\n onClose = () => {\r\n console.debug('[signalR] connection closed');\r\n };\r\n\r\n onReceiveMessage = (message) => {\r\n console.debug('[signalR] received', message.name, message.body);\r\n\r\n this.handleMessage(message);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return null;\r\n }\r\n}\r\n\r\nSignalRConnector.propTypes = {\r\n isReconnecting: PropTypes.bool.isRequired,\r\n isDisconnected: PropTypes.bool.isRequired,\r\n isQueuePopulated: PropTypes.bool.isRequired,\r\n dispatchFetchCommands: PropTypes.func.isRequired,\r\n dispatchUpdateCommand: PropTypes.func.isRequired,\r\n dispatchFinishCommand: PropTypes.func.isRequired,\r\n dispatchSetAppValue: PropTypes.func.isRequired,\r\n dispatchSetVersion: PropTypes.func.isRequired,\r\n dispatchUpdate: PropTypes.func.isRequired,\r\n dispatchUpdateItem: PropTypes.func.isRequired,\r\n dispatchRemoveItem: PropTypes.func.isRequired,\r\n dispatchFetchHealth: PropTypes.func.isRequired,\r\n dispatchFetchQualityDefinitions: PropTypes.func.isRequired,\r\n dispatchFetchQueue: PropTypes.func.isRequired,\r\n dispatchFetchQueueDetails: PropTypes.func.isRequired,\r\n dispatchFetchRootFolders: PropTypes.func.isRequired,\r\n dispatchFetchMovies: PropTypes.func.isRequired,\r\n dispatchFetchTags: PropTypes.func.isRequired,\r\n dispatchFetchTagDetails: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(SignalRConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"alert\":\"Alert-alert-_KgnQ\",\"danger\":\"Alert-danger-nugZ_\",\"info\":\"Alert-info-BFcpa\",\"success\":\"Alert-success-DPVBw\",\"warning\":\"Alert-warning-K7oQl\"};","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport { Kind } from 'Helpers/Props/kinds';\r\nimport styles from './Alert.css';\r\n\r\ninterface AlertProps {\r\n className?: string;\r\n kind?: Extract;\r\n children: React.ReactNode;\r\n}\r\n\r\nfunction Alert(props: AlertProps) {\r\n const { className = styles.alert, kind = 'info', children } = props;\r\n\r\n return
{children}
;\r\n}\r\n\r\nexport default Alert;\r\n","// https://github.com/react-bootstrap/react-element-children\r\n\r\nimport React from 'react';\r\n\r\n/**\r\n * Iterates through children that are typically specified as `props.children`,\r\n * but only maps over children that are \"valid components\".\r\n *\r\n * The mapFunction provided index will be normalised to the components mapped,\r\n * so an invalid component would not increase the index.\r\n *\r\n * @param {?*} children Children tree container.\r\n * @param {function(*, int)} func.\r\n * @param {*} context Context for func.\r\n * @return {object} Object containing the ordered map of results.\r\n */\r\nexport function map(children, func, context) {\r\n let index = 0;\r\n\r\n return React.Children.map(children, (child) => {\r\n if (!React.isValidElement(child)) {\r\n return child;\r\n }\r\n\r\n return func.call(context, child, index++);\r\n });\r\n}\r\n\r\n/**\r\n * Iterates through children that are \"valid components\".\r\n *\r\n * The provided forEachFunc(child, index) will be called for each\r\n * leaf child with the index reflecting the position relative to \"valid components\".\r\n *\r\n * @param {?*} children Children tree container.\r\n * @param {function(*, int)} func.\r\n * @param {*} context Context for context.\r\n */\r\nexport function forEach(children, func, context) {\r\n let index = 0;\r\n\r\n React.Children.forEach(children, (child) => {\r\n if (!React.isValidElement(child)) {\r\n return;\r\n }\r\n\r\n func.call(context, child, index++);\r\n });\r\n}\r\n\r\n/**\r\n * Count the number of \"valid components\" in the Children container.\r\n *\r\n * @param {?*} children Children tree container.\r\n * @returns {number}\r\n */\r\nexport function count(children) {\r\n let result = 0;\r\n\r\n React.Children.forEach(children, (child) => {\r\n if (!React.isValidElement(child)) {\r\n return;\r\n }\r\n\r\n ++result;\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Finds children that are typically specified as `props.children`,\r\n * but only iterates over children that are \"valid components\".\r\n *\r\n * The provided forEachFunc(child, index) will be called for each\r\n * leaf child with the index reflecting the position relative to \"valid components\".\r\n *\r\n * @param {?*} children Children tree container.\r\n * @param {function(*, int)} func.\r\n * @param {*} context Context for func.\r\n * @returns {array} of children that meet the func return statement\r\n */\r\nexport function filter(children, func, context) {\r\n const result = [];\r\n\r\n forEach(children, (child, index) => {\r\n if (func.call(context, child, index)) {\r\n result.push(child);\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function find(children, func, context) {\r\n let result = null;\r\n\r\n forEach(children, (child, index) => {\r\n if (result) {\r\n return;\r\n }\r\n if (func.call(context, child, index)) {\r\n result = child;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function every(children, func, context) {\r\n let result = true;\r\n\r\n forEach(children, (child, index) => {\r\n if (!result) {\r\n return;\r\n }\r\n if (!func.call(context, child, index)) {\r\n result = false;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function some(children, func, context) {\r\n let result = false;\r\n\r\n forEach(children, (child, index) => {\r\n if (result) {\r\n return;\r\n }\r\n\r\n if (func.call(context, child, index)) {\r\n result = true;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function toArray(children) {\r\n const result = [];\r\n\r\n forEach(children, (child) => {\r\n result.push(child);\r\n });\r\n\r\n return result;\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"group\":\"FormGroup-group-UkYsg\",\"extraSmall\":\"FormGroup-extraSmall-Xgs0f\",\"small\":\"FormGroup-small-cZTV8\",\"medium\":\"FormGroup-medium-HIpH5\",\"large\":\"FormGroup-large-qJv2k\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { map } from 'Helpers/elementChildren';\r\nimport { sizes } from 'Helpers/Props';\r\nimport styles from './FormGroup.css';\r\n\r\nfunction FormGroup(props) {\r\n const {\r\n className,\r\n children,\r\n size,\r\n advancedSettings,\r\n isAdvanced,\r\n ...otherProps\r\n } = props;\r\n\r\n if (!advancedSettings && isAdvanced) {\r\n return null;\r\n }\r\n\r\n const childProps = isAdvanced ? { isAdvanced } : {};\r\n\r\n return (\r\n \r\n {\r\n map(children, (child) => {\r\n return React.cloneElement(child, childProps);\r\n })\r\n }\r\n \r\n );\r\n}\r\n\r\nFormGroup.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n children: PropTypes.node.isRequired,\r\n size: PropTypes.oneOf(sizes.all).isRequired,\r\n advancedSettings: PropTypes.bool.isRequired,\r\n isAdvanced: PropTypes.bool.isRequired\r\n};\r\n\r\nFormGroup.defaultProps = {\r\n className: styles.group,\r\n size: sizes.SMALL,\r\n advancedSettings: false,\r\n isAdvanced: false\r\n};\r\n\r\nexport default FormGroup;\r\n","import ReactDOM from 'react-dom';\r\n\r\ninterface PortalProps {\r\n children: Parameters[0];\r\n target?: Parameters[1];\r\n}\r\n\r\nconst defaultTarget = document.getElementById('portal-root');\r\n\r\nfunction Portal(props: PortalProps) {\r\n const { children, target = defaultTarget } = props;\r\n\r\n if (!target) {\r\n return null;\r\n }\r\n\r\n return ReactDOM.createPortal(children, target);\r\n}\r\n\r\nexport default Portal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"AutoSuggestInput-input-Irz_T Input-input-KWeec\",\"hasError\":\"AutoSuggestInput-hasError-TzeMk Input-hasError-_3DW5\",\"hasWarning\":\"AutoSuggestInput-hasWarning-c6pm0 Input-hasWarning-K_6E_\",\"inputContainer\":\"AutoSuggestInput-inputContainer-MKwJ1\",\"suggestionsContainer\":\"AutoSuggestInput-suggestionsContainer-IdHtU\",\"suggestionsContainerOpen\":\"AutoSuggestInput-suggestionsContainerOpen-qrEjQ\",\"suggestionsList\":\"AutoSuggestInput-suggestionsList-Uq7sG\",\"suggestion\":\"AutoSuggestInput-suggestion-zjy1f\",\"suggestionHighlighted\":\"AutoSuggestInput-suggestionHighlighted-KrGhN\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Autosuggest from 'react-autosuggest';\r\nimport { Manager, Popper, Reference } from 'react-popper';\r\nimport Portal from 'Components/Portal';\r\nimport styles from './AutoSuggestInput.css';\r\n\r\nclass AutoSuggestInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._scheduleUpdate = null;\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (\r\n this._scheduleUpdate &&\r\n prevProps.suggestions !== this.props.suggestions\r\n ) {\r\n this._scheduleUpdate();\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n renderInputComponent = (inputProps) => {\r\n const { renderInputComponent } = this.props;\r\n\r\n return (\r\n \r\n {({ ref }) => {\r\n if (renderInputComponent) {\r\n return renderInputComponent(inputProps, ref);\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }}\r\n
\r\n );\r\n };\r\n\r\n renderSuggestionsContainer = ({ containerProps, children }) => {\r\n return (\r\n \r\n \r\n {({ ref: popperRef, style, scheduleUpdate }) => {\r\n this._scheduleUpdate = scheduleUpdate;\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n }}\r\n \r\n \r\n );\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onComputeMaxHeight = (data) => {\r\n const {\r\n top,\r\n bottom,\r\n width\r\n } = data.offsets.reference;\r\n\r\n const windowHeight = window.innerHeight;\r\n\r\n if ((/^botton/).test(data.placement)) {\r\n data.styles.maxHeight = windowHeight - bottom;\r\n } else {\r\n data.styles.maxHeight = top;\r\n }\r\n\r\n data.styles.width = width;\r\n\r\n return data;\r\n };\r\n\r\n onInputChange = (event, { newValue }) => {\r\n this.props.onChange({\r\n name: this.props.name,\r\n value: newValue\r\n });\r\n };\r\n\r\n onInputKeyDown = (event) => {\r\n const {\r\n name,\r\n value,\r\n suggestions,\r\n onChange\r\n } = this.props;\r\n\r\n if (\r\n event.key === 'Tab' &&\r\n suggestions.length &&\r\n suggestions[0] !== this.props.value\r\n ) {\r\n event.preventDefault();\r\n\r\n if (value) {\r\n onChange({\r\n name,\r\n value: suggestions[0]\r\n });\r\n }\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n forwardedRef,\r\n className,\r\n inputContainerClassName,\r\n name,\r\n value,\r\n placeholder,\r\n suggestions,\r\n hasError,\r\n hasWarning,\r\n getSuggestionValue,\r\n renderSuggestion,\r\n onInputChange,\r\n onInputKeyDown,\r\n onInputFocus,\r\n onInputBlur,\r\n onSuggestionsFetchRequested,\r\n onSuggestionsClearRequested,\r\n onSuggestionSelected,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const inputProps = {\r\n className: classNames(\r\n className,\r\n hasError && styles.hasError,\r\n hasWarning && styles.hasWarning\r\n ),\r\n name,\r\n value,\r\n placeholder,\r\n autoComplete: 'off',\r\n spellCheck: false,\r\n onChange: onInputChange || this.onInputChange,\r\n onKeyDown: onInputKeyDown || this.onInputKeyDown,\r\n onFocus: onInputFocus,\r\n onBlur: onInputBlur\r\n };\r\n\r\n const theme = {\r\n container: inputContainerClassName,\r\n containerOpen: styles.suggestionsContainerOpen,\r\n suggestionsContainer: styles.suggestionsContainer,\r\n suggestionsList: styles.suggestionsList,\r\n suggestion: styles.suggestion,\r\n suggestionHighlighted: styles.suggestionHighlighted\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nAutoSuggestInput.propTypes = {\r\n forwardedRef: PropTypes.func,\r\n className: PropTypes.string.isRequired,\r\n inputContainerClassName: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\r\n placeholder: PropTypes.string,\r\n suggestions: PropTypes.array.isRequired,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n enforceMaxHeight: PropTypes.bool.isRequired,\r\n minHeight: PropTypes.number.isRequired,\r\n maxHeight: PropTypes.number.isRequired,\r\n getSuggestionValue: PropTypes.func.isRequired,\r\n renderInputComponent: PropTypes.elementType,\r\n renderSuggestion: PropTypes.func.isRequired,\r\n onInputChange: PropTypes.func,\r\n onInputKeyDown: PropTypes.func,\r\n onInputFocus: PropTypes.func,\r\n onInputBlur: PropTypes.func.isRequired,\r\n onSuggestionsFetchRequested: PropTypes.func.isRequired,\r\n onSuggestionsClearRequested: PropTypes.func.isRequired,\r\n onSuggestionSelected: PropTypes.func,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nAutoSuggestInput.defaultProps = {\r\n className: styles.input,\r\n inputContainerClassName: styles.inputContainer,\r\n enforceMaxHeight: true,\r\n minHeight: 50,\r\n maxHeight: 200\r\n};\r\n\r\nexport default AutoSuggestInput;\r\n","import jdu from 'jdu';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport AutoSuggestInput from './AutoSuggestInput';\r\n\r\nclass AutoCompleteInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n suggestions: []\r\n };\r\n }\r\n\r\n //\r\n // Control\r\n\r\n getSuggestionValue(item) {\r\n return item;\r\n }\r\n\r\n renderSuggestion(item) {\r\n return item;\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = (event, { newValue }) => {\r\n this.props.onChange({\r\n name: this.props.name,\r\n value: newValue\r\n });\r\n };\r\n\r\n onInputBlur = () => {\r\n this.setState({ suggestions: [] });\r\n };\r\n\r\n onSuggestionsFetchRequested = ({ value }) => {\r\n const { values } = this.props;\r\n const lowerCaseValue = jdu.replace(value).toLowerCase();\r\n\r\n const filteredValues = values.filter((v) => {\r\n return jdu.replace(v).toLowerCase().contains(lowerCaseValue);\r\n });\r\n\r\n this.setState({ suggestions: filteredValues });\r\n };\r\n\r\n onSuggestionsClearRequested = () => {\r\n this.setState({ suggestions: [] });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n name,\r\n value,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const { suggestions } = this.state;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAutoCompleteInput.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string,\r\n values: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nAutoCompleteInput.defaultProps = {\r\n value: ''\r\n};\r\n\r\nexport default AutoCompleteInput;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport ReactMeasure from 'react-measure';\r\n\r\nclass Measure extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentWillUnmount() {\r\n this.onMeasure.cancel();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = _.debounce((payload) => {\r\n this.props.onMeasure(payload);\r\n }, 250, { leading: true, trailing: false });\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nMeasure.propTypes = {\r\n onMeasure: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Measure;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './FormInputHelpText.css';\r\n\r\nfunction FormInputHelpText(props) {\r\n const {\r\n className,\r\n text,\r\n link,\r\n tooltip,\r\n isError,\r\n isWarning,\r\n isCheckInput\r\n } = props;\r\n\r\n return (\r\n
\r\n {text}\r\n\r\n {\r\n link ?\r\n \r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n !link && tooltip ?\r\n :\r\n null\r\n }\r\n
\r\n );\r\n}\r\n\r\nFormInputHelpText.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n text: PropTypes.string.isRequired,\r\n link: PropTypes.string,\r\n tooltip: PropTypes.string,\r\n isError: PropTypes.bool,\r\n isWarning: PropTypes.bool,\r\n isCheckInput: PropTypes.bool\r\n};\r\n\r\nFormInputHelpText.defaultProps = {\r\n className: styles.helpText,\r\n isError: false,\r\n isWarning: false,\r\n isCheckInput: false\r\n};\r\n\r\nexport default FormInputHelpText;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"helpText\":\"FormInputHelpText-helpText-Z2REp\",\"isError\":\"FormInputHelpText-isError-JjyAg\",\"link\":\"FormInputHelpText-link-YQ2vD Link-link-RInnp\",\"isWarning\":\"FormInputHelpText-isWarning-f3T6M\",\"isCheckInput\":\"FormInputHelpText-isCheckInput-zYt2f\",\"details\":\"FormInputHelpText-details-sqWRq\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"CheckInput-container-FXKYv\",\"label\":\"CheckInput-label-JQ5QV\",\"checkbox\":\"CheckInput-checkbox-WEQ3S\",\"input\":\"CheckInput-input-VAM1T\",\"dangerIsChecked\":\"CheckInput-dangerIsChecked-Un0dj\",\"isDisabled\":\"CheckInput-isDisabled-DGdm7\",\"primaryIsChecked\":\"CheckInput-primaryIsChecked-bUxcU\",\"successIsChecked\":\"CheckInput-successIsChecked-PjC9g\",\"warningIsChecked\":\"CheckInput-warningIsChecked-YkKmG\",\"isNotChecked\":\"CheckInput-isNotChecked-DeQ7b\",\"isIndeterminate\":\"CheckInput-isIndeterminate-YIxOB\",\"helpText\":\"CheckInput-helpText-Cofbn FormInputHelpText-helpText-Z2REp\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport FormInputHelpText from './FormInputHelpText';\r\nimport styles from './CheckInput.css';\r\n\r\nclass CheckInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._checkbox = null;\r\n }\r\n\r\n componentDidMount() {\r\n this.setIndeterminate();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.setIndeterminate();\r\n }\r\n\r\n //\r\n // Control\r\n\r\n setIndeterminate() {\r\n if (!this._checkbox) {\r\n return;\r\n }\r\n\r\n const {\r\n value,\r\n uncheckedValue,\r\n checkedValue\r\n } = this.props;\r\n\r\n this._checkbox.indeterminate = value !== uncheckedValue && value !== checkedValue;\r\n }\r\n\r\n toggleChecked = (checked, shiftKey) => {\r\n const {\r\n name,\r\n value,\r\n checkedValue,\r\n uncheckedValue\r\n } = this.props;\r\n\r\n const newValue = checked ? checkedValue : uncheckedValue;\r\n\r\n if (value !== newValue) {\r\n this.props.onChange({\r\n name,\r\n value: newValue,\r\n shiftKey\r\n });\r\n }\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n setRef = (ref) => {\r\n this._checkbox = ref;\r\n };\r\n\r\n onClick = (event) => {\r\n if (this.props.isDisabled) {\r\n return;\r\n }\r\n\r\n const shiftKey = event.nativeEvent.shiftKey;\r\n const checked = !this._checkbox.checked;\r\n\r\n event.preventDefault();\r\n this.toggleChecked(checked, shiftKey);\r\n };\r\n\r\n onChange = (event) => {\r\n const checked = event.target.checked;\r\n const shiftKey = event.nativeEvent.shiftKey;\r\n\r\n this.toggleChecked(checked, shiftKey);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n containerClassName,\r\n name,\r\n value,\r\n checkedValue,\r\n uncheckedValue,\r\n helpText,\r\n helpTextWarning,\r\n isDisabled,\r\n kind\r\n } = this.props;\r\n\r\n const isChecked = value === checkedValue;\r\n const isUnchecked = value === uncheckedValue;\r\n const isIndeterminate = !isChecked && !isUnchecked;\r\n const isCheckClass = `${kind}IsChecked`;\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n \r\n {\r\n isChecked &&\r\n \r\n }\r\n\r\n {\r\n isIndeterminate &&\r\n \r\n }\r\n
\r\n\r\n {\r\n helpText &&\r\n \r\n }\r\n\r\n {\r\n !helpText && helpTextWarning &&\r\n \r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nCheckInput.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n containerClassName: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n checkedValue: PropTypes.bool,\r\n uncheckedValue: PropTypes.bool,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\r\n helpText: PropTypes.string,\r\n helpTextWarning: PropTypes.string,\r\n isDisabled: PropTypes.bool,\r\n kind: PropTypes.oneOf(kinds.all).isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nCheckInput.defaultProps = {\r\n className: styles.input,\r\n containerClassName: styles.container,\r\n checkedValue: true,\r\n uncheckedValue: false,\r\n kind: kinds.PRIMARY\r\n};\r\n\r\nexport default CheckInput;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons } from 'Helpers/Props';\r\nimport CheckInput from './CheckInput';\r\nimport styles from './EnhancedSelectInputOption.css';\r\n\r\nclass EnhancedSelectInputOption extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = (e) => {\r\n e.preventDefault();\r\n\r\n const {\r\n id,\r\n onSelect\r\n } = this.props;\r\n\r\n onSelect(id);\r\n };\r\n\r\n onCheckPress = () => {\r\n // CheckInput requires a handler. Swallow the change event because onPress will already handle it via event propagation.\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n id,\r\n depth,\r\n isSelected,\r\n isDisabled,\r\n isHidden,\r\n isMultiSelect,\r\n isMobile,\r\n children\r\n } = this.props;\r\n\r\n return (\r\n \r\n\r\n {\r\n depth !== 0 &&\r\n
\r\n }\r\n\r\n {\r\n isMultiSelect &&\r\n \r\n }\r\n\r\n {children}\r\n\r\n {\r\n isMobile &&\r\n
\r\n \r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nEnhancedSelectInputOption.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n depth: PropTypes.number.isRequired,\r\n isSelected: PropTypes.bool.isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n isHidden: PropTypes.bool.isRequired,\r\n isMultiSelect: PropTypes.bool.isRequired,\r\n isMobile: PropTypes.bool.isRequired,\r\n children: PropTypes.node.isRequired,\r\n onSelect: PropTypes.func.isRequired\r\n};\r\n\r\nEnhancedSelectInputOption.defaultProps = {\r\n className: styles.option,\r\n depth: 0,\r\n isDisabled: false,\r\n isHidden: false,\r\n isMultiSelect: false\r\n};\r\n\r\nexport default EnhancedSelectInputOption;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"option\":\"EnhancedSelectInputOption-option-g4V97\",\"isDisabled\":\"EnhancedSelectInputOption-isDisabled-M55XA\",\"optionCheck\":\"EnhancedSelectInputOption-optionCheck-Y7gBR CheckInput-container-FXKYv\",\"optionCheckInput\":\"EnhancedSelectInputOption-optionCheckInput-Bs9Ub CheckInput-input-VAM1T\",\"isSelected\":\"EnhancedSelectInputOption-isSelected-pIXx7\",\"isMobile\":\"EnhancedSelectInputOption-isMobile-q8Myj\",\"iconContainer\":\"EnhancedSelectInputOption-iconContainer-r4s6E\",\"isHidden\":\"EnhancedSelectInputOption-isHidden-h6uxR\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport EnhancedSelectInputOption from './EnhancedSelectInputOption';\r\nimport styles from './HintedSelectInputOption.css';\r\n\r\nfunction HintedSelectInputOption(props) {\r\n const {\r\n id,\r\n value,\r\n hint,\r\n depth,\r\n isSelected,\r\n isDisabled,\r\n dividerAfter,\r\n isMultiSelect,\r\n isMobile,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n
{value}
\r\n\r\n {\r\n hint != null &&\r\n
\r\n {hint}\r\n
\r\n }\r\n
\r\n \r\n\r\n {\r\n dividerAfter ?\r\n
:\r\n null\r\n }\r\n
\r\n );\r\n}\r\n\r\nHintedSelectInputOption.propTypes = {\r\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n value: PropTypes.string.isRequired,\r\n hint: PropTypes.node,\r\n name: PropTypes.string,\r\n depth: PropTypes.number,\r\n isSelected: PropTypes.bool.isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n dividerAfter: PropTypes.bool.isRequired,\r\n isMultiSelect: PropTypes.bool.isRequired,\r\n isMobile: PropTypes.bool.isRequired\r\n};\r\n\r\nHintedSelectInputOption.defaultProps = {\r\n isDisabled: false,\r\n dividerAfter: false,\r\n isHidden: false,\r\n isMultiSelect: false\r\n};\r\n\r\nexport default HintedSelectInputOption;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"optionText\":\"HintedSelectInputOption-optionText-QmbvS\",\"isMobile\":\"HintedSelectInputOption-isMobile-h3Yur\",\"hintText\":\"HintedSelectInputOption-hintText-iDR9s\",\"divider\":\"HintedSelectInputOption-divider-FxMNF\"};","// extracted by mini-css-extract-plugin\nexport default {\"label\":\"Label-label-DYldh\",\"danger\":\"Label-danger-NLIVv\",\"outline\":\"Label-outline-Xn6SE\",\"default\":\"Label-default-PeYXO\",\"disabled\":\"Label-disabled-zzPjC\",\"info\":\"Label-info-QWFsu\",\"inverse\":\"Label-inverse-gByCz\",\"primary\":\"Label-primary-oG9By\",\"success\":\"Label-success-KHmdj\",\"warning\":\"Label-warning-UhdwP\",\"queue\":\"Label-queue-aakku\",\"small\":\"Label-small-DLxDw\",\"medium\":\"Label-medium-Vxy3t\",\"large\":\"Label-large-qZ9AP\"};","import classNames from 'classnames';\r\nimport React, { ComponentProps, ReactNode } from 'react';\r\nimport { kinds, sizes } from 'Helpers/Props';\r\nimport { Kind } from 'Helpers/Props/kinds';\r\nimport { Size } from 'Helpers/Props/sizes';\r\nimport styles from './Label.css';\r\n\r\nexport interface LabelProps extends ComponentProps<'span'> {\r\n kind?: Extract;\r\n size?: Extract;\r\n outline?: boolean;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function Label({\r\n className = styles.label,\r\n kind = kinds.DEFAULT,\r\n size = sizes.SMALL,\r\n outline = false,\r\n ...otherProps\r\n}: LabelProps) {\r\n return (\r\n \r\n );\r\n}\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './EnhancedSelectInputSelectedValue.css';\r\n\r\nfunction EnhancedSelectInputSelectedValue(props) {\r\n const {\r\n className,\r\n children,\r\n isDisabled\r\n } = props;\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nEnhancedSelectInputSelectedValue.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n children: PropTypes.node,\r\n isDisabled: PropTypes.bool.isRequired\r\n};\r\n\r\nEnhancedSelectInputSelectedValue.defaultProps = {\r\n className: styles.selectedValue,\r\n isDisabled: false\r\n};\r\n\r\nexport default EnhancedSelectInputSelectedValue;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"selectedValue\":\"EnhancedSelectInputSelectedValue-selectedValue-ZYeSR\",\"isDisabled\":\"EnhancedSelectInputSelectedValue-isDisabled-v9VOt\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Label from 'Components/Label';\r\nimport EnhancedSelectInputSelectedValue from './EnhancedSelectInputSelectedValue';\r\nimport styles from './HintedSelectInputSelectedValue.css';\r\n\r\nfunction HintedSelectInputSelectedValue(props) {\r\n const {\r\n value,\r\n values,\r\n hint,\r\n isMultiSelect,\r\n includeHint,\r\n ...otherProps\r\n } = props;\r\n\r\n const valuesMap = isMultiSelect && _.keyBy(values, 'key');\r\n\r\n return (\r\n \r\n
\r\n {\r\n isMultiSelect ?\r\n value.map((key, index) => {\r\n const v = valuesMap[key];\r\n return (\r\n \r\n );\r\n }) :\r\n null\r\n }\r\n\r\n {\r\n isMultiSelect ? null : value\r\n }\r\n
\r\n\r\n {\r\n hint != null && includeHint ?\r\n
\r\n {hint}\r\n
:\r\n null\r\n }\r\n \r\n );\r\n}\r\n\r\nHintedSelectInputSelectedValue.propTypes = {\r\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number]))]).isRequired,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n hint: PropTypes.string,\r\n isMultiSelect: PropTypes.bool.isRequired,\r\n includeHint: PropTypes.bool.isRequired\r\n};\r\n\r\nHintedSelectInputSelectedValue.defaultProps = {\r\n isMultiSelect: false,\r\n includeHint: true\r\n};\r\n\r\nexport default HintedSelectInputSelectedValue;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"selectedValue\":\"HintedSelectInputSelectedValue-selectedValue-cvLD7 EnhancedSelectInputSelectedValue-selectedValue-ZYeSR\",\"valueText\":\"HintedSelectInputSelectedValue-valueText-kkxXq\",\"hintText\":\"HintedSelectInputSelectedValue-hintText-muqsJ\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './TextInput.css';\r\n\r\nclass TextInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._input = null;\r\n this._selectionStart = null;\r\n this._selectionEnd = null;\r\n this._selectionTimeout = null;\r\n this._isMouseTarget = false;\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('mouseup', this.onDocumentMouseUp);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('mouseup', this.onDocumentMouseUp);\r\n\r\n if (this._selectionTimeout) {\r\n this._selectionTimeout = clearTimeout(this._selectionTimeout);\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n setInputRef = (ref) => {\r\n this._input = ref;\r\n };\r\n\r\n selectionChange() {\r\n if (this._selectionTimeout) {\r\n this._selectionTimeout = clearTimeout(this._selectionTimeout);\r\n }\r\n\r\n this._selectionTimeout = setTimeout(() => {\r\n const selectionStart = this._input.selectionStart;\r\n const selectionEnd = this._input.selectionEnd;\r\n\r\n const selectionChanged = (\r\n this._selectionStart !== selectionStart ||\r\n this._selectionEnd !== selectionEnd\r\n );\r\n\r\n this._selectionStart = selectionStart;\r\n this._selectionEnd = selectionEnd;\r\n\r\n if (this.props.onSelectionChange && selectionChanged) {\r\n this.props.onSelectionChange(selectionStart, selectionEnd);\r\n }\r\n }, 10);\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = (event) => {\r\n const {\r\n name,\r\n type,\r\n onChange\r\n } = this.props;\r\n\r\n const payload = {\r\n name,\r\n value: event.target.value\r\n };\r\n\r\n // Also return the files for a file input type.\r\n\r\n if (type === 'file') {\r\n payload.files = event.target.files;\r\n }\r\n\r\n onChange(payload);\r\n };\r\n\r\n onFocus = (event) => {\r\n if (this.props.onFocus) {\r\n this.props.onFocus(event);\r\n }\r\n\r\n this.selectionChange();\r\n };\r\n\r\n onKeyUp = () => {\r\n this.selectionChange();\r\n };\r\n\r\n onMouseDown = () => {\r\n this._isMouseTarget = true;\r\n };\r\n\r\n onMouseUp = () => {\r\n this.selectionChange();\r\n };\r\n\r\n onDocumentMouseUp = () => {\r\n if (this._isMouseTarget) {\r\n this.selectionChange();\r\n }\r\n\r\n this._isMouseTarget = false;\r\n };\r\n\r\n onWheel = () => {\r\n if (this.props.type === 'number') {\r\n this._input.blur();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n type,\r\n readOnly,\r\n autoFocus,\r\n placeholder,\r\n name,\r\n value,\r\n hasError,\r\n hasWarning,\r\n hasButton,\r\n step,\r\n min,\r\n max,\r\n onBlur,\r\n onCopy\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nTextInput.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n readOnly: PropTypes.bool,\r\n autoFocus: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.array]).isRequired,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n hasButton: PropTypes.bool,\r\n step: PropTypes.number,\r\n min: PropTypes.number,\r\n max: PropTypes.number,\r\n onChange: PropTypes.func.isRequired,\r\n onFocus: PropTypes.func,\r\n onBlur: PropTypes.func,\r\n onCopy: PropTypes.func,\r\n onSelectionChange: PropTypes.func\r\n};\r\n\r\nTextInput.defaultProps = {\r\n className: styles.input,\r\n type: 'text',\r\n readOnly: false,\r\n autoFocus: false,\r\n value: ''\r\n};\r\n\r\nexport default TextInput;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"TextInput-input-svfXu Input-input-KWeec\",\"readOnly\":\"TextInput-readOnly-WH5Lg\",\"hasError\":\"TextInput-hasError-Gbw0Q Input-hasError-_3DW5\",\"hasWarning\":\"TextInput-hasWarning-ZPiVp Input-hasWarning-K_6E_\",\"hasButton\":\"TextInput-hasButton-Z1LGV Input-hasButton-XcYCR\"};","// extracted by mini-css-extract-plugin\nexport default {\"enhancedSelect\":\"EnhancedSelectInput-enhancedSelect-RG1RD Input-input-KWeec\",\"editableContainer\":\"EnhancedSelectInput-editableContainer-QdAjb\",\"hasError\":\"EnhancedSelectInput-hasError-FPHTI Input-hasError-_3DW5\",\"hasWarning\":\"EnhancedSelectInput-hasWarning-SVaLF Input-hasWarning-K_6E_\",\"isDisabled\":\"EnhancedSelectInput-isDisabled-c1BlZ\",\"dropdownArrowContainer\":\"EnhancedSelectInput-dropdownArrowContainer-AsPaM\",\"dropdownArrowContainerEditable\":\"EnhancedSelectInput-dropdownArrowContainerEditable-TbMe4\",\"dropdownArrowContainerDisabled\":\"EnhancedSelectInput-dropdownArrowContainerDisabled-NNydK EnhancedSelectInput-dropdownArrowContainer-AsPaM\",\"optionsContainer\":\"EnhancedSelectInput-optionsContainer-Ysa4r\",\"options\":\"EnhancedSelectInput-options-XkIt1 Scroller-scroller-lhubq\",\"optionsModal\":\"EnhancedSelectInput-optionsModal-QunSQ\",\"optionsModalBody\":\"EnhancedSelectInput-optionsModalBody-BGHb1 ModalBody-modalBody-RVK6D\",\"optionsModalScroller\":\"EnhancedSelectInput-optionsModalScroller-ww3Ko Scroller-scroller-lhubq\",\"loading\":\"EnhancedSelectInput-loading-lFAQq\",\"mobileCloseButtonContainer\":\"EnhancedSelectInput-mobileCloseButtonContainer-pcL9h\",\"mobileCloseButton\":\"EnhancedSelectInput-mobileCloseButton-vR_hc\"};","import classNames from 'classnames';\r\nimport _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { Manager, Popper, Reference } from 'react-popper';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Measure from 'Components/Measure';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport Portal from 'Components/Portal';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport { icons, scrollDirections, sizes } from 'Helpers/Props';\r\nimport { isMobile as isMobileUtil } from 'Utilities/browser';\r\nimport * as keyCodes from 'Utilities/Constants/keyCodes';\r\nimport getUniqueElememtId from 'Utilities/getUniqueElementId';\r\nimport HintedSelectInputOption from './HintedSelectInputOption';\r\nimport HintedSelectInputSelectedValue from './HintedSelectInputSelectedValue';\r\nimport TextInput from './TextInput';\r\nimport styles from './EnhancedSelectInput.css';\r\n\r\nconst MINIMUM_DISTANCE_FROM_EDGE = 10;\r\n\r\nfunction isArrowKey(keyCode) {\r\n return keyCode === keyCodes.UP_ARROW || keyCode === keyCodes.DOWN_ARROW;\r\n}\r\n\r\nfunction getSelectedOption(selectedIndex, values) {\r\n return values[selectedIndex];\r\n}\r\n\r\nfunction findIndex(startingIndex, direction, values) {\r\n let indexToTest = startingIndex + direction;\r\n\r\n while (indexToTest !== startingIndex) {\r\n if (indexToTest < 0) {\r\n indexToTest = values.length - 1;\r\n } else if (indexToTest >= values.length) {\r\n indexToTest = 0;\r\n }\r\n\r\n if (getSelectedOption(indexToTest, values).isDisabled) {\r\n indexToTest = indexToTest + direction;\r\n } else {\r\n return indexToTest;\r\n }\r\n }\r\n}\r\n\r\nfunction previousIndex(selectedIndex, values) {\r\n return findIndex(selectedIndex, -1, values);\r\n}\r\n\r\nfunction nextIndex(selectedIndex, values) {\r\n return findIndex(selectedIndex, 1, values);\r\n}\r\n\r\nfunction getSelectedIndex(props) {\r\n const {\r\n value,\r\n values\r\n } = props;\r\n\r\n if (Array.isArray(value)) {\r\n return values.findIndex((v) => {\r\n return value.size && v.key === value[0];\r\n });\r\n }\r\n\r\n return values.findIndex((v) => {\r\n return v.key === value;\r\n });\r\n}\r\n\r\nfunction isSelectedItem(index, props) {\r\n const {\r\n value,\r\n values\r\n } = props;\r\n\r\n if (Array.isArray(value)) {\r\n return value.includes(values[index].key);\r\n }\r\n\r\n return values[index].key === value;\r\n}\r\n\r\nfunction getKey(selectedIndex, values) {\r\n return values[selectedIndex].key;\r\n}\r\n\r\nclass EnhancedSelectInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._scheduleUpdate = null;\r\n this._buttonId = getUniqueElememtId();\r\n this._optionsId = getUniqueElememtId();\r\n\r\n this.state = {\r\n isOpen: false,\r\n selectedIndex: getSelectedIndex(props),\r\n width: 0,\r\n isMobile: isMobileUtil()\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (this._scheduleUpdate) {\r\n this._scheduleUpdate();\r\n }\r\n\r\n if (!Array.isArray(this.props.value)) {\r\n if (prevProps.value !== this.props.value || prevProps.values !== this.props.values) {\r\n this.setState({\r\n selectedIndex: getSelectedIndex(this.props)\r\n });\r\n }\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n _addListener() {\r\n window.addEventListener('click', this.onWindowClick);\r\n }\r\n\r\n _removeListener() {\r\n window.removeEventListener('click', this.onWindowClick);\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onComputeMaxHeight = (data) => {\r\n const windowHeight = window.innerHeight;\r\n\r\n data.styles.maxHeight = windowHeight - MINIMUM_DISTANCE_FROM_EDGE;\r\n\r\n return data;\r\n };\r\n\r\n onWindowClick = (event) => {\r\n const button = document.getElementById(this._buttonId);\r\n const options = document.getElementById(this._optionsId);\r\n\r\n if (!button || !event.target.isConnected || this.state.isMobile) {\r\n return;\r\n }\r\n\r\n if (\r\n !button.contains(event.target) &&\r\n options &&\r\n !options.contains(event.target) &&\r\n this.state.isOpen\r\n ) {\r\n this.setState({ isOpen: false });\r\n this._removeListener();\r\n }\r\n };\r\n\r\n onFocus = () => {\r\n if (this.state.isOpen) {\r\n this._removeListener();\r\n this.setState({ isOpen: false });\r\n }\r\n };\r\n\r\n onBlur = () => {\r\n if (!this.props.isEditable) {\r\n // Calling setState without this check prevents the click event from being properly handled on Chrome (it is on firefox)\r\n const origIndex = getSelectedIndex(this.props);\r\n\r\n if (origIndex !== this.state.selectedIndex) {\r\n this.setState({ selectedIndex: origIndex });\r\n }\r\n }\r\n };\r\n\r\n onKeyDown = (event) => {\r\n const {\r\n values\r\n } = this.props;\r\n\r\n const {\r\n isOpen,\r\n selectedIndex\r\n } = this.state;\r\n\r\n const keyCode = event.keyCode;\r\n const newState = {};\r\n\r\n if (!isOpen) {\r\n if (isArrowKey(keyCode)) {\r\n event.preventDefault();\r\n newState.isOpen = true;\r\n }\r\n\r\n if (\r\n selectedIndex == null || selectedIndex === -1 ||\r\n getSelectedOption(selectedIndex, values).isDisabled\r\n ) {\r\n if (keyCode === keyCodes.UP_ARROW) {\r\n newState.selectedIndex = previousIndex(0, values);\r\n } else if (keyCode === keyCodes.DOWN_ARROW) {\r\n newState.selectedIndex = nextIndex(values.length - 1, values);\r\n }\r\n }\r\n\r\n this.setState(newState);\r\n return;\r\n }\r\n\r\n if (keyCode === keyCodes.UP_ARROW) {\r\n event.preventDefault();\r\n newState.selectedIndex = previousIndex(selectedIndex, values);\r\n }\r\n\r\n if (keyCode === keyCodes.DOWN_ARROW) {\r\n event.preventDefault();\r\n newState.selectedIndex = nextIndex(selectedIndex, values);\r\n }\r\n\r\n if (keyCode === keyCodes.ENTER) {\r\n event.preventDefault();\r\n newState.isOpen = false;\r\n this.onSelect(getKey(selectedIndex, values));\r\n }\r\n\r\n if (keyCode === keyCodes.TAB) {\r\n newState.isOpen = false;\r\n this.onSelect(getKey(selectedIndex, values));\r\n }\r\n\r\n if (keyCode === keyCodes.ESCAPE) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n newState.isOpen = false;\r\n newState.selectedIndex = getSelectedIndex(this.props);\r\n }\r\n\r\n if (!_.isEmpty(newState)) {\r\n this.setState(newState);\r\n }\r\n };\r\n\r\n onPress = () => {\r\n if (this.state.isOpen) {\r\n this._removeListener();\r\n } else {\r\n this._addListener();\r\n }\r\n\r\n if (!this.state.isOpen && this.props.onOpen) {\r\n this.props.onOpen();\r\n }\r\n\r\n this.setState({ isOpen: !this.state.isOpen });\r\n };\r\n\r\n onSelect = (newValue) => {\r\n const { name, value, values, onChange } = this.props;\r\n const additionalProperties = values.find((v) => v.key === newValue)?.additionalProperties;\r\n\r\n if (Array.isArray(value)) {\r\n let arrayValue = null;\r\n const index = value.indexOf(newValue);\r\n\r\n if (index === -1) {\r\n arrayValue = values.map((v) => v.key).filter((v) => (v === newValue) || value.includes(v));\r\n } else {\r\n arrayValue = [...value];\r\n arrayValue.splice(index, 1);\r\n }\r\n onChange({\r\n name,\r\n value: arrayValue,\r\n additionalProperties\r\n });\r\n } else {\r\n this.setState({ isOpen: false });\r\n\r\n onChange({\r\n name,\r\n value: newValue,\r\n additionalProperties\r\n });\r\n }\r\n };\r\n\r\n onMeasure = ({ width }) => {\r\n this.setState({ width });\r\n };\r\n\r\n onOptionsModalClose = () => {\r\n this.setState({ isOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n disabledClassName,\r\n name,\r\n value,\r\n values,\r\n isDisabled,\r\n isEditable,\r\n isFetching,\r\n hasError,\r\n hasWarning,\r\n valueOptions,\r\n selectedValueOptions,\r\n selectedValueComponent: SelectedValueComponent,\r\n optionComponent: OptionComponent,\r\n onChange\r\n } = this.props;\r\n\r\n const {\r\n selectedIndex,\r\n width,\r\n isOpen,\r\n isMobile\r\n } = this.state;\r\n\r\n const isMultiSelect = Array.isArray(value);\r\n const selectedOption = getSelectedOption(selectedIndex, values);\r\n let selectedValue = value;\r\n\r\n if (!values.length) {\r\n selectedValue = isMultiSelect ? [] : '';\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {({ ref }) => (\r\n \r\n \r\n {\r\n isEditable ?\r\n \r\n \r\n \r\n {\r\n isFetching ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n isFetching ?\r\n null :\r\n \r\n }\r\n \r\n
:\r\n \r\n \r\n {selectedOption ? selectedOption.value : null}\r\n \r\n\r\n \r\n\r\n {\r\n isFetching ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n isFetching ?\r\n null :\r\n \r\n }\r\n
\r\n \r\n }\r\n \r\n
\r\n )}\r\n \r\n \r\n \r\n {({ ref, style, scheduleUpdate }) => {\r\n this._scheduleUpdate = scheduleUpdate;\r\n\r\n return (\r\n \r\n {\r\n isOpen && !isMobile ?\r\n \r\n {\r\n values.map((v, index) => {\r\n const hasParent = v.parentKey !== undefined;\r\n const depth = hasParent ? 1 : 0;\r\n const parentSelected = hasParent && Array.isArray(value) && value.includes(v.parentKey);\r\n return (\r\n \r\n {v.value}\r\n \r\n );\r\n })\r\n }\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n }\r\n \r\n \r\n \r\n\r\n {\r\n isMobile ?\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n {\r\n values.map((v, index) => {\r\n const hasParent = v.parentKey !== undefined;\r\n const depth = hasParent ? 1 : 0;\r\n const parentSelected = hasParent && value.includes(v.parentKey);\r\n return (\r\n \r\n {v.value}\r\n \r\n );\r\n })\r\n }\r\n
\r\n \r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nEnhancedSelectInput.propTypes = {\r\n className: PropTypes.string,\r\n disabledClassName: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.arrayOf(PropTypes.string), PropTypes.arrayOf(PropTypes.number)]).isRequired,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isEditable: PropTypes.bool.isRequired,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n valueOptions: PropTypes.object.isRequired,\r\n selectedValueOptions: PropTypes.object.isRequired,\r\n selectedValueComponent: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\r\n optionComponent: PropTypes.elementType,\r\n onOpen: PropTypes.func,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nEnhancedSelectInput.defaultProps = {\r\n className: styles.enhancedSelect,\r\n disabledClassName: styles.isDisabled,\r\n isDisabled: false,\r\n isFetching: false,\r\n isEditable: false,\r\n valueOptions: {},\r\n selectedValueOptions: {},\r\n selectedValueComponent: HintedSelectInputSelectedValue,\r\n optionComponent: HintedSelectInputOption\r\n};\r\n\r\nexport default EnhancedSelectInput;\r\n","import React from 'react';\r\nimport translate from 'Utilities/String/translate';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\n\r\ninterface AvailabilitySelectInputProps {\r\n includeNoChange: boolean;\r\n includeNoChangeDisabled?: boolean;\r\n includeMixed?: boolean;\r\n}\r\n\r\ninterface IMovieAvailabilityOption {\r\n key: string;\r\n value: string;\r\n format?: string;\r\n isDisabled?: boolean;\r\n}\r\n\r\nconst movieAvailabilityOptions: IMovieAvailabilityOption[] = [\r\n {\r\n key: 'announced',\r\n get value() {\r\n return translate('Announced');\r\n },\r\n },\r\n {\r\n key: 'inCinemas',\r\n get value() {\r\n return translate('InCinemas');\r\n },\r\n },\r\n {\r\n key: 'released',\r\n get value() {\r\n return translate('Released');\r\n },\r\n },\r\n];\r\n\r\nfunction AvailabilitySelectInput(props: AvailabilitySelectInputProps) {\r\n const values = [...movieAvailabilityOptions];\r\n\r\n const {\r\n includeNoChange = false,\r\n includeNoChangeDisabled = true,\r\n includeMixed = false,\r\n } = props;\r\n\r\n if (includeNoChange) {\r\n values.unshift({\r\n key: 'noChange',\r\n value: translate('NoChange'),\r\n isDisabled: includeNoChangeDisabled,\r\n });\r\n }\r\n\r\n if (includeMixed) {\r\n values.unshift({\r\n key: 'mixed',\r\n value: `(${translate('Mixed')})`,\r\n isDisabled: true,\r\n });\r\n }\r\n\r\n return ;\r\n}\r\n\r\nexport default AvailabilitySelectInput;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\",\"spinnerContainer\":\"SpinnerButton-spinnerContainer-GOQ2V\",\"spinner\":\"SpinnerButton-spinner-hbCOH\",\"label\":\"SpinnerButton-label-YD8Ey\",\"isSpinning\":\"SpinnerButton-isSpinning-DGQnw\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport { icons } from 'Helpers/Props';\r\nimport Button from './Button';\r\nimport styles from './SpinnerButton.css';\r\n\r\nfunction SpinnerButton(props) {\r\n const {\r\n className,\r\n isSpinning,\r\n isDisabled,\r\n spinnerIcon,\r\n children,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n {children}\r\n \r\n \r\n );\r\n}\r\n\r\nSpinnerButton.propTypes = {\r\n ...Button.Props,\r\n className: PropTypes.string.isRequired,\r\n isSpinning: PropTypes.bool.isRequired,\r\n isDisabled: PropTypes.bool,\r\n spinnerIcon: PropTypes.object.isRequired,\r\n children: PropTypes.node\r\n};\r\n\r\nSpinnerButton.defaultProps = {\r\n className: styles.button,\r\n spinnerIcon: icons.SPINNER\r\n};\r\n\r\nexport default SpinnerButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"FormInputButton-button-qvTt5 Button-button-paJ9a Link-link-RInnp\",\"middleButton\":\"FormInputButton-middleButton-n2rOv\"};","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport Button, { ButtonProps } from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport { kinds } from 'Helpers/Props';\r\nimport styles from './FormInputButton.css';\r\n\r\nexport interface FormInputButtonProps extends ButtonProps {\r\n canSpin?: boolean;\r\n isLastButton?: boolean;\r\n}\r\n\r\nfunction FormInputButton({\r\n className = styles.button,\r\n canSpin = false,\r\n isLastButton = true,\r\n ...otherProps\r\n}: FormInputButtonProps) {\r\n if (canSpin) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default FormInputButton;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport ReCAPTCHA from 'react-google-recaptcha';\r\nimport Icon from 'Components/Icon';\r\nimport { icons } from 'Helpers/Props';\r\nimport FormInputButton from './FormInputButton';\r\nimport TextInput from './TextInput';\r\nimport styles from './CaptchaInput.css';\r\n\r\nfunction CaptchaInput(props) {\r\n const {\r\n className,\r\n name,\r\n value,\r\n hasError,\r\n hasWarning,\r\n refreshing,\r\n siteKey,\r\n secretToken,\r\n onChange,\r\n onRefreshPress,\r\n onCaptchaChange\r\n } = props;\r\n\r\n return (\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n {\r\n !!siteKey && !!secretToken &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nCaptchaInput.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n refreshing: PropTypes.bool.isRequired,\r\n siteKey: PropTypes.string,\r\n secretToken: PropTypes.string,\r\n onChange: PropTypes.func.isRequired,\r\n onRefreshPress: PropTypes.func.isRequired,\r\n onCaptchaChange: PropTypes.func.isRequired\r\n};\r\n\r\nCaptchaInput.defaultProps = {\r\n className: styles.input,\r\n value: ''\r\n};\r\n\r\nexport default CaptchaInput;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"captchaInputWrapper\":\"CaptchaInput-captchaInputWrapper-SGGbE\",\"input\":\"CaptchaInput-input-hZojs Input-input-KWeec\",\"hasError\":\"CaptchaInput-hasError-vrVc9 Input-hasError-_3DW5\",\"hasWarning\":\"CaptchaInput-hasWarning-gqCgC Input-hasWarning-K_6E_\",\"hasButton\":\"CaptchaInput-hasButton-JL2W4 Input-hasButton-XcYCR\",\"recaptchaWrapper\":\"CaptchaInput-recaptchaWrapper-edEg_\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { getCaptchaCookie, refreshCaptcha, resetCaptcha } from 'Store/Actions/captchaActions';\r\nimport CaptchaInput from './CaptchaInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.captcha,\r\n (captcha) => {\r\n return captcha;\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n refreshCaptcha,\r\n getCaptchaCookie,\r\n resetCaptcha\r\n};\r\n\r\nclass CaptchaInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n name,\r\n token,\r\n onChange\r\n } = this.props;\r\n\r\n if (token && token !== prevProps.token) {\r\n onChange({ name, value: token });\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.props.resetCaptcha();\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onRefreshPress = () => {\r\n const {\r\n provider,\r\n providerData\r\n } = this.props;\r\n\r\n this.props.refreshCaptcha({ provider, providerData });\r\n };\r\n\r\n onCaptchaChange = (captchaResponse) => {\r\n // If the captcha has expired `captchaResponse` will be null.\r\n // In the event it's null don't try to get the captchaCookie.\r\n // TODO: Should we clear the cookie? or reset the captcha?\r\n\r\n if (!captchaResponse) {\r\n return;\r\n }\r\n\r\n const {\r\n provider,\r\n providerData\r\n } = this.props;\r\n\r\n this.props.getCaptchaCookie({ provider, providerData, captchaResponse });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCaptchaInputConnector.propTypes = {\r\n provider: PropTypes.string.isRequired,\r\n providerData: PropTypes.object.isRequired,\r\n name: PropTypes.string.isRequired,\r\n token: PropTypes.string,\r\n onChange: PropTypes.func.isRequired,\r\n refreshCaptcha: PropTypes.func.isRequired,\r\n getCaptchaCookie: PropTypes.func.isRequired,\r\n resetCaptcha: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CaptchaInputConnector);\r\n","import PropTypes from 'prop-types';\r\n\r\nconst tagShape = {\r\n id: PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string]).isRequired,\r\n name: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired\r\n};\r\n\r\nexport default tagShape;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { kinds } from 'Helpers/Props';\r\nimport tagShape from 'Helpers/Props/Shapes/tagShape';\r\nimport styles from './TagInputInput.css';\r\n\r\nclass TagInputInput extends Component {\r\n\r\n onMouseDown = (event) => {\r\n event.preventDefault();\r\n\r\n const {\r\n isFocused,\r\n onInputContainerPress\r\n } = this.props;\r\n\r\n if (isFocused) {\r\n return;\r\n }\r\n\r\n onInputContainerPress();\r\n };\r\n\r\n render() {\r\n const {\r\n forwardedRef,\r\n className,\r\n tags,\r\n inputProps,\r\n kind,\r\n canEdit,\r\n tagComponent: TagComponent,\r\n onTagDelete,\r\n onTagEdit\r\n } = this.props;\r\n\r\n return (\r\n \r\n {\r\n tags.map((tag, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nTagInputInput.propTypes = {\r\n forwardedRef: PropTypes.func,\r\n className: PropTypes.string.isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.shape(tagShape)).isRequired,\r\n inputProps: PropTypes.object.isRequired,\r\n kind: PropTypes.oneOf(kinds.all).isRequired,\r\n isFocused: PropTypes.bool.isRequired,\r\n canEdit: PropTypes.bool.isRequired,\r\n tagComponent: PropTypes.elementType.isRequired,\r\n onTagDelete: PropTypes.func.isRequired,\r\n onTagEdit: PropTypes.func.isRequired,\r\n onInputContainerPress: PropTypes.func.isRequired\r\n};\r\n\r\nTagInputInput.defaultProps = {\r\n className: styles.inputContainer\r\n};\r\n\r\nexport default TagInputInput;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"inputContainer\":\"TagInputInput-inputContainer-b14Au\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport tagShape from 'Helpers/Props/Shapes/tagShape';\r\nimport styles from './TagInputTag.css';\r\n\r\nclass TagInputTag extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onDelete = () => {\r\n const {\r\n index,\r\n tag,\r\n onDelete\r\n } = this.props;\r\n\r\n onDelete({\r\n index,\r\n id: tag.id\r\n });\r\n };\r\n\r\n onEdit = () => {\r\n const {\r\n index,\r\n tag,\r\n onEdit\r\n } = this.props;\r\n\r\n onEdit({\r\n index,\r\n id: tag.id,\r\n value: tag.name\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n tag,\r\n kind,\r\n canEdit\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n {tag.name}\r\n \r\n\r\n {\r\n canEdit ?\r\n
\r\n \r\n
:\r\n null\r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nTagInputTag.propTypes = {\r\n index: PropTypes.number.isRequired,\r\n tag: PropTypes.shape(tagShape),\r\n kind: PropTypes.oneOf(kinds.all).isRequired,\r\n canEdit: PropTypes.bool.isRequired,\r\n onDelete: PropTypes.func.isRequired,\r\n onEdit: PropTypes.func.isRequired\r\n};\r\n\r\nexport default TagInputTag;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"TagInputTag-tag-njPEe\",\"link\":\"TagInputTag-link-iJdlh\",\"linkWithEdit\":\"TagInputTag-linkWithEdit-mn76A\",\"editContainer\":\"TagInputTag-editContainer-w53jt\",\"editButton\":\"TagInputTag-editButton-NWOuM IconButton-button-t4C5V Link-link-RInnp\",\"label\":\"TagInputTag-label-pMnFv Label-label-DYldh\"};","import classNames from 'classnames';\r\nimport _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { kinds } from 'Helpers/Props';\r\nimport tagShape from 'Helpers/Props/Shapes/tagShape';\r\nimport AutoSuggestInput from './AutoSuggestInput';\r\nimport TagInputInput from './TagInputInput';\r\nimport TagInputTag from './TagInputTag';\r\nimport styles from './TagInput.css';\r\n\r\nfunction getTag(value, selectedIndex, suggestions, allowNew) {\r\n if (selectedIndex == null && value) {\r\n const existingTag = suggestions.find((suggestion) => suggestion.name === value);\r\n\r\n if (existingTag) {\r\n return existingTag;\r\n } else if (allowNew) {\r\n return { name: value };\r\n }\r\n } else if (selectedIndex != null) {\r\n return suggestions[selectedIndex];\r\n }\r\n}\r\n\r\nclass TagInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n value: '',\r\n suggestions: [],\r\n isFocused: false\r\n };\r\n\r\n this._autosuggestRef = null;\r\n }\r\n\r\n componentWillUnmount() {\r\n this.addTag.cancel();\r\n }\r\n\r\n //\r\n // Control\r\n\r\n _setAutosuggestRef = (ref) => {\r\n this._autosuggestRef = ref;\r\n };\r\n\r\n getSuggestionValue({ name }) {\r\n return name;\r\n }\r\n\r\n shouldRenderSuggestions = (value) => {\r\n return value.length >= this.props.minQueryLength;\r\n };\r\n\r\n renderSuggestion({ name }) {\r\n return name;\r\n }\r\n\r\n addTag = _.debounce((tag) => {\r\n this.props.onTagAdd(tag);\r\n\r\n this.setState({\r\n value: '',\r\n suggestions: []\r\n });\r\n }, 250, { leading: true, trailing: false });\r\n\r\n //\r\n // Listeners\r\n\r\n onTagEdit = ({ value, ...otherProps }) => {\r\n const currentValue = this.state.value;\r\n\r\n if (currentValue && this.props.onTagReplace) {\r\n this.props.onTagReplace(otherProps, { name: currentValue });\r\n } else {\r\n this.props.onTagDelete(otherProps);\r\n }\r\n\r\n this.setState({ value });\r\n };\r\n\r\n onInputContainerPress = () => {\r\n this._autosuggestRef.input.focus();\r\n };\r\n\r\n onInputChange = (event, { newValue, method }) => {\r\n const value = _.isObject(newValue) ? newValue.name : newValue;\r\n\r\n if (method === 'type') {\r\n this.setState({ value });\r\n }\r\n };\r\n\r\n onInputKeyDown = (event) => {\r\n const {\r\n tags,\r\n allowNew,\r\n delimiters,\r\n onTagDelete\r\n } = this.props;\r\n\r\n const {\r\n value,\r\n suggestions\r\n } = this.state;\r\n\r\n const key = event.key;\r\n\r\n if (key === 'Backspace' && !value.length) {\r\n const index = tags.length - 1;\r\n\r\n if (index >= 0) {\r\n onTagDelete({ index, id: tags[index].id });\r\n }\r\n\r\n setTimeout(() => {\r\n this.onSuggestionsFetchRequested({ value: '' });\r\n });\r\n\r\n event.preventDefault();\r\n }\r\n\r\n if (delimiters.includes(key)) {\r\n const selectedIndex = this._autosuggestRef.highlightedSuggestionIndex;\r\n const tag = getTag(value, selectedIndex, suggestions, allowNew);\r\n\r\n if (tag) {\r\n this.addTag(tag);\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n onInputFocus = () => {\r\n this.setState({ isFocused: true });\r\n };\r\n\r\n onInputBlur = () => {\r\n this.setState({ isFocused: false });\r\n\r\n if (!this._autosuggestRef) {\r\n return;\r\n }\r\n\r\n const {\r\n allowNew\r\n } = this.props;\r\n\r\n const {\r\n value,\r\n suggestions\r\n } = this.state;\r\n\r\n const selectedIndex = this._autosuggestRef.highlightedSuggestionIndex;\r\n const tag = getTag(value, selectedIndex, suggestions, allowNew);\r\n\r\n if (tag) {\r\n this.addTag(tag);\r\n }\r\n };\r\n\r\n onSuggestionsFetchRequested = ({ value }) => {\r\n const lowerCaseValue = value.toLowerCase();\r\n\r\n const {\r\n tags,\r\n tagList\r\n } = this.props;\r\n\r\n const suggestions = tagList.filter((tag) => {\r\n return (\r\n tag.name.toLowerCase().includes(lowerCaseValue) &&\r\n !tags.some((t) => t.id === tag.id));\r\n });\r\n\r\n this.setState({ suggestions });\r\n };\r\n\r\n onSuggestionsClearRequested = () => {\r\n // Required because props aren't always rendered, but no-op\r\n // because we don't want to reset the paths after a path is selected.\r\n };\r\n\r\n onSuggestionSelected = (event, { suggestion }) => {\r\n this.addTag(suggestion);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n renderInputComponent = (inputProps, forwardedRef) => {\r\n const {\r\n tags,\r\n kind,\r\n canEdit,\r\n tagComponent,\r\n onTagDelete\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n className,\r\n inputContainerClassName,\r\n hasError,\r\n hasWarning,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n value,\r\n suggestions,\r\n isFocused\r\n } = this.state;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nTagInput.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n inputContainerClassName: PropTypes.string.isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.shape(tagShape)).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.shape(tagShape)).isRequired,\r\n allowNew: PropTypes.bool.isRequired,\r\n kind: PropTypes.oneOf(kinds.all).isRequired,\r\n placeholder: PropTypes.string.isRequired,\r\n delimiters: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n minQueryLength: PropTypes.number.isRequired,\r\n canEdit: PropTypes.bool,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n tagComponent: PropTypes.elementType.isRequired,\r\n onTagAdd: PropTypes.func.isRequired,\r\n onTagDelete: PropTypes.func.isRequired,\r\n onTagReplace: PropTypes.func\r\n};\r\n\r\nTagInput.defaultProps = {\r\n className: styles.internalInput,\r\n inputContainerClassName: styles.input,\r\n allowNew: true,\r\n kind: kinds.INFO,\r\n placeholder: '',\r\n delimiters: ['Tab', 'Enter', ' ', ','],\r\n minQueryLength: 1,\r\n canEdit: false,\r\n tagComponent: TagInputTag\r\n};\r\n\r\nexport default TagInput;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"TagInput-input-WFs2s AutoSuggestInput-input-Irz_T Input-input-KWeec\",\"isFocused\":\"TagInput-isFocused-r5YrC\",\"hasError\":\"TagInput-hasError-H2wEt Input-hasError-_3DW5\",\"hasWarning\":\"TagInput-hasWarning-Lms3G Input-hasWarning-K_6E_\",\"internalInput\":\"TagInput-internalInput-bbdd_\"};","// extracted by mini-css-extract-plugin\nexport default {\"deviceInputWrapper\":\"DeviceInput-deviceInputWrapper-ca_nS\",\"input\":\"DeviceInput-input-fQj3h TagInput-input-WFs2s AutoSuggestInput-input-Irz_T Input-input-KWeec Input-hasButton-XcYCR\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport { icons } from 'Helpers/Props';\r\nimport tagShape from 'Helpers/Props/Shapes/tagShape';\r\nimport FormInputButton from './FormInputButton';\r\nimport TagInput from './TagInput';\r\nimport styles from './DeviceInput.css';\r\n\r\nclass DeviceInput extends Component {\r\n\r\n onTagAdd = (device) => {\r\n const {\r\n name,\r\n value,\r\n onChange\r\n } = this.props;\r\n\r\n // New tags won't have an ID, only a name.\r\n const deviceId = device.id || device.name;\r\n\r\n onChange({\r\n name,\r\n value: [...value, deviceId]\r\n });\r\n };\r\n\r\n onTagDelete = ({ index }) => {\r\n const {\r\n name,\r\n value,\r\n onChange\r\n } = this.props;\r\n\r\n const newValue = value.slice();\r\n newValue.splice(index, 1);\r\n\r\n onChange({\r\n name,\r\n value: newValue\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n name,\r\n items,\r\n selectedDevices,\r\n hasError,\r\n hasWarning,\r\n isFetching,\r\n onRefreshPress\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nDeviceInput.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,\r\n items: PropTypes.arrayOf(PropTypes.shape(tagShape)).isRequired,\r\n selectedDevices: PropTypes.arrayOf(PropTypes.shape(tagShape)).isRequired,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n onRefreshPress: PropTypes.func.isRequired\r\n};\r\n\r\nDeviceInput.defaultProps = {\r\n className: styles.deviceInputWrapper,\r\n inputClassName: styles.input\r\n};\r\n\r\nexport default DeviceInput;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearOptions, defaultState, fetchOptions } from 'Store/Actions/providerOptionActions';\r\nimport DeviceInput from './DeviceInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { value }) => value,\r\n (state) => state.providerOptions.devices || defaultState,\r\n (value, devices) => {\r\n\r\n return {\r\n ...devices,\r\n selectedDevices: value.map((valueDevice) => {\r\n // Disable equality ESLint rule so we don't need to worry about\r\n // a type mismatch between the value items and the device ID.\r\n // eslint-disable-next-line eqeqeq\r\n const device = devices.items.find((d) => d.id == valueDevice);\r\n\r\n if (device) {\r\n return {\r\n id: device.id,\r\n name: `${device.name} (${device.id})`\r\n };\r\n }\r\n\r\n return {\r\n id: valueDevice,\r\n name: `Unknown (${valueDevice})`\r\n };\r\n })\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchOptions: fetchOptions,\r\n dispatchClearOptions: clearOptions\r\n};\r\n\r\nclass DeviceInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount = () => {\r\n this._populate();\r\n };\r\n\r\n componentWillUnmount = () => {\r\n this.props.dispatchClearOptions({ section: 'devices' });\r\n };\r\n\r\n //\r\n // Control\r\n\r\n _populate() {\r\n const {\r\n provider,\r\n providerData,\r\n dispatchFetchOptions\r\n } = this.props;\r\n\r\n dispatchFetchOptions({\r\n section: 'devices',\r\n action: 'getDevices',\r\n provider,\r\n providerData\r\n });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onRefreshPress = () => {\r\n this._populate();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDeviceInputConnector.propTypes = {\r\n provider: PropTypes.string.isRequired,\r\n providerData: PropTypes.object.isRequired,\r\n name: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n dispatchFetchOptions: PropTypes.func.isRequired,\r\n dispatchClearOptions: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(DeviceInputConnector);\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchDownloadClients } from 'Store/Actions/settingsActions';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.downloadClients,\r\n (state, { includeAny }) => includeAny,\r\n (state, { protocol }) => protocol,\r\n (downloadClients, includeAny, protocolFilter) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items\r\n } = downloadClients;\r\n\r\n const filteredItems = items.filter((item) => item.protocol === protocolFilter);\r\n\r\n const values = _.map(filteredItems.sort(sortByProp('name')), (downloadClient) => {\r\n return {\r\n key: downloadClient.id,\r\n value: downloadClient.name,\r\n hint: `(${downloadClient.id})`\r\n };\r\n });\r\n\r\n if (includeAny) {\r\n values.unshift({\r\n key: 0,\r\n value: `(${translate('Any')})`\r\n });\r\n }\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n values\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchDownloadClients: fetchDownloadClients\r\n};\r\n\r\nclass DownloadClientSelectInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n if (!this.props.isPopulated) {\r\n this.props.dispatchFetchDownloadClients();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = ({ name, value }) => {\r\n this.props.onChange({ name, value: parseInt(value) });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDownloadClientSelectInputConnector.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n includeAny: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n dispatchFetchDownloadClients: PropTypes.func.isRequired\r\n};\r\n\r\nDownloadClientSelectInputConnector.defaultProps = {\r\n includeAny: false,\r\n protocol: 'torrent'\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(DownloadClientSelectInputConnector);\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearOptions, defaultState, fetchOptions } from 'Store/Actions/providerOptionActions';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\n\r\nconst importantFieldNames = [\r\n 'baseUrl',\r\n 'apiPath',\r\n 'apiKey',\r\n 'authToken'\r\n];\r\n\r\nfunction getProviderDataKey(providerData) {\r\n if (!providerData || !providerData.fields) {\r\n return null;\r\n }\r\n\r\n const fields = providerData.fields\r\n .filter((f) => importantFieldNames.includes(f.name))\r\n .map((f) => f.value);\r\n\r\n return fields;\r\n}\r\n\r\nfunction getSelectOptions(items) {\r\n if (!items) {\r\n return [];\r\n }\r\n\r\n return items.map((option) => {\r\n return {\r\n key: option.value,\r\n value: option.name,\r\n hint: option.hint,\r\n parentKey: option.parentValue,\r\n isDisabled: option.isDisabled,\r\n additionalProperties: option.additionalProperties\r\n };\r\n });\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { selectOptionsProviderAction }) => state.providerOptions[selectOptionsProviderAction] || defaultState,\r\n (options) => {\r\n if (options) {\r\n return {\r\n isFetching: options.isFetching,\r\n values: getSelectOptions(options.items)\r\n };\r\n }\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchOptions: fetchOptions,\r\n dispatchClearOptions: clearOptions\r\n};\r\n\r\nclass EnhancedSelectInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n refetchRequired: false\r\n };\r\n }\r\n\r\n componentDidMount = () => {\r\n this._populate();\r\n };\r\n\r\n componentDidUpdate = (prevProps) => {\r\n const prevKey = getProviderDataKey(prevProps.providerData);\r\n const nextKey = getProviderDataKey(this.props.providerData);\r\n\r\n if (!_.isEqual(prevKey, nextKey)) {\r\n this.setState({ refetchRequired: true });\r\n }\r\n };\r\n\r\n componentWillUnmount = () => {\r\n this._cleanup();\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onOpen = () => {\r\n if (this.state.refetchRequired) {\r\n this._populate();\r\n }\r\n };\r\n\r\n //\r\n // Control\r\n\r\n _populate() {\r\n const {\r\n provider,\r\n providerData,\r\n selectOptionsProviderAction,\r\n dispatchFetchOptions\r\n } = this.props;\r\n\r\n if (selectOptionsProviderAction) {\r\n this.setState({ refetchRequired: false });\r\n dispatchFetchOptions({\r\n section: selectOptionsProviderAction,\r\n action: selectOptionsProviderAction,\r\n provider,\r\n providerData\r\n });\r\n }\r\n }\r\n\r\n _cleanup() {\r\n const {\r\n selectOptionsProviderAction,\r\n dispatchClearOptions\r\n } = this.props;\r\n\r\n if (selectOptionsProviderAction) {\r\n dispatchClearOptions({ section: selectOptionsProviderAction });\r\n }\r\n }\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEnhancedSelectInputConnector.propTypes = {\r\n provider: PropTypes.string.isRequired,\r\n providerData: PropTypes.object.isRequired,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.arrayOf(PropTypes.string), PropTypes.arrayOf(PropTypes.number)]).isRequired,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n selectOptionsProviderAction: PropTypes.string,\r\n onChange: PropTypes.func.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n dispatchFetchOptions: PropTypes.func.isRequired,\r\n dispatchClearOptions: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EnhancedSelectInputConnector);\r\n","import React, { useCallback } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\n\r\nconst selectIndexerFlagsValues = (selectedFlags: number) =>\r\n createSelector(\r\n (state: AppState) => state.settings.indexerFlags,\r\n (indexerFlags) => {\r\n const value = indexerFlags.items.reduce((acc: number[], { id }) => {\r\n // eslint-disable-next-line no-bitwise\r\n if ((selectedFlags & id) === id) {\r\n acc.push(id);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n const values = indexerFlags.items.map(({ id, name }) => ({\r\n key: id,\r\n value: name,\r\n }));\r\n\r\n return {\r\n value,\r\n values,\r\n };\r\n }\r\n );\r\n\r\ninterface IndexerFlagsSelectInputProps {\r\n name: string;\r\n indexerFlags: number;\r\n onChange(payload: object): void;\r\n}\r\n\r\nfunction IndexerFlagsSelectInput(props: IndexerFlagsSelectInputProps) {\r\n const { indexerFlags, onChange } = props;\r\n\r\n const { value, values } = useSelector(selectIndexerFlagsValues(indexerFlags));\r\n\r\n const onChangeWrapper = useCallback(\r\n ({ name, value }: { name: string; value: number[] }) => {\r\n const indexerFlags = value.reduce((acc, flagId) => acc + flagId, 0);\r\n\r\n onChange({ name, value: indexerFlags });\r\n },\r\n [onChange]\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default IndexerFlagsSelectInput;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchIndexers } from 'Store/Actions/settingsActions';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.indexers,\r\n (state, { includeAny }) => includeAny,\r\n (indexers, includeAny) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items\r\n } = indexers;\r\n\r\n const values = _.map(items.sort(sortByProp('name')), (indexer) => {\r\n return {\r\n key: indexer.id,\r\n value: indexer.name\r\n };\r\n });\r\n\r\n if (includeAny) {\r\n values.unshift({\r\n key: 0,\r\n value: `(${translate('Any')})`\r\n });\r\n }\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n values\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchIndexers: fetchIndexers\r\n};\r\n\r\nclass IndexerSelectInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n if (!this.props.isPopulated) {\r\n this.props.dispatchFetchIndexers();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = ({ name, value }) => {\r\n this.props.onChange({ name, value: parseInt(value) });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nIndexerSelectInputConnector.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n includeAny: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n dispatchFetchIndexers: PropTypes.func.isRequired\r\n};\r\n\r\nIndexerSelectInputConnector.defaultProps = {\r\n includeAny: false\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(IndexerSelectInputConnector);\r\n","import React, { useCallback } from 'react';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport TextInput from './TextInput';\r\nimport styles from './KeyValueListInputItem.css';\r\n\r\ninterface KeyValueListInputItemProps {\r\n index: number;\r\n keyValue: string;\r\n value: string;\r\n keyPlaceholder?: string;\r\n valuePlaceholder?: string;\r\n isNew: boolean;\r\n onChange: (index: number, itemValue: { key: string; value: string }) => void;\r\n onRemove: (index: number) => void;\r\n onFocus: () => void;\r\n onBlur: () => void;\r\n}\r\n\r\nfunction KeyValueListInputItem({\r\n index,\r\n keyValue,\r\n value,\r\n keyPlaceholder = 'Key',\r\n valuePlaceholder = 'Value',\r\n isNew,\r\n onChange,\r\n onRemove,\r\n onFocus,\r\n onBlur,\r\n}: KeyValueListInputItemProps): JSX.Element {\r\n const handleKeyChange = useCallback(\r\n ({ value: keyValue }: { value: string }) => {\r\n onChange(index, { key: keyValue, value });\r\n },\r\n [index, value, onChange]\r\n );\r\n\r\n const handleValueChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n onChange(index, { key: keyValue, value });\r\n },\r\n [index, keyValue, onChange]\r\n );\r\n\r\n const handleRemovePress = useCallback(() => {\r\n onRemove(index);\r\n }, [index, onRemove]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n {isNew ? null : (\r\n \r\n )}\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default KeyValueListInputItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"itemContainer\":\"KeyValueListInputItem-itemContainer-ZADcc\",\"keyInputWrapper\":\"KeyValueListInputItem-keyInputWrapper-fZcHE\",\"valueInputWrapper\":\"KeyValueListInputItem-valueInputWrapper-UxoQW\",\"buttonWrapper\":\"KeyValueListInputItem-buttonWrapper-URTxg\",\"keyInput\":\"KeyValueListInputItem-keyInput-Fwwg9\",\"valueInput\":\"KeyValueListInputItem-valueInput-jTI0x\"};","// extracted by mini-css-extract-plugin\nexport default {\"inputContainer\":\"KeyValueListInput-inputContainer-CTTl0 Input-input-KWeec\",\"isFocused\":\"KeyValueListInput-isFocused-FfsJJ\",\"hasError\":\"KeyValueListInput-hasError-ASy4m Input-hasError-_3DW5\",\"hasWarning\":\"KeyValueListInput-hasWarning-FACms Input-hasWarning-K_6E_\"};","import classNames from 'classnames';\r\nimport React, { useCallback, useState } from 'react';\r\nimport { InputOnChange } from 'typings/inputs';\r\nimport KeyValueListInputItem from './KeyValueListInputItem';\r\nimport styles from './KeyValueListInput.css';\r\n\r\ninterface KeyValue {\r\n key: string;\r\n value: string;\r\n}\r\n\r\nexport interface KeyValueListInputProps {\r\n className?: string;\r\n name: string;\r\n value: KeyValue[];\r\n hasError?: boolean;\r\n hasWarning?: boolean;\r\n keyPlaceholder?: string;\r\n valuePlaceholder?: string;\r\n onChange: InputOnChange;\r\n}\r\n\r\nfunction KeyValueListInput({\r\n className = styles.inputContainer,\r\n name,\r\n value = [],\r\n hasError = false,\r\n hasWarning = false,\r\n keyPlaceholder,\r\n valuePlaceholder,\r\n onChange,\r\n}: KeyValueListInputProps): JSX.Element {\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const handleItemChange = useCallback(\r\n (index: number | null, itemValue: KeyValue) => {\r\n const newValue = [...value];\r\n\r\n if (index === null) {\r\n newValue.push(itemValue);\r\n } else {\r\n newValue.splice(index, 1, itemValue);\r\n }\r\n\r\n onChange({ name, value: newValue });\r\n },\r\n [value, name, onChange]\r\n );\r\n\r\n const handleRemoveItem = useCallback(\r\n (index: number) => {\r\n const newValue = [...value];\r\n newValue.splice(index, 1);\r\n onChange({ name, value: newValue });\r\n },\r\n [value, name, onChange]\r\n );\r\n\r\n const onFocus = useCallback(() => setIsFocused(true), []);\r\n\r\n const onBlur = useCallback(() => {\r\n setIsFocused(false);\r\n\r\n const newValue = value.reduce((acc: KeyValue[], v) => {\r\n if (v.key || v.value) {\r\n acc.push(v);\r\n }\r\n return acc;\r\n }, []);\r\n\r\n if (newValue.length !== value.length) {\r\n onChange({ name, value: newValue });\r\n }\r\n }, [value, name, onChange]);\r\n\r\n return (\r\n \r\n {[...value, { key: '', value: '' }].map((v, index) => (\r\n \r\n ))}\r\n \r\n );\r\n}\r\n\r\nexport default KeyValueListInput;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { values }) => values,\r\n ( languages ) => {\r\n\r\n const minId = languages.reduce((min, v) => (v.key < 1 ? v.key : min), languages[0].key);\r\n\r\n const values = languages.map(({ key, value }) => {\r\n return {\r\n key,\r\n value,\r\n dividerAfter: minId < 1 ? key === minId : false\r\n };\r\n });\r\n\r\n return {\r\n values\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass LanguageSelectInputConnector extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nLanguageSelectInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]).isRequired,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps)(LanguageSelectInputConnector);\r\n","import translate from 'Utilities/String/translate';\r\n\r\nconst monitorOptions = [\r\n {\r\n key: 'movieOnly',\r\n get value() {\r\n return translate('MovieOnly');\r\n }\r\n },\r\n {\r\n key: 'movieAndCollection',\r\n get value() {\r\n return translate('MovieAndCollection');\r\n }\r\n },\r\n {\r\n key: 'none',\r\n get value() {\r\n return translate('None');\r\n }\r\n }\r\n];\r\n\r\nexport default monitorOptions;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport monitorOptions from 'Utilities/Movie/monitorOptions';\r\nimport translate from 'Utilities/String/translate';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\n\r\nfunction MovieMonitoredSelectInput(props) {\r\n const {\r\n includeNoChange,\r\n includeMixed,\r\n ...otherProps\r\n } = props;\r\n\r\n const values = [...monitorOptions];\r\n\r\n if (includeNoChange) {\r\n values.unshift({\r\n key: 'noChange',\r\n get value() {\r\n return translate('NoChange');\r\n },\r\n isDisabled: true\r\n });\r\n }\r\n\r\n if (includeMixed) {\r\n values.unshift({\r\n key: 'mixed',\r\n get value() {\r\n return `(${translate('Mixed')})`;\r\n },\r\n isDisabled: true\r\n });\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nMovieMonitoredSelectInput.propTypes = {\r\n includeNoChange: PropTypes.bool.isRequired,\r\n includeMixed: PropTypes.bool.isRequired\r\n};\r\n\r\nMovieMonitoredSelectInput.defaultProps = {\r\n includeNoChange: false,\r\n includeMixed: false\r\n};\r\n\r\nexport default MovieMonitoredSelectInput;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createTagsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.tags.items,\r\n (tags) => {\r\n return tags;\r\n }\r\n );\r\n}\r\n\r\nexport default createTagsSelector;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { addTag } from 'Store/Actions/tagActions';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport TagInput from './TagInput';\r\n\r\nconst validTagRegex = new RegExp('[^-_a-z0-9]', 'i');\r\n\r\nfunction isValidTag(tagName) {\r\n try {\r\n return !validTagRegex.test(tagName);\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { value }) => value,\r\n createTagsSelector(),\r\n (tags, tagList) => {\r\n const sortedTags = _.sortBy(tagList, 'label');\r\n const filteredTagList = _.filter(sortedTags, (tag) => _.indexOf(tags, tag.id) === -1);\r\n\r\n return {\r\n tags: tags.reduce((acc, tag) => {\r\n const matchingTag = _.find(tagList, { id: tag });\r\n\r\n if (matchingTag) {\r\n acc.push({\r\n id: tag,\r\n name: matchingTag.label\r\n });\r\n }\r\n\r\n return acc;\r\n }, []),\r\n\r\n tagList: filteredTagList.map(({ id, label: name }) => {\r\n return {\r\n id,\r\n name\r\n };\r\n }),\r\n\r\n allTags: sortedTags\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n addTag\r\n};\r\n\r\nclass TagInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n name,\r\n value,\r\n tags,\r\n onChange\r\n } = this.props;\r\n\r\n if (value.length !== tags.length) {\r\n onChange({ name, value: tags.map((tag) => tag.id) });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onTagAdd = (tag) => {\r\n const {\r\n name,\r\n value,\r\n allTags\r\n } = this.props;\r\n\r\n if (!tag.id) {\r\n const existingTag =_.some(allTags, { label: tag.name });\r\n\r\n if (isValidTag(tag.name) && !existingTag) {\r\n this.props.addTag({\r\n tag: { label: tag.name },\r\n onTagCreated: this.onTagCreated\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n const newValue = value.slice();\r\n newValue.push(tag.id);\r\n\r\n this.props.onChange({ name, value: newValue });\r\n };\r\n\r\n onTagDelete = ({ index }) => {\r\n const {\r\n name,\r\n value\r\n } = this.props;\r\n\r\n const newValue = value.slice();\r\n newValue.splice(index, 1);\r\n\r\n this.props.onChange({\r\n name,\r\n value: newValue\r\n });\r\n };\r\n\r\n onTagCreated = (tag) => {\r\n const {\r\n name,\r\n value\r\n } = this.props;\r\n\r\n const newValue = value.slice();\r\n newValue.push(tag.id);\r\n\r\n this.props.onChange({ name, value: newValue });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nTagInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n allTags: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n addTag: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(TagInputConnector);\r\n","import React, { useCallback } from 'react';\r\nimport TagInputConnector from './TagInputConnector';\r\n\r\ninterface MovieTagInputProps {\r\n name: string;\r\n value: number | number[];\r\n onChange: ({\r\n name,\r\n value,\r\n }: {\r\n name: string;\r\n value: number | number[];\r\n }) => void;\r\n}\r\n\r\nexport default function MovieTagInput(props: MovieTagInputProps) {\r\n const { value, onChange, ...otherProps } = props;\r\n const isArray = Array.isArray(value);\r\n\r\n const handleChange = useCallback(\r\n ({ name, value: newValue }: { name: string; value: number[] }) => {\r\n if (isArray) {\r\n onChange({ name, value: newValue });\r\n } else {\r\n onChange({\r\n name,\r\n value: newValue.length ? newValue[newValue.length - 1] : 0,\r\n });\r\n }\r\n },\r\n [isArray, onChange]\r\n );\r\n\r\n let finalValue: number[] = [];\r\n\r\n if (isArray) {\r\n finalValue = value;\r\n } else if (value === 0) {\r\n finalValue = [];\r\n } else {\r\n finalValue = [value];\r\n }\r\n\r\n return (\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore 2786 'TagInputConnector' isn't typed yet\r\n \r\n );\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport TextInput from './TextInput';\r\n\r\nfunction parseValue(props, value) {\r\n const {\r\n isFloat,\r\n min,\r\n max\r\n } = props;\r\n\r\n if (value == null || value === '') {\r\n return null;\r\n }\r\n\r\n let newValue = isFloat ? parseFloat(value) : parseInt(value);\r\n\r\n if (min != null && newValue != null && newValue < min) {\r\n newValue = min;\r\n } else if (max != null && newValue != null && newValue > max) {\r\n newValue = max;\r\n }\r\n\r\n return newValue;\r\n}\r\n\r\nclass NumberInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n value: props.value == null ? '' : props.value.toString(),\r\n isFocused: false\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const { value } = this.props;\r\n\r\n if (!isNaN(value) && value !== prevProps.value && !this.state.isFocused) {\r\n this.setState({\r\n value: value == null ? '' : value.toString()\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = ({ name, value }) => {\r\n this.setState({ value });\r\n\r\n this.props.onChange({\r\n name,\r\n value: parseValue(this.props, value)\r\n });\r\n\r\n };\r\n\r\n onFocus = () => {\r\n this.setState({ isFocused: true });\r\n };\r\n\r\n onBlur = () => {\r\n const {\r\n name,\r\n onChange\r\n } = this.props;\r\n\r\n const { value } = this.state;\r\n const parsedValue = parseValue(this.props, value);\r\n const stringValue = parsedValue == null ? '' : parsedValue.toString();\r\n\r\n if (stringValue === value) {\r\n this.setState({ isFocused: false });\r\n } else {\r\n this.setState({\r\n value: stringValue,\r\n isFocused: false\r\n });\r\n }\r\n\r\n onChange({\r\n name,\r\n value: parsedValue\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const value = this.state.value;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nNumberInput.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number,\r\n min: PropTypes.number,\r\n max: PropTypes.number,\r\n isFloat: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nNumberInput.defaultProps = {\r\n value: null,\r\n isFloat: false\r\n};\r\n\r\nexport default NumberInput;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport styles from './SpinnerErrorButton.css';\r\n\r\nfunction getTestResult(error) {\r\n if (!error) {\r\n return {\r\n wasSuccessful: true,\r\n hasWarning: false,\r\n hasError: false\r\n };\r\n }\r\n\r\n if (error.status !== 400) {\r\n return {\r\n wasSuccessful: false,\r\n hasWarning: false,\r\n hasError: true\r\n };\r\n }\r\n\r\n const failures = error.responseJSON;\r\n\r\n const hasWarning = _.some(failures, { isWarning: true });\r\n const hasError = _.some(failures, (failure) => !failure.isWarning);\r\n\r\n return {\r\n wasSuccessful: false,\r\n hasWarning,\r\n hasError\r\n };\r\n}\r\n\r\nclass SpinnerErrorButton extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._testResultTimeout = null;\r\n\r\n this.state = {\r\n wasSuccessful: false,\r\n hasWarning: false,\r\n hasError: false\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n isSpinning,\r\n error\r\n } = this.props;\r\n\r\n if (prevProps.isSpinning && !isSpinning) {\r\n const testResult = getTestResult(error);\r\n\r\n this.setState(testResult, () => {\r\n const {\r\n wasSuccessful,\r\n hasWarning,\r\n hasError\r\n } = testResult;\r\n\r\n if (wasSuccessful || hasWarning || hasError) {\r\n this._testResultTimeout = setTimeout(this.resetState, 3000);\r\n }\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._testResultTimeout) {\r\n clearTimeout(this._testResultTimeout);\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n resetState = () => {\r\n this.setState({\r\n wasSuccessful: false,\r\n hasWarning: false,\r\n hasError: false\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n kind,\r\n isSpinning,\r\n error,\r\n children,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n wasSuccessful,\r\n hasWarning,\r\n hasError\r\n } = this.state;\r\n\r\n const showIcon = wasSuccessful || hasWarning || hasError;\r\n\r\n let iconName = icons.CHECK;\r\n let iconKind = kind === kinds.PRIMARY ? kinds.DEFAULT : kinds.SUCCESS;\r\n\r\n if (hasWarning) {\r\n iconName = icons.WARNING;\r\n iconKind = kinds.WARNING;\r\n }\r\n\r\n if (hasError) {\r\n iconName = icons.DANGER;\r\n iconKind = kinds.DANGER;\r\n }\r\n\r\n return (\r\n \r\n \r\n {\r\n showIcon &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n \r\n {\r\n children\r\n }\r\n \r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nSpinnerErrorButton.propTypes = {\r\n kind: PropTypes.oneOf(kinds.all),\r\n isSpinning: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nexport default SpinnerErrorButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"iconContainer\":\"SpinnerErrorButton-iconContainer-0zupp SpinnerButton-spinnerContainer-GOQ2V\",\"icon\":\"SpinnerErrorButton-icon-QGBUe\",\"label\":\"SpinnerErrorButton-label-BnsYP SpinnerButton-label-YD8Ey\",\"showIcon\":\"SpinnerErrorButton-showIcon-ZPhkZ\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport { kinds } from 'Helpers/Props';\r\n\r\nfunction OAuthInput(props) {\r\n const {\r\n label,\r\n authorizing,\r\n error,\r\n onPress\r\n } = props;\r\n\r\n return (\r\n
\r\n \r\n {label}\r\n \r\n
\r\n );\r\n}\r\n\r\nOAuthInput.propTypes = {\r\n label: PropTypes.string.isRequired,\r\n authorizing: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nOAuthInput.defaultProps = {\r\n label: 'Start OAuth'\r\n};\r\n\r\nexport default OAuthInput;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { resetOAuth, startOAuth } from 'Store/Actions/oAuthActions';\r\nimport OAuthInput from './OAuthInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.oAuth,\r\n (oAuth) => {\r\n return oAuth;\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n startOAuth,\r\n resetOAuth\r\n};\r\n\r\nclass OAuthInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n result,\r\n onChange\r\n } = this.props;\r\n\r\n if (!result || result === prevProps.result) {\r\n return;\r\n }\r\n\r\n Object.keys(result).forEach((key) => {\r\n onChange({ name: key, value: result[key] });\r\n });\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.props.resetOAuth();\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n name,\r\n provider,\r\n providerData,\r\n section\r\n } = this.props;\r\n\r\n this.props.startOAuth({\r\n name,\r\n provider,\r\n providerData,\r\n section\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nOAuthInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n result: PropTypes.object,\r\n provider: PropTypes.string.isRequired,\r\n providerData: PropTypes.object.isRequired,\r\n section: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n startOAuth: PropTypes.func.isRequired,\r\n resetOAuth: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(OAuthInputConnector);\r\n","import React from 'react';\r\nimport TextInput from './TextInput';\r\n\r\n// Prevent a user from copying (or cutting) the password from the input\r\nfunction onCopy(e) {\r\n e.preventDefault();\r\n e.nativeEvent.stopImmediatePropagation();\r\n}\r\n\r\nfunction PasswordInput(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nPasswordInput.propTypes = {\r\n ...TextInput.props\r\n};\r\n\r\nexport default PasswordInput;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport { kinds } from 'Helpers/Props';\r\nimport styles from './Form.css';\r\n\r\nfunction Form(props) {\r\n const {\r\n children,\r\n validationErrors,\r\n validationWarnings,\r\n // eslint-disable-next-line no-unused-vars\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n
\r\n {\r\n validationErrors.length || validationWarnings.length ?\r\n
\r\n {\r\n validationErrors.map((error, index) => {\r\n return (\r\n \r\n {error.errorMessage}\r\n \r\n );\r\n })\r\n }\r\n\r\n {\r\n validationWarnings.map((warning, index) => {\r\n return (\r\n \r\n {warning.errorMessage}\r\n \r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nForm.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n validationErrors: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n validationWarnings: PropTypes.arrayOf(PropTypes.object).isRequired\r\n};\r\n\r\nForm.defaultProps = {\r\n validationErrors: [],\r\n validationWarnings: []\r\n};\r\n\r\nexport default Form;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"validationFailures\":\"Form-validationFailures-wVc3a\"};","// extracted by mini-css-extract-plugin\nexport default {\"label\":\"FormLabel-label-gwvhu\",\"hasError\":\"FormLabel-hasError-Q3yuI\",\"isAdvanced\":\"FormLabel-isAdvanced-EuOsg\",\"small\":\"FormLabel-small-SkLXp\",\"large\":\"FormLabel-large-KjVUJ\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { sizes } from 'Helpers/Props';\r\nimport styles from './FormLabel.css';\r\n\r\nfunction FormLabel(props) {\r\n const {\r\n children,\r\n className,\r\n errorClassName,\r\n size,\r\n name,\r\n hasError,\r\n isAdvanced,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nFormLabel.propTypes = {\r\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.string]).isRequired,\r\n className: PropTypes.string,\r\n errorClassName: PropTypes.string,\r\n size: PropTypes.oneOf(sizes.all),\r\n name: PropTypes.string,\r\n hasError: PropTypes.bool,\r\n isAdvanced: PropTypes.bool\r\n};\r\n\r\nFormLabel.defaultProps = {\r\n className: styles.label,\r\n errorClassName: styles.hasError,\r\n isAdvanced: false,\r\n size: sizes.LARGE\r\n};\r\n\r\nexport default FormLabel;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport Icon from 'Components/Icon';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './TableOptionsColumn.css';\r\n\r\nfunction TableOptionsColumn(props) {\r\n const {\r\n name,\r\n label,\r\n isVisible,\r\n isModifiable,\r\n isDragging,\r\n connectDragSource,\r\n onVisibleChange\r\n } = props;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {typeof label === 'function' ? label() : label}\r\n \r\n\r\n {\r\n !!connectDragSource &&\r\n connectDragSource(\r\n
\r\n \r\n
\r\n )\r\n }\r\n
\r\n \r\n );\r\n}\r\n\r\nTableOptionsColumn.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\r\n isVisible: PropTypes.bool.isRequired,\r\n isModifiable: PropTypes.bool.isRequired,\r\n index: PropTypes.number.isRequired,\r\n isDragging: PropTypes.bool,\r\n connectDragSource: PropTypes.func,\r\n onVisibleChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default TableOptionsColumn;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"column\":\"TableOptionsColumn-column-Ek0f4\",\"checkContainer\":\"TableOptionsColumn-checkContainer-y0Oh2\",\"label\":\"TableOptionsColumn-label-Dye87\",\"dragHandle\":\"TableOptionsColumn-dragHandle-LrZSw\",\"dragIcon\":\"TableOptionsColumn-dragIcon-sjJF_\",\"isDragging\":\"TableOptionsColumn-isDragging-Zz7RX\",\"notDragable\":\"TableOptionsColumn-notDragable-nSG4k\"};","// extracted by mini-css-extract-plugin\nexport default {\"dragLayer\":\"DragPreviewLayer-dragLayer-lJxaW\"};","import React from 'react';\r\nimport styles from './DragPreviewLayer.css';\r\n\r\ninterface DragPreviewLayerProps {\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nfunction DragPreviewLayer({\r\n className = styles.dragLayer,\r\n children,\r\n ...otherProps\r\n}: DragPreviewLayerProps) {\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nexport default DragPreviewLayer;\r\n","export const QUALITY_PROFILE_ITEM = 'qualityProfileItem';\r\nexport const QUALITY_PROFILE_FORMAT_ITEM = 'qualityProfileFormatItem';\r\nexport const DELAY_PROFILE = 'delayProfile';\r\nexport const TABLE_COLUMN = 'tableColumn';\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { DragLayer } from 'react-dnd';\r\nimport DragPreviewLayer from 'Components/DragPreviewLayer';\r\nimport { TABLE_COLUMN } from 'Helpers/dragTypes';\r\nimport dimensions from 'Styles/Variables/dimensions.js';\r\nimport TableOptionsColumn from './TableOptionsColumn';\r\nimport styles from './TableOptionsColumnDragPreview.css';\r\n\r\nconst formGroupSmallWidth = parseInt(dimensions.formGroupSmallWidth);\r\nconst formLabelLargeWidth = parseInt(dimensions.formLabelLargeWidth);\r\nconst formLabelRightMarginWidth = parseInt(dimensions.formLabelRightMarginWidth);\r\nconst dragHandleWidth = parseInt(dimensions.dragHandleWidth);\r\n\r\nfunction collectDragLayer(monitor) {\r\n return {\r\n item: monitor.getItem(),\r\n itemType: monitor.getItemType(),\r\n currentOffset: monitor.getSourceClientOffset()\r\n };\r\n}\r\n\r\nclass TableOptionsColumnDragPreview extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n item,\r\n itemType,\r\n currentOffset\r\n } = this.props;\r\n\r\n if (!currentOffset || itemType !== TABLE_COLUMN) {\r\n return null;\r\n }\r\n\r\n // The offset is shifted because the drag handle is on the right edge of the\r\n // list item and the preview is wider than the drag handle.\r\n\r\n const { x, y } = currentOffset;\r\n const handleOffset = formGroupSmallWidth - formLabelLargeWidth - formLabelRightMarginWidth - dragHandleWidth;\r\n const transform = `translate3d(${x - handleOffset}px, ${y}px, 0)`;\r\n\r\n const style = {\r\n position: 'absolute',\r\n WebkitTransform: transform,\r\n msTransform: transform,\r\n transform\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nTableOptionsColumnDragPreview.propTypes = {\r\n item: PropTypes.object,\r\n itemType: PropTypes.string,\r\n currentOffset: PropTypes.shape({\r\n x: PropTypes.number.isRequired,\r\n y: PropTypes.number.isRequired\r\n })\r\n};\r\n\r\nexport default DragLayer(collectDragLayer)(TableOptionsColumnDragPreview);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"dragPreview\":\"TableOptionsColumnDragPreview-dragPreview-rMhuQ\"};","// extracted by mini-css-extract-plugin\nexport default {\"columnDragSource\":\"TableOptionsColumnDragSource-columnDragSource-AJsPg\",\"columnPlaceholder\":\"TableOptionsColumnDragSource-columnPlaceholder-CGz6l\",\"columnPlaceholderBefore\":\"TableOptionsColumnDragSource-columnPlaceholderBefore-O5xwl\",\"columnPlaceholderAfter\":\"TableOptionsColumnDragSource-columnPlaceholderAfter-rdEel\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { DragSource, DropTarget } from 'react-dnd';\r\nimport { findDOMNode } from 'react-dom';\r\nimport { TABLE_COLUMN } from 'Helpers/dragTypes';\r\nimport TableOptionsColumn from './TableOptionsColumn';\r\nimport styles from './TableOptionsColumnDragSource.css';\r\n\r\nconst columnDragSource = {\r\n beginDrag(column) {\r\n return column;\r\n },\r\n\r\n endDrag(props, monitor, component) {\r\n props.onColumnDragEnd(monitor.getItem(), monitor.didDrop());\r\n }\r\n};\r\n\r\nconst columnDropTarget = {\r\n hover(props, monitor, component) {\r\n const dragIndex = monitor.getItem().index;\r\n const hoverIndex = props.index;\r\n\r\n const hoverBoundingRect = findDOMNode(component).getBoundingClientRect();\r\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\r\n const clientOffset = monitor.getClientOffset();\r\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\r\n\r\n if (dragIndex === hoverIndex) {\r\n return;\r\n }\r\n\r\n // When moving up, only trigger if drag position is above 50% and\r\n // when moving down, only trigger if drag position is below 50%.\r\n // If we're moving down the hoverIndex needs to be increased\r\n // by one so it's ordered properly. Otherwise the hoverIndex will work.\r\n\r\n // Dragging downwards\r\n if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {\r\n return;\r\n }\r\n\r\n // Dragging upwards\r\n if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {\r\n return;\r\n }\r\n\r\n props.onColumnDragMove(dragIndex, hoverIndex);\r\n }\r\n};\r\n\r\nfunction collectDragSource(connect, monitor) {\r\n return {\r\n connectDragSource: connect.dragSource(),\r\n isDragging: monitor.isDragging()\r\n };\r\n}\r\n\r\nfunction collectDropTarget(connect, monitor) {\r\n return {\r\n connectDropTarget: connect.dropTarget(),\r\n isOver: monitor.isOver()\r\n };\r\n}\r\n\r\nclass TableOptionsColumnDragSource extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n name,\r\n label,\r\n isVisible,\r\n isModifiable,\r\n index,\r\n isDragging,\r\n isDraggingUp,\r\n isDraggingDown,\r\n isOver,\r\n connectDragSource,\r\n connectDropTarget,\r\n onVisibleChange\r\n } = this.props;\r\n\r\n const isBefore = !isDragging && isDraggingUp && isOver;\r\n const isAfter = !isDragging && isDraggingDown && isOver;\r\n\r\n // if (isDragging && !isOver) {\r\n // return null;\r\n // }\r\n\r\n return connectDropTarget(\r\n \r\n {\r\n isBefore &&\r\n \r\n }\r\n\r\n \r\n\r\n {\r\n isAfter &&\r\n \r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nTableOptionsColumnDragSource.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\r\n isVisible: PropTypes.bool.isRequired,\r\n isModifiable: PropTypes.bool.isRequired,\r\n index: PropTypes.number.isRequired,\r\n isDragging: PropTypes.bool,\r\n isDraggingUp: PropTypes.bool,\r\n isDraggingDown: PropTypes.bool,\r\n isOver: PropTypes.bool,\r\n connectDragSource: PropTypes.func,\r\n connectDropTarget: PropTypes.func,\r\n onVisibleChange: PropTypes.func.isRequired,\r\n onColumnDragMove: PropTypes.func.isRequired,\r\n onColumnDragEnd: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DropTarget(\r\n TABLE_COLUMN,\r\n columnDropTarget,\r\n collectDropTarget\r\n)(DragSource(\r\n TABLE_COLUMN,\r\n columnDragSource,\r\n collectDragSource\r\n)(TableOptionsColumnDragSource));\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { DndProvider } from 'react-dnd-multi-backend';\r\nimport HTML5toTouch from 'react-dnd-multi-backend/dist/esm/HTML5toTouch';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormInputHelpText from 'Components/Form/FormInputHelpText';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport TableOptionsColumn from './TableOptionsColumn';\r\nimport TableOptionsColumnDragPreview from './TableOptionsColumnDragPreview';\r\nimport TableOptionsColumnDragSource from './TableOptionsColumnDragSource';\r\nimport styles from './TableOptionsModal.css';\r\n\r\nclass TableOptionsModal extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n hasPageSize: !!props.pageSize,\r\n pageSize: props.pageSize,\r\n pageSizeError: null,\r\n dragIndex: null,\r\n dropIndex: null\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.pageSize !== this.state.pageSize) {\r\n this.setState({ pageSize: this.props.pageSize });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onPageSizeChange = ({ value }) => {\r\n let pageSizeError = null;\r\n const maxPageSize = this.props.maxPageSize ?? 250;\r\n\r\n if (value < 5) {\r\n pageSizeError = translate('TablePageSizeMinimum', { minimumValue: '5' });\r\n } else if (value > maxPageSize) {\r\n pageSizeError = translate('TablePageSizeMaximum', { maximumValue: `${maxPageSize}` });\r\n } else {\r\n this.props.onTableOptionChange({ pageSize: value });\r\n }\r\n\r\n this.setState({\r\n pageSize: value,\r\n pageSizeError\r\n });\r\n };\r\n\r\n onVisibleChange = ({ name, value }) => {\r\n const columns = _.cloneDeep(this.props.columns);\r\n\r\n const column = _.find(columns, { name });\r\n column.isVisible = value;\r\n\r\n this.props.onTableOptionChange({ columns });\r\n };\r\n\r\n onColumnDragMove = (dragIndex, dropIndex) => {\r\n if (this.state.dragIndex !== dragIndex || this.state.dropIndex !== dropIndex) {\r\n this.setState({\r\n dragIndex,\r\n dropIndex\r\n });\r\n }\r\n };\r\n\r\n onColumnDragEnd = ({ id }, didDrop) => {\r\n const {\r\n dragIndex,\r\n dropIndex\r\n } = this.state;\r\n\r\n if (didDrop && dropIndex !== null) {\r\n const columns = _.cloneDeep(this.props.columns);\r\n const items = columns.splice(dragIndex, 1);\r\n columns.splice(dropIndex, 0, items[0]);\r\n\r\n this.props.onTableOptionChange({ columns });\r\n }\r\n\r\n this.setState({\r\n dragIndex: null,\r\n dropIndex: null\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isOpen,\r\n columns,\r\n canModifyColumns,\r\n optionsComponent: OptionsComponent,\r\n onTableOptionChange,\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n hasPageSize,\r\n pageSize,\r\n pageSizeError,\r\n dragIndex,\r\n dropIndex\r\n } = this.state;\r\n\r\n const isDragging = dropIndex !== null;\r\n const isDraggingUp = isDragging && dropIndex < dragIndex;\r\n const isDraggingDown = isDragging && dropIndex > dragIndex;\r\n\r\n return (\r\n \r\n \r\n {\r\n isOpen ?\r\n \r\n \r\n {translate('TableOptions')}\r\n \r\n\r\n \r\n
\r\n {\r\n hasPageSize ?\r\n \r\n {translate('TablePageSize')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n OptionsComponent ?\r\n : null\r\n }\r\n\r\n {\r\n canModifyColumns ?\r\n \r\n {translate('TableColumns')}\r\n\r\n
\r\n \r\n\r\n
\r\n {\r\n columns.map((column, index) => {\r\n const {\r\n name,\r\n label,\r\n columnLabel,\r\n isVisible,\r\n isModifiable\r\n } = column;\r\n\r\n if (isModifiable !== false) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n
\r\n
:\r\n null\r\n }\r\n \r\n
\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
:\r\n null\r\n }\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nTableOptionsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n pageSize: PropTypes.number,\r\n maxPageSize: PropTypes.number,\r\n canModifyColumns: PropTypes.bool.isRequired,\r\n optionsComponent: PropTypes.elementType,\r\n onTableOptionChange: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nTableOptionsModal.defaultProps = {\r\n canModifyColumns: true\r\n};\r\n\r\nexport default TableOptionsModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"columns\":\"TableOptionsModal-columns-PtB2N\"};","import PropTypes from 'prop-types';\r\nimport React, { Component, Fragment } from 'react';\r\nimport TableOptionsModal from './TableOptionsModal';\r\n\r\nclass TableOptionsModalWrapper extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isTableOptionsModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onTableOptionsPress = () => {\r\n this.setState({ isTableOptionsModalOpen: true });\r\n };\r\n\r\n onTableOptionsModalClose = () => {\r\n this.setState({ isTableOptionsModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n columns,\r\n children,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {\r\n React.cloneElement(children, { onPress: this.onTableOptionsPress })\r\n }\r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nTableOptionsModalWrapper.propTypes = {\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nexport default TableOptionsModalWrapper;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\n\r\nclass TableHeader extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n children\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nTableHeader.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default TableHeader;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons, sortDirections } from 'Helpers/Props';\r\nimport styles from './TableHeaderCell.css';\r\n\r\nclass TableHeaderCell extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n name,\r\n fixedSortDirection\r\n } = this.props;\r\n\r\n if (fixedSortDirection) {\r\n this.props.onSortPress(name, fixedSortDirection);\r\n } else {\r\n this.props.onSortPress(name);\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n name,\r\n label,\r\n columnLabel,\r\n isSortable,\r\n isVisible,\r\n isModifiable,\r\n sortKey,\r\n sortDirection,\r\n fixedSortDirection,\r\n children,\r\n onSortPress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const isSorting = isSortable && sortKey === name;\r\n const sortIcon = sortDirection === sortDirections.ASCENDING ?\r\n icons.SORT_ASCENDING :\r\n icons.SORT_DESCENDING;\r\n\r\n return (\r\n isSortable ?\r\n \r\n {children}\r\n\r\n {\r\n isSorting &&\r\n \r\n }\r\n :\r\n\r\n \r\n {children}\r\n \r\n );\r\n }\r\n}\r\n\r\nTableHeaderCell.propTypes = {\r\n className: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.node]),\r\n columnLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\r\n isSortable: PropTypes.bool,\r\n isVisible: PropTypes.bool,\r\n isModifiable: PropTypes.bool,\r\n sortKey: PropTypes.string,\r\n fixedSortDirection: PropTypes.string,\r\n sortDirection: PropTypes.string,\r\n children: PropTypes.node,\r\n onSortPress: PropTypes.func\r\n};\r\n\r\nTableHeaderCell.defaultProps = {\r\n className: styles.headerCell,\r\n isSortable: false\r\n};\r\n\r\nexport default TableHeaderCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"headerCell\":\"TableHeaderCell-headerCell-aJDuw\",\"sortIcon\":\"TableHeaderCell-sortIcon-zaT8O\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport VirtualTableHeaderCell from './TableHeaderCell';\r\nimport styles from './TableSelectAllHeaderCell.css';\r\n\r\nfunction getValue(allSelected, allUnselected) {\r\n if (allSelected) {\r\n return true;\r\n } else if (allUnselected) {\r\n return false;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction TableSelectAllHeaderCell(props) {\r\n const {\r\n allSelected,\r\n allUnselected,\r\n onSelectAllChange\r\n } = props;\r\n\r\n const value = getValue(allSelected, allUnselected);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nTableSelectAllHeaderCell.propTypes = {\r\n allSelected: PropTypes.bool.isRequired,\r\n allUnselected: PropTypes.bool.isRequired,\r\n onSelectAllChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default TableSelectAllHeaderCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"selectAllHeaderCell\":\"TableSelectAllHeaderCell-selectAllHeaderCell-jSJyZ VirtualTableHeaderCell-headerCell-oq_lz\",\"input\":\"TableSelectAllHeaderCell-input-UDHSn CheckInput-input-VAM1T\"};","// extracted by mini-css-extract-plugin\nexport default {\"tableContainer\":\"Table-tableContainer-QgrKY\",\"horizontalScroll\":\"Table-horizontalScroll-pEqaG\",\"table\":\"Table-table-uAtH3\"};","import classNames from 'classnames';\r\nimport _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport { icons, scrollDirections } from 'Helpers/Props';\r\nimport TableHeader from './TableHeader';\r\nimport TableHeaderCell from './TableHeaderCell';\r\nimport TableSelectAllHeaderCell from './TableSelectAllHeaderCell';\r\nimport styles from './Table.css';\r\n\r\nconst tableHeaderCellProps = [\r\n 'sortKey',\r\n 'sortDirection'\r\n];\r\n\r\nfunction getTableHeaderCellProps(props) {\r\n return _.reduce(tableHeaderCellProps, (result, key) => {\r\n if (props.hasOwnProperty(key)) {\r\n result[key] = props[key];\r\n }\r\n\r\n return result;\r\n }, {});\r\n}\r\n\r\nfunction Table(props) {\r\n const {\r\n className,\r\n horizontalScroll,\r\n selectAll,\r\n columns,\r\n optionsComponent,\r\n pageSize,\r\n canModifyColumns,\r\n children,\r\n onSortPress,\r\n onTableOptionChange,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n selectAll ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n columns.map((column) => {\r\n const {\r\n name,\r\n isVisible,\r\n isSortable,\r\n ...otherColumnProps\r\n } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (\r\n (name === 'actions' || name === 'details') &&\r\n onTableOptionChange\r\n ) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {typeof column.label === 'function' ? column.label() : column.label}\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n {children}\r\n
\r\n \r\n );\r\n}\r\n\r\nTable.propTypes = {\r\n ...TableHeaderCell.props,\r\n className: PropTypes.string,\r\n horizontalScroll: PropTypes.bool.isRequired,\r\n selectAll: PropTypes.bool.isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n optionsComponent: PropTypes.elementType,\r\n pageSize: PropTypes.number,\r\n canModifyColumns: PropTypes.bool,\r\n children: PropTypes.node,\r\n onSortPress: PropTypes.func,\r\n onTableOptionChange: PropTypes.func\r\n};\r\n\r\nTable.defaultProps = {\r\n className: styles.table,\r\n horizontalScroll: true,\r\n selectAll: false\r\n};\r\n\r\nexport default Table;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\n\r\nclass TableBody extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n children\r\n } = this.props;\r\n\r\n return (\r\n {children}\r\n );\r\n }\r\n\r\n}\r\n\r\nTableBody.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default TableBody;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"TableRowCell-cell-giPrj\"};","import React, { ComponentPropsWithoutRef } from 'react';\r\nimport styles from './TableRowCell.css';\r\n\r\nexport type TableRowCellProps = ComponentPropsWithoutRef<'td'>;\r\n\r\nexport default function TableRowCell({\r\n className = styles.cell,\r\n ...tdProps\r\n}: TableRowCellProps) {\r\n return ;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './TableRow.css';\r\n\r\nfunction TableRow(props) {\r\n const {\r\n className,\r\n children,\r\n overlayContent,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nTableRow.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n children: PropTypes.node,\r\n overlayContent: PropTypes.bool\r\n};\r\n\r\nTableRow.defaultProps = {\r\n className: styles.row\r\n};\r\n\r\nexport default TableRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"TableRow-row-lgbLy\"};","import React from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport TableRow from './TableRow';\r\nimport styles from './TableRowButton.css';\r\n\r\nfunction TableRowButton(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default TableRowButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"TableRowButton-row-dh_T6 Link-link-RInnp TableRow-row-lgbLy\"};","import React, { useCallback } from 'react';\r\nimport { PathType } from 'App/State/PathsAppState';\r\nimport Icon from 'Components/Icon';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRowButton from 'Components/Table/TableRowButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './FileBrowserRow.css';\r\n\r\nfunction getIconName(type: PathType) {\r\n switch (type) {\r\n case 'computer':\r\n return icons.COMPUTER;\r\n case 'drive':\r\n return icons.DRIVE;\r\n case 'file':\r\n return icons.FILE;\r\n case 'parent':\r\n return icons.PARENT;\r\n default:\r\n return icons.FOLDER;\r\n }\r\n}\r\n\r\ninterface FileBrowserRowProps {\r\n type: PathType;\r\n name: string;\r\n path: string;\r\n onPress: (path: string) => void;\r\n}\r\n\r\nfunction FileBrowserRow(props: FileBrowserRowProps) {\r\n const { type, name, path, onPress } = props;\r\n\r\n const handlePress = useCallback(() => {\r\n onPress(path);\r\n }, [path, onPress]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n {name}\r\n \r\n );\r\n}\r\n\r\nexport default FileBrowserRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"type\":\"FileBrowserRow-type-WduSE TableRowCell-cell-giPrj\"};","import React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Alert from 'Components/Alert';\r\nimport PathInput from 'Components/Form/PathInput';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport Column from 'Components/Table/Column';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { kinds, scrollDirections } from 'Helpers/Props';\r\nimport { clearPaths, fetchPaths } from 'Store/Actions/pathActions';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport { InputChanged } from 'typings/inputs';\r\nimport translate from 'Utilities/String/translate';\r\nimport createPathsSelector from './createPathsSelector';\r\nimport FileBrowserRow from './FileBrowserRow';\r\nimport styles from './FileBrowserModalContent.css';\r\n\r\nconst columns: Column[] = [\r\n {\r\n name: 'type',\r\n label: () => translate('Type'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'name',\r\n label: () => translate('Name'),\r\n isVisible: true,\r\n },\r\n];\r\n\r\nconst handleClearPaths = () => {};\r\n\r\nexport interface FileBrowserModalContentProps {\r\n name: string;\r\n value: string;\r\n includeFiles?: boolean;\r\n onChange: (args: InputChanged) => unknown;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction FileBrowserModalContent(props: FileBrowserModalContentProps) {\r\n const { name, value, includeFiles = true, onChange, onModalClose } = props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const { isWindows, mode } = useSelector(createSystemStatusSelector());\r\n const { isFetching, isPopulated, error, parent, directories, files, paths } =\r\n useSelector(createPathsSelector());\r\n\r\n const [currentPath, setCurrentPath] = useState(value);\r\n const scrollerRef = useRef(null);\r\n const previousValue = usePrevious(value);\r\n\r\n const emptyParent = parent === '';\r\n const isWindowsService = isWindows && mode === 'service';\r\n\r\n const handlePathInputChange = useCallback(\r\n ({ value }: InputChanged) => {\r\n setCurrentPath(value);\r\n },\r\n []\r\n );\r\n\r\n const handleRowPress = useCallback(\r\n (path: string) => {\r\n setCurrentPath(path);\r\n\r\n dispatch(\r\n fetchPaths({\r\n path,\r\n allowFoldersWithoutTrailingSlashes: true,\r\n includeFiles,\r\n })\r\n );\r\n },\r\n [includeFiles, dispatch, setCurrentPath]\r\n );\r\n\r\n const handleOkPress = useCallback(() => {\r\n onChange({\r\n name,\r\n value: currentPath,\r\n });\r\n\r\n dispatch(clearPaths());\r\n onModalClose();\r\n }, [name, currentPath, dispatch, onChange, onModalClose]);\r\n\r\n const handleFetchPaths = useCallback(\r\n (path: string) => {\r\n dispatch(\r\n fetchPaths({\r\n path,\r\n allowFoldersWithoutTrailingSlashes: true,\r\n includeFiles,\r\n })\r\n );\r\n },\r\n [includeFiles, dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n if (value !== previousValue && value !== currentPath) {\r\n setCurrentPath(value);\r\n }\r\n }, [value, previousValue, currentPath, setCurrentPath]);\r\n\r\n useEffect(\r\n () => {\r\n dispatch(\r\n fetchPaths({\r\n path: currentPath,\r\n allowFoldersWithoutTrailingSlashes: true,\r\n includeFiles,\r\n })\r\n );\r\n\r\n return () => {\r\n dispatch(clearPaths());\r\n };\r\n },\r\n // This should only run once when the component mounts,\r\n // so we don't need to include the other dependencies.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n {translate('FileBrowser')}\r\n\r\n \r\n {isWindowsService ? (\r\n \r\n \r\n \r\n ) : null}\r\n\r\n \r\n\r\n \r\n {error ?
{translate('ErrorLoadingContents')}
: null}\r\n\r\n {isPopulated && !error ? (\r\n \r\n \r\n {emptyParent ? (\r\n \r\n ) : null}\r\n\r\n {!emptyParent && parent ? (\r\n \r\n ) : null}\r\n\r\n {directories.map((directory) => {\r\n return (\r\n \r\n );\r\n })}\r\n\r\n {files.map((file) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n ) : null}\r\n \r\n \r\n\r\n \r\n {isFetching ? (\r\n \r\n ) : null}\r\n\r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default FileBrowserModalContent;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createPathsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.paths,\r\n (paths) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n parent,\r\n currentPath,\r\n directories,\r\n files,\r\n } = paths;\r\n\r\n const filteredPaths = [...directories, ...files].filter(({ path }) => {\r\n return path.toLowerCase().startsWith(currentPath.toLowerCase());\r\n });\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n parent,\r\n currentPath,\r\n directories,\r\n files,\r\n paths: filteredPaths,\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createPathsSelector;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalBody\":\"FileBrowserModalContent-modalBody-kXPlo ModalBody-modalBody-RVK6D\",\"mappedDrivesWarning\":\"FileBrowserModalContent-mappedDrivesWarning-Mu33l Alert-alert-_KgnQ\",\"faqLink\":\"FileBrowserModalContent-faqLink-M0Z1P\",\"pathInput\":\"FileBrowserModalContent-pathInput-niMXM PathInput-inputWrapper-tZDyS\",\"scroller\":\"FileBrowserModalContent-scroller-KsfcP\",\"loading\":\"FileBrowserModalContent-loading-qSfj8\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport FileBrowserModalContent, {\r\n FileBrowserModalContentProps,\r\n} from './FileBrowserModalContent';\r\nimport styles from './FileBrowserModal.css';\r\n\r\ninterface FileBrowserModalProps extends FileBrowserModalContentProps {\r\n isOpen: boolean;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction FileBrowserModal(props: FileBrowserModalProps) {\r\n const { isOpen, onModalClose, ...otherProps } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default FileBrowserModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modal\":\"FileBrowserModal-modal-XB8yQ Modal-modal-_3qBG\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FileBrowserModal from 'Components/FileBrowser/FileBrowserModal';\r\nimport Icon from 'Components/Icon';\r\nimport { icons } from 'Helpers/Props';\r\nimport AutoSuggestInput from './AutoSuggestInput';\r\nimport FormInputButton from './FormInputButton';\r\nimport styles from './PathInput.css';\r\n\r\nclass PathInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._node = document.getElementById('portal-root');\r\n\r\n this.state = {\r\n value: props.value,\r\n isFileBrowserModalOpen: false\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const { value } = this.props;\r\n\r\n if (prevProps.value !== value) {\r\n this.setState({ value });\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n getSuggestionValue({ path }) {\r\n return path;\r\n }\r\n\r\n renderSuggestion({ path }, { query }) {\r\n const lastSeparatorIndex = query.lastIndexOf('\\\\') || query.lastIndexOf('/');\r\n\r\n if (lastSeparatorIndex === -1) {\r\n return (\r\n {path}\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {path.substr(0, lastSeparatorIndex)}\r\n \r\n {path.substr(lastSeparatorIndex)}\r\n \r\n );\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ value }) => {\r\n this.setState({ value });\r\n };\r\n\r\n onInputKeyDown = (event) => {\r\n if (event.key === 'Tab') {\r\n event.preventDefault();\r\n const path = this.props.paths[0];\r\n\r\n if (path) {\r\n this.props.onChange({\r\n name: this.props.name,\r\n value: path.path\r\n });\r\n\r\n if (path.type !== 'file') {\r\n this.props.onFetchPaths(path.path);\r\n }\r\n }\r\n }\r\n };\r\n\r\n onInputBlur = () => {\r\n this.props.onChange({\r\n name: this.props.name,\r\n value: this.state.value\r\n });\r\n\r\n this.props.onClearPaths();\r\n };\r\n\r\n onSuggestionsFetchRequested = ({ value }) => {\r\n this.props.onFetchPaths(value);\r\n };\r\n\r\n onSuggestionsClearRequested = () => {\r\n // Required because props aren't always rendered, but no-op\r\n // because we don't want to reset the paths after a path is selected.\r\n };\r\n\r\n onSuggestionSelected = (event, { suggestionValue }) => {\r\n this.props.onFetchPaths(suggestionValue);\r\n };\r\n\r\n onFileBrowserOpenPress = () => {\r\n this.setState({ isFileBrowserModalOpen: true });\r\n };\r\n\r\n onFileBrowserModalClose = () => {\r\n this.setState({ isFileBrowserModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n name,\r\n paths,\r\n includeFiles,\r\n hasFileBrowser,\r\n onChange,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n value,\r\n isFileBrowserModalOpen\r\n } = this.state;\r\n\r\n return (\r\n
\r\n \r\n\r\n {\r\n hasFileBrowser &&\r\n
\r\n \r\n \r\n \r\n\r\n \r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nPathInput.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string,\r\n paths: PropTypes.array.isRequired,\r\n includeFiles: PropTypes.bool.isRequired,\r\n hasFileBrowser: PropTypes.bool,\r\n onChange: PropTypes.func.isRequired,\r\n onFetchPaths: PropTypes.func.isRequired,\r\n onClearPaths: PropTypes.func.isRequired\r\n};\r\n\r\nPathInput.defaultProps = {\r\n className: styles.inputWrapper,\r\n value: '',\r\n hasFileBrowser: true\r\n};\r\n\r\nexport default PathInput;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"hasFileBrowser\":\"PathInput-hasFileBrowser-EHxWx AutoSuggestInput-input-Irz_T Input-input-KWeec Input-hasButton-XcYCR\",\"inputWrapper\":\"PathInput-inputWrapper-tZDyS\",\"pathMatch\":\"PathInput-pathMatch-zp2Sr\",\"fileBrowserButton\":\"PathInput-fileBrowserButton-Zi80W FormInputButton-button-qvTt5 Button-button-paJ9a Link-link-RInnp\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearPaths, fetchPaths } from 'Store/Actions/pathActions';\r\nimport PathInput from './PathInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.paths,\r\n (paths) => {\r\n const {\r\n currentPath,\r\n directories,\r\n files\r\n } = paths;\r\n\r\n const filteredPaths = _.filter([...directories, ...files], ({ path }) => {\r\n return path.toLowerCase().startsWith(currentPath.toLowerCase());\r\n });\r\n\r\n return {\r\n paths: filteredPaths\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchPaths: fetchPaths,\r\n dispatchClearPaths: clearPaths\r\n};\r\n\r\nclass PathInputConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onFetchPaths = (path) => {\r\n const {\r\n includeFiles,\r\n dispatchFetchPaths\r\n } = this.props;\r\n\r\n dispatchFetchPaths({\r\n path,\r\n includeFiles\r\n });\r\n };\r\n\r\n onClearPaths = () => {\r\n this.props.dispatchClearPaths();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nPathInputConnector.propTypes = {\r\n ...PathInput.props,\r\n includeFiles: PropTypes.bool.isRequired,\r\n dispatchFetchPaths: PropTypes.func.isRequired,\r\n dispatchClearPaths: PropTypes.func.isRequired\r\n};\r\n\r\nPathInputConnector.defaultProps = {\r\n includeFiles: false\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(PathInputConnector);\r\n","import { createSelector } from 'reselect';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\n\r\nfunction createSortedSectionSelector(\r\n section: string,\r\n comparer: (a: T, b: T) => number\r\n) {\r\n return createSelector(\r\n (state) => state,\r\n (state) => {\r\n const sectionState = getSectionState(state, section, true);\r\n\r\n return {\r\n ...sectionState,\r\n items: [...sectionState.items].sort(comparer),\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createSortedSectionSelector;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.qualityProfiles', sortByProp('name')),\r\n (state, { includeNoChange }) => includeNoChange,\r\n (state, { includeNoChangeDisabled }) => includeNoChangeDisabled,\r\n (state, { includeMixed }) => includeMixed,\r\n (qualityProfiles, includeNoChange, includeNoChangeDisabled = true, includeMixed) => {\r\n const values = _.map(qualityProfiles.items, (qualityProfile) => {\r\n return {\r\n key: qualityProfile.id,\r\n value: qualityProfile.name\r\n };\r\n });\r\n\r\n if (includeNoChange) {\r\n values.unshift({\r\n key: 'noChange',\r\n value: translate('NoChange'),\r\n isDisabled: includeNoChangeDisabled\r\n });\r\n }\r\n\r\n if (includeMixed) {\r\n values.unshift({\r\n key: 'mixed',\r\n value: `(${translate('Mixed')})`,\r\n isDisabled: true\r\n });\r\n }\r\n\r\n return {\r\n values\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass QualityProfileSelectInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n name,\r\n value,\r\n values\r\n } = this.props;\r\n\r\n if (!value || !values.some((option) => option.key === value || parseInt(option.key) === value)) {\r\n const firstValue = values.find((option) => !isNaN(parseInt(option.key)));\r\n\r\n if (firstValue) {\r\n this.onChange({ name, value: firstValue.key });\r\n }\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = ({ name, value }) => {\r\n this.props.onChange({ name, value: value === 'noChange' ? value : parseInt(value) });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nQualityProfileSelectInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n includeNoChange: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nQualityProfileSelectInputConnector.defaultProps = {\r\n includeNoChange: false\r\n};\r\n\r\nexport default connect(createMapStateToProps)(QualityProfileSelectInputConnector);\r\n","import { createSelector } from 'reselect';\r\nimport RootFolderAppState from 'App/State/RootFolderAppState';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport RootFolder from 'typings/RootFolder';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\n\r\nexport default function createRootFoldersSelector() {\r\n return createSelector(\r\n createSortedSectionSelector('rootFolders', sortByProp('path')),\r\n (rootFolders: RootFolderAppState) => rootFolders\r\n );\r\n}\r\n","import { filesize } from 'filesize';\r\n\r\nfunction formatBytes(input: string | number) {\r\n const size = Number(input);\r\n\r\n if (isNaN(size)) {\r\n return '';\r\n }\r\n\r\n return `${filesize(size, {\r\n base: 2,\r\n round: 1,\r\n })}`;\r\n}\r\n\r\nexport default formatBytes;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport EnhancedSelectInputOption from './EnhancedSelectInputOption';\r\nimport styles from './RootFolderSelectInputOption.css';\r\n\r\nfunction RootFolderSelectInputOption(props) {\r\n const {\r\n id,\r\n value,\r\n freeSpace,\r\n isMissing,\r\n movieFolder,\r\n isMobile,\r\n isWindows,\r\n ...otherProps\r\n } = props;\r\n\r\n const slashCharacter = isWindows ? '\\\\' : '/';\r\n\r\n return (\r\n \r\n
\r\n
\r\n {value}\r\n\r\n {\r\n movieFolder && id !== 'addNew' ?\r\n
\r\n {slashCharacter}\r\n {movieFolder}\r\n
:\r\n null\r\n }\r\n
\r\n\r\n {\r\n freeSpace == null ?\r\n null :\r\n
\r\n {translate('RootFolderSelectFreeSpace', { freeSpace: formatBytes(freeSpace) })}\r\n
\r\n }\r\n\r\n {\r\n isMissing ?\r\n
\r\n {translate('Missing')}\r\n
:\r\n null\r\n }\r\n
\r\n \r\n );\r\n}\r\n\r\nRootFolderSelectInputOption.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n freeSpace: PropTypes.number,\r\n isMissing: PropTypes.bool,\r\n movieFolder: PropTypes.string,\r\n isMobile: PropTypes.bool.isRequired,\r\n isWindows: PropTypes.bool\r\n};\r\n\r\nexport default RootFolderSelectInputOption;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"optionText\":\"RootFolderSelectInputOption-optionText-kW7hj\",\"isMobile\":\"RootFolderSelectInputOption-isMobile-UAHiE\",\"freeSpace\":\"RootFolderSelectInputOption-freeSpace-qzV1M\",\"value\":\"RootFolderSelectInputOption-value-BaWTE\",\"movieFolder\":\"RootFolderSelectInputOption-movieFolder-l4EbI\",\"isMissing\":\"RootFolderSelectInputOption-isMissing-ZGVV4\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport EnhancedSelectInputSelectedValue from './EnhancedSelectInputSelectedValue';\r\nimport styles from './RootFolderSelectInputSelectedValue.css';\r\n\r\nfunction RootFolderSelectInputSelectedValue(props) {\r\n const {\r\n value,\r\n freeSpace,\r\n movieFolder,\r\n includeFreeSpace,\r\n isWindows,\r\n ...otherProps\r\n } = props;\r\n\r\n const slashCharacter = isWindows ? '\\\\' : '/';\r\n\r\n return (\r\n \r\n
\r\n
\r\n {value}\r\n
\r\n\r\n {\r\n movieFolder ?\r\n
\r\n {slashCharacter}\r\n {movieFolder}\r\n
:\r\n null\r\n }\r\n
\r\n\r\n {\r\n freeSpace != null && includeFreeSpace &&\r\n
\r\n {translate('RootFolderSelectFreeSpace', { freeSpace: formatBytes(freeSpace) })}\r\n
\r\n }\r\n \r\n );\r\n}\r\n\r\nRootFolderSelectInputSelectedValue.propTypes = {\r\n value: PropTypes.string,\r\n freeSpace: PropTypes.number,\r\n movieFolder: PropTypes.string,\r\n isWindows: PropTypes.bool,\r\n includeFreeSpace: PropTypes.bool.isRequired\r\n};\r\n\r\nRootFolderSelectInputSelectedValue.defaultProps = {\r\n includeFreeSpace: true\r\n};\r\n\r\nexport default RootFolderSelectInputSelectedValue;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"selectedValue\":\"RootFolderSelectInputSelectedValue-selectedValue-u1zQX EnhancedSelectInputSelectedValue-selectedValue-ZYeSR\",\"pathContainer\":\"RootFolderSelectInputSelectedValue-pathContainer-F0iuJ\",\"path\":\"RootFolderSelectInputSelectedValue-path-RO3q2\",\"movieFolder\":\"RootFolderSelectInputSelectedValue-movieFolder-JxikW\",\"freeSpace\":\"RootFolderSelectInputSelectedValue-freeSpace-jhiEe\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FileBrowserModal from 'Components/FileBrowser/FileBrowserModal';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\nimport RootFolderSelectInputOption from './RootFolderSelectInputOption';\r\nimport RootFolderSelectInputSelectedValue from './RootFolderSelectInputSelectedValue';\r\n\r\nclass RootFolderSelectInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isAddNewRootFolderModalOpen: false,\r\n newRootFolderPath: ''\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n name,\r\n isSaving,\r\n saveError,\r\n onChange\r\n } = this.props;\r\n\r\n const newRootFolderPath = this.state.newRootFolderPath;\r\n\r\n if (\r\n prevProps.isSaving &&\r\n !isSaving &&\r\n !saveError &&\r\n newRootFolderPath\r\n ) {\r\n onChange({ name, value: newRootFolderPath });\r\n this.setState({ newRootFolderPath: '' });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = ({ name, value }) => {\r\n if (value === 'addNew') {\r\n this.setState({ isAddNewRootFolderModalOpen: true });\r\n } else {\r\n this.props.onChange({ name, value });\r\n }\r\n };\r\n\r\n onNewRootFolderSelect = ({ value }) => {\r\n this.setState({ newRootFolderPath: value }, () => {\r\n this.props.onNewRootFolderSelect(value);\r\n });\r\n };\r\n\r\n onAddRootFolderModalClose = () => {\r\n this.setState({ isAddNewRootFolderModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n includeNoChange,\r\n onNewRootFolderSelect,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nRootFolderSelectInput.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n includeNoChange: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n onNewRootFolderSelect: PropTypes.func.isRequired\r\n};\r\n\r\nRootFolderSelectInput.defaultProps = {\r\n includeNoChange: false\r\n};\r\n\r\nexport default RootFolderSelectInput;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { addRootFolder } from 'Store/Actions/rootFolderActions';\r\nimport createRootFoldersSelector from 'Store/Selectors/createRootFoldersSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport RootFolderSelectInput from './RootFolderSelectInput';\r\n\r\nconst ADD_NEW_KEY = 'addNew';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createRootFoldersSelector(),\r\n (state, { value }) => value,\r\n (state, { includeMissingValue }) => includeMissingValue,\r\n (state, { includeNoChange }) => includeNoChange,\r\n (state, { includeNoChangeDisabled }) => includeNoChangeDisabled,\r\n (rootFolders, value, includeMissingValue, includeNoChange, includeNoChangeDisabled = true) => {\r\n const values = rootFolders.items.map((rootFolder) => {\r\n return {\r\n key: rootFolder.path,\r\n value: rootFolder.path,\r\n freeSpace: rootFolder.freeSpace,\r\n isMissing: false\r\n };\r\n });\r\n\r\n if (includeNoChange) {\r\n values.unshift({\r\n key: 'noChange',\r\n value: translate('NoChange'),\r\n isDisabled: includeNoChangeDisabled,\r\n isMissing: false\r\n });\r\n }\r\n\r\n if (!values.length) {\r\n values.push({\r\n key: '',\r\n value: '',\r\n isDisabled: true,\r\n isHidden: true\r\n });\r\n }\r\n\r\n if (includeMissingValue && !values.find((v) => v.key === value)) {\r\n values.push({\r\n key: value,\r\n value,\r\n isMissing: true,\r\n isDisabled: true\r\n });\r\n }\r\n\r\n values.push({\r\n key: ADD_NEW_KEY,\r\n value: translate('AddANewPath')\r\n });\r\n\r\n return {\r\n values,\r\n isSaving: rootFolders.isSaving,\r\n saveError: rootFolders.saveError\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n dispatchAddRootFolder(path) {\r\n dispatch(addRootFolder({ path }));\r\n }\r\n };\r\n}\r\n\r\nclass RootFolderSelectInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n UNSAFE_componentWillMount() {\r\n const {\r\n value,\r\n values,\r\n onChange\r\n } = this.props;\r\n\r\n if (value == null && values[0].key === '') {\r\n onChange({ name, value: '' });\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n const {\r\n name,\r\n value,\r\n values,\r\n onChange\r\n } = this.props;\r\n\r\n if (!value || !values.some((v) => v.key === value) || value === ADD_NEW_KEY) {\r\n const defaultValue = values[0];\r\n\r\n if (defaultValue.key === ADD_NEW_KEY) {\r\n onChange({ name, value: '' });\r\n } else {\r\n onChange({ name, value: defaultValue.key });\r\n }\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n name,\r\n value,\r\n values,\r\n onChange\r\n } = this.props;\r\n\r\n if (prevProps.values === values) {\r\n return;\r\n }\r\n\r\n if (!value && values.length && values.some((v) => !!v.key && v.key !== ADD_NEW_KEY)) {\r\n const defaultValue = values[0];\r\n\r\n if (defaultValue.key !== ADD_NEW_KEY) {\r\n onChange({ name, value: defaultValue.key });\r\n }\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onNewRootFolderSelect = (path) => {\r\n this.props.dispatchAddRootFolder(path);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n dispatchAddRootFolder,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nRootFolderSelectInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n includeNoChange: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n dispatchAddRootFolder: PropTypes.func.isRequired\r\n};\r\n\r\nRootFolderSelectInputConnector.defaultProps = {\r\n includeNoChange: false,\r\n value: ''\r\n};\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(RootFolderSelectInputConnector);\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport TagInput from './TagInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { value }) => value,\r\n (state, { values }) => values,\r\n (tags, tagList) => {\r\n const sortedTags = _.sortBy(tagList, 'value');\r\n\r\n return {\r\n tags: tags.reduce((acc, tag) => {\r\n const matchingTag = _.find(tagList, { key: tag });\r\n\r\n if (matchingTag) {\r\n acc.push({\r\n id: tag,\r\n name: matchingTag.value\r\n });\r\n }\r\n\r\n return acc;\r\n }, []),\r\n\r\n tagList: sortedTags.map(({ key: id, value: name }) => {\r\n return {\r\n id,\r\n name\r\n };\r\n }),\r\n\r\n allTags: sortedTags\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass TagSelectInputConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onTagAdd = (tag) => {\r\n const {\r\n name,\r\n value,\r\n allTags\r\n } = this.props;\r\n\r\n const existingTag =_.some(allTags, { key: tag.id });\r\n\r\n const newValue = value.slice();\r\n\r\n if (existingTag) {\r\n newValue.push(tag.id);\r\n }\r\n\r\n this.props.onChange({ name, value: newValue });\r\n };\r\n\r\n onTagDelete = ({ index }) => {\r\n const {\r\n name,\r\n value\r\n } = this.props;\r\n\r\n const newValue = value.slice();\r\n newValue.splice(index, 1);\r\n\r\n this.props.onChange({\r\n name,\r\n value: newValue\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nTagSelectInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n allTags: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps)(TagSelectInputConnector);\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './TextArea.css';\r\n\r\nclass TextArea extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._input = null;\r\n this._selectionStart = null;\r\n this._selectionEnd = null;\r\n this._selectionTimeout = null;\r\n this._isMouseTarget = false;\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('mouseup', this.onDocumentMouseUp);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('mouseup', this.onDocumentMouseUp);\r\n\r\n if (this._selectionTimeout) {\r\n this._selectionTimeout = clearTimeout(this._selectionTimeout);\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n setInputRef = (ref) => {\r\n this._input = ref;\r\n };\r\n\r\n selectionChange() {\r\n if (this._selectionTimeout) {\r\n this._selectionTimeout = clearTimeout(this._selectionTimeout);\r\n }\r\n\r\n this._selectionTimeout = setTimeout(() => {\r\n const selectionStart = this._input.selectionStart;\r\n const selectionEnd = this._input.selectionEnd;\r\n\r\n const selectionChanged = (\r\n this._selectionStart !== selectionStart ||\r\n this._selectionEnd !== selectionEnd\r\n );\r\n\r\n this._selectionStart = selectionStart;\r\n this._selectionEnd = selectionEnd;\r\n\r\n if (this.props.onSelectionChange && selectionChanged) {\r\n this.props.onSelectionChange(selectionStart, selectionEnd);\r\n }\r\n }, 10);\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = (event) => {\r\n const {\r\n name,\r\n onChange\r\n } = this.props;\r\n\r\n const payload = {\r\n name,\r\n value: event.target.value\r\n };\r\n\r\n onChange(payload);\r\n };\r\n\r\n onFocus = (event) => {\r\n if (this.props.onFocus) {\r\n this.props.onFocus(event);\r\n }\r\n\r\n this.selectionChange();\r\n };\r\n\r\n onKeyUp = () => {\r\n this.selectionChange();\r\n };\r\n\r\n onMouseDown = () => {\r\n this._isMouseTarget = true;\r\n };\r\n\r\n onMouseUp = () => {\r\n this.selectionChange();\r\n };\r\n\r\n onDocumentMouseUp = () => {\r\n if (this._isMouseTarget) {\r\n this.selectionChange();\r\n }\r\n\r\n this._isMouseTarget = false;\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n readOnly,\r\n autoFocus,\r\n placeholder,\r\n name,\r\n value,\r\n hasError,\r\n hasWarning,\r\n onBlur\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nTextArea.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n readOnly: PropTypes.bool,\r\n autoFocus: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.array]).isRequired,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n onChange: PropTypes.func.isRequired,\r\n onFocus: PropTypes.func,\r\n onBlur: PropTypes.func,\r\n onSelectionChange: PropTypes.func\r\n};\r\n\r\nTextArea.defaultProps = {\r\n className: styles.input,\r\n type: 'text',\r\n readOnly: false,\r\n autoFocus: false,\r\n value: ''\r\n};\r\n\r\nexport default TextArea;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"TextArea-input-E794O Input-input-KWeec\",\"readOnly\":\"TextArea-readOnly-ysBOQ\",\"hasError\":\"TextArea-hasError-tL5zd Input-hasError-_3DW5\",\"hasWarning\":\"TextArea-hasWarning-qW1kz Input-hasWarning-K_6E_\"};","import _ from 'lodash';\r\n\r\nfunction split(input, separator = ',') {\r\n if (!input) {\r\n return [];\r\n }\r\n\r\n return _.reduce(input.split(separator), (result, s) => {\r\n if (s) {\r\n result.push(s);\r\n }\r\n\r\n return result;\r\n }, []);\r\n}\r\n\r\nexport default split;\r\n","\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport split from 'Utilities/String/split';\r\nimport TagInput from './TagInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { value }) => value,\r\n (tags) => {\r\n const tagsArray = Array.isArray(tags) ? tags : split(tags);\r\n\r\n return {\r\n tags: tagsArray.reduce((result, tag) => {\r\n if (tag) {\r\n result.push({\r\n id: tag,\r\n name: tag\r\n });\r\n }\r\n\r\n return result;\r\n }, []),\r\n valueArray: tagsArray\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass TextTagInputConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onTagAdd = (tag) => {\r\n const {\r\n name,\r\n valueArray,\r\n onChange\r\n } = this.props;\r\n\r\n // Split and trim tags before adding them to the list, this will\r\n // cleanse tags pasted in that had commas and spaces which leads\r\n // to oddities with restrictions (as an example).\r\n\r\n const newValue = [...valueArray];\r\n const newTags = tag.name.startsWith('/') ? [tag.name] : split(tag.name);\r\n\r\n newTags.forEach((newTag) => {\r\n const newTagValue = newTag.trim();\r\n\r\n if (newTagValue) {\r\n newValue.push(newTagValue);\r\n }\r\n });\r\n\r\n onChange({ name, value: newValue });\r\n };\r\n\r\n onTagDelete = ({ index }) => {\r\n const {\r\n name,\r\n valueArray,\r\n onChange\r\n } = this.props;\r\n\r\n const newValue = [...valueArray];\r\n newValue.splice(index, 1);\r\n\r\n onChange({\r\n name,\r\n value: newValue\r\n });\r\n };\r\n\r\n onTagReplace = (tagToReplace, newTag) => {\r\n const {\r\n name,\r\n valueArray,\r\n onChange\r\n } = this.props;\r\n\r\n const newValue = [...valueArray];\r\n newValue.splice(tagToReplace.index, 1);\r\n\r\n const newTagValue = newTag.name.trim();\r\n\r\n if (newTagValue) {\r\n newValue.push(newTagValue);\r\n }\r\n\r\n onChange({ name, value: newValue });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nTextTagInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n valueArray: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, null)(TextTagInputConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"inputWrapper\":\"UMaskInput-inputWrapper-UxHxs\",\"inputFolder\":\"UMaskInput-inputFolder-ii2_s Input-input-KWeec\",\"inputUnitWrapper\":\"UMaskInput-inputUnitWrapper-OaoxB\",\"inputUnit\":\"UMaskInput-inputUnit-nvPDj FormInputGroup-inputUnit-rRSCN\",\"unit\":\"UMaskInput-unit-KOW_y\",\"details\":\"UMaskInput-details-vz9Ac\",\"value\":\"UMaskInput-value-NygNY\",\"readOnly\":\"UMaskInput-readOnly-IZN2I\"};","/* eslint-disable no-bitwise */\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport translate from 'Utilities/String/translate';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\nimport styles from './UMaskInput.css';\r\n\r\nconst umaskOptions = [\r\n {\r\n key: '755',\r\n get value() {\r\n return translate('Umask755Description', { octal: '755' });\r\n },\r\n hint: 'drwxr-xr-x'\r\n },\r\n {\r\n key: '775',\r\n get value() {\r\n return translate('Umask775Description', { octal: '775' });\r\n },\r\n hint: 'drwxrwxr-x'\r\n },\r\n {\r\n key: '770',\r\n get value() {\r\n return translate('Umask770Description', { octal: '770' });\r\n },\r\n hint: 'drwxrwx---'\r\n },\r\n {\r\n key: '750',\r\n get value() {\r\n return translate('Umask750Description', { octal: '750' });\r\n },\r\n hint: 'drwxr-x---'\r\n },\r\n {\r\n key: '777',\r\n get value() {\r\n return translate('Umask777Description', { octal: '777' });\r\n },\r\n hint: 'drwxrwxrwx'\r\n }\r\n];\r\n\r\nfunction formatPermissions(permissions) {\r\n\r\n const hasSticky = permissions & 0o1000;\r\n const hasSetGID = permissions & 0o2000;\r\n const hasSetUID = permissions & 0o4000;\r\n\r\n let result = '';\r\n\r\n for (let i = 0; i < 9; i++) {\r\n const bit = (permissions & (1 << i)) !== 0;\r\n let digit = bit ? 'xwr'[i % 3] : '-';\r\n if (i === 6 && hasSetUID) {\r\n digit = bit ? 's' : 'S';\r\n } else if (i === 3 && hasSetGID) {\r\n digit = bit ? 's' : 'S';\r\n } else if (i === 0 && hasSticky) {\r\n digit = bit ? 't' : 'T';\r\n }\r\n result = digit + result;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nclass UMaskInput extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n name,\r\n value,\r\n onChange\r\n } = this.props;\r\n\r\n const valueNum = parseInt(value, 8);\r\n const umaskNum = 0o777 & ~valueNum;\r\n const umask = umaskNum.toString(8).padStart(4, '0');\r\n const folderNum = 0o777 & ~umaskNum;\r\n const folder = folderNum.toString(8).padStart(3, '0');\r\n const fileNum = 0o666 & ~umaskNum;\r\n const file = fileNum.toString(8).padStart(3, '0');\r\n\r\n const unit = formatPermissions(folderNum);\r\n\r\n const values = umaskOptions.map((v) => {\r\n return { ...v, hint: {v.hint} };\r\n });\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n\r\n
\r\n d{unit}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
{umask}
\r\n
\r\n
\r\n \r\n
{folder}
\r\n
d{formatPermissions(folderNum)}
\r\n
\r\n
\r\n \r\n
{file}
\r\n
{formatPermissions(fileNum)}
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nUMaskInput.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n onChange: PropTypes.func.isRequired,\r\n onFocus: PropTypes.func,\r\n onBlur: PropTypes.func\r\n};\r\n\r\nexport default UMaskInput;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AutoCompleteInput from './AutoCompleteInput';\r\nimport AvailabilitySelectInput from './AvailabilitySelectInput';\r\nimport CaptchaInputConnector from './CaptchaInputConnector';\r\nimport CheckInput from './CheckInput';\r\nimport DeviceInputConnector from './DeviceInputConnector';\r\nimport DownloadClientSelectInputConnector from './DownloadClientSelectInputConnector';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\nimport EnhancedSelectInputConnector from './EnhancedSelectInputConnector';\r\nimport FormInputHelpText from './FormInputHelpText';\r\nimport IndexerFlagsSelectInput from './IndexerFlagsSelectInput';\r\nimport IndexerSelectInputConnector from './IndexerSelectInputConnector';\r\nimport KeyValueListInput from './KeyValueListInput';\r\nimport LanguageSelectInputConnector from './LanguageSelectInputConnector';\r\nimport MovieMonitoredSelectInput from './MovieMonitoredSelectInput';\r\nimport MovieTagInput from './MovieTagInput';\r\nimport NumberInput from './NumberInput';\r\nimport OAuthInputConnector from './OAuthInputConnector';\r\nimport PasswordInput from './PasswordInput';\r\nimport PathInputConnector from './PathInputConnector';\r\nimport QualityProfileSelectInputConnector from './QualityProfileSelectInputConnector';\r\nimport RootFolderSelectInputConnector from './RootFolderSelectInputConnector';\r\nimport TagInputConnector from './TagInputConnector';\r\nimport TagSelectInputConnector from './TagSelectInputConnector';\r\nimport TextArea from './TextArea';\r\nimport TextInput from './TextInput';\r\nimport TextTagInputConnector from './TextTagInputConnector';\r\nimport UMaskInput from './UMaskInput';\r\nimport styles from './FormInputGroup.css';\r\n\r\nfunction getComponent(type) {\r\n switch (type) {\r\n case inputTypes.AUTO_COMPLETE:\r\n return AutoCompleteInput;\r\n\r\n case inputTypes.AVAILABILITY_SELECT:\r\n return AvailabilitySelectInput;\r\n\r\n case inputTypes.CAPTCHA:\r\n return CaptchaInputConnector;\r\n\r\n case inputTypes.CHECK:\r\n return CheckInput;\r\n\r\n case inputTypes.DEVICE:\r\n return DeviceInputConnector;\r\n\r\n case inputTypes.KEY_VALUE_LIST:\r\n return KeyValueListInput;\r\n\r\n case inputTypes.NUMBER:\r\n return NumberInput;\r\n\r\n case inputTypes.OAUTH:\r\n return OAuthInputConnector;\r\n\r\n case inputTypes.PASSWORD:\r\n return PasswordInput;\r\n\r\n case inputTypes.PATH:\r\n return PathInputConnector;\r\n\r\n case inputTypes.QUALITY_PROFILE_SELECT:\r\n return QualityProfileSelectInputConnector;\r\n\r\n case inputTypes.INDEXER_SELECT:\r\n return IndexerSelectInputConnector;\r\n\r\n case inputTypes.MOVIE_MONITORED_SELECT:\r\n return MovieMonitoredSelectInput;\r\n\r\n case inputTypes.ROOT_FOLDER_SELECT:\r\n return RootFolderSelectInputConnector;\r\n\r\n case inputTypes.INDEXER_FLAGS_SELECT:\r\n return IndexerFlagsSelectInput;\r\n\r\n case inputTypes.DOWNLOAD_CLIENT_SELECT:\r\n return DownloadClientSelectInputConnector;\r\n\r\n case inputTypes.LANGUAGE_SELECT:\r\n return LanguageSelectInputConnector;\r\n\r\n case inputTypes.SELECT:\r\n return EnhancedSelectInput;\r\n\r\n case inputTypes.DYNAMIC_SELECT:\r\n return EnhancedSelectInputConnector;\r\n\r\n case inputTypes.MOVIE_TAG:\r\n return MovieTagInput;\r\n\r\n case inputTypes.TAG:\r\n return TagInputConnector;\r\n\r\n case inputTypes.TEXT_AREA:\r\n return TextArea;\r\n\r\n case inputTypes.TEXT_TAG:\r\n return TextTagInputConnector;\r\n\r\n case inputTypes.TAG_SELECT:\r\n return TagSelectInputConnector;\r\n\r\n case inputTypes.UMASK:\r\n return UMaskInput;\r\n\r\n default:\r\n return TextInput;\r\n }\r\n}\r\n\r\nfunction FormInputGroup(props) {\r\n const {\r\n className,\r\n containerClassName,\r\n inputClassName,\r\n type,\r\n unit,\r\n buttons,\r\n helpText,\r\n helpTexts,\r\n helpTextWarning,\r\n helpLink,\r\n pending,\r\n errors,\r\n warnings,\r\n ...otherProps\r\n } = props;\r\n\r\n const InputComponent = getComponent(type);\r\n const checkInput = type === inputTypes.CHECK;\r\n const hasError = !!errors.length;\r\n const hasWarning = !hasError && !!warnings.length;\r\n const buttonsArray = React.Children.toArray(buttons);\r\n const lastButtonIndex = buttonsArray.length - 1;\r\n const hasButton = !!buttonsArray.length;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n\r\n {\r\n unit &&\r\n \r\n {unit}\r\n
\r\n }\r\n
\r\n\r\n {\r\n buttonsArray.map((button, index) => {\r\n return React.cloneElement(\r\n button,\r\n {\r\n isLastButton: index === lastButtonIndex\r\n }\r\n );\r\n })\r\n }\r\n\r\n {/*
\r\n {\r\n pending &&\r\n \r\n }\r\n
*/}\r\n
\r\n\r\n {\r\n !checkInput && helpText &&\r\n \r\n }\r\n\r\n {\r\n !checkInput && helpTexts &&\r\n
\r\n {\r\n helpTexts.map((text, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n }\r\n\r\n {\r\n (!checkInput || helpText) && helpTextWarning &&\r\n \r\n }\r\n\r\n {\r\n helpLink &&\r\n \r\n {translate('MoreInfo')}\r\n \r\n }\r\n\r\n {\r\n errors.map((error, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n {\r\n warnings.map((warning, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n );\r\n}\r\n\r\nFormInputGroup.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n containerClassName: PropTypes.string.isRequired,\r\n inputClassName: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.any,\r\n values: PropTypes.arrayOf(PropTypes.any),\r\n placeholder: PropTypes.string,\r\n delimiters: PropTypes.arrayOf(PropTypes.string),\r\n isDisabled: PropTypes.bool,\r\n type: PropTypes.string.isRequired,\r\n kind: PropTypes.oneOf(kinds.all),\r\n min: PropTypes.number,\r\n max: PropTypes.number,\r\n unit: PropTypes.string,\r\n buttons: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),\r\n helpText: PropTypes.string,\r\n helpTexts: PropTypes.arrayOf(PropTypes.string),\r\n helpTextWarning: PropTypes.string,\r\n helpLink: PropTypes.string,\r\n autoFocus: PropTypes.bool,\r\n canEdit: PropTypes.bool,\r\n includeNoChange: PropTypes.bool,\r\n includeNoChangeDisabled: PropTypes.bool,\r\n includeAny: PropTypes.bool,\r\n selectedValueOptions: PropTypes.object,\r\n indexerFlags: PropTypes.number,\r\n pending: PropTypes.bool,\r\n errors: PropTypes.arrayOf(PropTypes.object),\r\n warnings: PropTypes.arrayOf(PropTypes.object),\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nFormInputGroup.defaultProps = {\r\n className: styles.inputGroup,\r\n containerClassName: styles.inputGroupContainer,\r\n type: inputTypes.TEXT,\r\n buttons: [],\r\n helpTexts: [],\r\n errors: [],\r\n warnings: []\r\n};\r\n\r\nexport default FormInputGroup;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"inputGroupContainer\":\"FormInputGroup-inputGroupContainer-YhfqJ\",\"inputGroup\":\"FormInputGroup-inputGroup-Yqmkv\",\"inputContainer\":\"FormInputGroup-inputContainer-yauGG\",\"inputUnit\":\"FormInputGroup-inputUnit-rRSCN\",\"inputUnitNumber\":\"FormInputGroup-inputUnitNumber-oqRfn FormInputGroup-inputUnit-rRSCN\",\"pendingChangesContainer\":\"FormInputGroup-pendingChangesContainer-BLt9I\",\"pendingChangesIcon\":\"FormInputGroup-pendingChangesIcon-XrqHM\",\"helpLink\":\"FormInputGroup-helpLink-uIwQR\"};","import classNames from 'classnames';\r\nimport React, { ComponentProps } from 'react';\r\nimport { sizes } from 'Helpers/Props';\r\nimport { Size } from 'Helpers/Props/sizes';\r\nimport styles from './FieldSet.css';\r\n\r\ninterface FieldSetProps {\r\n size?: Size;\r\n legend?: ComponentProps<'legend'>['children'];\r\n children?: React.ReactNode;\r\n}\r\n\r\nfunction FieldSet({ size = sizes.MEDIUM, legend, children }: FieldSetProps) {\r\n return (\r\n
\r\n \r\n {legend}\r\n \r\n {children}\r\n
\r\n );\r\n}\r\n\r\nexport default FieldSet;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"fieldSet\":\"FieldSet-fieldSet-CMapa\",\"legend\":\"FieldSet-legend-M8__d\",\"small\":\"FieldSet-small-SxwJl\"};","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"ClipboardButton-button-u0nGA FormInputButton-button-qvTt5 Button-button-paJ9a Link-link-RInnp\",\"stateIconContainer\":\"ClipboardButton-stateIconContainer-AejXw\",\"clipboardIconContainer\":\"ClipboardButton-clipboardIconContainer-cs16L\",\"showStateIcon\":\"ClipboardButton-showStateIcon-Abpza\"};","import copy from 'copy-to-clipboard';\r\nimport React, { useCallback, useEffect, useState } from 'react';\r\nimport FormInputButton from 'Components/Form/FormInputButton';\r\nimport Icon from 'Components/Icon';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport { ButtonProps } from './Button';\r\nimport styles from './ClipboardButton.css';\r\n\r\nexport interface ClipboardButtonProps extends Omit {\r\n value: string;\r\n}\r\n\r\nexport type ClipboardState = 'success' | 'error' | null;\r\n\r\nexport default function ClipboardButton({\r\n id,\r\n value,\r\n className = styles.button,\r\n ...otherProps\r\n}: ClipboardButtonProps) {\r\n const [state, setState] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!state) {\r\n return;\r\n }\r\n\r\n const timeoutId = setTimeout(() => {\r\n setState(null);\r\n }, 3000);\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n };\r\n }, [state]);\r\n\r\n const handleClick = useCallback(async () => {\r\n try {\r\n if ('clipboard' in navigator) {\r\n await navigator.clipboard.writeText(value);\r\n } else {\r\n copy(value);\r\n }\r\n\r\n setState('success');\r\n } catch (e) {\r\n setState('error');\r\n console.error(`Failed to copy to clipboard`, e);\r\n }\r\n }, [value]);\r\n\r\n return (\r\n \r\n \r\n {state ? (\r\n \r\n \r\n \r\n ) : null}\r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import Mousetrap from 'mousetrap';\r\nimport React, { Component } from 'react';\r\nimport getDisplayName from 'Helpers/getDisplayName';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nexport const shortcuts = {\r\n OPEN_KEYBOARD_SHORTCUTS_MODAL: {\r\n key: '?',\r\n get name() {\r\n return translate('KeyboardShortcutsOpenModal');\r\n }\r\n },\r\n\r\n CLOSE_MODAL: {\r\n key: 'Esc',\r\n get name() {\r\n return translate('KeyboardShortcutsCloseModal');\r\n }\r\n },\r\n\r\n ACCEPT_CONFIRM_MODAL: {\r\n key: 'Enter',\r\n get name() {\r\n return translate('KeyboardShortcutsConfirmModal');\r\n }\r\n },\r\n\r\n MOVIE_SEARCH_INPUT: {\r\n key: 's',\r\n get name() {\r\n return translate('KeyboardShortcutsFocusSearchBox');\r\n }\r\n },\r\n\r\n SAVE_SETTINGS: {\r\n key: 'mod+s',\r\n get name() {\r\n return translate('KeyboardShortcutsSaveSettings');\r\n }\r\n },\r\n\r\n SCROLL_TOP: {\r\n key: 'mod+home',\r\n get name() {\r\n return translate('KeyboardShortcutsMovieIndexScrollTop');\r\n }\r\n },\r\n\r\n SCROLL_BOTTOM: {\r\n key: 'mod+end',\r\n get name() {\r\n return translate('KeyboardShortcutsMovieIndexScrollBottom');\r\n }\r\n },\r\n\r\n DETAILS_NEXT: {\r\n key: '→',\r\n get name() {\r\n return translate('KeyboardShortcutsMovieDetailsNextMovie');\r\n }\r\n },\r\n\r\n DETAILS_PREVIOUS: {\r\n key: '←',\r\n get name() {\r\n return translate('KeyboardShortcutsMovieDetailsPreviousMovie');\r\n }\r\n }\r\n};\r\n\r\nfunction keyboardShortcuts(WrappedComponent) {\r\n class KeyboardShortcuts extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n this._mousetrapBindings = {};\r\n this._mousetrap = new Mousetrap();\r\n this._mousetrap.stopCallback = this.stopCallback;\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unbindAllShortcuts();\r\n this._mousetrap = null;\r\n }\r\n\r\n //\r\n // Control\r\n\r\n bindShortcut = (key, callback, options = {}) => {\r\n this._mousetrap.bind(key, callback);\r\n this._mousetrapBindings[key] = options;\r\n };\r\n\r\n unbindShortcut = (key) => {\r\n if (this._mousetrap != null) {\r\n delete this._mousetrapBindings[key];\r\n this._mousetrap.unbind(key);\r\n }\r\n };\r\n\r\n unbindAllShortcuts = () => {\r\n const keys = Object.keys(this._mousetrapBindings);\r\n\r\n if (!keys.length) {\r\n return;\r\n }\r\n\r\n keys.forEach((binding) => {\r\n this._mousetrap.unbind(binding);\r\n });\r\n\r\n this._mousetrapBindings = {};\r\n };\r\n\r\n stopCallback = (event, element, combo) => {\r\n const binding = this._mousetrapBindings[combo];\r\n\r\n if (!binding || binding.isGlobal) {\r\n return false;\r\n }\r\n\r\n return (\r\n element.tagName === 'INPUT' ||\r\n element.tagName === 'SELECT' ||\r\n element.tagName === 'TEXTAREA' ||\r\n (element.contentEditable && element.contentEditable === 'true')\r\n );\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n }\r\n\r\n KeyboardShortcuts.displayName = `KeyboardShortcut(${getDisplayName(WrappedComponent)})`;\r\n KeyboardShortcuts.WrappedComponent = WrappedComponent;\r\n\r\n return KeyboardShortcuts;\r\n}\r\n\r\nexport default keyboardShortcuts;\r\n","export default function getDisplayName(Component) {\r\n return Component.displayName || Component.name || 'Component';\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport keyboardShortcuts from 'Components/keyboardShortcuts';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds, sizes } from 'Helpers/Props';\r\n\r\nfunction ConfirmModal(props) {\r\n const {\r\n isOpen,\r\n kind,\r\n size,\r\n title,\r\n message,\r\n confirmLabel,\r\n cancelLabel,\r\n hideCancelButton,\r\n isSpinning,\r\n onConfirm,\r\n onCancel,\r\n bindShortcut,\r\n unbindShortcut\r\n } = props;\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n bindShortcut('enter', onConfirm);\r\n\r\n return () => unbindShortcut('enter', onConfirm);\r\n }\r\n }, [bindShortcut, unbindShortcut, isOpen, onConfirm]);\r\n\r\n return (\r\n \r\n \r\n {title}\r\n\r\n \r\n {message}\r\n \r\n\r\n \r\n {\r\n !hideCancelButton &&\r\n \r\n {cancelLabel}\r\n \r\n }\r\n\r\n \r\n {confirmLabel}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nConfirmModal.propTypes = {\r\n className: PropTypes.string,\r\n isOpen: PropTypes.bool.isRequired,\r\n kind: PropTypes.oneOf(kinds.all),\r\n size: PropTypes.oneOf(sizes.all),\r\n title: PropTypes.string.isRequired,\r\n message: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired,\r\n confirmLabel: PropTypes.string,\r\n cancelLabel: PropTypes.string,\r\n hideCancelButton: PropTypes.bool,\r\n isSpinning: PropTypes.bool.isRequired,\r\n onConfirm: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n bindShortcut: PropTypes.func.isRequired,\r\n unbindShortcut: PropTypes.func.isRequired\r\n};\r\n\r\nConfirmModal.defaultProps = {\r\n kind: kinds.PRIMARY,\r\n size: sizes.MEDIUM,\r\n confirmLabel: 'OK',\r\n cancelLabel: 'Cancel',\r\n isSpinning: false\r\n};\r\n\r\nexport default keyboardShortcuts(ConfirmModal);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputButton from 'Components/Form/FormInputButton';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Icon from 'Components/Icon';\r\nimport ClipboardButton from 'Components/Link/ClipboardButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport { icons, inputTypes, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nexport const authenticationMethodOptions = [\r\n {\r\n key: 'none',\r\n get value() {\r\n return translate('None');\r\n },\r\n isDisabled: true\r\n },\r\n {\r\n key: 'external',\r\n get value() {\r\n return translate('External');\r\n },\r\n isHidden: true\r\n },\r\n {\r\n key: 'basic',\r\n get value() {\r\n return translate('AuthBasic');\r\n }\r\n },\r\n {\r\n key: 'forms',\r\n get value() {\r\n return translate('AuthForm');\r\n }\r\n }\r\n];\r\n\r\nexport const authenticationRequiredOptions = [\r\n {\r\n key: 'enabled',\r\n get value() {\r\n return translate('Enabled');\r\n }\r\n },\r\n {\r\n key: 'disabledForLocalAddresses',\r\n get value() {\r\n return translate('DisabledForLocalAddresses');\r\n }\r\n }\r\n];\r\n\r\nconst certificateValidationOptions = [\r\n {\r\n key: 'enabled',\r\n get value() {\r\n return translate('Enabled');\r\n }\r\n },\r\n {\r\n key: 'disabledForLocalAddresses',\r\n get value() {\r\n return translate('DisabledForLocalAddresses');\r\n }\r\n },\r\n {\r\n key: 'disabled',\r\n get value() {\r\n return translate('Disabled');\r\n }\r\n }\r\n];\r\n\r\nclass SecuritySettings extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isConfirmApiKeyResetModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onApikeyFocus = (event) => {\r\n event.target.select();\r\n };\r\n\r\n onResetApiKeyPress = () => {\r\n this.setState({ isConfirmApiKeyResetModalOpen: true });\r\n };\r\n\r\n onConfirmResetApiKey = () => {\r\n this.setState({ isConfirmApiKeyResetModalOpen: false });\r\n this.props.onConfirmResetApiKey();\r\n };\r\n\r\n onCloseResetApiKeyModal = () => {\r\n this.setState({ isConfirmApiKeyResetModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n settings,\r\n isResettingApiKey,\r\n onInputChange\r\n } = this.props;\r\n\r\n const {\r\n authenticationMethod,\r\n authenticationRequired,\r\n username,\r\n password,\r\n passwordConfirmation,\r\n apiKey,\r\n certificateValidation\r\n } = settings;\r\n\r\n const authenticationEnabled = authenticationMethod && authenticationMethod.value !== 'none';\r\n\r\n return (\r\n
\r\n \r\n {translate('Authentication')}\r\n\r\n \r\n \r\n\r\n {\r\n authenticationEnabled ?\r\n \r\n {translate('AuthenticationRequired')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n authenticationEnabled ?\r\n \r\n {translate('Username')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n authenticationEnabled ?\r\n \r\n {translate('Password')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n authenticationEnabled ?\r\n \r\n {translate('PasswordConfirmation')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n \r\n {translate('ApiKey')}\r\n\r\n ,\r\n\r\n \r\n \r\n \r\n ]}\r\n onChange={onInputChange}\r\n onFocus={this.onApikeyFocus}\r\n {...apiKey}\r\n />\r\n \r\n\r\n \r\n {translate('CertificateValidation')}\r\n\r\n \r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nSecuritySettings.propTypes = {\r\n settings: PropTypes.object.isRequired,\r\n isResettingApiKey: PropTypes.bool.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onConfirmResetApiKey: PropTypes.func.isRequired\r\n};\r\n\r\nexport default SecuritySettings;\r\n","import { cloneDeep, isEmpty } from 'lodash';\r\nimport { Error } from 'App/State/AppSectionState';\r\nimport Field from 'typings/Field';\r\nimport {\r\n Failure,\r\n Pending,\r\n PendingField,\r\n PendingSection,\r\n ValidationError,\r\n ValidationFailure,\r\n ValidationWarning,\r\n} from 'typings/pending';\r\n\r\ninterface ValidationFailures {\r\n errors: ValidationError[];\r\n warnings: ValidationWarning[];\r\n}\r\n\r\nfunction getValidationFailures(saveError?: Error): ValidationFailures {\r\n if (!saveError || saveError.status !== 400) {\r\n return {\r\n errors: [],\r\n warnings: [],\r\n };\r\n }\r\n\r\n return cloneDeep(saveError.responseJSON as ValidationFailure[]).reduce(\r\n (acc: ValidationFailures, failure: ValidationFailure) => {\r\n if (failure.isWarning) {\r\n acc.warnings.push(failure as ValidationWarning);\r\n } else {\r\n acc.errors.push(failure as ValidationError);\r\n }\r\n\r\n return acc;\r\n },\r\n {\r\n errors: [],\r\n warnings: [],\r\n }\r\n );\r\n}\r\n\r\nfunction getFailures(failures: ValidationFailure[], key: string) {\r\n const result = [];\r\n\r\n for (let i = failures.length - 1; i >= 0; i--) {\r\n if (failures[i].propertyName.toLowerCase() === key.toLowerCase()) {\r\n result.unshift(mapFailure(failures[i]));\r\n\r\n failures.splice(i, 1);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction mapFailure(failure: ValidationFailure): Failure {\r\n return {\r\n errorMessage: failure.errorMessage,\r\n infoLink: failure.infoLink,\r\n detailedDescription: failure.detailedDescription,\r\n\r\n // TODO: Remove these renamed properties\r\n message: failure.errorMessage,\r\n link: failure.infoLink,\r\n detailedMessage: failure.detailedDescription,\r\n };\r\n}\r\n\r\ninterface ModelBaseSetting {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n [id: string]: any;\r\n}\r\n\r\nfunction selectSettings(\r\n item: T,\r\n pendingChanges: Partial,\r\n saveError?: Error\r\n) {\r\n const { errors, warnings } = getValidationFailures(saveError);\r\n\r\n // Merge all settings from the item along with pending\r\n // changes to ensure any settings that were not included\r\n // with the item are included.\r\n const allSettings = Object.assign({}, item, pendingChanges);\r\n\r\n const settings = Object.keys(allSettings).reduce(\r\n (acc: PendingSection, key) => {\r\n if (key === 'fields') {\r\n return acc;\r\n }\r\n\r\n // Return a flattened value\r\n if (key === 'implementationName') {\r\n acc.implementationName = item[key];\r\n\r\n return acc;\r\n }\r\n\r\n const setting: Pending = {\r\n value: item[key],\r\n pending: false,\r\n errors: getFailures(errors, key),\r\n warnings: getFailures(warnings, key),\r\n };\r\n\r\n if (pendingChanges.hasOwnProperty(key)) {\r\n setting.previousValue = setting.value;\r\n setting.value = pendingChanges[key];\r\n setting.pending = true;\r\n }\r\n\r\n // @ts-expect-error - This is a valid key\r\n acc[key] = setting;\r\n return acc;\r\n },\r\n {} as PendingSection\r\n );\r\n\r\n if ('fields' in item) {\r\n const fields =\r\n (item.fields as Field[]).reduce((acc: PendingField[], f) => {\r\n const field: PendingField = Object.assign(\r\n { pending: false, errors: [], warnings: [] },\r\n f\r\n );\r\n\r\n if ('fields' in pendingChanges) {\r\n const pendingChangesFields = pendingChanges.fields as Record<\r\n string,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n any\r\n >;\r\n\r\n if (pendingChangesFields.hasOwnProperty(field.name)) {\r\n field.previousValue = field.value;\r\n field.value = pendingChangesFields[field.name];\r\n field.pending = true;\r\n }\r\n }\r\n\r\n field.errors = getFailures(errors, field.name);\r\n field.warnings = getFailures(warnings, field.name);\r\n\r\n acc.push(field);\r\n return acc;\r\n }, []) ?? [];\r\n\r\n if (fields.length) {\r\n settings.fields = fields;\r\n }\r\n }\r\n\r\n const validationErrors = errors;\r\n const validationWarnings = warnings;\r\n\r\n return {\r\n settings,\r\n validationErrors,\r\n validationWarnings,\r\n hasPendingChanges: !isEmpty(pendingChanges),\r\n hasSettings: !isEmpty(settings),\r\n pendingChanges,\r\n };\r\n}\r\n\r\nexport default selectSettings;\r\n","import { createSelector } from 'reselect';\r\nimport { AppSectionItemState } from 'App/State/AppSectionState';\r\nimport AppState from 'App/State/AppState';\r\nimport SettingsAppState from 'App/State/SettingsAppState';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport { PendingSection } from 'typings/pending';\r\n\r\ntype SectionsWithItemNames = {\r\n [K in keyof SettingsAppState]: SettingsAppState[K] extends AppSectionItemState\r\n ? K\r\n : never;\r\n}[keyof SettingsAppState];\r\n\r\ntype GetSectionState =\r\n SettingsAppState[Name];\r\ntype GetSettingsSectionItemType =\r\n GetSectionState extends AppSectionItemState ? R : never;\r\n\r\nfunction createSettingsSectionSelector<\r\n Name extends SectionsWithItemNames,\r\n T extends GetSettingsSectionItemType\r\n>(section: Name) {\r\n return createSelector(\r\n (state: AppState) => state.settings[section],\r\n (sectionSettings) => {\r\n const { item, pendingChanges, ...other } = sectionSettings;\r\n\r\n const saveError =\r\n 'saveError' in sectionSettings ? sectionSettings.saveError : undefined;\r\n\r\n const {\r\n settings,\r\n pendingChanges: selectedPendingChanges,\r\n ...rest\r\n } = selectSettings(item, pendingChanges, saveError);\r\n\r\n return {\r\n ...other,\r\n saveError,\r\n settings: settings as PendingSection,\r\n pendingChanges: selectedPendingChanges as Partial,\r\n ...rest,\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createSettingsSectionSelector;\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Alert from 'Components/Alert';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport {\r\n authenticationMethodOptions,\r\n authenticationRequiredOptions,\r\n} from 'Settings/General/SecuritySettings';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport {\r\n fetchGeneralSettings,\r\n saveGeneralSettings,\r\n setGeneralSettingsValue,\r\n} from 'Store/Actions/settingsActions';\r\nimport { fetchStatus } from 'Store/Actions/systemActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport { InputChanged } from 'typings/inputs';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './AuthenticationRequiredModalContent.css';\r\n\r\nconst SECTION = 'general';\r\n\r\nconst selector = createSettingsSectionSelector(SECTION);\r\n\r\nfunction onModalClose() {\r\n // No-op\r\n}\r\n\r\nexport default function AuthenticationRequiredModalContent() {\r\n const { isPopulated, error, isSaving, settings } = useSelector(selector);\r\n const dispatch = useDispatch();\r\n\r\n const {\r\n authenticationMethod,\r\n authenticationRequired,\r\n username,\r\n password,\r\n passwordConfirmation,\r\n } = settings;\r\n\r\n const wasSaving = usePrevious(isSaving);\r\n\r\n useEffect(() => {\r\n dispatch(fetchGeneralSettings());\r\n\r\n return () => {\r\n dispatch(clearPendingChanges());\r\n };\r\n }, [dispatch]);\r\n\r\n const onInputChange = useCallback(\r\n (args: InputChanged) => {\r\n // @ts-expect-error Actions aren't typed\r\n dispatch(setGeneralSettingsValue(args));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const authenticationEnabled =\r\n authenticationMethod && authenticationMethod.value !== 'none';\r\n\r\n useEffect(() => {\r\n if (isSaving || !wasSaving) {\r\n return;\r\n }\r\n\r\n dispatch(fetchStatus());\r\n }, [isSaving, wasSaving, dispatch]);\r\n\r\n const onPress = useCallback(() => {\r\n dispatch(saveGeneralSettings());\r\n }, [dispatch]);\r\n\r\n return (\r\n \r\n {translate('AuthenticationRequired')}\r\n\r\n \r\n \r\n {translate('AuthenticationRequiredWarning')}\r\n \r\n\r\n {isPopulated && !error ? (\r\n
\r\n \r\n {translate('AuthenticationMethod')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('AuthenticationRequired')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Username')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Password')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('PasswordConfirmation')}\r\n\r\n \r\n \r\n
\r\n ) : null}\r\n\r\n {!isPopulated && !error ? : null}\r\n
\r\n\r\n \r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"authRequiredAlert\":\"AuthenticationRequiredModalContent-authRequiredAlert-E7Mqx Alert-alert-_KgnQ\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport AuthenticationRequiredModalContent from './AuthenticationRequiredModalContent';\r\n\r\nfunction onModalClose() {\r\n // No-op\r\n}\r\n\r\ninterface AuthenticationRequiredModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nexport default function AuthenticationRequiredModal({\r\n isOpen,\r\n}: AuthenticationRequiredModalProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import PropTypes from 'prop-types';\r\n\r\nconst locationShape = PropTypes.shape({\r\n pathname: PropTypes.string.isRequired,\r\n search: PropTypes.string.isRequired,\r\n state: PropTypes.object,\r\n action: PropTypes.string,\r\n key: PropTypes.string\r\n});\r\n\r\nexport default locationShape;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport KeyboardShortcutsModalContent from './KeyboardShortcutsModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSystemStatusSelector(),\r\n (systemStatus) => {\r\n return {\r\n isOsx: systemStatus.isOsx\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(KeyboardShortcutsModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { shortcuts } from 'Components/keyboardShortcuts';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './KeyboardShortcutsModalContent.css';\r\n\r\nfunction getShortcuts() {\r\n const allShortcuts = [];\r\n\r\n Object.keys(shortcuts).forEach((key) => {\r\n allShortcuts.push(shortcuts[key]);\r\n });\r\n\r\n return allShortcuts;\r\n}\r\n\r\nfunction getShortcutKey(combo, isOsx) {\r\n const comboMatch = combo.match(/(.+?)\\+(.*)/);\r\n\r\n if (!comboMatch) {\r\n return combo;\r\n }\r\n\r\n const modifier = comboMatch[1];\r\n let key = comboMatch[2];\r\n let osModifier = modifier;\r\n\r\n if (modifier === 'mod') {\r\n osModifier = isOsx ? 'cmd' : 'Ctrl';\r\n }\r\n\r\n if (key === 'home') {\r\n key = isOsx ? '↑' : 'Home';\r\n }\r\n\r\n if (key === 'end') {\r\n key = isOsx ? '↓' : 'End';\r\n }\r\n\r\n return `${osModifier} + ${key}`;\r\n}\r\n\r\nfunction KeyboardShortcutsModalContent(props) {\r\n const {\r\n isOsx,\r\n onModalClose\r\n } = props;\r\n\r\n const allShortcuts = getShortcuts();\r\n\r\n return (\r\n \r\n \r\n {translate('KeyboardShortcuts')}\r\n \r\n\r\n \r\n {\r\n allShortcuts.map((shortcut) => {\r\n return (\r\n \r\n
\r\n {getShortcutKey(shortcut.key, isOsx)}\r\n
\r\n\r\n
\r\n {shortcut.name}\r\n
\r\n \r\n );\r\n })\r\n }\r\n
\r\n\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nKeyboardShortcutsModalContent.propTypes = {\r\n isOsx: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default KeyboardShortcutsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"shortcut\":\"KeyboardShortcutsModalContent-shortcut-nblFz\",\"key\":\"KeyboardShortcutsModalContent-key-zJf3y\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport KeyboardShortcutsModalContentConnector from './KeyboardShortcutsModalContentConnector';\r\n\r\nfunction KeyboardShortcutsModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nKeyboardShortcutsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default KeyboardShortcutsModal;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createAllMoviesSelector() {\r\n return createSelector(\r\n (state: AppState) => state.movies,\r\n (movies) => {\r\n return movies.items;\r\n }\r\n );\r\n}\r\n\r\nexport default createAllMoviesSelector;\r\n","import { isEqual } from 'lodash';\r\nimport { createSelectorCreator, defaultMemoize } from 'reselect';\r\n\r\nconst createDeepEqualSelector = createSelectorCreator(defaultMemoize, isEqual);\r\n\r\nexport default createDeepEqualSelector;\r\n","\nimport worker from \"!!../../../../../node_modules/worker-loader/dist/runtime/inline.js\";\n\nexport default function Worker_fn() {\n return worker(\"(()=>{\\\"use strict\\\";function t(t){return Array.isArray?Array.isArray(t):\\\"[object Array]\\\"===c(t)}function e(t){return\\\"string\\\"==typeof t}function n(t){return\\\"number\\\"==typeof t}function s(t){return\\\"object\\\"==typeof t}function i(t){return null!=t}function r(t){return!t.trim().length}function c(t){return null==t?void 0===t?\\\"[object Undefined]\\\":\\\"[object Null]\\\":Object.prototype.toString.call(t)}const o=Object.prototype.hasOwnProperty;class h{constructor(t){this._keys=[],this._keyMap={};let e=0;t.forEach((t=>{let n=a(t);e+=n.weight,this._keys.push(n),this._keyMap[n.id]=n,e+=n.weight})),this._keys.forEach((t=>{t.weight/=e}))}get(t){return this._keyMap[t]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function a(n){let s=null,i=null,r=null,c=1,h=null;if(e(n)||t(n))r=n,s=l(n),i=u(n);else{if(!o.call(n,\\\"name\\\"))throw new Error(\\\"Missing name property in key\\\");const t=n.name;if(r=t,o.call(n,\\\"weight\\\")&&(c=n.weight,c<=0))throw new Error((t=>`Property 'weight' in key '${t}' must be a positive integer`)(t));s=l(t),i=u(t),h=n.getFn}return{path:s,id:i,weight:c,src:r,getFn:h}}function l(e){return t(e)?e:e.split(\\\".\\\")}function u(e){return t(e)?e.join(\\\".\\\"):e}var d={isCaseSensitive:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(t,e)=>t.score===e.score?t.idx{if(i(r))if(o[u]){const d=r[o[u]];if(!i(d))return;if(u===o.length-1&&(e(d)||n(d)||function(t){return!0===t||!1===t||function(t){return s(t)&&null!==t}(t)&&\\\"[object Boolean]\\\"==c(t)}(d)))h.push(function(t){return null==t?\\\"\\\":function(t){if(\\\"string\\\"==typeof t)return t;let e=t+\\\"\\\";return\\\"0\\\"==e&&1/t==-1/0?\\\"-0\\\":e}(t)}(d));else if(t(d)){a=!0;for(let t=0,e=d.length;t{this._keysMap[t.id]=e}))}create(){!this.isCreated&&this.docs.length&&(this.isCreated=!0,e(this.docs[0])?this.docs.forEach(((t,e)=>{this._addString(t,e)})):this.docs.forEach(((t,e)=>{this._addObject(t,e)})),this.norm.clear())}add(t){const n=this.size();e(t)?this._addString(t,n):this._addObject(t,n)}removeAt(t){this.records.splice(t,1);for(let e=t,n=this.size();e{let h=s.getFn?s.getFn(n):this.getFn(n,s.path);if(i(h))if(t(h)){let n=[];const s=[{nestedArrIndex:-1,value:h}];for(;s.length;){const{nestedArrIndex:c,value:o}=s.pop();if(i(o))if(e(o)&&!r(o)){let t={v:o,i:c,n:this.norm.get(o)};n.push(t)}else t(o)&&o.forEach(((t,e)=>{s.push({nestedArrIndex:e,value:t})}))}c.$[o]=n}else if(e(h)&&!r(h)){let t={v:h,n:this.norm.get(h)};c.$[o]=t}})),this.records.push(c)}toJSON(){return{keys:this.keys,records:this.records}}}function p(t,e,{getFn:n=d.getFn,fieldNormWeight:s=d.fieldNormWeight}={}){const i=new f({getFn:n,fieldNormWeight:s});return i.setKeys(t.map(a)),i.setSources(e),i.create(),i}function m(t,{errors:e=0,currentLocation:n=0,expectedLocation:s=0,distance:i=d.distance,ignoreLocation:r=d.ignoreLocation}={}){const c=e/t.length;if(r)return c;const o=Math.abs(s-n);return i?c+o/i:o?1:c}const M=32;function y(t){let e={};for(let n=0,s=t.length;n{this.chunks.push({pattern:t,alphabet:y(t),startIndex:e})},l=this.pattern.length;if(l>M){let t=0;const e=l%M,n=l-e;for(;t{const{isMatch:p,score:y,indices:x}=function(t,e,n,{location:s=d.location,distance:i=d.distance,threshold:r=d.threshold,findAllMatches:c=d.findAllMatches,minMatchCharLength:o=d.minMatchCharLength,includeMatches:h=d.includeMatches,ignoreLocation:a=d.ignoreLocation}={}){if(e.length>M)throw new Error(\\\"Pattern length exceeds max of 32.\\\");const l=e.length,u=t.length,g=Math.max(0,Math.min(s,u));let f=r,p=g;const y=o>1||h,x=y?Array(u):[];let L;for(;(L=t.indexOf(e,p))>-1;){let t=m(e,{currentLocation:L,expectedLocation:g,distance:i,ignoreLocation:a});if(f=Math.min(t,f),p=L+l,y){let t=0;for(;t=h;r-=1){let c=r-1,o=n[t.charAt(c)];if(y&&(x[c]=+!!o),M[r]=(M[r+1]<<1|1)&o,s&&(M[r]|=(k[r+1]|k[r])<<1|1|k[r+1]),M[r]&S&&(v=m(e,{errors:s,currentLocation:c,expectedLocation:g,distance:i,ignoreLocation:a}),v<=f)){if(f=v,p=c,p<=g)break;h=Math.max(1,2*g-p)}}if(m(e,{errors:s+1,currentLocation:g,expectedLocation:g,distance:i,ignoreLocation:a})>f)break;k=M}const C={isMatch:p>=0,score:Math.max(.001,v)};if(y){const t=function(t=[],e=d.minMatchCharLength){let n=[],s=-1,i=-1,r=0;for(let c=t.length;r=e&&n.push([s,i]),s=-1)}return t[r-1]&&r-s>=e&&n.push([s,r-1]),n}(x,o);t.length?h&&(C.indices=t):C.isMatch=!1}return C}(t,e,g,{location:s+f,distance:i,threshold:r,findAllMatches:c,minMatchCharLength:o,includeMatches:n,ignoreLocation:h});p&&(u=!0),l+=y,p&&x&&(a=[...a,...x])}));let g={isMatch:u,score:u?l/this.chunks.length:1};return u&&n&&(g.indices=a),g}}class L{constructor(t){this.pattern=t}static isMultiMatch(t){return k(t,this.multiRegex)}static isSingleMatch(t){return k(t,this.singleRegex)}search(){}}function k(t,e){const n=t.match(e);return n?n[1]:null}class v extends L{constructor(t,{location:e=d.location,threshold:n=d.threshold,distance:s=d.distance,includeMatches:i=d.includeMatches,findAllMatches:r=d.findAllMatches,minMatchCharLength:c=d.minMatchCharLength,isCaseSensitive:o=d.isCaseSensitive,ignoreLocation:h=d.ignoreLocation}={}){super(t),this._bitapSearch=new x(t,{location:e,threshold:n,distance:s,includeMatches:i,findAllMatches:r,minMatchCharLength:c,isCaseSensitive:o,ignoreLocation:h})}static get type(){return\\\"fuzzy\\\"}static get multiRegex(){return/^\\\"(.*)\\\"$/}static get singleRegex(){return/^(.*)$/}search(t){return this._bitapSearch.searchIn(t)}}class _ extends L{constructor(t){super(t)}static get type(){return\\\"include\\\"}static get multiRegex(){return/^'\\\"(.*)\\\"$/}static get singleRegex(){return/^'(.*)$/}search(t){let e,n=0;const s=[],i=this.pattern.length;for(;(e=t.indexOf(this.pattern,n))>-1;)n=e+i,s.push([e,n-1]);const r=!!s.length;return{isMatch:r,score:r?0:1,indices:s}}}const S=[class extends L{constructor(t){super(t)}static get type(){return\\\"exact\\\"}static get multiRegex(){return/^=\\\"(.*)\\\"$/}static get singleRegex(){return/^=(.*)$/}search(t){const e=t===this.pattern;return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}},_,class extends L{constructor(t){super(t)}static get type(){return\\\"prefix-exact\\\"}static get multiRegex(){return/^\\\\^\\\"(.*)\\\"$/}static get singleRegex(){return/^\\\\^(.*)$/}search(t){const e=t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}},class extends L{constructor(t){super(t)}static get type(){return\\\"inverse-prefix-exact\\\"}static get multiRegex(){return/^!\\\\^\\\"(.*)\\\"$/}static get singleRegex(){return/^!\\\\^(.*)$/}search(t){const e=!t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}},class extends L{constructor(t){super(t)}static get type(){return\\\"inverse-suffix-exact\\\"}static get multiRegex(){return/^!\\\"(.*)\\\"\\\\$$/}static get singleRegex(){return/^!(.*)\\\\$$/}search(t){const e=!t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}},class extends L{constructor(t){super(t)}static get type(){return\\\"suffix-exact\\\"}static get multiRegex(){return/^\\\"(.*)\\\"\\\\$$/}static get singleRegex(){return/^(.*)\\\\$$/}search(t){const e=t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[t.length-this.pattern.length,t.length-1]}}},class extends L{constructor(t){super(t)}static get type(){return\\\"inverse-exact\\\"}static get multiRegex(){return/^!\\\"(.*)\\\"$/}static get singleRegex(){return/^!(.*)$/}search(t){const e=-1===t.indexOf(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}},v],C=S.length,I=/ +(?=(?:[^\\\\\\\"]*\\\\\\\"[^\\\\\\\"]*\\\\\\\")*[^\\\\\\\"]*$)/,w=new Set([v.type,_.type]);const b=[];function A(t,e){for(let n=0,s=b.length;n!(!t[$]&&!t.$or),N=t=>({[$]:Object.keys(t).map((e=>({[e]:t[e]})))});function R(n,i,{auto:r=!0}={}){const c=n=>{let o=Object.keys(n);const h=(t=>!!t[E])(n);if(!h&&o.length>1&&!F(n))return c(N(n));if((e=>!t(e)&&s(e)&&!F(e))(n)){const t=h?n[E]:o[0],s=h?n.$val:n[t];if(!e(s))throw new Error((t=>`Invalid value for key ${t}`)(t));const c={keyId:u(t),pattern:s};return r&&(c.searcher=A(s,i)),c}let a={children:[],operator:o[0]};return o.forEach((e=>{const s=n[e];t(s)&&s.forEach((t=>{a.children.push(c(t))}))})),a};return F(n)||(n=N(n)),c(n)}function O(t,e){const n=t.matches;e.matches=[],i(n)&&n.forEach((t=>{if(!i(t.indices)||!t.indices.length)return;const{indices:n,value:s}=t;let r={indices:n,value:s};t.key&&(r.key=t.key.src),t.idx>-1&&(r.refIndex=t.idx),e.matches.push(r)}))}function j(t,e){e.score=t.score}class W{constructor(t,e={},n){this.options={...d,...e},this.options.useExtendedSearch,this._keyStore=new h(this.options.keys),this.setCollection(t,n)}setCollection(t,e){if(this._docs=t,e&&!(e instanceof f))throw new Error(\\\"Incorrect 'index' type\\\");this._myIndex=e||p(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(t){i(t)&&(this._docs.push(t),this._myIndex.add(t))}remove(t=()=>!1){const e=[];for(let n=0,s=this._docs.length;n{let n=1;t.matches.forEach((({key:t,norm:s,score:i})=>{const r=t?t.weight:null;n*=Math.pow(0===i&&r?Number.EPSILON:i,(r||1)*(e?1:s))})),t.score=n}))}(a,{ignoreFieldNorm:h}),c&&a.sort(o),n(s)&&s>-1&&(a=a.slice(0,s)),function(t,e,{includeMatches:n=d.includeMatches,includeScore:s=d.includeScore}={}){const i=[];return n&&i.push(O),s&&i.push(j),t.map((t=>{const{idx:n}=t,s={item:e[n],refIndex:n};return i.length&&i.forEach((e=>{e(t,s)})),s}))}(a,this._docs,{includeMatches:i,includeScore:r})}_searchStringList(t){const e=A(t,this.options),{records:n}=this._myIndex,s=[];return n.forEach((({v:t,i:n,n:r})=>{if(!i(t))return;const{isMatch:c,score:o,indices:h}=e.searchIn(t);c&&s.push({item:t,idx:n,matches:[{score:o,value:t,norm:r,indices:h}]})})),s}_searchLogical(t){const e=R(t,this.options),n=(t,e,s)=>{if(!t.children){const{keyId:n,searcher:i}=t,r=this._findMatches({key:this._keyStore.get(n),value:this._myIndex.getValueForItemAtKeyId(e,n),searcher:i});return r&&r.length?[{idx:s,item:e,matches:r}]:[]}const i=[];for(let r=0,c=t.children.length;r{if(i(t)){let i=n(e,t,s);i.length&&(r[s]||(r[s]={idx:s,item:t,matches:[]},c.push(r[s])),i.forEach((({matches:t})=>{r[s].matches.push(...t)})))}})),c}_searchObjectList(t){const e=A(t,this.options),{keys:n,records:s}=this._myIndex,r=[];return s.forEach((({$:t,i:s})=>{if(!i(t))return;let c=[];n.forEach(((n,s)=>{c.push(...this._findMatches({key:n,value:t[s],searcher:e}))})),c.length&&r.push({idx:s,item:t,matches:c})})),r}_findMatches({key:e,value:n,searcher:s}){if(!i(n))return[];let r=[];if(t(n))n.forEach((({v:t,i:n,n:c})=>{if(!i(t))return;const{isMatch:o,score:h,indices:a}=s.searchIn(t);o&&r.push({score:h,key:e,value:t,idx:n,norm:c,indices:a})}));else{const{v:t,n:i}=n,{isMatch:c,score:o,indices:h}=s.searchIn(t);c&&r.push({score:o,key:e,value:t,norm:i,indices:h})}return r}}W.version=\\\"6.6.2\\\",W.createIndex=p,W.parseIndex=function(t,{getFn:e=d.getFn,fieldNormWeight:n=d.fieldNormWeight}={}){const{keys:s,records:i}=t,r=new f({getFn:e,fieldNormWeight:n});return r.setKeys(s),r.setIndexRecords(i),r},W.config=d,W.parseQuery=R,function(...t){b.push(...t)}(class{constructor(t,{isCaseSensitive:e=d.isCaseSensitive,includeMatches:n=d.includeMatches,minMatchCharLength:s=d.minMatchCharLength,ignoreLocation:i=d.ignoreLocation,findAllMatches:r=d.findAllMatches,location:c=d.location,threshold:o=d.threshold,distance:h=d.distance}={}){this.query=null,this.options={isCaseSensitive:e,includeMatches:n,minMatchCharLength:s,findAllMatches:r,ignoreLocation:i,location:c,threshold:o,distance:h},this.pattern=e?t:t.toLowerCase(),this.query=function(t,e={}){return t.split(\\\"|\\\").map((t=>{let n=t.trim().split(I).filter((t=>t&&!!t.trim())),s=[];for(let t=0,i=n.length;t10))break}else n=new W(t,z).search(e,{limit:10});return n}(e,n),i={value:n,suggestions:s};self.postMessage(i)}})();\\n\", \"Worker\", undefined, undefined);\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport LazyLoad from 'react-lazyload';\r\nimport { CoverType, Image } from './Movie';\r\n\r\nfunction findImage(images: Image[], coverType: CoverType) {\r\n return images.find((image) => image.coverType === coverType);\r\n}\r\n\r\nfunction getUrl(image: Image, coverType: CoverType, size: number) {\r\n const imageUrl = image?.url ?? image?.remoteUrl;\r\n\r\n return imageUrl\r\n ? imageUrl.replace(`${coverType}.jpg`, `${coverType}-${size}.jpg`)\r\n : null;\r\n}\r\n\r\nexport interface MovieImageProps {\r\n className?: string;\r\n style?: object;\r\n images: Image[];\r\n coverType: CoverType;\r\n placeholder: string;\r\n size?: number;\r\n lazy?: boolean;\r\n overflow?: boolean;\r\n onError?: () => void;\r\n onLoad?: () => void;\r\n}\r\n\r\nconst pixelRatio = Math.max(Math.round(window.devicePixelRatio), 1);\r\n\r\nfunction MovieImage({\r\n className,\r\n style,\r\n images,\r\n coverType,\r\n placeholder,\r\n size = 250,\r\n lazy = true,\r\n overflow = false,\r\n onError,\r\n onLoad,\r\n}: MovieImageProps) {\r\n const [url, setUrl] = useState(null);\r\n const [hasError, setHasError] = useState(false);\r\n const [isLoaded, setIsLoaded] = useState(true);\r\n const image = useRef(null);\r\n\r\n const handleLoad = useCallback(() => {\r\n setHasError(false);\r\n setIsLoaded(true);\r\n onLoad?.();\r\n }, [setHasError, setIsLoaded, onLoad]);\r\n\r\n const handleError = useCallback(() => {\r\n setHasError(true);\r\n setIsLoaded(false);\r\n onError?.();\r\n }, [setHasError, setIsLoaded, onError]);\r\n\r\n useEffect(() => {\r\n const nextImage = findImage(images, coverType);\r\n\r\n if (nextImage && (!image.current || nextImage.url !== image.current.url)) {\r\n // Don't reset isLoaded, as we want to immediately try to\r\n // show the new image, whether an image was shown previously\r\n // or the placeholder was shown.\r\n image.current = nextImage;\r\n\r\n setUrl(getUrl(nextImage, coverType, pixelRatio * size));\r\n setHasError(false);\r\n } else if (!nextImage) {\r\n if (image.current) {\r\n image.current = null;\r\n setUrl(placeholder);\r\n setHasError(false);\r\n onError?.();\r\n }\r\n }\r\n }, [images, coverType, placeholder, size, onError]);\r\n\r\n useEffect(() => {\r\n if (!image.current) {\r\n onError?.();\r\n }\r\n // This should only run once when the component mounts,\r\n // so we don't need to include the other dependencies.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n if (hasError || !url) {\r\n return ;\r\n }\r\n\r\n if (lazy) {\r\n return (\r\n \r\n }\r\n >\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieImage;\r\n","import React from 'react';\r\nimport MovieImage, { MovieImageProps } from './MovieImage';\r\n\r\nconst posterPlaceholder =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAD3CAMAAAC+Te+kAAAAZlBMVEUvLi8vLy8vLzAvMDAwLy8wLzAwMDAwMDEwMTExMDAxMDExMTExMTIxMjIyMjIyMjMyMzMzMjMzMzMzMzQzNDQ0NDQ0NDU0NTU1NTU1NTY1NjY2NTY2NjY2Njc2Nzc3Njc3Nzc3NziHChLWAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+MKCgEdHeShUbsAAALZSURBVHja7dxNcuwgDEZR1qAVmP1vMrNUJe91GfTzCSpXo575lAymjYWGXRIDKFCgQIECBQoUKFCgQIECBQoUKFCgQIECBQoUKFCgQIECBQoUKNA/AZ3fcTR0/owjofNDnAadnwPoPnS+xTXQeQZ0rkQ/dC4H0Gzo7ITO3bgGOnug/2PcAF3Mczt0fUj0QncG7znQBupw3PkWqh8qpkagpnyqjuArkkxaC02kRqGypCZANVYFdJZCdy9WTRVB5znQ6qTmjFFBWnOhdg20Lqnp0CpqAbRmAJRAK5JaA32zngTNvv910OSkVkJTs1oLtWugeTkNQZ/nkT2rotBHldUwNE6VQTVWGTQ6AHKggqGaBS23JkKf0hUgE1qa01Ro5fzPhoapR0HtCGg4q0poSCqFRgaAFhqxqqEr1EOgmdJaqHdaHQq1I6CunPZAHdY2aIJUBN2V9kE3H1Wd0BXrNVA7BLpgdUCtALo8pZqhdgd0Z6OyE7q1pdoH3dv7tS7o7iZ1E3R/N70Huuz795cQao65vvkqooT+vEgDdPcbj2s3zxTv9Qt/7cuhdgfUo2yAOplyqNuphfqZSqhFmEJo0HkcdPZCo0rRymRxpwSawHR+YtyBZihfvi+nQO0OqCmcYahGqYPGS4qCUJkzBpUpJdCkordyaFZxXi1UUpaZAJ2XQFOLh8ug2XXjVdD0+vYiqLIO3w1VH8EogtoxUPnpGxe04zyTA1p57i4T2nTmbnnnUuLMg1afYE2C1h+1zYEKjlknQLtPg9tb3YzU+dL054qOBb8cvcz3DlqBZhUmhdrnKo9j+pR0rkN5UHkznZHPtJIYN2TTCe1poTUyk9nWPO0bt8Ys7Ug34mlUMONtPUXMaEdXnXN1MnUzN2Z9q3Lr8XQN1DaLQJpXpiamZwltYdIUHShQoECBAgUKFChQoECBAgUKFChQoECBAgUKFChQoECBAgUKFCjQ+vgCff/mEp/vtiIAAAAASUVORK5CYII=';\r\n\r\ninterface MoviePosterProps\r\n extends Omit {\r\n size?: 250 | 500;\r\n}\r\n\r\nfunction MoviePoster({ size = 250, ...otherProps }: MoviePosterProps) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MoviePoster;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"result\":\"MovieSearchResult-result-yov2e\",\"poster\":\"MovieSearchResult-poster-gII_F\",\"titles\":\"MovieSearchResult-titles-pbTOS\",\"title\":\"MovieSearchResult-title-alR_9\",\"alternateTitle\":\"MovieSearchResult-alternateTitle-JvltE MovieSearchResult-title-alR_9\",\"tagContainer\":\"MovieSearchResult-tagContainer-fFqud MovieSearchResult-title-alR_9\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { kinds } from 'Helpers/Props';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport styles from './MovieSearchResult.css';\r\n\r\nfunction MovieSearchResult(props) {\r\n const {\r\n match,\r\n title,\r\n year,\r\n images,\r\n alternateTitles,\r\n tmdbId,\r\n imdbId,\r\n tags\r\n } = props;\r\n\r\n let alternateTitle = null;\r\n let tag = null;\r\n\r\n if (match.key === 'alternateTitles.title') {\r\n alternateTitle = alternateTitles[match.refIndex];\r\n } else if (match.key === 'tags.label') {\r\n tag = tags[match.refIndex];\r\n }\r\n\r\n return (\r\n
\r\n \r\n\r\n
\r\n
\r\n {title} { year > 0 ? `(${year})` : ''}\r\n
\r\n\r\n {\r\n alternateTitle ?\r\n
\r\n {alternateTitle.title}\r\n
:\r\n null\r\n }\r\n\r\n {\r\n match.key === 'tmdbId' && tmdbId ?\r\n
\r\n TmdbId: {tmdbId}\r\n
:\r\n null\r\n }\r\n\r\n {\r\n match.key === 'imdbId' && imdbId ?\r\n
\r\n ImdbId: {imdbId}\r\n
:\r\n null\r\n }\r\n\r\n {\r\n tag ?\r\n
\r\n \r\n {tag.label}\r\n \r\n
:\r\n null\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nMovieSearchResult.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n alternateTitles: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n tmdbId: PropTypes.number,\r\n imdbId: PropTypes.string,\r\n tags: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n match: PropTypes.object.isRequired\r\n};\r\n\r\nexport default MovieSearchResult;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Autosuggest from 'react-autosuggest';\r\nimport Icon from 'Components/Icon';\r\nimport keyboardShortcuts, { shortcuts } from 'Components/keyboardShortcuts';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport FuseWorker from './fuse.worker';\r\nimport MovieSearchResult from './MovieSearchResult';\r\nimport styles from './MovieSearchInput.css';\r\n\r\nconst ADD_NEW_TYPE = 'addNew';\r\n\r\nclass MovieSearchInput extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._autosuggest = null;\r\n this._worker = null;\r\n\r\n this.state = {\r\n value: '',\r\n suggestions: []\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.props.bindShortcut(shortcuts.MOVIE_SEARCH_INPUT.key, this.focusInput);\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._worker) {\r\n this._worker.removeEventListener('message', this.onSuggestionsReceived, false);\r\n this._worker.terminate();\r\n this._worker = null;\r\n }\r\n }\r\n\r\n getWorker() {\r\n if (!this._worker) {\r\n this._worker = new FuseWorker();\r\n this._worker.addEventListener('message', this.onSuggestionsReceived, false);\r\n }\r\n\r\n return this._worker;\r\n }\r\n\r\n //\r\n // Control\r\n\r\n setAutosuggestRef = (ref) => {\r\n this._autosuggest = ref;\r\n };\r\n\r\n focusInput = (event) => {\r\n event.preventDefault();\r\n this._autosuggest.input.focus();\r\n };\r\n\r\n getSectionSuggestions(section) {\r\n return section.suggestions;\r\n }\r\n\r\n renderSectionTitle(section) {\r\n return (\r\n
\r\n {section.title}\r\n\r\n {\r\n section.loading &&\r\n \r\n }\r\n
\r\n );\r\n }\r\n\r\n getSuggestionValue({ title }) {\r\n return title;\r\n }\r\n\r\n renderSuggestion(item, { query }) {\r\n if (item.type === ADD_NEW_TYPE) {\r\n return (\r\n
\r\n {translate('SearchForQuery', { query })}\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n goToMovie(item) {\r\n this.setState({ value: '' });\r\n this.props.onGoToMovie(item.item.titleSlug);\r\n }\r\n\r\n reset() {\r\n this.setState({\r\n value: '',\r\n suggestions: [],\r\n loading: false\r\n });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = (event, { newValue, method }) => {\r\n if (method === 'up' || method === 'down') {\r\n return;\r\n }\r\n\r\n this.setState({ value: newValue });\r\n };\r\n\r\n onKeyDown = (event) => {\r\n if (event.shiftKey || event.altKey || event.ctrlKey) {\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n this.reset();\r\n return;\r\n }\r\n\r\n if (event.key !== 'Tab' && event.key !== 'Enter') {\r\n return;\r\n }\r\n\r\n const {\r\n suggestions,\r\n value\r\n } = this.state;\r\n\r\n const {\r\n highlightedSectionIndex,\r\n highlightedSuggestionIndex\r\n } = this._autosuggest.state;\r\n\r\n if (!suggestions.length || highlightedSectionIndex) {\r\n this.props.onGoToAddNewMovie(value);\r\n this._autosuggest.input.blur();\r\n this.reset();\r\n\r\n return;\r\n }\r\n\r\n // If an suggestion is not selected go to the first movie,\r\n // otherwise go to the selected movie.\r\n\r\n if (highlightedSuggestionIndex == null) {\r\n this.goToMovie(suggestions[0]);\r\n } else {\r\n this.goToMovie(suggestions[highlightedSuggestionIndex]);\r\n }\r\n\r\n this._autosuggest.input.blur();\r\n this.reset();\r\n };\r\n\r\n onBlur = () => {\r\n this.reset();\r\n };\r\n\r\n onSuggestionsFetchRequested = ({ value }) => {\r\n if (!this.state.loading) {\r\n this.setState({\r\n loading: true\r\n });\r\n }\r\n\r\n this.requestSuggestions(value);\r\n };\r\n\r\n requestSuggestions = _.debounce((value) => {\r\n if (!this.state.loading) {\r\n return;\r\n }\r\n\r\n const requestLoading = this.state.requestLoading;\r\n\r\n this.setState({\r\n requestValue: value,\r\n requestLoading: true\r\n });\r\n\r\n if (!requestLoading) {\r\n const payload = {\r\n value,\r\n movies: this.props.movies\r\n };\r\n\r\n this.getWorker().postMessage(payload);\r\n }\r\n }, 250);\r\n\r\n onSuggestionsReceived = (message) => {\r\n const {\r\n value,\r\n suggestions\r\n } = message.data;\r\n\r\n if (!this.state.loading) {\r\n this.setState({\r\n requestValue: null,\r\n requestLoading: false\r\n });\r\n } else if (value === this.state.requestValue) {\r\n this.setState({\r\n suggestions,\r\n requestValue: null,\r\n requestLoading: false,\r\n loading: false\r\n });\r\n } else {\r\n this.setState({\r\n suggestions,\r\n requestLoading: true\r\n });\r\n\r\n const payload = {\r\n value: this.state.requestValue,\r\n movies: this.props.movies\r\n };\r\n\r\n this.getWorker().postMessage(payload);\r\n }\r\n };\r\n\r\n onSuggestionsClearRequested = () => {\r\n this.setState({\r\n suggestions: [],\r\n loading: false\r\n });\r\n };\r\n\r\n onSuggestionSelected = (event, { suggestion }) => {\r\n if (suggestion.type === ADD_NEW_TYPE) {\r\n this.props.onGoToAddNewMovie(this.state.value);\r\n } else {\r\n this.goToMovie(suggestion);\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n value,\r\n loading,\r\n suggestions\r\n } = this.state;\r\n\r\n const suggestionGroups = [];\r\n\r\n if (suggestions.length || loading) {\r\n suggestionGroups.push({\r\n title: translate('ExistingMovies'),\r\n loading,\r\n suggestions\r\n });\r\n }\r\n\r\n suggestionGroups.push({\r\n title: translate('AddNewMovie'),\r\n suggestions: [\r\n {\r\n type: ADD_NEW_TYPE,\r\n title: value\r\n }\r\n ]\r\n });\r\n\r\n const inputProps = {\r\n ref: this.setInputRef,\r\n className: styles.input,\r\n name: 'movieSearch',\r\n value,\r\n placeholder: translate('Search'),\r\n autoComplete: 'off',\r\n spellCheck: false,\r\n onChange: this.onChange,\r\n onKeyDown: this.onKeyDown,\r\n onBlur: this.onBlur,\r\n onFocus: this.onFocus\r\n };\r\n\r\n const theme = {\r\n container: styles.container,\r\n containerOpen: styles.containerOpen,\r\n suggestionsContainer: styles.movieContainer,\r\n suggestionsList: styles.list,\r\n suggestion: styles.listItem,\r\n suggestionHighlighted: styles.highlighted\r\n };\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nMovieSearchInput.propTypes = {\r\n movies: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onGoToMovie: PropTypes.func.isRequired,\r\n onGoToAddNewMovie: PropTypes.func.isRequired,\r\n bindShortcut: PropTypes.func.isRequired\r\n};\r\n\r\nexport default keyboardShortcuts(MovieSearchInput);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"MovieSearchInput-wrapper-p_2ZQ\",\"loading\":\"MovieSearchInput-loading-C0Dhh\",\"ripple\":\"MovieSearchInput-ripple-a8fp1 LoadingIndicator-ripple-Dn9J1\",\"input\":\"MovieSearchInput-input-TKyuc\",\"container\":\"MovieSearchInput-container-nrOKz\",\"movieContainer\":\"MovieSearchInput-movieContainer-kuKIB\",\"containerOpen\":\"MovieSearchInput-containerOpen-iE3oK\",\"list\":\"MovieSearchInput-list-Gc2So\",\"listItem\":\"MovieSearchInput-listItem-_Kyrf\",\"highlighted\":\"MovieSearchInput-highlighted-InlUx\",\"sectionTitle\":\"MovieSearchInput-sectionTitle-rt3kk\",\"addNewMovieSuggestion\":\"MovieSearchInput-addNewMovieSuggestion-qXQCY\"};","import { push } from 'connected-react-router';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport createDeepEqualSelector from 'Store/Selectors/createDeepEqualSelector';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport MovieSearchInput from './MovieSearchInput';\r\n\r\nfunction createCleanMovieSelector() {\r\n return createSelector(\r\n createAllMoviesSelector(),\r\n createTagsSelector(),\r\n (allMovies, allTags) => {\r\n return allMovies.map((movie) => {\r\n const {\r\n title,\r\n titleSlug,\r\n sortTitle,\r\n year,\r\n images,\r\n alternateTitles = [],\r\n tmdbId,\r\n imdbId,\r\n tags = []\r\n } = movie;\r\n\r\n return {\r\n title,\r\n titleSlug,\r\n sortTitle,\r\n year,\r\n images,\r\n alternateTitles,\r\n tmdbId,\r\n imdbId,\r\n firstCharacter: title.charAt(0).toLowerCase(),\r\n tags: tags.reduce((acc, id) => {\r\n const matchingTag = allTags.find((tag) => tag.id === id);\r\n\r\n if (matchingTag) {\r\n acc.push(matchingTag);\r\n }\r\n\r\n return acc;\r\n }, [])\r\n };\r\n });\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createDeepEqualSelector(\r\n createCleanMovieSelector(),\r\n (movies) => {\r\n return {\r\n movies\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onGoToMovie(titleSlug) {\r\n dispatch(push(`${window.Radarr.urlBase}/movie/${titleSlug}`));\r\n },\r\n\r\n onGoToAddNewMovie(query) {\r\n dispatch(push(`${window.Radarr.urlBase}/add/new?term=${encodeURIComponent(query)}`));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(MovieSearchInput);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { Manager, Popper, Reference } from 'react-popper';\r\nimport Portal from 'Components/Portal';\r\nimport { align } from 'Helpers/Props';\r\nimport getUniqueElementId from 'Utilities/getUniqueElementId';\r\nimport styles from './Menu.css';\r\n\r\nconst sharedPopperOptions = {\r\n modifiers: {\r\n preventOverflow: {\r\n padding: 0\r\n },\r\n flip: {\r\n padding: 0\r\n }\r\n }\r\n};\r\n\r\nconst popperOptions = {\r\n [align.RIGHT]: {\r\n ...sharedPopperOptions,\r\n placement: 'bottom-end'\r\n },\r\n\r\n [align.LEFT]: {\r\n ...sharedPopperOptions,\r\n placement: 'bottom-start'\r\n }\r\n};\r\n\r\nclass Menu extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._scheduleUpdate = null;\r\n this._menuButtonId = getUniqueElementId();\r\n this._menuContentId = getUniqueElementId();\r\n\r\n this.state = {\r\n isMenuOpen: false,\r\n maxHeight: 0\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setMaxHeight();\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this._scheduleUpdate) {\r\n this._scheduleUpdate();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this._removeListener();\r\n }\r\n\r\n //\r\n // Control\r\n\r\n getMaxHeight() {\r\n if (!this.props.enforceMaxHeight) {\r\n return;\r\n }\r\n\r\n const menuButton = document.getElementById(this._menuButtonId);\r\n\r\n if (!menuButton) {\r\n return;\r\n }\r\n\r\n const { bottom } = menuButton.getBoundingClientRect();\r\n const maxHeight = window.innerHeight - bottom;\r\n\r\n return maxHeight;\r\n }\r\n\r\n setMaxHeight() {\r\n const maxHeight = this.getMaxHeight();\r\n\r\n if (maxHeight !== this.state.maxHeight) {\r\n this.setState({\r\n maxHeight\r\n });\r\n }\r\n }\r\n\r\n _addListener() {\r\n // Listen to resize events on the window and scroll events\r\n // on all elements to ensure the menu is the best size possible.\r\n // Listen for click events on the window to support closing the\r\n // menu on clicks outside.\r\n\r\n window.addEventListener('resize', this.onWindowResize);\r\n window.addEventListener('scroll', this.onWindowScroll, { capture: true });\r\n window.addEventListener('click', this.onWindowClick);\r\n window.addEventListener('touchstart', this.onTouchStart);\r\n }\r\n\r\n _removeListener() {\r\n window.removeEventListener('resize', this.onWindowResize);\r\n window.removeEventListener('scroll', this.onWindowScroll, { capture: true });\r\n window.removeEventListener('click', this.onWindowClick);\r\n window.removeEventListener('touchstart', this.onTouchStart);\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onWindowClick = (event) => {\r\n const menuButton = document.getElementById(this._menuButtonId);\r\n\r\n if (!menuButton) {\r\n return;\r\n }\r\n\r\n if (!menuButton.contains(event.target) && this.state.isMenuOpen) {\r\n this.setState({ isMenuOpen: false });\r\n this._removeListener();\r\n }\r\n };\r\n\r\n onTouchStart = (event) => {\r\n const menuButton = document.getElementById(this._menuButtonId);\r\n const menuContent = document.getElementById(this._menuContentId);\r\n\r\n if (!menuButton || !menuContent) {\r\n return;\r\n }\r\n\r\n if (event.targetTouches.length !== 1) {\r\n return;\r\n }\r\n\r\n const target = event.targetTouches[0].target;\r\n\r\n if (\r\n !menuButton.contains(target) &&\r\n !menuContent.contains(target) &&\r\n this.state.isMenuOpen\r\n ) {\r\n this.setState({ isMenuOpen: false });\r\n this._removeListener();\r\n }\r\n };\r\n\r\n onWindowResize = () => {\r\n this.setMaxHeight();\r\n };\r\n\r\n onWindowScroll = (event) => {\r\n if (this.state.isMenuOpen) {\r\n this.setMaxHeight();\r\n }\r\n };\r\n\r\n onMenuButtonPress = () => {\r\n const state = {\r\n isMenuOpen: !this.state.isMenuOpen\r\n };\r\n\r\n if (this.state.isMenuOpen) {\r\n this._removeListener();\r\n } else {\r\n state.maxHeight = this.getMaxHeight();\r\n this._addListener();\r\n }\r\n\r\n this.setState(state);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n children,\r\n alignMenu\r\n } = this.props;\r\n\r\n const {\r\n maxHeight,\r\n isMenuOpen\r\n } = this.state;\r\n\r\n const childrenArray = React.Children.toArray(children);\r\n const button = React.cloneElement(\r\n childrenArray[0],\r\n {\r\n onPress: this.onMenuButtonPress\r\n }\r\n );\r\n\r\n return (\r\n \r\n \r\n {({ ref }) => (\r\n \r\n {button}\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n {({ ref, style, scheduleUpdate }) => {\r\n this._scheduleUpdate = scheduleUpdate;\r\n\r\n return React.cloneElement(\r\n childrenArray[1],\r\n {\r\n forwardedRef: ref,\r\n style: {\r\n ...style,\r\n maxHeight\r\n },\r\n isOpen: isMenuOpen\r\n }\r\n );\r\n }}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nMenu.propTypes = {\r\n className: PropTypes.string,\r\n children: PropTypes.node.isRequired,\r\n alignMenu: PropTypes.oneOf([align.LEFT, align.RIGHT]),\r\n enforceMaxHeight: PropTypes.bool.isRequired\r\n};\r\n\r\nMenu.defaultProps = {\r\n className: styles.menu,\r\n alignMenu: align.LEFT,\r\n enforceMaxHeight: true\r\n};\r\n\r\nexport default Menu;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"menu\":\"Menu-menu-Uz3_0\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport styles from './MenuButton.css';\r\n\r\nclass MenuButton extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n children,\r\n isDisabled,\r\n onPress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n }\r\n}\r\n\r\nMenuButton.propTypes = {\r\n className: PropTypes.string,\r\n children: PropTypes.node.isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n onPress: PropTypes.func\r\n};\r\n\r\nMenuButton.defaultProps = {\r\n className: styles.menuButton,\r\n isDisabled: false\r\n};\r\n\r\nexport default MenuButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"menuButton\":\"MenuButton-menuButton-Jl5Je\",\"isDisabled\":\"MenuButton-isDisabled-x0tG4\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport getUniqueElementId from 'Utilities/getUniqueElementId';\r\nimport styles from './MenuContent.css';\r\n\r\nclass MenuContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n forwardedRef,\r\n className,\r\n id,\r\n children,\r\n style,\r\n isOpen\r\n } = this.props;\r\n\r\n return (\r\n \r\n {\r\n isOpen ?\r\n \r\n {children}\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nMenuContent.propTypes = {\r\n forwardedRef: PropTypes.func,\r\n className: PropTypes.string,\r\n id: PropTypes.string.isRequired,\r\n children: PropTypes.node.isRequired,\r\n style: PropTypes.object,\r\n isOpen: PropTypes.bool\r\n};\r\n\r\nMenuContent.defaultProps = {\r\n className: styles.menuContent,\r\n id: getUniqueElementId()\r\n};\r\n\r\nexport default MenuContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"menuContent\":\"MenuContent-menuContent-_1J_h\",\"scroller\":\"MenuContent-scroller-n5RM_\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport styles from './MenuItem.css';\r\n\r\nclass MenuItem extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n children,\r\n isDisabled,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n }\r\n}\r\n\r\nMenuItem.propTypes = {\r\n className: PropTypes.string,\r\n children: PropTypes.node.isRequired,\r\n isDisabled: PropTypes.bool.isRequired\r\n};\r\n\r\nMenuItem.defaultProps = {\r\n className: styles.menuItem,\r\n isDisabled: false\r\n};\r\n\r\nexport default MenuItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"menuItem\":\"MenuItem-menuItem-XlMdU\",\"isDisabled\":\"MenuItem-isDisabled-iQzs8\"};","import React from 'react';\r\nimport styles from './MenuItemSeparator.css';\r\n\r\nfunction MenuItemSeparator() {\r\n return (\r\n
\r\n );\r\n}\r\n\r\nexport default MenuItemSeparator;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"separator\":\"MenuItemSeparator-separator-umWCF\"};","// extracted by mini-css-extract-plugin\nexport default {\"menuButton\":\"PageHeaderActionsMenu-menuButton-uj_V6\",\"itemIcon\":\"PageHeaderActionsMenu-itemIcon-NCa7f\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport Icon from 'Components/Icon';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuButton from 'Components/Menu/MenuButton';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\nimport MenuItemSeparator from 'Components/Menu/MenuItemSeparator';\r\nimport { align, icons, kinds } from 'Helpers/Props';\r\nimport { restart, shutdown } from 'Store/Actions/systemActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './PageHeaderActionsMenu.css';\r\n\r\ninterface PageHeaderActionsMenuProps {\r\n onKeyboardShortcutsPress(): void;\r\n}\r\n\r\nfunction PageHeaderActionsMenu(props: PageHeaderActionsMenuProps) {\r\n const { onKeyboardShortcutsPress } = props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const { authentication, isDocker } = useSelector(\r\n (state: AppState) => state.system.status.item\r\n );\r\n\r\n const formsAuth = authentication === 'forms';\r\n\r\n const handleRestartPress = useCallback(() => {\r\n dispatch(restart());\r\n }, [dispatch]);\r\n\r\n const handleShutdownPress = useCallback(() => {\r\n dispatch(shutdown());\r\n }, [dispatch]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {translate('KeyboardShortcuts')}\r\n \r\n\r\n {isDocker ? null : (\r\n <>\r\n \r\n\r\n \r\n \r\n {translate('Restart')}\r\n \r\n\r\n \r\n \r\n {translate('Shutdown')}\r\n \r\n \r\n )}\r\n\r\n {formsAuth ? (\r\n <>\r\n \r\n\r\n \r\n \r\n {translate('Logout')}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default PageHeaderActionsMenu;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"PageHeader-header-yG8lh\",\"logoContainer\":\"PageHeader-logoContainer-w6Bht\",\"logoFull\":\"PageHeader-logoFull-XjP3T\",\"logo\":\"PageHeader-logo-WW_El\",\"sidebarToggleContainer\":\"PageHeader-sidebarToggleContainer-s7QPv\",\"right\":\"PageHeader-right-e8LU4\",\"translate\":\"PageHeader-translate-otp7Q Link-link-RInnp\",\"donate\":\"PageHeader-donate-FT1Kz Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport keyboardShortcuts, { shortcuts } from 'Components/keyboardShortcuts';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport KeyboardShortcutsModal from './KeyboardShortcutsModal';\r\nimport MovieSearchInputConnector from './MovieSearchInputConnector';\r\nimport PageHeaderActionsMenu from './PageHeaderActionsMenu';\r\nimport styles from './PageHeader.css';\r\n\r\nclass PageHeader extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props);\r\n\r\n this.state = {\r\n isKeyboardShortcutsModalOpen: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.props.bindShortcut(shortcuts.OPEN_KEYBOARD_SHORTCUTS_MODAL.key, this.onOpenKeyboardShortcutsModal);\r\n }\r\n\r\n //\r\n // Control\r\n\r\n onOpenKeyboardShortcutsModal = () => {\r\n this.setState({ isKeyboardShortcutsModalOpen: true });\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onKeyboardShortcutsModalClose = () => {\r\n this.setState({ isKeyboardShortcutsModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n onSidebarToggle,\r\n isSmallScreen\r\n } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n \r\n\r\n
\r\n \r\n\r\n \r\n\r\n \r\n
\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nPageHeader.propTypes = {\r\n onSidebarToggle: PropTypes.func.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n bindShortcut: PropTypes.func.isRequired\r\n};\r\n\r\nexport default keyboardShortcuts(PageHeader);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { kinds, sizes } from 'Helpers/Props';\r\n\r\nfunction PageSidebarStatus({ count, errors, warnings }) {\r\n if (!count) {\r\n return null;\r\n }\r\n\r\n let kind = kinds.INFO;\r\n\r\n if (errors) {\r\n kind = kinds.DANGER;\r\n } else if (warnings) {\r\n kind = kinds.WARNING;\r\n }\r\n\r\n return (\r\n \r\n {count}\r\n \r\n );\r\n}\r\n\r\nPageSidebarStatus.propTypes = {\r\n count: PropTypes.number,\r\n errors: PropTypes.bool,\r\n warnings: PropTypes.bool\r\n};\r\n\r\nexport default PageSidebarStatus;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createQueueStatusSelector() {\r\n return createSelector(\r\n (state: AppState) => state.queue.status.isPopulated,\r\n (state: AppState) => state.queue.status.item,\r\n (state: AppState) => state.queue.options.includeUnknownMovieItems,\r\n (isPopulated, status, includeUnknownMovieItems) => {\r\n const {\r\n errors,\r\n warnings,\r\n unknownErrors,\r\n unknownWarnings,\r\n count,\r\n totalCount,\r\n } = status;\r\n\r\n return {\r\n ...status,\r\n isPopulated,\r\n count: includeUnknownMovieItems ? totalCount : count,\r\n errors: includeUnknownMovieItems ? errors || unknownErrors : errors,\r\n warnings: includeUnknownMovieItems\r\n ? warnings || unknownWarnings\r\n : warnings,\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createQueueStatusSelector;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"scroller\":\"OverlayScroller-scroller-Qv2oP\",\"track\":\"OverlayScroller-track-NpAah\",\"thumb\":\"OverlayScroller-thumb-IKMmD\"};","import React, { ComponentPropsWithoutRef, useCallback, useRef } from 'react';\r\nimport { Scrollbars } from 'react-custom-scrollbars-2';\r\nimport { ScrollDirection } from 'Helpers/Props/scrollDirections';\r\nimport { OnScroll } from './Scroller';\r\nimport styles from './OverlayScroller.css';\r\n\r\nconst SCROLLBAR_SIZE = 10;\r\n\r\ninterface OverlayScrollerProps {\r\n className?: string;\r\n trackClassName?: string;\r\n scrollTop?: number;\r\n scrollDirection: ScrollDirection;\r\n autoHide: boolean;\r\n autoScroll: boolean;\r\n children?: React.ReactNode;\r\n onScroll?: (payload: OnScroll) => void;\r\n}\r\n\r\ninterface ScrollbarTrackProps {\r\n style: React.CSSProperties;\r\n props: ComponentPropsWithoutRef<'div'>;\r\n}\r\n\r\nfunction OverlayScroller(props: OverlayScrollerProps) {\r\n const {\r\n autoHide = false,\r\n autoScroll = true,\r\n className = styles.scroller,\r\n trackClassName = styles.thumb,\r\n children,\r\n onScroll,\r\n } = props;\r\n const scrollBarRef = useRef(null);\r\n const isScrolling = useRef(false);\r\n\r\n const handleScrollStart = useCallback(() => {\r\n isScrolling.current = true;\r\n }, []);\r\n const handleScrollStop = useCallback(() => {\r\n isScrolling.current = false;\r\n }, []);\r\n\r\n const handleScroll = useCallback(() => {\r\n if (!scrollBarRef.current) {\r\n return;\r\n }\r\n\r\n const { scrollTop, scrollLeft } = scrollBarRef.current.getValues();\r\n isScrolling.current = true;\r\n\r\n if (onScroll) {\r\n onScroll({ scrollTop, scrollLeft });\r\n }\r\n }, [onScroll]);\r\n\r\n const renderThumb = useCallback(\r\n (props: ComponentPropsWithoutRef<'div'>) => {\r\n return
;\r\n },\r\n [trackClassName]\r\n );\r\n\r\n const renderTrackHorizontal = useCallback(\r\n ({ style, props: trackProps }: ScrollbarTrackProps) => {\r\n const finalStyle = {\r\n ...style,\r\n right: 2,\r\n bottom: 2,\r\n left: 2,\r\n borderRadius: 3,\r\n height: SCROLLBAR_SIZE,\r\n };\r\n\r\n return (\r\n
\r\n );\r\n },\r\n []\r\n );\r\n\r\n const renderTrackVertical = useCallback(\r\n ({ style, props: trackProps }: ScrollbarTrackProps) => {\r\n const finalStyle = {\r\n ...style,\r\n right: 2,\r\n bottom: 2,\r\n top: 2,\r\n borderRadius: 3,\r\n width: SCROLLBAR_SIZE,\r\n };\r\n\r\n return (\r\n
\r\n );\r\n },\r\n []\r\n );\r\n\r\n const renderView = useCallback(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (props: any) => {\r\n return
;\r\n },\r\n [className]\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport default OverlayScroller;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createHealthSelector() {\r\n return createSelector(\r\n (state: AppState) => state.system.health,\r\n (health) => {\r\n return health;\r\n }\r\n );\r\n}\r\n\r\nexport default createHealthSelector;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"Message-message-alKx2\",\"iconContainer\":\"Message-iconContainer-rjS_1\",\"text\":\"Message-text-j_4_k\",\"error\":\"Message-error-QCmrh\",\"info\":\"Message-info-ihK_M\",\"success\":\"Message-success-KGG76\",\"warning\":\"Message-warning-Bn1Qs\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './Message.css';\r\n\r\nfunction getIconName(name) {\r\n switch (name) {\r\n case 'ApplicationUpdate':\r\n return icons.RESTART;\r\n case 'Backup':\r\n return icons.BACKUP;\r\n case 'CheckHealth':\r\n return icons.HEALTH;\r\n case 'EpisodeSearch':\r\n return icons.SEARCH;\r\n case 'Housekeeping':\r\n return icons.HOUSEKEEPING;\r\n case 'RefreshMovie':\r\n return icons.REFRESH;\r\n case 'RssSync':\r\n return icons.RSS;\r\n case 'SeasonSearch':\r\n return icons.SEARCH;\r\n case 'MovieSearch':\r\n return icons.SEARCH;\r\n case 'UpdateSceneMapping':\r\n return icons.REFRESH;\r\n default:\r\n return icons.SPINNER;\r\n }\r\n}\r\n\r\nfunction Message(props) {\r\n const {\r\n name,\r\n message,\r\n type\r\n } = props;\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n {message}\r\n
\r\n
\r\n );\r\n}\r\n\r\nMessage.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n message: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired\r\n};\r\n\r\nexport default Message;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { hideMessage } from 'Store/Actions/appActions';\r\nimport Message from './Message';\r\n\r\nconst mapDispatchToProps = {\r\n hideMessage\r\n};\r\n\r\nclass MessageConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._hideTimeoutId = null;\r\n this.scheduleHideMessage(props.hideAfter);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.scheduleHideMessage(this.props.hideAfter);\r\n }\r\n\r\n //\r\n // Control\r\n\r\n scheduleHideMessage = (hideAfter) => {\r\n if (this._hideTimeoutId) {\r\n clearTimeout(this._hideTimeoutId);\r\n }\r\n\r\n if (hideAfter) {\r\n this._hideTimeoutId = setTimeout(this.hideMessage, hideAfter * 1000);\r\n }\r\n };\r\n\r\n hideMessage = () => {\r\n this.props.hideMessage({ id: this.props.id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nMessageConnector.propTypes = {\r\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n hideAfter: PropTypes.number.isRequired,\r\n hideMessage: PropTypes.func.isRequired\r\n};\r\n\r\nMessageConnector.defaultProps = {\r\n // Hide messages after 60 seconds if there is no activity\r\n // hideAfter: 60\r\n};\r\n\r\nexport default connect(undefined, mapDispatchToProps)(MessageConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport MessageConnector from './MessageConnector';\r\nimport styles from './Messages.css';\r\n\r\nfunction Messages({ messages }) {\r\n return (\r\n
\r\n {\r\n messages.map((message) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n}\r\n\r\nMessages.propTypes = {\r\n messages: PropTypes.arrayOf(PropTypes.object).isRequired\r\n};\r\n\r\nexport default Messages;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport Messages from './Messages';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.app.messages.items,\r\n (messages) => {\r\n return {\r\n messages: messages.slice().reverse()\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(Messages);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"messages\":\"Messages-messages-FTWzW\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { map } from 'Helpers/elementChildren';\r\nimport styles from './PageSidebarItem.css';\r\n\r\nclass PageSidebarItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n isChildItem,\r\n isParentItem,\r\n onPress\r\n } = this.props;\r\n\r\n if (isChildItem || !isParentItem) {\r\n onPress();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n iconName,\r\n title,\r\n to,\r\n isActive,\r\n isActiveParent,\r\n isChildItem,\r\n statusComponent: StatusComponent,\r\n children\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {\r\n !!iconName &&\r\n \r\n \r\n \r\n }\r\n\r\n {typeof title === 'function' ? title() : title}\r\n\r\n {\r\n !!StatusComponent &&\r\n \r\n \r\n \r\n }\r\n \r\n\r\n {\r\n children &&\r\n map(children, (child) => {\r\n return React.cloneElement(child, { isChildItem: true });\r\n })\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nPageSidebarItem.propTypes = {\r\n iconName: PropTypes.object,\r\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\r\n to: PropTypes.string.isRequired,\r\n isActive: PropTypes.bool,\r\n isActiveParent: PropTypes.bool,\r\n isParentItem: PropTypes.bool.isRequired,\r\n isChildItem: PropTypes.bool.isRequired,\r\n statusComponent: PropTypes.elementType,\r\n children: PropTypes.node,\r\n onPress: PropTypes.func\r\n};\r\n\r\nPageSidebarItem.defaultProps = {\r\n isChildItem: false\r\n};\r\n\r\nexport default PageSidebarItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"PageSidebarItem-item-uOV0R\",\"isActiveItem\":\"PageSidebarItem-isActiveItem-ylMFV\",\"link\":\"PageSidebarItem-link-O9qjW\",\"childLink\":\"PageSidebarItem-childLink-YTr30 PageSidebarItem-link-O9qjW\",\"isActiveLink\":\"PageSidebarItem-isActiveLink-_3fm9\",\"isActiveParentLink\":\"PageSidebarItem-isActiveParentLink-pAp3F\",\"iconContainer\":\"PageSidebarItem-iconContainer-hoWhE\",\"status\":\"PageSidebarItem-status-CisPT\"};","import classNames from 'classnames';\r\nimport _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport QueueStatus from 'Activity/Queue/Status/QueueStatus';\r\nimport OverlayScroller from 'Components/Scroller/OverlayScroller';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport { icons } from 'Helpers/Props';\r\nimport locationShape from 'Helpers/Props/Shapes/locationShape';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport HealthStatus from 'System/Status/Health/HealthStatus';\r\nimport translate from 'Utilities/String/translate';\r\nimport MessagesConnector from './Messages/MessagesConnector';\r\nimport PageSidebarItem from './PageSidebarItem';\r\nimport styles from './PageSidebar.css';\r\n\r\nconst HEADER_HEIGHT = parseInt(dimensions.headerHeight);\r\nconst SIDEBAR_WIDTH = parseInt(dimensions.sidebarWidth);\r\n\r\nconst links = [\r\n {\r\n iconName: icons.MOVIE_CONTINUING,\r\n title: () => translate('Movies'),\r\n to: '/',\r\n alias: '/movies',\r\n children: [\r\n {\r\n title: () => translate('AddNew'),\r\n to: '/add/new'\r\n },\r\n {\r\n title: () => translate('ImportLibrary'),\r\n to: '/add/import'\r\n },\r\n {\r\n title: () => translate('Collections'),\r\n to: '/collections'\r\n },\r\n {\r\n title: () => translate('Discover'),\r\n to: '/add/discover'\r\n }\r\n ]\r\n },\r\n\r\n {\r\n iconName: icons.CALENDAR,\r\n title: () => translate('Calendar'),\r\n to: '/calendar'\r\n },\r\n\r\n {\r\n iconName: icons.ACTIVITY,\r\n title: () => translate('Activity'),\r\n to: '/activity/queue',\r\n children: [\r\n {\r\n title: () => translate('Queue'),\r\n to: '/activity/queue',\r\n statusComponent: QueueStatus\r\n },\r\n {\r\n title: () => translate('History'),\r\n to: '/activity/history'\r\n },\r\n {\r\n title: () => translate('Blocklist'),\r\n to: '/activity/blocklist'\r\n }\r\n ]\r\n },\r\n\r\n {\r\n iconName: icons.WARNING,\r\n title: () => translate('Wanted'),\r\n to: '/wanted/missing',\r\n children: [\r\n {\r\n title: () => translate('Missing'),\r\n to: '/wanted/missing'\r\n },\r\n {\r\n title: () => translate('CutoffUnmet'),\r\n to: '/wanted/cutoffunmet'\r\n }\r\n ]\r\n },\r\n\r\n {\r\n iconName: icons.SETTINGS,\r\n title: () => translate('Settings'),\r\n to: '/settings',\r\n children: [\r\n {\r\n title: () => translate('MediaManagement'),\r\n to: '/settings/mediamanagement'\r\n },\r\n {\r\n title: () => translate('Profiles'),\r\n to: '/settings/profiles'\r\n },\r\n {\r\n title: () => translate('Quality'),\r\n to: '/settings/quality'\r\n },\r\n {\r\n title: () => translate('CustomFormats'),\r\n to: '/settings/customformats'\r\n },\r\n {\r\n title: () => translate('Indexers'),\r\n to: '/settings/indexers'\r\n },\r\n {\r\n title: () => translate('DownloadClients'),\r\n to: '/settings/downloadclients'\r\n },\r\n {\r\n title: () => translate('ImportLists'),\r\n to: '/settings/importlists'\r\n },\r\n {\r\n title: () => translate('Connect'),\r\n to: '/settings/connect'\r\n },\r\n {\r\n title: () => translate('Metadata'),\r\n to: '/settings/metadata'\r\n },\r\n {\r\n title: () => translate('Tags'),\r\n to: '/settings/tags'\r\n },\r\n {\r\n title: () => translate('General'),\r\n to: '/settings/general'\r\n },\r\n {\r\n title: () => translate('Ui'),\r\n to: '/settings/ui'\r\n }\r\n ]\r\n },\r\n\r\n {\r\n iconName: icons.SYSTEM,\r\n title: () => translate('System'),\r\n to: '/system/status',\r\n children: [\r\n {\r\n title: () => translate('Status'),\r\n to: '/system/status',\r\n statusComponent: HealthStatus\r\n },\r\n {\r\n title: () => translate('Tasks'),\r\n to: '/system/tasks'\r\n },\r\n {\r\n title: () => translate('Backup'),\r\n to: '/system/backup'\r\n },\r\n {\r\n title: () => translate('Updates'),\r\n to: '/system/updates'\r\n },\r\n {\r\n title: () => translate('Events'),\r\n to: '/system/events'\r\n },\r\n {\r\n title: () => translate('LogFiles'),\r\n to: '/system/logs/files'\r\n }\r\n ]\r\n }\r\n];\r\n\r\nfunction getActiveParent(pathname) {\r\n let activeParent = links[0].to;\r\n\r\n links.forEach((link) => {\r\n if (link.to && link.to === pathname) {\r\n activeParent = link.to;\r\n\r\n return false;\r\n }\r\n\r\n const children = link.children;\r\n\r\n if (children) {\r\n children.forEach((childLink) => {\r\n if (pathname.startsWith(childLink.to)) {\r\n activeParent = link.to;\r\n\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n if (\r\n (link.to !== '/' && pathname.startsWith(link.to)) ||\r\n (link.alias && pathname.startsWith(link.alias))\r\n ) {\r\n activeParent = link.to;\r\n\r\n return false;\r\n }\r\n });\r\n\r\n return activeParent;\r\n}\r\n\r\nfunction hasActiveChildLink(link, pathname) {\r\n const children = link.children;\r\n\r\n if (!children || !children.length) {\r\n return false;\r\n }\r\n\r\n return _.some(children, (child) => {\r\n return child.to === pathname;\r\n });\r\n}\r\n\r\nfunction getPositioning() {\r\n const windowScroll = window.scrollY == null ? document.documentElement.scrollTop : window.scrollY;\r\n const top = Math.max(HEADER_HEIGHT - windowScroll, 0);\r\n const height = window.innerHeight - top;\r\n\r\n return {\r\n top: `${top}px`,\r\n height: `${height}px`\r\n };\r\n}\r\n\r\nclass PageSidebar extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._touchStartX = null;\r\n this._touchStartY = null;\r\n this._sidebarRef = null;\r\n\r\n this.state = {\r\n top: dimensions.headerHeight,\r\n height: `${window.innerHeight - HEADER_HEIGHT}px`,\r\n transition: null,\r\n transform: props.isSidebarVisible ? 0 : SIDEBAR_WIDTH * -1\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.isSmallScreen) {\r\n window.addEventListener('click', this.onWindowClick, { capture: true });\r\n window.addEventListener('scroll', this.onWindowScroll);\r\n window.addEventListener('touchstart', this.onTouchStart);\r\n window.addEventListener('touchmove', this.onTouchMove);\r\n window.addEventListener('touchend', this.onTouchEnd);\r\n window.addEventListener('touchcancel', this.onTouchCancel);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n isSidebarVisible\r\n } = this.props;\r\n\r\n const transform = this.state.transform;\r\n\r\n if (prevProps.isSidebarVisible !== isSidebarVisible) {\r\n this._setSidebarTransform(isSidebarVisible);\r\n } else if (transform === 0 && !isSidebarVisible) {\r\n this.props.onSidebarVisibleChange(true);\r\n } else if (transform === -SIDEBAR_WIDTH && isSidebarVisible) {\r\n this.props.onSidebarVisibleChange(false);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.props.isSmallScreen) {\r\n window.removeEventListener('click', this.onWindowClick, { capture: true });\r\n window.removeEventListener('scroll', this.onWindowScroll);\r\n window.removeEventListener('touchstart', this.onTouchStart);\r\n window.removeEventListener('touchmove', this.onTouchMove);\r\n window.removeEventListener('touchend', this.onTouchEnd);\r\n window.removeEventListener('touchcancel', this.onTouchCancel);\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n _setSidebarRef = (ref) => {\r\n this._sidebarRef = ref;\r\n };\r\n\r\n _setSidebarTransform(isSidebarVisible, transition, callback) {\r\n this.setState({\r\n transition,\r\n transform: isSidebarVisible ? 0 : SIDEBAR_WIDTH * -1\r\n }, callback);\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onWindowClick = (event) => {\r\n const sidebar = ReactDOM.findDOMNode(this._sidebarRef);\r\n const toggleButton = document.getElementById('sidebar-toggle-button');\r\n\r\n if (!sidebar) {\r\n return;\r\n }\r\n\r\n if (\r\n !sidebar.contains(event.target) &&\r\n !toggleButton.contains(event.target) &&\r\n this.props.isSidebarVisible\r\n ) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.props.onSidebarVisibleChange(false);\r\n }\r\n };\r\n\r\n onWindowScroll = () => {\r\n this.setState(getPositioning());\r\n };\r\n\r\n onTouchStart = (event) => {\r\n const touches = event.touches;\r\n const touchStartX = touches[0].pageX;\r\n const touchStartY = touches[0].pageY;\r\n const isSidebarVisible = this.props.isSidebarVisible;\r\n\r\n if (touches.length !== 1) {\r\n return;\r\n }\r\n\r\n if (isSidebarVisible && (touchStartX > 210 || touchStartX < 180)) {\r\n return;\r\n } else if (!isSidebarVisible && touchStartX > 40) {\r\n return;\r\n }\r\n\r\n this._touchStartX = touchStartX;\r\n this._touchStartY = touchStartY;\r\n };\r\n\r\n onTouchMove = (event) => {\r\n const touches = event.touches;\r\n const currentTouchX = touches[0].pageX;\r\n // const currentTouchY = touches[0].pageY;\r\n // const isSidebarVisible = this.props.isSidebarVisible;\r\n\r\n if (!this._touchStartX) {\r\n return;\r\n }\r\n\r\n // This is a bit funky when trying to close and you scroll\r\n // vertical too much by mistake, commenting out for now.\r\n // TODO: Evaluate if this should be nuked\r\n\r\n // if (Math.abs(this._touchStartY - currentTouchY) > 40) {\r\n // const transform = isSidebarVisible ? 0 : SIDEBAR_WIDTH * -1;\r\n\r\n // this.setState({\r\n // transition: 'none',\r\n // transform\r\n // });\r\n\r\n // return;\r\n // }\r\n\r\n if (Math.abs(this._touchStartX - currentTouchX) < 40) {\r\n return;\r\n }\r\n\r\n const transform = Math.min(currentTouchX - SIDEBAR_WIDTH, 0);\r\n\r\n this.setState({\r\n transition: 'none',\r\n transform\r\n });\r\n };\r\n\r\n onTouchEnd = (event) => {\r\n const touches = event.changedTouches;\r\n const currentTouch = touches[0].pageX;\r\n\r\n if (!this._touchStartX) {\r\n return;\r\n }\r\n\r\n if (currentTouch > this._touchStartX && currentTouch > 50) {\r\n this._setSidebarTransform(true, 'none');\r\n } else if (currentTouch < this._touchStartX && currentTouch < 80) {\r\n this._setSidebarTransform(false, 'transform 50ms ease-in-out');\r\n } else {\r\n this._setSidebarTransform(this.props.isSidebarVisible);\r\n }\r\n\r\n this._touchStartX = null;\r\n this._touchStartY = null;\r\n };\r\n\r\n onTouchCancel = (event) => {\r\n this._touchStartX = null;\r\n this._touchStartY = null;\r\n };\r\n\r\n onItemPress = () => {\r\n this.props.onSidebarVisibleChange(false);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n location,\r\n isSmallScreen\r\n } = this.props;\r\n\r\n const {\r\n top,\r\n height,\r\n transition,\r\n transform\r\n } = this.state;\r\n\r\n const urlBase = window.Radarr.urlBase;\r\n const pathname = urlBase ? location.pathname.substr(urlBase.length) || '/' : location.pathname;\r\n const activeParent = getActiveParent(pathname);\r\n\r\n let containerStyle = {};\r\n let sidebarStyle = {};\r\n\r\n if (isSmallScreen) {\r\n containerStyle = {\r\n transition,\r\n transform: `translateX(${transform}px)`\r\n };\r\n\r\n sidebarStyle = {\r\n top,\r\n height\r\n };\r\n }\r\n\r\n const ScrollerComponent = isSmallScreen ? Scroller : OverlayScroller;\r\n\r\n return (\r\n \r\n \r\n
\r\n {\r\n links.map((link) => {\r\n const childWithStatusComponent = _.find(link.children, (child) => {\r\n return !!child.statusComponent;\r\n });\r\n\r\n const childStatusComponent = childWithStatusComponent ?\r\n childWithStatusComponent.statusComponent :\r\n null;\r\n\r\n const isActiveParent = activeParent === link.to;\r\n const hasActiveChild = hasActiveChildLink(link, pathname);\r\n\r\n return (\r\n \r\n {\r\n link.children && link.to === activeParent &&\r\n link.children.map((child) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n );\r\n })\r\n }\r\n
\r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nPageSidebar.propTypes = {\r\n location: locationShape.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n isSidebarVisible: PropTypes.bool.isRequired,\r\n onSidebarVisibleChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default PageSidebar;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport PageSidebarStatus from 'Components/Page/Sidebar/PageSidebarStatus';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { fetchQueueStatus } from 'Store/Actions/queueActions';\r\nimport createQueueStatusSelector from './createQueueStatusSelector';\r\n\r\nfunction QueueStatus() {\r\n const dispatch = useDispatch();\r\n const { isConnected, isReconnecting } = useSelector(\r\n (state: AppState) => state.app\r\n );\r\n const { isPopulated, count, errors, warnings } = useSelector(\r\n createQueueStatusSelector()\r\n );\r\n\r\n const wasReconnecting = usePrevious(isReconnecting);\r\n\r\n useEffect(() => {\r\n if (!isPopulated) {\r\n dispatch(fetchQueueStatus());\r\n }\r\n }, [isPopulated, dispatch]);\r\n\r\n useEffect(() => {\r\n if (isConnected && wasReconnecting) {\r\n dispatch(fetchQueueStatus());\r\n }\r\n }, [isConnected, wasReconnecting, dispatch]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default QueueStatus;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport PageSidebarStatus from 'Components/Page/Sidebar/PageSidebarStatus';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { fetchHealth } from 'Store/Actions/systemActions';\r\nimport createHealthSelector from './createHealthSelector';\r\n\r\nfunction HealthStatus() {\r\n const dispatch = useDispatch();\r\n const { isConnected, isReconnecting } = useSelector(\r\n (state: AppState) => state.app\r\n );\r\n const { isPopulated, items } = useSelector(createHealthSelector());\r\n\r\n const wasReconnecting = usePrevious(isReconnecting);\r\n\r\n const { count, errors, warnings } = useMemo(() => {\r\n let errors = false;\r\n let warnings = false;\r\n\r\n items.forEach((item) => {\r\n if (item.type === 'error') {\r\n errors = true;\r\n }\r\n\r\n if (item.type === 'warning') {\r\n warnings = true;\r\n }\r\n });\r\n\r\n return {\r\n count: items.length,\r\n errors,\r\n warnings,\r\n };\r\n }, [items]);\r\n\r\n useEffect(() => {\r\n if (!isPopulated) {\r\n dispatch(fetchHealth());\r\n }\r\n }, [isPopulated, dispatch]);\r\n\r\n useEffect(() => {\r\n if (isConnected && wasReconnecting) {\r\n dispatch(fetchHealth());\r\n }\r\n }, [isConnected, wasReconnecting, dispatch]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default HealthStatus;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"sidebarContainer\":\"PageSidebar-sidebarContainer-aQa5n\",\"sidebar\":\"PageSidebar-sidebar-KUJeR\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport AppUpdatedModal from 'App/AppUpdatedModal';\r\nimport ColorImpairedContext from 'App/ColorImpairedContext';\r\nimport ConnectionLostModal from 'App/ConnectionLostModal';\r\nimport SignalRConnector from 'Components/SignalRConnector';\r\nimport AuthenticationRequiredModal from 'FirstRun/AuthenticationRequiredModal';\r\nimport locationShape from 'Helpers/Props/Shapes/locationShape';\r\nimport PageHeader from './Header/PageHeader';\r\nimport PageSidebar from './Sidebar/PageSidebar';\r\nimport styles from './Page.css';\r\n\r\nclass Page extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isUpdatedModalOpen: false,\r\n isConnectionLostModalOpen: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('resize', this.onResize);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n isDisconnected,\r\n isUpdated\r\n } = this.props;\r\n\r\n if (!prevProps.isUpdated && isUpdated) {\r\n this.setState({ isUpdatedModalOpen: true });\r\n }\r\n\r\n if (prevProps.isDisconnected !== isDisconnected) {\r\n this.setState({ isConnectionLostModalOpen: isDisconnected });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.onResize);\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onResize = () => {\r\n this.props.onResize({\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n });\r\n };\r\n\r\n onUpdatedModalClose = () => {\r\n this.setState({ isUpdatedModalOpen: false });\r\n };\r\n\r\n onConnectionLostModalClose = () => {\r\n this.setState({ isConnectionLostModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n location,\r\n children,\r\n isSmallScreen,\r\n isSidebarVisible,\r\n enableColorImpairedMode,\r\n authenticationEnabled,\r\n onSidebarToggle,\r\n onSidebarVisibleChange\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n \r\n\r\n \r\n\r\n
\r\n \r\n\r\n {children}\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nPage.propTypes = {\r\n className: PropTypes.string,\r\n location: locationShape.isRequired,\r\n children: PropTypes.node.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n isSidebarVisible: PropTypes.bool.isRequired,\r\n isUpdated: PropTypes.bool.isRequired,\r\n isDisconnected: PropTypes.bool.isRequired,\r\n enableColorImpairedMode: PropTypes.bool.isRequired,\r\n authenticationEnabled: PropTypes.bool.isRequired,\r\n onResize: PropTypes.func.isRequired,\r\n onSidebarToggle: PropTypes.func.isRequired,\r\n onSidebarVisibleChange: PropTypes.func.isRequired\r\n};\r\n\r\nPage.defaultProps = {\r\n className: styles.page\r\n};\r\n\r\nexport default Page;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"Page-page-TorHA\",\"main\":\"Page-main-Swphf\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchTranslations, saveDimensions, setIsSidebarVisible } from 'Store/Actions/appActions';\r\nimport { fetchCustomFilters } from 'Store/Actions/customFilterActions';\r\nimport { fetchMovies } from 'Store/Actions/movieActions';\r\nimport { fetchMovieCollections } from 'Store/Actions/movieCollectionActions';\r\nimport { fetchImportLists, fetchIndexerFlags, fetchLanguages, fetchQualityProfiles, fetchUISettings } from 'Store/Actions/settingsActions';\r\nimport { fetchStatus } from 'Store/Actions/systemActions';\r\nimport { fetchTags } from 'Store/Actions/tagActions';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport ErrorPage from './ErrorPage';\r\nimport LoadingPage from './LoadingPage';\r\nimport Page from './Page';\r\n\r\nfunction testLocalStorage() {\r\n const key = 'radarrTest';\r\n\r\n try {\r\n localStorage.setItem(key, key);\r\n localStorage.removeItem(key);\r\n\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nconst selectAppProps = createSelector(\r\n (state) => state.app.isSidebarVisible,\r\n (state) => state.app.version,\r\n (state) => state.app.isUpdated,\r\n (state) => state.app.isDisconnected,\r\n (isSidebarVisible, version, isUpdated, isDisconnected) => {\r\n return {\r\n isSidebarVisible,\r\n version,\r\n isUpdated,\r\n isDisconnected\r\n };\r\n }\r\n);\r\n\r\nconst selectIsPopulated = createSelector(\r\n (state) => state.movies.isPopulated,\r\n (state) => state.customFilters.isPopulated,\r\n (state) => state.tags.isPopulated,\r\n (state) => state.settings.ui.isPopulated,\r\n (state) => state.settings.qualityProfiles.isPopulated,\r\n (state) => state.settings.languages.isPopulated,\r\n (state) => state.settings.indexerFlags.isPopulated,\r\n (state) => state.settings.importLists.isPopulated,\r\n (state) => state.system.status.isPopulated,\r\n (state) => state.movieCollections.isPopulated,\r\n (state) => state.app.translations.isPopulated,\r\n (\r\n moviesIsPopulated,\r\n customFiltersIsPopulated,\r\n tagsIsPopulated,\r\n uiSettingsIsPopulated,\r\n qualityProfilesIsPopulated,\r\n languagesIsPopulated,\r\n indexerFlagsIsPopulated,\r\n importListsIsPopulated,\r\n systemStatusIsPopulated,\r\n movieCollectionsIsPopulated,\r\n translationsIsPopulated\r\n ) => {\r\n return (\r\n moviesIsPopulated &&\r\n customFiltersIsPopulated &&\r\n tagsIsPopulated &&\r\n uiSettingsIsPopulated &&\r\n qualityProfilesIsPopulated &&\r\n languagesIsPopulated &&\r\n indexerFlagsIsPopulated &&\r\n importListsIsPopulated &&\r\n systemStatusIsPopulated &&\r\n movieCollectionsIsPopulated &&\r\n translationsIsPopulated\r\n );\r\n }\r\n);\r\n\r\nconst selectErrors = createSelector(\r\n (state) => state.movies.error,\r\n (state) => state.customFilters.error,\r\n (state) => state.tags.error,\r\n (state) => state.settings.ui.error,\r\n (state) => state.settings.qualityProfiles.error,\r\n (state) => state.settings.languages.error,\r\n (state) => state.settings.indexerFlags.error,\r\n (state) => state.settings.importLists.error,\r\n (state) => state.system.status.error,\r\n (state) => state.movieCollections.error,\r\n (state) => state.app.translations.error,\r\n (\r\n moviesError,\r\n customFiltersError,\r\n tagsError,\r\n uiSettingsError,\r\n qualityProfilesError,\r\n languagesError,\r\n indexerFlagsError,\r\n importListsError,\r\n systemStatusError,\r\n movieCollectionsError,\r\n translationsError\r\n ) => {\r\n const hasError = !!(\r\n moviesError ||\r\n customFiltersError ||\r\n tagsError ||\r\n uiSettingsError ||\r\n qualityProfilesError ||\r\n languagesError ||\r\n indexerFlagsError ||\r\n importListsError ||\r\n systemStatusError ||\r\n movieCollectionsError ||\r\n translationsError\r\n );\r\n\r\n return {\r\n hasError,\r\n customFiltersError,\r\n tagsError,\r\n uiSettingsError,\r\n qualityProfilesError,\r\n languagesError,\r\n indexerFlagsError,\r\n importListsError,\r\n systemStatusError,\r\n movieCollectionsError,\r\n translationsError\r\n };\r\n }\r\n);\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.ui.item.enableColorImpairedMode,\r\n selectIsPopulated,\r\n selectErrors,\r\n selectAppProps,\r\n createDimensionsSelector(),\r\n createSystemStatusSelector(),\r\n (\r\n enableColorImpairedMode,\r\n isPopulated,\r\n errors,\r\n app,\r\n dimensions,\r\n systemStatus\r\n ) => {\r\n return {\r\n ...app,\r\n ...errors,\r\n isPopulated,\r\n isSmallScreen: dimensions.isSmallScreen,\r\n authenticationEnabled: systemStatus.authentication !== 'none',\r\n enableColorImpairedMode\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n dispatchFetchMovies() {\r\n dispatch(fetchMovies());\r\n },\r\n dispatchFetchMovieCollections() {\r\n dispatch(fetchMovieCollections());\r\n },\r\n dispatchFetchCustomFilters() {\r\n dispatch(fetchCustomFilters());\r\n },\r\n dispatchFetchTags() {\r\n dispatch(fetchTags());\r\n },\r\n dispatchFetchQualityProfiles() {\r\n dispatch(fetchQualityProfiles());\r\n },\r\n dispatchFetchLanguages() {\r\n dispatch(fetchLanguages());\r\n },\r\n dispatchFetchIndexerFlags() {\r\n dispatch(fetchIndexerFlags());\r\n },\r\n dispatchFetchImportLists() {\r\n dispatch(fetchImportLists());\r\n },\r\n dispatchFetchUISettings() {\r\n dispatch(fetchUISettings());\r\n },\r\n dispatchFetchStatus() {\r\n dispatch(fetchStatus());\r\n },\r\n dispatchFetchTranslations() {\r\n dispatch(fetchTranslations());\r\n },\r\n onResize(dimensions) {\r\n dispatch(saveDimensions(dimensions));\r\n },\r\n onSidebarVisibleChange(isSidebarVisible) {\r\n dispatch(setIsSidebarVisible({ isSidebarVisible }));\r\n }\r\n };\r\n}\r\n\r\nclass PageConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isLocalStorageSupported: testLocalStorage()\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.isPopulated) {\r\n this.props.dispatchFetchMovies();\r\n this.props.dispatchFetchMovieCollections();\r\n this.props.dispatchFetchCustomFilters();\r\n this.props.dispatchFetchTags();\r\n this.props.dispatchFetchQualityProfiles();\r\n this.props.dispatchFetchLanguages();\r\n this.props.dispatchFetchIndexerFlags();\r\n this.props.dispatchFetchImportLists();\r\n this.props.dispatchFetchUISettings();\r\n this.props.dispatchFetchStatus();\r\n this.props.dispatchFetchTranslations();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onSidebarToggle = () => {\r\n this.props.onSidebarVisibleChange(!this.props.isSidebarVisible);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isPopulated,\r\n hasError,\r\n dispatchFetchMovies,\r\n dispatchFetchMovieCollections,\r\n dispatchFetchTags,\r\n dispatchFetchQualityProfiles,\r\n dispatchFetchLanguages,\r\n dispatchFetchIndexerFlags,\r\n dispatchFetchImportLists,\r\n dispatchFetchUISettings,\r\n dispatchFetchStatus,\r\n dispatchFetchTranslations,\r\n ...otherProps\r\n } = this.props;\r\n\r\n if (hasError || !this.state.isLocalStorageSupported) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (isPopulated) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nPageConnector.propTypes = {\r\n isPopulated: PropTypes.bool.isRequired,\r\n hasError: PropTypes.bool.isRequired,\r\n isSidebarVisible: PropTypes.bool.isRequired,\r\n dispatchFetchMovies: PropTypes.func.isRequired,\r\n dispatchFetchMovieCollections: PropTypes.func.isRequired,\r\n dispatchFetchCustomFilters: PropTypes.func.isRequired,\r\n dispatchFetchTags: PropTypes.func.isRequired,\r\n dispatchFetchQualityProfiles: PropTypes.func.isRequired,\r\n dispatchFetchLanguages: PropTypes.func.isRequired,\r\n dispatchFetchIndexerFlags: PropTypes.func.isRequired,\r\n dispatchFetchImportLists: PropTypes.func.isRequired,\r\n dispatchFetchUISettings: PropTypes.func.isRequired,\r\n dispatchFetchStatus: PropTypes.func.isRequired,\r\n dispatchFetchTranslations: PropTypes.func.isRequired,\r\n onSidebarVisibleChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withRouter(\r\n connect(createMapStateToProps, createMapDispatchToProps)(PageConnector)\r\n);\r\n","import * as dark from './dark';\r\nimport * as light from './light';\r\n\r\nconst defaultDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\r\nconst auto = defaultDark ? dark : light;\r\n\r\nexport default {\r\n auto,\r\n light,\r\n dark\r\n};\r\n","import { useCallback, useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport themes from 'Styles/Themes';\r\nimport AppState from './State/AppState';\r\n\r\nfunction createThemeSelector() {\r\n return createSelector(\r\n (state: AppState) => state.settings.ui.item.theme || window.Radarr.theme,\r\n (theme) => {\r\n return theme;\r\n }\r\n );\r\n}\r\n\r\nfunction ApplyTheme() {\r\n const theme = useSelector(createThemeSelector());\r\n\r\n const updateCSSVariables = useCallback(() => {\r\n Object.entries(themes[theme]).forEach(([key, value]) => {\r\n document.documentElement.style.setProperty(`--${key}`, value);\r\n });\r\n }, [theme]);\r\n\r\n // On Component Mount and Component Update\r\n useEffect(() => {\r\n updateCSSVariables();\r\n }, [updateCSSVariables, theme]);\r\n\r\n return null;\r\n}\r\n\r\nexport default ApplyTheme;\r\n","export default function areAllSelected(selectedState) {\r\n let allSelected = true;\r\n let allUnselected = true;\r\n\r\n Object.keys(selectedState).forEach((key) => {\r\n if (selectedState[key]) {\r\n allUnselected = false;\r\n } else {\r\n allSelected = false;\r\n }\r\n });\r\n\r\n return {\r\n allSelected,\r\n allUnselected\r\n };\r\n}\r\n","import _ from 'lodash';\r\n\r\nfunction selectAll(selectedState, selected) {\r\n const newSelectedState = _.reduce(Object.keys(selectedState), (result, item) => {\r\n result[item] = selected;\r\n return result;\r\n }, {});\r\n\r\n return {\r\n allSelected: selected,\r\n allUnselected: !selected,\r\n lastToggled: null,\r\n selectedState: newSelectedState\r\n };\r\n}\r\n\r\nexport default selectAll;\r\n","import areAllSelected from './areAllSelected';\r\nimport getToggledRange from './getToggledRange';\r\n\r\nfunction toggleSelected(selectedState, items, id, selected, shiftKey) {\r\n const lastToggled = selectedState.lastToggled;\r\n const nextSelectedState = {\r\n ...selectedState.selectedState,\r\n [id]: selected\r\n };\r\n\r\n if (selected == null) {\r\n delete nextSelectedState[id];\r\n }\r\n\r\n if (shiftKey && lastToggled) {\r\n const { lower, upper } = getToggledRange(items, id, lastToggled);\r\n\r\n for (let i = lower; i < upper; i++) {\r\n nextSelectedState[items[i].id] = selected;\r\n }\r\n }\r\n\r\n return {\r\n ...areAllSelected(nextSelectedState),\r\n lastToggled: id,\r\n selectedState: nextSelectedState\r\n };\r\n}\r\n\r\nexport default toggleSelected;\r\n","import _ from 'lodash';\r\n\r\nfunction getToggledRange(items, id, lastToggled) {\r\n const lastToggledIndex = _.findIndex(items, { id: lastToggled });\r\n const changedIndex = _.findIndex(items, { id });\r\n let lower = 0;\r\n let upper = 0;\r\n\r\n if (lastToggledIndex > changedIndex) {\r\n lower = changedIndex;\r\n upper = lastToggledIndex + 1;\r\n } else {\r\n lower = lastToggledIndex;\r\n upper = changedIndex;\r\n }\r\n\r\n return {\r\n lower,\r\n upper\r\n };\r\n}\r\n\r\nexport default getToggledRange;\r\n","import { cloneDeep } from 'lodash';\r\nimport { useReducer } from 'react';\r\nimport ModelBase from 'App/ModelBase';\r\nimport areAllSelected from 'Utilities/Table/areAllSelected';\r\nimport selectAll from 'Utilities/Table/selectAll';\r\nimport toggleSelected from 'Utilities/Table/toggleSelected';\r\n\r\nexport type SelectedState = Record;\r\n\r\nexport interface SelectState {\r\n selectedState: SelectedState;\r\n lastToggled: number | null;\r\n allSelected: boolean;\r\n allUnselected: boolean;\r\n}\r\n\r\nexport type SelectAction =\r\n | { type: 'reset' }\r\n | { type: 'selectAll'; items: ModelBase[] }\r\n | { type: 'unselectAll'; items: ModelBase[] }\r\n | {\r\n type: 'toggleSelected';\r\n id: number;\r\n isSelected: boolean;\r\n shiftKey: boolean;\r\n items: ModelBase[];\r\n }\r\n | {\r\n type: 'removeItem';\r\n id: number;\r\n }\r\n | {\r\n type: 'updateItems';\r\n items: ModelBase[];\r\n };\r\n\r\nexport type Dispatch = (action: SelectAction) => void;\r\n\r\nconst initialState = {\r\n selectedState: {},\r\n lastToggled: null,\r\n allSelected: false,\r\n allUnselected: true,\r\n items: [],\r\n};\r\n\r\nfunction getSelectedState(items: ModelBase[], existingState: SelectedState) {\r\n return items.reduce((acc: SelectedState, item) => {\r\n const id = item.id;\r\n\r\n acc[id] = existingState[id] ?? false;\r\n\r\n return acc;\r\n }, {});\r\n}\r\n\r\nfunction selectReducer(state: SelectState, action: SelectAction): SelectState {\r\n const { selectedState } = state;\r\n\r\n switch (action.type) {\r\n case 'reset': {\r\n return cloneDeep(initialState);\r\n }\r\n case 'selectAll': {\r\n return {\r\n ...selectAll(selectedState, true),\r\n };\r\n }\r\n case 'unselectAll': {\r\n return {\r\n ...selectAll(selectedState, false),\r\n };\r\n }\r\n case 'toggleSelected': {\r\n const result = {\r\n ...toggleSelected(\r\n state,\r\n action.items,\r\n action.id,\r\n action.isSelected,\r\n action.shiftKey\r\n ),\r\n };\r\n\r\n return result;\r\n }\r\n case 'updateItems': {\r\n const nextSelectedState = getSelectedState(action.items, selectedState);\r\n\r\n return {\r\n ...state,\r\n ...areAllSelected(nextSelectedState),\r\n selectedState: nextSelectedState,\r\n };\r\n }\r\n default: {\r\n throw new Error(`Unhandled action type: ${action.type}`);\r\n }\r\n }\r\n}\r\n\r\nexport default function useSelectState(): [SelectState, Dispatch] {\r\n const selectedState = getSelectedState([], {});\r\n\r\n const [state, dispatch] = useReducer(selectReducer, {\r\n selectedState,\r\n lastToggled: null,\r\n allSelected: false,\r\n allUnselected: true,\r\n });\r\n\r\n return [state, dispatch];\r\n}\r\n","import { cloneDeep } from 'lodash';\r\nimport React, { useCallback, useEffect } from 'react';\r\nimport useSelectState, { SelectState } from 'Helpers/Hooks/useSelectState';\r\nimport ModelBase from './ModelBase';\r\n\r\nexport type SelectContextAction =\r\n | { type: 'reset' }\r\n | { type: 'selectAll' }\r\n | { type: 'unselectAll' }\r\n | {\r\n type: 'toggleSelected';\r\n id: number;\r\n isSelected: boolean;\r\n shiftKey: boolean;\r\n }\r\n | {\r\n type: 'removeItem';\r\n id: number;\r\n }\r\n | {\r\n type: 'updateItems';\r\n items: ModelBase[];\r\n };\r\n\r\nexport type SelectDispatch = (action: SelectContextAction) => void;\r\n\r\ninterface SelectProviderOptions {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n children: any;\r\n items: Array;\r\n}\r\n\r\nconst SelectContext = React.createContext<\r\n [SelectState, SelectDispatch] | undefined\r\n>(cloneDeep(undefined));\r\n\r\nexport function SelectProvider(\r\n props: SelectProviderOptions\r\n) {\r\n const { items } = props;\r\n const [state, dispatch] = useSelectState();\r\n\r\n const dispatchWrapper = useCallback(\r\n (action: SelectContextAction) => {\r\n switch (action.type) {\r\n case 'reset':\r\n case 'removeItem':\r\n dispatch(action);\r\n break;\r\n\r\n default:\r\n dispatch({\r\n ...action,\r\n items,\r\n });\r\n break;\r\n }\r\n },\r\n [items, dispatch]\r\n );\r\n\r\n const value: [SelectState, SelectDispatch] = [state, dispatchWrapper];\r\n\r\n useEffect(() => {\r\n dispatch({ type: 'updateItems', items });\r\n }, [items, dispatch]);\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nexport function useSelect() {\r\n const context = React.useContext(SelectContext);\r\n\r\n if (context === undefined) {\r\n throw new Error('useSelect must be used within a SelectProvider');\r\n }\r\n\r\n return context;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport { icons } from 'Helpers/Props';\r\nimport MenuItem from './MenuItem';\r\nimport styles from './SelectedMenuItem.css';\r\n\r\nclass SelectedMenuItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n name,\r\n onPress\r\n } = this.props;\r\n\r\n onPress(name);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n children,\r\n selectedIconName,\r\n isSelected,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n {children}\r\n\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nSelectedMenuItem.propTypes = {\r\n name: PropTypes.string,\r\n children: PropTypes.node.isRequired,\r\n selectedIconName: PropTypes.object.isRequired,\r\n isSelected: PropTypes.bool.isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nSelectedMenuItem.defaultProps = {\r\n selectedIconName: icons.CHECK\r\n};\r\n\r\nexport default SelectedMenuItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"SelectedMenuItem-item-q3JrL\",\"isSelected\":\"SelectedMenuItem-isSelected-tocvz\",\"isNotSelected\":\"SelectedMenuItem-isNotSelected-UNRlj\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport SelectedMenuItem from './SelectedMenuItem';\r\n\r\nclass FilterMenuItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n filterKey,\r\n onPress\r\n } = this.props;\r\n\r\n onPress(filterKey);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n filterKey,\r\n selectedFilterKey,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nFilterMenuItem.propTypes = {\r\n filterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default FilterMenuItem;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport FilterMenuItem from './FilterMenuItem';\r\nimport MenuContent from './MenuContent';\r\nimport MenuItem from './MenuItem';\r\nimport MenuItemSeparator from './MenuItemSeparator';\r\n\r\nclass FilterMenuContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n showCustomFilters,\r\n onFilterSelect,\r\n onCustomFiltersPress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {\r\n filters.map((filter) => {\r\n return (\r\n \r\n {typeof filter.label === 'function' ? filter.label() : filter.label}\r\n \r\n );\r\n })\r\n }\r\n\r\n {\r\n customFilters.length > 0 ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n customFilters\r\n .sort(sortByProp('label'))\r\n .map((filter) => {\r\n return (\r\n \r\n {filter.label}\r\n \r\n );\r\n })\r\n }\r\n\r\n {\r\n showCustomFilters &&\r\n \r\n }\r\n\r\n {\r\n showCustomFilters &&\r\n \r\n {translate('CustomFilters')}\r\n \r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nFilterMenuContent.propTypes = {\r\n selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n showCustomFilters: PropTypes.bool.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired,\r\n onCustomFiltersPress: PropTypes.func.isRequired\r\n};\r\n\r\nFilterMenuContent.defaultProps = {\r\n showCustomFilters: false\r\n};\r\n\r\nexport default FilterMenuContent;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport MenuButton from 'Components/Menu/MenuButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './ToolbarMenuButton.css';\r\n\r\nfunction ToolbarMenuButton(props) {\r\n const {\r\n iconName,\r\n showIndicator,\r\n text,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n
\r\n \r\n\r\n {\r\n showIndicator &&\r\n \r\n \r\n \r\n }\r\n\r\n
\r\n
\r\n {text}\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nToolbarMenuButton.propTypes = {\r\n iconName: PropTypes.object.isRequired,\r\n text: PropTypes.string,\r\n showIndicator: PropTypes.bool.isRequired\r\n};\r\n\r\nToolbarMenuButton.defaultProps = {\r\n showIndicator: false\r\n};\r\n\r\nexport default ToolbarMenuButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"menuButton\":\"ToolbarMenuButton-menuButton-U1XFl MenuButton-menuButton-Jl5Je\",\"indicatorContainer\":\"ToolbarMenuButton-indicatorContainer-pM1GQ\",\"labelContainer\":\"ToolbarMenuButton-labelContainer-pVdy2 PageToolbarButton-labelContainer-QhTz_\",\"label\":\"ToolbarMenuButton-label-8FLaf PageToolbarButton-label-QIVQh\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport FilterMenuContent from './FilterMenuContent';\r\nimport Menu from './Menu';\r\nimport ToolbarMenuButton from './ToolbarMenuButton';\r\nimport styles from './FilterMenu.css';\r\n\r\nclass FilterMenu extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isFilterModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onCustomFiltersPress = () => {\r\n this.setState({ isFilterModalOpen: true });\r\n };\r\n\r\n onFiltersModalClose = () => {\r\n this.setState({ isFilterModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render(props) {\r\n const {\r\n className,\r\n isDisabled,\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n buttonComponent: ButtonComponent,\r\n filterModalConnectorComponent: FilterModalConnectorComponent,\r\n filterModalConnectorComponentProps,\r\n onFilterSelect,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const showCustomFilters = !!FilterModalConnectorComponent;\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n {\r\n showCustomFilters &&\r\n \r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nFilterMenu.propTypes = {\r\n className: PropTypes.string,\r\n isDisabled: PropTypes.bool.isRequired,\r\n selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n buttonComponent: PropTypes.elementType.isRequired,\r\n filterModalConnectorComponent: PropTypes.elementType,\r\n filterModalConnectorComponentProps: PropTypes.object,\r\n onFilterSelect: PropTypes.func.isRequired\r\n};\r\n\r\nFilterMenu.defaultProps = {\r\n className: styles.filterMenu,\r\n isDisabled: false,\r\n buttonComponent: ToolbarMenuButton\r\n};\r\n\r\nexport default FilterMenu;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"filterMenu\":\"FilterMenu-filterMenu-vFvai Menu-menu-Uz3_0\"};","// extracted by mini-css-extract-plugin\nexport default {\"contentBody\":\"PageContentBody-contentBody-Hetrs\",\"innerContentBody\":\"PageContentBody-innerContentBody-PtigL\"};","import React, { ForwardedRef, forwardRef, ReactNode, useCallback } from 'react';\r\nimport Scroller, { OnScroll } from 'Components/Scroller/Scroller';\r\nimport { isLocked } from 'Utilities/scrollLock';\r\nimport styles from './PageContentBody.css';\r\n\r\ninterface PageContentBodyProps {\r\n className?: string;\r\n innerClassName?: string;\r\n children: ReactNode;\r\n initialScrollTop?: number;\r\n onScroll?: (payload: OnScroll) => void;\r\n}\r\n\r\nconst PageContentBody = forwardRef(\r\n (props: PageContentBodyProps, ref: ForwardedRef) => {\r\n const {\r\n className = styles.contentBody,\r\n innerClassName = styles.innerContentBody,\r\n children,\r\n onScroll,\r\n ...otherProps\r\n } = props;\r\n\r\n const onScrollWrapper = useCallback(\r\n (payload: OnScroll) => {\r\n if (onScroll && !isLocked()) {\r\n onScroll(payload);\r\n }\r\n },\r\n [onScroll]\r\n );\r\n\r\n return (\r\n \r\n
{children}
\r\n \r\n );\r\n }\r\n);\r\n\r\nexport default PageContentBody;\r\n","import React from 'react';\r\nimport ErrorBoundaryError from 'Components/Error/ErrorBoundaryError';\r\nimport translate from 'Utilities/String/translate';\r\nimport PageContentBody from './PageContentBody';\r\nimport styles from './PageContentError.css';\r\n\r\nfunction PageContentError(props) {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default PageContentError;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"PageContentError-content-qmaXw PageContent-content-C67P9\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport DocumentTitle from 'react-document-title';\r\nimport ErrorBoundary from 'Components/Error/ErrorBoundary';\r\nimport PageContentError from './PageContentError';\r\nimport styles from './PageContent.css';\r\n\r\nfunction PageContent(props) {\r\n const {\r\n className,\r\n title,\r\n children\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nPageContent.propTypes = {\r\n className: PropTypes.string,\r\n title: PropTypes.string,\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nPageContent.defaultProps = {\r\n className: styles.content\r\n};\r\n\r\nexport default PageContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"PageContent-content-C67P9\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './PageToolbar.css';\r\n\r\nclass PageToolbar extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n children\r\n } = this.props;\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n }\r\n}\r\n\r\nPageToolbar.propTypes = {\r\n className: PropTypes.string,\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nPageToolbar.defaultProps = {\r\n className: styles.toolbar\r\n};\r\n\r\nexport default PageToolbar;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"toolbar\":\"PageToolbar-toolbar-YMl38\"};","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport Icon, { IconName } from 'Components/Icon';\r\nimport Link, { LinkProps } from 'Components/Link/Link';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './PageToolbarButton.css';\r\n\r\nexport interface PageToolbarButtonProps extends LinkProps {\r\n label: string;\r\n iconName: IconName;\r\n spinningName?: IconName;\r\n isSpinning?: boolean;\r\n isDisabled?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n overflowComponent?: React.ComponentType;\r\n}\r\n\r\nfunction PageToolbarButton({\r\n label,\r\n iconName,\r\n spinningName = icons.SPINNER,\r\n isDisabled = false,\r\n isSpinning = false,\r\n overflowComponent,\r\n ...otherProps\r\n}: PageToolbarButtonProps) {\r\n return (\r\n \r\n \r\n\r\n
\r\n
{label}
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default PageToolbarButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"toolbarButton\":\"PageToolbarButton-toolbarButton-j8a_b Link-link-RInnp\",\"isDisabled\":\"PageToolbarButton-isDisabled-s8dE7\",\"labelContainer\":\"PageToolbarButton-labelContainer-QhTz_\",\"label\":\"PageToolbarButton-label-QIVQh\"};","import React from 'react';\r\nimport { icons } from 'Helpers/Props';\r\nimport Icon, { IconProps } from './Icon';\r\n\r\nexport interface SpinnerIconProps extends IconProps {\r\n spinningName?: IconProps['name'];\r\n isSpinning: Required;\r\n}\r\n\r\nexport default function SpinnerIcon({\r\n name,\r\n spinningName = icons.SPINNER,\r\n isSpinning,\r\n ...otherProps\r\n}: SpinnerIconProps) {\r\n return (\r\n \r\n );\r\n}\r\n","import { IconDefinition } from '@fortawesome/fontawesome-common-types';\r\nimport React from 'react';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\nimport SpinnerIcon from 'Components/SpinnerIcon';\r\nimport styles from './PageToolbarOverflowMenuItem.css';\r\n\r\ninterface PageToolbarOverflowMenuItemProps {\r\n iconName: IconDefinition;\r\n spinningName?: IconDefinition;\r\n isDisabled?: boolean;\r\n isSpinning?: boolean;\r\n showIndicator?: boolean;\r\n label: string;\r\n text?: string;\r\n onPress: () => void;\r\n}\r\n\r\nfunction PageToolbarOverflowMenuItem(props: PageToolbarOverflowMenuItemProps) {\r\n const {\r\n iconName,\r\n spinningName,\r\n label,\r\n isDisabled,\r\n isSpinning = false,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {label}\r\n \r\n );\r\n}\r\n\r\nexport default PageToolbarOverflowMenuItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"PageToolbarOverflowMenuItem-icon-FSmml\"};","// extracted by mini-css-extract-plugin\nexport default {\"sectionContainer\":\"PageToolbarSection-sectionContainer-dcxFs\",\"section\":\"PageToolbarSection-section-hL6TV\",\"left\":\"PageToolbarSection-left-E_sPJ\",\"center\":\"PageToolbarSection-center-hVR9U\",\"right\":\"PageToolbarSection-right-w45zk\",\"overflowMenuButton\":\"PageToolbarSection-overflowMenuButton-zBG01 ToolbarMenuButton-menuButton-U1XFl MenuButton-menuButton-Jl5Je\",\"overflowMenuItemIcon\":\"PageToolbarSection-overflowMenuItemIcon-qXSpK\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Measure from 'Components/Measure';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton';\r\nimport { forEach } from 'Helpers/elementChildren';\r\nimport { align, icons } from 'Helpers/Props';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport translate from 'Utilities/String/translate';\r\nimport PageToolbarOverflowMenuItem from './PageToolbarOverflowMenuItem';\r\nimport styles from './PageToolbarSection.css';\r\n\r\nconst BUTTON_WIDTH = parseInt(dimensions.toolbarButtonWidth);\r\nconst SEPARATOR_MARGIN = parseInt(dimensions.toolbarSeparatorMargin);\r\nconst SEPARATOR_WIDTH = 2 * SEPARATOR_MARGIN + 1;\r\n\r\nfunction calculateOverflowItems(children, isMeasured, width, collapseButtons) {\r\n let buttonCount = 0;\r\n let separatorCount = 0;\r\n const validChildren = [];\r\n\r\n forEach(children, (child) => {\r\n if (Object.keys(child.props).length === 0) {\r\n separatorCount++;\r\n } else {\r\n buttonCount++;\r\n }\r\n\r\n validChildren.push(child);\r\n });\r\n\r\n const buttonsWidth = buttonCount * BUTTON_WIDTH;\r\n const separatorsWidth = separatorCount + SEPARATOR_WIDTH;\r\n const totalWidth = buttonsWidth + separatorsWidth;\r\n\r\n // If the width of buttons and separators is less than\r\n // the available width return all valid children.\r\n\r\n if (\r\n !isMeasured ||\r\n !collapseButtons ||\r\n totalWidth < width\r\n ) {\r\n return {\r\n buttons: validChildren,\r\n buttonCount,\r\n overflowItems: []\r\n };\r\n }\r\n\r\n const maxButtons = Math.max(Math.floor((width - separatorsWidth) / BUTTON_WIDTH), 1);\r\n const buttons = [];\r\n const overflowItems = [];\r\n let actualButtons = 0;\r\n\r\n // Return all buttons if only one is being pushed to the overflow menu.\r\n if (buttonCount - 1 === maxButtons) {\r\n return {\r\n buttons: validChildren,\r\n buttonCount,\r\n overflowItems: []\r\n };\r\n }\r\n\r\n validChildren.forEach((child, index) => {\r\n const isSeparator = Object.keys(child.props).length === 0;\r\n\r\n if (actualButtons < maxButtons) {\r\n if (!isSeparator) {\r\n buttons.push(child);\r\n actualButtons++;\r\n }\r\n } else if (!isSeparator) {\r\n overflowItems.push(child.props);\r\n }\r\n });\r\n\r\n return {\r\n buttons,\r\n buttonCount,\r\n overflowItems\r\n };\r\n}\r\n\r\nclass PageToolbarSection extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isMeasured: false,\r\n width: 0,\r\n buttons: [],\r\n overflowItems: []\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = ({ width }) => {\r\n this.setState({\r\n isMeasured: true,\r\n width\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n children,\r\n alignContent,\r\n collapseButtons\r\n } = this.props;\r\n\r\n const {\r\n isMeasured,\r\n width\r\n } = this.state;\r\n\r\n const {\r\n buttons,\r\n buttonCount,\r\n overflowItems\r\n } = calculateOverflowItems(children, isMeasured, width, collapseButtons);\r\n\r\n return (\r\n \r\n \r\n {\r\n isMeasured ?\r\n
\r\n {\r\n buttons.map((button) => {\r\n return button;\r\n })\r\n }\r\n\r\n {\r\n !!overflowItems.length &&\r\n \r\n \r\n\r\n \r\n {\r\n overflowItems.map((item) => {\r\n const {\r\n label,\r\n overflowComponent: OverflowComponent = PageToolbarOverflowMenuItem\r\n } = item;\r\n\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n }\r\n
:\r\n null\r\n }\r\n
\r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nPageToolbarSection.propTypes = {\r\n children: PropTypes.node,\r\n alignContent: PropTypes.oneOf([align.LEFT, align.CENTER, align.RIGHT]),\r\n collapseButtons: PropTypes.bool.isRequired\r\n};\r\n\r\nPageToolbarSection.defaultProps = {\r\n alignContent: align.LEFT,\r\n collapseButtons: true\r\n};\r\n\r\nexport default PageToolbarSection;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './SelectInput.css';\r\n\r\nclass SelectInput extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = (event) => {\r\n this.props.onChange({\r\n name: this.props.name,\r\n value: event.target.value\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n disabledClassName,\r\n name,\r\n value,\r\n values,\r\n isDisabled,\r\n hasError,\r\n hasWarning,\r\n autoFocus,\r\n onBlur\r\n } = this.props;\r\n\r\n return (\r\n \r\n {\r\n values.map((option) => {\r\n const {\r\n key,\r\n value: optionValue,\r\n isDisabled: optionIsDisabled = false,\r\n ...otherOptionProps\r\n } = option;\r\n\r\n return (\r\n \r\n {typeof optionValue === 'function' ? optionValue() : optionValue}\r\n \r\n );\r\n })\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nSelectInput.propTypes = {\r\n className: PropTypes.string,\r\n disabledClassName: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]).isRequired,\r\n values: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isDisabled: PropTypes.bool,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n autoFocus: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n onBlur: PropTypes.func\r\n};\r\n\r\nSelectInput.defaultProps = {\r\n className: styles.select,\r\n disabledClassName: styles.isDisabled,\r\n isDisabled: false,\r\n autoFocus: false\r\n};\r\n\r\nexport default SelectInput;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"select\":\"SelectInput-select-M6gsU Input-input-KWeec\",\"hasError\":\"SelectInput-hasError-e0Agk Input-hasError-_3DW5\",\"hasWarning\":\"SelectInput-hasWarning-zCkL1 Input-hasWarning-K_6E_\",\"isDisabled\":\"SelectInput-isDisabled-OTdBg\"};","// extracted by mini-css-extract-plugin\nexport default {\"pager\":\"TablePager-pager-sW7hO\",\"loadingContainer\":\"TablePager-loadingContainer-mEsEn\",\"controlsContainer\":\"TablePager-controlsContainer-zSMU8\",\"recordsContainer\":\"TablePager-recordsContainer-yz1LG\",\"loading\":\"TablePager-loading-T4oAA LoadingIndicator-loading-DWfav\",\"controls\":\"TablePager-controls-hlpsq\",\"pageNumber\":\"TablePager-pageNumber-tj2Ps\",\"pageLink\":\"TablePager-pageLink-AAJga\",\"records\":\"TablePager-records-JiV_8\",\"disabledPageButton\":\"TablePager-disabledPageButton-f9ct7\",\"pageSelect\":\"TablePager-pageSelect-E2Iie SelectInput-select-M6gsU Input-input-KWeec\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport SelectInput from 'Components/Form/SelectInput';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './TablePager.css';\r\n\r\nclass TablePager extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isShowingPageSelect: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onOpenPageSelectClick = () => {\r\n this.setState({ isShowingPageSelect: true });\r\n };\r\n\r\n onPageSelect = ({ value: page }) => {\r\n this.setState({ isShowingPageSelect: false });\r\n this.props.onPageSelect(parseInt(page));\r\n };\r\n\r\n onPageSelectBlur = () => {\r\n this.setState({ isShowingPageSelect: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n page,\r\n totalPages,\r\n totalRecords,\r\n isFetching,\r\n onFirstPagePress,\r\n onPreviousPagePress,\r\n onNextPagePress,\r\n onLastPagePress\r\n } = this.props;\r\n\r\n const isShowingPageSelect = this.state.isShowingPageSelect;\r\n const pages = Array.from(new Array(totalPages), (x, i) => {\r\n const pageNumber = i + 1;\r\n\r\n return {\r\n key: pageNumber,\r\n value: pageNumber\r\n };\r\n });\r\n\r\n if (!page) {\r\n return null;\r\n }\r\n\r\n const isFirstPage = page === 1;\r\n const isLastPage = page === totalPages;\r\n\r\n return (\r\n
\r\n
\r\n {\r\n isFetching &&\r\n \r\n }\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n {\r\n !isShowingPageSelect &&\r\n \r\n {page} / {totalPages}\r\n \r\n }\r\n\r\n {\r\n isShowingPageSelect &&\r\n \r\n }\r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n {translate('TotalRecords', { totalRecords })}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nTablePager.propTypes = {\r\n page: PropTypes.number,\r\n totalPages: PropTypes.number,\r\n totalRecords: PropTypes.number,\r\n isFetching: PropTypes.bool,\r\n onFirstPagePress: PropTypes.func.isRequired,\r\n onPreviousPagePress: PropTypes.func.isRequired,\r\n onNextPagePress: PropTypes.func.isRequired,\r\n onLastPagePress: PropTypes.func.isRequired,\r\n onPageSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default TablePager;\r\n","import { useCallback, useMemo } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\n\r\ninterface PagingOptions {\r\n page: number;\r\n totalPages: number;\r\n gotoPage: ({ page }: { page: number }) => void;\r\n}\r\n\r\nfunction usePaging(options: PagingOptions) {\r\n const { page, totalPages, gotoPage } = options;\r\n const dispatch = useDispatch();\r\n\r\n const handleFirstPagePress = useCallback(() => {\r\n dispatch(gotoPage({ page: 1 }));\r\n }, [dispatch, gotoPage]);\r\n\r\n const handlePreviousPagePress = useCallback(() => {\r\n dispatch(gotoPage({ page: Math.max(page - 1, 1) }));\r\n }, [page, dispatch, gotoPage]);\r\n\r\n const handleNextPagePress = useCallback(() => {\r\n dispatch(gotoPage({ page: Math.min(page + 1, totalPages) }));\r\n }, [page, totalPages, dispatch, gotoPage]);\r\n\r\n const handleLastPagePress = useCallback(() => {\r\n dispatch(gotoPage({ page: totalPages }));\r\n }, [totalPages, dispatch, gotoPage]);\r\n\r\n const handlePageSelect = useCallback(\r\n (page: number) => {\r\n dispatch(gotoPage({ page }));\r\n },\r\n [dispatch, gotoPage]\r\n );\r\n\r\n return useMemo(() => {\r\n return {\r\n handleFirstPagePress,\r\n handlePreviousPagePress,\r\n handleNextPagePress,\r\n handleLastPagePress,\r\n handlePageSelect,\r\n };\r\n }, [\r\n handleFirstPagePress,\r\n handlePreviousPagePress,\r\n handleNextPagePress,\r\n handleLastPagePress,\r\n handlePageSelect,\r\n ]);\r\n}\r\n\r\nexport default usePaging;\r\n","import { useHistory } from 'react-router-dom';\r\n\r\nfunction useCurrentPage() {\r\n const history = useHistory();\r\n\r\n return history.action === 'POP';\r\n}\r\n\r\nexport default useCurrentPage;\r\n","import _ from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport { filterTypePredicates, filterTypes, sortDirections } from 'Helpers/Props';\r\nimport findSelectedFilters from 'Utilities/Filter/findSelectedFilters';\r\n\r\nfunction getSortClause(sortKey, sortDirection, sortPredicates) {\r\n if (sortPredicates && sortPredicates.hasOwnProperty(sortKey)) {\r\n return function(item) {\r\n return sortPredicates[sortKey](item, sortDirection);\r\n };\r\n }\r\n\r\n return function(item) {\r\n return item[sortKey];\r\n };\r\n}\r\n\r\nfunction filter(items, state) {\r\n const {\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n filterPredicates\r\n } = state;\r\n\r\n if (!selectedFilterKey) {\r\n return items;\r\n }\r\n\r\n const selectedFilters = findSelectedFilters(selectedFilterKey, filters, customFilters);\r\n\r\n return _.filter(items, (item) => {\r\n let i = 0;\r\n let accepted = true;\r\n\r\n while (accepted && i < selectedFilters.length) {\r\n const {\r\n key,\r\n value,\r\n type = filterTypes.EQUAL\r\n } = selectedFilters[i];\r\n\r\n if (filterPredicates && filterPredicates.hasOwnProperty(key)) {\r\n const predicate = filterPredicates[key];\r\n\r\n if (Array.isArray(value)) {\r\n if (\r\n type === filterTypes.NOT_CONTAINS ||\r\n type === filterTypes.NOT_EQUAL\r\n ) {\r\n accepted = value.every((v) => predicate(item, v, type));\r\n } else {\r\n accepted = value.some((v) => predicate(item, v, type));\r\n }\r\n } else {\r\n accepted = predicate(item, value, type);\r\n }\r\n } else if (item.hasOwnProperty(key)) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n if (Array.isArray(value)) {\r\n if (\r\n type === filterTypes.NOT_CONTAINS ||\r\n type === filterTypes.NOT_EQUAL\r\n ) {\r\n accepted = value.every((v) => predicate(item[key], v));\r\n } else {\r\n accepted = value.some((v) => predicate(item[key], v));\r\n }\r\n } else {\r\n accepted = predicate(item[key], value);\r\n }\r\n } else {\r\n // Default to false if the filter can't be tested\r\n accepted = false;\r\n }\r\n\r\n i++;\r\n }\r\n\r\n return accepted;\r\n });\r\n}\r\n\r\nfunction sort(items, state) {\r\n const {\r\n sortKey,\r\n sortDirection,\r\n sortPredicates,\r\n secondarySortKey,\r\n secondarySortDirection\r\n } = state;\r\n\r\n const clauses = [];\r\n const orders = [];\r\n\r\n clauses.push(getSortClause(sortKey, sortDirection, sortPredicates));\r\n orders.push(sortDirection === sortDirections.ASCENDING ? 'asc' : 'desc');\r\n\r\n if (secondarySortKey &&\r\n secondarySortDirection &&\r\n (sortKey !== secondarySortKey ||\r\n sortDirection !== secondarySortDirection)) {\r\n clauses.push(getSortClause(secondarySortKey, secondarySortDirection, sortPredicates));\r\n orders.push(secondarySortDirection === sortDirections.ASCENDING ? 'asc' : 'desc');\r\n }\r\n\r\n return _.orderBy(items, clauses, orders);\r\n}\r\n\r\nexport function createCustomFiltersSelector(type, alternateType) {\r\n return createSelector(\r\n (state) => state.customFilters.items,\r\n (customFilters) => {\r\n return customFilters.filter((customFilter) => {\r\n return customFilter.type === type || customFilter.type === alternateType;\r\n });\r\n }\r\n );\r\n}\r\n\r\nfunction createClientSideCollectionSelector(section, uiSection) {\r\n return createSelector(\r\n (state) => _.get(state, section),\r\n (state) => _.get(state, uiSection),\r\n createCustomFiltersSelector(section, uiSection),\r\n (sectionState, uiSectionState = {}, customFilters) => {\r\n const state = Object.assign({}, sectionState, uiSectionState, { customFilters });\r\n\r\n const filtered = filter(state.items, state);\r\n const sorted = sort(filtered, state);\r\n\r\n return {\r\n ...sectionState,\r\n ...uiSectionState,\r\n customFilters,\r\n items: sorted,\r\n totalItems: state.items.length\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createClientSideCollectionSelector;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createCommandsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.commands,\r\n (commands) => {\r\n return commands.items;\r\n }\r\n );\r\n}\r\n\r\nexport default createCommandsSelector;\r\n","import { createSelector } from 'reselect';\r\nimport { findCommand } from 'Utilities/Command';\r\nimport createCommandsSelector from './createCommandsSelector';\r\n\r\nfunction createCommandSelector(name: string, contraints = {}) {\r\n return createSelector(createCommandsSelector(), (commands) => {\r\n return findCommand(commands, { name, ...contraints });\r\n });\r\n}\r\n\r\nexport default createCommandSelector;\r\n","import { createSelector } from 'reselect';\r\nimport { isCommandExecuting } from 'Utilities/Command';\r\nimport createCommandSelector from './createCommandSelector';\r\n\r\nfunction createCommandExecutingSelector(name: string, contraints = {}) {\r\n return createSelector(createCommandSelector(name, contraints), (command) => {\r\n return isCommandExecuting(command);\r\n });\r\n}\r\n\r\nexport default createCommandExecutingSelector;\r\n","import { reduce } from 'lodash';\r\nimport { SelectedState } from 'Helpers/Hooks/useSelectState';\r\n\r\nfunction getSelectedIds(selectedState: SelectedState): number[] {\r\n return reduce(\r\n selectedState,\r\n (result: number[], value, id) => {\r\n if (value) {\r\n result.push(parseInt(id));\r\n }\r\n\r\n return result;\r\n },\r\n []\r\n );\r\n}\r\n\r\nexport default getSelectedIds;\r\n","\r\nfunction convertToBytes(input, power, binaryPrefix) {\r\n const size = Number(input);\r\n\r\n if (isNaN(size)) {\r\n return '';\r\n }\r\n\r\n const prefix = binaryPrefix ? 1024 : 1000;\r\n const multiplier = Math.pow(prefix, power);\r\n const result = size * multiplier;\r\n\r\n return Math.round(result);\r\n}\r\n\r\nexport default convertToBytes;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport TagInputTag from 'Components/Form/TagInputTag';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './FilterBuilderRowValueTag.css';\r\n\r\nfunction FilterBuilderRowValueTag(props) {\r\n return (\r\n \r\n \r\n\r\n {\r\n props.isLastTag ?\r\n null :\r\n
\r\n {translate('Or')}\r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nFilterBuilderRowValueTag.propTypes = {\r\n isLastTag: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default FilterBuilderRowValueTag;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"FilterBuilderRowValueTag-tag-hWm2U\",\"isLastTag\":\"FilterBuilderRowValueTag-isLastTag-fHFF3\",\"or\":\"FilterBuilderRowValueTag-or-SwTRv\",\"label\":\"FilterBuilderRowValueTag-label-U_MN0 Label-label-DYldh\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport TagInput from 'Components/Form/TagInput';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, kinds } from 'Helpers/Props';\r\nimport tagShape from 'Helpers/Props/Shapes/tagShape';\r\nimport convertToBytes from 'Utilities/Number/convertToBytes';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport FilterBuilderRowValueTag from './FilterBuilderRowValueTag';\r\n\r\nexport const NAME = 'value';\r\n\r\nfunction getTagDisplayValue(value, selectedFilterBuilderProp) {\r\n if (selectedFilterBuilderProp.valueType === filterBuilderValueTypes.BYTES) {\r\n return formatBytes(value);\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction getValue(input, selectedFilterBuilderProp) {\r\n if (selectedFilterBuilderProp.valueType === filterBuilderValueTypes.BYTES) {\r\n const match = input.match(/^(\\d+)([kmgt](i?b)?)$/i);\r\n\r\n if (match && match.length > 1) {\r\n const [, value, unit] = input.match(/^(\\d+)([kmgt](i?b)?)$/i);\r\n\r\n switch (unit.toLowerCase()) {\r\n case 'k':\r\n return convertToBytes(value, 1, true);\r\n case 'm':\r\n return convertToBytes(value, 2, true);\r\n case 'g':\r\n return convertToBytes(value, 3, true);\r\n case 't':\r\n return convertToBytes(value, 4, true);\r\n case 'kb':\r\n return convertToBytes(value, 1, true);\r\n case 'mb':\r\n return convertToBytes(value, 2, true);\r\n case 'gb':\r\n return convertToBytes(value, 3, true);\r\n case 'tb':\r\n return convertToBytes(value, 4, true);\r\n case 'kib':\r\n return convertToBytes(value, 1, true);\r\n case 'mib':\r\n return convertToBytes(value, 2, true);\r\n case 'gib':\r\n return convertToBytes(value, 3, true);\r\n case 'tib':\r\n return convertToBytes(value, 4, true);\r\n default:\r\n return parseInt(value);\r\n }\r\n }\r\n }\r\n\r\n if (selectedFilterBuilderProp.type === filterBuilderTypes.NUMBER) {\r\n const { numberFractionDigits = 0 } = selectedFilterBuilderProp;\r\n\r\n return Number(Number(input).toFixed(numberFractionDigits));\r\n }\r\n\r\n return input;\r\n}\r\n\r\nclass FilterBuilderRowValue extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onTagAdd = (tag) => {\r\n const {\r\n filterValue,\r\n selectedFilterBuilderProp,\r\n onChange\r\n } = this.props;\r\n\r\n let value = tag.id;\r\n\r\n if (value == null) {\r\n value = getValue(tag.name, selectedFilterBuilderProp);\r\n }\r\n\r\n onChange({\r\n name: NAME,\r\n value: [...filterValue, value]\r\n });\r\n };\r\n\r\n onTagDelete = ({ index }) => {\r\n const {\r\n filterValue,\r\n onChange\r\n } = this.props;\r\n\r\n const value = filterValue.filter((v, i) => i !== index);\r\n\r\n onChange({\r\n name: NAME,\r\n value\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n filterValue,\r\n selectedFilterBuilderProp,\r\n tagList\r\n } = this.props;\r\n\r\n const hasItems = !!tagList.length;\r\n\r\n const tags = filterValue.map((id) => {\r\n if (hasItems) {\r\n const tag = tagList.find((t) => t.id === id);\r\n\r\n return {\r\n id,\r\n name: tag && tag.name\r\n };\r\n }\r\n\r\n return {\r\n id,\r\n name: getTagDisplayValue(id, selectedFilterBuilderProp)\r\n };\r\n });\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nFilterBuilderRowValue.propTypes = {\r\n filterValue: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.number])).isRequired,\r\n selectedFilterBuilderProp: PropTypes.object.isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.shape(tagShape)).isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nFilterBuilderRowValue.defaultProps = {\r\n filterValue: []\r\n};\r\n\r\nexport default FilterBuilderRowValue;\r\n","import React from 'react';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nconst protocols = [\r\n { id: true, name: 'true' },\r\n { id: false, name: 'false' }\r\n];\r\n\r\nfunction BoolFilterBuilderRowValue(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default BoolFilterBuilderRowValue;\r\n","export default function isString(possibleString) {\r\n return typeof possibleString === 'string' || possibleString instanceof String;\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"DateFilterBuilderRowValue-container-O7izS\",\"numberInput\":\"DateFilterBuilderRowValue-numberInput-UmOYr TextInput-input-svfXu Input-input-KWeec\",\"selectInput\":\"DateFilterBuilderRowValue-selectInput-LWocC SelectInput-select-M6gsU Input-input-KWeec\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport NumberInput from 'Components/Form/NumberInput';\r\nimport SelectInput from 'Components/Form/SelectInput';\r\nimport TextInput from 'Components/Form/TextInput';\r\nimport { IN_LAST, IN_NEXT, NOT_IN_LAST, NOT_IN_NEXT } from 'Helpers/Props/filterTypes';\r\nimport isString from 'Utilities/String/isString';\r\nimport translate from 'Utilities/String/translate';\r\nimport { NAME } from './FilterBuilderRowValue';\r\nimport styles from './DateFilterBuilderRowValue.css';\r\n\r\nconst timeOptions = [\r\n {\r\n key: 'seconds',\r\n get value() {\r\n return translate('Seconds');\r\n }\r\n },\r\n {\r\n key: 'minutes',\r\n get value() {\r\n return translate('Minutes');\r\n }\r\n },\r\n {\r\n key: 'hours',\r\n get value() {\r\n return translate('Hours');\r\n }\r\n },\r\n {\r\n key: 'days',\r\n get value() {\r\n return translate('Days');\r\n }\r\n },\r\n {\r\n key: 'weeks',\r\n get value() {\r\n return translate('Weeks');\r\n }\r\n },\r\n {\r\n key: 'months',\r\n get value() {\r\n return translate('Months');\r\n }\r\n }\r\n];\r\n\r\nfunction isInFilter(filterType) {\r\n return (\r\n filterType === IN_LAST ||\r\n filterType === NOT_IN_LAST ||\r\n filterType === IN_NEXT ||\r\n filterType === NOT_IN_NEXT\r\n );\r\n}\r\n\r\nclass DateFilterBuilderRowValue extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n filterType,\r\n filterValue,\r\n onChange\r\n } = this.props;\r\n\r\n if (isInFilter(filterType) && isString(filterValue)) {\r\n onChange({\r\n name: NAME,\r\n value: {\r\n time: timeOptions[0].key,\r\n value: null\r\n }\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n filterType,\r\n filterValue,\r\n onChange\r\n } = this.props;\r\n\r\n if (prevProps.filterType === filterType) {\r\n return;\r\n }\r\n\r\n if (isInFilter(filterType) && isString(filterValue)) {\r\n onChange({\r\n name: NAME,\r\n value: {\r\n time: timeOptions[0].key,\r\n value: null\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (!isInFilter(filterType) && !isString(filterValue)) {\r\n onChange({\r\n name: NAME,\r\n value: ''\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onValueChange = ({ value }) => {\r\n const {\r\n filterValue,\r\n onChange\r\n } = this.props;\r\n\r\n let newValue = value;\r\n\r\n if (!isString(value)) {\r\n newValue = {\r\n time: filterValue.time,\r\n value\r\n };\r\n }\r\n\r\n onChange({\r\n name: NAME,\r\n value: newValue\r\n });\r\n };\r\n\r\n onTimeChange = ({ value }) => {\r\n const {\r\n filterValue,\r\n onChange\r\n } = this.props;\r\n\r\n onChange({\r\n name: NAME,\r\n value: {\r\n time: value,\r\n value: filterValue.value\r\n }\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n filterType,\r\n filterValue\r\n } = this.props;\r\n\r\n if (\r\n (isInFilter(filterType) && isString(filterValue)) ||\r\n (!isInFilter(filterType) && !isString(filterValue))\r\n ) {\r\n return null;\r\n }\r\n\r\n if (isInFilter(filterType)) {\r\n return (\r\n
\r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDateFilterBuilderRowValue.propTypes = {\r\n filterType: PropTypes.string,\r\n filterValue: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DateFilterBuilderRowValue;\r\n","import _ from 'lodash';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { filterBuilderTypes } from 'Helpers/Props';\r\nimport * as filterTypes from 'Helpers/Props/filterTypes';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nfunction createTagListSelector() {\r\n return createSelector(\r\n (state, { filterType }) => filterType,\r\n (state, { sectionItems }) => sectionItems,\r\n (state, { selectedFilterBuilderProp }) => selectedFilterBuilderProp,\r\n (filterType, sectionItems, selectedFilterBuilderProp) => {\r\n if (\r\n (selectedFilterBuilderProp.type === filterBuilderTypes.NUMBER ||\r\n selectedFilterBuilderProp.type === filterBuilderTypes.STRING) &&\r\n filterType !== filterTypes.EQUAL &&\r\n filterType !== filterTypes.NOT_EQUAL ||\r\n !selectedFilterBuilderProp.optionsSelector\r\n ) {\r\n return [];\r\n }\r\n\r\n let items = [];\r\n\r\n if (selectedFilterBuilderProp.optionsSelector) {\r\n items = selectedFilterBuilderProp.optionsSelector(sectionItems);\r\n } else {\r\n items = sectionItems.reduce((acc, item) => {\r\n const name = item[selectedFilterBuilderProp.name];\r\n\r\n if (name) {\r\n acc.push({\r\n id: name,\r\n name\r\n });\r\n }\r\n\r\n return acc;\r\n }, []).sort(sortByProp('name'));\r\n }\r\n\r\n return _.uniqBy(items, 'id');\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createTagListSelector(),\r\n (tagList) => {\r\n return {\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(FilterBuilderRowValue);\r\n","import React from 'react';\r\nimport translate from 'Utilities/String/translate';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\nimport FilterBuilderRowValueProps from './FilterBuilderRowValueProps';\r\n\r\nconst EVENT_TYPE_OPTIONS = [\r\n {\r\n id: 1,\r\n get name() {\r\n return translate('Grabbed');\r\n },\r\n },\r\n {\r\n id: 3,\r\n get name() {\r\n return translate('Imported');\r\n },\r\n },\r\n {\r\n id: 4,\r\n get name() {\r\n return translate('Failed');\r\n },\r\n },\r\n {\r\n id: 6,\r\n get name() {\r\n return translate('Deleted');\r\n },\r\n },\r\n {\r\n id: 8,\r\n get name() {\r\n return translate('Renamed');\r\n },\r\n },\r\n {\r\n id: 9,\r\n get name() {\r\n return translate('Ignored');\r\n },\r\n },\r\n];\r\n\r\nfunction HistoryEventTypeFilterBuilderRowValue(\r\n props: FilterBuilderRowValueProps\r\n) {\r\n return ;\r\n}\r\n\r\nexport default HistoryEventTypeFilterBuilderRowValue;\r\n","import { createSelector } from 'reselect';\r\n\r\nfunction createImportListSelector() {\r\n return createSelector(\r\n (state) => state.settings.importLists.items,\r\n (lists) => {\r\n return lists;\r\n }\r\n );\r\n}\r\n\r\nexport default createImportListSelector;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createImportListSelector from 'Store/Selectors/createImportListSelector';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createImportListSelector(),\r\n (importLists) => {\r\n return {\r\n tagList: importLists.map((importList) => {\r\n const {\r\n id,\r\n name\r\n } = importList;\r\n\r\n return {\r\n id,\r\n name\r\n };\r\n })\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(FilterBuilderRowValue);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport tagShape from 'Helpers/Props/Shapes/tagShape';\r\nimport { fetchIndexers } from 'Store/Actions/settingsActions';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.indexers,\r\n (qualityProfiles) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items\r\n } = qualityProfiles;\r\n\r\n const tagList = items.map((item) => {\r\n return {\r\n id: item.id,\r\n name: item.name\r\n };\r\n });\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchIndexers: fetchIndexers\r\n};\r\n\r\nclass IndexerFilterBuilderRowValueConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount = () => {\r\n if (!this.props.isPopulated) {\r\n this.props.dispatchFetchIndexers();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nIndexerFilterBuilderRowValueConnector.propTypes = {\r\n tagList: PropTypes.arrayOf(PropTypes.shape(tagShape)).isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n dispatchFetchIndexers: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(IndexerFilterBuilderRowValueConnector);\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createLanguagesSelector() {\r\n return createSelector(\r\n (state: AppState) => state.settings.languages,\r\n (languages) => {\r\n const { isFetching, isPopulated, error, items } = languages;\r\n\r\n const filterItems = ['Any'];\r\n const filteredLanguages = items.filter(\r\n (lang) => !filterItems.includes(lang.name)\r\n );\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items: filteredLanguages,\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createLanguagesSelector;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport createLanguagesSelector from 'Store/Selectors/createLanguagesSelector';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\nimport FilterBuilderRowValueProps from './FilterBuilderRowValueProps';\r\n\r\nfunction LanguageFilterBuilderRowValue(props: FilterBuilderRowValueProps) {\r\n const { items } = useSelector(createLanguagesSelector());\r\n\r\n return ;\r\n}\r\n\r\nexport default LanguageFilterBuilderRowValue;\r\n","import React from 'react';\r\nimport translate from 'Utilities/String/translate';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nconst protocols = [\r\n {\r\n id: 'announced',\r\n get name() {\r\n return translate('Announced');\r\n }\r\n },\r\n {\r\n id: 'inCinemas',\r\n get name() {\r\n return translate('InCinemas');\r\n }\r\n },\r\n {\r\n id: 'released',\r\n get name() {\r\n return translate('Released');\r\n }\r\n }\r\n];\r\n\r\nfunction MinimumAvailabilityFilterBuilderRowValue(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MinimumAvailabilityFilterBuilderRowValue;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport Movie from 'Movie/Movie';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\nimport FilterBuilderRowValueProps from './FilterBuilderRowValueProps';\r\n\r\nfunction MovieFilterBuilderRowValue(props: FilterBuilderRowValueProps) {\r\n const allMovies: Movie[] = useSelector(createAllMoviesSelector());\r\n\r\n const tagList = allMovies\r\n .map((movie) => ({ id: movie.id, name: movie.title }))\r\n .sort(sortByProp('name'));\r\n\r\n return ;\r\n}\r\n\r\nexport default MovieFilterBuilderRowValue;\r\n","import React from 'react';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nconst protocols = [\r\n { id: 'torrent', name: 'Torrent' },\r\n { id: 'usenet', name: 'Usenet' }\r\n];\r\n\r\nfunction ProtocolFilterBuilderRowValue(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default ProtocolFilterBuilderRowValue;\r\n","export default function getQualities(qualities) {\r\n if (!qualities) {\r\n return [];\r\n }\r\n\r\n return qualities.reduce((acc, item) => {\r\n if (item.quality) {\r\n acc.push(item.quality);\r\n } else {\r\n const groupQualities = item.items.map((i) => i.quality);\r\n acc.push(...groupQualities);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport tagShape from 'Helpers/Props/Shapes/tagShape';\r\nimport { fetchQualityProfileSchema } from 'Store/Actions/settingsActions';\r\nimport getQualities from 'Utilities/Quality/getQualities';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.qualityProfiles,\r\n (qualityProfiles) => {\r\n const {\r\n isSchemaFetching: isFetching,\r\n isSchemaPopulated: isPopulated,\r\n schemaError: error,\r\n schema\r\n } = qualityProfiles;\r\n\r\n const tagList = getQualities(schema.items);\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchQualityProfileSchema: fetchQualityProfileSchema\r\n};\r\n\r\nclass QualityFilterBuilderRowValueConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount = () => {\r\n if (!this.props.isPopulated) {\r\n this.props.dispatchFetchQualityProfileSchema();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nQualityFilterBuilderRowValueConnector.propTypes = {\r\n tagList: PropTypes.arrayOf(PropTypes.shape(tagShape)).isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n dispatchFetchQualityProfileSchema: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(QualityFilterBuilderRowValueConnector);\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FilterBuilderRowValueProps from 'Components/Filter/Builder/FilterBuilderRowValueProps';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nfunction createQualityProfilesSelector() {\r\n return createSelector(\r\n (state: AppState) => state.settings.qualityProfiles.items,\r\n (qualityProfiles) => {\r\n return qualityProfiles;\r\n }\r\n );\r\n}\r\n\r\nfunction QualityProfileFilterBuilderRowValue(\r\n props: FilterBuilderRowValueProps\r\n) {\r\n const qualityProfiles = useSelector(createQualityProfilesSelector());\r\n\r\n const tagList = qualityProfiles\r\n .map(({ id, name }) => ({ id, name }))\r\n .sort(sortByProp('name'));\r\n\r\n return ;\r\n}\r\n\r\nexport default QualityProfileFilterBuilderRowValue;\r\n","import React from 'react';\r\nimport translate from 'Utilities/String/translate';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\nimport FilterBuilderRowValueProps from './FilterBuilderRowValueProps';\r\n\r\nconst statusTagList = [\r\n {\r\n id: 'queued',\r\n get name() {\r\n return translate('Queued');\r\n },\r\n },\r\n {\r\n id: 'paused',\r\n get name() {\r\n return translate('Paused');\r\n },\r\n },\r\n {\r\n id: 'downloading',\r\n get name() {\r\n return translate('Downloading');\r\n },\r\n },\r\n {\r\n id: 'completed',\r\n get name() {\r\n return translate('Completed');\r\n },\r\n },\r\n {\r\n id: 'failed',\r\n get name() {\r\n return translate('Failed');\r\n },\r\n },\r\n {\r\n id: 'warning',\r\n get name() {\r\n return translate('Warning');\r\n },\r\n },\r\n {\r\n id: 'delay',\r\n get name() {\r\n return translate('Delay');\r\n },\r\n },\r\n {\r\n id: 'downloadClientUnavailable',\r\n get name() {\r\n return translate('DownloadClientUnavailable');\r\n },\r\n },\r\n {\r\n id: 'fallback',\r\n get name() {\r\n return translate('Fallback');\r\n },\r\n },\r\n];\r\n\r\nfunction QueueStatusFilterBuilderRowValue(props: FilterBuilderRowValueProps) {\r\n return ;\r\n}\r\n\r\nexport default QueueStatusFilterBuilderRowValue;\r\n","import React from 'react';\r\nimport translate from 'Utilities/String/translate';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nconst statusTagList = [\r\n { id: 'tba',\r\n get name() {\r\n return translate('Tba');\r\n } },\r\n {\r\n id: 'announced',\r\n get name() {\r\n return translate('Announced');\r\n }\r\n },\r\n {\r\n id: 'inCinemas',\r\n get name() {\r\n return translate('InCinemas');\r\n }\r\n },\r\n {\r\n id: 'released',\r\n get name() {\r\n return translate('Released');\r\n }\r\n },\r\n {\r\n id: 'deleted',\r\n get name() {\r\n return translate('Deleted');\r\n }\r\n }\r\n];\r\n\r\nfunction ReleaseStatusFilterBuilderRowValue(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default ReleaseStatusFilterBuilderRowValue;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createTagsSelector(),\r\n (tagList) => {\r\n return {\r\n tagList: tagList.map((tag) => {\r\n const {\r\n id,\r\n label: name\r\n } = tag;\r\n\r\n return {\r\n id,\r\n name\r\n };\r\n })\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(FilterBuilderRowValue);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"filterRow\":\"FilterBuilderRow-filterRow-q1nvx\",\"inputContainer\":\"FilterBuilderRow-inputContainer-mJ6US\",\"valueInputContainer\":\"FilterBuilderRow-valueInputContainer-wN_TZ\",\"actionsContainer\":\"FilterBuilderRow-actionsContainer-cYvae\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport SelectInput from 'Components/Form/SelectInput';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, icons } from 'Helpers/Props';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport BoolFilterBuilderRowValue from './BoolFilterBuilderRowValue';\r\nimport DateFilterBuilderRowValue from './DateFilterBuilderRowValue';\r\nimport FilterBuilderRowValueConnector from './FilterBuilderRowValueConnector';\r\nimport HistoryEventTypeFilterBuilderRowValue from './HistoryEventTypeFilterBuilderRowValue';\r\nimport ImportListFilterBuilderRowValueConnector from './ImportListFilterBuilderRowValueConnector';\r\nimport IndexerFilterBuilderRowValueConnector from './IndexerFilterBuilderRowValueConnector';\r\nimport LanguageFilterBuilderRowValue from './LanguageFilterBuilderRowValue';\r\nimport MinimumAvailabilityFilterBuilderRowValue from './MinimumAvailabilityFilterBuilderRowValue';\r\nimport MovieFilterBuilderRowValue from './MovieFilterBuilderRowValue';\r\nimport ProtocolFilterBuilderRowValue from './ProtocolFilterBuilderRowValue';\r\nimport QualityFilterBuilderRowValueConnector from './QualityFilterBuilderRowValueConnector';\r\nimport QualityProfileFilterBuilderRowValue from './QualityProfileFilterBuilderRowValue';\r\nimport QueueStatusFilterBuilderRowValue from './QueueStatusFilterBuilderRowValue';\r\nimport ReleaseStatusFilterBuilderRowValue from './ReleaseStatusFilterBuilderRowValue';\r\nimport TagFilterBuilderRowValueConnector from './TagFilterBuilderRowValueConnector';\r\nimport styles from './FilterBuilderRow.css';\r\n\r\nfunction getselectedFilterBuilderProp(filterBuilderProps, name) {\r\n return filterBuilderProps.find((a) => {\r\n return a.name === name;\r\n });\r\n}\r\n\r\nfunction getFilterTypeOptions(filterBuilderProps, filterKey) {\r\n const selectedFilterBuilderProp = getselectedFilterBuilderProp(filterBuilderProps, filterKey);\r\n\r\n if (!selectedFilterBuilderProp) {\r\n return [];\r\n }\r\n\r\n return filterBuilderTypes.possibleFilterTypes[selectedFilterBuilderProp.type];\r\n}\r\n\r\nfunction getDefaultFilterType(selectedFilterBuilderProp) {\r\n return filterBuilderTypes.possibleFilterTypes[selectedFilterBuilderProp.type][0].key;\r\n}\r\n\r\nfunction getDefaultFilterValue(selectedFilterBuilderProp) {\r\n if (selectedFilterBuilderProp.type === filterBuilderTypes.DATE) {\r\n return '';\r\n }\r\n\r\n return [];\r\n}\r\n\r\nfunction getRowValueConnector(selectedFilterBuilderProp) {\r\n if (!selectedFilterBuilderProp) {\r\n return FilterBuilderRowValueConnector;\r\n }\r\n\r\n const valueType = selectedFilterBuilderProp.valueType;\r\n\r\n switch (valueType) {\r\n case filterBuilderValueTypes.BOOL:\r\n return BoolFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.DATE:\r\n return DateFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.HISTORY_EVENT_TYPE:\r\n return HistoryEventTypeFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.INDEXER:\r\n return IndexerFilterBuilderRowValueConnector;\r\n\r\n case filterBuilderValueTypes.LANGUAGE:\r\n return LanguageFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.PROTOCOL:\r\n return ProtocolFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.QUALITY:\r\n return QualityFilterBuilderRowValueConnector;\r\n\r\n case filterBuilderValueTypes.QUALITY_PROFILE:\r\n return QualityProfileFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.QUEUE_STATUS:\r\n return QueueStatusFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.MOVIE:\r\n return MovieFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.RELEASE_STATUS:\r\n return ReleaseStatusFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.MINIMUM_AVAILABILITY:\r\n return MinimumAvailabilityFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.TAG:\r\n return TagFilterBuilderRowValueConnector;\r\n\r\n case filterBuilderValueTypes.IMPORTLIST:\r\n return ImportListFilterBuilderRowValueConnector;\r\n\r\n default:\r\n return FilterBuilderRowValueConnector;\r\n }\r\n}\r\n\r\nclass FilterBuilderRow extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n const {\r\n filterKey,\r\n filterBuilderProps\r\n } = props;\r\n\r\n if (filterKey) {\r\n const selectedFilterBuilderProp = filterBuilderProps.find((a) => a.name === filterKey);\r\n this.selectedFilterBuilderProp = selectedFilterBuilderProp;\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n const {\r\n index,\r\n filterKey,\r\n filterBuilderProps,\r\n onFilterChange\r\n } = this.props;\r\n\r\n if (filterKey) {\r\n const selectedFilterBuilderProp = filterBuilderProps.find((a) => a.name === filterKey);\r\n this.selectedFilterBuilderProp = selectedFilterBuilderProp;\r\n\r\n return;\r\n }\r\n\r\n const selectedFilterBuilderProp = filterBuilderProps[0];\r\n\r\n const filter = {\r\n key: selectedFilterBuilderProp.name,\r\n value: getDefaultFilterValue(selectedFilterBuilderProp),\r\n type: getDefaultFilterType(selectedFilterBuilderProp)\r\n };\r\n\r\n this.selectedFilterBuilderProp = selectedFilterBuilderProp;\r\n onFilterChange(index, filter);\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onFilterKeyChange = ({ value: key }) => {\r\n const {\r\n index,\r\n filterBuilderProps,\r\n onFilterChange\r\n } = this.props;\r\n\r\n const selectedFilterBuilderProp = getselectedFilterBuilderProp(filterBuilderProps, key);\r\n const type = getDefaultFilterType(selectedFilterBuilderProp);\r\n\r\n const filter = {\r\n key,\r\n value: getDefaultFilterValue(selectedFilterBuilderProp),\r\n type\r\n };\r\n\r\n this.selectedFilterBuilderProp = selectedFilterBuilderProp;\r\n onFilterChange(index, filter);\r\n };\r\n\r\n onFilterChange = ({ name, value }) => {\r\n const {\r\n index,\r\n filterKey,\r\n filterValue,\r\n filterType,\r\n onFilterChange\r\n } = this.props;\r\n\r\n const filter = {\r\n key: filterKey,\r\n value: filterValue,\r\n type: filterType\r\n };\r\n\r\n filter[name] = value;\r\n\r\n onFilterChange(index, filter);\r\n };\r\n\r\n onAddPress = () => {\r\n const {\r\n index,\r\n onAddPress\r\n } = this.props;\r\n\r\n onAddPress(index);\r\n };\r\n\r\n onRemovePress = () => {\r\n const {\r\n index,\r\n onRemovePress\r\n } = this.props;\r\n\r\n onRemovePress(index);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n filterKey,\r\n filterType,\r\n filterValue,\r\n filterCount,\r\n filterBuilderProps,\r\n sectionItems\r\n } = this.props;\r\n\r\n const selectedFilterBuilderProp = this.selectedFilterBuilderProp;\r\n\r\n const keyOptions = filterBuilderProps.map((availablePropFilter) => {\r\n const { name, label } = availablePropFilter;\r\n\r\n return {\r\n key: name,\r\n value: typeof label === 'function' ? label() : label\r\n };\r\n }).sort(sortByProp('value'));\r\n\r\n const ValueComponent = getRowValueConnector(selectedFilterBuilderProp);\r\n\r\n return (\r\n
\r\n
\r\n {\r\n filterKey &&\r\n \r\n }\r\n
\r\n\r\n
\r\n {\r\n filterType &&\r\n \r\n }\r\n
\r\n\r\n
\r\n {\r\n filterValue != null && !!selectedFilterBuilderProp &&\r\n \r\n }\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nFilterBuilderRow.propTypes = {\r\n index: PropTypes.number.isRequired,\r\n filterKey: PropTypes.string,\r\n filterValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.array, PropTypes.object]),\r\n filterType: PropTypes.string,\r\n filterCount: PropTypes.number.isRequired,\r\n filterBuilderProps: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n sectionItems: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onFilterChange: PropTypes.func.isRequired,\r\n onAddPress: PropTypes.func.isRequired,\r\n onRemovePress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default FilterBuilderRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"labelContainer\":\"FilterBuilderModalContent-labelContainer-_6W6j\",\"label\":\"FilterBuilderModalContent-label-aJpFi\",\"labelInputContainer\":\"FilterBuilderModalContent-labelInputContainer-khdZ8\",\"rows\":\"FilterBuilderModalContent-rows-PzMnR\"};","import { maxBy } from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport FilterBuilderRow from './FilterBuilderRow';\r\nimport styles from './FilterBuilderModalContent.css';\r\n\r\nclass FilterBuilderModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n const filters = [...props.filters];\r\n\r\n // Push an empty filter if there aren't any filters. FilterBuilderRow\r\n // will handle initializing the filter.\r\n\r\n if (!filters.length) {\r\n filters.push({});\r\n }\r\n\r\n this.state = {\r\n label: props.label,\r\n filters,\r\n labelErrors: []\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n id,\r\n customFilters,\r\n isSaving,\r\n saveError,\r\n dispatchSetFilter,\r\n onModalClose\r\n } = this.props;\r\n\r\n if (prevProps.isSaving && !isSaving && !saveError) {\r\n if (id) {\r\n dispatchSetFilter({ selectedFilterKey: id });\r\n } else {\r\n const last = maxBy(customFilters, 'id');\r\n dispatchSetFilter({ selectedFilterKey: last.id });\r\n }\r\n\r\n onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onLabelChange = ({ value }) => {\r\n this.setState({ label: value });\r\n };\r\n\r\n onFilterChange = (index, filter) => {\r\n const filters = [...this.state.filters];\r\n filters.splice(index, 1, filter);\r\n\r\n this.setState({\r\n filters\r\n });\r\n };\r\n\r\n onAddFilterPress = () => {\r\n const filters = [...this.state.filters];\r\n filters.push({});\r\n\r\n this.setState({\r\n filters\r\n });\r\n };\r\n\r\n onRemoveFilterPress = (index) => {\r\n const filters = [...this.state.filters];\r\n filters.splice(index, 1);\r\n\r\n this.setState({\r\n filters\r\n });\r\n };\r\n\r\n onSaveFilterPress = () => {\r\n const {\r\n id,\r\n customFilterType,\r\n onSaveCustomFilterPress\r\n } = this.props;\r\n\r\n const {\r\n label,\r\n filters\r\n } = this.state;\r\n\r\n if (!label) {\r\n this.setState({\r\n labelErrors: [\r\n {\r\n message: translate('LabelIsRequired')\r\n }\r\n ]\r\n });\r\n\r\n return;\r\n }\r\n\r\n onSaveCustomFilterPress({\r\n id,\r\n type: customFilterType,\r\n label,\r\n filters\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n sectionItems,\r\n filterBuilderProps,\r\n isSaving,\r\n saveError,\r\n onCancelPress,\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n label,\r\n filters,\r\n labelErrors\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {translate('CustomFilter')}\r\n \r\n\r\n \r\n
\r\n
\r\n {translate('Label')}\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n
{translate('Filters')}
\r\n\r\n
\r\n {\r\n filters.map((filter, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nFilterBuilderModalContent.propTypes = {\r\n id: PropTypes.number,\r\n label: PropTypes.string.isRequired,\r\n customFilterType: PropTypes.string.isRequired,\r\n sectionItems: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n filterBuilderProps: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n dispatchDeleteCustomFilter: PropTypes.func.isRequired,\r\n onSaveCustomFilterPress: PropTypes.func.isRequired,\r\n dispatchSetFilter: PropTypes.func.isRequired,\r\n onCancelPress: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default FilterBuilderModalContent;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteCustomFilter, saveCustomFilter } from 'Store/Actions/customFilterActions';\r\nimport FilterBuilderModalContent from './FilterBuilderModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { customFilters }) => customFilters,\r\n (state, { id }) => id,\r\n (state) => state.customFilters.isSaving,\r\n (state) => state.customFilters.saveError,\r\n (customFilters, id, isSaving, saveError) => {\r\n if (id) {\r\n const customFilter = customFilters.find((c) => c.id === id);\r\n\r\n return {\r\n id: customFilter.id,\r\n label: customFilter.label,\r\n filters: customFilter.filters,\r\n customFilters,\r\n isSaving,\r\n saveError\r\n };\r\n }\r\n\r\n return {\r\n label: '',\r\n filters: [],\r\n customFilters,\r\n isSaving,\r\n saveError\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n onSaveCustomFilterPress: saveCustomFilter,\r\n dispatchDeleteCustomFilter: deleteCustomFilter\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(FilterBuilderModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { icons } from 'Helpers/Props';\r\nimport IconButton from './IconButton';\r\n\r\nfunction SpinnerIconButton(props) {\r\n const {\r\n name,\r\n spinningName,\r\n isDisabled,\r\n isSpinning,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nSpinnerIconButton.propTypes = {\r\n ...IconButton.propTypes,\r\n className: PropTypes.string,\r\n name: PropTypes.object.isRequired,\r\n spinningName: PropTypes.object.isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n isSpinning: PropTypes.bool.isRequired\r\n};\r\n\r\nSpinnerIconButton.defaultProps = {\r\n spinningName: icons.SPINNER,\r\n isDisabled: false,\r\n isSpinning: false\r\n};\r\n\r\nexport default SpinnerIconButton;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './CustomFilter.css';\r\n\r\nclass CustomFilter extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isDeleting: false\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n isDeleting,\r\n deleteError\r\n } = this.props;\r\n\r\n if (prevProps.isDeleting && !isDeleting && this.state.isDeleting && deleteError) {\r\n this.setState({ isDeleting: false });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n const {\r\n id,\r\n selectedFilterKey,\r\n dispatchSetFilter\r\n } = this.props;\r\n\r\n // Assume that delete and then unmounting means the deletion was successful.\r\n // Moving this check to an ancestor would be more accurate, but would have\r\n // more boilerplate.\r\n if (this.state.isDeleting && id === selectedFilterKey) {\r\n dispatchSetFilter({ selectedFilterKey: 'all' });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditPress = () => {\r\n const {\r\n id,\r\n onEditPress\r\n } = this.props;\r\n\r\n onEditPress(id);\r\n };\r\n\r\n onRemovePress = () => {\r\n const {\r\n id,\r\n dispatchDeleteCustomFilter\r\n } = this.props;\r\n\r\n this.setState({ isDeleting: true }, () => {\r\n dispatchDeleteCustomFilter({ id });\r\n });\r\n\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n label\r\n } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n {label}\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nCustomFilter.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n label: PropTypes.string.isRequired,\r\n selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n isDeleting: PropTypes.bool.isRequired,\r\n deleteError: PropTypes.object,\r\n dispatchSetFilter: PropTypes.func.isRequired,\r\n onEditPress: PropTypes.func.isRequired,\r\n dispatchDeleteCustomFilter: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CustomFilter;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"customFilter\":\"CustomFilter-customFilter-eI_Cq\",\"label\":\"CustomFilter-label-lHwLr\",\"actions\":\"CustomFilter-actions-Wjx7G\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteCustomFilter } from 'Store/Actions/customFilterActions';\r\nimport CustomFiltersModalContent from './CustomFiltersModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.customFilters.isDeleting,\r\n (state) => state.customFilters.deleteError,\r\n (isDeleting, deleteError) => {\r\n return {\r\n isDeleting,\r\n deleteError\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchDeleteCustomFilter: deleteCustomFilter\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CustomFiltersModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport CustomFilter from './CustomFilter';\r\nimport styles from './CustomFiltersModalContent.css';\r\n\r\nfunction CustomFiltersModalContent(props) {\r\n const {\r\n selectedFilterKey,\r\n customFilters,\r\n isDeleting,\r\n deleteError,\r\n dispatchDeleteCustomFilter,\r\n dispatchSetFilter,\r\n onAddCustomFilter,\r\n onEditCustomFilter,\r\n onModalClose\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {translate('CustomFilters')}\r\n \r\n\r\n \r\n {\r\n customFilters\r\n .sort((a, b) => sortByProp(a, b, 'label'))\r\n .map((customFilter) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nCustomFiltersModalContent.propTypes = {\r\n selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isDeleting: PropTypes.bool.isRequired,\r\n deleteError: PropTypes.object,\r\n dispatchDeleteCustomFilter: PropTypes.func.isRequired,\r\n dispatchSetFilter: PropTypes.func.isRequired,\r\n onAddCustomFilter: PropTypes.func.isRequired,\r\n onEditCustomFilter: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CustomFiltersModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"addButtonContainer\":\"CustomFiltersModalContent-addButtonContainer-CcXAj\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport FilterBuilderModalContentConnector from './Builder/FilterBuilderModalContentConnector';\r\nimport CustomFiltersModalContentConnector from './CustomFilters/CustomFiltersModalContentConnector';\r\n\r\nclass FilterModal extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n filterBuilder: !props.customFilters.length,\r\n id: null\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddCustomFilter = () => {\r\n this.setState({\r\n filterBuilder: true\r\n });\r\n };\r\n\r\n onEditCustomFilter = (id) => {\r\n this.setState({\r\n filterBuilder: true,\r\n id\r\n });\r\n };\r\n\r\n onCancelPress = () => {\r\n if (this.state.filterBuilder) {\r\n this.setState({\r\n filterBuilder: false,\r\n id: null\r\n });\r\n } else {\r\n this.onModalClose();\r\n }\r\n };\r\n\r\n onModalClose = () => {\r\n this.setState({\r\n filterBuilder: false,\r\n id: null\r\n }, () => {\r\n this.props.onModalClose();\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isOpen,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n filterBuilder,\r\n id\r\n } = this.state;\r\n\r\n return (\r\n \r\n {\r\n filterBuilder ?\r\n :\r\n \r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nFilterModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default FilterModal;\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FilterModal from 'Components/Filter/FilterModal';\r\nimport { setBlocklistFilter } from 'Store/Actions/blocklistActions';\r\n\r\nfunction createBlocklistSelector() {\r\n return createSelector(\r\n (state: AppState) => state.blocklist.items,\r\n (blocklistItems) => {\r\n return blocklistItems;\r\n }\r\n );\r\n}\r\n\r\nfunction createFilterBuilderPropsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.blocklist.filterBuilderProps,\r\n (filterBuilderProps) => {\r\n return filterBuilderProps;\r\n }\r\n );\r\n}\r\n\r\ninterface BlocklistFilterModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nexport default function BlocklistFilterModal(props: BlocklistFilterModalProps) {\r\n const sectionItems = useSelector(createBlocklistSelector());\r\n const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());\r\n const customFilterType = 'blocklist';\r\n\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSetFilter = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setBlocklistFilter(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createUISettingsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.settings.ui,\r\n (ui) => {\r\n return ui.item;\r\n }\r\n );\r\n}\r\n\r\nexport default createUISettingsSelector;\r\n","import moment from 'moment';\r\n\r\nfunction formatTime(date, timeFormat, { includeMinuteZero = false, includeSeconds = false } = {}) {\r\n if (!date) {\r\n return '';\r\n }\r\n\r\n const time = moment(date);\r\n\r\n if (includeSeconds) {\r\n timeFormat = timeFormat.replace(/\\(?:mm\\)?/, ':mm:ss');\r\n } else if (includeMinuteZero || time.minute() !== 0) {\r\n timeFormat = timeFormat.replace('(:mm)', ':mm');\r\n } else {\r\n timeFormat = timeFormat.replace('(:mm)', '');\r\n }\r\n\r\n return time.format(timeFormat);\r\n}\r\n\r\nexport default formatTime;\r\n","function isToday(date) {\r\n if (!date) {\r\n return false;\r\n }\r\n\r\n const dateObj = (typeof date === 'object') ? date : new Date(date);\r\n const today = new Date();\r\n\r\n return dateObj.getDate() === today.getDate() && dateObj.getMonth() === today.getMonth() && dateObj.getFullYear() === today.getFullYear();\r\n}\r\n\r\nexport default isToday;\r\n","function isTomorrow(date) {\r\n if (!date) {\r\n return false;\r\n }\r\n\r\n const dateObj = (typeof date === 'object') ? date : new Date(date);\r\n const today = new Date();\r\n const tomorrow = new Date((today.setDate(today.getDate() + 1)));\r\n\r\n return dateObj.getDate() === tomorrow.getDate() && dateObj.getMonth() === tomorrow.getMonth() && dateObj.getFullYear() === tomorrow.getFullYear();\r\n}\r\n\r\nexport default isTomorrow;\r\n","function isYesterday(date) {\r\n if (!date) {\r\n return false;\r\n }\r\n\r\n const dateObj = (typeof date === 'object') ? date : new Date(date);\r\n const today = new Date();\r\n const yesterday = new Date((today.setDate(today.getDate() - 1)));\r\n\r\n return dateObj.getDate() === yesterday.getDate() && dateObj.getMonth() === yesterday.getMonth() && dateObj.getFullYear() === yesterday.getFullYear();\r\n}\r\n\r\nexport default isYesterday;\r\n","import moment from 'moment';\r\nimport translate from 'Utilities/String/translate';\r\nimport formatTime from './formatTime';\r\nimport isToday from './isToday';\r\nimport isTomorrow from './isTomorrow';\r\nimport isYesterday from './isYesterday';\r\n\r\nfunction getRelativeDay(date, includeRelativeDate) {\r\n if (!includeRelativeDate) {\r\n return '';\r\n }\r\n\r\n if (isYesterday(date)) {\r\n return translate('Yesterday');\r\n }\r\n\r\n if (isToday(date)) {\r\n return translate('Today');\r\n }\r\n\r\n if (isTomorrow(date)) {\r\n return translate('Tomorrow');\r\n }\r\n\r\n return '';\r\n}\r\n\r\nfunction formatDateTime(date, dateFormat, timeFormat, { includeSeconds = false, includeRelativeDay = false } = {}) {\r\n if (!date) {\r\n return '';\r\n }\r\n\r\n const relativeDay = getRelativeDay(date, includeRelativeDay);\r\n const formattedDate = moment(date).format(dateFormat);\r\n const formattedTime = formatTime(date, timeFormat, { includeMinuteZero: true, includeSeconds });\r\n\r\n if (relativeDay) {\r\n return translate('FormatDateTimeRelative', { relativeDay, formattedDate, formattedTime });\r\n }\r\n return translate('FormatDateTime', { formattedDate, formattedTime });\r\n}\r\n\r\nexport default formatDateTime;\r\n","import moment from 'moment';\r\nimport formatTime from 'Utilities/Date/formatTime';\r\nimport isInNextWeek from 'Utilities/Date/isInNextWeek';\r\nimport isToday from 'Utilities/Date/isToday';\r\nimport isTomorrow from 'Utilities/Date/isTomorrow';\r\nimport isYesterday from 'Utilities/Date/isYesterday';\r\nimport translate from 'Utilities/String/translate';\r\nimport formatDateTime from './formatDateTime';\r\n\r\ninterface GetRelativeDateOptions {\r\n date?: string;\r\n shortDateFormat: string;\r\n showRelativeDates: boolean;\r\n timeFormat?: string;\r\n includeSeconds?: boolean;\r\n timeForToday?: boolean;\r\n includeTime?: boolean;\r\n}\r\n\r\nfunction getRelativeDate({\r\n date,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n includeSeconds = false,\r\n timeForToday = false,\r\n includeTime = false,\r\n}: GetRelativeDateOptions) {\r\n if (!date) {\r\n return '';\r\n }\r\n\r\n if ((includeTime || timeForToday) && !timeFormat) {\r\n throw new Error(\r\n \"getRelativeDate: 'timeFormat' is required when 'includeTime' or 'timeForToday' is true\"\r\n );\r\n }\r\n\r\n const isTodayDate = isToday(date);\r\n const time = timeFormat\r\n ? formatTime(date, timeFormat, {\r\n includeMinuteZero: true,\r\n includeSeconds,\r\n })\r\n : '';\r\n\r\n if (isTodayDate && timeForToday) {\r\n return time;\r\n }\r\n\r\n if (!showRelativeDates) {\r\n return moment(date).format(shortDateFormat);\r\n }\r\n\r\n if (isYesterday(date)) {\r\n return includeTime\r\n ? translate('YesterdayAt', { time })\r\n : translate('Yesterday');\r\n }\r\n\r\n if (isTodayDate) {\r\n return includeTime ? translate('TodayAt', { time }) : translate('Today');\r\n }\r\n\r\n if (isTomorrow(date)) {\r\n return includeTime\r\n ? translate('TomorrowAt', { time })\r\n : translate('Tomorrow');\r\n }\r\n\r\n if (isInNextWeek(date)) {\r\n const day = moment(date).format('dddd');\r\n\r\n return includeTime ? translate('DayOfWeekAt', { day, time }) : day;\r\n }\r\n\r\n return includeTime\r\n ? formatDateTime(date, shortDateFormat, timeFormat, { includeSeconds })\r\n : moment(date).format(shortDateFormat);\r\n}\r\n\r\nexport default getRelativeDate;\r\n","import moment from 'moment';\r\n\r\nfunction isInNextWeek(date) {\r\n if (!date) {\r\n return false;\r\n }\r\n const now = moment();\r\n return moment(date).isBetween(now, now.clone().add(6, 'days').endOf('day'));\r\n}\r\n\r\nexport default isInNextWeek;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"RelativeDateCell-cell-_hShQ TableRowCell-cell-giPrj\"};","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport getRelativeDate from 'Utilities/Date/getRelativeDate';\r\nimport TableRowCell from './TableRowCell';\r\nimport styles from './RelativeDateCell.css';\r\n\r\ninterface RelativeDateCellProps {\r\n className?: string;\r\n date?: string;\r\n includeSeconds?: boolean;\r\n includeTime?: boolean;\r\n timeForToday?: boolean;\r\n component?: React.ElementType;\r\n}\r\n\r\nfunction RelativeDateCell(props: RelativeDateCellProps) {\r\n const {\r\n className = styles.cell,\r\n date,\r\n includeSeconds = false,\r\n includeTime = false,\r\n timeForToday = true,\r\n\r\n component: Component = TableRowCell,\r\n ...otherProps\r\n } = props;\r\n\r\n const { showRelativeDates, shortDateFormat, longDateFormat, timeFormat } =\r\n useSelector(createUISettingsSelector());\r\n\r\n if (!date) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n {getRelativeDate({\r\n date,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n includeSeconds,\r\n includeTime,\r\n timeForToday,\r\n })}\r\n \r\n );\r\n}\r\n\r\nexport default RelativeDateCell;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport TableRowCell from './TableRowCell';\r\nimport styles from './TableSelectCell.css';\r\n\r\nclass TableSelectCell extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n id,\r\n isSelected,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n onSelectedChange({ id, value: isSelected });\r\n }\r\n\r\n componentWillUnmount() {\r\n const {\r\n id,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n onSelectedChange({ id, value: null });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = ({ value, shiftKey }, a, b, c, d) => {\r\n const {\r\n id,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n onSelectedChange({ id, value, shiftKey });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n id,\r\n isSelected,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nTableSelectCell.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n isSelected: PropTypes.bool.isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nTableSelectCell.defaultProps = {\r\n className: styles.selectCell,\r\n isSelected: false\r\n};\r\n\r\nexport default TableSelectCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"selectCell\":\"TableSelectCell-selectCell-ip5ko TableRowCell-cell-giPrj\",\"input\":\"TableSelectCell-input-YHSWy CheckInput-input-VAM1T\"};","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { kinds } from 'Helpers/Props';\r\nimport CustomFormat from 'typings/CustomFormat';\r\n\r\ninterface MovieFormatsProps {\r\n formats: CustomFormat[];\r\n}\r\n\r\nfunction MovieFormats({ formats }: MovieFormatsProps) {\r\n return (\r\n
\r\n {formats.map(({ id, name }) => (\r\n \r\n ))}\r\n
\r\n );\r\n}\r\n\r\nexport default MovieFormats;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tooltipContainer\":\"Tooltip-tooltipContainer-gDO7_\",\"tooltip\":\"Tooltip-tooltip-qMfbq\",\"default\":\"Tooltip-default-esYBk\",\"inverse\":\"Tooltip-inverse-Tdtfn\",\"arrow\":\"Tooltip-arrow-EePNR\",\"arrowDisabled\":\"Tooltip-arrowDisabled-TxV9g\",\"top\":\"Tooltip-top-yIoOO\",\"right\":\"Tooltip-right-clP43\",\"bottom\":\"Tooltip-bottom-awZ3q\",\"left\":\"Tooltip-left-WEn0f\",\"body\":\"Tooltip-body-EY7l7\",\"verticalContainer\":\"Tooltip-verticalContainer-Q9BQj\",\"horizontalContainer\":\"Tooltip-horizontalContainer-vrDdq\"};","import classNames from 'classnames';\r\nimport React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { Manager, Popper, Reference } from 'react-popper';\r\nimport Portal from 'Components/Portal';\r\nimport { kinds, tooltipPositions } from 'Helpers/Props';\r\nimport { Kind } from 'Helpers/Props/kinds';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport { isMobile as isMobileUtil } from 'Utilities/browser';\r\nimport styles from './Tooltip.css';\r\n\r\nexport interface TooltipProps {\r\n className?: string;\r\n bodyClassName?: string;\r\n anchor: React.ReactNode;\r\n tooltip: string | React.ReactNode;\r\n kind?: Extract;\r\n position?: (typeof tooltipPositions.all)[number];\r\n canFlip?: boolean;\r\n}\r\nfunction Tooltip(props: TooltipProps) {\r\n const {\r\n className,\r\n bodyClassName = styles.body,\r\n anchor,\r\n tooltip,\r\n kind = kinds.DEFAULT,\r\n position = tooltipPositions.TOP,\r\n canFlip = false,\r\n } = props;\r\n\r\n const closeTimeout = useRef>();\r\n const updater = useRef<(() => void) | null>(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleClick = useCallback(() => {\r\n if (!isMobileUtil()) {\r\n return;\r\n }\r\n\r\n setIsOpen((isOpen) => {\r\n return !isOpen;\r\n });\r\n }, [setIsOpen]);\r\n\r\n const handleMouseEnterAnchor = useCallback(() => {\r\n // Mobile will fire mouse enter and click events rapidly,\r\n // this causes the tooltip not to open on the first press.\r\n // Ignore the mouse enter event on mobile.\r\n\r\n if (isMobileUtil()) {\r\n return;\r\n }\r\n\r\n if (closeTimeout.current) {\r\n clearTimeout(closeTimeout.current);\r\n }\r\n\r\n setIsOpen(true);\r\n }, [setIsOpen]);\r\n\r\n const handleMouseEnterTooltip = useCallback(() => {\r\n if (closeTimeout.current) {\r\n clearTimeout(closeTimeout.current);\r\n }\r\n\r\n setIsOpen(true);\r\n }, [setIsOpen]);\r\n\r\n const handleMouseLeave = useCallback(() => {\r\n // Still listen for mouse leave on mobile to allow clicks outside to close the tooltip.\r\n\r\n clearTimeout(closeTimeout.current);\r\n closeTimeout.current = setTimeout(() => {\r\n setIsOpen(false);\r\n }, 100);\r\n }, [setIsOpen]);\r\n\r\n const maxWidth = useMemo(() => {\r\n const windowWidth = window.innerWidth;\r\n\r\n if (windowWidth >= parseInt(dimensions.breakpointLarge)) {\r\n return 800;\r\n } else if (windowWidth >= parseInt(dimensions.breakpointMedium)) {\r\n return 650;\r\n } else if (windowWidth >= parseInt(dimensions.breakpointSmall)) {\r\n return 500;\r\n }\r\n\r\n return 450;\r\n }, []);\r\n\r\n const computeMaxSize = useCallback(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (data: any) => {\r\n const { top, right, bottom, left } = data.offsets.reference;\r\n\r\n const windowWidth = window.innerWidth;\r\n const windowHeight = window.innerHeight;\r\n\r\n if (/^top/.test(data.placement)) {\r\n data.styles.maxHeight = top - 20;\r\n } else if (/^bottom/.test(data.placement)) {\r\n data.styles.maxHeight = windowHeight - bottom - 20;\r\n } else if (/^right/.test(data.placement)) {\r\n data.styles.maxWidth = Math.min(maxWidth, windowWidth - right - 20);\r\n data.styles.maxHeight = top - 20;\r\n } else {\r\n data.styles.maxWidth = Math.min(maxWidth, left - 20);\r\n data.styles.maxHeight = top - 20;\r\n }\r\n\r\n return data;\r\n },\r\n [maxWidth]\r\n );\r\n\r\n useEffect(() => {\r\n if (updater.current && isOpen) {\r\n updater.current();\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (closeTimeout.current) {\r\n clearTimeout(closeTimeout.current);\r\n }\r\n };\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n {({ ref }) => (\r\n \r\n {anchor}\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n {({ ref, style, placement, arrowProps, scheduleUpdate }) => {\r\n updater.current = scheduleUpdate;\r\n\r\n const popperPlacement = placement\r\n ? placement.split('-')[0]\r\n : position;\r\n const vertical =\r\n popperPlacement === 'top' || popperPlacement === 'bottom';\r\n\r\n return (\r\n \r\n \r\n {isOpen ? (\r\n
\r\n
{tooltip}
\r\n
\r\n ) : null}\r\n \r\n );\r\n }}\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Tooltip;\r\n","import React from 'react';\r\nimport Tooltip, { TooltipProps } from './Tooltip';\r\nimport styles from './Popover.css';\r\n\r\ninterface PopoverProps extends Omit {\r\n title: string;\r\n body: React.ReactNode;\r\n}\r\n\r\nfunction Popover({ title, body, ...otherProps }: PopoverProps) {\r\n return (\r\n \r\n
{title}
\r\n\r\n
{body}
\r\n \r\n }\r\n />\r\n );\r\n}\r\n\r\nexport default Popover;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"Popover-title-GAfA1\",\"body\":\"Popover-body-nroDV\",\"tooltipBody\":\"Popover-tooltipBody-VJBHk\"};","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { kinds, tooltipPositions } from 'Helpers/Props';\r\nimport Language from 'Language/Language';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface MovieLanguagesProps {\r\n className?: string;\r\n languages: Language[];\r\n isCutoffNotMet?: boolean;\r\n}\r\n\r\nfunction MovieLanguages(props: MovieLanguagesProps) {\r\n const { className, languages, isCutoffNotMet = true } = props;\r\n\r\n // TODO: Typescript - Remove once everything is converted\r\n if (!languages || languages.length === 0) {\r\n return null;\r\n }\r\n\r\n if (languages.length === 1) {\r\n return (\r\n \r\n {languages[0].name}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {translate('MultiLanguage')}\r\n \r\n }\r\n title={translate('Languages')}\r\n body={\r\n
    \r\n {languages.map((language) => (\r\n
  • {language.name}
  • \r\n ))}\r\n
\r\n }\r\n position={tooltipPositions.LEFT}\r\n />\r\n );\r\n}\r\n\r\nexport default MovieLanguages;\r\n","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { QualityModel } from 'Quality/Quality';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction getTooltip(\r\n title: string,\r\n quality: QualityModel,\r\n size: number | undefined,\r\n isCutoffNotMet: boolean\r\n) {\r\n const revision = quality.revision;\r\n\r\n if (revision.real && revision.real > 0) {\r\n title += ' [REAL]';\r\n }\r\n\r\n if (revision.version && revision.version > 1) {\r\n title += ' [PROPER]';\r\n }\r\n\r\n if (size) {\r\n title += ` - ${formatBytes(size)}`;\r\n }\r\n\r\n if (isCutoffNotMet) {\r\n title += ` [${translate('CutoffNotMet')}]`;\r\n }\r\n\r\n return title;\r\n}\r\n\r\nfunction revisionLabel(\r\n className: string | undefined,\r\n quality: QualityModel,\r\n showRevision: boolean\r\n) {\r\n if (!showRevision) {\r\n return;\r\n }\r\n\r\n if (quality.revision.isRepack) {\r\n return (\r\n \r\n R\r\n \r\n );\r\n }\r\n\r\n if (quality.revision.version && quality.revision.version > 1) {\r\n return (\r\n \r\n P\r\n \r\n );\r\n }\r\n\r\n return null;\r\n}\r\n\r\ninterface MovieQualityProps {\r\n className?: string;\r\n title?: string;\r\n quality: QualityModel;\r\n size?: number;\r\n isCutoffNotMet?: boolean;\r\n showRevision?: boolean;\r\n}\r\n\r\nfunction MovieQuality(props: MovieQualityProps) {\r\n const {\r\n className,\r\n title = '',\r\n quality,\r\n size,\r\n isCutoffNotMet = false,\r\n showRevision = false,\r\n } = props;\r\n\r\n if (!quality) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {quality.quality.name}\r\n \r\n {revisionLabel(className, quality, showRevision)}\r\n \r\n );\r\n}\r\n\r\nexport default MovieQuality;\r\n","import React from 'react';\r\nimport Link, { LinkProps } from 'Components/Link/Link';\r\n\r\ninterface MovieTitleLinkProps extends LinkProps {\r\n titleSlug: string;\r\n title: string;\r\n year?: number;\r\n}\r\n\r\nfunction MovieTitleLink({\r\n titleSlug,\r\n title,\r\n year = 0,\r\n ...otherProps\r\n}: MovieTitleLinkProps) {\r\n const link = `/movie/${titleSlug}`;\r\n\r\n return (\r\n \r\n {title}\r\n {year > 0 ? ` (${year})` : ''}\r\n \r\n );\r\n}\r\n\r\nexport default MovieTitleLink;\r\n","import { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nexport type MovieEntity =\r\n | 'calendar'\r\n | 'movies'\r\n | 'interactiveImport.movies'\r\n | 'wanted.cutoffUnmet'\r\n | 'wanted.missing';\r\n\r\nexport function createMovieSelector(movieId?: number) {\r\n return createSelector(\r\n (state: AppState) => state.movies.itemMap,\r\n (state: AppState) => state.movies.items,\r\n (itemMap, allMovies) => {\r\n return movieId ? allMovies[itemMap[movieId]] : undefined;\r\n }\r\n );\r\n}\r\n\r\nfunction useMovie(movieId: number | undefined) {\r\n return useSelector(createMovieSelector(movieId));\r\n}\r\n\r\nexport default useMovie;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"descriptionList\":\"DescriptionList-descriptionList-o7bt3\"};","import React from 'react';\r\nimport styles from './DescriptionList.css';\r\n\r\ninterface DescriptionListProps {\r\n className?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nfunction DescriptionList(props: DescriptionListProps) {\r\n const { className = styles.descriptionList, children } = props;\r\n\r\n return
{children}
;\r\n}\r\n\r\nexport default DescriptionList;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"description\":\"DescriptionListItemDescription-description-IZlGY\"};","import React, { ReactNode } from 'react';\r\nimport styles from './DescriptionListItemDescription.css';\r\n\r\nexport interface DescriptionListItemDescriptionProps {\r\n className?: string;\r\n children?: ReactNode;\r\n}\r\n\r\nfunction DescriptionListItemDescription(\r\n props: DescriptionListItemDescriptionProps\r\n) {\r\n const { className = styles.description, children } = props;\r\n\r\n return
{children}
;\r\n}\r\n\r\nexport default DescriptionListItemDescription;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"DescriptionListItemTitle-title-br1UE\"};","import React, { ReactNode } from 'react';\r\nimport styles from './DescriptionListItemTitle.css';\r\n\r\nexport interface DescriptionListItemTitleProps {\r\n className?: string;\r\n children?: ReactNode;\r\n}\r\n\r\nfunction DescriptionListItemTitle(props: DescriptionListItemTitleProps) {\r\n const { className = styles.title, children } = props;\r\n\r\n return
{children}
;\r\n}\r\n\r\nexport default DescriptionListItemTitle;\r\n","import React from 'react';\r\nimport DescriptionListItemDescription, {\r\n DescriptionListItemDescriptionProps,\r\n} from './DescriptionListItemDescription';\r\nimport DescriptionListItemTitle, {\r\n DescriptionListItemTitleProps,\r\n} from './DescriptionListItemTitle';\r\n\r\ninterface DescriptionListItemProps {\r\n className?: string;\r\n titleClassName?: DescriptionListItemTitleProps['className'];\r\n descriptionClassName?: DescriptionListItemDescriptionProps['className'];\r\n title?: DescriptionListItemTitleProps['children'];\r\n data?: DescriptionListItemDescriptionProps['children'];\r\n}\r\n\r\nfunction DescriptionListItem(props: DescriptionListItemProps) {\r\n const { className, titleClassName, descriptionClassName, title, data } =\r\n props;\r\n\r\n return (\r\n
\r\n \r\n {title}\r\n \r\n\r\n \r\n {data}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default DescriptionListItem;\r\n","import React from 'react';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';\r\nimport Button from 'Components/Link/Button';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface BlocklistDetailsModalProps {\r\n isOpen: boolean;\r\n sourceTitle: string;\r\n protocol: DownloadProtocol;\r\n indexer?: string;\r\n message?: string;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction BlocklistDetailsModal(props: BlocklistDetailsModalProps) {\r\n const { isOpen, sourceTitle, protocol, indexer, message, onModalClose } =\r\n props;\r\n\r\n return (\r\n \r\n \r\n Details\r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n {message ? (\r\n \r\n ) : null}\r\n\r\n {message ? (\r\n \r\n ) : null}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default BlocklistDetailsModal;\r\n","import React, { useCallback, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport Column from 'Components/Table/Column';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport MovieFormats from 'Movie/MovieFormats';\r\nimport MovieLanguages from 'Movie/MovieLanguages';\r\nimport MovieQuality from 'Movie/MovieQuality';\r\nimport MovieTitleLink from 'Movie/MovieTitleLink';\r\nimport useMovie from 'Movie/useMovie';\r\nimport { removeBlocklistItem } from 'Store/Actions/blocklistActions';\r\nimport Blocklist from 'typings/Blocklist';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport translate from 'Utilities/String/translate';\r\nimport BlocklistDetailsModal from './BlocklistDetailsModal';\r\nimport styles from './BlocklistRow.css';\r\n\r\ninterface BlocklistRowProps extends Blocklist {\r\n isSelected: boolean;\r\n columns: Column[];\r\n onSelectedChange: (options: SelectStateInputProps) => void;\r\n}\r\n\r\nfunction BlocklistRow(props: BlocklistRowProps) {\r\n const {\r\n id,\r\n movieId,\r\n sourceTitle,\r\n languages,\r\n quality,\r\n customFormats,\r\n date,\r\n protocol,\r\n indexer,\r\n message,\r\n isSelected,\r\n columns,\r\n onSelectedChange,\r\n } = props;\r\n\r\n const movie = useMovie(movieId);\r\n const dispatch = useDispatch();\r\n const [isDetailsModalOpen, setIsDetailsModalOpen] = useState(false);\r\n\r\n const handleDetailsPress = useCallback(() => {\r\n setIsDetailsModalOpen(true);\r\n }, [setIsDetailsModalOpen]);\r\n\r\n const handleDetailsModalClose = useCallback(() => {\r\n setIsDetailsModalOpen(false);\r\n }, [setIsDetailsModalOpen]);\r\n\r\n const handleRemovePress = useCallback(() => {\r\n dispatch(removeBlocklistItem({ id }));\r\n }, [id, dispatch]);\r\n\r\n if (!movie) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n {columns.map((column) => {\r\n const { name, isVisible } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'movieMetadata.sortTitle') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'sourceTitle') {\r\n return {sourceTitle};\r\n }\r\n\r\n if (name === 'languages') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'quality') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'customFormats') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'date') {\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore ts(2739)\r\n return ;\r\n }\r\n\r\n if (name === 'indexer') {\r\n return (\r\n \r\n {indexer}\r\n \r\n );\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n\r\n return null;\r\n })}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default BlocklistRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"languages\":\"BlocklistRow-languages-Sn3Zx TableRowCell-cell-giPrj\",\"quality\":\"BlocklistRow-quality-DFEgf TableRowCell-cell-giPrj\",\"indexer\":\"BlocklistRow-indexer-LARqS TableRowCell-cell-giPrj\",\"actions\":\"BlocklistRow-actions-EYLsy TableRowCell-cell-giPrj\"};","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { SelectProvider } from 'App/SelectContext';\r\nimport AppState from 'App/State/AppState';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport TablePager from 'Components/Table/TablePager';\r\nimport usePaging from 'Components/Table/usePaging';\r\nimport useCurrentPage from 'Helpers/Hooks/useCurrentPage';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport useSelectState from 'Helpers/Hooks/useSelectState';\r\nimport { align, icons, kinds } from 'Helpers/Props';\r\nimport {\r\n clearBlocklist,\r\n fetchBlocklist,\r\n gotoBlocklistPage,\r\n removeBlocklistItems,\r\n setBlocklistFilter,\r\n setBlocklistSort,\r\n setBlocklistTableOption,\r\n} from 'Store/Actions/blocklistActions';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { createCustomFiltersSelector } from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport { TableOptionsChangePayload } from 'typings/Table';\r\nimport {\r\n registerPagePopulator,\r\n unregisterPagePopulator,\r\n} from 'Utilities/pagePopulator';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport BlocklistFilterModal from './BlocklistFilterModal';\r\nimport BlocklistRow from './BlocklistRow';\r\n\r\nfunction Blocklist() {\r\n const requestCurrentPage = useCurrentPage();\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n columns,\r\n selectedFilterKey,\r\n filters,\r\n sortKey,\r\n sortDirection,\r\n page,\r\n pageSize,\r\n totalPages,\r\n totalRecords,\r\n isRemoving,\r\n } = useSelector((state: AppState) => state.blocklist);\r\n\r\n const customFilters = useSelector(createCustomFiltersSelector('blocklist'));\r\n const isClearingBlocklistExecuting = useSelector(\r\n createCommandExecutingSelector(commandNames.CLEAR_BLOCKLIST)\r\n );\r\n const dispatch = useDispatch();\r\n\r\n const [isConfirmRemoveModalOpen, setIsConfirmRemoveModalOpen] =\r\n useState(false);\r\n const [isConfirmClearModalOpen, setIsConfirmClearModalOpen] = useState(false);\r\n\r\n const [selectState, setSelectState] = useSelectState();\r\n const { allSelected, allUnselected, selectedState } = selectState;\r\n\r\n const selectedIds = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const wasClearingBlocklistExecuting = usePrevious(\r\n isClearingBlocklistExecuting\r\n );\r\n\r\n const handleSelectAllChange = useCallback(\r\n ({ value }: CheckInputChanged) => {\r\n setSelectState({ type: value ? 'selectAll' : 'unselectAll', items });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const handleSelectedChange = useCallback(\r\n ({ id, value, shiftKey = false }: SelectStateInputProps) => {\r\n setSelectState({\r\n type: 'toggleSelected',\r\n items,\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const handleRemoveSelectedPress = useCallback(() => {\r\n setIsConfirmRemoveModalOpen(true);\r\n }, [setIsConfirmRemoveModalOpen]);\r\n\r\n const handleRemoveSelectedConfirmed = useCallback(() => {\r\n dispatch(removeBlocklistItems({ ids: selectedIds }));\r\n setIsConfirmRemoveModalOpen(false);\r\n }, [selectedIds, setIsConfirmRemoveModalOpen, dispatch]);\r\n\r\n const handleConfirmRemoveModalClose = useCallback(() => {\r\n setIsConfirmRemoveModalOpen(false);\r\n }, [setIsConfirmRemoveModalOpen]);\r\n\r\n const handleClearBlocklistPress = useCallback(() => {\r\n setIsConfirmClearModalOpen(true);\r\n }, [setIsConfirmClearModalOpen]);\r\n\r\n const handleClearBlocklistConfirmed = useCallback(() => {\r\n dispatch(executeCommand({ name: commandNames.CLEAR_BLOCKLIST }));\r\n setIsConfirmClearModalOpen(false);\r\n }, [setIsConfirmClearModalOpen, dispatch]);\r\n\r\n const handleConfirmClearModalClose = useCallback(() => {\r\n setIsConfirmClearModalOpen(false);\r\n }, [setIsConfirmClearModalOpen]);\r\n\r\n const {\r\n handleFirstPagePress,\r\n handlePreviousPagePress,\r\n handleNextPagePress,\r\n handleLastPagePress,\r\n handlePageSelect,\r\n } = usePaging({\r\n page,\r\n totalPages,\r\n gotoPage: gotoBlocklistPage,\r\n });\r\n\r\n const handleFilterSelect = useCallback(\r\n (selectedFilterKey: string) => {\r\n dispatch(setBlocklistFilter({ selectedFilterKey }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleSortPress = useCallback(\r\n (sortKey: string) => {\r\n dispatch(setBlocklistSort({ sortKey }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleTableOptionChange = useCallback(\r\n (payload: TableOptionsChangePayload) => {\r\n dispatch(setBlocklistTableOption(payload));\r\n\r\n if (payload.pageSize) {\r\n dispatch(gotoBlocklistPage({ page: 1 }));\r\n }\r\n },\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n if (requestCurrentPage) {\r\n dispatch(fetchBlocklist());\r\n } else {\r\n dispatch(gotoBlocklistPage({ page: 1 }));\r\n }\r\n\r\n return () => {\r\n dispatch(clearBlocklist());\r\n };\r\n }, [requestCurrentPage, dispatch]);\r\n\r\n useEffect(() => {\r\n const repopulate = () => {\r\n dispatch(fetchBlocklist());\r\n };\r\n\r\n registerPagePopulator(repopulate);\r\n\r\n return () => {\r\n unregisterPagePopulator(repopulate);\r\n };\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n if (wasClearingBlocklistExecuting && !isClearingBlocklistExecuting) {\r\n dispatch(gotoBlocklistPage({ page: 1 }));\r\n }\r\n }, [isClearingBlocklistExecuting, wasClearingBlocklistExecuting, dispatch]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {isFetching && !isPopulated ? : null}\r\n\r\n {!isFetching && !!error ? (\r\n {translate('BlocklistLoadError')}\r\n ) : null}\r\n\r\n {isPopulated && !error && !items.length ? (\r\n \r\n {selectedFilterKey === 'all'\r\n ? translate('NoBlocklistItems')\r\n : translate('BlocklistFilterHasNoItems')}\r\n \r\n ) : null}\r\n\r\n {isPopulated && !error && !!items.length ? (\r\n
\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n
\r\n ) : null}\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Blocklist;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createMoviesFetchingSelector() {\r\n return createSelector(\r\n (state: AppState) => state.movies,\r\n (movies) => {\r\n return {\r\n isMoviesFetching: movies.isFetching,\r\n isMoviesPopulated: movies.isPopulated,\r\n moviesError: movies.error,\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createMoviesFetchingSelector;\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FilterModal from 'Components/Filter/FilterModal';\r\nimport { setHistoryFilter } from 'Store/Actions/historyActions';\r\n\r\nfunction createHistorySelector() {\r\n return createSelector(\r\n (state: AppState) => state.history.items,\r\n (queueItems) => {\r\n return queueItems;\r\n }\r\n );\r\n}\r\n\r\nfunction createFilterBuilderPropsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.history.filterBuilderProps,\r\n (filterBuilderProps) => {\r\n return filterBuilderProps;\r\n }\r\n );\r\n}\r\n\r\ninterface HistoryFilterModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nexport default function HistoryFilterModal(props: HistoryFilterModalProps) {\r\n const sectionItems = useSelector(createHistorySelector());\r\n const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());\r\n const customFilterType = 'history';\r\n\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSetFilter = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setHistoryFilter(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n","function formatCustomFormatScore(\r\n input?: number,\r\n customFormatsLength = 0\r\n): string {\r\n const score = Number(input);\r\n\r\n if (score > 0) {\r\n return `+${score}`;\r\n }\r\n\r\n if (score < 0) {\r\n return `${score}`;\r\n }\r\n\r\n return customFormatsLength > 0 ? '+0' : '';\r\n}\r\n\r\nexport default formatCustomFormatScore;\r\n","import translate from 'Utilities/String/translate';\r\n\r\nfunction formatAge(age, ageHours, ageMinutes) {\r\n age = Math.round(age);\r\n ageHours = parseFloat(ageHours);\r\n ageMinutes = ageMinutes && parseFloat(ageMinutes);\r\n\r\n if (age < 2 && ageHours) {\r\n if (ageHours < 2 && !!ageMinutes) {\r\n return `${ageMinutes.toFixed(0)} ${ageHours === 1 ? translate('FormatAgeMinute') : translate('FormatAgeMinutes')}`;\r\n }\r\n\r\n return `${ageHours.toFixed(1)} ${ageHours === 1 ? translate('FormatAgeHour') : translate('FormatAgeHours')}`;\r\n }\r\n\r\n return `${age} ${age === 1 ? translate('FormatAgeDay') : translate('FormatAgeDays')}`;\r\n}\r\n\r\nexport default formatAge;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"description\":\"HistoryDetails-description-tZwCD DescriptionListItemDescription-description-IZlGY\"};","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';\r\nimport DescriptionListItemDescription from 'Components/DescriptionList/DescriptionListItemDescription';\r\nimport DescriptionListItemTitle from 'Components/DescriptionList/DescriptionListItemTitle';\r\nimport Link from 'Components/Link/Link';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport {\r\n DownloadFailedHistory,\r\n DownloadFolderImportedHistory,\r\n DownloadIgnoredHistory,\r\n GrabbedHistoryData,\r\n HistoryData,\r\n HistoryEventType,\r\n MovieFileDeletedHistory,\r\n MovieFileRenamedHistory,\r\n} from 'typings/History';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport formatAge from 'Utilities/Number/formatAge';\r\nimport formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './HistoryDetails.css';\r\n\r\ninterface HistoryDetailsProps {\r\n eventType: HistoryEventType;\r\n sourceTitle: string;\r\n data: HistoryData;\r\n downloadId?: string;\r\n}\r\n\r\nfunction HistoryDetails(props: HistoryDetailsProps) {\r\n const { eventType, sourceTitle, data, downloadId } = props;\r\n\r\n const { shortDateFormat, timeFormat } = useSelector(\r\n createUISettingsSelector()\r\n );\r\n\r\n if (eventType === 'grabbed') {\r\n const {\r\n indexer,\r\n releaseGroup,\r\n movieMatchType,\r\n releaseSource,\r\n customFormatScore,\r\n nzbInfoUrl,\r\n downloadClient,\r\n downloadClientName,\r\n age,\r\n ageHours,\r\n ageMinutes,\r\n publishedDate,\r\n } = data as GrabbedHistoryData;\r\n\r\n const downloadClientNameInfo = downloadClientName ?? downloadClient;\r\n\r\n let releaseSourceMessage = '';\r\n\r\n switch (releaseSource) {\r\n case 'Unknown':\r\n releaseSourceMessage = translate('Unknown');\r\n break;\r\n case 'Rss':\r\n releaseSourceMessage = translate('Rss');\r\n break;\r\n case 'Search':\r\n releaseSourceMessage = translate('Search');\r\n break;\r\n case 'UserInvokedSearch':\r\n releaseSourceMessage = translate('UserInvokedSearch');\r\n break;\r\n case 'InteractiveSearch':\r\n releaseSourceMessage = translate('InteractiveSearch');\r\n break;\r\n case 'ReleasePush':\r\n releaseSourceMessage = translate('ReleasePush');\r\n break;\r\n default:\r\n releaseSourceMessage = '';\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n {indexer ? (\r\n \r\n ) : null}\r\n\r\n {releaseGroup ? (\r\n \r\n ) : null}\r\n\r\n {customFormatScore && customFormatScore !== '0' ? (\r\n \r\n ) : null}\r\n\r\n {movieMatchType ? (\r\n \r\n ) : null}\r\n\r\n {releaseSource ? (\r\n \r\n ) : null}\r\n\r\n {nzbInfoUrl ? (\r\n \r\n \r\n {translate('InfoUrl')}\r\n \r\n\r\n \r\n {nzbInfoUrl}\r\n \r\n \r\n ) : null}\r\n\r\n {downloadClientNameInfo ? (\r\n \r\n ) : null}\r\n\r\n {downloadId ? (\r\n \r\n ) : null}\r\n\r\n {age || ageHours || ageMinutes ? (\r\n \r\n ) : null}\r\n\r\n {publishedDate ? (\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n if (eventType === 'downloadFailed') {\r\n const { message, indexer } = data as DownloadFailedHistory;\r\n\r\n return (\r\n \r\n \r\n\r\n {downloadId ? (\r\n \r\n ) : null}\r\n\r\n {indexer ? (\r\n \r\n ) : null}\r\n\r\n {message ? (\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n if (eventType === 'downloadFolderImported') {\r\n const { customFormatScore, droppedPath, importedPath } =\r\n data as DownloadFolderImportedHistory;\r\n\r\n return (\r\n \r\n \r\n\r\n {droppedPath ? (\r\n \r\n ) : null}\r\n\r\n {importedPath ? (\r\n \r\n ) : null}\r\n\r\n {customFormatScore && customFormatScore !== '0' ? (\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n if (eventType === 'movieFileDeleted') {\r\n const { reason, customFormatScore } = data as MovieFileDeletedHistory;\r\n\r\n let reasonMessage = '';\r\n\r\n switch (reason) {\r\n case 'Manual':\r\n reasonMessage = translate('DeletedReasonManual');\r\n break;\r\n case 'MissingFromDisk':\r\n reasonMessage = translate('DeletedReasonMovieMissingFromDisk');\r\n break;\r\n case 'Upgrade':\r\n reasonMessage = translate('DeletedReasonUpgrade');\r\n break;\r\n default:\r\n reasonMessage = '';\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n {customFormatScore && customFormatScore !== '0' ? (\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n if (eventType === 'movieFileRenamed') {\r\n const { sourcePath, sourceRelativePath, path, relativePath } =\r\n data as MovieFileRenamedHistory;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n\r\n if (eventType === 'downloadIgnored') {\r\n const { message } = data as DownloadIgnoredHistory;\r\n\r\n return (\r\n \r\n \r\n\r\n {downloadId ? (\r\n \r\n ) : null}\r\n\r\n {message ? (\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default HistoryDetails;\r\n","import React from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { HistoryData, HistoryEventType } from 'typings/History';\r\nimport translate from 'Utilities/String/translate';\r\nimport HistoryDetails from './HistoryDetails';\r\nimport styles from './HistoryDetailsModal.css';\r\n\r\nfunction getHeaderTitle(eventType: HistoryEventType) {\r\n switch (eventType) {\r\n case 'grabbed':\r\n return translate('Grabbed');\r\n case 'downloadFailed':\r\n return translate('DownloadFailed');\r\n case 'downloadFolderImported':\r\n return translate('MovieImported');\r\n case 'movieFileDeleted':\r\n return translate('MovieFileDeleted');\r\n case 'movieFileRenamed':\r\n return translate('MovieFileRenamed');\r\n case 'downloadIgnored':\r\n return translate('DownloadIgnored');\r\n default:\r\n return translate('Unknown');\r\n }\r\n}\r\n\r\ninterface HistoryDetailsModalProps {\r\n isOpen: boolean;\r\n eventType: HistoryEventType;\r\n sourceTitle: string;\r\n data: HistoryData;\r\n downloadId?: string;\r\n isMarkingAsFailed?: boolean;\r\n onMarkAsFailedPress: () => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction HistoryDetailsModal(props: HistoryDetailsModalProps) {\r\n const {\r\n isOpen,\r\n eventType,\r\n sourceTitle,\r\n data,\r\n downloadId,\r\n isMarkingAsFailed = false,\r\n onMarkAsFailedPress,\r\n onModalClose,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {getHeaderTitle(eventType)}\r\n\r\n \r\n \r\n \r\n\r\n \r\n {eventType === 'grabbed' && (\r\n \r\n {translate('MarkAsFailed')}\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default HistoryDetailsModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"markAsFailedButton\":\"HistoryDetailsModal-markAsFailedButton-P9sG9 Button-button-paJ9a Link-link-RInnp\"};","import React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport {\r\n GrabbedHistoryData,\r\n HistoryData,\r\n HistoryEventType,\r\n MovieFileDeletedHistory,\r\n} from 'typings/History';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './HistoryEventTypeCell.css';\r\n\r\nfunction getIconName(eventType: HistoryEventType, data: HistoryData) {\r\n switch (eventType) {\r\n case 'grabbed':\r\n return icons.DOWNLOADING;\r\n case 'movieFolderImported':\r\n return icons.DRIVE;\r\n case 'downloadFolderImported':\r\n return icons.DOWNLOADED;\r\n case 'downloadFailed':\r\n return icons.DOWNLOADING;\r\n case 'movieFileDeleted':\r\n return (data as MovieFileDeletedHistory).reason === 'MissingFromDisk'\r\n ? icons.FILE_MISSING\r\n : icons.DELETE;\r\n case 'movieFileRenamed':\r\n return icons.ORGANIZE;\r\n case 'downloadIgnored':\r\n return icons.IGNORE;\r\n default:\r\n return icons.UNKNOWN;\r\n }\r\n}\r\n\r\nfunction getIconKind(eventType: HistoryEventType) {\r\n switch (eventType) {\r\n case 'downloadFailed':\r\n return kinds.DANGER;\r\n default:\r\n return kinds.DEFAULT;\r\n }\r\n}\r\n\r\nfunction getTooltip(eventType: HistoryEventType, data: HistoryData) {\r\n switch (eventType) {\r\n case 'grabbed':\r\n return translate('MovieGrabbedTooltip', {\r\n indexer: (data as GrabbedHistoryData).indexer,\r\n downloadClient: (data as GrabbedHistoryData).downloadClient,\r\n });\r\n case 'movieFolderImported':\r\n return translate('MovieFolderImportedTooltip');\r\n case 'downloadFolderImported':\r\n return translate('MovieImportedTooltip');\r\n case 'downloadFailed':\r\n return translate('DownloadFailedMovieTooltip');\r\n case 'movieFileDeleted':\r\n return (data as MovieFileDeletedHistory).reason === 'MissingFromDisk'\r\n ? translate('MovieFileMissingTooltip')\r\n : translate('MovieFileDeletedTooltip');\r\n case 'movieFileRenamed':\r\n return translate('MovieFileRenamedTooltip');\r\n case 'downloadIgnored':\r\n return translate('DownloadIgnoredMovieTooltip');\r\n default:\r\n return translate('UnknownEventTooltip');\r\n }\r\n}\r\n\r\ninterface HistoryEventTypeCellProps {\r\n eventType: HistoryEventType;\r\n data: HistoryData;\r\n}\r\n\r\nfunction HistoryEventTypeCell({ eventType, data }: HistoryEventTypeCellProps) {\r\n const iconName = getIconName(eventType, data);\r\n const iconKind = getIconKind(eventType);\r\n const tooltip = getTooltip(eventType, data);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default HistoryEventTypeCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"HistoryEventTypeCell-cell-Q8TMw TableRowCell-cell-giPrj\"};","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport Column from 'Components/Table/Column';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { icons, tooltipPositions } from 'Helpers/Props';\r\nimport Language from 'Language/Language';\r\nimport MovieFormats from 'Movie/MovieFormats';\r\nimport MovieLanguages from 'Movie/MovieLanguages';\r\nimport MovieQuality from 'Movie/MovieQuality';\r\nimport MovieTitleLink from 'Movie/MovieTitleLink';\r\nimport useMovie from 'Movie/useMovie';\r\nimport { QualityModel } from 'Quality/Quality';\r\nimport { fetchHistory, markAsFailed } from 'Store/Actions/historyActions';\r\nimport CustomFormat from 'typings/CustomFormat';\r\nimport { HistoryData, HistoryEventType } from 'typings/History';\r\nimport formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';\r\nimport HistoryDetailsModal from './Details/HistoryDetailsModal';\r\nimport HistoryEventTypeCell from './HistoryEventTypeCell';\r\nimport styles from './HistoryRow.css';\r\n\r\ninterface HistoryRowProps {\r\n id: number;\r\n movieId: number;\r\n languages: Language[];\r\n quality: QualityModel;\r\n customFormats?: CustomFormat[];\r\n customFormatScore: number;\r\n qualityCutoffNotMet: boolean;\r\n eventType: HistoryEventType;\r\n sourceTitle: string;\r\n date: string;\r\n data: HistoryData;\r\n downloadId?: string;\r\n isMarkingAsFailed?: boolean;\r\n markAsFailedError?: object;\r\n columns: Column[];\r\n}\r\n\r\nfunction HistoryRow(props: HistoryRowProps) {\r\n const {\r\n id,\r\n movieId,\r\n languages,\r\n quality,\r\n customFormats = [],\r\n customFormatScore,\r\n qualityCutoffNotMet,\r\n eventType,\r\n sourceTitle,\r\n date,\r\n data,\r\n downloadId,\r\n isMarkingAsFailed = false,\r\n markAsFailedError,\r\n columns,\r\n } = props;\r\n\r\n const wasMarkingAsFailed = usePrevious(isMarkingAsFailed);\r\n const dispatch = useDispatch();\r\n const movie = useMovie(movieId);\r\n\r\n const [isDetailsModalOpen, setIsDetailsModalOpen] = useState(false);\r\n\r\n const handleDetailsPress = useCallback(() => {\r\n setIsDetailsModalOpen(true);\r\n }, [setIsDetailsModalOpen]);\r\n\r\n const handleDetailsModalClose = useCallback(() => {\r\n setIsDetailsModalOpen(false);\r\n }, [setIsDetailsModalOpen]);\r\n\r\n const handleMarkAsFailedPress = useCallback(() => {\r\n dispatch(markAsFailed({ id }));\r\n }, [id, dispatch]);\r\n\r\n useEffect(() => {\r\n if (wasMarkingAsFailed && !isMarkingAsFailed && !markAsFailedError) {\r\n setIsDetailsModalOpen(false);\r\n dispatch(fetchHistory());\r\n }\r\n }, [\r\n wasMarkingAsFailed,\r\n isMarkingAsFailed,\r\n markAsFailedError,\r\n setIsDetailsModalOpen,\r\n dispatch,\r\n ]);\r\n\r\n if (!movie) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {columns.map((column) => {\r\n const { name, isVisible } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'eventType') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'movieMetadata.sortTitle') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'languages') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'quality') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'customFormats') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'date') {\r\n return ;\r\n }\r\n\r\n if (name === 'downloadClient') {\r\n const downloadClientName =\r\n 'downloadClientName' in data ? data.downloadClientName : null;\r\n const downloadClient =\r\n 'downloadClient' in data ? data.downloadClient : null;\r\n\r\n return (\r\n \r\n {downloadClientName ?? downloadClient ?? ''}\r\n \r\n );\r\n }\r\n\r\n if (name === 'indexer') {\r\n return (\r\n \r\n {'indexer' in data ? data.indexer : ''}\r\n \r\n );\r\n }\r\n\r\n if (name === 'customFormatScore') {\r\n return (\r\n \r\n }\r\n position={tooltipPositions.BOTTOM}\r\n />\r\n \r\n );\r\n }\r\n\r\n if (name === 'releaseGroup') {\r\n return (\r\n \r\n {'releaseGroup' in data ? data.releaseGroup : ''}\r\n \r\n );\r\n }\r\n\r\n if (name === 'sourceTitle') {\r\n return {sourceTitle};\r\n }\r\n\r\n if (name === 'details') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return null;\r\n })}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default HistoryRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"downloadClient\":\"HistoryRow-downloadClient-bHUPB TableRowCell-cell-giPrj\",\"indexer\":\"HistoryRow-indexer-gwnyu TableRowCell-cell-giPrj\",\"customFormatScore\":\"HistoryRow-customFormatScore-xkDCa TableRowCell-cell-giPrj\",\"releaseGroup\":\"HistoryRow-releaseGroup-Py4iD TableRowCell-cell-giPrj\",\"details\":\"HistoryRow-details-XUSQz TableRowCell-cell-giPrj\"};","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport TablePager from 'Components/Table/TablePager';\r\nimport usePaging from 'Components/Table/usePaging';\r\nimport useCurrentPage from 'Helpers/Hooks/useCurrentPage';\r\nimport { align, icons, kinds } from 'Helpers/Props';\r\nimport createMoviesFetchingSelector from 'Movie/createMoviesFetchingSelector';\r\nimport {\r\n clearHistory,\r\n fetchHistory,\r\n gotoHistoryPage,\r\n setHistoryFilter,\r\n setHistorySort,\r\n setHistoryTableOption,\r\n} from 'Store/Actions/historyActions';\r\nimport { createCustomFiltersSelector } from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport { TableOptionsChangePayload } from 'typings/Table';\r\nimport {\r\n registerPagePopulator,\r\n unregisterPagePopulator,\r\n} from 'Utilities/pagePopulator';\r\nimport translate from 'Utilities/String/translate';\r\nimport HistoryFilterModal from './HistoryFilterModal';\r\nimport HistoryRow from './HistoryRow';\r\n\r\nfunction History() {\r\n const requestCurrentPage = useCurrentPage();\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n columns,\r\n selectedFilterKey,\r\n filters,\r\n sortKey,\r\n sortDirection,\r\n page,\r\n pageSize,\r\n totalPages,\r\n totalRecords,\r\n } = useSelector((state: AppState) => state.history);\r\n\r\n const { isMoviesFetching, isMoviesPopulated, moviesError } = useSelector(\r\n createMoviesFetchingSelector()\r\n );\r\n const customFilters = useSelector(createCustomFiltersSelector('history'));\r\n const dispatch = useDispatch();\r\n\r\n const isFetchingAny = isFetching || isMoviesFetching;\r\n const isAllPopulated = isPopulated && (isMoviesPopulated || !items.length);\r\n const hasError = error || moviesError;\r\n\r\n const {\r\n handleFirstPagePress,\r\n handlePreviousPagePress,\r\n handleNextPagePress,\r\n handleLastPagePress,\r\n handlePageSelect,\r\n } = usePaging({\r\n page,\r\n totalPages,\r\n gotoPage: gotoHistoryPage,\r\n });\r\n\r\n const handleFilterSelect = useCallback(\r\n (selectedFilterKey: string) => {\r\n dispatch(setHistoryFilter({ selectedFilterKey }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleSortPress = useCallback(\r\n (sortKey: string) => {\r\n dispatch(setHistorySort({ sortKey }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleTableOptionChange = useCallback(\r\n (payload: TableOptionsChangePayload) => {\r\n dispatch(setHistoryTableOption(payload));\r\n\r\n if (payload.pageSize) {\r\n dispatch(gotoHistoryPage({ page: 1 }));\r\n }\r\n },\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n if (requestCurrentPage) {\r\n dispatch(fetchHistory());\r\n } else {\r\n dispatch(gotoHistoryPage({ page: 1 }));\r\n }\r\n\r\n return () => {\r\n dispatch(clearHistory());\r\n };\r\n }, [requestCurrentPage, dispatch]);\r\n\r\n useEffect(() => {\r\n const repopulate = () => {\r\n dispatch(fetchHistory());\r\n };\r\n\r\n registerPagePopulator(repopulate);\r\n\r\n return () => {\r\n unregisterPagePopulator(repopulate);\r\n };\r\n }, [dispatch]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {isFetchingAny && !isAllPopulated ? : null}\r\n\r\n {!isFetchingAny && hasError ? (\r\n {translate('HistoryLoadError')}\r\n ) : null}\r\n\r\n {\r\n // If history isPopulated and it's empty show no history found and don't\r\n // wait for the movies to populate because they are never coming.\r\n\r\n isPopulated && !hasError && !items.length ? (\r\n {translate('NoHistoryFound')}\r\n ) : null\r\n }\r\n\r\n {isAllPopulated && !hasError && items.length ? (\r\n
\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n\r\n \r\n
\r\n ) : null}\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default History;\r\n","import React, { Component } from 'react';\r\nimport styles from './PageToolbarSeparator.css';\r\n\r\nclass PageToolbarSeparator extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default PageToolbarSeparator;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"separator\":\"PageToolbarSeparator-separator-N1WHF\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FilterModal from 'Components/Filter/FilterModal';\r\nimport { setQueueFilter } from 'Store/Actions/queueActions';\r\n\r\nfunction createQueueSelector() {\r\n return createSelector(\r\n (state: AppState) => state.queue.paged.items,\r\n (queueItems) => {\r\n return queueItems;\r\n }\r\n );\r\n}\r\n\r\nfunction createFilterBuilderPropsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.queue.paged.filterBuilderProps,\r\n (filterBuilderProps) => {\r\n return filterBuilderProps;\r\n }\r\n );\r\n}\r\n\r\ninterface QueueFilterModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nexport default function QueueFilterModal(props: QueueFilterModalProps) {\r\n const sectionItems = useSelector(createQueueSelector());\r\n const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());\r\n const customFilterType = 'queue';\r\n\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSetFilter = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setQueueFilter(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport { gotoQueuePage, setQueueOption } from 'Store/Actions/queueActions';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction QueueOptions() {\r\n const dispatch = useDispatch();\r\n const { includeUnknownMovieItems } = useSelector(\r\n (state: AppState) => state.queue.options\r\n );\r\n\r\n const handleOptionChange = useCallback(\r\n ({ name, value }: CheckInputChanged) => {\r\n dispatch(\r\n setQueueOption({\r\n [name]: value,\r\n })\r\n );\r\n\r\n if (name === 'includeUnknownMovieItems') {\r\n dispatch(gotoQueuePage({ page: 1 }));\r\n }\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n {translate('ShowUnknownMovieItems')}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default QueueOptions;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"torrent\":\"ProtocolLabel-torrent-Fhltw Label-label-DYldh\",\"usenet\":\"ProtocolLabel-usenet-HVp5Y Label-label-DYldh\",\"unknown\":\"ProtocolLabel-unknown-gwrqY Label-label-DYldh\"};","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport styles from './ProtocolLabel.css';\r\n\r\ninterface ProtocolLabelProps {\r\n protocol: DownloadProtocol;\r\n}\r\n\r\nfunction ProtocolLabel({ protocol }: ProtocolLabelProps) {\r\n const protocolName = protocol === 'usenet' ? 'nzb' : protocol;\r\n\r\n return ;\r\n}\r\n\r\nexport default ProtocolLabel;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"ProgressBar-container-VCeFi\",\"progressBar\":\"ProgressBar-progressBar-xAcCf\",\"default\":\"ProgressBar-default-HtiNn\",\"inverse\":\"ProgressBar-inverse-Zalm9\",\"primary\":\"ProgressBar-primary-ev7yC\",\"danger\":\"ProgressBar-danger-c24TF\",\"success\":\"ProgressBar-success-l1duR\",\"purple\":\"ProgressBar-purple-P2P7Z\",\"warning\":\"ProgressBar-warning-vai87\",\"info\":\"ProgressBar-info-OnZQe\",\"queue\":\"ProgressBar-queue-yKtQI\",\"frontTextContainer\":\"ProgressBar-frontTextContainer-zt7hp\",\"backTextContainer\":\"ProgressBar-backTextContainer-RT0yM\",\"backText\":\"ProgressBar-backText-UABss\",\"frontText\":\"ProgressBar-frontText-hTZfF\",\"small\":\"ProgressBar-small-XrF6k\",\"medium\":\"ProgressBar-medium-WxfXU\",\"large\":\"ProgressBar-large-oJAS7\"};","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport { ColorImpairedConsumer } from 'App/ColorImpairedContext';\r\nimport { Kind } from 'Helpers/Props/kinds';\r\nimport { Size } from 'Helpers/Props/sizes';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ProgressBar.css';\r\n\r\ninterface ProgressBarProps {\r\n className?: string;\r\n containerClassName?: string;\r\n title?: string;\r\n progress: number;\r\n precision?: number;\r\n showText?: boolean;\r\n text?: string;\r\n kind?: Extract;\r\n size?: Extract;\r\n width?: number;\r\n}\r\n\r\nfunction ProgressBar({\r\n className = styles.progressBar,\r\n containerClassName = styles.container,\r\n title,\r\n progress,\r\n precision = 1,\r\n showText = false,\r\n text,\r\n kind = 'primary',\r\n size = 'medium',\r\n width,\r\n}: ProgressBarProps) {\r\n const progressPercent = `${progress.toFixed(precision)}%`;\r\n const progressText = text || progressPercent;\r\n const actualWidth = width ? `${width}px` : '100%';\r\n\r\n return (\r\n \r\n {(enableColorImpairedMode) => {\r\n return (\r\n \r\n {showText && width ? (\r\n \r\n
\r\n
{progressText}
\r\n
\r\n
\r\n ) : null}\r\n\r\n \r\n\r\n {showText ? (\r\n \r\n \r\n
{progressText}
\r\n \r\n \r\n ) : null}\r\n \r\n );\r\n }}\r\n \r\n );\r\n}\r\n\r\nexport default ProgressBar;\r\n","import React, { SyntheticEvent, useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRowButton from 'Components/Table/TableRowButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport { removeFavoriteFolder } from 'Store/Actions/interactiveImportActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './FavoriteFolderRow.css';\r\n\r\ninterface FavoriteFolderRowProps {\r\n folder: string;\r\n onPress: (folder: string) => unknown;\r\n}\r\n\r\nfunction FavoriteFolderRow({ folder, onPress }: FavoriteFolderRowProps) {\r\n const dispatch = useDispatch();\r\n\r\n const handlePress = useCallback(() => {\r\n onPress(folder);\r\n }, [folder, onPress]);\r\n\r\n const handleRemoveFavoritePress = useCallback(\r\n (e: SyntheticEvent) => {\r\n e.stopPropagation();\r\n\r\n dispatch(removeFavoriteFolder({ folder }));\r\n },\r\n [folder, dispatch]\r\n );\r\n\r\n return (\r\n \r\n {folder}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default FavoriteFolderRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"FavoriteFolderRow-actions-vOUqv TableRowCell-cell-giPrj\"};","import React, { SyntheticEvent, useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRowButton from 'Components/Table/TableRowButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport {\r\n addFavoriteFolder,\r\n removeFavoriteFolder,\r\n removeRecentFolder,\r\n} from 'Store/Actions/interactiveImportActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './RecentFolderRow.css';\r\n\r\ninterface RecentFolderRowProps {\r\n folder: string;\r\n lastUsed: string;\r\n isFavorite: boolean;\r\n onPress: (folder: string) => unknown;\r\n}\r\n\r\nfunction RecentFolderRow({\r\n folder,\r\n lastUsed,\r\n isFavorite,\r\n onPress,\r\n}: RecentFolderRowProps) {\r\n const dispatch = useDispatch();\r\n\r\n const handlePress = useCallback(() => {\r\n onPress(folder);\r\n }, [folder, onPress]);\r\n\r\n const handleFavoritePress = useCallback(\r\n (e: SyntheticEvent) => {\r\n e.stopPropagation();\r\n\r\n if (isFavorite) {\r\n dispatch(removeFavoriteFolder({ folder }));\r\n } else {\r\n dispatch(addFavoriteFolder({ folder }));\r\n }\r\n },\r\n [folder, isFavorite, dispatch]\r\n );\r\n\r\n const handleRemovePress = useCallback(\r\n (e: SyntheticEvent) => {\r\n e.stopPropagation();\r\n\r\n dispatch(removeRecentFolder({ folder }));\r\n },\r\n [folder, dispatch]\r\n );\r\n\r\n return (\r\n \r\n {folder}\r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default RecentFolderRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"RecentFolderRow-actions-Z_qCn TableRowCell-cell-giPrj\"};","// extracted by mini-css-extract-plugin\nexport default {\"foldersContainer\":\"InteractiveImportSelectFolderModalContent-foldersContainer-Ml12n\",\"foldersTitle\":\"InteractiveImportSelectFolderModalContent-foldersTitle-fz9DV\",\"buttonsContainer\":\"InteractiveImportSelectFolderModalContent-buttonsContainer-Zups9\",\"buttonContainer\":\"InteractiveImportSelectFolderModalContent-buttonContainer-VzBje\",\"button\":\"InteractiveImportSelectFolderModalContent-button-Q3COb Button-button-paJ9a Link-link-RInnp\",\"buttonIcon\":\"InteractiveImportSelectFolderModalContent-buttonIcon-XRLz8\"};","import React, { useCallback, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport PathInputConnector from 'Components/Form/PathInputConnector';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { icons, kinds, sizes } from 'Helpers/Props';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { addRecentFolder } from 'Store/Actions/interactiveImportActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport FavoriteFolderRow from './FavoriteFolderRow';\r\nimport RecentFolderRow from './RecentFolderRow';\r\nimport styles from './InteractiveImportSelectFolderModalContent.css';\r\n\r\nconst favoriteFoldersColumns = [\r\n {\r\n name: 'folder',\r\n label: () => translate('Folder'),\r\n },\r\n {\r\n name: 'actions',\r\n label: '',\r\n },\r\n];\r\n\r\nconst recentFoldersColumns = [\r\n {\r\n name: 'folder',\r\n label: () => translate('Folder'),\r\n },\r\n {\r\n name: 'lastUsed',\r\n label: () => translate('LastUsed'),\r\n },\r\n {\r\n name: 'actions',\r\n label: '',\r\n },\r\n];\r\n\r\ninterface InteractiveImportSelectFolderModalContentProps {\r\n modalTitle: string;\r\n onFolderSelect(folder: string): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction InteractiveImportSelectFolderModalContent(\r\n props: InteractiveImportSelectFolderModalContentProps\r\n) {\r\n const { modalTitle, onFolderSelect, onModalClose } = props;\r\n const [folder, setFolder] = useState('');\r\n const dispatch = useDispatch();\r\n const { favoriteFolders, recentFolders } = useSelector(\r\n createSelector(\r\n (state: AppState) => state.interactiveImport,\r\n (interactiveImport) => {\r\n return {\r\n favoriteFolders: interactiveImport.favoriteFolders,\r\n recentFolders: interactiveImport.recentFolders,\r\n };\r\n }\r\n )\r\n );\r\n\r\n const favoriteFolderMap = useMemo(() => {\r\n return new Map(favoriteFolders.map((f) => [f.folder, f]));\r\n }, [favoriteFolders]);\r\n\r\n const onPathChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n setFolder(value);\r\n },\r\n [setFolder]\r\n );\r\n\r\n const onRecentPathPress = useCallback(\r\n (value: string) => {\r\n setFolder(value);\r\n },\r\n [setFolder]\r\n );\r\n\r\n const onQuickImportPress = useCallback(() => {\r\n dispatch(addRecentFolder({ folder }));\r\n\r\n dispatch(\r\n executeCommand({\r\n name: commandNames.DOWNLOADED_MOVIES_SCAN,\r\n path: folder,\r\n })\r\n );\r\n\r\n onModalClose();\r\n }, [folder, onModalClose, dispatch]);\r\n\r\n const onInteractiveImportPress = useCallback(() => {\r\n dispatch(addRecentFolder({ folder }));\r\n onFolderSelect(folder);\r\n }, [folder, onFolderSelect, dispatch]);\r\n\r\n return (\r\n \r\n \r\n {translate('SelectFolderModalTitle', { modalTitle })}\r\n \r\n\r\n \r\n \r\n\r\n {favoriteFolders.length ? (\r\n
\r\n
\r\n {translate('FavoriteFolders')}\r\n
\r\n\r\n \r\n \r\n {favoriteFolders.map((favoriteFolder) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n ) : null}\r\n\r\n {recentFolders.length ? (\r\n
\r\n
\r\n {translate('RecentFolders')}\r\n
\r\n\r\n \r\n \r\n {recentFolders\r\n .slice(0)\r\n .reverse()\r\n .map((recentFolder) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n ) : null}\r\n\r\n
\r\n
\r\n \r\n \r\n {translate('MoveAutomatically')}\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n {translate('InteractiveImport')}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default InteractiveImportSelectFolderModalContent;\r\n","import React, { useCallback, useState } from 'react';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, scrollDirections } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './SelectIndexerFlagsModalContent.css';\r\n\r\ninterface SelectIndexerFlagsModalContentProps {\r\n indexerFlags: number;\r\n modalTitle: string;\r\n onIndexerFlagsSelect(indexerFlags: number): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectIndexerFlagsModalContent(\r\n props: SelectIndexerFlagsModalContentProps\r\n) {\r\n const { modalTitle, onIndexerFlagsSelect, onModalClose } = props;\r\n const [indexerFlags, setIndexerFlags] = useState(props.indexerFlags);\r\n\r\n const onIndexerFlagsChange = useCallback(\r\n ({ value }: { value: number }) => {\r\n setIndexerFlags(value);\r\n },\r\n [setIndexerFlags]\r\n );\r\n\r\n const onIndexerFlagsSelectWrapper = useCallback(() => {\r\n onIndexerFlagsSelect(indexerFlags);\r\n }, [indexerFlags, onIndexerFlagsSelect]);\r\n\r\n return (\r\n \r\n \r\n {translate('SetIndexerFlagsModalTitle', { modalTitle })}\r\n \r\n\r\n \r\n
\r\n \r\n {translate('IndexerFlags')}\r\n\r\n \r\n \r\n
\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default SelectIndexerFlagsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalBody\":\"SelectIndexerFlagsModalContent-modalBody-sne5e ModalBody-modalBody-RVK6D\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport SelectIndexerFlagsModalContent from './SelectIndexerFlagsModalContent';\r\n\r\ninterface SelectIndexerFlagsModalProps {\r\n isOpen: boolean;\r\n indexerFlags: number;\r\n modalTitle: string;\r\n onIndexerFlagsSelect(indexerFlags: number): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectIndexerFlagsModal(props: SelectIndexerFlagsModalProps) {\r\n const {\r\n isOpen,\r\n indexerFlags,\r\n modalTitle,\r\n onIndexerFlagsSelect,\r\n onModalClose,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelectIndexerFlagsModal;\r\n","import React, { useCallback, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { LanguageSettingsAppState } from 'App/State/SettingsAppState';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport Language from 'Language/Language';\r\nimport createLanguagesSelector from 'Store/Selectors/createLanguagesSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './SelectLanguageModalContent.css';\r\n\r\ninterface SelectLanguageModalContentProps {\r\n languageIds: number[];\r\n modalTitle: string;\r\n onLanguagesSelect(languages: Language[]): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction createFilteredLanguagesSelector() {\r\n return createSelector(createLanguagesSelector(), (languages) => {\r\n const { isFetching, isPopulated, error, items } =\r\n languages as LanguageSettingsAppState;\r\n\r\n const filterItems = ['Any', 'Original'];\r\n const filteredLanguages = items.filter(\r\n (lang: Language) => !filterItems.includes(lang.name)\r\n );\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items: filteredLanguages,\r\n };\r\n });\r\n}\r\n\r\nfunction SelectLanguageModalContent(props: SelectLanguageModalContentProps) {\r\n const { modalTitle, onLanguagesSelect, onModalClose } = props;\r\n\r\n const { isFetching, isPopulated, error, items } = useSelector(\r\n createFilteredLanguagesSelector()\r\n );\r\n\r\n const [languageIds, setLanguageIds] = useState(props.languageIds);\r\n\r\n const onLanguageChange = useCallback(\r\n ({ name, value }: { name: string; value: boolean }) => {\r\n const changedId = parseInt(name);\r\n\r\n let newLanguages = [...languageIds];\r\n\r\n if (value) {\r\n newLanguages.push(changedId);\r\n } else {\r\n newLanguages = languageIds.filter((i) => i !== changedId);\r\n }\r\n\r\n setLanguageIds(newLanguages);\r\n },\r\n [languageIds, setLanguageIds]\r\n );\r\n\r\n const onLanguagesSelectWrapper = useCallback(() => {\r\n const languages = items.filter((lang) => languageIds.includes(lang.id));\r\n\r\n onLanguagesSelect(languages);\r\n }, [items, languageIds, onLanguagesSelect]);\r\n\r\n return (\r\n \r\n \r\n {translate('SelectLanguageModalTitle', { modalTitle })}\r\n \r\n\r\n \r\n {isFetching ? : null}\r\n\r\n {!isFetching && error ? (\r\n {translate('LanguagesLoadError')}\r\n ) : null}\r\n\r\n {isPopulated && !error ? (\r\n
\r\n {items.map((language) => {\r\n return (\r\n \r\n {language.name}\r\n \r\n \r\n );\r\n })}\r\n \r\n ) : null}\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default SelectLanguageModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"languageInput\":\"SelectLanguageModalContent-languageInput-qv4lb\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport Language from 'Language/Language';\r\nimport SelectLanguageModalContent from './SelectLanguageModalContent';\r\n\r\ninterface SelectLanguageModalProps {\r\n isOpen: boolean;\r\n languageIds: number[];\r\n modalTitle: string;\r\n onLanguagesSelect(languages: Language[]): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectLanguageModal(props: SelectLanguageModalProps) {\r\n const { isOpen, languageIds, modalTitle, onLanguagesSelect, onModalClose } =\r\n props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelectLanguageModal;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './VirtualTableRow.css';\r\n\r\nfunction VirtualTableRow(props) {\r\n const {\r\n className,\r\n children,\r\n style,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nVirtualTableRow.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n style: PropTypes.object.isRequired,\r\n children: PropTypes.node\r\n};\r\n\r\nVirtualTableRow.defaultProps = {\r\n className: styles.row\r\n};\r\n\r\nexport default VirtualTableRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"VirtualTableRow-row-cfNxh\"};","import React from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport VirtualTableRow from './VirtualTableRow';\r\nimport styles from './VirtualTableRowButton.css';\r\n\r\nfunction VirtualTableRowButton(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default VirtualTableRowButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"VirtualTableRowButton-row-MqcqS Link-link-RInnp VirtualTableRow-row-cfNxh\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './VirtualTableHeader.css';\r\n\r\nfunction VirtualTableHeader({ children }) {\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nVirtualTableHeader.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default VirtualTableHeader;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"VirtualTableHeader-header-BLqeA\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons, sortDirections } from 'Helpers/Props';\r\nimport styles from './VirtualTableHeaderCell.css';\r\n\r\nexport function headerRenderer(headerProps) {\r\n const {\r\n columnData = {},\r\n dataKey,\r\n label\r\n } = headerProps;\r\n\r\n return (\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n \r\n {label}\r\n \r\n );\r\n}\r\n\r\nclass VirtualTableHeaderCell extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n name,\r\n fixedSortDirection\r\n } = this.props;\r\n\r\n if (fixedSortDirection) {\r\n this.props.onSortPress(name, fixedSortDirection);\r\n } else {\r\n this.props.onSortPress(name);\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n name,\r\n isSortable,\r\n sortKey,\r\n sortDirection,\r\n fixedSortDirection,\r\n children,\r\n onSortPress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const isSorting = isSortable && sortKey === name;\r\n const sortIcon = sortDirection === sortDirections.ASCENDING ?\r\n icons.SORT_ASCENDING :\r\n icons.SORT_DESCENDING;\r\n\r\n return (\r\n isSortable ?\r\n \r\n {children}\r\n\r\n {\r\n isSorting &&\r\n \r\n }\r\n :\r\n\r\n
\r\n {children}\r\n
\r\n );\r\n }\r\n}\r\n\r\nVirtualTableHeaderCell.propTypes = {\r\n className: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n isSortable: PropTypes.bool,\r\n sortKey: PropTypes.string,\r\n fixedSortDirection: PropTypes.string,\r\n sortDirection: PropTypes.string,\r\n children: PropTypes.node,\r\n onSortPress: PropTypes.func\r\n};\r\n\r\nVirtualTableHeaderCell.defaultProps = {\r\n className: styles.headerCell,\r\n isSortable: false\r\n};\r\n\r\nexport default VirtualTableHeaderCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"headerCell\":\"VirtualTableHeaderCell-headerCell-oq_lz\",\"sortIcon\":\"VirtualTableHeaderCell-sortIcon-IdM2s\"};","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"SelectMovieModalTableHeader-title-MqdjD VirtualTableHeaderCell-headerCell-oq_lz\",\"year\":\"SelectMovieModalTableHeader-year-wbjuC VirtualTableHeaderCell-headerCell-oq_lz\",\"imdbId\":\"SelectMovieModalTableHeader-imdbId-s7Brn VirtualTableHeaderCell-headerCell-oq_lz\",\"tmdbId\":\"SelectMovieModalTableHeader-tmdbId-VHTom VirtualTableHeaderCell-headerCell-oq_lz\"};","import React from 'react';\r\nimport Column from 'Components/Table/Column';\r\nimport VirtualTableHeader from 'Components/Table/VirtualTableHeader';\r\nimport VirtualTableHeaderCell from 'Components/Table/VirtualTableHeaderCell';\r\nimport styles from './SelectMovieModalTableHeader.css';\r\n\r\ninterface SelectMovieModalTableHeaderProps {\r\n columns: Column[];\r\n}\r\n\r\nfunction SelectMovieModalTableHeader(props: SelectMovieModalTableHeaderProps) {\r\n const { columns } = props;\r\n\r\n return (\r\n \r\n {columns.map((column) => {\r\n const { name, label, isVisible } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {typeof label === 'function' ? label() : label}\r\n \r\n );\r\n })}\r\n \r\n );\r\n}\r\n\r\nexport default SelectMovieModalTableHeader;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './VirtualTableRowCell.css';\r\n\r\nfunction VirtualTableRowCell(props) {\r\n const {\r\n className,\r\n children,\r\n title\r\n } = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nVirtualTableRowCell.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n children: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n title: PropTypes.string\r\n};\r\n\r\nVirtualTableRowCell.defaultProps = {\r\n className: styles.cell,\r\n title: ''\r\n};\r\n\r\nexport default VirtualTableRowCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\"};","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';\r\nimport styles from './SelectMovieRow.css';\r\n\r\ninterface SelectMovieRowProps {\r\n title: string;\r\n tmdbId: number;\r\n imdbId?: string;\r\n year: number;\r\n}\r\n\r\nfunction SelectMovieRow({ title, year, tmdbId, imdbId }: SelectMovieRowProps) {\r\n return (\r\n <>\r\n \r\n {title}\r\n \r\n\r\n {year}\r\n\r\n \r\n {imdbId ? : null}\r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelectMovieRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"SelectMovieRow-cell-xLG5p VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"title\":\"SelectMovieRow-title-o5EzM SelectMovieRow-cell-xLG5p VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"year\":\"SelectMovieRow-year-J0q1L SelectMovieRow-cell-xLG5p VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"tmdbId\":\"SelectMovieRow-tmdbId-vemhj SelectMovieRow-cell-xLG5p VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"imdbId\":\"SelectMovieRow-imdbId-RtVJY SelectMovieRow-cell-xLG5p VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\"};","import { throttle } from 'lodash';\r\nimport React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { FixedSizeList as List, ListChildComponentProps } from 'react-window';\r\nimport TextInput from 'Components/Form/TextInput';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport Column from 'Components/Table/Column';\r\nimport VirtualTableRowButton from 'Components/Table/VirtualTableRowButton';\r\nimport { scrollDirections } from 'Helpers/Props';\r\nimport Movie from 'Movie/Movie';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport SelectMovieModalTableHeader from './SelectMovieModalTableHeader';\r\nimport SelectMovieRow from './SelectMovieRow';\r\nimport styles from './SelectMovieModalContent.css';\r\n\r\nconst columns = [\r\n {\r\n name: 'title',\r\n label: () => translate('Title'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'year',\r\n label: () => translate('Year'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'imdbId',\r\n label: () => translate('IMDbId'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'tmdbId',\r\n label: () => translate('TMDBId'),\r\n isVisible: true,\r\n },\r\n];\r\n\r\nconst bodyPadding = parseInt(dimensions.pageContentBodyPadding);\r\n\r\ninterface SelectMovieModalContentProps {\r\n modalTitle: string;\r\n onMovieSelect(movie: Movie): void;\r\n onModalClose(): void;\r\n}\r\n\r\ninterface RowItemData {\r\n items: Movie[];\r\n columns: Column[];\r\n onMovieSelect(movieId: number): void;\r\n}\r\n\r\nfunction Row({ index, style, data }: ListChildComponentProps) {\r\n const { items, onMovieSelect } = data;\r\n const movie = index >= items.length ? null : items[index];\r\n\r\n const handlePress = useCallback(() => {\r\n if (movie?.id) {\r\n onMovieSelect(movie.id);\r\n }\r\n }, [movie?.id, onMovieSelect]);\r\n\r\n if (movie == null) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction SelectMovieModalContent(props: SelectMovieModalContentProps) {\r\n const { modalTitle, onMovieSelect, onModalClose } = props;\r\n\r\n const listRef = useRef>(null);\r\n const scrollerRef = useRef(null);\r\n const allMovies: Movie[] = useSelector(createAllMoviesSelector());\r\n const [filter, setFilter] = useState('');\r\n const [size, setSize] = useState({ width: 0, height: 0 });\r\n const windowHeight = window.innerHeight;\r\n\r\n useEffect(() => {\r\n const current = scrollerRef?.current as HTMLElement;\r\n\r\n if (current) {\r\n const width = current.clientWidth;\r\n const height = current.clientHeight;\r\n const padding = bodyPadding - 5;\r\n\r\n setSize({\r\n width: width - padding * 2,\r\n height: height + padding,\r\n });\r\n }\r\n }, [windowHeight, scrollerRef]);\r\n\r\n useEffect(() => {\r\n const currentScrollerRef = scrollerRef.current as HTMLElement;\r\n const currentScrollListener = currentScrollerRef;\r\n\r\n const handleScroll = throttle(() => {\r\n const { offsetTop = 0 } = currentScrollerRef;\r\n const scrollTop = currentScrollerRef.scrollTop - offsetTop;\r\n\r\n listRef.current?.scrollTo(scrollTop);\r\n }, 10);\r\n\r\n currentScrollListener.addEventListener('scroll', handleScroll);\r\n\r\n return () => {\r\n handleScroll.cancel();\r\n\r\n if (currentScrollListener) {\r\n currentScrollListener.removeEventListener('scroll', handleScroll);\r\n }\r\n };\r\n }, [listRef, scrollerRef]);\r\n\r\n const onFilterChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n setFilter(value);\r\n },\r\n [setFilter]\r\n );\r\n\r\n const onMovieSelectWrapper = useCallback(\r\n (movieId: number) => {\r\n const movie = allMovies.find((s) => s.id === movieId) as Movie;\r\n\r\n onMovieSelect(movie);\r\n },\r\n [allMovies, onMovieSelect]\r\n );\r\n\r\n const sortedMovies = useMemo(\r\n () => [...allMovies].sort(sortByProp('sortTitle')),\r\n [allMovies]\r\n );\r\n\r\n const items = useMemo(\r\n () =>\r\n sortedMovies.filter(\r\n (item) =>\r\n item.title.toLowerCase().includes(filter.toLowerCase()) ||\r\n item.tmdbId.toString().includes(filter) ||\r\n item.imdbId?.includes(filter)\r\n ),\r\n [sortedMovies, filter]\r\n );\r\n\r\n return (\r\n \r\n \r\n {translate('SelectMovieModalTitle', { modalTitle })}\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n ref={listRef}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'none',\r\n }}\r\n width={size.width}\r\n height={size.height}\r\n itemCount={items.length}\r\n itemSize={38}\r\n itemData={{\r\n items,\r\n columns,\r\n onMovieSelect: onMovieSelectWrapper,\r\n }}\r\n >\r\n {Row}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelectMovieModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalBody\":\"SelectMovieModalContent-modalBody-xDE0t ModalBody-modalBody-RVK6D\",\"filterInput\":\"SelectMovieModalContent-filterInput-rwFNa TextInput-input-svfXu Input-input-KWeec\",\"scroller\":\"SelectMovieModalContent-scroller-A6dXg\",\"footer\":\"SelectMovieModalContent-footer-SwY15 ModalFooter-modalFooter-wjkx5\",\"path\":\"SelectMovieModalContent-path-l3YAF\",\"buttons\":\"SelectMovieModalContent-buttons-Klt9w\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport Movie from 'Movie/Movie';\r\nimport SelectMovieModalContent from './SelectMovieModalContent';\r\n\r\ninterface SelectMovieModalProps {\r\n isOpen: boolean;\r\n modalTitle: string;\r\n onMovieSelect(movie: Movie): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectMovieModal(props: SelectMovieModalProps) {\r\n const { isOpen, modalTitle, onMovieSelect, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelectMovieModal;\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { Error } from 'App/State/AppSectionState';\r\nimport AppState from 'App/State/AppState';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport Quality, { QualityModel } from 'Quality/Quality';\r\nimport { fetchQualityProfileSchema } from 'Store/Actions/settingsActions';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport getQualities from 'Utilities/Quality/getQualities';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface QualitySchemaState {\r\n isFetching: boolean;\r\n isPopulated: boolean;\r\n error: Error;\r\n items: Quality[];\r\n}\r\n\r\nfunction createQualitySchemaSelector() {\r\n return createSelector(\r\n (state: AppState) => state.settings.qualityProfiles,\r\n (qualityProfiles): QualitySchemaState => {\r\n const { isSchemaFetching, isSchemaPopulated, schemaError, schema } =\r\n qualityProfiles;\r\n\r\n const items = getQualities(schema.items) as Quality[];\r\n\r\n return {\r\n isFetching: isSchemaFetching,\r\n isPopulated: isSchemaPopulated,\r\n error: schemaError,\r\n items,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface SelectQualityModalContentProps {\r\n qualityId: number;\r\n proper: boolean;\r\n real: boolean;\r\n modalTitle: string;\r\n onQualitySelect(quality: QualityModel): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectQualityModalContent(props: SelectQualityModalContentProps) {\r\n const { modalTitle, onQualitySelect, onModalClose } = props;\r\n\r\n const [qualityId, setQualityId] = useState(props.qualityId);\r\n const [proper, setProper] = useState(props.proper);\r\n const [real, setReal] = useState(props.real);\r\n\r\n const { isFetching, isPopulated, error, items } = useSelector(\r\n createQualitySchemaSelector()\r\n );\r\n const dispatch = useDispatch();\r\n\r\n useEffect(\r\n () => {\r\n dispatch(fetchQualityProfileSchema());\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n const qualityOptions = useMemo(() => {\r\n return items.map(({ id, name }) => {\r\n return {\r\n key: id,\r\n value: name,\r\n };\r\n });\r\n }, [items]);\r\n\r\n const onQualityChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n setQualityId(parseInt(value));\r\n },\r\n [setQualityId]\r\n );\r\n\r\n const onProperChange = useCallback(\r\n ({ value }: CheckInputChanged) => {\r\n setProper(value);\r\n },\r\n [setProper]\r\n );\r\n\r\n const onRealChange = useCallback(\r\n ({ value }: CheckInputChanged) => {\r\n setReal(value);\r\n },\r\n [setReal]\r\n );\r\n\r\n const onQualitySelectWrapper = useCallback(() => {\r\n const quality = items.find((item) => item.id === qualityId) as Quality;\r\n\r\n const revision = {\r\n version: proper ? 2 : 1,\r\n real: real ? 1 : 0,\r\n isRepack: false,\r\n };\r\n\r\n onQualitySelect({\r\n quality,\r\n revision,\r\n });\r\n }, [items, qualityId, proper, real, onQualitySelect]);\r\n\r\n return (\r\n \r\n \r\n {modalTitle} - {translate('SelectQuality')}\r\n \r\n\r\n \r\n {isFetching && }\r\n\r\n {!isFetching && error ? (\r\n {translate('QualitiesLoadError')}\r\n ) : null}\r\n\r\n {isPopulated && !error ? (\r\n
\r\n \r\n {translate('Quality')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Proper')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Real')}\r\n\r\n \r\n \r\n
\r\n ) : null}\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default SelectQualityModalContent;\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { QualityModel } from 'Quality/Quality';\r\nimport SelectQualityModalContent from './SelectQualityModalContent';\r\n\r\ninterface SelectQualityModalProps {\r\n isOpen: boolean;\r\n qualityId: number;\r\n proper: boolean;\r\n real: boolean;\r\n modalTitle: string;\r\n onQualitySelect(quality: QualityModel): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectQualityModal(props: SelectQualityModalProps) {\r\n const {\r\n isOpen,\r\n qualityId,\r\n proper,\r\n real,\r\n modalTitle,\r\n onQualitySelect,\r\n onModalClose,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelectQualityModal;\r\n","import React, { useCallback, useState } from 'react';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, scrollDirections } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './SelectReleaseGroupModalContent.css';\r\n\r\ninterface SelectReleaseGroupModalContentProps {\r\n releaseGroup: string;\r\n modalTitle: string;\r\n onReleaseGroupSelect(releaseGroup: string): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectReleaseGroupModalContent(\r\n props: SelectReleaseGroupModalContentProps\r\n) {\r\n const { modalTitle, onReleaseGroupSelect, onModalClose } = props;\r\n const [releaseGroup, setReleaseGroup] = useState(props.releaseGroup);\r\n\r\n const onReleaseGroupChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n setReleaseGroup(value);\r\n },\r\n [setReleaseGroup]\r\n );\r\n\r\n const onReleaseGroupSelectWrapper = useCallback(() => {\r\n onReleaseGroupSelect(releaseGroup);\r\n }, [releaseGroup, onReleaseGroupSelect]);\r\n\r\n return (\r\n \r\n \r\n {translate('SetReleaseGroupModalTitle', { modalTitle })}\r\n \r\n\r\n \r\n
\r\n \r\n {translate('ReleaseGroup')}\r\n\r\n \r\n \r\n
\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default SelectReleaseGroupModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalBody\":\"SelectReleaseGroupModalContent-modalBody-tIpUk ModalBody-modalBody-RVK6D\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport SelectReleaseGroupModalContent from './SelectReleaseGroupModalContent';\r\n\r\ninterface SelectReleaseGroupModalProps {\r\n isOpen: boolean;\r\n releaseGroup: string;\r\n modalTitle: string;\r\n onReleaseGroupSelect(releaseGroup: string): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectReleaseGroupModal(props: SelectReleaseGroupModalProps) {\r\n const {\r\n isOpen,\r\n releaseGroup,\r\n modalTitle,\r\n onReleaseGroupSelect,\r\n onModalClose,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelectReleaseGroupModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"TableRowCellButton-cell-_ezEn TableRowCell-cell-giPrj Link-link-RInnp\"};","import React, { ReactNode } from 'react';\r\nimport Link, { LinkProps } from 'Components/Link/Link';\r\nimport TableRowCell from './TableRowCell';\r\nimport styles from './TableRowCellButton.css';\r\n\r\ninterface TableRowCellButtonProps extends LinkProps {\r\n className?: string;\r\n children: ReactNode;\r\n}\r\n\r\nfunction TableRowCellButton(props: TableRowCellButtonProps) {\r\n const { className = styles.cell, ...otherProps } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default TableRowCellButton;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nconst createIndexerFlagsSelector = createSelector(\r\n (state: AppState) => state.settings.indexerFlags,\r\n (indexerFlags) => indexerFlags\r\n);\r\n\r\nexport default createIndexerFlagsSelector;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport createIndexerFlagsSelector from 'Store/Selectors/createIndexerFlagsSelector';\r\n\r\ninterface IndexerFlagsProps {\r\n indexerFlags: number;\r\n}\r\n\r\nfunction IndexerFlags({ indexerFlags = 0 }: IndexerFlagsProps) {\r\n const allIndexerFlags = useSelector(createIndexerFlagsSelector);\r\n\r\n const flags = allIndexerFlags.items.filter(\r\n // eslint-disable-next-line no-bitwise\r\n (item) => (indexerFlags & item.id) === item.id\r\n );\r\n\r\n return flags.length ? (\r\n
    \r\n {flags.map((flag, index) => {\r\n return
  • {flag.name}
  • ;\r\n })}\r\n
\r\n ) : null;\r\n}\r\n\r\nexport default IndexerFlags;\r\n","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport styles from './InteractiveImportRowCellPlaceholder.css';\r\n\r\ninterface InteractiveImportRowCellPlaceholderProps {\r\n isOptional?: boolean;\r\n}\r\n\r\nfunction InteractiveImportRowCellPlaceholder(\r\n props: InteractiveImportRowCellPlaceholderProps\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default InteractiveImportRowCellPlaceholder;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"placeholder\":\"InteractiveImportRowCellPlaceholder-placeholder-WVc4a\",\"optional\":\"InteractiveImportRowCellPlaceholder-optional-xZuLy\"};","// extracted by mini-css-extract-plugin\nexport default {\"relativePath\":\"InteractiveImportRow-relativePath-YbGTM TableRowCell-cell-giPrj\",\"quality\":\"InteractiveImportRow-quality-hlvRY TableRowCell-cell-giPrj\",\"languages\":\"InteractiveImportRow-languages-ozFm5 TableRowCell-cell-giPrj\",\"label\":\"InteractiveImportRow-label-vgyHk Label-label-DYldh\",\"reprocessing\":\"InteractiveImportRow-reprocessing-pGMNS LoadingIndicator-loading-DWfav\",\"customFormatTooltip\":\"InteractiveImportRow-customFormatTooltip-EeuhJ\"};","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Icon from 'Components/Icon';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRowCellButton from 'Components/Table/Cells/TableRowCellButton';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport Column from 'Components/Table/Column';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport SelectIndexerFlagsModal from 'InteractiveImport/IndexerFlags/SelectIndexerFlagsModal';\r\nimport SelectLanguageModal from 'InteractiveImport/Language/SelectLanguageModal';\r\nimport SelectMovieModal from 'InteractiveImport/Movie/SelectMovieModal';\r\nimport SelectQualityModal from 'InteractiveImport/Quality/SelectQualityModal';\r\nimport SelectReleaseGroupModal from 'InteractiveImport/ReleaseGroup/SelectReleaseGroupModal';\r\nimport Language from 'Language/Language';\r\nimport IndexerFlags from 'Movie/IndexerFlags';\r\nimport Movie from 'Movie/Movie';\r\nimport MovieFormats from 'Movie/MovieFormats';\r\nimport MovieLanguages from 'Movie/MovieLanguages';\r\nimport MovieQuality from 'Movie/MovieQuality';\r\nimport { QualityModel } from 'Quality/Quality';\r\nimport {\r\n reprocessInteractiveImportItems,\r\n updateInteractiveImportItem,\r\n} from 'Store/Actions/interactiveImportActions';\r\nimport CustomFormat from 'typings/CustomFormat';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport Rejection from 'typings/Rejection';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';\r\nimport translate from 'Utilities/String/translate';\r\nimport InteractiveImportRowCellPlaceholder from './InteractiveImportRowCellPlaceholder';\r\nimport styles from './InteractiveImportRow.css';\r\n\r\ntype SelectType =\r\n | 'movie'\r\n | 'releaseGroup'\r\n | 'quality'\r\n | 'language'\r\n | 'indexerFlags';\r\n\r\ntype SelectedChangeProps = SelectStateInputProps & {\r\n hasMovieFileId: boolean;\r\n};\r\n\r\ninterface InteractiveImportRowProps {\r\n id: number;\r\n allowMovieChange: boolean;\r\n relativePath: string;\r\n movie?: Movie;\r\n releaseGroup?: string;\r\n quality?: QualityModel;\r\n languages?: Language[];\r\n size: number;\r\n customFormats?: CustomFormat[];\r\n customFormatScore?: number;\r\n indexerFlags: number;\r\n rejections: Rejection[];\r\n columns: Column[];\r\n movieFileId?: number;\r\n isReprocessing?: boolean;\r\n isSelected?: boolean;\r\n modalTitle: string;\r\n onSelectedChange(result: SelectedChangeProps): void;\r\n onValidRowChange(id: number, isValid: boolean): void;\r\n}\r\n\r\nfunction InteractiveImportRow(props: InteractiveImportRowProps) {\r\n const {\r\n id,\r\n allowMovieChange,\r\n relativePath,\r\n movie,\r\n quality,\r\n languages,\r\n releaseGroup,\r\n size,\r\n customFormats,\r\n customFormatScore,\r\n indexerFlags,\r\n rejections,\r\n isSelected,\r\n modalTitle,\r\n movieFileId,\r\n columns,\r\n onSelectedChange,\r\n onValidRowChange,\r\n } = props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const isMovieColumnVisible = useMemo(\r\n () => columns.find((c) => c.name === 'movie')?.isVisible ?? false,\r\n [columns]\r\n );\r\n const isIndexerFlagsColumnVisible = useMemo(\r\n () => columns.find((c) => c.name === 'indexerFlags')?.isVisible ?? false,\r\n [columns]\r\n );\r\n\r\n const [selectModalOpen, setSelectModalOpen] = useState(\r\n null\r\n );\r\n\r\n useEffect(\r\n () => {\r\n if (allowMovieChange && movie && quality && languages && size > 0) {\r\n onSelectedChange({\r\n id,\r\n hasMovieFileId: !!movieFileId,\r\n value: true,\r\n shiftKey: false,\r\n });\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n useEffect(() => {\r\n const isValid = !!(movie && quality && languages);\r\n\r\n if (isSelected && !isValid) {\r\n onValidRowChange(id, false);\r\n } else {\r\n onValidRowChange(id, true);\r\n }\r\n }, [id, movie, quality, languages, isSelected, onValidRowChange]);\r\n\r\n const onSelectedChangeWrapper = useCallback(\r\n (result: SelectedChangeProps) => {\r\n onSelectedChange({\r\n ...result,\r\n hasMovieFileId: !!movieFileId,\r\n });\r\n },\r\n [movieFileId, onSelectedChange]\r\n );\r\n\r\n const selectRowAfterChange = useCallback(() => {\r\n if (!isSelected) {\r\n onSelectedChange({\r\n id,\r\n hasMovieFileId: !!movieFileId,\r\n value: true,\r\n shiftKey: false,\r\n });\r\n }\r\n }, [id, movieFileId, isSelected, onSelectedChange]);\r\n\r\n const onSelectModalClose = useCallback(() => {\r\n setSelectModalOpen(null);\r\n }, [setSelectModalOpen]);\r\n\r\n const onSelectMoviePress = useCallback(() => {\r\n setSelectModalOpen('movie');\r\n }, [setSelectModalOpen]);\r\n\r\n const onMovieSelect = useCallback(\r\n (movie: Movie) => {\r\n dispatch(\r\n updateInteractiveImportItem({\r\n id,\r\n movie,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: [id] }));\r\n\r\n setSelectModalOpen(null);\r\n selectRowAfterChange();\r\n },\r\n [id, dispatch, setSelectModalOpen, selectRowAfterChange]\r\n );\r\n\r\n const onSelectReleaseGroupPress = useCallback(() => {\r\n setSelectModalOpen('releaseGroup');\r\n }, [setSelectModalOpen]);\r\n\r\n const onReleaseGroupSelect = useCallback(\r\n (releaseGroup: string) => {\r\n dispatch(\r\n updateInteractiveImportItem({\r\n id,\r\n releaseGroup,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: [id] }));\r\n\r\n setSelectModalOpen(null);\r\n selectRowAfterChange();\r\n },\r\n [id, dispatch, setSelectModalOpen, selectRowAfterChange]\r\n );\r\n\r\n const onSelectQualityPress = useCallback(() => {\r\n setSelectModalOpen('quality');\r\n }, [setSelectModalOpen]);\r\n\r\n const onQualitySelect = useCallback(\r\n (quality: QualityModel) => {\r\n dispatch(\r\n updateInteractiveImportItem({\r\n id,\r\n quality,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: [id] }));\r\n\r\n setSelectModalOpen(null);\r\n selectRowAfterChange();\r\n },\r\n [id, dispatch, setSelectModalOpen, selectRowAfterChange]\r\n );\r\n\r\n const onSelectLanguagePress = useCallback(() => {\r\n setSelectModalOpen('language');\r\n }, [setSelectModalOpen]);\r\n\r\n const onLanguagesSelect = useCallback(\r\n (languages: Language[]) => {\r\n dispatch(\r\n updateInteractiveImportItem({\r\n id,\r\n languages,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: [id] }));\r\n\r\n setSelectModalOpen(null);\r\n selectRowAfterChange();\r\n },\r\n [id, dispatch, setSelectModalOpen, selectRowAfterChange]\r\n );\r\n\r\n const onSelectIndexerFlagsPress = useCallback(() => {\r\n setSelectModalOpen('indexerFlags');\r\n }, [setSelectModalOpen]);\r\n\r\n const onIndexerFlagsSelect = useCallback(\r\n (indexerFlags: number) => {\r\n dispatch(\r\n updateInteractiveImportItem({\r\n id,\r\n indexerFlags,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: [id] }));\r\n\r\n setSelectModalOpen(null);\r\n selectRowAfterChange();\r\n },\r\n [id, dispatch, setSelectModalOpen, selectRowAfterChange]\r\n );\r\n\r\n const movieTitle = movie ? movie.title : '';\r\n\r\n const showMoviePlaceholder = isSelected && !movie;\r\n const showReleaseGroupPlaceholder = isSelected && !releaseGroup;\r\n const showQualityPlaceholder = isSelected && !quality;\r\n const showLanguagePlaceholder = isSelected && !languages;\r\n const showIndexerFlagsPlaceholder = isSelected && !indexerFlags;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {relativePath}\r\n \r\n\r\n {isMovieColumnVisible ? (\r\n \r\n {showMoviePlaceholder ? (\r\n \r\n ) : (\r\n movieTitle\r\n )}\r\n \r\n ) : null}\r\n\r\n \r\n {showReleaseGroupPlaceholder ? (\r\n \r\n ) : (\r\n releaseGroup\r\n )}\r\n \r\n\r\n \r\n {showQualityPlaceholder && }\r\n\r\n {!showQualityPlaceholder && !!quality && (\r\n \r\n )}\r\n \r\n\r\n \r\n {showLanguagePlaceholder && }\r\n\r\n {!showLanguagePlaceholder && !!languages && (\r\n \r\n )}\r\n \r\n\r\n {formatBytes(size)}\r\n\r\n \r\n {customFormats?.length ? (\r\n \r\n \r\n \r\n }\r\n position={tooltipPositions.LEFT}\r\n />\r\n ) : null}\r\n \r\n\r\n {isIndexerFlagsColumnVisible ? (\r\n \r\n {showIndexerFlagsPlaceholder ? (\r\n \r\n ) : (\r\n <>\r\n {indexerFlags ? (\r\n }\r\n title={translate('IndexerFlags')}\r\n body={}\r\n position={tooltipPositions.LEFT}\r\n />\r\n ) : null}\r\n \r\n )}\r\n \r\n ) : null}\r\n\r\n \r\n {rejections.length ? (\r\n }\r\n title={translate('ReleaseRejected')}\r\n body={\r\n
    \r\n {rejections.map((rejection, index) => {\r\n return
  • {rejection.reason}
  • ;\r\n })}\r\n
\r\n }\r\n position={tooltipPositions.LEFT}\r\n canFlip={false}\r\n />\r\n ) : null}\r\n
\r\n\r\n \r\n\r\n \r\n\r\n 1 : false}\r\n real={quality ? quality.revision.real > 0 : false}\r\n modalTitle={modalTitle}\r\n onQualitySelect={onQualitySelect}\r\n onModalClose={onSelectModalClose}\r\n />\r\n\r\n l.id) : []}\r\n modalTitle={modalTitle}\r\n onLanguagesSelect={onLanguagesSelect}\r\n onModalClose={onSelectModalClose}\r\n />\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default InteractiveImportRow;\r\n","import { cloneDeep, without } from 'lodash';\r\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport InteractiveImportAppState from 'App/State/InteractiveImportAppState';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport SelectInput from 'Components/Form/SelectInput';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuButton from 'Components/Menu/MenuButton';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport SelectedMenuItem from 'Components/Menu/SelectedMenuItem';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Column from 'Components/Table/Column';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport useSelectState from 'Helpers/Hooks/useSelectState';\r\nimport { align, icons, kinds, scrollDirections } from 'Helpers/Props';\r\nimport ImportMode from 'InteractiveImport/ImportMode';\r\nimport SelectIndexerFlagsModal from 'InteractiveImport/IndexerFlags/SelectIndexerFlagsModal';\r\nimport InteractiveImport, {\r\n InteractiveImportCommandOptions,\r\n} from 'InteractiveImport/InteractiveImport';\r\nimport SelectLanguageModal from 'InteractiveImport/Language/SelectLanguageModal';\r\nimport SelectMovieModal from 'InteractiveImport/Movie/SelectMovieModal';\r\nimport SelectQualityModal from 'InteractiveImport/Quality/SelectQualityModal';\r\nimport SelectReleaseGroupModal from 'InteractiveImport/ReleaseGroup/SelectReleaseGroupModal';\r\nimport Language from 'Language/Language';\r\nimport Movie from 'Movie/Movie';\r\nimport { MovieFile } from 'MovieFile/MovieFile';\r\nimport { QualityModel } from 'Quality/Quality';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport {\r\n clearInteractiveImport,\r\n fetchInteractiveImportItems,\r\n reprocessInteractiveImportItems,\r\n setInteractiveImportMode,\r\n setInteractiveImportSort,\r\n updateInteractiveImportItems,\r\n} from 'Store/Actions/interactiveImportActions';\r\nimport {\r\n deleteMovieFiles,\r\n updateMovieFiles,\r\n} from 'Store/Actions/movieFileActions';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport { SortCallback } from 'typings/callbacks';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport InteractiveImportRow from './InteractiveImportRow';\r\nimport styles from './InteractiveImportModalContent.css';\r\n\r\ntype SelectType =\r\n | 'select'\r\n | 'movie'\r\n | 'releaseGroup'\r\n | 'quality'\r\n | 'language'\r\n | 'indexerFlags';\r\n\r\ntype FilterExistingFiles = 'all' | 'new';\r\n\r\n// TODO: This feels janky to do, but not sure of a better way currently\r\ntype OnSelectedChangeCallback = React.ComponentProps<\r\n typeof InteractiveImportRow\r\n>['onSelectedChange'];\r\n\r\nconst COLUMNS = [\r\n {\r\n name: 'relativePath',\r\n label: () => translate('RelativePath'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'movie',\r\n label: () => translate('Movie'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'releaseGroup',\r\n label: () => translate('ReleaseGroup'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'quality',\r\n label: () => translate('Quality'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'size',\r\n label: () => translate('Size'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'customFormats',\r\n label: React.createElement(Icon, {\r\n name: icons.INTERACTIVE,\r\n title: () => translate('CustomFormat'),\r\n }),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'indexerFlags',\r\n label: React.createElement(Icon, {\r\n name: icons.FLAG,\r\n title: () => translate('IndexerFlags'),\r\n }),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'rejections',\r\n label: React.createElement(Icon, {\r\n name: icons.DANGER,\r\n kind: kinds.DANGER,\r\n title: () => translate('Rejections'),\r\n }),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n];\r\n\r\nconst importModeOptions = [\r\n {\r\n key: 'chooseImportMode',\r\n value: () => translate('ChooseImportMode'),\r\n disabled: true,\r\n },\r\n {\r\n key: 'move',\r\n value: () => translate('MoveFiles'),\r\n },\r\n {\r\n key: 'copy',\r\n value: () => translate('HardlinkCopyFiles'),\r\n },\r\n];\r\n\r\nfunction isSameMovieFile(\r\n file: InteractiveImport,\r\n originalFile?: InteractiveImport\r\n) {\r\n const { movie } = file;\r\n\r\n if (!originalFile) {\r\n return false;\r\n }\r\n\r\n if (!originalFile.movie || movie?.id !== originalFile.movie.id) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nconst movieFilesInfoSelector = createSelector(\r\n (state: AppState) => state.movieFiles.isDeleting,\r\n (state: AppState) => state.movieFiles.deleteError,\r\n (isDeleting, deleteError) => {\r\n return {\r\n isDeleting,\r\n deleteError,\r\n };\r\n }\r\n);\r\n\r\nconst importModeSelector = createSelector(\r\n (state: AppState) => state.interactiveImport.importMode,\r\n (importMode) => {\r\n return importMode;\r\n }\r\n);\r\n\r\nexport interface InteractiveImportModalContentProps {\r\n downloadId?: string;\r\n movieId?: number;\r\n showMovie?: boolean;\r\n allowMovieChange?: boolean;\r\n showDelete?: boolean;\r\n showImportMode?: boolean;\r\n showFilterExistingFiles?: boolean;\r\n title?: string;\r\n folder?: string;\r\n sortKey?: string;\r\n sortDirection?: string;\r\n initialSortKey?: string;\r\n initialSortDirection?: string;\r\n modalTitle: string;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction InteractiveImportModalContent(\r\n props: InteractiveImportModalContentProps\r\n) {\r\n const {\r\n downloadId,\r\n movieId,\r\n allowMovieChange = true,\r\n showMovie = true,\r\n showFilterExistingFiles = false,\r\n showDelete = false,\r\n showImportMode = true,\r\n title,\r\n folder,\r\n initialSortKey,\r\n initialSortDirection,\r\n modalTitle,\r\n onModalClose,\r\n } = props;\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n originalItems,\r\n sortKey,\r\n sortDirection,\r\n }: InteractiveImportAppState = useSelector(\r\n createClientSideCollectionSelector('interactiveImport')\r\n );\r\n\r\n const { isDeleting, deleteError } = useSelector(movieFilesInfoSelector);\r\n const importMode = useSelector(importModeSelector);\r\n\r\n const [invalidRowsSelected, setInvalidRowsSelected] = useState([]);\r\n const [withoutMovieFileIdRowsSelected, setWithoutMovieFileIdRowsSelected] =\r\n useState([]);\r\n const [selectModalOpen, setSelectModalOpen] = useState(\r\n null\r\n );\r\n const [isConfirmDeleteModalOpen, setIsConfirmDeleteModalOpen] =\r\n useState(false);\r\n const [filterExistingFiles, setFilterExistingFiles] = useState(false);\r\n const [interactiveImportErrorMessage, setInteractiveImportErrorMessage] =\r\n useState(null);\r\n const [selectState, setSelectState] = useSelectState();\r\n const { allSelected, allUnselected, selectedState } = selectState;\r\n const previousIsDeleting = usePrevious(isDeleting);\r\n const dispatch = useDispatch();\r\n\r\n const columns: Column[] = useMemo(() => {\r\n const result: Column[] = cloneDeep(COLUMNS);\r\n\r\n if (!showMovie) {\r\n const movieColumn = result.find((c) => c.name === 'movie');\r\n\r\n if (movieColumn) {\r\n movieColumn.isVisible = false;\r\n }\r\n }\r\n\r\n const showIndexerFlags = items.some((item) => item.indexerFlags);\r\n\r\n if (!showIndexerFlags) {\r\n const indexerFlagsColumn = result.find((c) => c.name === 'indexerFlags');\r\n\r\n if (indexerFlagsColumn) {\r\n indexerFlagsColumn.isVisible = false;\r\n }\r\n }\r\n\r\n return result;\r\n }, [showMovie, items]);\r\n\r\n const selectedIds: number[] = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const bulkSelectOptions = useMemo(() => {\r\n const options = [\r\n {\r\n key: 'select',\r\n value: translate('SelectDropdown'),\r\n disabled: true,\r\n },\r\n {\r\n key: 'quality',\r\n value: translate('SelectQuality'),\r\n },\r\n {\r\n key: 'releaseGroup',\r\n value: translate('SelectReleaseGroup'),\r\n },\r\n {\r\n key: 'language',\r\n value: translate('SelectLanguage'),\r\n },\r\n {\r\n key: 'indexerFlags',\r\n value: translate('SelectIndexerFlags'),\r\n },\r\n ];\r\n\r\n if (allowMovieChange) {\r\n options.splice(1, 0, {\r\n key: 'movie',\r\n value: translate('SelectMovie'),\r\n });\r\n }\r\n\r\n return options;\r\n }, [allowMovieChange]);\r\n\r\n useEffect(\r\n () => {\r\n if (initialSortKey) {\r\n const sortProps: { sortKey: string; sortDirection?: string } = {\r\n sortKey: initialSortKey,\r\n };\r\n\r\n if (initialSortDirection) {\r\n sortProps.sortDirection = initialSortDirection;\r\n }\r\n\r\n dispatch(setInteractiveImportSort(sortProps));\r\n }\r\n\r\n dispatch(\r\n fetchInteractiveImportItems({\r\n downloadId,\r\n movieId,\r\n folder,\r\n filterExistingFiles,\r\n })\r\n );\r\n\r\n // returned function will be called on component unmount\r\n return () => {\r\n dispatch(clearInteractiveImport());\r\n };\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n useEffect(() => {\r\n if (!isDeleting && previousIsDeleting && !deleteError) {\r\n onModalClose();\r\n }\r\n }, [previousIsDeleting, isDeleting, deleteError, onModalClose]);\r\n\r\n const onSelectAllChange = useCallback(\r\n ({ value }: SelectStateInputProps) => {\r\n setSelectState({ type: value ? 'selectAll' : 'unselectAll', items });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const onSelectedChange = useCallback(\r\n ({ id, value, hasMovieFileId, shiftKey = false }) => {\r\n setSelectState({\r\n type: 'toggleSelected',\r\n items,\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n\r\n setWithoutMovieFileIdRowsSelected(\r\n hasMovieFileId || !value\r\n ? without(withoutMovieFileIdRowsSelected, id)\r\n : [...withoutMovieFileIdRowsSelected, id]\r\n );\r\n },\r\n [\r\n items,\r\n withoutMovieFileIdRowsSelected,\r\n setSelectState,\r\n setWithoutMovieFileIdRowsSelected,\r\n ]\r\n );\r\n\r\n const onValidRowChange = useCallback(\r\n (id: number, isValid: boolean) => {\r\n if (isValid && invalidRowsSelected.includes(id)) {\r\n setInvalidRowsSelected(without(invalidRowsSelected, id));\r\n } else if (!isValid && !invalidRowsSelected.includes(id)) {\r\n setInvalidRowsSelected([...invalidRowsSelected, id]);\r\n }\r\n },\r\n [invalidRowsSelected, setInvalidRowsSelected]\r\n );\r\n\r\n const onDeleteSelectedPress = useCallback(() => {\r\n setIsConfirmDeleteModalOpen(true);\r\n }, [setIsConfirmDeleteModalOpen]);\r\n\r\n const onConfirmDelete = useCallback(() => {\r\n setIsConfirmDeleteModalOpen(false);\r\n\r\n const movieFileIds = items.reduce((acc: number[], item) => {\r\n if (selectedIds.indexOf(item.id) > -1 && item.movieFileId) {\r\n acc.push(item.movieFileId);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n dispatch(deleteMovieFiles({ movieFileIds }));\r\n }, [items, selectedIds, setIsConfirmDeleteModalOpen, dispatch]);\r\n\r\n const onConfirmDeleteModalClose = useCallback(() => {\r\n setIsConfirmDeleteModalOpen(false);\r\n }, [setIsConfirmDeleteModalOpen]);\r\n\r\n const onImportSelectedPress = useCallback(() => {\r\n const finalImportMode = downloadId || !showImportMode ? 'auto' : importMode;\r\n\r\n const existingFiles: Partial[] = [];\r\n const files: InteractiveImportCommandOptions[] = [];\r\n\r\n if (finalImportMode === 'chooseImportMode') {\r\n setInteractiveImportErrorMessage(\r\n translate('InteractiveImportNoImportMode')\r\n );\r\n\r\n return;\r\n }\r\n\r\n items.forEach((item) => {\r\n const isSelected = selectedIds.indexOf(item.id) > -1;\r\n\r\n if (isSelected) {\r\n const {\r\n movie,\r\n releaseGroup,\r\n quality,\r\n languages,\r\n indexerFlags,\r\n movieFileId,\r\n } = item;\r\n\r\n if (!movie) {\r\n setInteractiveImportErrorMessage(\r\n translate('InteractiveImportNoMovie')\r\n );\r\n return;\r\n }\r\n\r\n if (!quality) {\r\n setInteractiveImportErrorMessage(\r\n translate('InteractiveImportNoQuality')\r\n );\r\n return;\r\n }\r\n\r\n if (!languages) {\r\n setInteractiveImportErrorMessage(\r\n translate('InteractiveImportNoLanguage')\r\n );\r\n return;\r\n }\r\n\r\n setInteractiveImportErrorMessage(null);\r\n\r\n if (movieFileId) {\r\n const originalItem = originalItems.find((i) => i.id === item.id);\r\n\r\n if (isSameMovieFile(item, originalItem)) {\r\n existingFiles.push({\r\n id: movieFileId,\r\n releaseGroup,\r\n quality,\r\n languages,\r\n indexerFlags,\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n files.push({\r\n path: item.path,\r\n folderName: item.folderName,\r\n movieId: movie.id,\r\n releaseGroup,\r\n quality,\r\n languages,\r\n indexerFlags,\r\n downloadId,\r\n movieFileId,\r\n });\r\n }\r\n });\r\n\r\n let shouldClose = false;\r\n\r\n if (existingFiles.length) {\r\n dispatch(\r\n updateMovieFiles({\r\n files: existingFiles,\r\n })\r\n );\r\n\r\n shouldClose = true;\r\n }\r\n\r\n if (files.length) {\r\n dispatch(\r\n executeCommand({\r\n name: commandNames.INTERACTIVE_IMPORT,\r\n files,\r\n importMode: finalImportMode,\r\n })\r\n );\r\n\r\n shouldClose = true;\r\n }\r\n\r\n if (shouldClose) {\r\n onModalClose();\r\n }\r\n }, [\r\n downloadId,\r\n showImportMode,\r\n importMode,\r\n items,\r\n originalItems,\r\n selectedIds,\r\n onModalClose,\r\n dispatch,\r\n ]);\r\n\r\n const onSortPress = useCallback(\r\n (sortKey, sortDirection) => {\r\n dispatch(setInteractiveImportSort({ sortKey, sortDirection }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onFilterExistingFilesChange = useCallback<\r\n (value: FilterExistingFiles) => void\r\n >(\r\n (value) => {\r\n const filter = value !== 'all';\r\n\r\n setFilterExistingFiles(filter);\r\n\r\n dispatch(\r\n fetchInteractiveImportItems({\r\n downloadId,\r\n movieId,\r\n folder,\r\n filterExistingFiles: filter,\r\n })\r\n );\r\n },\r\n [downloadId, movieId, folder, setFilterExistingFiles, dispatch]\r\n );\r\n\r\n const onImportModeChange = useCallback<\r\n ({ value }: { value: ImportMode }) => void\r\n >(\r\n ({ value }) => {\r\n dispatch(setInteractiveImportMode({ importMode: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onSelectModalSelect = useCallback<\r\n ({ value }: { value: SelectType }) => void\r\n >(\r\n ({ value }) => {\r\n setSelectModalOpen(value);\r\n },\r\n [setSelectModalOpen]\r\n );\r\n\r\n const onSelectModalClose = useCallback(() => {\r\n setSelectModalOpen(null);\r\n }, [setSelectModalOpen]);\r\n\r\n const onMovieSelect = useCallback(\r\n (movie: Movie) => {\r\n dispatch(\r\n updateInteractiveImportItems({\r\n ids: selectedIds,\r\n movie,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: selectedIds }));\r\n\r\n setSelectModalOpen(null);\r\n },\r\n [selectedIds, setSelectModalOpen, dispatch]\r\n );\r\n\r\n const onReleaseGroupSelect = useCallback(\r\n (releaseGroup: string) => {\r\n dispatch(\r\n updateInteractiveImportItems({\r\n ids: selectedIds,\r\n releaseGroup,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: selectedIds }));\r\n\r\n setSelectModalOpen(null);\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onLanguagesSelect = useCallback(\r\n (newLanguages: Language[]) => {\r\n dispatch(\r\n updateInteractiveImportItems({\r\n ids: selectedIds,\r\n languages: newLanguages,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: selectedIds }));\r\n\r\n setSelectModalOpen(null);\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onQualitySelect = useCallback(\r\n (quality: QualityModel) => {\r\n dispatch(\r\n updateInteractiveImportItems({\r\n ids: selectedIds,\r\n quality,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: selectedIds }));\r\n\r\n setSelectModalOpen(null);\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onIndexerFlagsSelect = useCallback(\r\n (indexerFlags: number) => {\r\n dispatch(\r\n updateInteractiveImportItems({\r\n ids: selectedIds,\r\n indexerFlags,\r\n })\r\n );\r\n\r\n dispatch(reprocessInteractiveImportItems({ ids: selectedIds }));\r\n\r\n setSelectModalOpen(null);\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const errorMessage = getErrorMessage(\r\n error,\r\n translate('InteractiveImportLoadError')\r\n );\r\n\r\n return (\r\n \r\n \r\n {modalTitle} - {title || folder}\r\n \r\n\r\n \r\n {showFilterExistingFiles && (\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n {filterExistingFiles\r\n ? translate('UnmappedFilesOnly')\r\n : translate('AllFiles')}\r\n
\r\n
\r\n\r\n \r\n \r\n {translate('AllFiles')}\r\n \r\n\r\n \r\n {translate('UnmappedFilesOnly')}\r\n \r\n \r\n
\r\n
\r\n )}\r\n\r\n {isFetching ? : null}\r\n\r\n {error ?
{errorMessage}
: null}\r\n\r\n {isPopulated && !!items.length && !isFetching && !isFetching ? (\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n ) : null}\r\n\r\n {isPopulated && !items.length && !isFetching\r\n ? translate('InteractiveImportNoFilesFound')\r\n : null}\r\n
\r\n\r\n \r\n
\r\n {showDelete ? (\r\n \r\n {translate('Delete')}\r\n \r\n ) : null}\r\n\r\n {!downloadId && showImportMode ? (\r\n \r\n ) : null}\r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n {interactiveImportErrorMessage && (\r\n \r\n {interactiveImportErrorMessage}\r\n \r\n )}\r\n\r\n \r\n {translate('Import')}\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default InteractiveImportModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"filterContainer\":\"InteractiveImportModalContent-filterContainer-wG6KO\",\"filterText\":\"InteractiveImportModalContent-filterText-QWJMj\",\"footer\":\"InteractiveImportModalContent-footer-nniuo ModalFooter-modalFooter-wjkx5\",\"leftButtons\":\"InteractiveImportModalContent-leftButtons-AVUp2\",\"rightButtons\":\"InteractiveImportModalContent-rightButtons-LlBFD\",\"deleteButton\":\"InteractiveImportModalContent-deleteButton-C7cFS Button-button-paJ9a Link-link-RInnp\",\"importMode\":\"InteractiveImportModalContent-importMode-bhbIr SelectInput-select-M6gsU Input-input-KWeec\",\"bulkSelect\":\"InteractiveImportModalContent-bulkSelect-a3bN1 SelectInput-select-M6gsU Input-input-KWeec\",\"errorMessage\":\"InteractiveImportModalContent-errorMessage-ArmVO\"};","import React, { useCallback, useEffect, useState } from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport InteractiveImportSelectFolderModalContent from './Folder/InteractiveImportSelectFolderModalContent';\r\nimport InteractiveImportModalContent, {\r\n InteractiveImportModalContentProps,\r\n} from './Interactive/InteractiveImportModalContent';\r\n\r\ninterface InteractiveImportModalProps\r\n extends Omit {\r\n isOpen: boolean;\r\n folder?: string;\r\n downloadId?: string;\r\n modalTitle?: string;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction InteractiveImportModal(props: InteractiveImportModalProps) {\r\n const {\r\n isOpen,\r\n folder,\r\n downloadId,\r\n modalTitle = translate('ManualImport'),\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n const [folderPath, setFolderPath] = useState(folder);\r\n const previousIsOpen = usePrevious(isOpen);\r\n\r\n const onFolderSelect = useCallback(\r\n (path: string) => {\r\n setFolderPath(path);\r\n },\r\n [setFolderPath]\r\n );\r\n\r\n useEffect(() => {\r\n setFolderPath(folder);\r\n }, [folder, setFolderPath]);\r\n\r\n useEffect(() => {\r\n if (previousIsOpen && !isOpen) {\r\n setFolderPath(folder);\r\n }\r\n }, [folder, previousIsOpen, isOpen, setFolderPath]);\r\n\r\n return (\r\n \r\n {folderPath || downloadId ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default InteractiveImportModal;\r\n","import React from 'react';\r\nimport Icon, { IconProps } from 'Components/Icon';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport { TooltipPosition } from 'Helpers/Props/tooltipPositions';\r\nimport {\r\n QueueTrackedDownloadState,\r\n QueueTrackedDownloadStatus,\r\n StatusMessage,\r\n} from 'typings/Queue';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './QueueStatus.css';\r\n\r\nfunction getDetailedPopoverBody(statusMessages: StatusMessage[]) {\r\n return (\r\n
\r\n {statusMessages.map(({ title, messages }) => {\r\n return (\r\n \r\n {title}\r\n
    \r\n {messages.map((message) => {\r\n return
  • {message}
  • ;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n \r\n );\r\n}\r\n\r\ninterface QueueStatusProps {\r\n sourceTitle: string;\r\n status: string;\r\n trackedDownloadStatus?: QueueTrackedDownloadStatus;\r\n trackedDownloadState?: QueueTrackedDownloadState;\r\n statusMessages?: StatusMessage[];\r\n errorMessage?: string;\r\n position: TooltipPosition;\r\n canFlip?: boolean;\r\n}\r\n\r\nfunction QueueStatus(props: QueueStatusProps) {\r\n const {\r\n sourceTitle,\r\n status,\r\n trackedDownloadStatus = 'ok',\r\n trackedDownloadState = 'downloading',\r\n statusMessages = [],\r\n errorMessage,\r\n position,\r\n canFlip = false,\r\n } = props;\r\n\r\n const hasWarning = trackedDownloadStatus === 'warning';\r\n const hasError = trackedDownloadStatus === 'error';\r\n\r\n // status === 'downloading'\r\n let iconName = icons.DOWNLOADING;\r\n let iconKind: IconProps['kind'] = kinds.DEFAULT;\r\n let title = translate('Downloading');\r\n\r\n if (status === 'paused') {\r\n iconName = icons.PAUSED;\r\n title = translate('Paused');\r\n }\r\n\r\n if (status === 'queued') {\r\n iconName = icons.QUEUED;\r\n title = translate('Queued');\r\n }\r\n\r\n if (status === 'completed') {\r\n iconName = icons.DOWNLOADED;\r\n title = translate('Downloaded');\r\n\r\n if (trackedDownloadState === 'importBlocked') {\r\n title += ` - ${translate('UnableToImportAutomatically')}`;\r\n iconKind = kinds.WARNING;\r\n }\r\n\r\n if (trackedDownloadState === 'importPending') {\r\n title += ` - ${translate('WaitingToImport')}`;\r\n iconKind = kinds.PURPLE;\r\n }\r\n\r\n if (trackedDownloadState === 'importing') {\r\n title += ` - ${translate('Importing')}`;\r\n iconKind = kinds.PURPLE;\r\n }\r\n\r\n if (trackedDownloadState === 'failedPending') {\r\n title += ` - ${translate('WaitingToProcess')}`;\r\n iconKind = kinds.DANGER;\r\n }\r\n }\r\n\r\n if (hasWarning) {\r\n iconKind = kinds.WARNING;\r\n }\r\n\r\n if (status === 'delay') {\r\n iconName = icons.PENDING;\r\n title = translate('Pending');\r\n }\r\n\r\n if (status === 'downloadClientUnavailable') {\r\n iconName = icons.PENDING;\r\n iconKind = kinds.WARNING;\r\n title = translate('PendingDownloadClientUnavailable');\r\n }\r\n\r\n if (status === 'failed') {\r\n iconName = icons.DOWNLOADING;\r\n iconKind = kinds.DANGER;\r\n title = translate('DownloadFailed');\r\n }\r\n\r\n if (status === 'warning') {\r\n iconName = icons.DOWNLOADING;\r\n iconKind = kinds.WARNING;\r\n const warningMessage =\r\n errorMessage || translate('CheckDownloadClientForDetails');\r\n title = translate('DownloadWarning', { warningMessage });\r\n }\r\n\r\n if (hasError) {\r\n if (status === 'completed') {\r\n iconName = icons.DOWNLOAD;\r\n iconKind = kinds.DANGER;\r\n title = translate('ImportFailed', { sourceTitle });\r\n } else {\r\n iconName = icons.DOWNLOADING;\r\n iconKind = kinds.DANGER;\r\n title = translate('DownloadFailed');\r\n }\r\n }\r\n\r\n return (\r\n }\r\n title={title}\r\n body={\r\n hasWarning || hasError\r\n ? getDetailedPopoverBody(statusMessages)\r\n : sourceTitle\r\n }\r\n position={position}\r\n canFlip={canFlip}\r\n />\r\n );\r\n}\r\n\r\nexport default QueueStatus;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"noMessages\":\"QueueStatus-noMessages-a1G0a\"};","import React from 'react';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport {\r\n QueueTrackedDownloadState,\r\n QueueTrackedDownloadStatus,\r\n StatusMessage,\r\n} from 'typings/Queue';\r\nimport QueueStatus from './QueueStatus';\r\nimport styles from './QueueStatusCell.css';\r\n\r\ninterface QueueStatusCellProps {\r\n sourceTitle: string;\r\n status: string;\r\n trackedDownloadStatus?: QueueTrackedDownloadStatus;\r\n trackedDownloadState?: QueueTrackedDownloadState;\r\n statusMessages?: StatusMessage[];\r\n errorMessage?: string;\r\n}\r\n\r\nfunction QueueStatusCell(props: QueueStatusCellProps) {\r\n const {\r\n sourceTitle,\r\n status,\r\n trackedDownloadStatus = 'ok',\r\n trackedDownloadState = 'downloading',\r\n statusMessages,\r\n errorMessage,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default QueueStatusCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"status\":\"QueueStatusCell-status-ssPVV TableRowCell-cell-giPrj\"};","import React, { useCallback, useMemo, useState } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './RemoveQueueItemModal.css';\r\n\r\nexport interface RemovePressProps {\r\n remove: boolean;\r\n changeCategory: boolean;\r\n blocklist: boolean;\r\n skipRedownload: boolean;\r\n}\r\n\r\ninterface RemoveQueueItemModalProps {\r\n isOpen: boolean;\r\n sourceTitle?: string;\r\n canChangeCategory: boolean;\r\n canIgnore: boolean;\r\n isPending: boolean;\r\n selectedCount?: number;\r\n onRemovePress(props: RemovePressProps): void;\r\n onModalClose: () => void;\r\n}\r\n\r\ntype RemovalMethod = 'removeFromClient' | 'changeCategory' | 'ignore';\r\ntype BlocklistMethod =\r\n | 'doNotBlocklist'\r\n | 'blocklistAndSearch'\r\n | 'blocklistOnly';\r\n\r\nfunction RemoveQueueItemModal(props: RemoveQueueItemModalProps) {\r\n const {\r\n isOpen,\r\n sourceTitle = '',\r\n canIgnore,\r\n canChangeCategory,\r\n isPending,\r\n selectedCount,\r\n onRemovePress,\r\n onModalClose,\r\n } = props;\r\n\r\n const multipleSelected = selectedCount && selectedCount > 1;\r\n\r\n const [removalMethod, setRemovalMethod] =\r\n useState('removeFromClient');\r\n const [blocklistMethod, setBlocklistMethod] =\r\n useState('doNotBlocklist');\r\n\r\n const { title, message } = useMemo(() => {\r\n if (!selectedCount) {\r\n return {\r\n title: translate('RemoveQueueItem', { sourceTitle }),\r\n message: translate('RemoveQueueItemConfirmation', { sourceTitle }),\r\n };\r\n }\r\n\r\n if (selectedCount === 1) {\r\n return {\r\n title: translate('RemoveSelectedItem'),\r\n message: translate('RemoveSelectedItemQueueMessageText'),\r\n };\r\n }\r\n\r\n return {\r\n title: translate('RemoveSelectedItems'),\r\n message: translate('RemoveSelectedItemsQueueMessageText', {\r\n selectedCount,\r\n }),\r\n };\r\n }, [sourceTitle, selectedCount]);\r\n\r\n const removalMethodOptions = useMemo(() => {\r\n return [\r\n {\r\n key: 'removeFromClient',\r\n value: translate('RemoveFromDownloadClient'),\r\n hint: multipleSelected\r\n ? translate('RemoveMultipleFromDownloadClientHint')\r\n : translate('RemoveFromDownloadClientHint'),\r\n },\r\n {\r\n key: 'changeCategory',\r\n value: translate('ChangeCategory'),\r\n isDisabled: !canChangeCategory,\r\n hint: multipleSelected\r\n ? translate('ChangeCategoryMultipleHint')\r\n : translate('ChangeCategoryHint'),\r\n },\r\n {\r\n key: 'ignore',\r\n value: multipleSelected\r\n ? translate('IgnoreDownloads')\r\n : translate('IgnoreDownload'),\r\n isDisabled: !canIgnore,\r\n hint: multipleSelected\r\n ? translate('IgnoreDownloadsHint')\r\n : translate('IgnoreDownloadHint'),\r\n },\r\n ];\r\n }, [canChangeCategory, canIgnore, multipleSelected]);\r\n\r\n const blocklistMethodOptions = useMemo(() => {\r\n return [\r\n {\r\n key: 'doNotBlocklist',\r\n value: translate('DoNotBlocklist'),\r\n hint: translate('DoNotBlocklistHint'),\r\n },\r\n {\r\n key: 'blocklistAndSearch',\r\n value: translate('BlocklistAndSearch'),\r\n isDisabled: isPending,\r\n hint: multipleSelected\r\n ? translate('BlocklistAndSearchMultipleHint')\r\n : translate('BlocklistAndSearchHint'),\r\n },\r\n {\r\n key: 'blocklistOnly',\r\n value: translate('BlocklistOnly'),\r\n hint: multipleSelected\r\n ? translate('BlocklistMultipleOnlyHint')\r\n : translate('BlocklistOnlyHint'),\r\n },\r\n ];\r\n }, [isPending, multipleSelected]);\r\n\r\n const handleRemovalMethodChange = useCallback(\r\n ({ value }: { value: RemovalMethod }) => {\r\n setRemovalMethod(value);\r\n },\r\n [setRemovalMethod]\r\n );\r\n\r\n const handleBlocklistMethodChange = useCallback(\r\n ({ value }: { value: BlocklistMethod }) => {\r\n setBlocklistMethod(value);\r\n },\r\n [setBlocklistMethod]\r\n );\r\n\r\n const handleConfirmRemove = useCallback(() => {\r\n onRemovePress({\r\n remove: removalMethod === 'removeFromClient',\r\n changeCategory: removalMethod === 'changeCategory',\r\n blocklist: blocklistMethod !== 'doNotBlocklist',\r\n skipRedownload: blocklistMethod === 'blocklistOnly',\r\n });\r\n\r\n setRemovalMethod('removeFromClient');\r\n setBlocklistMethod('doNotBlocklist');\r\n }, [\r\n removalMethod,\r\n blocklistMethod,\r\n setRemovalMethod,\r\n setBlocklistMethod,\r\n onRemovePress,\r\n ]);\r\n\r\n const handleModalClose = useCallback(() => {\r\n setRemovalMethod('removeFromClient');\r\n setBlocklistMethod('doNotBlocklist');\r\n\r\n onModalClose();\r\n }, [setRemovalMethod, setBlocklistMethod, onModalClose]);\r\n\r\n return (\r\n \r\n \r\n {title}\r\n\r\n \r\n
{message}
\r\n\r\n {isPending ? null : (\r\n \r\n {translate('RemoveQueueItemRemovalMethod')}\r\n\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n {multipleSelected\r\n ? translate('BlocklistReleases')\r\n : translate('BlocklistRelease')}\r\n \r\n\r\n \r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default RemoveQueueItemModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"RemoveQueueItemModal-message-CHG47\"};","import moment from 'moment';\r\nimport padNumber from 'Utilities/Number/padNumber';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction formatTimeSpan(timeSpan) {\r\n if (!timeSpan) {\r\n return '';\r\n }\r\n\r\n const duration = moment.duration(timeSpan);\r\n\r\n const days = Math.floor(duration.asDays());\r\n const hours = padNumber(duration.get('hours'), 2);\r\n const minutes = padNumber(duration.get('minutes'), 2);\r\n const seconds = padNumber(duration.get('seconds'), 2);\r\n\r\n const time = `${hours}:${minutes}:${seconds}`;\r\n\r\n if (days > 0) {\r\n return translate('FormatTimeSpanDays', { days, time });\r\n }\r\n\r\n return time;\r\n}\r\n\r\nexport default formatTimeSpan;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"timeleft\":\"TimeleftCell-timeleft-eTmq3 TableRowCell-cell-giPrj\"};","import React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { icons, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport formatTime from 'Utilities/Date/formatTime';\r\nimport formatTimeSpan from 'Utilities/Date/formatTimeSpan';\r\nimport getRelativeDate from 'Utilities/Date/getRelativeDate';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './TimeleftCell.css';\r\n\r\ninterface TimeleftCellProps {\r\n estimatedCompletionTime?: string;\r\n timeleft?: string;\r\n status: string;\r\n size: number;\r\n sizeleft: number;\r\n showRelativeDates: boolean;\r\n shortDateFormat: string;\r\n timeFormat: string;\r\n}\r\n\r\nfunction TimeleftCell(props: TimeleftCellProps) {\r\n const {\r\n estimatedCompletionTime,\r\n timeleft,\r\n status,\r\n size,\r\n sizeleft,\r\n showRelativeDates,\r\n shortDateFormat,\r\n timeFormat,\r\n } = props;\r\n\r\n if (status === 'delay') {\r\n const date = getRelativeDate({\r\n date: estimatedCompletionTime,\r\n shortDateFormat,\r\n showRelativeDates,\r\n });\r\n const time = formatTime(estimatedCompletionTime, timeFormat, {\r\n includeMinuteZero: true,\r\n });\r\n\r\n return (\r\n \r\n }\r\n tooltip={translate('DelayingDownloadUntil', { date, time })}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n />\r\n \r\n );\r\n }\r\n\r\n if (status === 'downloadClientUnavailable') {\r\n const date = getRelativeDate({\r\n date: estimatedCompletionTime,\r\n shortDateFormat,\r\n showRelativeDates,\r\n });\r\n const time = formatTime(estimatedCompletionTime, timeFormat, {\r\n includeMinuteZero: true,\r\n });\r\n\r\n return (\r\n \r\n }\r\n tooltip={translate('RetryingDownloadOn', { date, time })}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n />\r\n \r\n );\r\n }\r\n\r\n if (!timeleft || status === 'completed' || status === 'failed') {\r\n return -;\r\n }\r\n\r\n const totalSize = formatBytes(size);\r\n const remainingSize = formatBytes(sizeleft);\r\n\r\n return (\r\n \r\n {formatTimeSpan(timeleft)}\r\n \r\n );\r\n}\r\n\r\nexport default TimeleftCell;\r\n","import React, { useCallback, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport ProtocolLabel from 'Activity/Queue/ProtocolLabel';\r\nimport { Error } from 'App/State/AppSectionState';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport ProgressBar from 'Components/ProgressBar';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport Column from 'Components/Table/Column';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport { icons, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';\r\nimport Language from 'Language/Language';\r\nimport MovieFormats from 'Movie/MovieFormats';\r\nimport MovieLanguages from 'Movie/MovieLanguages';\r\nimport MovieQuality from 'Movie/MovieQuality';\r\nimport MovieTitleLink from 'Movie/MovieTitleLink';\r\nimport useMovie from 'Movie/useMovie';\r\nimport { QualityModel } from 'Quality/Quality';\r\nimport { grabQueueItem, removeQueueItem } from 'Store/Actions/queueActions';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport CustomFormat from 'typings/CustomFormat';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport {\r\n QueueTrackedDownloadState,\r\n QueueTrackedDownloadStatus,\r\n StatusMessage,\r\n} from 'typings/Queue';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';\r\nimport translate from 'Utilities/String/translate';\r\nimport QueueStatusCell from './QueueStatusCell';\r\nimport RemoveQueueItemModal, { RemovePressProps } from './RemoveQueueItemModal';\r\nimport TimeleftCell from './TimeleftCell';\r\nimport styles from './QueueRow.css';\r\n\r\ninterface QueueRowProps {\r\n id: number;\r\n movieId?: number;\r\n downloadId?: string;\r\n title: string;\r\n status: string;\r\n trackedDownloadStatus?: QueueTrackedDownloadStatus;\r\n trackedDownloadState?: QueueTrackedDownloadState;\r\n statusMessages?: StatusMessage[];\r\n errorMessage?: string;\r\n languages: Language[];\r\n quality: QualityModel;\r\n customFormats?: CustomFormat[];\r\n customFormatScore: number;\r\n protocol: DownloadProtocol;\r\n indexer?: string;\r\n outputPath?: string;\r\n downloadClient?: string;\r\n downloadClientHasPostImportCategory?: boolean;\r\n estimatedCompletionTime?: string;\r\n added?: string;\r\n timeleft?: string;\r\n size: number;\r\n sizeleft: number;\r\n isGrabbing?: boolean;\r\n grabError?: Error;\r\n isRemoving?: boolean;\r\n isSelected?: boolean;\r\n columns: Column[];\r\n onSelectedChange: (options: SelectStateInputProps) => void;\r\n onQueueRowModalOpenOrClose: (isOpen: boolean) => void;\r\n}\r\n\r\nfunction QueueRow(props: QueueRowProps) {\r\n const {\r\n id,\r\n movieId,\r\n downloadId,\r\n title,\r\n status,\r\n trackedDownloadStatus,\r\n trackedDownloadState,\r\n statusMessages,\r\n errorMessage,\r\n languages,\r\n quality,\r\n customFormats = [],\r\n customFormatScore,\r\n protocol,\r\n indexer,\r\n outputPath,\r\n downloadClient,\r\n downloadClientHasPostImportCategory,\r\n estimatedCompletionTime,\r\n added,\r\n timeleft,\r\n size,\r\n sizeleft,\r\n isGrabbing = false,\r\n grabError,\r\n isRemoving = false,\r\n isSelected,\r\n columns,\r\n onSelectedChange,\r\n onQueueRowModalOpenOrClose,\r\n } = props;\r\n\r\n const dispatch = useDispatch();\r\n const movie = useMovie(movieId);\r\n const { showRelativeDates, shortDateFormat, timeFormat } = useSelector(\r\n createUISettingsSelector()\r\n );\r\n\r\n const [isRemoveQueueItemModalOpen, setIsRemoveQueueItemModalOpen] =\r\n useState(false);\r\n\r\n const [isInteractiveImportModalOpen, setIsInteractiveImportModalOpen] =\r\n useState(false);\r\n\r\n const handleGrabPress = useCallback(() => {\r\n dispatch(grabQueueItem({ id }));\r\n }, [id, dispatch]);\r\n\r\n const handleInteractiveImportPress = useCallback(() => {\r\n onQueueRowModalOpenOrClose(true);\r\n setIsInteractiveImportModalOpen(true);\r\n }, [setIsInteractiveImportModalOpen, onQueueRowModalOpenOrClose]);\r\n\r\n const handleInteractiveImportModalClose = useCallback(() => {\r\n onQueueRowModalOpenOrClose(false);\r\n setIsInteractiveImportModalOpen(false);\r\n }, [setIsInteractiveImportModalOpen, onQueueRowModalOpenOrClose]);\r\n\r\n const handleRemoveQueueItemPress = useCallback(() => {\r\n onQueueRowModalOpenOrClose(true);\r\n setIsRemoveQueueItemModalOpen(true);\r\n }, [setIsRemoveQueueItemModalOpen, onQueueRowModalOpenOrClose]);\r\n\r\n const handleRemoveQueueItemModalConfirmed = useCallback(\r\n (payload: RemovePressProps) => {\r\n onQueueRowModalOpenOrClose(false);\r\n dispatch(removeQueueItem({ id, ...payload }));\r\n setIsRemoveQueueItemModalOpen(false);\r\n },\r\n [id, setIsRemoveQueueItemModalOpen, onQueueRowModalOpenOrClose, dispatch]\r\n );\r\n\r\n const handleRemoveQueueItemModalClose = useCallback(() => {\r\n onQueueRowModalOpenOrClose(false);\r\n setIsRemoveQueueItemModalOpen(false);\r\n }, [setIsRemoveQueueItemModalOpen, onQueueRowModalOpenOrClose]);\r\n\r\n const progress = size ? 100 - (sizeleft / size) * 100 : 0;\r\n const showInteractiveImport =\r\n status === 'completed' && trackedDownloadStatus === 'warning';\r\n const isPending =\r\n status === 'delay' || status === 'downloadClientUnavailable';\r\n\r\n return (\r\n \r\n \r\n\r\n {columns.map((column) => {\r\n const { name, isVisible } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'status') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'movies.sortTitle') {\r\n return (\r\n \r\n {movie ? (\r\n \r\n ) : (\r\n title\r\n )}\r\n \r\n );\r\n }\r\n\r\n if (name === 'year') {\r\n return (\r\n {movie ? movie.year : ''}\r\n );\r\n }\r\n\r\n if (name === 'languages') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'quality') {\r\n return (\r\n \r\n {quality ? : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'customFormats') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'customFormatScore') {\r\n return (\r\n \r\n }\r\n position={tooltipPositions.BOTTOM}\r\n />\r\n \r\n );\r\n }\r\n\r\n if (name === 'protocol') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'indexer') {\r\n return {indexer};\r\n }\r\n\r\n if (name === 'downloadClient') {\r\n return {downloadClient};\r\n }\r\n\r\n if (name === 'title') {\r\n return {title};\r\n }\r\n\r\n if (name === 'size') {\r\n return {formatBytes(size)};\r\n }\r\n\r\n if (name === 'outputPath') {\r\n return {outputPath};\r\n }\r\n\r\n if (name === 'estimatedCompletionTime') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'progress') {\r\n return (\r\n \r\n {!!progress && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n if (name === 'added') {\r\n return ;\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n {showInteractiveImport ? (\r\n \r\n ) : null}\r\n\r\n {isPending ? (\r\n \r\n ) : null}\r\n\r\n \r\n \r\n );\r\n }\r\n\r\n return null;\r\n })}\r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default QueueRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"quality\":\"QueueRow-quality-gazz6 TableRowCell-cell-giPrj\",\"protocol\":\"QueueRow-protocol-oceJO TableRowCell-cell-giPrj\",\"progress\":\"QueueRow-progress-PESGV TableRowCell-cell-giPrj\",\"customFormatScore\":\"QueueRow-customFormatScore-RaT_f TableRowCell-cell-giPrj\",\"actions\":\"QueueRow-actions-iDDa7 TableRowCell-cell-giPrj\"};","import React, {\r\n ReactElement,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport TablePager from 'Components/Table/TablePager';\r\nimport usePaging from 'Components/Table/usePaging';\r\nimport useCurrentPage from 'Helpers/Hooks/useCurrentPage';\r\nimport useSelectState from 'Helpers/Hooks/useSelectState';\r\nimport { align, icons, kinds } from 'Helpers/Props';\r\nimport createMoviesFetchingSelector from 'Movie/createMoviesFetchingSelector';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport {\r\n clearQueue,\r\n fetchQueue,\r\n gotoQueuePage,\r\n grabQueueItems,\r\n removeQueueItems,\r\n setQueueFilter,\r\n setQueueSort,\r\n setQueueTableOption,\r\n} from 'Store/Actions/queueActions';\r\nimport { createCustomFiltersSelector } from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport { TableOptionsChangePayload } from 'typings/Table';\r\nimport {\r\n registerPagePopulator,\r\n unregisterPagePopulator,\r\n} from 'Utilities/pagePopulator';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport QueueFilterModal from './QueueFilterModal';\r\nimport QueueOptions from './QueueOptions';\r\nimport QueueRow from './QueueRow';\r\nimport RemoveQueueItemModal, { RemovePressProps } from './RemoveQueueItemModal';\r\nimport createQueueStatusSelector from './Status/createQueueStatusSelector';\r\n\r\nfunction Queue() {\r\n const requestCurrentPage = useCurrentPage();\r\n const dispatch = useDispatch();\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n columns,\r\n selectedFilterKey,\r\n filters,\r\n sortKey,\r\n sortDirection,\r\n page,\r\n pageSize,\r\n totalPages,\r\n totalRecords,\r\n isGrabbing,\r\n isRemoving,\r\n } = useSelector((state: AppState) => state.queue.paged);\r\n\r\n const { count } = useSelector(createQueueStatusSelector());\r\n const { isMoviesFetching, isMoviesPopulated, moviesError } = useSelector(\r\n createMoviesFetchingSelector()\r\n );\r\n const customFilters = useSelector(createCustomFiltersSelector('queue'));\r\n\r\n const isRefreshMonitoredDownloadsExecuting = useSelector(\r\n createCommandExecutingSelector(commandNames.REFRESH_MONITORED_DOWNLOADS)\r\n );\r\n\r\n const shouldBlockRefresh = useRef(false);\r\n const currentQueue = useRef(null);\r\n\r\n const [selectState, setSelectState] = useSelectState();\r\n const { allSelected, allUnselected, selectedState } = selectState;\r\n\r\n const selectedIds = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const isPendingSelected = useMemo(() => {\r\n return items.some((item) => {\r\n return selectedIds.indexOf(item.id) > -1 && item.status === 'delay';\r\n });\r\n }, [items, selectedIds]);\r\n\r\n const [isConfirmRemoveModalOpen, setIsConfirmRemoveModalOpen] =\r\n useState(false);\r\n\r\n const isRefreshing =\r\n isFetching || isMoviesFetching || isRefreshMonitoredDownloadsExecuting;\r\n const isAllPopulated =\r\n isPopulated &&\r\n (isMoviesPopulated || !items.length || items.every((m) => !m.movieId));\r\n const hasError = error || moviesError;\r\n const selectedCount = selectedIds.length;\r\n const disableSelectedActions = selectedCount === 0;\r\n\r\n const handleSelectAllChange = useCallback(\r\n ({ value }: CheckInputChanged) => {\r\n setSelectState({ type: value ? 'selectAll' : 'unselectAll', items });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const handleSelectedChange = useCallback(\r\n ({ id, value, shiftKey = false }: SelectStateInputProps) => {\r\n setSelectState({\r\n type: 'toggleSelected',\r\n items,\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const handleRefreshPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: commandNames.REFRESH_MONITORED_DOWNLOADS,\r\n })\r\n );\r\n }, [dispatch]);\r\n\r\n const handleQueueRowModalOpenOrClose = useCallback((isOpen: boolean) => {\r\n shouldBlockRefresh.current = isOpen;\r\n }, []);\r\n\r\n const handleGrabSelectedPress = useCallback(() => {\r\n dispatch(grabQueueItems({ ids: selectedIds }));\r\n }, [selectedIds, dispatch]);\r\n\r\n const handleRemoveSelectedPress = useCallback(() => {\r\n shouldBlockRefresh.current = true;\r\n setIsConfirmRemoveModalOpen(true);\r\n }, [setIsConfirmRemoveModalOpen]);\r\n\r\n const handleRemoveSelectedConfirmed = useCallback(\r\n (payload: RemovePressProps) => {\r\n shouldBlockRefresh.current = false;\r\n dispatch(removeQueueItems({ ids: selectedIds, ...payload }));\r\n setIsConfirmRemoveModalOpen(false);\r\n },\r\n [selectedIds, setIsConfirmRemoveModalOpen, dispatch]\r\n );\r\n\r\n const handleConfirmRemoveModalClose = useCallback(() => {\r\n shouldBlockRefresh.current = false;\r\n setIsConfirmRemoveModalOpen(false);\r\n }, [setIsConfirmRemoveModalOpen]);\r\n\r\n const {\r\n handleFirstPagePress,\r\n handlePreviousPagePress,\r\n handleNextPagePress,\r\n handleLastPagePress,\r\n handlePageSelect,\r\n } = usePaging({\r\n page,\r\n totalPages,\r\n gotoPage: gotoQueuePage,\r\n });\r\n\r\n const handleFilterSelect = useCallback(\r\n (selectedFilterKey: string) => {\r\n dispatch(setQueueFilter({ selectedFilterKey }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleSortPress = useCallback(\r\n (sortKey: string) => {\r\n dispatch(setQueueSort({ sortKey }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleTableOptionChange = useCallback(\r\n (payload: TableOptionsChangePayload) => {\r\n dispatch(setQueueTableOption(payload));\r\n\r\n if (payload.pageSize) {\r\n dispatch(gotoQueuePage({ page: 1 }));\r\n }\r\n },\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n if (requestCurrentPage) {\r\n dispatch(fetchQueue());\r\n } else {\r\n dispatch(gotoQueuePage({ page: 1 }));\r\n }\r\n\r\n return () => {\r\n dispatch(clearQueue());\r\n };\r\n }, [requestCurrentPage, dispatch]);\r\n\r\n useEffect(() => {\r\n const repopulate = () => {\r\n dispatch(fetchQueue());\r\n };\r\n\r\n registerPagePopulator(repopulate);\r\n\r\n return () => {\r\n unregisterPagePopulator(repopulate);\r\n };\r\n }, [dispatch]);\r\n\r\n if (!shouldBlockRefresh.current) {\r\n currentQueue.current = (\r\n \r\n {isRefreshing && !isAllPopulated ? : null}\r\n\r\n {!isRefreshing && hasError ? (\r\n {translate('QueueLoadError')}\r\n ) : null}\r\n\r\n {isAllPopulated && !hasError && !items.length ? (\r\n \r\n {selectedFilterKey !== 'all' && count > 0\r\n ? translate('QueueFilterHasNoItems')\r\n : translate('QueueIsEmpty')}\r\n \r\n ) : null}\r\n\r\n {isAllPopulated && !hasError && !!items.length ? (\r\n
\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n\r\n \r\n
\r\n ) : null}\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n {currentQueue.current}\r\n\r\n {\r\n const item = items.find((i) => i.id === id);\r\n\r\n return !!(item && item.downloadClientHasPostImportCategory);\r\n })\r\n }\r\n canIgnore={\r\n isConfirmRemoveModalOpen &&\r\n selectedIds.every((id) => {\r\n const item = items.find((i) => i.id === id);\r\n\r\n return !!(item && item.movieId);\r\n })\r\n }\r\n isPending={\r\n isConfirmRemoveModalOpen &&\r\n selectedIds.every((id) => {\r\n const item = items.find((i) => i.id === id);\r\n\r\n if (!item) {\r\n return false;\r\n }\r\n\r\n return (\r\n item.status === 'delay' ||\r\n item.status === 'downloadClientUnavailable'\r\n );\r\n })\r\n }\r\n onRemovePress={handleRemoveSelectedConfirmed}\r\n onModalClose={handleConfirmRemoveModalClose}\r\n />\r\n \r\n );\r\n}\r\n\r\nexport default Queue;\r\n","function hasDifferentItems(prevItems, currentItems, idProp = 'id') {\r\n if (prevItems === currentItems) {\r\n return false;\r\n }\r\n\r\n if (prevItems.length !== currentItems.length) {\r\n return true;\r\n }\r\n\r\n const currentItemIds = new Set();\r\n\r\n currentItems.forEach((currentItem) => {\r\n currentItemIds.add(currentItem[idProp]);\r\n });\r\n\r\n return prevItems.some((prevItem) => !currentItemIds.has(prevItem[idProp]));\r\n}\r\n\r\nexport default hasDifferentItems;\r\n","import KeysMatching from 'typings/Helpers/KeysMatching';\r\n\r\nfunction selectUniqueIds(items: T[], idProp: KeysMatching) {\r\n return items.reduce((acc: K[], item) => {\r\n if (item[idProp] && acc.indexOf(item[idProp] as K) === -1) {\r\n acc.push(item[idProp] as K);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n}\r\n\r\nexport default selectUniqueIds;\r\n","import { some } from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport createAllMoviesSelector from './createAllMoviesSelector';\r\n\r\nfunction createExistingMovieSelector() {\r\n return createSelector(\r\n (_: AppState, { tmdbId }: { tmdbId: number }) => tmdbId,\r\n createAllMoviesSelector(),\r\n (tmdbId, movies) => {\r\n return some(movies, { tmdbId });\r\n }\r\n );\r\n}\r\n\r\nexport default createExistingMovieSelector;\r\n","import React from 'react';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { kinds, tooltipPositions } from 'Helpers/Props';\r\nimport { Ratings, RatingValues } from 'Movie/Movie';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ImdbRating.css';\r\n\r\ninterface ImdbRatingProps {\r\n ratings: Ratings;\r\n iconSize?: number;\r\n hideIcon?: boolean;\r\n}\r\n\r\nfunction ImdbRating(props: ImdbRatingProps) {\r\n const { ratings, iconSize = 14, hideIcon = false } = props;\r\n\r\n const imdbImage =\r\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB2aWV3Qm94PSIwIDAgNTc1IDI4OS44MyIgd2lkdGg9IjU3NSIgaGVpZ2h0PSIyODkuODMiPjxkZWZzPjxwYXRoIGQ9Ik01NzUgMjQuOTFDNTczLjQ0IDEyLjE1IDU2My45NyAxLjk4IDU1MS45MSAwQzQ5OS4wNSAwIDc2LjE4IDAgMjMuMzIgMEMxMC4xMSAyLjE3IDAgMTQuMTYgMCAyOC42MUMwIDUxLjg0IDAgMjM3LjY0IDAgMjYwLjg2QzAgMjc2Ljg2IDEyLjM3IDI4OS44MyAyNy42NCAyODkuODNDNzkuNjMgMjg5LjgzIDQ5NS42IDI4OS44MyA1NDcuNTkgMjg5LjgzQzU2MS42NSAyODkuODMgNTczLjI2IDI3OC44MiA1NzUgMjY0LjU3QzU3NSAyMTYuNjQgNTc1IDQ4Ljg3IDU3NSAyNC45MVoiIGlkPSJkMXB3aGY5d3kyIj48L3BhdGg+PHBhdGggZD0iTTY5LjM1IDU4LjI0TDExNC45OCA1OC4yNEwxMTQuOTggMjMzLjg5TDY5LjM1IDIzMy44OUw2OS4zNSA1OC4yNFoiIGlkPSJnNWpqbnEyNnlTIj48L3BhdGg+PHBhdGggZD0iTTIwMS4yIDEzOS4xNUMxOTcuMjggMTEyLjM4IDE5NS4xIDk3LjUgMTk0LjY3IDk0LjUzQzE5Mi43NiA4MC4yIDE5MC45NCA2Ny43MyAxODkuMiA1Ny4wOUMxODUuMjUgNTcuMDkgMTY1LjU0IDU3LjA5IDEzMC4wNCA1Ny4wOUwxMzAuMDQgMjMyLjc0TDE3MC4wMSAyMzIuNzRMMTcwLjE1IDExNi43NkwxODYuOTcgMjMyLjc0TDIxNS40NCAyMzIuNzRMMjMxLjM5IDExNC4xOEwyMzEuNTQgMjMyLjc0TDI3MS4zOCAyMzIuNzRMMjcxLjM4IDU3LjA5TDIxMS43NyA1Ny4wOUwyMDEuMiAxMzkuMTVaIiBpZD0iaTNQcmgxSnBYdCI+PC9wYXRoPjxwYXRoIGQ9Ik0zNDYuNzEgOTMuNjNDMzQ3LjIxIDk1Ljg3IDM0Ny40NyAxMDAuOTUgMzQ3LjQ3IDEwOC44OUMzNDcuNDcgMTE1LjcgMzQ3LjQ3IDE3MC4xOCAzNDcuNDcgMTc2Ljk5QzM0Ny40NyAxODguNjggMzQ2LjcxIDE5NS44NCAzNDUuMiAxOTguNDhDMzQzLjY4IDIwMS4xMiAzMzkuNjQgMjAyLjQzIDMzMy4wOSAyMDIuNDNDMzMzLjA5IDE5MC45IDMzMy4wOSA5OC42NiAzMzMuMDkgODcuMTNDMzM4LjA2IDg3LjEzIDM0MS40NSA4Ny42NiAzNDMuMjUgODguN0MzNDUuMDUgODkuNzUgMzQ2LjIxIDkxLjM5IDM0Ni43MSA5My42M1pNMzY3LjMyIDIzMC45NUMzNzIuNzUgMjI5Ljc2IDM3Ny4zMSAyMjcuNjYgMzgxLjAxIDIyNC42N0MzODQuNyAyMjEuNjcgMzg3LjI5IDIxNy41MiAzODguNzcgMjEyLjIxQzM5MC4yNiAyMDYuOTEgMzkxLjE0IDE5Ni4zOCAzOTEuMTQgMTgwLjYzQzM5MS4xNCAxNzQuNDcgMzkxLjE0IDEyNS4xMiAzOTEuMTQgMTE4Ljk1QzM5MS4xNCAxMDIuMzMgMzkwLjQ5IDkxLjE5IDM4OS40OCA4NS41M0MzODguNDYgNzkuODYgMzg1LjkzIDc0LjcxIDM4MS44OCA3MC4wOUMzNzcuODIgNjUuNDcgMzcxLjkgNjIuMTUgMzY0LjEyIDYwLjEzQzM1Ni4zMyA1OC4xMSAzNDMuNjMgNTcuMDkgMzIxLjU0IDU3LjA5QzMxOS4yNyA1Ny4wOSAzMDcuOTMgNTcuMDkgMjg3LjUgNTcuMDlMMjg3LjUgMjMyLjc0TDM0Mi43OCAyMzIuNzRDMzU1LjUyIDIzMi4zNCAzNjMuNyAyMzEuNzUgMzY3LjMyIDIzMC45NVoiIGlkPSJhNG92OXJSR1FtIj48L3BhdGg+PHBhdGggZD0iTTQ2NC43NiAyMDQuN0M0NjMuOTIgMjA2LjkzIDQ2MC4yNCAyMDguMDYgNDU3LjQ2IDIwOC4wNkM0NTQuNzQgMjA4LjA2IDQ1Mi45MyAyMDYuOTggNDUyLjAxIDIwNC44MUM0NTEuMDkgMjAyLjY1IDQ1MC42NCAxOTcuNzIgNDUwLjY0IDE5MEM0NTAuNjQgMTg1LjM2IDQ1MC42NCAxNDguMjIgNDUwLjY0IDE0My41OEM0NTAuNjQgMTM1LjU4IDQ1MS4wNCAxMzAuNTkgNDUxLjg1IDEyOC42QzQ1Mi42NSAxMjYuNjMgNDU0LjQxIDEyNS42MyA0NTcuMTMgMTI1LjYzQzQ1OS45MSAxMjUuNjMgNDYzLjY0IDEyNi43NiA0NjQuNiAxMjkuMDNDNDY1LjU1IDEzMS4zIDQ2Ni4wMyAxMzYuMTUgNDY2LjAzIDE0My41OEM0NjYuMDMgMTQ2LjU4IDQ2Ni4wMyAxNjEuNTggNDY2LjAzIDE4OC41OUM0NjUuNzQgMTk3Ljg0IDQ2NS4zMiAyMDMuMjEgNDY0Ljc2IDIwNC43Wk00MDYuNjggMjMxLjIxTDQ0Ny43NiAyMzEuMjFDNDQ5LjQ3IDIyNC41IDQ1MC40MSAyMjAuNzcgNDUwLjYgMjIwLjAyQzQ1NC4zMiAyMjQuNTIgNDU4LjQxIDIyNy45IDQ2Mi45IDIzMC4xNEM0NjcuMzcgMjMyLjM5IDQ3NC4wNiAyMzMuNTEgNDc5LjI0IDIzMy41MUM0ODYuNDUgMjMzLjUxIDQ5Mi42NyAyMzEuNjIgNDk3LjkyIDIyNy44M0M1MDMuMTYgMjI0LjA1IDUwNi41IDIxOS41NyA1MDcuOTIgMjE0LjQyQzUwOS4zNCAyMDkuMjYgNTEwLjA1IDIwMS40MiA1MTAuMDUgMTkwLjg4QzUxMC4wNSAxODUuOTUgNTEwLjA1IDE0Ni41MyA1MTAuMDUgMTQxLjZDNTEwLjA1IDEzMSA1MDkuODEgMTI0LjA4IDUwOS4zNCAxMjAuODNDNTA4Ljg3IDExNy41OCA1MDcuNDcgMTE0LjI3IDUwNS4xNCAxMTAuODhDNTAyLjgxIDEwNy40OSA0OTkuNDIgMTA0Ljg2IDQ5NC45OCAxMDIuOThDNDkwLjU0IDEwMS4xIDQ4NS4zIDEwMC4xNiA0NzkuMjYgMTAwLjE2QzQ3NC4wMSAxMDAuMTYgNDY3LjI5IDEwMS4yMSA0NjIuODEgMTAzLjI4QzQ1OC4zNCAxMDUuMzUgNDU0LjI4IDEwOC40OSA0NTAuNjQgMTEyLjdDNDUwLjY0IDEwOC44OSA0NTAuNjQgODkuODUgNDUwLjY0IDU1LjU2TDQwNi42OCA1NS41Nkw0MDYuNjggMjMxLjIxWiIgaWQ9ImZrOTY4QnBzWCI+PC9wYXRoPjwvZGVmcz48Zz48Zz48Zz48dXNlIHhsaW5rOmhyZWY9IiNkMXB3aGY5d3kyIiBvcGFjaXR5PSIxIiBmaWxsPSIjZjZjNzAwIiBmaWxsLW9wYWNpdHk9IjEiPjwvdXNlPjxnPjx1c2UgeGxpbms6aHJlZj0iI2QxcHdoZjl3eTIiIG9wYWNpdHk9IjEiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEiIHN0cm9rZS1vcGFjaXR5PSIwIj48L3VzZT48L2c+PC9nPjxnPjx1c2UgeGxpbms6aHJlZj0iI2c1ampucTI2eVMiIG9wYWNpdHk9IjEiIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMSI+PC91c2U+PGc+PHVzZSB4bGluazpocmVmPSIjZzVqam5xMjZ5UyIgb3BhY2l0eT0iMSIgZmlsbC1vcGFjaXR5PSIwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLW9wYWNpdHk9IjAiPjwvdXNlPjwvZz48L2c+PGc+PHVzZSB4bGluazpocmVmPSIjaTNQcmgxSnBYdCIgb3BhY2l0eT0iMSIgZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIxIj48L3VzZT48Zz48dXNlIHhsaW5rOmhyZWY9IiNpM1ByaDFKcFh0IiBvcGFjaXR5PSIxIiBmaWxsLW9wYWNpdHk9IjAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxIiBzdHJva2Utb3BhY2l0eT0iMCI+PC91c2U+PC9nPjwvZz48Zz48dXNlIHhsaW5rOmhyZWY9IiNhNG92OXJSR1FtIiBvcGFjaXR5PSIxIiBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjEiPjwvdXNlPjxnPjx1c2UgeGxpbms6aHJlZj0iI2E0b3Y5clJHUW0iIG9wYWNpdHk9IjEiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEiIHN0cm9rZS1vcGFjaXR5PSIwIj48L3VzZT48L2c+PC9nPjxnPjx1c2UgeGxpbms6aHJlZj0iI2ZrOTY4QnBzWCIgb3BhY2l0eT0iMSIgZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIxIj48L3VzZT48Zz48dXNlIHhsaW5rOmhyZWY9IiNmazk2OEJwc1giIG9wYWNpdHk9IjEiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEiIHN0cm9rZS1vcGFjaXR5PSIwIj48L3VzZT48L2c+PC9nPjwvZz48L2c+PC9zdmc+';\r\n\r\n const { imdb: imdbRatings = {} as RatingValues } = ratings;\r\n const { value = 0, votes = 0 } = imdbRatings;\r\n\r\n return (\r\n \r\n {!hideIcon && (\r\n \r\n )}\r\n {value.toFixed(1)}\r\n \r\n }\r\n tooltip={translate('CountVotes', { votes })}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n />\r\n );\r\n}\r\n\r\nexport default ImdbRating;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"ImdbRating-wrapper-YHIFy\",\"image\":\"ImdbRating-image-EBG7Y\"};","import React from 'react';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { kinds, tooltipPositions } from 'Helpers/Props';\r\nimport { Ratings } from 'Movie/Movie';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './TmdbRating.css';\r\n\r\ninterface TmdbRatingProps {\r\n ratings: Ratings;\r\n iconSize?: number;\r\n hideIcon?: boolean;\r\n}\r\n\r\nfunction TmdbRating(props: TmdbRatingProps) {\r\n const { ratings, iconSize = 14, hideIcon = false } = props;\r\n\r\n const tmdbImage =\r\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOTAuMjQgODEuNTIiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeTE9IjQwLjc2IiB4Mj0iMTkwLjI0IiB5Mj0iNDAuNzYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MGNlYTEiLz48c3RvcCBvZmZzZXQ9Ii41NiIgc3RvcC1jb2xvcj0iIzNjYmVjOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAwYjNlNSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9Ik0xMDUuNjcgMzYuMDZoNjYuOWExNy42NyAxNy42NyAwIDAwMTcuNjctMTcuNjZBMTcuNjcgMTcuNjcgMCAwMDE3Mi41Ny43M2gtNjYuOUExNy42NyAxNy42NyAwIDAwODggMTguNGExNy42NyAxNy42NyAwIDAwMTcuNjcgMTcuNjZ6bS04OCA0NWg3Ni45YTE3LjY3IDE3LjY3IDAgMDAxNy42Ny0xNy42NiAxNy42NyAxNy42NyAwIDAwLTE3LjY3LTE3LjY3aC03Ni45QTE3LjY3IDE3LjY3IDAgMDAwIDYzLjRhMTcuNjcgMTcuNjcgMCAwMDE3LjY3IDE3LjY2em0tNy4yNi00NS42NGg3LjhWNi45MmgxMC4xVjBoLTI4djYuOWgxMC4xem0yOC4xIDBoNy44VjguMjVoLjFsOSAyNy4xNWg2bDkuMy0yNy4xNWguMVYzNS40aDcuOFYwSDY2Ljc2bC04LjIgMjMuMWgtLjFMNTAuMzEgMGgtMTEuOHptMTEzLjkyIDIwLjI1YTE1LjA3IDE1LjA3IDAgMDAtNC41Mi01LjUyIDE4LjU3IDE4LjU3IDAgMDAtNi42OC0zLjA4IDMzLjU0IDMzLjU0IDAgMDAtOC4wNy0xaC0xMS43djM1LjRoMTIuNzVhMjQuNTggMjQuNTggMCAwMDcuNTUtMS4xNSAxOS4zNCAxOS4zNCAwIDAwNi4zNS0zLjMyIDE2LjI3IDE2LjI3IDAgMDA0LjM3LTUuNSAxNi45MSAxNi45MSAwIDAwMS42My03LjU4IDE4LjUgMTguNSAwIDAwLTEuNjgtOC4yNXpNMTQ1IDY4LjZhOC44IDguOCAwIDAxLTIuNjQgMy40IDEwLjcgMTAuNyAwIDAxLTQgMS44MiAyMS41NyAyMS41NyAwIDAxLTUgLjU1aC00LjA1di0yMWg0LjZhMTcgMTcgMCAwMTQuNjcuNjMgMTEuNjYgMTEuNjYgMCAwMTMuODggMS44N0E5LjE0IDkuMTQgMCAwMTE0NSA1OWE5Ljg3IDkuODcgMCAwMTEgNC41MiAxMS44OSAxMS44OSAwIDAxLTEgNS4wOHptNDQuNjMtLjEzYTggOCAwIDAwLTEuNTgtMi42MiA4LjM4IDguMzggMCAwMC0yLjQyLTEuODUgMTAuMzEgMTAuMzEgMCAwMC0zLjE3LTF2LS4xYTkuMjIgOS4yMiAwIDAwNC40Mi0yLjgyIDcuNDMgNy40MyAwIDAwMS42OC01IDguNDIgOC40MiAwIDAwLTEuMTUtNC42NSA4LjA5IDguMDkgMCAwMC0zLTIuNzIgMTIuNTYgMTIuNTYgMCAwMC00LjE4LTEuMyAzMi44NCAzMi44NCAwIDAwLTQuNjItLjMzaC0xMy4ydjM1LjRoMTQuNWEyMi40MSAyMi40MSAwIDAwNC43Mi0uNSAxMy41MyAxMy41MyAwIDAwNC4yOC0xLjY1IDkuNDIgOS40MiAwIDAwMy4xLTMgOC41MiA4LjUyIDAgMDAxLjItNC42OCA5LjM5IDkuMzkgMCAwMC0uNTUtMy4xOHptLTE5LjQyLTE1Ljc1aDUuM2ExMCAxMCAwIDAxMS44NS4xOCA2LjE4IDYuMTggMCAwMTEuNy41NyAzLjM5IDMuMzkgMCAwMTEuMjIgMS4xMyAzLjIyIDMuMjIgMCAwMS40OCAxLjgyIDMuNjMgMy42MyAwIDAxLS40MyAxLjggMy40IDMuNCAwIDAxLTEuMTIgMS4yIDQuOTIgNC45MiAwIDAxLTEuNTguNjUgNy41MSA3LjUxIDAgMDEtMS43Ny4yaC01LjY1em0xMS43MiAyMGEzLjkgMy45IDAgMDEtMS4yMiAxLjMgNC42NCA0LjY0IDAgMDEtMS42OC43IDguMTggOC4xOCAwIDAxLTEuODIuMmgtN3YtOGg1LjlhMTUuMzUgMTUuMzUgMCAwMTIgLjE1IDguNDcgOC40NyAwIDAxMi4wNS41NSA0IDQgMCAwMTEuNTcgMS4xOCAzLjExIDMuMTEgMCAwMS42MyAyIDMuNzEgMy43MSAwIDAxLS40MyAxLjkyeiIgZmlsbD0idXJsKCNhKSIvPjwvc3ZnPg==';\r\n\r\n const { value = 0, votes = 0 } = ratings.tmdb;\r\n\r\n return (\r\n \r\n {!hideIcon && (\r\n \r\n )}\r\n {(value * 10).toFixed()}%\r\n \r\n }\r\n tooltip={translate('CountVotes', { votes })}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n />\r\n );\r\n}\r\n\r\nexport default TmdbRating;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"TmdbRating-wrapper-sR4cs\",\"image\":\"TmdbRating-image-TmxGo\"};","// extracted by mini-css-extract-plugin\nexport default {\"links\":\"MovieDetailsLinks-links-eFF77\",\"link\":\"MovieDetailsLinks-link-RA9Kf\",\"linkLabel\":\"MovieDetailsLinks-linkLabel-GGMIV Label-label-DYldh\"};","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport Link from 'Components/Link/Link';\r\nimport { kinds, sizes } from 'Helpers/Props';\r\nimport Movie from 'Movie/Movie';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MovieDetailsLinks.css';\r\n\r\ntype MovieDetailsLinksProps = Pick<\r\n Movie,\r\n 'tmdbId' | 'imdbId' | 'youTubeTrailerId'\r\n>;\r\n\r\nfunction MovieDetailsLinks(props: MovieDetailsLinksProps) {\r\n const { tmdbId, imdbId, youTubeTrailerId } = props;\r\n\r\n return (\r\n
\r\n \r\n \r\n {translate('TMDb')}\r\n \r\n \r\n\r\n \r\n \r\n {translate('Trakt')}\r\n \r\n \r\n\r\n \r\n \r\n {translate('Letterboxd')}\r\n \r\n \r\n\r\n {imdbId ? (\r\n <>\r\n \r\n \r\n {translate('IMDb')}\r\n \r\n \r\n\r\n \r\n \r\n {translate('MovieChat')}\r\n \r\n \r\n\r\n \r\n \r\n MDBList\r\n \r\n \r\n\r\n \r\n \r\n Blu-ray\r\n \r\n \r\n \r\n ) : null}\r\n\r\n {youTubeTrailerId ? (\r\n \r\n \r\n {translate('Trailer')}\r\n \r\n \r\n ) : null}\r\n
\r\n );\r\n}\r\n\r\nexport default MovieDetailsLinks;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nexport function createQueueItemSelectorForHook(movieId: number) {\r\n return createSelector(\r\n (state: AppState) => state.queue.details.items,\r\n (details) => {\r\n if (!movieId || !details) {\r\n return null;\r\n }\r\n\r\n return details.find((item) => item.movieId === movieId);\r\n }\r\n );\r\n}\r\n\r\nfunction createQueueItemSelector() {\r\n return createSelector(\r\n (_: AppState, { movieId }: { movieId: number }) => movieId,\r\n (state: AppState) => state.queue.details.items,\r\n (movieId, details) => {\r\n if (!movieId || !details) {\r\n return null;\r\n }\r\n\r\n return details.find((item) => item.movieId === movieId);\r\n }\r\n );\r\n}\r\n\r\nexport default createQueueItemSelector;\r\n","function firstCharToUpper(input) {\r\n if (!input) {\r\n return '';\r\n }\r\n\r\n return [].map.call(input, (char, i) => (i ? char : char.toUpperCase())).join('');\r\n}\r\n\r\nexport default firstCharToUpper;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"queue\":\"MovieStatusLabel-queue-dZcLa\",\"continuing\":\"MovieStatusLabel-continuing-OxtJc\",\"availNotMonitored\":\"MovieStatusLabel-availNotMonitored-IDhBN\",\"ended\":\"MovieStatusLabel-ended-Zv66T\",\"missingMonitored\":\"MovieStatusLabel-missingMonitored-mGr6p\",\"missingUnmonitored\":\"MovieStatusLabel-missingUnmonitored-K4_q5\",\"deleted\":\"MovieStatusLabel-deleted-ZWP9H\"};","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport Label from 'Components/Label';\r\nimport { kinds, sizes } from 'Helpers/Props';\r\nimport { Kind } from 'Helpers/Props/kinds';\r\nimport { MovieStatus } from 'Movie/Movie';\r\nimport { createQueueItemSelectorForHook } from 'Store/Selectors/createQueueItemSelector';\r\nimport Queue from 'typings/Queue';\r\nimport getQueueStatusText from 'Utilities/Movie/getQueueStatusText';\r\nimport firstCharToUpper from 'Utilities/String/firstCharToUpper';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MovieStatusLabel.css';\r\n\r\nfunction getMovieStatus(\r\n status: MovieStatus,\r\n isMonitored: boolean,\r\n isAvailable: boolean,\r\n hasFiles: boolean,\r\n queueItem: Queue | null = null\r\n) {\r\n if (queueItem) {\r\n const queueStatus = queueItem.status;\r\n const queueState = queueItem.trackedDownloadStatus;\r\n const queueStatusText = getQueueStatusText(queueStatus, queueState);\r\n\r\n if (queueStatusText) {\r\n return queueStatusText;\r\n }\r\n }\r\n\r\n if (hasFiles && !isMonitored) {\r\n return 'availNotMonitored';\r\n }\r\n\r\n if (hasFiles) {\r\n return 'ended';\r\n }\r\n\r\n if (status === 'deleted') {\r\n return 'deleted';\r\n }\r\n\r\n if (isAvailable && !isMonitored && !hasFiles) {\r\n return 'missingUnmonitored';\r\n }\r\n\r\n if (isAvailable && !hasFiles) {\r\n return 'missingMonitored';\r\n }\r\n\r\n return 'continuing';\r\n}\r\n\r\ninterface MovieStatusLabelProps {\r\n movieId: number;\r\n monitored: boolean;\r\n isAvailable: boolean;\r\n hasMovieFiles: boolean;\r\n status: MovieStatus;\r\n useLabel?: boolean;\r\n}\r\n\r\nfunction MovieStatusLabel({\r\n movieId,\r\n monitored,\r\n isAvailable,\r\n hasMovieFiles,\r\n status,\r\n useLabel = false,\r\n}: MovieStatusLabelProps) {\r\n const queueItem = useSelector(createQueueItemSelectorForHook(movieId));\r\n\r\n let movieStatus = getMovieStatus(\r\n status,\r\n monitored,\r\n isAvailable,\r\n hasMovieFiles,\r\n queueItem\r\n );\r\n\r\n let statusClass = movieStatus;\r\n\r\n if (movieStatus === 'availNotMonitored' || movieStatus === 'ended') {\r\n movieStatus = 'downloaded';\r\n } else if (\r\n movieStatus === 'missingMonitored' ||\r\n movieStatus === 'missingUnmonitored'\r\n ) {\r\n movieStatus = 'missing';\r\n } else if (movieStatus === 'continuing') {\r\n movieStatus = 'notAvailable';\r\n }\r\n\r\n if (queueItem) {\r\n statusClass = 'queue';\r\n }\r\n\r\n if (useLabel) {\r\n let kind: Kind = kinds.SUCCESS;\r\n\r\n switch (statusClass) {\r\n case 'queue':\r\n kind = kinds.QUEUE;\r\n break;\r\n case 'missingMonitored':\r\n kind = kinds.DANGER;\r\n break;\r\n case 'continuing':\r\n kind = kinds.INFO;\r\n break;\r\n case 'availNotMonitored':\r\n kind = kinds.DEFAULT;\r\n break;\r\n case 'missingUnmonitored':\r\n kind = kinds.WARNING;\r\n break;\r\n case 'deleted':\r\n kind = kinds.INVERSE;\r\n break;\r\n default:\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {translate(firstCharToUpper(movieStatus))}\r\n \r\n );\r\n}\r\n\r\nexport default MovieStatusLabel;\r\n","import titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nexport default function getQueueStatusText(queueStatus, queueState) {\r\n if (!queueStatus) {\r\n return;\r\n }\r\n\r\n let status = translate('Downloading');\r\n\r\n switch (true) {\r\n case queueStatus !== 'completed':\r\n switch (queueStatus) {\r\n case 'queue':\r\n case 'paused':\r\n case 'failed':\r\n case 'downloading':\r\n status = titleCase(queueStatus);\r\n break;\r\n case 'delay':\r\n case 'downloadClientUnavailable':\r\n status = translate('Pending');\r\n break;\r\n case 'warning':\r\n status = translate('Error');\r\n break;\r\n default:\r\n }\r\n break;\r\n\r\n case queueStatus === 'completed':\r\n switch (queueState) {\r\n case 'importPending':\r\n status = translate('Pending');\r\n break;\r\n case 'importing':\r\n status = translate('Importing');\r\n break;\r\n case 'failedPending':\r\n status = translate('Waiting');\r\n break;\r\n default:\r\n }\r\n break;\r\n\r\n default:\r\n }\r\n\r\n return status;\r\n}\r\n","import { kinds } from 'Helpers/Props';\r\nimport { MovieStatus } from 'Movie/Movie';\r\n\r\nfunction getProgressBarKind(\r\n status: MovieStatus,\r\n monitored: boolean,\r\n hasFile: boolean,\r\n isAvailable: boolean,\r\n isDownloading: boolean = false\r\n) {\r\n if (isDownloading) {\r\n return kinds.PURPLE;\r\n }\r\n\r\n if (hasFile && monitored) {\r\n return kinds.SUCCESS;\r\n }\r\n\r\n if (hasFile && !monitored) {\r\n return kinds.DEFAULT;\r\n }\r\n\r\n if (status === 'deleted') {\r\n return kinds.INVERSE;\r\n }\r\n\r\n if (isAvailable && monitored) {\r\n return kinds.DANGER;\r\n }\r\n\r\n if (!monitored) {\r\n return kinds.WARNING;\r\n }\r\n\r\n return kinds.PRIMARY;\r\n}\r\n\r\nexport default getProgressBarKind;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport ProgressBar from 'Components/ProgressBar';\r\nimport { sizes } from 'Helpers/Props';\r\nimport createMovieQueueItemsDetailsSelector, {\r\n MovieQueueDetails,\r\n} from 'Movie/Index/createMovieQueueDetailsSelector';\r\nimport { MovieStatus } from 'Movie/Movie';\r\nimport { MovieFile } from 'MovieFile/MovieFile';\r\nimport getProgressBarKind from 'Utilities/Movie/getProgressBarKind';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MovieIndexProgressBar.css';\r\n\r\ninterface MovieIndexProgressBarProps {\r\n movieId: number;\r\n movieFile: MovieFile;\r\n monitored: boolean;\r\n status: MovieStatus;\r\n hasFile: boolean;\r\n isAvailable: boolean;\r\n width: number;\r\n detailedProgressBar: boolean;\r\n bottomRadius?: boolean;\r\n isStandAlone?: boolean;\r\n}\r\n\r\nfunction MovieIndexProgressBar(props: MovieIndexProgressBarProps) {\r\n const {\r\n movieId,\r\n movieFile,\r\n monitored,\r\n status,\r\n hasFile,\r\n isAvailable,\r\n width,\r\n detailedProgressBar,\r\n bottomRadius,\r\n isStandAlone,\r\n } = props;\r\n\r\n const queueDetails: MovieQueueDetails = useSelector(\r\n createMovieQueueItemsDetailsSelector(movieId)\r\n );\r\n\r\n const progress = 100;\r\n const queueStatusText =\r\n queueDetails.count > 0 ? translate('Downloading') : null;\r\n\r\n let movieStatus = translate('NotAvailable');\r\n if (hasFile) {\r\n movieStatus = movieFile?.quality?.quality.name ?? translate('Downloaded');\r\n } else if (status === 'deleted') {\r\n movieStatus = translate('Deleted');\r\n } else if (isAvailable && !hasFile) {\r\n movieStatus = translate('Missing');\r\n }\r\n\r\n const attachedClassName = bottomRadius\r\n ? styles.progressRadius\r\n : styles.progress;\r\n const containerClassName = isStandAlone ? undefined : attachedClassName;\r\n\r\n return (\r\n 0\r\n )}\r\n size={detailedProgressBar ? sizes.MEDIUM : sizes.SMALL}\r\n showText={detailedProgressBar}\r\n width={width}\r\n text={queueStatusText ? queueStatusText : movieStatus}\r\n />\r\n );\r\n}\r\n\r\nexport default MovieIndexProgressBar;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nexport interface MovieQueueDetails {\r\n count: number;\r\n}\r\n\r\nfunction createMovieQueueDetailsSelector(movieId: number) {\r\n return createSelector(\r\n (state: AppState) => state.queue.details.items,\r\n (queueItems) => {\r\n return queueItems.reduce(\r\n (acc: MovieQueueDetails, item) => {\r\n if (\r\n item.trackedDownloadState === 'imported' ||\r\n item.movieId !== movieId\r\n ) {\r\n return acc;\r\n }\r\n\r\n acc.count++;\r\n\r\n return acc;\r\n },\r\n {\r\n count: 0,\r\n }\r\n );\r\n }\r\n );\r\n}\r\n\r\nexport default createMovieQueueDetailsSelector;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"progress\":\"MovieIndexProgressBar-progress-ux7Iv ProgressBar-container-VCeFi\",\"progressRadius\":\"MovieIndexProgressBar-progressRadius-W9Yb0 ProgressBar-container-VCeFi\",\"progressBar\":\"MovieIndexProgressBar-progressBar-hAbdm ProgressBar-progressBar-xAcCf\"};","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { kinds, sizes, tooltipPositions } from 'Helpers/Props';\r\n\r\ninterface MovieGenresProps {\r\n className?: string;\r\n genres: string[];\r\n}\r\n\r\nfunction MovieGenres({ className, genres }: MovieGenresProps) {\r\n const firstGenres = genres.slice(0, 3);\r\n const otherGenres = genres.slice(3);\r\n\r\n if (otherGenres.length) {\r\n return (\r\n {firstGenres.join(', ')}}\r\n tooltip={\r\n
\r\n {otherGenres.map((tag) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n }\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n />\r\n );\r\n }\r\n\r\n return {firstGenres.join(', ')};\r\n}\r\n\r\nexport default MovieGenres;\r\n","import translate from 'Utilities/String/translate';\r\n\r\nfunction formatRuntime(runtime: number, format = 'hoursMinutes') {\r\n if (!runtime) {\r\n return format === 'hoursMinutes' ? '0m' : '0 mins';\r\n }\r\n\r\n if (format === 'minutes') {\r\n return `${runtime} mins`;\r\n }\r\n\r\n const hours = Math.floor(runtime / 60);\r\n const minutes = runtime % 60;\r\n const result = [];\r\n\r\n if (hours) {\r\n result.push(translate('FormatRuntimeHours', { hours }));\r\n }\r\n\r\n if (minutes) {\r\n result.push(translate('FormatRuntimeMinutes', { minutes }));\r\n }\r\n\r\n return result.join(' ');\r\n}\r\n\r\nexport default formatRuntime;\r\n","import React from 'react';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction MovieMinimumAvailabilityPopoverContent() {\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieMinimumAvailabilityPopoverContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"AddNewMovieModalContent-container-ynV1e\",\"year\":\"AddNewMovieModalContent-year-ZSPwM\",\"poster\":\"AddNewMovieModalContent-poster-wvjLk\",\"info\":\"AddNewMovieModalContent-info-W006x\",\"overview\":\"AddNewMovieModalContent-overview-Fkqwx\",\"labelIcon\":\"AddNewMovieModalContent-labelIcon-EcXh5\",\"searchForMissingMovieLabelContainer\":\"AddNewMovieModalContent-searchForMissingMovieLabelContainer-fdu9b\",\"searchForMissingMovieLabel\":\"AddNewMovieModalContent-searchForMissingMovieLabel-KXzo4\",\"searchForMissingMovieContainer\":\"AddNewMovieModalContent-searchForMissingMovieContainer-v0AfZ CheckInput-container-FXKYv\",\"searchForMissingMovieInput\":\"AddNewMovieModalContent-searchForMissingMovieInput-CReO3 CheckInput-input-VAM1T\",\"modalFooter\":\"AddNewMovieModalContent-modalFooter-QaqPr ModalFooter-modalFooter-wjkx5\",\"addButton\":\"AddNewMovieModalContent-addButton-XoBKi SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport MovieMinimumAvailabilityPopoverContent from 'AddMovie/MovieMinimumAvailabilityPopoverContent';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Icon from 'Components/Icon';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons, inputTypes, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './AddNewMovieModalContent.css';\r\n\r\nclass AddNewMovieModalContent extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onQualityProfileIdChange = ({ value }) => {\r\n this.props.onInputChange({ name: 'qualityProfileId', value: parseInt(value) });\r\n };\r\n\r\n onAddMoviePress = () => {\r\n this.props.onAddMoviePress();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n title,\r\n year,\r\n overview,\r\n images,\r\n isAdding,\r\n rootFolderPath,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n searchForMovie,\r\n folder,\r\n tags,\r\n isSmallScreen,\r\n isWindows,\r\n onModalClose,\r\n onInputChange\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {title}\r\n\r\n {\r\n !title.contains(year) && !!year &&\r\n ({year})\r\n }\r\n \r\n\r\n \r\n
\r\n {\r\n !isSmallScreen &&\r\n
\r\n \r\n
\r\n }\r\n\r\n
\r\n
\r\n {overview}\r\n
\r\n\r\n
\r\n \r\n {translate('RootFolder')}\r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('Monitor')}\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('MinimumAvailability')}\r\n\r\n \r\n }\r\n title={translate('MinimumAvailability')}\r\n body={}\r\n position={tooltipPositions.RIGHT}\r\n />\r\n \r\n\r\n \r\n \r\n\r\n \r\n {translate('QualityProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n {translate('AddMovie')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nAddNewMovieModalContent.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n overview: PropTypes.string,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isAdding: PropTypes.bool.isRequired,\r\n addError: PropTypes.object,\r\n rootFolderPath: PropTypes.object,\r\n monitor: PropTypes.object.isRequired,\r\n qualityProfileId: PropTypes.object,\r\n minimumAvailability: PropTypes.object.isRequired,\r\n searchForMovie: PropTypes.object.isRequired,\r\n folder: PropTypes.string.isRequired,\r\n tags: PropTypes.object.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n isWindows: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onAddMoviePress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNewMovieModalContent;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { addMovie, setAddMovieDefault } from 'Store/Actions/addMovieActions';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport AddNewMovieModalContent from './AddNewMovieModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.addMovie,\r\n createDimensionsSelector(),\r\n createSystemStatusSelector(),\r\n (addMovieState, dimensions, systemStatus) => {\r\n const {\r\n isAdding,\r\n addError,\r\n defaults\r\n } = addMovieState;\r\n\r\n const {\r\n settings,\r\n validationErrors,\r\n validationWarnings\r\n } = selectSettings(defaults, {}, addError);\r\n\r\n return {\r\n isAdding,\r\n addError,\r\n isSmallScreen: dimensions.isSmallScreen,\r\n validationErrors,\r\n validationWarnings,\r\n isWindows: systemStatus.isWindows,\r\n ...settings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setAddMovieDefault,\r\n addMovie\r\n};\r\n\r\nclass AddNewMovieModalContentConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setAddMovieDefault({ [name]: value });\r\n };\r\n\r\n onAddMoviePress = () => {\r\n const {\r\n tmdbId,\r\n rootFolderPath,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n searchForMovie,\r\n tags\r\n } = this.props;\r\n\r\n this.props.addMovie({\r\n tmdbId,\r\n rootFolderPath: rootFolderPath.value,\r\n monitor: monitor.value,\r\n qualityProfileId: qualityProfileId.value,\r\n minimumAvailability: minimumAvailability.value,\r\n searchForMovie: searchForMovie.value,\r\n tags: tags.value\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddNewMovieModalContentConnector.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n rootFolderPath: PropTypes.object,\r\n monitor: PropTypes.object.isRequired,\r\n qualityProfileId: PropTypes.object,\r\n minimumAvailability: PropTypes.object.isRequired,\r\n searchForMovie: PropTypes.object.isRequired,\r\n tags: PropTypes.object.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n setAddMovieDefault: PropTypes.func.isRequired,\r\n addMovie: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddNewMovieModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddNewMovieModalContentConnector from './AddNewMovieModalContentConnector';\r\n\r\nfunction AddNewMovieModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddNewMovieModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNewMovieModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport ImdbRating from 'Components/ImdbRating';\r\nimport Label from 'Components/Label';\r\nimport Link from 'Components/Link/Link';\r\nimport TmdbRating from 'Components/TmdbRating';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { icons, kinds, sizes, tooltipPositions } from 'Helpers/Props';\r\nimport MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';\r\nimport MovieStatusLabel from 'Movie/Details/MovieStatusLabel';\r\nimport MovieIndexProgressBar from 'Movie/Index/ProgressBar/MovieIndexProgressBar';\r\nimport MovieGenres from 'Movie/MovieGenres';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport formatRuntime from 'Utilities/Date/formatRuntime';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddNewMovieModal from './AddNewMovieModal';\r\nimport styles from './AddNewMovieSearchResult.css';\r\n\r\nclass AddNewMovieSearchResult extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isNewAddMovieModalOpen: false\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (!prevProps.isExistingMovie && this.props.isExistingMovie) {\r\n this.onAddMovieModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n this.setState({ isNewAddMovieModalOpen: true });\r\n };\r\n\r\n onAddMovieModalClose = () => {\r\n this.setState({ isNewAddMovieModalOpen: false });\r\n };\r\n\r\n onExternalLinkPress = (event) => {\r\n event.stopPropagation();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n tmdbId,\r\n imdbId,\r\n youTubeTrailerId,\r\n title,\r\n titleSlug,\r\n year,\r\n studio,\r\n originalLanguage,\r\n genres,\r\n status,\r\n overview,\r\n ratings,\r\n folder,\r\n images,\r\n existingMovieId,\r\n isExistingMovie,\r\n isExcluded,\r\n isSmallScreen,\r\n monitored,\r\n isAvailable,\r\n movieFile,\r\n runtime,\r\n movieRuntimeFormat,\r\n certification\r\n } = this.props;\r\n\r\n const {\r\n isNewAddMovieModalOpen\r\n } = this.state;\r\n\r\n const hasMovieFile = !!movieFile;\r\n\r\n const linkProps = isExistingMovie ? { to: `/movie/${titleSlug}` } : { onPress: this.onPress };\r\n const posterWidth = 167;\r\n const posterHeight = 250;\r\n\r\n const elementStyle = {\r\n width: `${posterWidth}px`,\r\n height: `${posterHeight}px`\r\n };\r\n\r\n return (\r\n
\r\n \r\n\r\n
\r\n {\r\n isSmallScreen ?\r\n null :\r\n
\r\n
\r\n \r\n
\r\n\r\n {\r\n isExistingMovie &&\r\n \r\n }\r\n
\r\n }\r\n\r\n
\r\n
\r\n
\r\n
\r\n {title}\r\n\r\n {\r\n !title.contains(year) && !!year ?\r\n \r\n ({year})\r\n :\r\n null\r\n }\r\n
\r\n
\r\n\r\n
\r\n
\r\n {\r\n isExistingMovie &&\r\n \r\n }\r\n\r\n {\r\n isExcluded &&\r\n \r\n }\r\n
\r\n
\r\n
\r\n\r\n
\r\n {\r\n !!certification &&\r\n \r\n {certification}\r\n \r\n }\r\n\r\n {\r\n !!runtime &&\r\n \r\n {formatRuntime(runtime, movieRuntimeFormat)}\r\n \r\n }\r\n
\r\n\r\n
\r\n \r\n\r\n {\r\n ratings.imdb ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n originalLanguage?.name ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n studio ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n genres.length > 0 ?\r\n :\r\n null\r\n }\r\n\r\n \r\n \r\n\r\n \r\n {translate('Links')}\r\n \r\n \r\n }\r\n tooltip={\r\n \r\n }\r\n canFlip={true}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n />\r\n\r\n {\r\n isExistingMovie && isSmallScreen &&\r\n \r\n }\r\n
\r\n\r\n
\r\n {overview}\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nAddNewMovieSearchResult.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n imdbId: PropTypes.string,\r\n youTubeTrailerId: PropTypes.string,\r\n title: PropTypes.string.isRequired,\r\n titleSlug: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n studio: PropTypes.string,\r\n originalLanguage: PropTypes.object,\r\n genres: PropTypes.arrayOf(PropTypes.string),\r\n status: PropTypes.string.isRequired,\r\n overview: PropTypes.string,\r\n ratings: PropTypes.object.isRequired,\r\n folder: PropTypes.string.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n existingMovieId: PropTypes.number,\r\n isExistingMovie: PropTypes.bool.isRequired,\r\n isExcluded: PropTypes.bool,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n monitored: PropTypes.bool.isRequired,\r\n isAvailable: PropTypes.bool.isRequired,\r\n movieFile: PropTypes.object,\r\n runtime: PropTypes.number.isRequired,\r\n movieRuntimeFormat: PropTypes.string.isRequired,\r\n certification: PropTypes.string\r\n};\r\n\r\nAddNewMovieSearchResult.defaultProps = {\r\n genres: [],\r\n isExcluded: false\r\n};\r\n\r\nexport default AddNewMovieSearchResult;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"searchResult\":\"AddNewMovieSearchResult-searchResult-R02WQ\",\"underlay\":\"AddNewMovieSearchResult-underlay-EQMwD\",\"overlay\":\"AddNewMovieSearchResult-overlay-oSncf\",\"poster\":\"AddNewMovieSearchResult-poster-DHsWD\",\"content\":\"AddNewMovieSearchResult-content-nQ7n1\",\"titleRow\":\"AddNewMovieSearchResult-titleRow-z1vT6\",\"titleContainer\":\"AddNewMovieSearchResult-titleContainer-_SyAG\",\"title\":\"AddNewMovieSearchResult-title-wEA4S\",\"year\":\"AddNewMovieSearchResult-year-ysQfm\",\"icons\":\"AddNewMovieSearchResult-icons-Lz08B\",\"alreadyExistsIcon\":\"AddNewMovieSearchResult-alreadyExistsIcon-wLMUU\",\"exclusionIcon\":\"AddNewMovieSearchResult-exclusionIcon-RNebD\",\"overview\":\"AddNewMovieSearchResult-overview-bgEzS\",\"originalLanguage\":\"AddNewMovieSearchResult-originalLanguage-YnCLC\",\"studio\":\"AddNewMovieSearchResult-studio-mI_v0\",\"genres\":\"AddNewMovieSearchResult-genres-FxRy4\",\"links\":\"AddNewMovieSearchResult-links-IpTNR\",\"posterContainer\":\"AddNewMovieSearchResult-posterContainer-lxbB5\",\"certification\":\"AddNewMovieSearchResult-certification-q9ZIf\",\"runtime\":\"AddNewMovieSearchResult-runtime-PKxxm\",\"statusContainer\":\"AddNewMovieSearchResult-statusContainer-ImTEq\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createExistingMovieSelector from 'Store/Selectors/createExistingMovieSelector';\r\nimport AddNewMovieSearchResult from './AddNewMovieSearchResult';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createExistingMovieSelector(),\r\n createDimensionsSelector(),\r\n (state) => state.movieFiles.items,\r\n (state, { internalId }) => internalId,\r\n (state) => state.settings.ui.item.movieRuntimeFormat,\r\n (isExistingMovie, dimensions, movieFiles, internalId, movieRuntimeFormat) => {\r\n const movieFile = movieFiles.find((item) => internalId > 0 && item.movieId === internalId);\r\n\r\n return {\r\n existingMovieId: internalId,\r\n isExistingMovie,\r\n isSmallScreen: dimensions.isSmallScreen,\r\n movieFile,\r\n movieRuntimeFormat\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(AddNewMovieSearchResult);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"searchContainer\":\"AddNewMovie-searchContainer-WyP1I\",\"searchIconContainer\":\"AddNewMovie-searchIconContainer-kCb1Y\",\"searchInput\":\"AddNewMovie-searchInput-gIRe5 TextInput-input-svfXu Input-input-KWeec\",\"clearLookupButton\":\"AddNewMovie-clearLookupButton-GlGuk\",\"message\":\"AddNewMovie-message-YvWRW\",\"helpText\":\"AddNewMovie-helpText-S795X\",\"noMoviesText\":\"AddNewMovie-noMoviesText-aiXVm\",\"noResults\":\"AddNewMovie-noResults-LHDj4\",\"searchResults\":\"AddNewMovie-searchResults-UB8XP\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport TextInput from 'Components/Form/TextInput';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport Link from 'Components/Link/Link';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddNewMovieSearchResultConnector from './AddNewMovieSearchResultConnector';\r\nimport styles from './AddNewMovie.css';\r\n\r\nclass AddNewMovie extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n term: props.term || '',\r\n isFetching: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const term = this.state.term;\r\n\r\n if (term) {\r\n this.props.onMovieLookupChange(term);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n term,\r\n isFetching\r\n } = this.props;\r\n\r\n if (term && term !== prevProps.term) {\r\n this.setState({\r\n term,\r\n isFetching: true\r\n });\r\n this.props.onMovieLookupChange(term);\r\n } else if (isFetching !== prevProps.isFetching) {\r\n this.setState({\r\n isFetching\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onSearchInputChange = ({ value }) => {\r\n const hasValue = !!value.trim();\r\n\r\n this.setState({ term: value, isFetching: hasValue }, () => {\r\n if (hasValue) {\r\n this.props.onMovieLookupChange(value);\r\n } else {\r\n this.props.onClearMovieLookup();\r\n }\r\n });\r\n };\r\n\r\n onClearMovieLookupPress = () => {\r\n this.setState({ term: '' });\r\n this.props.onClearMovieLookup();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n error,\r\n items,\r\n hasExistingMovies\r\n } = this.props;\r\n\r\n const term = this.state.term;\r\n const isFetching = this.state.isFetching;\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error ?\r\n
\r\n
\r\n {translate('FailedLoadingSearchResults')}\r\n
\r\n\r\n {getErrorMessage(error)}\r\n\r\n
\r\n \r\n {translate('WhySearchesCouldBeFailing')}\r\n \r\n
\r\n
: null\r\n }\r\n\r\n {\r\n !isFetching && !error && !!items.length &&\r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n }\r\n\r\n {\r\n !isFetching && !error && !items.length && !!term &&\r\n
\r\n
\r\n {translate('CouldNotFindResults', { term })}\r\n
\r\n
\r\n {translate('YouCanAlsoSearch')}\r\n
\r\n
\r\n \r\n {translate('CantFindMovie')}\r\n \r\n
\r\n
\r\n }\r\n\r\n {\r\n term ?\r\n null :\r\n
\r\n
\r\n {translate('AddNewMessage')}\r\n
\r\n
\r\n {translate('AddNewTmdbIdMessage')}\r\n
\r\n
\r\n }\r\n\r\n {\r\n !term && !hasExistingMovies ?\r\n
\r\n
\r\n {translate('HaveNotAddedMovies')}\r\n
\r\n
\r\n \r\n {translate('ImportExistingMovies')}\r\n \r\n
\r\n
:\r\n null\r\n }\r\n\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nAddNewMovie.propTypes = {\r\n term: PropTypes.string,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isAdding: PropTypes.bool.isRequired,\r\n addError: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n hasExistingMovies: PropTypes.bool.isRequired,\r\n onMovieLookupChange: PropTypes.func.isRequired,\r\n onClearMovieLookup: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNewMovie;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearAddMovie, lookupMovie } from 'Store/Actions/addMovieActions';\r\nimport { clearMovieFiles, fetchMovieFiles } from 'Store/Actions/movieFileActions';\r\nimport { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport hasDifferentItems from 'Utilities/Object/hasDifferentItems';\r\nimport selectUniqueIds from 'Utilities/Object/selectUniqueIds';\r\nimport parseUrl from 'Utilities/String/parseUrl';\r\nimport AddNewMovie from './AddNewMovie';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.addMovie,\r\n (state) => state.movies.items.length,\r\n (state) => state.router.location,\r\n (addMovie, existingMoviesCount, location) => {\r\n const { params } = parseUrl(location.search);\r\n\r\n return {\r\n ...addMovie,\r\n term: params.term,\r\n hasExistingMovies: existingMoviesCount > 0\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n lookupMovie,\r\n clearAddMovie,\r\n fetchRootFolders,\r\n fetchQueueDetails,\r\n clearQueueDetails,\r\n fetchMovieFiles,\r\n clearMovieFiles\r\n};\r\n\r\nclass AddNewMovieConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._movieLookupTimeout = null;\r\n }\r\n\r\n componentDidMount() {\r\n this.props.fetchRootFolders();\r\n this.props.fetchQueueDetails();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n items\r\n } = this.props;\r\n\r\n if (hasDifferentItems(prevProps.items, items)) {\r\n const movieIds = selectUniqueIds(items, 'internalId');\r\n\r\n if (movieIds.length) {\r\n this.props.fetchMovieFiles({ movieId: movieIds });\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._movieLookupTimeout) {\r\n clearTimeout(this._movieLookupTimeout);\r\n }\r\n\r\n this.props.clearAddMovie();\r\n this.props.clearQueueDetails();\r\n this.props.clearMovieFiles();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onMovieLookupChange = (term) => {\r\n if (this._movieLookupTimeout) {\r\n clearTimeout(this._movieLookupTimeout);\r\n }\r\n\r\n if (term.trim() === '') {\r\n this.props.clearAddMovie();\r\n } else {\r\n this._movieLookupTimeout = setTimeout(() => {\r\n this.props.lookupMovie({ term });\r\n }, 300);\r\n }\r\n };\r\n\r\n onClearMovieLookup = () => {\r\n this.props.clearAddMovie();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n term,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddNewMovieConnector.propTypes = {\r\n term: PropTypes.string,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n lookupMovie: PropTypes.func.isRequired,\r\n clearAddMovie: PropTypes.func.isRequired,\r\n fetchRootFolders: PropTypes.func.isRequired,\r\n fetchQueueDetails: PropTypes.func.isRequired,\r\n clearQueueDetails: PropTypes.func.isRequired,\r\n fetchMovieFiles: PropTypes.func.isRequired,\r\n clearMovieFiles: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddNewMovieConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './PageContentFooter.css';\r\n\r\nclass PageContentFooter extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n children\r\n } = this.props;\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n }\r\n}\r\n\r\nPageContentFooter.propTypes = {\r\n className: PropTypes.string,\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nPageContentFooter.defaultProps = {\r\n className: styles.contentFooter\r\n};\r\n\r\nexport default PageContentFooter;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"contentFooter\":\"PageContentFooter-contentFooter-RHpBL\"};","// extracted by mini-css-extract-plugin\nexport default {\"inputContainer\":\"ImportMovieFooter-inputContainer-DZuoc\",\"label\":\"ImportMovieFooter-label-yts5t\",\"importButtonContainer\":\"ImportMovieFooter-importButtonContainer-sIDjC\",\"importButton\":\"ImportMovieFooter-importButton-HXWDL SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\",\"loadingButton\":\"ImportMovieFooter-loadingButton-BqX_G ImportMovieFooter-importButton-HXWDL SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\",\"loading\":\"ImportMovieFooter-loading-Ug7pw LoadingIndicator-loading-DWfav\",\"importError\":\"ImportMovieFooter-importError-PDcrY\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\n// import CheckInput from 'Components/Form/CheckInput';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContentFooter from 'Components/Page/PageContentFooter';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons, inputTypes, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ImportMovieFooter.css';\r\n\r\nconst MIXED = 'mixed';\r\n\r\nclass ImportMovieFooter extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n const {\r\n defaultMonitor,\r\n defaultQualityProfileId,\r\n defaultMinimumAvailability\r\n } = props;\r\n\r\n this.state = {\r\n monitor: defaultMonitor,\r\n qualityProfileId: defaultQualityProfileId,\r\n minimumAvailability: defaultMinimumAvailability\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const {\r\n defaultMonitor,\r\n defaultQualityProfileId,\r\n defaultMinimumAvailability,\r\n isMonitorMixed,\r\n isQualityProfileIdMixed,\r\n isMinimumAvailabilityMixed\r\n } = this.props;\r\n\r\n const {\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability\r\n } = this.state;\r\n\r\n const newState = {};\r\n\r\n if (isMonitorMixed && monitor !== MIXED) {\r\n newState.monitor = MIXED;\r\n } else if (!isMonitorMixed && monitor !== defaultMonitor) {\r\n newState.monitor = defaultMonitor;\r\n }\r\n\r\n if (isQualityProfileIdMixed && qualityProfileId !== MIXED) {\r\n newState.qualityProfileId = MIXED;\r\n } else if (!isQualityProfileIdMixed && qualityProfileId !== defaultQualityProfileId) {\r\n newState.qualityProfileId = defaultQualityProfileId;\r\n }\r\n\r\n if (isMinimumAvailabilityMixed && minimumAvailability !== MIXED) {\r\n newState.minimumAvailability = MIXED;\r\n } else if (!isMinimumAvailabilityMixed && minimumAvailability !== defaultMinimumAvailability) {\r\n newState.minimumAvailability = defaultMinimumAvailability;\r\n }\r\n\r\n if (!_.isEmpty(newState)) {\r\n this.setState(newState);\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.setState({ [name]: value });\r\n this.props.onInputChange({ name, value });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n selectedCount,\r\n isImporting,\r\n isLookingUpMovie,\r\n isMonitorMixed,\r\n isQualityProfileIdMixed,\r\n isMinimumAvailabilityMixed,\r\n hasUnsearchedItems,\r\n importError,\r\n onImportPress,\r\n onLookupPress,\r\n onCancelLookupPress\r\n } = this.props;\r\n\r\n const {\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability\r\n } = this.state;\r\n\r\n return (\r\n \r\n
\r\n
\r\n {translate('Monitor')}\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n {translate('MinimumAvailability')}\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n {translate('QualityProfile')}\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n  \r\n
\r\n\r\n
\r\n \r\n {translate('Import')} {selectedCount} {selectedCount > 1 ? translate('Movies') : translate('Movie')}\r\n \r\n\r\n {\r\n isLookingUpMovie ?\r\n \r\n {translate('CancelProcessing')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n hasUnsearchedItems ?\r\n \r\n {translate('StartProcessing')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n isLookingUpMovie ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n isLookingUpMovie ?\r\n translate('ProcessingFolders') :\r\n null\r\n }\r\n\r\n {\r\n importError ?\r\n \r\n }\r\n title={translate('ImportErrors')}\r\n body={\r\n
    \r\n {\r\n Array.isArray(importError.responseJSON) ?\r\n importError.responseJSON.map((error, index) => {\r\n return (\r\n
  • \r\n {error.errorMessage}\r\n
  • \r\n );\r\n }) :\r\n
  • \r\n {\r\n JSON.stringify(importError.responseJSON)\r\n }\r\n
  • \r\n }\r\n
\r\n }\r\n position={tooltipPositions.RIGHT}\r\n /> :\r\n null\r\n }\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nImportMovieFooter.propTypes = {\r\n selectedCount: PropTypes.number.isRequired,\r\n isImporting: PropTypes.bool.isRequired,\r\n isLookingUpMovie: PropTypes.bool.isRequired,\r\n defaultMonitor: PropTypes.string.isRequired,\r\n defaultQualityProfileId: PropTypes.number,\r\n defaultMinimumAvailability: PropTypes.string,\r\n isMonitorMixed: PropTypes.bool.isRequired,\r\n isQualityProfileIdMixed: PropTypes.bool.isRequired,\r\n isMinimumAvailabilityMixed: PropTypes.bool.isRequired,\r\n hasUnsearchedItems: PropTypes.bool.isRequired,\r\n importError: PropTypes.object,\r\n onInputChange: PropTypes.func.isRequired,\r\n onImportPress: PropTypes.func.isRequired,\r\n onLookupPress: PropTypes.func.isRequired,\r\n onCancelLookupPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportMovieFooter;\r\n","import _ from 'lodash';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { cancelLookupMovie, lookupUnsearchedMovies } from 'Store/Actions/importMovieActions';\r\nimport ImportMovieFooter from './ImportMovieFooter';\r\n\r\nfunction isMixed(items, selectedIds, defaultValue, key) {\r\n return _.some(items, (movie) => {\r\n return selectedIds.indexOf(movie.id) > -1 && movie[key] !== defaultValue;\r\n });\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.addMovie,\r\n (state) => state.importMovie,\r\n (state, { selectedIds }) => selectedIds,\r\n (addMovie, importMovie, selectedIds) => {\r\n const {\r\n monitor: defaultMonitor,\r\n qualityProfileId: defaultQualityProfileId,\r\n minimumAvailability: defaultMinimumAvailability\r\n } = addMovie.defaults;\r\n\r\n const {\r\n isLookingUpMovie,\r\n isImporting,\r\n items,\r\n importError\r\n } = importMovie;\r\n\r\n const isMonitorMixed = isMixed(items, selectedIds, defaultMonitor, 'monitor');\r\n const isQualityProfileIdMixed = isMixed(items, selectedIds, defaultQualityProfileId, 'qualityProfileId');\r\n const isMinimumAvailabilityMixed = isMixed(items, selectedIds, defaultMinimumAvailability, 'minimumAvailability');\r\n const hasUnsearchedItems = !isLookingUpMovie && items.some((item) => !item.isPopulated);\r\n\r\n return {\r\n selectedCount: selectedIds.length,\r\n isLookingUpMovie,\r\n isImporting,\r\n defaultMonitor,\r\n defaultQualityProfileId,\r\n defaultMinimumAvailability,\r\n isMonitorMixed,\r\n isQualityProfileIdMixed,\r\n isMinimumAvailabilityMixed,\r\n importError,\r\n hasUnsearchedItems\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n onLookupPress: lookupUnsearchedMovies,\r\n onCancelLookupPress: cancelLookupMovie\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ImportMovieFooter);\r\n","function hasDifferentItemsOrOrder(prevItems, currentItems, idProp = 'id') {\r\n if (prevItems === currentItems) {\r\n return false;\r\n }\r\n\r\n const len = prevItems.length;\r\n\r\n if (len !== currentItems.length) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < len; i++) {\r\n if (prevItems[i][idProp] !== currentItems[i][idProp]) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport default hasDifferentItemsOrOrder;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { Grid, WindowScroller } from 'react-virtualized';\r\nimport Measure from 'Components/Measure';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport { scrollDirections } from 'Helpers/Props';\r\nimport hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';\r\nimport styles from './VirtualTable.css';\r\n\r\nconst ROW_HEIGHT = 38;\r\n\r\nfunction overscanIndicesGetter(options) {\r\n const {\r\n cellCount,\r\n overscanCellsCount,\r\n startIndex,\r\n stopIndex\r\n } = options;\r\n\r\n // The default getter takes the scroll direction into account,\r\n // but that can cause issues. Ignore the scroll direction and\r\n // always over return more items.\r\n\r\n const overscanStartIndex = startIndex - overscanCellsCount;\r\n const overscanStopIndex = stopIndex + overscanCellsCount;\r\n\r\n return {\r\n overscanStartIndex: Math.max(0, overscanStartIndex),\r\n overscanStopIndex: Math.min(cellCount - 1, overscanStopIndex)\r\n };\r\n}\r\n\r\nclass VirtualTable extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n width: 0,\r\n scrollRestored: false\r\n };\r\n\r\n this._grid = null;\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const {\r\n items,\r\n scrollIndex,\r\n scrollTop\r\n } = this.props;\r\n\r\n const {\r\n width,\r\n scrollRestored\r\n } = this.state;\r\n\r\n if (this._grid && (prevState.width !== width || hasDifferentItemsOrOrder(prevProps.items, items))) {\r\n // recomputeGridSize also forces Grid to discard its cache of rendered cells\r\n this._grid.recomputeGridSize();\r\n }\r\n\r\n if (this._grid && scrollTop !== undefined && scrollTop !== 0 && !scrollRestored) {\r\n this.setState({ scrollRestored: true });\r\n this._grid.scrollToPosition({ scrollTop });\r\n }\r\n\r\n if (scrollIndex != null && scrollIndex !== prevProps.scrollIndex) {\r\n this._grid.scrollToCell({\r\n rowIndex: scrollIndex,\r\n columnIndex: 0\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n setGridRef = (ref) => {\r\n this._grid = ref;\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = ({ width }) => {\r\n this.setState({\r\n width\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSmallScreen,\r\n className,\r\n items,\r\n scroller,\r\n header,\r\n headerHeight,\r\n rowHeight,\r\n rowRenderer,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n width\r\n } = this.state;\r\n\r\n const gridStyle = {\r\n boxSizing: undefined,\r\n direction: undefined,\r\n height: undefined,\r\n position: undefined,\r\n willChange: undefined,\r\n overflow: undefined,\r\n width: undefined\r\n };\r\n\r\n const containerStyle = {\r\n position: undefined\r\n };\r\n\r\n return (\r\n \r\n {({ height, registerChild, onChildScroll, scrollTop }) => {\r\n if (!height) {\r\n return null;\r\n }\r\n return (\r\n \r\n \r\n {header}\r\n
\r\n \r\n
\r\n \r\n \r\n );\r\n }\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nVirtualTable.propTypes = {\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n className: PropTypes.string.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n scrollIndex: PropTypes.number,\r\n scrollTop: PropTypes.number,\r\n scroller: PropTypes.instanceOf(Element).isRequired,\r\n header: PropTypes.node.isRequired,\r\n headerHeight: PropTypes.number.isRequired,\r\n rowRenderer: PropTypes.func.isRequired,\r\n rowHeight: PropTypes.number.isRequired\r\n};\r\n\r\nVirtualTable.defaultProps = {\r\n className: styles.tableContainer,\r\n headerHeight: 38,\r\n rowHeight: ROW_HEIGHT\r\n};\r\n\r\nexport default VirtualTable;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tableContainer\":\"VirtualTable-tableContainer-MHSuC\",\"tableBodyContainer\":\"VirtualTable-tableBodyContainer-W0ddE\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport VirtualTableHeaderCell from './VirtualTableHeaderCell';\r\nimport styles from './VirtualTableSelectAllHeaderCell.css';\r\n\r\nfunction getValue(allSelected, allUnselected) {\r\n if (allSelected) {\r\n return true;\r\n } else if (allUnselected) {\r\n return false;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction VirtualTableSelectAllHeaderCell(props) {\r\n const {\r\n allSelected,\r\n allUnselected,\r\n onSelectAllChange\r\n } = props;\r\n\r\n const value = getValue(allSelected, allUnselected);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nVirtualTableSelectAllHeaderCell.propTypes = {\r\n allSelected: PropTypes.bool.isRequired,\r\n allUnselected: PropTypes.bool.isRequired,\r\n onSelectAllChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default VirtualTableSelectAllHeaderCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"selectAllHeaderCell\":\"VirtualTableSelectAllHeaderCell-selectAllHeaderCell-gBYqR TableHeaderCell-headerCell-aJDuw\",\"input\":\"VirtualTableSelectAllHeaderCell-input-XcVa4 CheckInput-input-VAM1T\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport MovieMinimumAvailabilityPopoverContent from 'AddMovie/MovieMinimumAvailabilityPopoverContent';\r\nimport Icon from 'Components/Icon';\r\nimport VirtualTableHeader from 'Components/Table/VirtualTableHeader';\r\nimport VirtualTableHeaderCell from 'Components/Table/VirtualTableHeaderCell';\r\nimport VirtualTableSelectAllHeaderCell from 'Components/Table/VirtualTableSelectAllHeaderCell';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons, tooltipPositions } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ImportMovieHeader.css';\r\n\r\nfunction ImportMovieHeader(props) {\r\n const {\r\n allSelected,\r\n allUnselected,\r\n onSelectAllChange\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {translate('Folder')}\r\n \r\n\r\n \r\n {translate('Movie')}\r\n \r\n\r\n \r\n {translate('Monitor')}\r\n \r\n\r\n \r\n {translate('MinimumAvailability')}\r\n\r\n \r\n }\r\n title={translate('MinimumAvailability')}\r\n body={}\r\n position={tooltipPositions.LEFT}\r\n />\r\n \r\n\r\n \r\n {translate('QualityProfile')}\r\n \r\n \r\n );\r\n}\r\n\r\nImportMovieHeader.propTypes = {\r\n allSelected: PropTypes.bool.isRequired,\r\n allUnselected: PropTypes.bool.isRequired,\r\n onSelectAllChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportMovieHeader;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"folder\":\"ImportMovieHeader-folder-OoH8e VirtualTableHeaderCell-headerCell-oq_lz\",\"monitor\":\"ImportMovieHeader-monitor-E_Q6P VirtualTableHeaderCell-headerCell-oq_lz\",\"minimumAvailability\":\"ImportMovieHeader-minimumAvailability-aASY7 VirtualTableHeaderCell-headerCell-oq_lz\",\"qualityProfile\":\"ImportMovieHeader-qualityProfile-zCk34 VirtualTableHeaderCell-headerCell-oq_lz\",\"movie\":\"ImportMovieHeader-movie-f5lg9 VirtualTableHeaderCell-headerCell-oq_lz\",\"detailsIcon\":\"ImportMovieHeader-detailsIcon-tHQYn\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport VirtualTableRowCell from './VirtualTableRowCell';\r\nimport styles from './VirtualTableSelectCell.css';\r\n\r\nexport function virtualTableSelectCellRenderer(cellProps) {\r\n const {\r\n cellKey,\r\n rowData,\r\n columnData,\r\n ...otherProps\r\n } = cellProps;\r\n\r\n return (\r\n // eslint-disable-next-line no-use-before-define\r\n \r\n );\r\n}\r\n\r\nclass VirtualTableSelectCell extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onChange = ({ value, shiftKey }) => {\r\n const {\r\n id,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n onSelectedChange({ id, value, shiftKey });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n inputClassName,\r\n id,\r\n isSelected,\r\n isDisabled,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nVirtualTableSelectCell.propTypes = {\r\n inputClassName: PropTypes.string.isRequired,\r\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n isSelected: PropTypes.bool.isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nVirtualTableSelectCell.defaultProps = {\r\n inputClassName: styles.input,\r\n isSelected: false\r\n};\r\n\r\nexport default VirtualTableSelectCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"VirtualTableSelectCell-cell-_Uhr3 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"input\":\"VirtualTableSelectCell-input-i2Qn8 CheckInput-input-VAM1T\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ImportMovieTitle.css';\r\n\r\nfunction ImportMovieTitle(props) {\r\n const {\r\n title,\r\n year,\r\n studio,\r\n isExistingMovie\r\n } = props;\r\n\r\n return (\r\n
\r\n
\r\n {title}\r\n\r\n {\r\n !title.contains(year) &&\r\n ({year})\r\n }\r\n
\r\n\r\n {\r\n !!studio &&\r\n \r\n }\r\n\r\n {\r\n isExistingMovie &&\r\n \r\n {translate('Existing')}\r\n \r\n }\r\n
\r\n );\r\n}\r\n\r\nImportMovieTitle.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n studio: PropTypes.string,\r\n isExistingMovie: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default ImportMovieTitle;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"titleContainer\":\"ImportMovieTitle-titleContainer-laDQ0\",\"title\":\"ImportMovieTitle-title-kmTMu\",\"year\":\"ImportMovieTitle-year-jgmLg\",\"existing\":\"ImportMovieTitle-existing-D5ROn\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons } from 'Helpers/Props';\r\nimport ImportMovieTitle from './ImportMovieTitle';\r\nimport styles from './ImportMovieSearchResult.css';\r\n\r\nclass ImportMovieSearchResult extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n this.props.onPress(this.props.tmdbId);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n tmdbId,\r\n title,\r\n year,\r\n studio,\r\n isExistingMovie\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nImportMovieSearchResult.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n studio: PropTypes.string,\r\n isExistingMovie: PropTypes.bool.isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportMovieSearchResult;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"ImportMovieSearchResult-container-qJVpj\",\"movie\":\"ImportMovieSearchResult-movie-sU5P3\",\"tmdbLink\":\"ImportMovieSearchResult-tmdbLink-provN Link-link-RInnp\",\"tmdbLinkIcon\":\"ImportMovieSearchResult-tmdbLinkIcon-h0MLC\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createExistingMovieSelector from 'Store/Selectors/createExistingMovieSelector';\r\nimport ImportMovieSearchResult from './ImportMovieSearchResult';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createExistingMovieSelector(),\r\n (isExistingMovie) => {\r\n return {\r\n isExistingMovie\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(ImportMovieSearchResult);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"ImportMovieSelectMovie-button-U4Nux Link-link-RInnp\",\"loading\":\"ImportMovieSelectMovie-loading-y5_aL\",\"warningIcon\":\"ImportMovieSelectMovie-warningIcon-afsFI\",\"existing\":\"ImportMovieSelectMovie-existing-U6e7U\",\"dropdownArrowContainer\":\"ImportMovieSelectMovie-dropdownArrowContainer-PAYpu\",\"contentContainer\":\"ImportMovieSelectMovie-contentContainer-WvtNQ\",\"content\":\"ImportMovieSelectMovie-content-tsBy1\",\"searchContainer\":\"ImportMovieSelectMovie-searchContainer-r8QJt\",\"searchIconContainer\":\"ImportMovieSelectMovie-searchIconContainer-aGbGm\",\"searchInput\":\"ImportMovieSelectMovie-searchInput-XcZ9w TextInput-input-svfXu Input-input-KWeec\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { Manager, Popper, Reference } from 'react-popper';\r\nimport FormInputButton from 'Components/Form/FormInputButton';\r\nimport TextInput from 'Components/Form/TextInput';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Portal from 'Components/Portal';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport getUniqueElememtId from 'Utilities/getUniqueElementId';\r\nimport translate from 'Utilities/String/translate';\r\nimport ImportMovieSearchResultConnector from './ImportMovieSearchResultConnector';\r\nimport ImportMovieTitle from './ImportMovieTitle';\r\nimport styles from './ImportMovieSelectMovie.css';\r\n\r\nclass ImportMovieSelectMovie extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._movieLookupTimeout = null;\r\n this._scheduleUpdate = null;\r\n this._buttonId = getUniqueElememtId();\r\n this._contentId = getUniqueElememtId();\r\n\r\n this.state = {\r\n term: props.id,\r\n isOpen: false\r\n };\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this._scheduleUpdate) {\r\n this._scheduleUpdate();\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n _addListener() {\r\n window.addEventListener('click', this.onWindowClick);\r\n }\r\n\r\n _removeListener() {\r\n window.removeEventListener('click', this.onWindowClick);\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onWindowClick = (event) => {\r\n const button = document.getElementById(this._buttonId);\r\n const content = document.getElementById(this._contentId);\r\n\r\n if (!button || !content) {\r\n return;\r\n }\r\n\r\n if (\r\n !button.contains(event.target) &&\r\n !content.contains(event.target) &&\r\n this.state.isOpen\r\n ) {\r\n this.setState({ isOpen: false });\r\n this._removeListener();\r\n }\r\n };\r\n\r\n onPress = () => {\r\n if (this.state.isOpen) {\r\n this._removeListener();\r\n } else {\r\n this._addListener();\r\n }\r\n\r\n this.setState({ isOpen: !this.state.isOpen });\r\n };\r\n\r\n onSearchInputChange = ({ value }) => {\r\n if (this._movieLookupTimeout) {\r\n clearTimeout(this._movieLookupTimeout);\r\n }\r\n\r\n this.setState({ term: value }, () => {\r\n this._movieLookupTimeout = setTimeout(() => {\r\n this.props.onSearchInputChange(value);\r\n }, 200);\r\n });\r\n };\r\n\r\n onRefreshPress = () => {\r\n this.props.onSearchInputChange(this.state.term);\r\n };\r\n\r\n onMovieSelect = (tmdbId) => {\r\n this.setState({ isOpen: false });\r\n\r\n this.props.onMovieSelect(tmdbId);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n selectedMovie,\r\n isExistingMovie,\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n isQueued,\r\n isLookingUpMovie\r\n } = this.props;\r\n\r\n const errorMessage = error &&\r\n error.responseJSON &&\r\n error.responseJSON.message;\r\n\r\n return (\r\n \r\n \r\n {({ ref }) => (\r\n \r\n \r\n {\r\n isLookingUpMovie && isQueued && !isPopulated ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n isPopulated && selectedMovie && isExistingMovie ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n isPopulated && selectedMovie ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n isPopulated && !selectedMovie ?\r\n
\r\n \r\n\r\n {translate('NoMatchFound')}\r\n
:\r\n null\r\n }\r\n\r\n {\r\n !isFetching && !!error ?\r\n
\r\n \r\n\r\n {translate('SearchFailedPleaseTryAgainLater')}\r\n
:\r\n null\r\n }\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n )}\r\n \r\n\r\n \r\n \r\n {({ ref, style, scheduleUpdate }) => {\r\n this._scheduleUpdate = scheduleUpdate;\r\n\r\n return (\r\n \r\n {\r\n this.state.isOpen ?\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n
:\r\n null\r\n }\r\n \r\n );\r\n }}\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nImportMovieSelectMovie.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n selectedMovie: PropTypes.object,\r\n isExistingMovie: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isQueued: PropTypes.bool.isRequired,\r\n isLookingUpMovie: PropTypes.bool.isRequired,\r\n onSearchInputChange: PropTypes.func.isRequired,\r\n onMovieSelect: PropTypes.func.isRequired\r\n};\r\n\r\nImportMovieSelectMovie.defaultProps = {\r\n isFetching: true,\r\n isPopulated: false,\r\n items: [],\r\n isQueued: true\r\n};\r\n\r\nexport default ImportMovieSelectMovie;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { queueLookupMovie, setImportMovieValue } from 'Store/Actions/importMovieActions';\r\nimport createImportMovieItemSelector from 'Store/Selectors/createImportMovieItemSelector';\r\nimport ImportMovieSelectMovie from './ImportMovieSelectMovie';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.importMovie.isLookingUpMovie,\r\n createImportMovieItemSelector(),\r\n (isLookingUpMovie, item) => {\r\n return {\r\n isLookingUpMovie,\r\n ...item\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n queueLookupMovie,\r\n setImportMovieValue\r\n};\r\n\r\nclass ImportMovieSelectMovieConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onSearchInputChange = (term) => {\r\n this.props.queueLookupMovie({\r\n name: this.props.id,\r\n term,\r\n topOfQueue: true\r\n });\r\n };\r\n\r\n onMovieSelect = (tmdbId) => {\r\n const {\r\n id,\r\n items\r\n } = this.props;\r\n\r\n this.props.setImportMovieValue({\r\n id,\r\n selectedMovie: _.find(items, { tmdbId })\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nImportMovieSelectMovieConnector.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object),\r\n selectedMovie: PropTypes.object,\r\n isSelected: PropTypes.bool,\r\n queueLookupMovie: PropTypes.func.isRequired,\r\n setImportMovieValue: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ImportMovieSelectMovieConnector);\r\n","import _ from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport createAllMoviesSelector from './createAllMoviesSelector';\r\n\r\nfunction createImportMovieItemSelector() {\r\n return createSelector(\r\n (state, { id }) => id,\r\n (state) => state.addMovie,\r\n (state) => state.importMovie,\r\n createAllMoviesSelector(),\r\n (id, addMovie, importMovie, movies) => {\r\n const item = _.find(importMovie.items, { id }) || {};\r\n const selectedMovie = item && item.selectedMovie;\r\n const isExistingMovie = !!selectedMovie && _.some(movies, { tmdbId: selectedMovie.tmdbId });\r\n\r\n return {\r\n defaultMonitor: addMovie.defaults.monitor,\r\n defaultQualityProfileId: addMovie.defaults.qualityProfileId,\r\n ...item,\r\n isExistingMovie\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createImportMovieItemSelector;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';\r\nimport VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport ImportMovieSelectMovieConnector from './SelectMovie/ImportMovieSelectMovieConnector';\r\nimport styles from './ImportMovieRow.css';\r\n\r\nfunction ImportMovieRow(props) {\r\n const {\r\n id,\r\n relativePath,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n selectedMovie,\r\n isExistingMovie,\r\n isSelected,\r\n onSelectedChange,\r\n onInputChange\r\n } = props;\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n {relativePath}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nImportMovieRow.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n relativePath: PropTypes.string.isRequired,\r\n monitor: PropTypes.string.isRequired,\r\n qualityProfileId: PropTypes.number.isRequired,\r\n minimumAvailability: PropTypes.string.isRequired,\r\n selectedMovie: PropTypes.object,\r\n isExistingMovie: PropTypes.bool.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isSelected: PropTypes.bool,\r\n onSelectedChange: PropTypes.func.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nImportMovieRow.defaultsProps = {\r\n items: []\r\n};\r\n\r\nexport default ImportMovieRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"selectInput\":\"ImportMovieRow-selectInput-P3dn9 CheckInput-input-VAM1T\",\"folder\":\"ImportMovieRow-folder-Lq7IZ VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"monitor\":\"ImportMovieRow-monitor-lywpQ VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"minimumAvailability\":\"ImportMovieRow-minimumAvailability-Z1vHe VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"qualityProfile\":\"ImportMovieRow-qualityProfile-b0i85 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"movie\":\"ImportMovieRow-movie-j0nJm VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { queueLookupMovie, setImportMovieValue } from 'Store/Actions/importMovieActions';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport ImportMovieRow from './ImportMovieRow';\r\n\r\nfunction createImportMovieItemSelector() {\r\n return createSelector(\r\n (state, { id }) => id,\r\n (state) => state.importMovie.items,\r\n (id, items) => {\r\n return _.find(items, { id }) || {};\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createImportMovieItemSelector(),\r\n createAllMoviesSelector(),\r\n (item, movies) => {\r\n const selectedMovie = item && item.selectedMovie;\r\n const isExistingMovie = !!selectedMovie && _.some(movies, { tmdbId: selectedMovie.tmdbId });\r\n\r\n return {\r\n ...item,\r\n isExistingMovie\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n queueLookupMovie,\r\n setImportMovieValue\r\n};\r\n\r\nclass ImportMovieRowConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setImportMovieValue({\r\n id: this.props.id,\r\n [name]: value\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n // Don't show the row until we have the information we require for it.\r\n\r\n const {\r\n items,\r\n monitor\r\n } = this.props;\r\n\r\n if (!items || !monitor) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nImportMovieRowConnector.propTypes = {\r\n rootFolderId: PropTypes.number.isRequired,\r\n id: PropTypes.string.isRequired,\r\n monitor: PropTypes.string,\r\n items: PropTypes.arrayOf(PropTypes.object),\r\n queueLookupMovie: PropTypes.func.isRequired,\r\n setImportMovieValue: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ImportMovieRowConnector);\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport VirtualTable from 'Components/Table/VirtualTable';\r\nimport VirtualTableRow from 'Components/Table/VirtualTableRow';\r\nimport ImportMovieHeader from './ImportMovieHeader';\r\nimport ImportMovieRowConnector from './ImportMovieRowConnector';\r\n\r\nclass ImportMovieTable extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n unmappedFolders,\r\n defaultMonitor,\r\n defaultQualityProfileId,\r\n defaultMinimumAvailability,\r\n onMovieLookup,\r\n onSetImportMovieValue\r\n } = this.props;\r\n\r\n const values = {\r\n monitor: defaultMonitor,\r\n qualityProfileId: defaultQualityProfileId,\r\n minimumAvailability: defaultMinimumAvailability\r\n };\r\n\r\n unmappedFolders.forEach((unmappedFolder) => {\r\n const id = unmappedFolder.name;\r\n\r\n onMovieLookup(id, unmappedFolder.path, unmappedFolder.relativePath);\r\n\r\n onSetImportMovieValue({\r\n id,\r\n ...values\r\n });\r\n });\r\n }\r\n\r\n // This isn't great, but it's the most reliable way to ensure the items\r\n // are checked off even if they aren't actually visible since the cells\r\n // are virtualized.\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n items,\r\n selectedState,\r\n onSelectedChange,\r\n onRemoveSelectedStateItem\r\n } = this.props;\r\n\r\n prevProps.items.forEach((prevItem) => {\r\n const {\r\n id\r\n } = prevItem;\r\n\r\n const item = _.find(items, { id });\r\n\r\n if (!item) {\r\n onRemoveSelectedStateItem(id);\r\n return;\r\n }\r\n\r\n const selectedMovie = item.selectedMovie;\r\n const isSelected = selectedState[id];\r\n\r\n const isExistingMovie = !!selectedMovie &&\r\n _.some(prevProps.allMovies, { tmdbId: selectedMovie.tmdbId });\r\n\r\n // Props doesn't have a selected movie or\r\n // the selected movie is an existing movie.\r\n if ((!selectedMovie && prevItem.selectedMovie) || (isExistingMovie && !prevItem.selectedMovie)) {\r\n onSelectedChange({ id, value: false });\r\n\r\n return;\r\n }\r\n\r\n // State is selected, but a movie isn't selected or\r\n // the selected movie is an existing movie.\r\n if (isSelected && (!selectedMovie || isExistingMovie)) {\r\n onSelectedChange({ id, value: false });\r\n\r\n return;\r\n }\r\n\r\n // A movie is being selected that wasn't previously selected.\r\n if (selectedMovie && selectedMovie !== prevItem.selectedMovie) {\r\n onSelectedChange({ id, value: true });\r\n\r\n return;\r\n }\r\n });\r\n }\r\n\r\n //\r\n // Control\r\n\r\n rowRenderer = ({ key, rowIndex, style }) => {\r\n const {\r\n rootFolderId,\r\n items,\r\n selectedState,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n const item = items[rowIndex];\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n allSelected,\r\n allUnselected,\r\n isSmallScreen,\r\n scroller,\r\n selectedState,\r\n onSelectAllChange\r\n } = this.props;\r\n\r\n if (!items.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n }\r\n selectedState={selectedState}\r\n />\r\n );\r\n }\r\n}\r\n\r\nImportMovieTable.propTypes = {\r\n rootFolderId: PropTypes.number.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object),\r\n unmappedFolders: PropTypes.arrayOf(PropTypes.object),\r\n defaultMonitor: PropTypes.string.isRequired,\r\n defaultQualityProfileId: PropTypes.number,\r\n defaultMinimumAvailability: PropTypes.string,\r\n allSelected: PropTypes.bool.isRequired,\r\n allUnselected: PropTypes.bool.isRequired,\r\n selectedState: PropTypes.object.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n allMovies: PropTypes.arrayOf(PropTypes.object),\r\n scroller: PropTypes.instanceOf(Element).isRequired,\r\n onSelectAllChange: PropTypes.func.isRequired,\r\n onSelectedChange: PropTypes.func.isRequired,\r\n onRemoveSelectedStateItem: PropTypes.func.isRequired,\r\n onMovieLookup: PropTypes.func.isRequired,\r\n onSetImportMovieValue: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportMovieTable;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { queueLookupMovie, setImportMovieValue } from 'Store/Actions/importMovieActions';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport ImportMovieTable from './ImportMovieTable';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.addMovie,\r\n (state) => state.importMovie,\r\n (state) => state.app.dimensions,\r\n createAllMoviesSelector(),\r\n (addMovie, importMovie, dimensions, allMovies) => {\r\n return {\r\n defaultMonitor: addMovie.defaults.monitor,\r\n defaultQualityProfileId: addMovie.defaults.qualityProfileId,\r\n defaultMinimumAvailability: addMovie.defaults.minimumAvailability,\r\n items: importMovie.items,\r\n isSmallScreen: dimensions.isSmallScreen,\r\n allMovies\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onMovieLookup(name, path, relativePath) {\r\n dispatch(queueLookupMovie({\r\n name,\r\n path,\r\n relativePath,\r\n term: name\r\n }));\r\n },\r\n\r\n onSetImportMovieValue(values) {\r\n dispatch(setImportMovieValue(values));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(ImportMovieTable);\r\n","import { reduce } from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport selectAll from 'Utilities/Table/selectAll';\r\nimport toggleSelected from 'Utilities/Table/toggleSelected';\r\nimport ImportMovieFooterConnector from './ImportMovieFooterConnector';\r\nimport ImportMovieTableConnector from './ImportMovieTableConnector';\r\n\r\nclass ImportMovie extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.scrollerRef = React.createRef();\r\n\r\n this.state = {\r\n allSelected: false,\r\n allUnselected: false,\r\n lastToggled: null,\r\n selectedState: {},\r\n contentBody: null\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n getSelectedIds = () => {\r\n return reduce(\r\n this.state.selectedState,\r\n (result, value, id) => {\r\n if (value) {\r\n result.push(id);\r\n }\r\n\r\n return result;\r\n },\r\n []\r\n );\r\n };\r\n\r\n onSelectAllChange = ({ value }) => {\r\n // Only select non-dupes\r\n this.setState(selectAll(this.state.selectedState, value));\r\n };\r\n\r\n onSelectedChange = ({ id, value, shiftKey = false }) => {\r\n this.setState((state) => {\r\n return toggleSelected(state, this.props.items, id, value, shiftKey);\r\n });\r\n };\r\n\r\n onRemoveSelectedStateItem = (id) => {\r\n this.setState((state) => {\r\n const selectedState = Object.assign({}, state.selectedState);\r\n delete selectedState[id];\r\n\r\n return {\r\n ...state,\r\n selectedState\r\n };\r\n });\r\n };\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.onInputChange(this.getSelectedIds(), name, value);\r\n };\r\n\r\n onImportPress = () => {\r\n this.props.onImportPress(this.getSelectedIds());\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n rootFolderId,\r\n path,\r\n rootFoldersFetching,\r\n rootFoldersError,\r\n rootFoldersPopulated,\r\n unmappedFolders\r\n } = this.props;\r\n\r\n const {\r\n allSelected,\r\n allUnselected,\r\n selectedState\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {\r\n rootFoldersFetching ? : null\r\n }\r\n\r\n {\r\n !rootFoldersFetching && !!rootFoldersError ?\r\n \r\n {translate('UnableToLoadRootFolders')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n !rootFoldersError &&\r\n !rootFoldersFetching &&\r\n rootFoldersPopulated &&\r\n !unmappedFolders.length ?\r\n \r\n {translate('AllMoviesInPathHaveBeenImported', { path })}\r\n :\r\n null\r\n }\r\n\r\n {\r\n !rootFoldersError &&\r\n !rootFoldersFetching &&\r\n rootFoldersPopulated &&\r\n !!unmappedFolders.length &&\r\n this.scrollerRef.current ?\r\n :\r\n null\r\n }\r\n \r\n\r\n {\r\n !rootFoldersError &&\r\n !rootFoldersFetching &&\r\n !!unmappedFolders.length ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nImportMovie.propTypes = {\r\n rootFolderId: PropTypes.number.isRequired,\r\n path: PropTypes.string,\r\n rootFoldersFetching: PropTypes.bool.isRequired,\r\n rootFoldersPopulated: PropTypes.bool.isRequired,\r\n rootFoldersError: PropTypes.object,\r\n unmappedFolders: PropTypes.arrayOf(PropTypes.object),\r\n items: PropTypes.arrayOf(PropTypes.object),\r\n onInputChange: PropTypes.func.isRequired,\r\n onImportPress: PropTypes.func.isRequired\r\n};\r\n\r\nImportMovie.defaultProps = {\r\n unmappedFolders: []\r\n};\r\n\r\nexport default ImportMovie;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createRouteMatchShape from 'Helpers/Props/Shapes/createRouteMatchShape';\r\nimport { setAddMovieDefault } from 'Store/Actions/addMovieActions';\r\nimport { clearImportMovie, importMovie, setImportMovieValue } from 'Store/Actions/importMovieActions';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport ImportMovie from './ImportMovie';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { match }) => match,\r\n (state) => state.rootFolders,\r\n (state) => state.addMovie,\r\n (state) => state.importMovie,\r\n (state) => state.settings.qualityProfiles,\r\n (\r\n match,\r\n rootFolders,\r\n addMovie,\r\n importMovieState,\r\n qualityProfiles\r\n ) => {\r\n const {\r\n isFetching: rootFoldersFetching,\r\n isPopulated: rootFoldersPopulated,\r\n error: rootFoldersError,\r\n items\r\n } = rootFolders;\r\n\r\n const rootFolderId = parseInt(match.params.rootFolderId);\r\n\r\n const result = {\r\n rootFolderId,\r\n rootFoldersFetching,\r\n rootFoldersPopulated,\r\n rootFoldersError,\r\n qualityProfiles: qualityProfiles.items,\r\n defaultQualityProfileId: addMovie.defaults.qualityProfileId\r\n };\r\n\r\n if (items.length) {\r\n const rootFolder = _.find(items, { id: rootFolderId });\r\n\r\n return {\r\n ...result,\r\n ...rootFolder,\r\n items: importMovieState.items\r\n };\r\n }\r\n\r\n return result;\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSetImportMovieValue: setImportMovieValue,\r\n dispatchImportMovie: importMovie,\r\n dispatchClearImportMovie: clearImportMovie,\r\n dispatchFetchRootFolders: fetchRootFolders,\r\n dispatchSetAddMovieDefault: setAddMovieDefault\r\n};\r\n\r\nclass ImportMovieConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n rootFolderId,\r\n qualityProfiles,\r\n defaultQualityProfileId,\r\n dispatchFetchRootFolders,\r\n dispatchSetAddMovieDefault\r\n } = this.props;\r\n\r\n dispatchFetchRootFolders({ id: rootFolderId, timeout: false });\r\n\r\n let setDefaults = false;\r\n const setDefaultPayload = {};\r\n\r\n if (\r\n !defaultQualityProfileId ||\r\n !qualityProfiles.some((p) => p.id === defaultQualityProfileId)\r\n ) {\r\n setDefaults = true;\r\n setDefaultPayload.qualityProfileId = qualityProfiles[0].id;\r\n }\r\n\r\n if (setDefaults) {\r\n dispatchSetAddMovieDefault(setDefaultPayload);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.dispatchClearImportMovie();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = (ids, name, value) => {\r\n this.props.dispatchSetAddMovieDefault({ [name]: value });\r\n\r\n ids.forEach((id) => {\r\n this.props.dispatchSetImportMovieValue({\r\n id,\r\n [name]: value\r\n });\r\n });\r\n };\r\n\r\n onImportPress = (ids) => {\r\n this.props.dispatchImportMovie({ ids });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nconst routeMatchShape = createRouteMatchShape({\r\n rootFolderId: PropTypes.string.isRequired\r\n});\r\n\r\nImportMovieConnector.propTypes = {\r\n match: routeMatchShape.isRequired,\r\n rootFolderId: PropTypes.number.isRequired,\r\n rootFoldersFetching: PropTypes.bool.isRequired,\r\n rootFoldersPopulated: PropTypes.bool.isRequired,\r\n qualityProfiles: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n defaultQualityProfileId: PropTypes.number.isRequired,\r\n dispatchSetImportMovieValue: PropTypes.func.isRequired,\r\n dispatchImportMovie: PropTypes.func.isRequired,\r\n dispatchClearImportMovie: PropTypes.func.isRequired,\r\n dispatchFetchRootFolders: PropTypes.func.isRequired,\r\n dispatchSetAddMovieDefault: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ImportMovieConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport { icons } from 'Helpers/Props';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ImportMovieRootFolderRow.css';\r\n\r\nfunction ImportMovieRootFolderRow(props) {\r\n const {\r\n id,\r\n path,\r\n freeSpace,\r\n unmappedFolders,\r\n onDeletePress\r\n } = props;\r\n\r\n const unmappedFoldersCount = unmappedFolders.length || '-';\r\n\r\n return (\r\n \r\n \r\n \r\n {path}\r\n \r\n \r\n\r\n \r\n {formatBytes(freeSpace) || '-'}\r\n \r\n\r\n \r\n {unmappedFoldersCount}\r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nImportMovieRootFolderRow.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n path: PropTypes.string.isRequired,\r\n freeSpace: PropTypes.number.isRequired,\r\n unmappedFolders: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onDeletePress: PropTypes.func.isRequired\r\n};\r\n\r\nImportMovieRootFolderRow.defaultProps = {\r\n freeSpace: 0,\r\n unmappedFolders: []\r\n};\r\n\r\nexport default ImportMovieRootFolderRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"ImportMovieRootFolderRow-link-hfOY_ Link-link-RInnp\",\"freeSpace\":\"ImportMovieRootFolderRow-freeSpace-k1IFV TableRowCell-cell-giPrj\",\"unmappedFolders\":\"ImportMovieRootFolderRow-unmappedFolders-TFJw8 TableRowCell-cell-giPrj\",\"actions\":\"ImportMovieRootFolderRow-actions-jJU6h TableRowCell-cell-giPrj\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteRootFolder } from 'Store/Actions/rootFolderActions';\r\nimport ImportMovieRootFolderRow from './ImportMovieRootFolderRow';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n () => {\r\n return {\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n deleteRootFolder\r\n};\r\n\r\nclass ImportMovieRootFolderRowConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onDeletePress = () => {\r\n this.props.deleteRootFolder({ id: this.props.id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nImportMovieRootFolderRowConnector.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n deleteRootFolder: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ImportMovieRootFolderRowConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"ImportMovieSelectFolder-header-CHXbA\",\"tips\":\"ImportMovieSelectFolder-tips-URJcj\",\"tip\":\"ImportMovieSelectFolder-tip-x4rXX\",\"code\":\"ImportMovieSelectFolder-code-mZ5JV\",\"recentFolders\":\"ImportMovieSelectFolder-recentFolders-r9Yq9\",\"startImport\":\"ImportMovieSelectFolder-startImport-jZHoS\",\"importButtonIcon\":\"ImportMovieSelectFolder-importButtonIcon-vC2RM\",\"addErrorAlert\":\"ImportMovieSelectFolder-addErrorAlert-OTpIS Alert-alert-_KgnQ\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport FileBrowserModal from 'Components/FileBrowser/FileBrowserModal';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { icons, kinds, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport ImportMovieRootFolderRowConnector from './ImportMovieRootFolderRowConnector';\r\nimport styles from './ImportMovieSelectFolder.css';\r\n\r\nconst rootFolderColumns = [\r\n {\r\n name: 'path',\r\n label: () => translate('Path'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'freeSpace',\r\n label: () => translate('FreeSpace'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'unmappedFolders',\r\n label: () => translate('UnmappedFolders'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'actions',\r\n isVisible: true\r\n }\r\n];\r\n\r\nclass ImportMovieSelectFolder extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isAddNewRootFolderModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Lifecycle\r\n\r\n onAddNewRootFolderPress = () => {\r\n this.setState({ isAddNewRootFolderModalOpen: true });\r\n };\r\n\r\n onNewRootFolderSelect = ({ value }) => {\r\n this.props.onNewRootFolderSelect(value);\r\n };\r\n\r\n onAddRootFolderModalClose = () => {\r\n this.setState({ isAddNewRootFolderModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isWindows,\r\n isFetching,\r\n isPopulated,\r\n isSaving,\r\n error,\r\n saveError,\r\n items\r\n } = this.props;\r\n\r\n const hasRootFolders = items.length > 0;\r\n\r\n return (\r\n \r\n \r\n {\r\n isFetching && !isPopulated ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n !isFetching && error ?\r\n \r\n {translate('UnableToLoadRootFolders')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n !error && isPopulated &&\r\n
\r\n
\r\n {translate('ImportHeader')}\r\n
\r\n\r\n
\r\n {translate('ImportTipsMessage')}\r\n
    \r\n
  • movie.2008.bluray.mkv']) }} />\r\n
  • ${isWindows ? 'C:\\\\movies' : '/movies'}`, `${isWindows ? 'C:\\\\movies\\\\the matrix' : '/movies/the matrix'}`]) }} />\r\n
  • {translate('ImportNotForDownloads')}
  • \r\n
\r\n
\r\n\r\n {\r\n hasRootFolders ?\r\n
\r\n
\r\n \r\n \r\n {\r\n items.map((rootFolder) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n
\r\n
:\r\n null\r\n }\r\n\r\n {\r\n !isSaving && saveError ?\r\n \r\n {translate('AddRootFolderError')}\r\n\r\n
    \r\n {\r\n Array.isArray(saveError.responseJSON) ?\r\n saveError.responseJSON.map((e, index) => {\r\n return (\r\n
  • \r\n {e.errorMessage}\r\n
  • \r\n );\r\n }) :\r\n
  • \r\n {\r\n JSON.stringify(saveError.responseJSON)\r\n }\r\n
  • \r\n }\r\n
\r\n :\r\n null\r\n }\r\n\r\n
\r\n \r\n \r\n {\r\n hasRootFolders ?\r\n translate('ChooseAnotherFolder') :\r\n translate('StartImport')\r\n }\r\n \r\n
\r\n\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nImportMovieSelectFolder.propTypes = {\r\n isWindows: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n saveError: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onNewRootFolderSelect: PropTypes.func.isRequired,\r\n onDeleteRootFolderPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportMovieSelectFolder;\r\n","import { push } from 'connected-react-router';\r\nimport _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { addRootFolder, deleteRootFolder, fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport createRootFoldersSelector from 'Store/Selectors/createRootFoldersSelector';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport ImportMovieSelectFolder from './ImportMovieSelectFolder';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createRootFoldersSelector(),\r\n createSystemStatusSelector(),\r\n (rootFolders, systemStatus) => {\r\n return {\r\n ...rootFolders,\r\n isWindows: systemStatus.isWindows\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchRootFolders,\r\n addRootFolder,\r\n deleteRootFolder,\r\n push\r\n};\r\n\r\nclass ImportMovieSelectFolderConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchRootFolders();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n items,\r\n isSaving,\r\n saveError\r\n } = this.props;\r\n\r\n if (prevProps.isSaving && !isSaving && !saveError) {\r\n const newRootFolders = _.differenceBy(items, prevProps.items, (item) => item.id);\r\n\r\n if (newRootFolders.length === 1) {\r\n this.props.push(`${window.Radarr.urlBase}/add/import/${newRootFolders[0].id}`);\r\n }\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onNewRootFolderSelect = (path) => {\r\n this.props.addRootFolder({ path });\r\n };\r\n\r\n onDeleteRootFolderPress = (id) => {\r\n this.props.deleteRootFolder({ id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nImportMovieSelectFolderConnector.propTypes = {\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n fetchRootFolders: PropTypes.func.isRequired,\r\n addRootFolder: PropTypes.func.isRequired,\r\n deleteRootFolder: PropTypes.func.isRequired,\r\n push: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ImportMovieSelectFolderConnector);\r\n","export default function getPathWithUrlBase(path) {\r\n return `${window.Radarr.urlBase}${path}`;\r\n}\r\n","import React, { Children, ReactElement, ReactNode } from 'react';\r\nimport { Switch as RouterSwitch } from 'react-router-dom';\r\nimport getPathWithUrlBase from 'Utilities/getPathWithUrlBase';\r\n\r\ninterface ExtendedRoute {\r\n path: string;\r\n addUrlBase?: boolean;\r\n}\r\n\r\ninterface SwitchProps {\r\n children: ReactNode;\r\n}\r\n\r\nfunction Switch({ children }: SwitchProps) {\r\n return (\r\n \r\n {Children.map(children, (child) => {\r\n if (!React.isValidElement(child)) {\r\n return child;\r\n }\r\n\r\n const elementChild: ReactElement = child;\r\n\r\n const { path: childPath, addUrlBase = true } = elementChild.props;\r\n\r\n if (!childPath) {\r\n return child;\r\n }\r\n\r\n const path = addUrlBase ? getPathWithUrlBase(childPath) : childPath;\r\n\r\n return React.cloneElement(child, { path });\r\n })}\r\n \r\n );\r\n}\r\n\r\nexport default Switch;\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport ImportMovieConnector from 'AddMovie/ImportMovie/Import/ImportMovieConnector';\r\nimport ImportMovieSelectFolderConnector from 'AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolderConnector';\r\nimport Switch from 'Components/Router/Switch';\r\n\r\nclass ImportMovies extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ImportMovies;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nfunction withCurrentPage(WrappedComponent) {\r\n function CurrentPage(props) {\r\n const {\r\n history\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n CurrentPage.propTypes = {\r\n history: PropTypes.object.isRequired\r\n };\r\n\r\n return CurrentPage;\r\n}\r\n\r\nexport default withCurrentPage;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"NoMovie-message-TFmEh\",\"buttonContainer\":\"NoMovie-buttonContainer-z4yY7\"};","import React from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './NoMovie.css';\r\n\r\ninterface NoMovieProps {\r\n totalItems: number;\r\n}\r\n\r\nfunction NoMovie(props: NoMovieProps) {\r\n const { totalItems } = props;\r\n\r\n if (totalItems > 0) {\r\n return (\r\n
\r\n
\r\n {translate('AllMoviesHiddenDueToFilter')}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
{translate('NoMoviesExist')}
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default NoMovie;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createMovieFileSelector() {\r\n return createSelector(\r\n (_: AppState, { movieFileId }: { movieFileId: number }) => movieFileId,\r\n (state: AppState) => state.movieFiles,\r\n (movieFileId, movieFiles) => {\r\n if (!movieFileId) {\r\n return;\r\n }\r\n\r\n return movieFiles.items.find((movieFile) => movieFile.id === movieFileId);\r\n }\r\n );\r\n}\r\n\r\nexport default createMovieFileSelector;\r\n","import _ from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport movieEntities from 'Movie/movieEntities';\r\n\r\nexport function createMovieSelectorForHook(movieId) {\r\n return createSelector(\r\n (state) => state.movies.itemMap,\r\n (state) => state.movies.items,\r\n (itemMap, allMovies) => {\r\n\r\n return movieId ? allMovies[itemMap[movieId]]: undefined;\r\n }\r\n );\r\n}\r\n\r\nexport function createMovieByEntitySelector() {\r\n return createSelector(\r\n (state, { movieId }) => movieId,\r\n (state, { movieEntity = movieEntities.MOVIES }) => _.get(state, movieEntity, { items: [] }),\r\n (movieId, movies) => {\r\n return _.find(movies.items, { id: movieId });\r\n }\r\n );\r\n}\r\n\r\nfunction createMovieSelector() {\r\n return createSelector(\r\n (state, { movieId }) => movieId,\r\n (state) => state.movies.itemMap,\r\n (state) => state.movies.items,\r\n (movieId, itemMap, allMovies) => {\r\n return allMovies[itemMap[movieId]];\r\n }\r\n );\r\n}\r\n\r\nexport default createMovieSelector;\r\n","import React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons, tooltipPositions } from 'Helpers/Props';\r\nimport {\r\n QueueTrackedDownloadState,\r\n QueueTrackedDownloadStatus,\r\n StatusMessage,\r\n} from 'typings/Queue';\r\nimport translate from 'Utilities/String/translate';\r\nimport QueueStatus from './QueueStatus';\r\nimport styles from './QueueDetails.css';\r\n\r\ninterface QueueDetailsProps {\r\n title: string;\r\n size: number;\r\n sizeleft: number;\r\n estimatedCompletionTime?: string;\r\n status: string;\r\n trackedDownloadState?: QueueTrackedDownloadState;\r\n trackedDownloadStatus?: QueueTrackedDownloadStatus;\r\n statusMessages?: StatusMessage[];\r\n errorMessage?: string;\r\n progressBar: React.ReactNode;\r\n}\r\n\r\nfunction QueueDetails(props: QueueDetailsProps) {\r\n const {\r\n title,\r\n size,\r\n sizeleft,\r\n status,\r\n trackedDownloadState = 'downloading',\r\n trackedDownloadStatus = 'ok',\r\n statusMessages,\r\n errorMessage,\r\n progressBar,\r\n } = props;\r\n\r\n const progress = size ? 100 - (sizeleft / size) * 100 : 0;\r\n const isDownloading = status === 'downloading';\r\n const isPaused = status === 'paused';\r\n const hasWarning = trackedDownloadStatus === 'warning';\r\n const hasError = trackedDownloadStatus === 'error';\r\n\r\n if ((isDownloading || isPaused) && !hasWarning && !hasError) {\r\n const state = isPaused ? translate('Paused') : translate('Downloading');\r\n\r\n if (progress < 5) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n {title}}\r\n position={tooltipPositions.LEFT}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default QueueDetails;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"progressBarContainer\":\"QueueDetails-progressBarContainer-wLM1D\"};","// extracted by mini-css-extract-plugin\nexport default {\"circularProgressBarContainer\":\"CircularProgressBar-circularProgressBarContainer-m582E\",\"circularProgressBar\":\"CircularProgressBar-circularProgressBar-sVb5D\",\"circularProgressBarText\":\"CircularProgressBar-circularProgressBarText-aGfDa\"};","import React, { useCallback, useEffect, useState } from 'react';\r\nimport styles from './CircularProgressBar.css';\r\n\r\ninterface CircularProgressBarProps {\r\n className?: string;\r\n containerClassName?: string;\r\n size?: number;\r\n progress: number;\r\n strokeWidth?: number;\r\n strokeColor?: string;\r\n showProgressText?: boolean;\r\n}\r\n\r\nfunction CircularProgressBar({\r\n className = styles.circularProgressBar,\r\n containerClassName = styles.circularProgressBarContainer,\r\n size = 60,\r\n strokeWidth = 5,\r\n strokeColor = '#ffc230',\r\n showProgressText = false,\r\n progress,\r\n}: CircularProgressBarProps) {\r\n const [currentProgress, setCurrentProgress] = useState(0);\r\n const raf = React.useRef(0);\r\n const center = size / 2;\r\n const radius = center - strokeWidth;\r\n const circumference = Math.PI * (radius * 2);\r\n const sizeInPixels = `${size}px`;\r\n const strokeDashoffset = ((100 - currentProgress) / 100) * circumference;\r\n const progressText = `${Math.round(currentProgress)}%`;\r\n\r\n const handleAnimation = useCallback(\r\n (p: number) => {\r\n setCurrentProgress((prevProgress) => {\r\n if (prevProgress < p) {\r\n return prevProgress + Math.min(1, p - prevProgress);\r\n }\r\n\r\n return prevProgress;\r\n });\r\n },\r\n [setCurrentProgress]\r\n );\r\n\r\n useEffect(() => {\r\n if (progress > currentProgress) {\r\n cancelAnimationFrame(raf.current);\r\n\r\n raf.current = requestAnimationFrame(() => handleAnimation(progress));\r\n }\r\n }, [progress, currentProgress, handleAnimation]);\r\n\r\n useEffect(\r\n () => {\r\n return () => cancelAnimationFrame(raf.current);\r\n },\r\n // We only want to run this effect once\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n {showProgressText && (\r\n
{progressText}
\r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default CircularProgressBar;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport QueueDetails from 'Activity/Queue/QueueDetails';\r\nimport CircularProgressBar from 'Components/CircularProgressBar';\r\n\r\nfunction CalendarEventQueueDetails(props) {\r\n const {\r\n title,\r\n size,\r\n sizeleft,\r\n estimatedCompletionTime,\r\n status,\r\n trackedDownloadState,\r\n trackedDownloadStatus,\r\n statusMessages,\r\n errorMessage\r\n } = props;\r\n\r\n const progress = size ? (100 - sizeleft / size * 100) : 0;\r\n\r\n return (\r\n \r\n }\r\n />\r\n );\r\n}\r\n\r\nCalendarEventQueueDetails.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n size: PropTypes.number.isRequired,\r\n sizeleft: PropTypes.number.isRequired,\r\n estimatedCompletionTime: PropTypes.string,\r\n status: PropTypes.string.isRequired,\r\n trackedDownloadState: PropTypes.string.isRequired,\r\n trackedDownloadStatus: PropTypes.string.isRequired,\r\n statusMessages: PropTypes.arrayOf(PropTypes.object),\r\n errorMessage: PropTypes.string\r\n};\r\n\r\nexport default CalendarEventQueueDetails;\r\n","function getStatusStyle(hasFile, downloading, isMonitored, isAvailable) {\r\n if (downloading) {\r\n return 'queue';\r\n }\r\n\r\n if (hasFile && isMonitored) {\r\n return 'downloaded';\r\n }\r\n\r\n if (hasFile && !isMonitored) {\r\n return 'unmonitored';\r\n }\r\n\r\n if (isAvailable && isMonitored) {\r\n return 'missingMonitored';\r\n }\r\n\r\n if (!isMonitored) {\r\n return 'missingUnmonitored';\r\n }\r\n\r\n return 'continuing';\r\n}\r\n\r\nexport default getStatusStyle;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"event\":\"AgendaEvent-event-dWRPa\",\"underlay\":\"AgendaEvent-underlay-oujnp\",\"overlay\":\"AgendaEvent-overlay-YJLNf\",\"eventWrapper\":\"AgendaEvent-eventWrapper-FYVBh\",\"date\":\"AgendaEvent-date-bRc76\",\"time\":\"AgendaEvent-time-aMJgA\",\"movieTitle\":\"AgendaEvent-movieTitle-kmaFu\",\"genres\":\"AgendaEvent-genres-vKT8v\",\"statusIcon\":\"AgendaEvent-statusIcon-RmHma\",\"downloaded\":\"AgendaEvent-downloaded-JseRe CalendarEvent-downloaded-aVyLe\",\"queue\":\"AgendaEvent-queue-Gb5V4 CalendarEvent-queue-tm1SZ\",\"unmonitored\":\"AgendaEvent-unmonitored-F6YTt CalendarEvent-unmonitored-vL9TJ\",\"missingUnmonitored\":\"AgendaEvent-missingUnmonitored-OXc1m CalendarEvent-missingUnmonitored-bCDJL\",\"missingMonitored\":\"AgendaEvent-missingMonitored-AT2TL CalendarEvent-missingMonitored-Jnllz\",\"continuing\":\"AgendaEvent-continuing-fDIWC CalendarEvent-continuing-zQZbf\",\"releaseIcon\":\"AgendaEvent-releaseIcon-YQ_YK\"};","import classNames from 'classnames';\r\nimport moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport CalendarEventQueueDetails from 'Calendar/Events/CalendarEventQueueDetails';\r\nimport getStatusStyle from 'Calendar/getStatusStyle';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './AgendaEvent.css';\r\n\r\nclass AgendaEvent extends Component {\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isDetailsModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n this.setState({ isDetailsModalOpen: true });\r\n };\r\n\r\n onDetailsModalClose = () => {\r\n this.setState({ isDetailsModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n movieFile,\r\n title,\r\n titleSlug,\r\n genres,\r\n isAvailable,\r\n inCinemas,\r\n digitalRelease,\r\n physicalRelease,\r\n monitored,\r\n hasFile,\r\n grabbed,\r\n queueItem,\r\n showDate,\r\n showMovieInformation,\r\n showCutoffUnmetIcon,\r\n longDateFormat,\r\n colorImpairedMode,\r\n cinemaDateParsed,\r\n digitalDateParsed,\r\n physicalDateParsed,\r\n sortDate\r\n } = this.props;\r\n\r\n let startTime = null;\r\n let releaseIcon = null;\r\n\r\n if (physicalDateParsed === sortDate) {\r\n startTime = physicalRelease;\r\n releaseIcon = icons.DISC;\r\n }\r\n\r\n if (digitalDateParsed === sortDate) {\r\n startTime = digitalRelease;\r\n releaseIcon = icons.MOVIE_FILE;\r\n }\r\n\r\n if (cinemaDateParsed === sortDate) {\r\n startTime = inCinemas;\r\n releaseIcon = icons.IN_CINEMAS;\r\n }\r\n\r\n startTime = moment(startTime);\r\n const downloading = !!(queueItem || grabbed);\r\n const isMonitored = monitored;\r\n const statusStyle = getStatusStyle(hasFile, downloading, isMonitored, isAvailable);\r\n const joinedGenres = genres.slice(0, 2).join(', ');\r\n const link = `/movie/${titleSlug}`;\r\n\r\n return (\r\n
\r\n \r\n\r\n
\r\n
\r\n {showDate ? startTime.format(longDateFormat) : null}\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n {title}\r\n
\r\n\r\n {\r\n showMovieInformation &&\r\n
\r\n {joinedGenres}\r\n
\r\n }\r\n\r\n {\r\n !!queueItem &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n !queueItem && grabbed &&\r\n \r\n }\r\n\r\n {\r\n showCutoffUnmetIcon && !!movieFile && movieFile.qualityCutoffNotMet &&\r\n \r\n }\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nAgendaEvent.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n movieFile: PropTypes.object,\r\n title: PropTypes.string.isRequired,\r\n titleSlug: PropTypes.string.isRequired,\r\n genres: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n isAvailable: PropTypes.bool.isRequired,\r\n inCinemas: PropTypes.string,\r\n digitalRelease: PropTypes.string,\r\n physicalRelease: PropTypes.string,\r\n monitored: PropTypes.bool.isRequired,\r\n hasFile: PropTypes.bool.isRequired,\r\n grabbed: PropTypes.bool,\r\n queueItem: PropTypes.object,\r\n showDate: PropTypes.bool.isRequired,\r\n showMovieInformation: PropTypes.bool.isRequired,\r\n showCutoffUnmetIcon: PropTypes.bool.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n longDateFormat: PropTypes.string.isRequired,\r\n colorImpairedMode: PropTypes.bool.isRequired,\r\n cinemaDateParsed: PropTypes.number,\r\n digitalDateParsed: PropTypes.number,\r\n physicalDateParsed: PropTypes.number,\r\n sortDate: PropTypes.number\r\n};\r\n\r\nAgendaEvent.defaultProps = {\r\n genres: []\r\n};\r\n\r\nexport default AgendaEvent;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createMovieFileSelector from 'Store/Selectors/createMovieFileSelector';\r\nimport createMovieSelector from 'Store/Selectors/createMovieSelector';\r\nimport createQueueItemSelector from 'Store/Selectors/createQueueItemSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport AgendaEvent from './AgendaEvent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar.options,\r\n createMovieSelector(),\r\n createMovieFileSelector(),\r\n createQueueItemSelector(),\r\n createUISettingsSelector(),\r\n (calendarOptions, movie, movieFile, queueItem, uiSettings) => {\r\n return {\r\n movie,\r\n movieFile,\r\n queueItem,\r\n ...calendarOptions,\r\n timeFormat: uiSettings.timeFormat,\r\n longDateFormat: uiSettings.longDateFormat,\r\n colorImpairedMode: uiSettings.enableColorImpairedMode\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(AgendaEvent);\r\n","import moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport AgendaEventConnector from './AgendaEventConnector';\r\nimport styles from './Agenda.css';\r\n\r\nfunction Agenda(props) {\r\n const {\r\n items,\r\n start,\r\n end\r\n } = props;\r\n\r\n const startDateParsed = Date.parse(start);\r\n const endDateParsed = Date.parse(end);\r\n\r\n items.forEach((item) => {\r\n const cinemaDateParsed = Date.parse(item.inCinemas);\r\n const digitalDateParsed = Date.parse(item.digitalRelease);\r\n const physicalDateParsed = Date.parse(item.physicalRelease);\r\n const dates = [];\r\n\r\n if (cinemaDateParsed > 0 && cinemaDateParsed >= startDateParsed && cinemaDateParsed <= endDateParsed) {\r\n dates.push(cinemaDateParsed);\r\n }\r\n if (digitalDateParsed > 0 && digitalDateParsed >= startDateParsed && digitalDateParsed <= endDateParsed) {\r\n dates.push(digitalDateParsed);\r\n }\r\n if (physicalDateParsed > 0 && physicalDateParsed >= startDateParsed && physicalDateParsed <= endDateParsed) {\r\n dates.push(physicalDateParsed);\r\n }\r\n\r\n item.sortDate = Math.min(...dates);\r\n item.cinemaDateParsed = cinemaDateParsed;\r\n item.digitalDateParsed = digitalDateParsed;\r\n item.physicalDateParsed = physicalDateParsed;\r\n });\r\n\r\n items.sort((a, b) => ((a.sortDate > b.sortDate) ? 1 : -1));\r\n\r\n return (\r\n
\r\n {\r\n items.map((item, index) => {\r\n const momentDate = moment(item.sortDate);\r\n const showDate = index === 0 ||\r\n !moment(items[index - 1].sortDate).isSame(momentDate, 'day');\r\n\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n}\r\n\r\nAgenda.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n start: PropTypes.string.isRequired,\r\n end: PropTypes.string.isRequired\r\n};\r\n\r\nexport default Agenda;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport Agenda from './Agenda';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar,\r\n (calendar) => {\r\n return calendar;\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(Agenda);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"agenda\":\"Agenda-agenda-hRnz8\"};","// extracted by mini-css-extract-plugin\nexport default {\"event\":\"CalendarEvent-event-P9Zg6\",\"underlay\":\"CalendarEvent-underlay-I5NFH\",\"overlay\":\"CalendarEvent-overlay-jadXq\",\"info\":\"CalendarEvent-info-ScXwS\",\"movieInfo\":\"CalendarEvent-movieInfo-iaycP\",\"movieTitle\":\"CalendarEvent-movieTitle-Ui3GY\",\"genres\":\"CalendarEvent-genres-YBLDV\",\"statusContainer\":\"CalendarEvent-statusContainer-QdqhX\",\"statusIcon\":\"CalendarEvent-statusIcon-aQUSC\",\"downloaded\":\"CalendarEvent-downloaded-aVyLe\",\"queue\":\"CalendarEvent-queue-tm1SZ\",\"unmonitored\":\"CalendarEvent-unmonitored-vL9TJ\",\"missingUnmonitored\":\"CalendarEvent-missingUnmonitored-bCDJL\",\"missingMonitored\":\"CalendarEvent-missingMonitored-Jnllz\",\"continuing\":\"CalendarEvent-continuing-zQZbf\"};","import classNames from 'classnames';\r\nimport moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport getStatusStyle from 'Calendar/getStatusStyle';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport CalendarEventQueueDetails from './CalendarEventQueueDetails';\r\nimport styles from './CalendarEvent.css';\r\n\r\nclass CalendarEvent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n movieFile,\r\n isAvailable,\r\n inCinemas,\r\n physicalRelease,\r\n digitalRelease,\r\n title,\r\n titleSlug,\r\n genres,\r\n date,\r\n monitored,\r\n certification,\r\n hasFile,\r\n grabbed,\r\n queueItem,\r\n showMovieInformation,\r\n showCutoffUnmetIcon,\r\n fullColorEvents,\r\n colorImpairedMode\r\n } = this.props;\r\n\r\n const isDownloading = !!(queueItem || grabbed);\r\n const isMonitored = monitored;\r\n const statusStyle = getStatusStyle(hasFile, isDownloading, isMonitored, isAvailable);\r\n const joinedGenres = genres.slice(0, 2).join(', ');\r\n const link = `/movie/${titleSlug}`;\r\n const eventType = [];\r\n\r\n if (inCinemas && moment(date).isSame(moment(inCinemas), 'day')) {\r\n eventType.push('Cinemas');\r\n }\r\n\r\n if (physicalRelease && moment(date).isSame(moment(physicalRelease), 'day')) {\r\n eventType.push('Physical');\r\n }\r\n\r\n if (digitalRelease && moment(date).isSame(moment(digitalRelease), 'day')) {\r\n eventType.push('Digital');\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n {title}\r\n
\r\n\r\n \r\n {\r\n queueItem ?\r\n \r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n !queueItem && grabbed ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n showCutoffUnmetIcon &&\r\n !!movieFile &&\r\n movieFile.qualityCutoffNotMet ?\r\n :\r\n null\r\n }\r\n
\r\n
\r\n\r\n {\r\n showMovieInformation ?\r\n
\r\n
\r\n {joinedGenres}\r\n
\r\n
:\r\n null\r\n }\r\n\r\n {\r\n showMovieInformation ?\r\n
\r\n
\r\n {eventType.join(', ')}\r\n
\r\n
\r\n {certification}\r\n
\r\n
:\r\n null\r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nCalendarEvent.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n genres: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n movieFile: PropTypes.object,\r\n title: PropTypes.string.isRequired,\r\n titleSlug: PropTypes.string.isRequired,\r\n isAvailable: PropTypes.bool.isRequired,\r\n inCinemas: PropTypes.string,\r\n physicalRelease: PropTypes.string,\r\n digitalRelease: PropTypes.string,\r\n date: PropTypes.string.isRequired,\r\n monitored: PropTypes.bool.isRequired,\r\n certification: PropTypes.string,\r\n hasFile: PropTypes.bool.isRequired,\r\n grabbed: PropTypes.bool,\r\n queueItem: PropTypes.object,\r\n // These props come from the connector, not marked as required to appease TS for now.\r\n showMovieInformation: PropTypes.bool,\r\n showCutoffUnmetIcon: PropTypes.bool,\r\n fullColorEvents: PropTypes.bool,\r\n timeFormat: PropTypes.string,\r\n colorImpairedMode: PropTypes.bool\r\n};\r\n\r\nCalendarEvent.defaultProps = {\r\n genres: []\r\n};\r\n\r\nexport default CalendarEvent;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createMovieSelector from 'Store/Selectors/createMovieSelector';\r\nimport createQueueItemSelector from 'Store/Selectors/createQueueItemSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport CalendarEvent from './CalendarEvent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar.options,\r\n createMovieSelector(),\r\n createQueueItemSelector(),\r\n createUISettingsSelector(),\r\n (calendarOptions, movie, queueItem, uiSettings) => {\r\n return {\r\n movie,\r\n queueItem,\r\n ...calendarOptions,\r\n timeFormat: uiSettings.timeFormat,\r\n colorImpairedMode: uiSettings.enableColorImpairedMode\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(CalendarEvent);\r\n","import classNames from 'classnames';\r\nimport moment from 'moment';\r\nimport React from 'react';\r\nimport * as calendarViews from 'Calendar/calendarViews';\r\nimport CalendarEventConnector from 'Calendar/Events/CalendarEventConnector';\r\nimport CalendarEvent from 'typings/CalendarEvent';\r\nimport styles from './CalendarDay.css';\r\n\r\ninterface CalendarDayProps {\r\n date: string;\r\n time: string;\r\n isTodaysDate: boolean;\r\n events: CalendarEvent[];\r\n view: string;\r\n onEventModalOpenToggle(...args: unknown[]): unknown;\r\n}\r\n\r\nfunction CalendarDay(props: CalendarDayProps) {\r\n const { date, time, isTodaysDate, events, view, onEventModalOpenToggle } =\r\n props;\r\n\r\n const ref = React.useRef(null);\r\n\r\n React.useEffect(() => {\r\n if (isTodaysDate && view === calendarViews.MONTH && ref.current) {\r\n ref.current.scrollIntoView();\r\n }\r\n }, [time, isTodaysDate, view]);\r\n\r\n return (\r\n \r\n {view === calendarViews.MONTH && (\r\n \r\n {moment(date).date()}\r\n \r\n )}\r\n
\r\n {events.map((event) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default CalendarDay;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"day\":\"CalendarDay-day-vbHSD\",\"isSingleDay\":\"CalendarDay-isSingleDay-aARSn\",\"dayOfMonth\":\"CalendarDay-dayOfMonth-Ora3v\",\"isToday\":\"CalendarDay-isToday-E7jSB\",\"isDifferentMonth\":\"CalendarDay-isDifferentMonth-dYTOJ\"};","import _ from 'lodash';\r\nimport moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport CalendarDay from './CalendarDay';\r\n\r\nfunction sort(items) {\r\n return _.sortBy(items, (item) => {\r\n if (item.isGroup) {\r\n return moment(item.events[0].inCinemas).unix();\r\n }\r\n\r\n return moment(item.inCinemas).unix();\r\n });\r\n}\r\n\r\nfunction createCalendarEventsConnector() {\r\n return createSelector(\r\n (state, { date }) => date,\r\n (state) => state.calendar.items,\r\n (date, items) => {\r\n const filtered = _.filter(items, (item) => {\r\n return (item.inCinemas && moment(date).isSame(moment(item.inCinemas), 'day')) ||\r\n (item.physicalRelease && moment(date).isSame(moment(item.physicalRelease), 'day')) ||\r\n (item.digitalRelease && moment(date).isSame(moment(item.digitalRelease), 'day'));\r\n });\r\n\r\n return sort(filtered);\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar,\r\n createCalendarEventsConnector(),\r\n (calendar, events) => {\r\n return {\r\n time: calendar.time,\r\n view: calendar.view,\r\n events\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass CalendarDayConnector extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCalendarDayConnector.propTypes = {\r\n date: PropTypes.string.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps)(CalendarDayConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"days\":\"CalendarDays-days-bkUmr\",\"day\":\"CalendarDays-day-t0Mh6\",\"week\":\"CalendarDays-week-xFvOv\",\"forecast\":\"CalendarDays-forecast-ICEGg\",\"month\":\"CalendarDays-month-tpGR5\"};","import classNames from 'classnames';\r\nimport moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport * as calendarViews from 'Calendar/calendarViews';\r\nimport isToday from 'Utilities/Date/isToday';\r\nimport CalendarDayConnector from './CalendarDayConnector';\r\nimport styles from './CalendarDays.css';\r\n\r\nclass CalendarDays extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._touchStart = null;\r\n\r\n this.state = {\r\n todaysDate: moment().startOf('day').toISOString(),\r\n isEventModalOpen: false\r\n };\r\n\r\n this.updateTimeoutId = null;\r\n }\r\n\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const view = this.props.view;\r\n\r\n if (view === calendarViews.MONTH) {\r\n this.scheduleUpdate();\r\n }\r\n\r\n window.addEventListener('touchstart', this.onTouchStart);\r\n window.addEventListener('touchend', this.onTouchEnd);\r\n window.addEventListener('touchcancel', this.onTouchCancel);\r\n window.addEventListener('touchmove', this.onTouchMove);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.clearUpdateTimeout();\r\n\r\n window.removeEventListener('touchstart', this.onTouchStart);\r\n window.removeEventListener('touchend', this.onTouchEnd);\r\n window.removeEventListener('touchcancel', this.onTouchCancel);\r\n window.removeEventListener('touchmove', this.onTouchMove);\r\n }\r\n\r\n //\r\n // Control\r\n\r\n scheduleUpdate = () => {\r\n this.clearUpdateTimeout();\r\n const todaysDate = moment().startOf('day');\r\n const diff = moment().diff(todaysDate.clone().add(1, 'day'));\r\n\r\n this.setState({ todaysDate: todaysDate.toISOString() });\r\n\r\n this.updateTimeoutId = setTimeout(this.scheduleUpdate, diff);\r\n };\r\n\r\n clearUpdateTimeout = () => {\r\n if (this.updateTimeoutId) {\r\n clearTimeout(this.updateTimeoutId);\r\n }\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onEventModalOpenToggle = (isEventModalOpen) => {\r\n this.setState({ isEventModalOpen });\r\n };\r\n\r\n onTouchStart = (event) => {\r\n const touches = event.touches;\r\n const touchStart = touches[0].pageX;\r\n\r\n if (touches.length !== 1) {\r\n return;\r\n }\r\n\r\n if (\r\n touchStart < 50 ||\r\n this.props.isSidebarVisible ||\r\n this.state.isEventModalOpen\r\n ) {\r\n return;\r\n }\r\n\r\n this._touchStart = touchStart;\r\n };\r\n\r\n onTouchEnd = (event) => {\r\n const touches = event.changedTouches;\r\n const currentTouch = touches[0].pageX;\r\n\r\n if (!this._touchStart) {\r\n return;\r\n }\r\n\r\n if (currentTouch > this._touchStart && currentTouch - this._touchStart > 100) {\r\n this.props.onNavigatePrevious();\r\n } else if (currentTouch < this._touchStart && this._touchStart - currentTouch > 100) {\r\n this.props.onNavigateNext();\r\n }\r\n\r\n this._touchStart = null;\r\n };\r\n\r\n onTouchCancel = (event) => {\r\n this._touchStart = null;\r\n };\r\n\r\n onTouchMove = (event) => {\r\n if (!this._touchStart) {\r\n return;\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n dates,\r\n view\r\n } = this.props;\r\n\r\n return (\r\n
\r\n {\r\n dates.map((date) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nCalendarDays.propTypes = {\r\n dates: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n view: PropTypes.string.isRequired,\r\n isSidebarVisible: PropTypes.bool.isRequired,\r\n onNavigatePrevious: PropTypes.func.isRequired,\r\n onNavigateNext: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CalendarDays;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { gotoCalendarNextRange, gotoCalendarPreviousRange } from 'Store/Actions/calendarActions';\r\nimport CalendarDays from './CalendarDays';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar,\r\n (state) => state.app.isSidebarVisible,\r\n (calendar, isSidebarVisible) => {\r\n return {\r\n dates: calendar.dates,\r\n view: calendar.view,\r\n isSidebarVisible\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n onNavigatePrevious: gotoCalendarPreviousRange,\r\n onNavigateNext: gotoCalendarNextRange\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CalendarDays);\r\n","import classNames from 'classnames';\r\nimport moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport * as calendarViews from 'Calendar/calendarViews';\r\nimport getRelativeDate from 'Utilities/Date/getRelativeDate';\r\nimport styles from './DayOfWeek.css';\r\n\r\nclass DayOfWeek extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n date,\r\n view,\r\n isTodaysDate,\r\n calendarWeekColumnHeader,\r\n shortDateFormat,\r\n showRelativeDates\r\n } = this.props;\r\n\r\n const highlightToday = view !== calendarViews.MONTH && isTodaysDate;\r\n const momentDate = moment(date);\r\n let formatedDate = momentDate.format('dddd');\r\n\r\n if (view === calendarViews.WEEK) {\r\n formatedDate = momentDate.format(calendarWeekColumnHeader);\r\n } else if (view === calendarViews.FORECAST) {\r\n formatedDate = getRelativeDate({ date, shortDateFormat, showRelativeDates });\r\n }\r\n\r\n return (\r\n
\r\n {formatedDate}\r\n
\r\n );\r\n }\r\n}\r\n\r\nDayOfWeek.propTypes = {\r\n date: PropTypes.string.isRequired,\r\n view: PropTypes.string.isRequired,\r\n isTodaysDate: PropTypes.bool.isRequired,\r\n calendarWeekColumnHeader: PropTypes.string.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n showRelativeDates: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default DayOfWeek;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"dayOfWeek\":\"DayOfWeek-dayOfWeek-D4GRS\",\"isSingleDay\":\"DayOfWeek-isSingleDay-w4a3G\",\"isToday\":\"DayOfWeek-isToday-Ga8JJ\"};","import moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport * as calendarViews from 'Calendar/calendarViews';\r\nimport DayOfWeek from './DayOfWeek';\r\nimport styles from './DaysOfWeek.css';\r\n\r\nclass DaysOfWeek extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n todaysDate: moment().startOf('day').toISOString()\r\n };\r\n\r\n this.updateTimeoutId = null;\r\n }\r\n\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const view = this.props.view;\r\n\r\n if (view !== calendarViews.AGENDA || view !== calendarViews.MONTH) {\r\n this.scheduleUpdate();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.clearUpdateTimeout();\r\n }\r\n\r\n //\r\n // Control\r\n\r\n scheduleUpdate = () => {\r\n this.clearUpdateTimeout();\r\n const todaysDate = moment().startOf('day');\r\n const diff = todaysDate.clone().add(1, 'day').diff(moment());\r\n\r\n this.setState({\r\n todaysDate: todaysDate.toISOString()\r\n });\r\n\r\n this.updateTimeoutId = setTimeout(this.scheduleUpdate, diff);\r\n };\r\n\r\n clearUpdateTimeout = () => {\r\n if (this.updateTimeoutId) {\r\n clearTimeout(this.updateTimeoutId);\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n dates,\r\n view,\r\n ...otherProps\r\n } = this.props;\r\n\r\n if (view === calendarViews.AGENDA) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {\r\n dates.map((date) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nDaysOfWeek.propTypes = {\r\n dates: PropTypes.arrayOf(PropTypes.string),\r\n view: PropTypes.string.isRequired\r\n};\r\n\r\nexport default DaysOfWeek;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"daysOfWeek\":\"DaysOfWeek-daysOfWeek-DQmbR\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport DaysOfWeek from './DaysOfWeek';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar,\r\n createUISettingsSelector(),\r\n (calendar, UiSettings) => {\r\n return {\r\n dates: calendar.dates.slice(0, 7),\r\n view: calendar.view,\r\n calendarWeekColumnHeader: UiSettings.calendarWeekColumnHeader,\r\n shortDateFormat: UiSettings.shortDateFormat,\r\n showRelativeDates: UiSettings.showRelativeDates\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(DaysOfWeek);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport SelectedMenuItem from './SelectedMenuItem';\r\n\r\nfunction ViewMenuItem(props) {\r\n const {\r\n name,\r\n selectedView,\r\n ...otherProps\r\n } = props;\r\n\r\n const isSelected = name === selectedView;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nViewMenuItem.propTypes = {\r\n name: PropTypes.string,\r\n selectedView: PropTypes.string.isRequired,\r\n children: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ViewMenuItem;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport * as calendarViews from 'Calendar/calendarViews';\r\nimport Button from 'Components/Link/Button';\r\nimport titleCase from 'Utilities/String/titleCase';\r\n// import styles from './CalendarHeaderViewButton.css';\r\n\r\nclass CalendarHeaderViewButton extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n this.props.onPress(this.props.view);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n view,\r\n selectedView,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {titleCase(view)}\r\n \r\n );\r\n }\r\n}\r\n\r\nCalendarHeaderViewButton.propTypes = {\r\n view: PropTypes.oneOf(calendarViews.all).isRequired,\r\n selectedView: PropTypes.oneOf(calendarViews.all).isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CalendarHeaderViewButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"CalendarHeader-header-WC6Sy\",\"navigationButtons\":\"CalendarHeader-navigationButtons-T91lU\",\"todayButton\":\"CalendarHeader-todayButton-DLzYr Button-button-paJ9a Link-link-RInnp\",\"titleDesktop\":\"CalendarHeader-titleDesktop-qugpW\",\"titleMobile\":\"CalendarHeader-titleMobile-IZBwa\",\"viewButtonsContainer\":\"CalendarHeader-viewButtonsContainer-M0Wmk\",\"viewMenu\":\"CalendarHeader-viewMenu-Vn3qz Menu-menu-Uz3_0\",\"loading\":\"CalendarHeader-loading-krtud LoadingIndicator-loading-DWfav\"};","import moment from 'moment';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport * as calendarViews from 'Calendar/calendarViews';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuButton from 'Components/Menu/MenuButton';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport ViewMenuItem from 'Components/Menu/ViewMenuItem';\r\nimport { align, icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport CalendarHeaderViewButton from './CalendarHeaderViewButton';\r\nimport styles from './CalendarHeader.css';\r\n\r\nfunction getTitle(time, start, end, view, longDateFormat) {\r\n const timeMoment = moment(time);\r\n const startMoment = moment(start);\r\n const endMoment = moment(end);\r\n\r\n if (view === 'day') {\r\n return timeMoment.format(longDateFormat);\r\n } else if (view === 'month') {\r\n return timeMoment.format('MMMM YYYY');\r\n } else if (view === 'agenda') {\r\n return `Agenda: ${startMoment.format('MMM D')} - ${endMoment.format('MMM D')}`;\r\n }\r\n\r\n let startFormat = 'MMM D YYYY';\r\n let endFormat = 'MMM D YYYY';\r\n\r\n if (startMoment.isSame(endMoment, 'month')) {\r\n startFormat = 'MMM D';\r\n endFormat = 'D YYYY';\r\n } else if (startMoment.isSame(endMoment, 'year')) {\r\n startFormat = 'MMM D';\r\n endFormat = 'MMM D YYYY';\r\n }\r\n\r\n return `${startMoment.format(startFormat)} \\u2014 ${endMoment.format(endFormat)}`;\r\n}\r\n\r\n// TODO Convert to a stateful Component so we can track view internally when changed\r\n\r\nclass CalendarHeader extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n view: props.view\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const view = this.props.view;\r\n\r\n if (prevProps.view !== view) {\r\n this.setState({ view });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onViewChange = (view) => {\r\n this.setState({ view }, () => {\r\n this.props.onViewChange(view);\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n time,\r\n start,\r\n end,\r\n longDateFormat,\r\n isSmallScreen,\r\n collapseViewButtons,\r\n onTodayPress,\r\n onPreviousPress,\r\n onNextPress\r\n } = this.props;\r\n\r\n const view = this.state.view;\r\n\r\n const title = getTitle(time, start, end, view, longDateFormat);\r\n\r\n return (\r\n
\r\n {\r\n isSmallScreen &&\r\n
\r\n {title}\r\n
\r\n }\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {translate('Today')}\r\n \r\n
\r\n\r\n {\r\n !isSmallScreen &&\r\n
\r\n {title}\r\n
\r\n }\r\n\r\n
\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n collapseViewButtons ?\r\n \r\n \r\n \r\n \r\n\r\n \r\n {\r\n isSmallScreen ?\r\n null :\r\n \r\n {translate('Month')}\r\n \r\n }\r\n\r\n \r\n {translate('Week')}\r\n \r\n\r\n \r\n {translate('Forecast')}\r\n \r\n\r\n \r\n {translate('Day')}\r\n \r\n\r\n \r\n {translate('Agenda')}\r\n \r\n \r\n :\r\n\r\n
\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n }\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nCalendarHeader.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n time: PropTypes.string.isRequired,\r\n start: PropTypes.string.isRequired,\r\n end: PropTypes.string.isRequired,\r\n view: PropTypes.oneOf(calendarViews.all).isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n collapseViewButtons: PropTypes.bool.isRequired,\r\n longDateFormat: PropTypes.string.isRequired,\r\n onViewChange: PropTypes.func.isRequired,\r\n onTodayPress: PropTypes.func.isRequired,\r\n onPreviousPress: PropTypes.func.isRequired,\r\n onNextPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CalendarHeader;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { gotoCalendarNextRange, gotoCalendarPreviousRange, gotoCalendarToday, setCalendarView } from 'Store/Actions/calendarActions';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport CalendarHeader from './CalendarHeader';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar,\r\n createDimensionsSelector(),\r\n createUISettingsSelector(),\r\n (calendar, dimensions, uiSettings) => {\r\n return {\r\n isFetching: calendar.isFetching,\r\n view: calendar.view,\r\n time: calendar.time,\r\n start: calendar.start,\r\n end: calendar.end,\r\n isSmallScreen: dimensions.isSmallScreen,\r\n collapseViewButtons: dimensions.isLargeScreen,\r\n longDateFormat: uiSettings.longDateFormat\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setCalendarView,\r\n gotoCalendarToday,\r\n gotoCalendarPreviousRange,\r\n gotoCalendarNextRange\r\n};\r\n\r\nclass CalendarHeaderConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onViewChange = (view) => {\r\n this.props.setCalendarView({ view });\r\n };\r\n\r\n onTodayPress = () => {\r\n this.props.gotoCalendarToday();\r\n };\r\n\r\n onPreviousPress = () => {\r\n this.props.gotoCalendarPreviousRange();\r\n };\r\n\r\n onNextPress = () => {\r\n this.props.gotoCalendarNextRange();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCalendarHeaderConnector.propTypes = {\r\n setCalendarView: PropTypes.func.isRequired,\r\n gotoCalendarToday: PropTypes.func.isRequired,\r\n gotoCalendarPreviousRange: PropTypes.func.isRequired,\r\n gotoCalendarNextRange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CalendarHeaderConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"calendar\":\"Calendar-calendar-JZlK7\",\"calendarContent\":\"Calendar-calendarContent-r6xna\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AgendaConnector from './Agenda/AgendaConnector';\r\nimport * as calendarViews from './calendarViews';\r\nimport CalendarDaysConnector from './Day/CalendarDaysConnector';\r\nimport DaysOfWeekConnector from './Day/DaysOfWeekConnector';\r\nimport CalendarHeaderConnector from './Header/CalendarHeaderConnector';\r\nimport styles from './Calendar.css';\r\n\r\nclass Calendar extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n view\r\n } = this.props;\r\n\r\n return (\r\n
\r\n {\r\n isFetching && !isPopulated &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n {translate('CalendarLoadError')}\r\n }\r\n\r\n {\r\n !error && isPopulated && view === calendarViews.AGENDA &&\r\n
\r\n \r\n \r\n
\r\n }\r\n\r\n {\r\n !error && isPopulated && view !== calendarViews.AGENDA &&\r\n
\r\n \r\n \r\n \r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nCalendar.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n view: PropTypes.string.isRequired\r\n};\r\n\r\nexport default Calendar;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport * as calendarActions from 'Store/Actions/calendarActions';\r\nimport { clearMovieFiles, fetchMovieFiles } from 'Store/Actions/movieFileActions';\r\nimport { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport hasDifferentItems from 'Utilities/Object/hasDifferentItems';\r\nimport selectUniqueIds from 'Utilities/Object/selectUniqueIds';\r\nimport { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';\r\nimport Calendar from './Calendar';\r\n\r\nconst UPDATE_DELAY = 3600000; // 1 hour\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar,\r\n (state) => state.settings.ui.item.firstDayOfWeek,\r\n createCommandExecutingSelector(commandNames.REFRESH_MOVIE),\r\n (calendar, firstDayOfWeek, isRefreshingMovie) => {\r\n return {\r\n ...calendar,\r\n isRefreshingMovie,\r\n firstDayOfWeek\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ...calendarActions,\r\n fetchMovieFiles,\r\n clearMovieFiles,\r\n fetchQueueDetails,\r\n clearQueueDetails\r\n};\r\n\r\nclass CalendarConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.updateTimeoutId = null;\r\n }\r\n\r\n componentDidMount() {\r\n const {\r\n useCurrentPage,\r\n fetchCalendar,\r\n gotoCalendarToday\r\n } = this.props;\r\n\r\n registerPagePopulator(this.repopulate, ['movieFileUpdated', 'movieFileDeleted']);\r\n\r\n if (useCurrentPage) {\r\n fetchCalendar();\r\n } else {\r\n gotoCalendarToday();\r\n }\r\n\r\n this.scheduleUpdate();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n items,\r\n time,\r\n view,\r\n isRefreshingMovie,\r\n firstDayOfWeek\r\n } = this.props;\r\n\r\n if (hasDifferentItems(prevProps.items, items)) {\r\n const movieFileIds = selectUniqueIds(items, 'movieFileId');\r\n\r\n if (movieFileIds.length) {\r\n this.props.fetchMovieFiles({ movieFileIds });\r\n }\r\n\r\n if (items.length) {\r\n this.props.fetchQueueDetails();\r\n }\r\n }\r\n\r\n if (prevProps.time !== time) {\r\n this.scheduleUpdate();\r\n }\r\n\r\n if (prevProps.firstDayOfWeek !== firstDayOfWeek) {\r\n this.props.fetchCalendar({ time, view });\r\n }\r\n\r\n if (prevProps.isRefreshingMovie && !isRefreshingMovie) {\r\n this.props.fetchCalendar({ time, view });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n unregisterPagePopulator(this.repopulate);\r\n this.props.clearCalendar();\r\n this.props.clearQueueDetails();\r\n this.props.clearMovieFiles();\r\n this.clearUpdateTimeout();\r\n }\r\n\r\n //\r\n // Control\r\n\r\n repopulate = () => {\r\n const {\r\n time,\r\n view\r\n } = this.props;\r\n\r\n this.props.fetchQueueDetails({ time, view });\r\n this.props.fetchCalendar({ time, view });\r\n };\r\n\r\n scheduleUpdate = () => {\r\n this.clearUpdateTimeout();\r\n\r\n this.updateTimeoutId = setTimeout(this.updateCalendar, UPDATE_DELAY);\r\n };\r\n\r\n clearUpdateTimeout = () => {\r\n if (this.updateTimeoutId) {\r\n clearTimeout(this.updateTimeoutId);\r\n }\r\n };\r\n\r\n updateCalendar = () => {\r\n this.props.gotoCalendarToday();\r\n this.scheduleUpdate();\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onCalendarViewChange = (view) => {\r\n this.props.setCalendarView({ view });\r\n };\r\n\r\n onTodayPress = () => {\r\n this.props.gotoCalendarToday();\r\n };\r\n\r\n onPreviousPress = () => {\r\n this.props.gotoCalendarPreviousRange();\r\n };\r\n\r\n onNextPress = () => {\r\n this.props.gotoCalendarNextRange();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCalendarConnector.propTypes = {\r\n useCurrentPage: PropTypes.bool.isRequired,\r\n time: PropTypes.string,\r\n view: PropTypes.string.isRequired,\r\n firstDayOfWeek: PropTypes.number.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isRefreshingMovie: PropTypes.bool.isRequired,\r\n setCalendarView: PropTypes.func.isRequired,\r\n gotoCalendarToday: PropTypes.func.isRequired,\r\n gotoCalendarPreviousRange: PropTypes.func.isRequired,\r\n gotoCalendarNextRange: PropTypes.func.isRequired,\r\n clearCalendar: PropTypes.func.isRequired,\r\n fetchCalendar: PropTypes.func.isRequired,\r\n fetchMovieFiles: PropTypes.func.isRequired,\r\n clearMovieFiles: PropTypes.func.isRequired,\r\n fetchQueueDetails: PropTypes.func.isRequired,\r\n clearQueueDetails: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CalendarConnector);\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FilterModal from 'Components/Filter/FilterModal';\r\nimport { setCalendarFilter } from 'Store/Actions/calendarActions';\r\n\r\nfunction createCalendarSelector() {\r\n return createSelector(\r\n (state: AppState) => state.calendar.items,\r\n (calendar) => {\r\n return calendar;\r\n }\r\n );\r\n}\r\n\r\nfunction createFilterBuilderPropsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.calendar.filterBuilderProps,\r\n (filterBuilderProps) => {\r\n return filterBuilderProps;\r\n }\r\n );\r\n}\r\n\r\ninterface CalendarFilterModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nexport default function CalendarFilterModal(props: CalendarFilterModalProps) {\r\n const sectionItems = useSelector(createCalendarSelector());\r\n const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());\r\n const customFilterType = 'calendar';\r\n\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSetFilter = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setCalendarFilter(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputButton from 'Components/Form/FormInputButton';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport ClipboardButton from 'Components/Link/ClipboardButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { icons, inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction getUrls(state) {\r\n const {\r\n unmonitored,\r\n asAllDay,\r\n tags\r\n } = state;\r\n\r\n let icalUrl = `${window.location.host}${window.Radarr.urlBase}/feed/v3/calendar/Radarr.ics?`;\r\n\r\n if (unmonitored) {\r\n icalUrl += 'unmonitored=true&';\r\n }\r\n\r\n if (asAllDay) {\r\n icalUrl += 'asAllDay=true&';\r\n }\r\n\r\n if (tags.length) {\r\n icalUrl += `tags=${tags.toString()}&`;\r\n }\r\n\r\n icalUrl += `apikey=${encodeURIComponent(window.Radarr.apiKey)}`;\r\n\r\n const iCalHttpUrl = `${window.location.protocol}//${icalUrl}`;\r\n const iCalWebCalUrl = `webcal://${icalUrl}`;\r\n\r\n return {\r\n iCalHttpUrl,\r\n iCalWebCalUrl\r\n };\r\n}\r\n\r\nclass CalendarLinkModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n const defaultState = {\r\n unmonitored: false,\r\n asAllDay: false,\r\n tags: []\r\n };\r\n\r\n const urls = getUrls(defaultState);\r\n\r\n this.state = {\r\n ...defaultState,\r\n ...urls\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n const state = {\r\n ...this.state,\r\n [name]: value\r\n };\r\n\r\n const urls = getUrls(state);\r\n\r\n this.setState({\r\n [name]: value,\r\n ...urls\r\n });\r\n };\r\n\r\n onLinkFocus = (event) => {\r\n event.target.select();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n unmonitored,\r\n asAllDay,\r\n tags,\r\n iCalHttpUrl,\r\n iCalWebCalUrl\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {translate('CalendarFeed')}\r\n \r\n\r\n \r\n
\r\n \r\n {translate('IncludeUnmonitored')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ICalShowAsAllDayEvents')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ICalFeed')}\r\n\r\n ,\r\n\r\n \r\n \r\n \r\n ]}\r\n onChange={this.onInputChange}\r\n onFocus={this.onLinkFocus}\r\n />\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nCalendarLinkModalContent.propTypes = {\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CalendarLinkModalContent;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport CalendarLinkModalContent from './CalendarLinkModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createTagsSelector(),\r\n (tagList) => {\r\n return {\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(CalendarLinkModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport CalendarLinkModalContentConnector from './CalendarLinkModalContentConnector';\r\n\r\nfunction CalendarLinkModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nCalendarLinkModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CalendarLinkModal;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport styles from './LegendIconItem.css';\r\n\r\nfunction LegendIconItem(props) {\r\n const {\r\n name,\r\n fullColorEvents,\r\n icon,\r\n kind,\r\n tooltip\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n\r\n {name}\r\n \r\n );\r\n}\r\n\r\nLegendIconItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n fullColorEvents: PropTypes.bool.isRequired,\r\n icon: PropTypes.object.isRequired,\r\n kind: PropTypes.string.isRequired,\r\n tooltip: PropTypes.string.isRequired\r\n};\r\n\r\nexport default LegendIconItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"legendIconItem\":\"LegendIconItem-legendIconItem-HRUQm\",\"icon\":\"LegendIconItem-icon-GfrY5\"};","// extracted by mini-css-extract-plugin\nexport default {\"legendItem\":\"LegendItem-legendItem-MGaWB\",\"downloaded\":\"LegendItem-downloaded-PAFUG CalendarEvent-downloaded-aVyLe\",\"queue\":\"LegendItem-queue-JlvVZ CalendarEvent-queue-tm1SZ\",\"unmonitored\":\"LegendItem-unmonitored-kMf3H CalendarEvent-unmonitored-vL9TJ\",\"missingUnmonitored\":\"LegendItem-missingUnmonitored-E291Z CalendarEvent-missingUnmonitored-bCDJL\",\"missingMonitored\":\"LegendItem-missingMonitored-x0H_e CalendarEvent-missingMonitored-Jnllz\",\"continuing\":\"LegendItem-continuing-Jwnl7 CalendarEvent-continuing-zQZbf\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './LegendItem.css';\r\n\r\nfunction LegendItem(props) {\r\n const {\r\n name,\r\n status,\r\n isAgendaView,\r\n fullColorEvents,\r\n colorImpairedMode\r\n } = props;\r\n\r\n return (\r\n \r\n {name}\r\n \r\n );\r\n}\r\n\r\nLegendItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n status: PropTypes.string.isRequired,\r\n isAgendaView: PropTypes.bool.isRequired,\r\n fullColorEvents: PropTypes.bool.isRequired,\r\n colorImpairedMode: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default LegendItem;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport Legend from './Legend';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar.options,\r\n (state) => state.calendar.view,\r\n createUISettingsSelector(),\r\n (calendarOptions, view, uiSettings) => {\r\n return {\r\n ...calendarOptions,\r\n view,\r\n colorImpairedMode: uiSettings.enableColorImpairedMode\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(Legend);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport LegendIconItem from './LegendIconItem';\r\nimport LegendItem from './LegendItem';\r\nimport styles from './Legend.css';\r\n\r\nfunction Legend(props) {\r\n const {\r\n view,\r\n showCutoffUnmetIcon,\r\n fullColorEvents,\r\n colorImpairedMode\r\n } = props;\r\n\r\n const iconsToShow = [];\r\n const isAgendaView = view === 'agenda';\r\n\r\n if (showCutoffUnmetIcon) {\r\n iconsToShow.push(\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n {\r\n iconsToShow.length > 0 &&\r\n
\r\n {iconsToShow[0]}\r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nLegend.propTypes = {\r\n view: PropTypes.string.isRequired,\r\n showCutoffUnmetIcon: PropTypes.bool.isRequired,\r\n fullColorEvents: PropTypes.bool.isRequired,\r\n colorImpairedMode: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default Legend;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"legend\":\"Legend-legend-wnxxq\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './AdvancedSettingsButton.css';\r\n\r\nfunction AdvancedSettingsButton(props) {\r\n const {\r\n advancedSettings,\r\n onAdvancedSettingsPress,\r\n showLabel\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n {\r\n showLabel ?\r\n
\r\n
\r\n {advancedSettings ? translate('HideAdvanced') : translate('ShowAdvanced')}\r\n
\r\n
:\r\n null\r\n }\r\n \r\n );\r\n}\r\n\r\nAdvancedSettingsButton.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n onAdvancedSettingsPress: PropTypes.func.isRequired,\r\n showLabel: PropTypes.bool.isRequired\r\n};\r\n\r\nAdvancedSettingsButton.defaultProps = {\r\n showLabel: true\r\n};\r\n\r\nexport default AdvancedSettingsButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"AdvancedSettingsButton-button-CzL_3 PageToolbarButton-toolbarButton-j8a_b Link-link-RInnp\",\"labelContainer\":\"AdvancedSettingsButton-labelContainer-Z90Zi PageToolbarButton-labelContainer-QhTz_\",\"label\":\"AdvancedSettingsButton-label-s3_aG PageToolbarButton-label-QIVQh\",\"indicatorContainer\":\"AdvancedSettingsButton-indicatorContainer-OGWLx\",\"indicatorBackground\":\"AdvancedSettingsButton-indicatorBackground-BAO1K\",\"enabled\":\"AdvancedSettingsButton-enabled-iam2W\",\"disabled\":\"AdvancedSettingsButton-disabled-QGRYt\"};","import PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport keyboardShortcuts from 'Components/keyboardShortcuts';\r\nimport Button from 'Components/Link/Button';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction PendingChangesModal(props) {\r\n const {\r\n isOpen,\r\n onConfirm,\r\n onCancel,\r\n bindShortcut,\r\n unbindShortcut\r\n } = props;\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n bindShortcut('enter', onConfirm);\r\n\r\n return () => unbindShortcut('enter', onConfirm);\r\n }\r\n }, [bindShortcut, unbindShortcut, isOpen, onConfirm]);\r\n\r\n return (\r\n \r\n \r\n {translate('UnsavedChanges')}\r\n\r\n \r\n {translate('PendingChangesMessage')}\r\n \r\n\r\n \r\n \r\n {translate('PendingChangesStayReview')}\r\n \r\n\r\n \r\n {translate('PendingChangesDiscardChanges')}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nPendingChangesModal.propTypes = {\r\n className: PropTypes.string,\r\n isOpen: PropTypes.bool.isRequired,\r\n kind: PropTypes.oneOf(kinds.all),\r\n onConfirm: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n bindShortcut: PropTypes.func.isRequired,\r\n unbindShortcut: PropTypes.func.isRequired\r\n};\r\n\r\nPendingChangesModal.defaultProps = {\r\n kind: kinds.PRIMARY\r\n};\r\n\r\nexport default keyboardShortcuts(PendingChangesModal);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport keyboardShortcuts, { shortcuts } from 'Components/keyboardShortcuts';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AdvancedSettingsButton from './AdvancedSettingsButton';\r\nimport PendingChangesModal from './PendingChangesModal';\r\n\r\nclass SettingsToolbar extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.bindShortcut(shortcuts.SAVE_SETTINGS.key, this.saveSettings, { isGlobal: true });\r\n }\r\n\r\n //\r\n // Control\r\n\r\n saveSettings = (event) => {\r\n event.preventDefault();\r\n\r\n const {\r\n hasPendingChanges,\r\n onSavePress\r\n } = this.props;\r\n\r\n if (hasPendingChanges) {\r\n onSavePress();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n advancedSettings,\r\n showSave,\r\n isSaving,\r\n hasPendingChanges,\r\n hasPendingLocation,\r\n additionalButtons,\r\n onSavePress,\r\n onConfirmNavigation,\r\n onCancelNavigation,\r\n onAdvancedSettingsPress\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n {\r\n showSave &&\r\n \r\n }\r\n\r\n {\r\n additionalButtons\r\n }\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nSettingsToolbar.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n showSave: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool,\r\n hasPendingLocation: PropTypes.bool.isRequired,\r\n hasPendingChanges: PropTypes.bool,\r\n additionalButtons: PropTypes.node,\r\n onSavePress: PropTypes.func,\r\n onAdvancedSettingsPress: PropTypes.func.isRequired,\r\n onConfirmNavigation: PropTypes.func.isRequired,\r\n onCancelNavigation: PropTypes.func.isRequired,\r\n bindShortcut: PropTypes.func.isRequired\r\n};\r\n\r\nSettingsToolbar.defaultProps = {\r\n showSave: true\r\n};\r\n\r\nexport default keyboardShortcuts(SettingsToolbar);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { toggleAdvancedSettings } from 'Store/Actions/settingsActions';\r\nimport SettingsToolbar from './SettingsToolbar';\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n advancedSettings: state.settings.advancedSettings\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n toggleAdvancedSettings\r\n};\r\n\r\nclass SettingsToolbarConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n nextLocation: null,\r\n nextLocationAction: null,\r\n confirmed: false\r\n };\r\n\r\n this._unblock = null;\r\n }\r\n\r\n componentDidMount() {\r\n this._unblock = this.props.history.block(this.routerWillLeave);\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._unblock) {\r\n this._unblock();\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n routerWillLeave = (nextLocation, nextLocationAction) => {\r\n if (this.state.confirmed) {\r\n this.setState({\r\n nextLocation: null,\r\n nextLocationAction: null,\r\n confirmed: false\r\n });\r\n\r\n return true;\r\n }\r\n\r\n if (this.props.hasPendingChanges ) {\r\n this.setState({\r\n nextLocation,\r\n nextLocationAction\r\n });\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onAdvancedSettingsPress = () => {\r\n this.props.toggleAdvancedSettings();\r\n };\r\n\r\n onConfirmNavigation = () => {\r\n const {\r\n nextLocation,\r\n nextLocationAction\r\n } = this.state;\r\n\r\n const history = this.props.history;\r\n\r\n const path = `${nextLocation.pathname}${nextLocation.search}`;\r\n\r\n this.setState({\r\n confirmed: true\r\n }, () => {\r\n if (nextLocationAction === 'PUSH') {\r\n history.push(path);\r\n } else {\r\n // Unfortunately back and forward both use POP,\r\n // which means we don't actually know which direction\r\n // the user wanted to go, assuming back.\r\n\r\n history.goBack();\r\n }\r\n });\r\n };\r\n\r\n onCancelNavigation = () => {\r\n this.setState({\r\n nextLocation: null,\r\n nextLocationAction: null,\r\n confirmed: false\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const hasPendingLocation = this.state.nextLocation !== null;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nconst historyShape = {\r\n block: PropTypes.func.isRequired,\r\n goBack: PropTypes.func.isRequired,\r\n push: PropTypes.func.isRequired\r\n};\r\n\r\nSettingsToolbarConnector.propTypes = {\r\n showSave: PropTypes.bool,\r\n hasPendingChanges: PropTypes.bool.isRequired,\r\n history: PropTypes.shape(historyShape).isRequired,\r\n onSavePress: PropTypes.func,\r\n toggleAdvancedSettings: PropTypes.func.isRequired\r\n};\r\n\r\nSettingsToolbarConnector.defaultProps = {\r\n hasPendingChanges: false\r\n};\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(SettingsToolbarConnector));\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport themes from 'Styles/Themes';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nexport const firstDayOfWeekOptions = [\r\n {\r\n key: 0,\r\n get value() {\r\n return translate('Sunday');\r\n }\r\n },\r\n {\r\n key: 1,\r\n get value() {\r\n return translate('Monday');\r\n }\r\n }\r\n];\r\n\r\nexport const weekColumnOptions = [\r\n { key: 'ddd M/D', value: 'Tue 3/25', hint: 'ddd M/D' },\r\n { key: 'ddd MM/DD', value: 'Tue 03/25', hint: 'ddd MM/DD' },\r\n { key: 'ddd D/M', value: 'Tue 25/3', hint: 'ddd D/M' },\r\n { key: 'ddd DD/MM', value: 'Tue 25/03', hint: 'ddd DD/MM' }\r\n];\r\n\r\nconst shortDateFormatOptions = [\r\n { key: 'MMM D YYYY', value: 'Mar 25 2014', hint: 'MMM D YYYY' },\r\n { key: 'DD MMM YYYY', value: '25 Mar 2014', hint: 'DD MMM YYYY' },\r\n { key: 'MM/D/YYYY', value: '03/25/2014', hint: 'MM/D/YYYY' },\r\n { key: 'MM/DD/YYYY', value: '03/25/2014', hint: 'MM/DD/YYYY' },\r\n { key: 'DD/MM/YYYY', value: '25/03/2014', hint: 'DD/MM/YYYY' },\r\n { key: 'YYYY-MM-DD', value: '2014-03-25', hint: 'YYYY-MM-DD' }\r\n];\r\n\r\nconst longDateFormatOptions = [\r\n { key: 'dddd, MMMM D YYYY', value: 'Tuesday, March 25, 2014' },\r\n { key: 'dddd, D MMMM YYYY', value: 'Tuesday, 25 March, 2014' }\r\n];\r\n\r\nexport const timeFormatOptions = [\r\n { key: 'h(:mm)a', value: '5pm/5:30pm' },\r\n { key: 'HH:mm', value: '17:00/17:30' }\r\n];\r\n\r\nexport const movieRuntimeFormatOptions = [\r\n { key: 'hoursMinutes', value: '1h 15m' },\r\n { key: 'minutes', value: '75 mins' }\r\n];\r\n\r\nclass UISettings extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n error,\r\n settings,\r\n hasSettings,\r\n onInputChange,\r\n onSavePress,\r\n languages,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const themeOptions = Object.keys(themes)\r\n .map((theme) => ({ key: theme, value: titleCase(theme) }));\r\n\r\n const uiLanguages = languages.filter((item) => item.value !== 'Original');\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {\r\n isFetching ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n !isFetching && error ?\r\n \r\n {translate('UiSettingsLoadError')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n hasSettings && !isFetching && !error ?\r\n \r\n
\r\n \r\n {translate('FirstDayOfWeek')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('WeekColumnHeader')}\r\n\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n {translate('RuntimeFormat')}\r\n\r\n \r\n \r\n
\r\n\r\n \r\n \r\n {translate('ShortDateFormat')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('LongDateFormat')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('TimeFormat')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowRelativeDates')}\r\n \r\n \r\n \r\n\r\n \r\n \r\n {translate('Theme')}\r\n \r\n \r\n\r\n \r\n {translate('EnableColorImpairedMode')}\r\n \r\n \r\n \r\n\r\n
\r\n \r\n {translate('MovieInfoLanguage')}\r\n language.key === settings.movieInfoLanguage.value) ?\r\n settings.movieInfoLanguage.errors :\r\n [\r\n ...settings.movieInfoLanguage.errors,\r\n { message: translate('InvalidMovieInfoLanguageLanguage') }\r\n ]}\r\n />\r\n \r\n\r\n \r\n {translate('UiLanguage')}\r\n language.key === settings.uiLanguage.value) ?\r\n settings.uiLanguage.errors :\r\n [\r\n ...settings.uiLanguage.errors,\r\n { message: translate('InvalidUILanguage') }\r\n ]}\r\n />\r\n \r\n
\r\n :\r\n null\r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nUISettings.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n settings: PropTypes.object.isRequired,\r\n hasSettings: PropTypes.bool.isRequired,\r\n languages: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default UISettings;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport { firstDayOfWeekOptions, timeFormatOptions, weekColumnOptions } from 'Settings/UI/UISettings';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nclass CalendarOptionsModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n const {\r\n firstDayOfWeek,\r\n calendarWeekColumnHeader,\r\n timeFormat,\r\n enableColorImpairedMode,\r\n fullColorEvents\r\n } = props;\r\n\r\n this.state = {\r\n firstDayOfWeek,\r\n calendarWeekColumnHeader,\r\n timeFormat,\r\n enableColorImpairedMode,\r\n fullColorEvents\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n firstDayOfWeek,\r\n calendarWeekColumnHeader,\r\n timeFormat,\r\n enableColorImpairedMode\r\n } = this.props;\r\n\r\n if (\r\n prevProps.firstDayOfWeek !== firstDayOfWeek ||\r\n prevProps.calendarWeekColumnHeader !== calendarWeekColumnHeader ||\r\n prevProps.timeFormat !== timeFormat ||\r\n prevProps.enableColorImpairedMode !== enableColorImpairedMode\r\n ) {\r\n this.setState({\r\n firstDayOfWeek,\r\n calendarWeekColumnHeader,\r\n timeFormat,\r\n enableColorImpairedMode\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onOptionInputChange = ({ name, value }) => {\r\n const {\r\n dispatchSetCalendarOption\r\n } = this.props;\r\n\r\n dispatchSetCalendarOption({ [name]: value });\r\n };\r\n\r\n onGlobalInputChange = ({ name, value }) => {\r\n const {\r\n dispatchSaveUISettings\r\n } = this.props;\r\n\r\n const setting = { [name]: value };\r\n\r\n this.setState(setting, () => {\r\n dispatchSaveUISettings(setting);\r\n });\r\n };\r\n\r\n onLinkFocus = (event) => {\r\n event.target.select();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n showMovieInformation,\r\n showCutoffUnmetIcon,\r\n fullColorEvents,\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n firstDayOfWeek,\r\n calendarWeekColumnHeader,\r\n timeFormat,\r\n enableColorImpairedMode\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {translate('CalendarOptions')}\r\n \r\n\r\n \r\n
\r\n
\r\n \r\n {translate('ShowMovieInformation')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('IconForCutoffUnmet')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('FullColorEvents')}\r\n\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n {translate('FirstDayOfWeek')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('WeekColumnHeader')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('TimeFormat')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('EnableColorImpairedMode')}\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nCalendarOptionsModalContent.propTypes = {\r\n showMovieInformation: PropTypes.bool.isRequired,\r\n showCutoffUnmetIcon: PropTypes.bool.isRequired,\r\n firstDayOfWeek: PropTypes.number.isRequired,\r\n calendarWeekColumnHeader: PropTypes.string.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n enableColorImpairedMode: PropTypes.bool.isRequired,\r\n fullColorEvents: PropTypes.bool.isRequired,\r\n dispatchSetCalendarOption: PropTypes.func.isRequired,\r\n dispatchSaveUISettings: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CalendarOptionsModalContent;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { setCalendarOption } from 'Store/Actions/calendarActions';\r\nimport { saveUISettings } from 'Store/Actions/settingsActions';\r\nimport CalendarOptionsModalContent from './CalendarOptionsModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar.options,\r\n (state) => state.settings.ui.item,\r\n (options, uiSettings) => {\r\n return {\r\n ...options,\r\n ...uiSettings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSetCalendarOption: setCalendarOption,\r\n dispatchSaveUISettings: saveUISettings\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CalendarOptionsModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport CalendarOptionsModalContentConnector from './CalendarOptionsModalContentConnector';\r\n\r\nfunction CalendarOptionsModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nCalendarOptionsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CalendarOptionsModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Measure from 'Components/Measure';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport { align, icons } from 'Helpers/Props';\r\nimport NoMovie from 'Movie/NoMovie';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport CalendarConnector from './CalendarConnector';\r\nimport CalendarFilterModal from './CalendarFilterModal';\r\nimport CalendarLinkModal from './iCal/CalendarLinkModal';\r\nimport LegendConnector from './Legend/LegendConnector';\r\nimport CalendarOptionsModal from './Options/CalendarOptionsModal';\r\nimport styles from './CalendarPage.css';\r\n\r\nconst MINIMUM_DAY_WIDTH = 120;\r\n\r\nclass CalendarPage extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isCalendarLinkModalOpen: false,\r\n isOptionsModalOpen: false,\r\n width: 0\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = ({ width }) => {\r\n this.setState({ width });\r\n const days = Math.max(3, Math.min(7, Math.floor(width / MINIMUM_DAY_WIDTH)));\r\n\r\n this.props.onDaysCountChange(days);\r\n };\r\n\r\n onGetCalendarLinkPress = () => {\r\n this.setState({ isCalendarLinkModalOpen: true });\r\n };\r\n\r\n onGetCalendarLinkModalClose = () => {\r\n this.setState({ isCalendarLinkModalOpen: false });\r\n };\r\n\r\n onOptionsPress = () => {\r\n this.setState({ isOptionsModalOpen: true });\r\n };\r\n\r\n onOptionsModalClose = () => {\r\n this.setState({ isOptionsModalOpen: false });\r\n };\r\n\r\n onSearchMissingPress = () => {\r\n const {\r\n missingMovieIds,\r\n onSearchMissingPress\r\n } = this.props;\r\n\r\n onSearchMissingPress(missingMovieIds);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n selectedFilterKey,\r\n filters,\r\n hasMovie,\r\n movieError,\r\n movieIsFetching,\r\n movieIsPopulated,\r\n missingMovieIds,\r\n customFilters,\r\n isRssSyncExecuting,\r\n isSearchingForMissing,\r\n useCurrentPage,\r\n onRssSyncPress,\r\n onFilterSelect\r\n } = this.props;\r\n\r\n const {\r\n isCalendarLinkModalOpen,\r\n isOptionsModalOpen\r\n } = this.state;\r\n\r\n const isMeasured = this.state.width > 0;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {\r\n movieIsFetching && !movieIsPopulated &&\r\n \r\n }\r\n\r\n {\r\n movieError &&\r\n
\r\n {getErrorMessage(movieError, 'Failed to load movies from API')}\r\n
\r\n }\r\n\r\n {\r\n !movieError && movieIsPopulated && hasMovie &&\r\n \r\n {\r\n isMeasured ?\r\n :\r\n
\r\n }\r\n \r\n }\r\n\r\n {\r\n !movieError && movieIsPopulated && !hasMovie &&\r\n \r\n }\r\n\r\n {\r\n hasMovie && !movieError &&\r\n \r\n }\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nCalendarPage.propTypes = {\r\n selectedFilterKey: PropTypes.string.isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n hasMovie: PropTypes.bool.isRequired,\r\n movieError: PropTypes.object,\r\n movieIsFetching: PropTypes.bool.isRequired,\r\n movieIsPopulated: PropTypes.bool.isRequired,\r\n missingMovieIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isRssSyncExecuting: PropTypes.bool.isRequired,\r\n isSearchingForMissing: PropTypes.bool.isRequired,\r\n useCurrentPage: PropTypes.bool.isRequired,\r\n onSearchMissingPress: PropTypes.func.isRequired,\r\n onDaysCountChange: PropTypes.func.isRequired,\r\n onRssSyncPress: PropTypes.func.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CalendarPage;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"calendarPageBody\":\"CalendarPage-calendarPageBody-hbV__ PageContentBody-contentBody-Hetrs\",\"calendarInnerPageBody\":\"CalendarPage-calendarInnerPageBody-KgK5Y PageContentBody-innerContentBody-PtigL\",\"errorMessage\":\"CalendarPage-errorMessage-yBZTq\"};","import moment from 'moment';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport withCurrentPage from 'Components/withCurrentPage';\r\nimport { searchMissing, setCalendarDaysCount, setCalendarFilter } from 'Store/Actions/calendarActions';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { createCustomFiltersSelector } from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createCommandsSelector from 'Store/Selectors/createCommandsSelector';\r\nimport createMovieCountSelector from 'Store/Selectors/createMovieCountSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport { isCommandExecuting } from 'Utilities/Command';\r\nimport isBefore from 'Utilities/Date/isBefore';\r\nimport CalendarPage from './CalendarPage';\r\n\r\nfunction createMissingMovieIdsSelector() {\r\n return createSelector(\r\n (state) => state.calendar.start,\r\n (state) => state.calendar.end,\r\n (state) => state.calendar.items,\r\n (state) => state.queue.details.items,\r\n (start, end, movies, queueDetails) => {\r\n return movies.reduce((acc, movie) => {\r\n const inCinemas = movie.inCinemas;\r\n\r\n if (\r\n !movie.hasFile &&\r\n moment(inCinemas).isAfter(start) &&\r\n moment(inCinemas).isBefore(end) &&\r\n isBefore(movie.inCinemas) &&\r\n !queueDetails.some((details) => details.movieId === movie.id)\r\n ) {\r\n acc.push(movie.id);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n }\r\n );\r\n}\r\n\r\nfunction createIsSearchingSelector() {\r\n return createSelector(\r\n (state) => state.calendar.searchMissingCommandId,\r\n createCommandsSelector(),\r\n (searchMissingCommandId, commands) => {\r\n if (searchMissingCommandId == null) {\r\n return false;\r\n }\r\n\r\n return isCommandExecuting(commands.find((command) => {\r\n return command.id === searchMissingCommandId;\r\n }));\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.calendar.selectedFilterKey,\r\n (state) => state.calendar.filters,\r\n createCustomFiltersSelector('calendar'),\r\n createMovieCountSelector(),\r\n createUISettingsSelector(),\r\n createMissingMovieIdsSelector(),\r\n createCommandExecutingSelector(commandNames.RSS_SYNC),\r\n createIsSearchingSelector(),\r\n (\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n movieCount,\r\n uiSettings,\r\n missingMovieIds,\r\n isRssSyncExecuting,\r\n isSearchingForMissing\r\n ) => {\r\n return {\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n colorImpairedMode: uiSettings.enableColorImpairedMode,\r\n hasMovie: !!movieCount.count,\r\n movieError: movieCount.error,\r\n movieIsFetching: movieCount.isFetching,\r\n movieIsPopulated: movieCount.isPopulated,\r\n missingMovieIds,\r\n isRssSyncExecuting,\r\n isSearchingForMissing\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onRssSyncPress() {\r\n dispatch(executeCommand({\r\n name: commandNames.RSS_SYNC\r\n }));\r\n },\r\n\r\n onSearchMissingPress(movieIds) {\r\n dispatch(searchMissing({ movieIds }));\r\n },\r\n\r\n onDaysCountChange(dayCount) {\r\n dispatch(setCalendarDaysCount({ dayCount }));\r\n },\r\n\r\n onFilterSelect(selectedFilterKey) {\r\n dispatch(setCalendarFilter({ selectedFilterKey }));\r\n }\r\n };\r\n}\r\n\r\nexport default withCurrentPage(\r\n connect(createMapStateToProps, createMapDispatchToProps)(CalendarPage)\r\n);\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport createAllMoviesSelector from './createAllMoviesSelector';\r\n\r\nfunction createMovieCountSelector() {\r\n return createSelector(\r\n createAllMoviesSelector(),\r\n (state: AppState) => state.movies.error,\r\n (state: AppState) => state.movies.isFetching,\r\n (state: AppState) => state.movies.isPopulated,\r\n (movies, error, isFetching, isPopulated) => {\r\n return {\r\n count: movies.length,\r\n error,\r\n isFetching,\r\n isPopulated,\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createMovieCountSelector;\r\n","const scrollPositions: Record = {\r\n movieIndex: 0,\r\n discoverMovie: 0,\r\n movieCollections: 0,\r\n};\r\n\r\nexport default scrollPositions;\r\n","import React from 'react';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport scrollPositions from 'Store/scrollPositions';\r\n\r\ninterface WrappedComponentProps {\r\n initialScrollTop: number;\r\n}\r\n\r\ninterface ScrollPositionProps {\r\n history: RouteComponentProps['history'];\r\n location: RouteComponentProps['location'];\r\n match: RouteComponentProps['match'];\r\n}\r\n\r\nfunction withScrollPosition(\r\n WrappedComponent: React.FC,\r\n scrollPositionKey: string\r\n) {\r\n function ScrollPosition(props: ScrollPositionProps) {\r\n const { history } = props;\r\n\r\n const initialScrollTop =\r\n history.action === 'POP' ? scrollPositions[scrollPositionKey] : 0;\r\n\r\n return ;\r\n }\r\n\r\n return ScrollPosition;\r\n}\r\n\r\nexport default withScrollPosition;\r\n","import { createSelector, createSelectorCreator, defaultMemoize } from 'reselect';\r\nimport hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';\r\nimport createClientSideCollectionSelector from './createClientSideCollectionSelector';\r\n\r\nfunction createUnoptimizedSelector(uiSection) {\r\n return createSelector(\r\n createClientSideCollectionSelector('movieCollections', uiSection),\r\n (movies) => {\r\n const items = movies.items.map((s) => {\r\n const {\r\n id,\r\n sortTitle\r\n } = s;\r\n\r\n return {\r\n id,\r\n sortTitle\r\n };\r\n });\r\n\r\n return {\r\n ...movies,\r\n items\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction movieListEqual(a, b) {\r\n return hasDifferentItemsOrOrder(a, b);\r\n}\r\n\r\nconst createMovieEqualSelector = createSelectorCreator(\r\n defaultMemoize,\r\n movieListEqual\r\n);\r\n\r\nfunction createCollectionClientSideCollectionItemsSelector(uiSection) {\r\n return createMovieEqualSelector(\r\n createUnoptimizedSelector(uiSection),\r\n (movies) => movies\r\n );\r\n}\r\n\r\nexport default createCollectionClientSideCollectionItemsSelector;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport styles from './PageJumpBarItem.css';\r\n\r\nclass PageJumpBarItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n label,\r\n onItemPress\r\n } = this.props;\r\n\r\n onItemPress(label);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n {this.props.label.toUpperCase()}\r\n \r\n );\r\n }\r\n}\r\n\r\nPageJumpBarItem.propTypes = {\r\n label: PropTypes.string.isRequired,\r\n onItemPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default PageJumpBarItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"jumpBarItem\":\"PageJumpBarItem-jumpBarItem-Yz0Ev\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Measure from 'Components/Measure';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport PageJumpBarItem from './PageJumpBarItem';\r\nimport styles from './PageJumpBar.css';\r\n\r\nconst ITEM_HEIGHT = parseInt(dimensions.jumpBarItemHeight);\r\n\r\nclass PageJumpBar extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n height: 0,\r\n visibleItems: props.items.order\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.computeVisibleItems();\r\n }\r\n\r\n shouldComponentUpdate(nextProps, nextState) {\r\n return (\r\n nextProps.items !== this.props.items ||\r\n nextState.height !== this.state.height ||\r\n nextState.visibleItems !== this.state.visibleItems\r\n );\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (\r\n prevProps.items !== this.props.items ||\r\n prevState.height !== this.state.height\r\n ) {\r\n this.computeVisibleItems();\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n computeVisibleItems() {\r\n const {\r\n items,\r\n minimumItems\r\n } = this.props;\r\n\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const {\r\n characters,\r\n order\r\n } = items;\r\n\r\n const height = this.state.height;\r\n const maximumItems = Math.floor(height / ITEM_HEIGHT);\r\n const diff = order.length - maximumItems;\r\n\r\n if (diff < 0) {\r\n this.setState({ visibleItems: order });\r\n return;\r\n }\r\n\r\n if (order.length < minimumItems) {\r\n this.setState({ visibleItems: order });\r\n return;\r\n }\r\n\r\n // get first, last, and most common in between to make up numbers\r\n const visibleItems = [order[0]];\r\n\r\n const sorted = order.slice(1, -1).map((x) => characters[x]).sort((a, b) => b - a);\r\n const minCount = sorted[maximumItems - 3];\r\n const greater = sorted.reduce((acc, value) => acc + (value > minCount ? 1 : 0), 0);\r\n let minAllowed = maximumItems - 2 - greater;\r\n\r\n for (let i = 1; i < order.length - 1; i++) {\r\n if (characters[order[i]] > minCount) {\r\n visibleItems.push(order[i]);\r\n } else if (characters[order[i]] === minCount && minAllowed > 0) {\r\n visibleItems.push(order[i]);\r\n minAllowed--;\r\n }\r\n }\r\n\r\n visibleItems.push(order[order.length - 1]);\r\n\r\n this.setState({ visibleItems });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = ({ height }) => {\r\n if (height > 0) {\r\n this.setState({ height });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n minimumItems,\r\n onItemPress\r\n } = this.props;\r\n\r\n const {\r\n visibleItems\r\n } = this.state;\r\n\r\n if (!visibleItems.length || visibleItems.length < minimumItems) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n visibleItems.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nPageJumpBar.propTypes = {\r\n items: PropTypes.object.isRequired,\r\n minimumItems: PropTypes.number.isRequired,\r\n onItemPress: PropTypes.func.isRequired\r\n};\r\n\r\nPageJumpBar.defaultProps = {\r\n minimumItems: 5\r\n};\r\n\r\nexport default PageJumpBar;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"jumpBar\":\"PageJumpBar-jumpBar-NBpLl\",\"jumpBarItems\":\"PageJumpBar-jumpBarItems-fCD8H\"};","// extracted by mini-css-extract-plugin\nexport default {\"pageContentBodyWrapper\":\"MovieIndex-pageContentBodyWrapper-kZg9z\",\"errorMessage\":\"MovieIndex-errorMessage-BMksU\",\"contentBody\":\"MovieIndex-contentBody-aTJHY PageContentBody-contentBody-Hetrs\",\"postersInnerContentBody\":\"MovieIndex-postersInnerContentBody-Y0Hw2 PageContentBody-innerContentBody-PtigL\",\"tableInnerContentBody\":\"MovieIndex-tableInnerContentBody-_P8Sa PageContentBody-innerContentBody-PtigL\",\"contentBodyContainer\":\"MovieIndex-contentBodyContainer-lgyX0\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport SpinnerIcon from 'Components/SpinnerIcon';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './CollectionFooterLabel.css';\r\n\r\nfunction CollectionFooterLabel(props) {\r\n const {\r\n className,\r\n label,\r\n isSaving\r\n } = props;\r\n\r\n return (\r\n
\r\n {label}\r\n\r\n {\r\n isSaving &&\r\n \r\n }\r\n
\r\n );\r\n}\r\n\r\nCollectionFooterLabel.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n isSaving: PropTypes.bool.isRequired\r\n};\r\n\r\nCollectionFooterLabel.defaultProps = {\r\n className: styles.label\r\n};\r\n\r\nexport default CollectionFooterLabel;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"label\":\"CollectionFooterLabel-label-c5hyu\",\"savingIcon\":\"CollectionFooterLabel-savingIcon-HvL8f\"};","// extracted by mini-css-extract-plugin\nexport default {\"inputContainer\":\"CollectionFooter-inputContainer-nVAnj\",\"buttonContainer\":\"CollectionFooter-buttonContainer-M8mFY\",\"buttonContainerContent\":\"CollectionFooter-buttonContainerContent-c1518\",\"buttons\":\"CollectionFooter-buttons-e_eL9\",\"addSelectedButton\":\"CollectionFooter-addSelectedButton-ALv8N SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\",\"excludeSelectedButton\":\"CollectionFooter-excludeSelectedButton-GLHS3 SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\",\"selectedMovieLabel\":\"CollectionFooter-selectedMovieLabel-gyP1E\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport AvailabilitySelectInput from 'Components/Form/AvailabilitySelectInput';\r\nimport QualityProfileSelectInputConnector from 'Components/Form/QualityProfileSelectInputConnector';\r\nimport RootFolderSelectInputConnector from 'Components/Form/RootFolderSelectInputConnector';\r\nimport SelectInput from 'Components/Form/SelectInput';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport PageContentFooter from 'Components/Page/PageContentFooter';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport CollectionFooterLabel from './CollectionFooterLabel';\r\nimport styles from './CollectionFooter.css';\r\n\r\nconst NO_CHANGE = 'noChange';\r\n\r\nconst monitoredOptions = [\r\n {\r\n key: NO_CHANGE,\r\n get value() {\r\n return translate('NoChange');\r\n },\r\n isDisabled: true\r\n },\r\n {\r\n key: 'monitored',\r\n get value() {\r\n return translate('Monitored');\r\n }\r\n },\r\n {\r\n key: 'unmonitored',\r\n get value() {\r\n return translate('Unmonitored');\r\n }\r\n }\r\n];\r\n\r\nconst searchOnAddOptions = [\r\n {\r\n key: NO_CHANGE,\r\n get value() {\r\n return translate('NoChange');\r\n },\r\n isDisabled: true\r\n },\r\n {\r\n key: 'yes',\r\n get value() {\r\n return translate('Yes');\r\n }\r\n },\r\n {\r\n key: 'no',\r\n get value() {\r\n return translate('No');\r\n }\r\n }\r\n];\r\n\r\nclass CollectionFooter extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n monitored: NO_CHANGE,\r\n monitor: NO_CHANGE,\r\n qualityProfileId: NO_CHANGE,\r\n minimumAvailability: NO_CHANGE,\r\n rootFolderPath: NO_CHANGE,\r\n searchOnAdd: NO_CHANGE\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n isSaving,\r\n saveError\r\n } = this.props;\r\n\r\n const newState = {};\r\n if (prevProps.isSaving && !isSaving && !saveError) {\r\n this.setState({\r\n monitored: NO_CHANGE,\r\n monitor: NO_CHANGE,\r\n qualityProfileId: NO_CHANGE,\r\n minimumAvailability: NO_CHANGE,\r\n rootFolderPath: NO_CHANGE,\r\n searchOnAdd: NO_CHANGE\r\n });\r\n }\r\n\r\n if (!_.isEmpty(newState)) {\r\n this.setState(newState);\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.setState({ [name]: value });\r\n };\r\n\r\n onUpdateSelectedPress = () => {\r\n const {\r\n monitored,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n rootFolderPath,\r\n searchOnAdd\r\n } = this.state;\r\n\r\n const changes = {};\r\n\r\n if (monitored !== NO_CHANGE) {\r\n changes.monitored = monitored === 'monitored';\r\n }\r\n\r\n if (monitor !== NO_CHANGE) {\r\n changes.monitor = monitor;\r\n }\r\n\r\n if (qualityProfileId !== NO_CHANGE) {\r\n changes.qualityProfileId = qualityProfileId;\r\n }\r\n\r\n if (minimumAvailability !== NO_CHANGE) {\r\n changes.minimumAvailability = minimumAvailability;\r\n }\r\n\r\n if (rootFolderPath !== NO_CHANGE) {\r\n changes.rootFolderPath = rootFolderPath;\r\n }\r\n\r\n if (searchOnAdd !== NO_CHANGE) {\r\n changes.searchOnAdd = searchOnAdd === 'yes';\r\n }\r\n\r\n this.props.onUpdateSelectedPress(changes);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n selectedIds,\r\n isSaving\r\n } = this.props;\r\n\r\n const {\r\n monitored,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n rootFolderPath,\r\n searchOnAdd\r\n } = this.state;\r\n\r\n const selectedCount = selectedIds.length;\r\n\r\n return (\r\n \r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n\r\n
\r\n
\r\n \r\n {translate('UpdateSelected')}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nCollectionFooter.propTypes = {\r\n selectedIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n isAdding: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n onUpdateSelectedPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CollectionFooter;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport FilterModal from 'Components/Filter/FilterModal';\r\nimport { setMovieCollectionsFilter } from 'Store/Actions/movieCollectionActions';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.movieCollections.items,\r\n (state) => state.movieCollections.filterBuilderProps,\r\n (sectionItems, filterBuilderProps) => {\r\n return {\r\n sectionItems,\r\n filterBuilderProps,\r\n customFilterType: 'movieCollections'\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSetFilter: setMovieCollectionsFilter\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(FilterModal);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport CollectionFilterModalConnector from 'Collection/CollectionFilterModalConnector';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport { align } from 'Helpers/Props';\r\n\r\nfunction CollectionFilterMenu(props) {\r\n const {\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n isDisabled,\r\n onFilterSelect\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nCollectionFilterMenu.propTypes = {\r\n selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired\r\n};\r\n\r\nCollectionFilterMenu.defaultProps = {\r\n showCustomFilters: false\r\n};\r\n\r\nexport default CollectionFilterMenu;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton';\r\nimport { align, icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction SortMenu(props) {\r\n const {\r\n className,\r\n children,\r\n isDisabled,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nSortMenu.propTypes = {\r\n className: PropTypes.string,\r\n children: PropTypes.node.isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n alignMenu: PropTypes.oneOf([align.LEFT, align.RIGHT])\r\n};\r\n\r\nSortMenu.defaultProps = {\r\n isDisabled: false\r\n};\r\n\r\nexport default SortMenu;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { icons, sortDirections } from 'Helpers/Props';\r\nimport SelectedMenuItem from './SelectedMenuItem';\r\n\r\nfunction SortMenuItem(props) {\r\n const {\r\n name,\r\n sortKey,\r\n sortDirection,\r\n ...otherProps\r\n } = props;\r\n\r\n const isSelected = name === sortKey;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nSortMenuItem.propTypes = {\r\n name: PropTypes.string,\r\n sortKey: PropTypes.string,\r\n sortDirection: PropTypes.oneOf(sortDirections.all),\r\n children: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nSortMenuItem.defaultProps = {\r\n name: null\r\n};\r\n\r\nexport default SortMenuItem;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport SortMenu from 'Components/Menu/SortMenu';\r\nimport SortMenuItem from 'Components/Menu/SortMenuItem';\r\nimport { align, sortDirections } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction CollectionSortMenu(props) {\r\n const {\r\n sortKey,\r\n sortDirection,\r\n isDisabled,\r\n onSortSelect\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {translate('Title')}\r\n \r\n \r\n {translate('Missing')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nCollectionSortMenu.propTypes = {\r\n sortKey: PropTypes.string,\r\n sortDirection: PropTypes.oneOf(sortDirections.all),\r\n isDisabled: PropTypes.bool.isRequired,\r\n onSortSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CollectionSortMenu;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"NoCollection-message-VHI9j\",\"buttonContainer\":\"NoCollection-buttonContainer-Sj5Qo\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './NoCollection.css';\r\n\r\nfunction NoCollection(props) {\r\n const { totalItems } = props;\r\n\r\n if (totalItems > 0) {\r\n return (\r\n
\r\n
\r\n {translate('AllCollectionsHiddenDueToFilter')}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {translate('NoCollections')}\r\n
\r\n\r\n
\r\n \r\n {translate('ImportExistingMovies')}\r\n \r\n
\r\n\r\n
\r\n \r\n {translate('AddNewMovie')}\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nNoCollection.propTypes = {\r\n totalItems: PropTypes.number.isRequired\r\n};\r\n\r\nexport default NoCollection;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nexport function createCollectionSelectorForHook(tmdbId: number) {\r\n return createSelector(\r\n (state: AppState) => state.movieCollections.items,\r\n (collections) => {\r\n return collections.find((item) => item.tmdbId === tmdbId);\r\n }\r\n );\r\n}\r\n\r\nfunction createCollectionSelector() {\r\n return createSelector(\r\n (_: AppState, { collectionId }: { collectionId: number }) => collectionId,\r\n (state: AppState) => state.movieCollections.itemMap,\r\n (state: AppState) => state.movieCollections.items,\r\n (collectionId, itemMap, allCollections) => {\r\n return allCollections && itemMap && collectionId in itemMap\r\n ? allCollections[itemMap[collectionId]]\r\n : undefined;\r\n }\r\n );\r\n}\r\n\r\nexport default createCollectionSelector;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createCollectionSelector from 'Store/Selectors/createCollectionSelector';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createCollectionSelector(),\r\n (collection) => {\r\n // If a movie is deleted this selector may fire before the parent\r\n // selecors, which will result in an undefined movie, if that happens\r\n // we want to return early here and again in the render function to avoid\r\n // trying to show a movie that has no information available.\r\n\r\n if (!collection) {\r\n return {};\r\n }\r\n\r\n const allGenres = collection.movies.flatMap((movie) => movie.genres);\r\n\r\n return {\r\n ...collection,\r\n movies: [...collection.movies].sort((a, b) => b.year - a.year),\r\n genres: Array.from(new Set(allGenres))\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass CollectionItemConnector extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n component: ItemComponent,\r\n ...otherProps\r\n } = this.props;\r\n\r\n if (!id) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCollectionItemConnector.propTypes = {\r\n id: PropTypes.number,\r\n component: PropTypes.elementType.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps)(CollectionItemConnector);\r\n","export default function getIndexOfFirstCharacter(items, character) {\r\n return items.findIndex((item) => {\r\n const firstCharacter = item.sortTitle.charAt(0);\r\n\r\n if (character === '#') {\r\n return !isNaN(firstCharacter);\r\n }\r\n\r\n return firstCharacter === character;\r\n });\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"EditCollectionModalContent-container-ve_RW\",\"poster\":\"EditCollectionModalContent-poster-i8cHa\",\"info\":\"EditCollectionModalContent-info-dipVx\",\"overview\":\"EditCollectionModalContent-overview-PCbbw\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditCollectionModalContent.css';\r\n\r\nclass EditCollectionModalContent extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onSavePress = () => {\r\n const {\r\n onSavePress\r\n } = this.props;\r\n\r\n onSavePress(false);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n title,\r\n images,\r\n overview,\r\n item,\r\n isSaving,\r\n onInputChange,\r\n onModalClose,\r\n isSmallScreen,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n monitored,\r\n qualityProfileId,\r\n minimumAvailability,\r\n // Id,\r\n rootFolderPath,\r\n tags,\r\n searchOnAdd\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {translate('Edit')} - {title}\r\n \r\n\r\n \r\n
\r\n {\r\n !isSmallScreen &&\r\n
\r\n \r\n
\r\n }\r\n\r\n
\r\n
\r\n {overview}\r\n
\r\n\r\n \r\n \r\n {translate('Monitored')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('MinimumAvailability')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('QualityProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RootFolder')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SearchOnAdd')}\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nEditCollectionModalContent.propTypes = {\r\n collectionId: PropTypes.number.isRequired,\r\n title: PropTypes.string.isRequired,\r\n overview: PropTypes.string.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n item: PropTypes.object.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n isPathChanging: PropTypes.bool.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditCollectionModalContent;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { saveMovieCollection, setMovieCollectionValue } from 'Store/Actions/movieCollectionActions';\r\nimport createCollectionSelector from 'Store/Selectors/createCollectionSelector';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport EditCollectionModalContent from './EditCollectionModalContent';\r\n\r\nfunction createIsPathChangingSelector() {\r\n return createSelector(\r\n (state) => state.movieCollections.pendingChanges,\r\n createCollectionSelector(),\r\n (pendingChanges, collection) => {\r\n const rootFolderPath = pendingChanges.rootFolderPath;\r\n\r\n if (rootFolderPath == null) {\r\n return false;\r\n }\r\n\r\n return collection.rootFolderPath !== rootFolderPath;\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.movieCollections,\r\n createCollectionSelector(),\r\n createIsPathChangingSelector(),\r\n createDimensionsSelector(),\r\n (moviesState, collection, isPathChanging, dimensions) => {\r\n const {\r\n isSaving,\r\n saveError,\r\n pendingChanges\r\n } = moviesState;\r\n\r\n const movieSettings = {\r\n monitored: collection.monitored,\r\n qualityProfileId: collection.qualityProfileId,\r\n minimumAvailability: collection.minimumAvailability,\r\n rootFolderPath: collection.rootFolderPath,\r\n tags: collection.tags,\r\n searchOnAdd: collection.searchOnAdd\r\n };\r\n\r\n const settings = selectSettings(movieSettings, pendingChanges, saveError);\r\n\r\n return {\r\n title: collection.title,\r\n images: collection.images,\r\n overview: collection.overview,\r\n isSaving,\r\n saveError,\r\n isPathChanging,\r\n originalPath: collection.path,\r\n item: settings.settings,\r\n isSmallScreen: dimensions.isSmallScreen,\r\n ...settings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSetMovieCollectionValue: setMovieCollectionValue,\r\n dispatchSaveMovieCollection: saveMovieCollection\r\n};\r\n\r\nclass EditCollectionModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {\r\n this.props.onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.dispatchSetMovieCollectionValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.dispatchSaveMovieCollection({\r\n id: this.props.collectionId\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditCollectionModalContentConnector.propTypes = {\r\n collectionId: PropTypes.number,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n dispatchSetMovieCollectionValue: PropTypes.func.isRequired,\r\n dispatchSaveMovieCollection: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditCollectionModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport EditCollectionModalContentConnector from './EditCollectionModalContentConnector';\r\n\r\nfunction EditCollectionModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditCollectionModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditCollectionModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditCollectionModal from './EditCollectionModal';\r\n\r\nconst mapDispatchToProps = {\r\n clearPendingChanges\r\n};\r\n\r\nclass EditCollectionModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.clearPendingChanges({ section: 'movieCollections' });\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditCollectionModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(undefined, mapDispatchToProps)(EditCollectionModalConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"toggleButton\":\"MonitorToggleButton-toggleButton-fG17x IconButton-button-t4C5V Link-link-RInnp\",\"isDisabled\":\"MonitorToggleButton-isDisabled-XFERN\"};","import classNames from 'classnames';\r\nimport React, { SyntheticEvent, useCallback, useMemo } from 'react';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MonitorToggleButton.css';\r\n\r\ninterface MonitorToggleButtonProps {\r\n className?: string;\r\n monitored: boolean;\r\n size?: number;\r\n isDisabled?: boolean;\r\n isSaving?: boolean;\r\n onPress: (value: boolean, options: { shiftKey: boolean }) => unknown;\r\n}\r\n\r\nfunction MonitorToggleButton(props: MonitorToggleButtonProps) {\r\n const {\r\n className = styles.toggleButton,\r\n monitored,\r\n isDisabled = false,\r\n isSaving = false,\r\n size,\r\n onPress,\r\n ...otherProps\r\n } = props;\r\n\r\n const iconName = monitored ? icons.MONITORED : icons.UNMONITORED;\r\n\r\n const title = useMemo(() => {\r\n if (isDisabled) {\r\n return 'Cannot toggle monitored state when movie is unmonitored';\r\n }\r\n\r\n if (monitored) {\r\n return translate('ToggleMonitoredToUnmonitored');\r\n }\r\n\r\n return translate('ToggleUnmonitoredToMonitored');\r\n }, [monitored, isDisabled]);\r\n\r\n const handlePress = useCallback(\r\n (event: SyntheticEvent) => {\r\n const shiftKey = event.nativeEvent.shiftKey;\r\n\r\n onPress(!monitored, { shiftKey });\r\n },\r\n [monitored, onPress]\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MonitorToggleButton;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nexport function createQualityProfileSelectorForHook(qualityProfileId: number) {\r\n return createSelector(\r\n (state: AppState) => state.settings.qualityProfiles.items,\r\n (qualityProfiles) => {\r\n return qualityProfiles.find((profile) => profile.id === qualityProfileId);\r\n }\r\n );\r\n}\r\n\r\nfunction createQualityProfileSelector() {\r\n return createSelector(\r\n (_: AppState, { qualityProfileId }: { qualityProfileId: number }) =>\r\n qualityProfileId,\r\n (state: AppState) => state.settings.qualityProfiles.items,\r\n (qualityProfileId, qualityProfiles) => {\r\n return qualityProfiles.find((profile) => profile.id === qualityProfileId);\r\n }\r\n );\r\n}\r\n\r\nexport default createQualityProfileSelector;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createQualityProfileSelectorForHook } from 'Store/Selectors/createQualityProfileSelector';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface QualityProfileNameProps {\r\n qualityProfileId: number;\r\n}\r\n\r\nfunction QualityProfileName({ qualityProfileId }: QualityProfileNameProps) {\r\n const qualityProfile = useSelector(\r\n createQualityProfileSelectorForHook(qualityProfileId)\r\n );\r\n\r\n return {qualityProfile?.name ?? translate('Unknown')};\r\n}\r\n\r\nexport default QualityProfileName;\r\n","import { createSelector } from 'reselect';\r\nimport createAllMoviesSelector from './createAllMoviesSelector';\r\n\r\nfunction createCollectionExistingMovieSelector() {\r\n return createSelector(\r\n (state, { tmdbId }) => tmdbId,\r\n createAllMoviesSelector(),\r\n (tmdbId, allMovies) => {\r\n return allMovies.find((movie) => movie.tmdbId === tmdbId);\r\n }\r\n );\r\n}\r\n\r\nexport default createCollectionExistingMovieSelector;\r\n","import React from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MoveMovieModal.css';\r\n\r\ninterface MoveMovieModalProps {\r\n originalPath?: string;\r\n destinationPath?: string;\r\n destinationRootFolder?: string;\r\n isOpen: boolean;\r\n onModalClose: () => void;\r\n onSavePress: () => void;\r\n onMoveMoviePress: () => void;\r\n}\r\n\r\nfunction MoveMovieModal({\r\n originalPath,\r\n destinationPath,\r\n destinationRootFolder,\r\n isOpen,\r\n onModalClose,\r\n onSavePress,\r\n onMoveMoviePress,\r\n}: MoveMovieModalProps) {\r\n if (isOpen && !originalPath && !destinationPath && !destinationRootFolder) {\r\n console.error(\r\n 'originalPath and destinationPath OR destinationRootFolder must be provided'\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {translate('MoveFiles')}\r\n\r\n \r\n {destinationRootFolder\r\n ? translate('MoveMovieFoldersToRootFolder', {\r\n destinationRootFolder,\r\n })\r\n : null}\r\n\r\n {originalPath && destinationPath\r\n ? translate('MoveMovieFoldersToNewPath', {\r\n originalPath,\r\n destinationPath,\r\n })\r\n : null}\r\n\r\n {destinationRootFolder ? (\r\n
\r\n {translate('MoveMovieFoldersRenameFolderWarning')}\r\n
\r\n ) : null}\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nexport default MoveMovieModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"doNotMoveButton\":\"MoveMovieModal-doNotMoveButton-xsdqk Button-button-paJ9a Link-link-RInnp\",\"folderRenameMessage\":\"MoveMovieModal-folderRenameMessage-XXweg\"};","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport MovieMinimumAvailabilityPopoverContent from 'AddMovie/MovieMinimumAvailabilityPopoverContent';\r\nimport AppState from 'App/State/AppState';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport {\r\n icons,\r\n inputTypes,\r\n kinds,\r\n sizes,\r\n tooltipPositions,\r\n} from 'Helpers/Props';\r\nimport MoveMovieModal from 'Movie/MoveMovie/MoveMovieModal';\r\nimport useMovie from 'Movie/useMovie';\r\nimport { saveMovie, setMovieValue } from 'Store/Actions/movieActions';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport { InputChanged } from 'typings/inputs';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditMovieModalContent.css';\r\n\r\nexport interface EditMovieModalContentProps {\r\n movieId: number;\r\n onModalClose: () => void;\r\n onDeleteMoviePress: () => void;\r\n}\r\n\r\nfunction EditMovieModalContent({\r\n movieId,\r\n onModalClose,\r\n onDeleteMoviePress,\r\n}: EditMovieModalContentProps) {\r\n const dispatch = useDispatch();\r\n const {\r\n title,\r\n monitored,\r\n minimumAvailability,\r\n qualityProfileId,\r\n path,\r\n tags,\r\n } = useMovie(movieId)!;\r\n\r\n const { isSaving, saveError, pendingChanges } = useSelector(\r\n (state: AppState) => state.movies\r\n );\r\n\r\n const wasSaving = usePrevious(isSaving);\r\n\r\n const isPathChanging = pendingChanges.path && path !== pendingChanges.path;\r\n\r\n const [isConfirmMoveModalOpen, setIsConfirmMoveModalOpen] = useState(false);\r\n\r\n const { settings, ...otherSettings } = useMemo(() => {\r\n return selectSettings(\r\n {\r\n monitored,\r\n minimumAvailability,\r\n qualityProfileId,\r\n path,\r\n tags,\r\n },\r\n pendingChanges,\r\n saveError\r\n );\r\n }, [\r\n monitored,\r\n minimumAvailability,\r\n qualityProfileId,\r\n path,\r\n tags,\r\n pendingChanges,\r\n saveError,\r\n ]);\r\n\r\n const handleInputChange = useCallback(\r\n ({ name, value }: InputChanged) => {\r\n // @ts-expect-error actions aren't typed\r\n dispatch(setMovieValue({ name, value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleCancelPress = useCallback(() => {\r\n setIsConfirmMoveModalOpen(false);\r\n }, []);\r\n\r\n const handleSavePress = useCallback(() => {\r\n if (isPathChanging && !isConfirmMoveModalOpen) {\r\n setIsConfirmMoveModalOpen(true);\r\n } else {\r\n setIsConfirmMoveModalOpen(false);\r\n\r\n dispatch(\r\n saveMovie({\r\n id: movieId,\r\n moveFiles: false,\r\n })\r\n );\r\n }\r\n }, [movieId, isPathChanging, isConfirmMoveModalOpen, dispatch]);\r\n\r\n const handleMoveMoviePress = useCallback(() => {\r\n setIsConfirmMoveModalOpen(false);\r\n\r\n dispatch(\r\n saveMovie({\r\n id: movieId,\r\n moveFiles: true,\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n useEffect(() => {\r\n if (!isSaving && wasSaving && !saveError) {\r\n onModalClose();\r\n }\r\n }, [isSaving, wasSaving, saveError, onModalClose]);\r\n\r\n return (\r\n \r\n {translate('EditMovieModalHeader', { title })}\r\n\r\n \r\n
\r\n \r\n {translate('Monitored')}\r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('MinimumAvailability')}\r\n\r\n }\r\n title={translate('MinimumAvailability')}\r\n body={}\r\n position={tooltipPositions.RIGHT}\r\n />\r\n \r\n\r\n \r\n \r\n\r\n \r\n {translate('QualityProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Path')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n {translate('Delete')}\r\n \r\n\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default EditMovieModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditMovieModalContent-deleteButton-X9KbL Button-button-paJ9a Link-link-RInnp\",\"labelIcon\":\"EditMovieModalContent-labelIcon-GGj6W\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditMovieModalContent, {\r\n EditMovieModalContentProps,\r\n} from './EditMovieModalContent';\r\n\r\ninterface EditMovieModalProps extends EditMovieModalContentProps {\r\n isOpen: boolean;\r\n}\r\n\r\nfunction EditMovieModal({\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n}: EditMovieModalProps) {\r\n const dispatch = useDispatch();\r\n\r\n const handleModalClose = useCallback(() => {\r\n dispatch(clearPendingChanges({ section: 'movies' }));\r\n onModalClose();\r\n }, [dispatch, onModalClose]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default EditMovieModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"AddNewCollectionMovieModalContent-container-RPZsV\",\"year\":\"AddNewCollectionMovieModalContent-year-ouDLP\",\"poster\":\"AddNewCollectionMovieModalContent-poster-cvkir\",\"info\":\"AddNewCollectionMovieModalContent-info-_K8rc\",\"overview\":\"AddNewCollectionMovieModalContent-overview-FQzAi\",\"labelIcon\":\"AddNewCollectionMovieModalContent-labelIcon-Em4ZZ\",\"searchForMissingMovieLabelContainer\":\"AddNewCollectionMovieModalContent-searchForMissingMovieLabelContainer-Z45Ta\",\"searchForMissingMovieLabel\":\"AddNewCollectionMovieModalContent-searchForMissingMovieLabel-Oy1GT\",\"searchForMissingMovieContainer\":\"AddNewCollectionMovieModalContent-searchForMissingMovieContainer-hjn2o CheckInput-container-FXKYv\",\"searchForMissingMovieInput\":\"AddNewCollectionMovieModalContent-searchForMissingMovieInput-KQy2U CheckInput-input-VAM1T\",\"modalFooter\":\"AddNewCollectionMovieModalContent-modalFooter-HMyC6 ModalFooter-modalFooter-wjkx5\",\"addButton\":\"AddNewCollectionMovieModalContent-addButton-t6rd8 SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './AddNewCollectionMovieModalContent.css';\r\n\r\nclass AddNewCollectionMovieModalContent extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onQualityProfileIdChange = ({ value }) => {\r\n this.props.onInputChange({ name: 'qualityProfileId', value: parseInt(value) });\r\n };\r\n\r\n onAddMoviePress = () => {\r\n this.props.onAddMoviePress();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n title,\r\n year,\r\n overview,\r\n images,\r\n isAdding,\r\n folder,\r\n tags,\r\n isSmallScreen,\r\n isWindows,\r\n onModalClose,\r\n onInputChange,\r\n rootFolderPath,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n searchForMovie\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {title}\r\n\r\n {\r\n !title.contains(year) && !!year &&\r\n ({year})\r\n }\r\n \r\n\r\n \r\n
\r\n {\r\n !isSmallScreen &&\r\n
\r\n \r\n
\r\n }\r\n\r\n
\r\n
\r\n {overview}\r\n
\r\n\r\n
\r\n \r\n {translate('RootFolder')}\r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('Monitor')}\r\n \r\n\r\n \r\n \r\n\r\n \r\n {translate('MinimumAvailability')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('QualityProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n {translate('AddMovie')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nAddNewCollectionMovieModalContent.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n overview: PropTypes.string,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isAdding: PropTypes.bool.isRequired,\r\n addError: PropTypes.object,\r\n rootFolderPath: PropTypes.object,\r\n monitor: PropTypes.object.isRequired,\r\n qualityProfileId: PropTypes.object,\r\n minimumAvailability: PropTypes.object.isRequired,\r\n searchForMovie: PropTypes.object.isRequired,\r\n folder: PropTypes.string.isRequired,\r\n tags: PropTypes.object.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n isWindows: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onAddMoviePress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNewCollectionMovieModalContent;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { addMovie, setMovieCollectionValue } from 'Store/Actions/movieCollectionActions';\r\nimport createCollectionSelector from 'Store/Selectors/createCollectionSelector';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport AddNewMovieModalContent from './AddNewCollectionMovieModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.movieCollections,\r\n createCollectionSelector(),\r\n createDimensionsSelector(),\r\n createSystemStatusSelector(),\r\n (discoverMovieState, collection, dimensions, systemStatus) => {\r\n const {\r\n isAdding,\r\n addError,\r\n pendingChanges\r\n } = discoverMovieState;\r\n\r\n const collectionDefaults = {\r\n rootFolderPath: collection.rootFolderPath,\r\n monitor: 'movieOnly',\r\n qualityProfileId: collection.qualityProfileId,\r\n minimumAvailability: collection.minimumAvailability,\r\n searchForMovie: collection.searchOnAdd,\r\n tags: collection.tags || []\r\n };\r\n\r\n const {\r\n settings,\r\n validationErrors,\r\n validationWarnings\r\n } = selectSettings(collectionDefaults, pendingChanges, addError);\r\n\r\n return {\r\n isAdding,\r\n addError,\r\n isSmallScreen: dimensions.isSmallScreen,\r\n validationErrors,\r\n validationWarnings,\r\n isWindows: systemStatus.isWindows,\r\n ...settings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n addMovie,\r\n setMovieCollectionValue\r\n};\r\n\r\nclass AddNewCollectionMovieModalContentConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setMovieCollectionValue({ name, value });\r\n };\r\n\r\n onAddMoviePress = () => {\r\n const {\r\n tmdbId,\r\n title,\r\n rootFolderPath,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n searchForMovie,\r\n tags\r\n } = this.props;\r\n\r\n this.props.addMovie({\r\n tmdbId,\r\n title,\r\n rootFolderPath: rootFolderPath.value,\r\n monitor: monitor.value,\r\n qualityProfileId: qualityProfileId.value,\r\n minimumAvailability: minimumAvailability.value,\r\n searchForMovie: searchForMovie.value,\r\n tags: tags.value\r\n });\r\n\r\n this.props.onModalClose(true);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddNewCollectionMovieModalContentConnector.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n title: PropTypes.string.isRequired,\r\n rootFolderPath: PropTypes.object,\r\n monitor: PropTypes.object.isRequired,\r\n qualityProfileId: PropTypes.object,\r\n minimumAvailability: PropTypes.object.isRequired,\r\n searchForMovie: PropTypes.object.isRequired,\r\n tags: PropTypes.object.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n addMovie: PropTypes.func.isRequired,\r\n setMovieCollectionValue: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddNewCollectionMovieModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddNewCollectionMovieModalContentConnector from './AddNewCollectionMovieModalContentConnector';\r\n\r\nfunction AddNewCollectionMovieModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddNewCollectionMovieModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNewCollectionMovieModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"CollectionMovie-content-XbVZ3\",\"poster\":\"CollectionMovie-poster-QJEDb\",\"overlayTitle\":\"CollectionMovie-overlayTitle-SKEyv\",\"posterContainer\":\"CollectionMovie-posterContainer-nQcY0\",\"overlay\":\"CollectionMovie-overlay-F4FYQ\",\"title\":\"CollectionMovie-title-TodUA\",\"controls\":\"CollectionMovie-controls-i0BlJ\",\"action\":\"CollectionMovie-action-VY4SI IconButton-button-t4C5V Link-link-RInnp\",\"container\":\"CollectionMovie-container-Sp_Xl\",\"editorSelect\":\"CollectionMovie-editorSelect-vnBEf\",\"externalLinks\":\"CollectionMovie-externalLinks-xuJhQ\",\"link\":\"CollectionMovie-link-KEWK5 Link-link-RInnp\",\"monitorToggleButton\":\"CollectionMovie-monitorToggleButton-JOR0r MonitorToggleButton-toggleButton-fG17x IconButton-button-t4C5V Link-link-RInnp\",\"excluded\":\"CollectionMovie-excluded-JEY4Q\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport MonitorToggleButton from 'Components/MonitorToggleButton';\r\nimport EditMovieModal from 'Movie/Edit/EditMovieModal';\r\nimport MovieIndexProgressBar from 'Movie/Index/ProgressBar/MovieIndexProgressBar';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddNewCollectionMovieModal from './../AddNewCollectionMovieModal';\r\nimport styles from './CollectionMovie.css';\r\n\r\nclass CollectionMovie extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n hasPosterError: false,\r\n isEditMovieModalOpen: false,\r\n isNewAddMovieModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditMoviePress = () => {\r\n this.setState({ isEditMovieModalOpen: true });\r\n };\r\n\r\n onEditMovieModalClose = () => {\r\n this.setState({ isEditMovieModalOpen: false });\r\n };\r\n\r\n onAddMoviePress = () => {\r\n this.setState({ isNewAddMovieModalOpen: true });\r\n };\r\n\r\n onAddMovieModalClose = () => {\r\n this.setState({ isNewAddMovieModalOpen: false });\r\n };\r\n\r\n onPosterLoad = () => {\r\n if (this.state.hasPosterError) {\r\n this.setState({ hasPosterError: false });\r\n }\r\n };\r\n\r\n onPosterLoadError = () => {\r\n if (!this.state.hasPosterError) {\r\n this.setState({ hasPosterError: true });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n title,\r\n status,\r\n overview,\r\n year,\r\n tmdbId,\r\n images,\r\n monitored,\r\n hasFile,\r\n folder,\r\n isAvailable,\r\n movieFile,\r\n isExistingMovie,\r\n isExcluded,\r\n posterWidth,\r\n posterHeight,\r\n detailedProgressBar,\r\n onMonitorTogglePress,\r\n collectionId\r\n } = this.props;\r\n\r\n const {\r\n isEditMovieModalOpen,\r\n isNewAddMovieModalOpen\r\n } = this.state;\r\n\r\n const linkProps = id ? { to: `/movie/${tmdbId}` } : { onPress: this.onAddMoviePress };\r\n\r\n const elementStyle = {\r\n width: `${posterWidth}px`,\r\n height: `${posterHeight}px`,\r\n borderRadius: '5px'\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {\r\n isExistingMovie &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {\r\n isExcluded ?\r\n :\r\n null\r\n }\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n {title} {year > 0 ? `(${year})` : ''}\r\n
\r\n\r\n {\r\n id ?\r\n
\r\n \r\n
:\r\n null\r\n }\r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nCollectionMovie.propTypes = {\r\n id: PropTypes.number,\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n status: PropTypes.string.isRequired,\r\n overview: PropTypes.string.isRequired,\r\n monitored: PropTypes.bool,\r\n collectionId: PropTypes.number.isRequired,\r\n hasFile: PropTypes.bool,\r\n folder: PropTypes.string,\r\n isAvailable: PropTypes.bool,\r\n movieFile: PropTypes.object,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n posterWidth: PropTypes.number.isRequired,\r\n posterHeight: PropTypes.number.isRequired,\r\n detailedProgressBar: PropTypes.bool.isRequired,\r\n isExistingMovie: PropTypes.bool,\r\n isExcluded: PropTypes.bool,\r\n tmdbId: PropTypes.number.isRequired,\r\n imdbId: PropTypes.string,\r\n youTubeTrailerId: PropTypes.string,\r\n onMonitorTogglePress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CollectionMovie;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { toggleMovieMonitored } from 'Store/Actions/movieActions';\r\nimport createCollectionExistingMovieSelector from 'Store/Selectors/createCollectionExistingMovieSelector';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport CollectionMovie from './CollectionMovie';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createDimensionsSelector(),\r\n createCollectionExistingMovieSelector(),\r\n (dimensions, existingMovie) => {\r\n return {\r\n isSmallScreen: dimensions.isSmallScreen,\r\n isExistingMovie: !!existingMovie,\r\n ...existingMovie\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n toggleMovieMonitored\r\n};\r\n\r\nclass CollectionMovieConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onMonitorTogglePress = (monitored) => {\r\n this.props.toggleMovieMonitored({\r\n movieId: this.props.id,\r\n monitored\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCollectionMovieConnector.propTypes = {\r\n id: PropTypes.number,\r\n monitored: PropTypes.bool,\r\n toggleMovieMonitored: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CollectionMovieConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"movie\":\"CollectionMovieLabel-movie-BazsZ\",\"movieTitle\":\"CollectionMovieLabel-movieTitle-rC4bb\",\"movieStatus\":\"CollectionMovieLabel-movieStatus-bZlk1\",\"primary\":\"CollectionMovieLabel-primary-s1ZqO\",\"danger\":\"CollectionMovieLabel-danger-mrKyC\",\"success\":\"CollectionMovieLabel-success-Gas3N\",\"purple\":\"CollectionMovieLabel-purple-njfAW\",\"warning\":\"CollectionMovieLabel-warning-Hjfwp\",\"info\":\"CollectionMovieLabel-info-CJVKQ\",\"queue\":\"CollectionMovieLabel-queue-Kx3x6\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport MonitorToggleButton from 'Components/MonitorToggleButton';\r\nimport getProgressBarKind from 'Utilities/Movie/getProgressBarKind';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './CollectionMovieLabel.css';\r\n\r\nclass CollectionMovieLabel extends Component {\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n title,\r\n year,\r\n status,\r\n monitored,\r\n isAvailable,\r\n hasFile,\r\n onMonitorTogglePress,\r\n isSaving\r\n } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n {\r\n id &&\r\n \r\n }\r\n\r\n \r\n {title} {year > 0 ? `(${year})` : ''}\r\n \r\n
\r\n\r\n {\r\n id &&\r\n \r\n {\r\n hasFile ? translate('Downloaded') : translate('Missing')\r\n }\r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nCollectionMovieLabel.propTypes = {\r\n id: PropTypes.number,\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n status: PropTypes.string,\r\n isAvailable: PropTypes.bool,\r\n monitored: PropTypes.bool,\r\n hasFile: PropTypes.bool,\r\n isSaving: PropTypes.bool.isRequired,\r\n movieFile: PropTypes.object,\r\n movieFileId: PropTypes.number,\r\n onMonitorTogglePress: PropTypes.func.isRequired\r\n};\r\n\r\nCollectionMovieLabel.defaultProps = {\r\n isSaving: false,\r\n statistics: {}\r\n};\r\n\r\nexport default CollectionMovieLabel;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { toggleMovieMonitored } from 'Store/Actions/movieActions';\r\nimport createCollectionExistingMovieSelector from 'Store/Selectors/createCollectionExistingMovieSelector';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport CollectionMovieLabel from './CollectionMovieLabel';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createDimensionsSelector(),\r\n createCollectionExistingMovieSelector(),\r\n (dimensions, existingMovie) => {\r\n return {\r\n isSmallScreen: dimensions.isSmallScreen,\r\n isExistingMovie: !!existingMovie,\r\n ...existingMovie\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n toggleMovieMonitored\r\n};\r\n\r\nclass CollectionMovieLabelConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onMonitorTogglePress = (monitored) => {\r\n this.props.toggleMovieMonitored({\r\n movieId: this.props.id,\r\n monitored\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCollectionMovieLabelConnector.propTypes = {\r\n id: PropTypes.number,\r\n monitored: PropTypes.bool,\r\n toggleMovieMonitored: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CollectionMovieLabelConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"CollectionOverview-content-xqP_l\",\"editorSelect\":\"CollectionOverview-editorSelect-GccR4\",\"titleRow\":\"CollectionOverview-titleRow-rae5e\",\"toggleMonitoredContainer\":\"CollectionOverview-toggleMonitoredContainer-QG1jp\",\"titleContainer\":\"CollectionOverview-titleContainer-IZa8T\",\"sliderContainer\":\"CollectionOverview-sliderContainer-zoakQ\",\"labelsContainer\":\"CollectionOverview-labelsContainer-PMeTT\",\"moviesContainer\":\"CollectionOverview-moviesContainer-iCe0Q\",\"movie\":\"CollectionOverview-movie-TOnrJ\",\"info\":\"CollectionOverview-info-paK6X\",\"title\":\"CollectionOverview-title-pBksD\",\"actions\":\"CollectionOverview-actions-XaV4J\",\"details\":\"CollectionOverview-details-XnbEq\",\"defaults\":\"CollectionOverview-defaults-O3j4x\",\"detailsLabel\":\"CollectionOverview-detailsLabel-yefRJ Label-label-DYldh\",\"path\":\"CollectionOverview-path-fOgv_\",\"status\":\"CollectionOverview-status-_6Mva\",\"genres\":\"CollectionOverview-genres-okLMR\",\"qualityProfileName\":\"CollectionOverview-qualityProfileName-jVFTZ\",\"overview\":\"CollectionOverview-overview-_0zq2\",\"monitorToggleButton\":\"CollectionOverview-monitorToggleButton-gixGl MonitorToggleButton-toggleButton-fG17x IconButton-button-t4C5V Link-link-RInnp MonitorToggleButton-toggleButton-fG17x IconButton-button-t4C5V Link-link-RInnp\",\"navigationButtons\":\"CollectionOverview-navigationButtons-iEbkN\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport TextTruncate from 'react-text-truncate';\r\nimport { Navigation } from 'swiper';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport EditCollectionModalConnector from 'Collection/Edit/EditCollectionModalConnector';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport Icon from 'Components/Icon';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport MonitorToggleButton from 'Components/MonitorToggleButton';\r\nimport { icons, sizes } from 'Helpers/Props';\r\nimport MovieGenres from 'Movie/MovieGenres';\r\nimport QualityProfileName from 'Settings/Profiles/Quality/QualityProfileName';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport fonts from 'Styles/Variables/fonts';\r\nimport translate from 'Utilities/String/translate';\r\nimport CollectionMovieConnector from './CollectionMovieConnector';\r\nimport CollectionMovieLabelConnector from './CollectionMovieLabelConnector';\r\nimport styles from './CollectionOverview.css';\r\n\r\n// Import Swiper styles\r\nimport 'swiper/css';\r\nimport 'swiper/css/navigation';\r\n\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(dimensions.movieIndexColumnPaddingSmallScreen);\r\nconst defaultFontSize = parseInt(fonts.defaultFontSize);\r\nconst lineHeight = parseFloat(fonts.lineHeight);\r\n\r\n// Hardcoded height beased on line-height of 32 + bottom margin of 10. 19 + 5 for List Row\r\n// Less side-effecty than using react-measure.\r\nconst titleRowHeight = 100;\r\n\r\nfunction getContentHeight(rowHeight, isSmallScreen) {\r\n const padding = isSmallScreen ? columnPaddingSmallScreen : columnPadding;\r\n\r\n return rowHeight - padding;\r\n}\r\n\r\nclass CollectionOverview extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditCollectionModalOpen: false,\r\n isNewAddMovieModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Control\r\n\r\n setSliderPrevRef = (ref) => {\r\n this._swiperPrevRef = ref;\r\n };\r\n\r\n setSliderNextRef = (ref) => {\r\n this._swiperNextRef = ref;\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n this.setState({ isNewAddMovieModalOpen: true });\r\n };\r\n\r\n onEditCollectionPress = () => {\r\n this.setState({ isEditCollectionModalOpen: true });\r\n };\r\n\r\n onEditCollectionModalClose = () => {\r\n this.setState({ isEditCollectionModalOpen: false });\r\n };\r\n\r\n onAddMovieModalClose = () => {\r\n this.setState({ isNewAddMovieModalOpen: false });\r\n };\r\n\r\n onChange = ({ value, shiftKey }) => {\r\n const {\r\n id,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n onSelectedChange({ id, value, shiftKey });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n monitored,\r\n qualityProfileId,\r\n rootFolderPath,\r\n genres,\r\n id,\r\n title,\r\n movies,\r\n overview,\r\n missingMovies,\r\n posterHeight,\r\n posterWidth,\r\n rowHeight,\r\n isSmallScreen,\r\n isSelected,\r\n onMonitorTogglePress\r\n } = this.props;\r\n\r\n const {\r\n showDetails,\r\n showOverview,\r\n showPosters,\r\n detailedProgressBar\r\n } = this.props.overviewOptions;\r\n\r\n const {\r\n isEditCollectionModalOpen\r\n } = this.state;\r\n\r\n const contentHeight = getContentHeight(rowHeight, isSmallScreen);\r\n const overviewHeight = contentHeight - titleRowHeight - posterHeight;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {title}\r\n
\r\n\r\n \r\n
\r\n\r\n {\r\n showPosters &&\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n }\r\n\r\n
\r\n\r\n {\r\n showDetails &&\r\n
\r\n \r\n \r\n \r\n {`${missingMovies} missing movie(s)`}\r\n \r\n \r\n\r\n {\r\n !isSmallScreen &&\r\n \r\n \r\n \r\n {\r\n \r\n }\r\n \r\n \r\n }\r\n\r\n {\r\n !isSmallScreen &&\r\n \r\n \r\n \r\n {rootFolderPath}\r\n \r\n \r\n }\r\n\r\n {\r\n !isSmallScreen &&\r\n \r\n \r\n \r\n \r\n }\r\n\r\n
\r\n }\r\n\r\n {\r\n showOverview &&\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n\r\n {\r\n showPosters ?\r\n
\r\n {\r\n swiper.params.navigation.prevEl = this._swiperPrevRef;\r\n swiper.params.navigation.nextEl = this._swiperNextRef;\r\n swiper.navigation.init();\r\n swiper.navigation.update();\r\n }}\r\n >\r\n {movies.map((movie) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n
:\r\n
\r\n {movies.map((movie) => (\r\n \r\n ))}\r\n
\r\n }\r\n\r\n
\r\n
\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nCollectionOverview.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n monitored: PropTypes.bool.isRequired,\r\n qualityProfileId: PropTypes.number.isRequired,\r\n minimumAvailability: PropTypes.string.isRequired,\r\n searchOnAdd: PropTypes.bool.isRequired,\r\n rootFolderPath: PropTypes.string.isRequired,\r\n tmdbId: PropTypes.number.isRequired,\r\n title: PropTypes.string.isRequired,\r\n overview: PropTypes.string.isRequired,\r\n movies: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n genres: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n missingMovies: PropTypes.number.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n rowHeight: PropTypes.number.isRequired,\r\n posterHeight: PropTypes.number.isRequired,\r\n posterWidth: PropTypes.number.isRequired,\r\n overviewOptions: PropTypes.object.isRequired,\r\n showRelativeDates: PropTypes.bool.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n longDateFormat: PropTypes.string.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n isSelected: PropTypes.bool,\r\n onMonitorTogglePress: PropTypes.func.isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CollectionOverview;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { toggleCollectionMonitored } from 'Store/Actions/movieCollectionActions';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport CollectionOverview from './CollectionOverview';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createDimensionsSelector(),\r\n (dimensions) => {\r\n return {\r\n isSmallScreen: dimensions.isSmallScreen\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n toggleCollectionMonitored\r\n};\r\n\r\nclass CollectionOverviewConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onMonitorTogglePress = (monitored) => {\r\n this.props.toggleCollectionMonitored({\r\n collectionId: this.props.collectionId,\r\n monitored\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCollectionOverviewConnector.propTypes = {\r\n collectionId: PropTypes.number.isRequired,\r\n monitored: PropTypes.bool.isRequired,\r\n toggleCollectionMonitored: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CollectionOverviewConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { Grid, WindowScroller } from 'react-virtualized';\r\nimport CollectionItemConnector from 'Collection/CollectionItemConnector';\r\nimport Measure from 'Components/Measure';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\nimport hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';\r\nimport CollectionOverviewConnector from './CollectionOverviewConnector';\r\nimport styles from './CollectionOverviews.css';\r\n\r\n// Poster container dimensions\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(dimensions.movieIndexColumnPaddingSmallScreen);\r\n\r\nfunction calculatePosterWidth(posterSize, isSmallScreen) {\r\n const maxiumPosterWidth = isSmallScreen ? 152 : 162;\r\n\r\n if (posterSize === 'large') {\r\n return maxiumPosterWidth;\r\n }\r\n\r\n if (posterSize === 'medium') {\r\n return Math.floor(maxiumPosterWidth * 0.75);\r\n }\r\n\r\n return Math.floor(maxiumPosterWidth * 0.5);\r\n}\r\n\r\nfunction calculateRowHeight(posterHeight, sortKey, isSmallScreen, overviewOptions) {\r\n const heights = [\r\n overviewOptions.showPosters ? posterHeight : 75,\r\n isSmallScreen ? columnPaddingSmallScreen : columnPadding\r\n ];\r\n\r\n return heights.reduce((acc, height) => acc + height + 80, 0);\r\n}\r\n\r\nfunction calculatePosterHeight(posterWidth) {\r\n return Math.ceil((250 / 170) * posterWidth);\r\n}\r\n\r\nclass CollectionOverviews extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n width: 0,\r\n columnCount: 1,\r\n posterWidth: 162,\r\n posterHeight: 238,\r\n rowHeight: calculateRowHeight(238, null, props.isSmallScreen, {})\r\n };\r\n\r\n this._grid = null;\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const {\r\n items,\r\n sortKey,\r\n overviewOptions,\r\n jumpToCharacter,\r\n scrollTop,\r\n isSmallScreen\r\n } = this.props;\r\n\r\n const {\r\n width,\r\n rowHeight,\r\n scrollRestored\r\n } = this.state;\r\n\r\n if (prevProps.sortKey !== sortKey ||\r\n prevProps.overviewOptions !== overviewOptions) {\r\n this.calculateGrid(this.state.width, isSmallScreen);\r\n }\r\n\r\n if (\r\n this._grid &&\r\n (prevState.width !== width ||\r\n prevState.rowHeight !== rowHeight ||\r\n hasDifferentItemsOrOrder(prevProps.items, items) ||\r\n prevProps.overviewOptions !== overviewOptions)) {\r\n // recomputeGridSize also forces Grid to discard its cache of rendered cells\r\n this._grid.recomputeGridSize();\r\n }\r\n\r\n if (this._grid && scrollTop !== 0 && !scrollRestored) {\r\n this.setState({ scrollRestored: true });\r\n this._grid.scrollToPosition({ scrollTop });\r\n }\r\n\r\n if (jumpToCharacter != null && jumpToCharacter !== prevProps.jumpToCharacter) {\r\n const index = getIndexOfFirstCharacter(items, jumpToCharacter);\r\n\r\n if (this._grid && index != null) {\r\n\r\n this._grid.scrollToCell({\r\n rowIndex: index,\r\n columnIndex: 0\r\n });\r\n }\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n setGridRef = (ref) => {\r\n this._grid = ref;\r\n };\r\n\r\n calculateGrid = (width = this.state.width, isSmallScreen) => {\r\n const {\r\n sortKey,\r\n overviewOptions\r\n } = this.props;\r\n\r\n const posterWidth = overviewOptions.showPosters ? calculatePosterWidth(overviewOptions.size, isSmallScreen) : 0;\r\n const posterHeight = overviewOptions.showPosters ? calculatePosterHeight(posterWidth) : 0;\r\n const rowHeight = calculateRowHeight(posterHeight, sortKey, isSmallScreen, overviewOptions);\r\n\r\n this.setState({\r\n width,\r\n posterWidth,\r\n posterHeight,\r\n rowHeight\r\n });\r\n };\r\n\r\n cellRenderer = ({ key, rowIndex, style }) => {\r\n const {\r\n items,\r\n sortKey,\r\n overviewOptions,\r\n showRelativeDates,\r\n shortDateFormat,\r\n longDateFormat,\r\n timeFormat,\r\n isSmallScreen,\r\n selectedState,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n const {\r\n posterWidth,\r\n posterHeight,\r\n rowHeight\r\n } = this.state;\r\n\r\n const collection = items[rowIndex];\r\n\r\n if (!collection) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = ({ width }) => {\r\n this.calculateGrid(width, this.props.isSmallScreen);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSmallScreen,\r\n scroller,\r\n items,\r\n selectedState\r\n } = this.props;\r\n\r\n const {\r\n width,\r\n rowHeight\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {({ height, registerChild, onChildScroll, scrollTop }) => {\r\n if (!height) {\r\n return
;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nCollectionOverviews.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n sortKey: PropTypes.string,\r\n overviewOptions: PropTypes.object.isRequired,\r\n jumpToCharacter: PropTypes.string,\r\n scrollTop: PropTypes.number,\r\n scroller: PropTypes.instanceOf(Element).isRequired,\r\n showRelativeDates: PropTypes.bool.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n longDateFormat: PropTypes.string.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n selectedState: PropTypes.object.isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CollectionOverviews;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"CollectionOverviews-grid-O3z4k\",\"container\":\"CollectionOverviews-container-CtRkv\",\"content\":\"CollectionOverviews-content-E_Y_Q\",\"externalLinks\":\"CollectionOverviews-externalLinks-lpjqw\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport CollectionOverviews from './CollectionOverviews';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.movieCollections.overviewOptions,\r\n createUISettingsSelector(),\r\n createDimensionsSelector(),\r\n (overviewOptions, uiSettings, dimensions) => {\r\n return {\r\n overviewOptions,\r\n showRelativeDates: uiSettings.showRelativeDates,\r\n shortDateFormat: uiSettings.shortDateFormat,\r\n longDateFormat: uiSettings.longDateFormat,\r\n timeFormat: uiSettings.timeFormat,\r\n isSmallScreen: dimensions.isSmallScreen\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(CollectionOverviews);\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nconst posterSizeOptions = [\r\n {\r\n key: 'small',\r\n get value() {\r\n return translate('Small');\r\n }\r\n },\r\n {\r\n key: 'medium',\r\n get value() {\r\n return translate('Medium');\r\n }\r\n },\r\n {\r\n key: 'large',\r\n get value() {\r\n return translate('Large');\r\n }\r\n }\r\n];\r\n\r\nclass CollectionOverviewOptionsModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n detailedProgressBar: props.detailedProgressBar,\r\n size: props.size,\r\n showDetails: props.showDetails,\r\n showOverview: props.showOverview,\r\n showPosters: props.showPosters\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n detailedProgressBar,\r\n size,\r\n showDetails,\r\n showOverview,\r\n showPosters\r\n } = this.props;\r\n\r\n const state = {};\r\n\r\n if (detailedProgressBar !== prevProps.detailedProgressBar) {\r\n state.detailedProgressBar = detailedProgressBar;\r\n }\r\n\r\n if (size !== prevProps.size) {\r\n state.size = size;\r\n }\r\n\r\n if (showDetails !== prevProps.showDetails) {\r\n state.showDetails = showDetails;\r\n }\r\n\r\n if (showOverview !== prevProps.showOverview) {\r\n state.showOverview = showOverview;\r\n }\r\n\r\n if (showPosters !== prevProps.showPosters) {\r\n state.showPosters = showPosters;\r\n }\r\n\r\n if (!_.isEmpty(state)) {\r\n this.setState(state);\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChangeOverviewOption = ({ name, value }) => {\r\n this.setState({\r\n [name]: value\r\n }, () => {\r\n this.props.onChangeOverviewOption({ [name]: value });\r\n });\r\n };\r\n\r\n onChangeOption = ({ name, value }) => {\r\n this.setState({\r\n [name]: value\r\n }, () => {\r\n this.props.onChangeOption({\r\n [name]: value\r\n });\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n size,\r\n detailedProgressBar,\r\n showDetails,\r\n showPosters,\r\n showOverview\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {translate('CollectionOptions')}\r\n \r\n\r\n \r\n
\r\n \r\n {translate('PosterSize')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('DetailedProgressBar')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowCollectionDetails')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowOverview')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowPosters')}\r\n\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nCollectionOverviewOptionsModalContent.propTypes = {\r\n detailedProgressBar: PropTypes.bool.isRequired,\r\n size: PropTypes.string.isRequired,\r\n showDetails: PropTypes.bool.isRequired,\r\n showOverview: PropTypes.bool.isRequired,\r\n showPosters: PropTypes.bool.isRequired,\r\n onChangeOverviewOption: PropTypes.func.isRequired,\r\n onChangeOption: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CollectionOverviewOptionsModalContent;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { setMovieCollectionsOption, setMovieCollectionsOverviewOption } from 'Store/Actions/movieCollectionActions';\r\nimport CollectionOverviewOptionsModalContent from './CollectionOverviewOptionsModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.movieCollections,\r\n (movieCollections) => {\r\n return {\r\n ...movieCollections.options,\r\n ...movieCollections.overviewOptions\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onChangeOverviewOption(payload) {\r\n dispatch(setMovieCollectionsOverviewOption(payload));\r\n },\r\n onChangeOption(payload) {\r\n dispatch(setMovieCollectionsOption(payload));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(CollectionOverviewOptionsModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport CollectionOverviewOptionsModalContentConnector from './CollectionOverviewOptionsModalContentConnector';\r\n\r\nfunction CollectionOverviewOptionsModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nCollectionOverviewOptionsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CollectionOverviewOptionsModal;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageJumpBar from 'Components/Page/PageJumpBar';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport { align, icons, kinds, sortDirections } from 'Helpers/Props';\r\nimport styles from 'Movie/Index/MovieIndex.css';\r\nimport hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport selectAll from 'Utilities/Table/selectAll';\r\nimport toggleSelected from 'Utilities/Table/toggleSelected';\r\nimport CollectionFooter from './CollectionFooter';\r\nimport CollectionFilterMenu from './Menus/CollectionFilterMenu';\r\nimport CollectionSortMenu from './Menus/CollectionSortMenu';\r\nimport NoCollection from './NoCollection';\r\nimport CollectionOverviewsConnector from './Overview/CollectionOverviewsConnector';\r\nimport CollectionOverviewOptionsModal from './Overview/Options/CollectionOverviewOptionsModal';\r\n\r\nfunction getViewComponent(view) {\r\n return CollectionOverviewsConnector;\r\n}\r\n\r\nclass Collection extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.scrollerRef = React.createRef();\r\n\r\n this.state = {\r\n jumpBarItems: { order: [] },\r\n jumpToCharacter: null,\r\n isPosterOptionsModalOpen: false,\r\n isOverviewOptionsModalOpen: false,\r\n isConfirmSearchModalOpen: false,\r\n searchType: null,\r\n allSelected: false,\r\n allUnselected: false,\r\n lastToggled: null,\r\n selectedState: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setJumpBarItems();\r\n this.setSelectedState();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n items,\r\n sortKey,\r\n sortDirection\r\n } = this.props;\r\n\r\n if (sortKey !== prevProps.sortKey ||\r\n sortDirection !== prevProps.sortDirection ||\r\n hasDifferentItemsOrOrder(prevProps.items, items)\r\n ) {\r\n this.setJumpBarItems();\r\n this.setSelectedState();\r\n }\r\n\r\n if (this.state.jumpToCharacter != null) {\r\n this.setState({ jumpToCharacter: null });\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n getSelectedIds = () => {\r\n if (this.state.allUnselected) {\r\n return [];\r\n }\r\n return getSelectedIds(this.state.selectedState);\r\n };\r\n\r\n setSelectedState() {\r\n const {\r\n items\r\n } = this.props;\r\n\r\n const {\r\n selectedState\r\n } = this.state;\r\n\r\n const newSelectedState = {};\r\n\r\n items.forEach((collection) => {\r\n const isItemSelected = selectedState[collection.id];\r\n\r\n if (isItemSelected) {\r\n newSelectedState[collection.id] = isItemSelected;\r\n } else {\r\n newSelectedState[collection.id] = false;\r\n }\r\n });\r\n\r\n const selectedCount = getSelectedIds(newSelectedState).length;\r\n const newStateCount = Object.keys(newSelectedState).length;\r\n let isAllSelected = false;\r\n let isAllUnselected = false;\r\n\r\n if (selectedCount === 0) {\r\n isAllUnselected = true;\r\n } else if (selectedCount === newStateCount) {\r\n isAllSelected = true;\r\n }\r\n\r\n this.setState({ selectedState: newSelectedState, allSelected: isAllSelected, allUnselected: isAllUnselected });\r\n }\r\n\r\n setJumpBarItems() {\r\n const {\r\n items,\r\n sortKey,\r\n sortDirection\r\n } = this.props;\r\n\r\n // Reset if not sorting by sortTitle\r\n if (sortKey !== 'sortTitle') {\r\n this.setState({ jumpBarItems: { order: [] } });\r\n return;\r\n }\r\n\r\n const characters = _.reduce(items, (acc, item) => {\r\n let char = item.sortTitle.charAt(0);\r\n\r\n if (!isNaN(char)) {\r\n char = '#';\r\n }\r\n\r\n if (char in acc) {\r\n acc[char] = acc[char] + 1;\r\n } else {\r\n acc[char] = 1;\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\n const order = Object.keys(characters).sort();\r\n\r\n // Reverse if sorting descending\r\n if (sortDirection === sortDirections.DESCENDING) {\r\n order.reverse();\r\n }\r\n\r\n const jumpBarItems = {\r\n characters,\r\n order\r\n };\r\n\r\n this.setState({ jumpBarItems });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onOverviewOptionsPress = () => {\r\n this.setState({ isOverviewOptionsModalOpen: true });\r\n };\r\n\r\n onOverviewOptionsModalClose = () => {\r\n this.setState({ isOverviewOptionsModalOpen: false });\r\n };\r\n\r\n onJumpBarItemPress = (jumpToCharacter) => {\r\n this.setState({ jumpToCharacter });\r\n };\r\n\r\n onSelectAllChange = ({ value }) => {\r\n this.setState(selectAll(this.state.selectedState, value));\r\n };\r\n\r\n onSelectAllPress = () => {\r\n this.onSelectAllChange({ value: !this.state.allSelected });\r\n };\r\n\r\n onRefreshMovieCollectionsPress = () => {\r\n this.props.onRefreshMovieCollectionsPress();\r\n };\r\n\r\n onSelectedChange = ({ id, value, shiftKey = false }) => {\r\n this.setState((state) => {\r\n return toggleSelected(state, this.props.items, id, value, shiftKey, 'id');\r\n });\r\n };\r\n\r\n onUpdateSelectedPress = (changes) => {\r\n this.props.onUpdateSelectedPress({\r\n collectionIds: this.getSelectedIds(),\r\n ...changes\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n totalItems,\r\n items,\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n sortKey,\r\n sortDirection,\r\n view,\r\n onSortSelect,\r\n onFilterSelect,\r\n onScroll,\r\n isRefreshingCollections,\r\n isSaving,\r\n isAdding,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n jumpBarItems,\r\n jumpToCharacter,\r\n isOverviewOptionsModalOpen,\r\n selectedState,\r\n allSelected,\r\n allUnselected\r\n } = this.state;\r\n\r\n const selectedMovieIds = this.getSelectedIds();\r\n\r\n const ViewComponent = getViewComponent(view);\r\n const isLoaded = !!(!error && isPopulated && items.length && this.scrollerRef.current);\r\n const hasNoCollection = !totalItems;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {\r\n view === 'overview' ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n (view === 'posters' || view === 'overview') &&\r\n \r\n }\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n \r\n {\r\n isFetching && !isPopulated &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('UnableToLoadCollections')}\r\n \r\n }\r\n\r\n {\r\n isLoaded &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {\r\n !error && isPopulated && !items.length &&\r\n \r\n }\r\n \r\n\r\n {\r\n isLoaded && !!jumpBarItems.order.length &&\r\n \r\n }\r\n
\r\n\r\n {\r\n isLoaded &&\r\n \r\n }\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nCollection.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n isAdding: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n totalItems: PropTypes.number.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n sortKey: PropTypes.string,\r\n sortDirection: PropTypes.oneOf(sortDirections.all),\r\n view: PropTypes.string.isRequired,\r\n isRefreshingCollections: PropTypes.bool.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n onSortSelect: PropTypes.func.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired,\r\n onScroll: PropTypes.func.isRequired,\r\n onUpdateSelectedPress: PropTypes.func.isRequired,\r\n onRefreshMovieCollectionsPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Collection;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport withScrollPosition from 'Components/withScrollPosition';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { saveMovieCollections, setMovieCollectionsFilter, setMovieCollectionsSort } from 'Store/Actions/movieCollectionActions';\r\nimport { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport scrollPositions from 'Store/scrollPositions';\r\nimport createCollectionClientSideCollectionItemsSelector from 'Store/Selectors/createCollectionClientSideCollectionItemsSelector';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';\r\nimport Collection from './Collection';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createCollectionClientSideCollectionItemsSelector('movieCollections'),\r\n createCommandExecutingSelector(commandNames.REFRESH_COLLECTIONS),\r\n createDimensionsSelector(),\r\n (\r\n collections,\r\n isRefreshingCollections,\r\n dimensionsState\r\n ) => {\r\n return {\r\n ...collections,\r\n isRefreshingCollections,\r\n isSmallScreen: dimensionsState.isSmallScreen\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n dispatchFetchRootFolders() {\r\n dispatch(fetchRootFolders());\r\n },\r\n dispatchFetchQueueDetails() {\r\n dispatch(fetchQueueDetails());\r\n },\r\n dispatchClearQueueDetails() {\r\n dispatch(clearQueueDetails());\r\n },\r\n onUpdateSelectedPress(payload) {\r\n dispatch(saveMovieCollections(payload));\r\n },\r\n onSortSelect(sortKey) {\r\n dispatch(setMovieCollectionsSort({ sortKey }));\r\n },\r\n onFilterSelect(selectedFilterKey) {\r\n dispatch(setMovieCollectionsFilter({ selectedFilterKey }));\r\n },\r\n onRefreshMovieCollectionsPress() {\r\n dispatch(executeCommand({\r\n name: commandNames.REFRESH_COLLECTIONS\r\n }));\r\n }\r\n };\r\n}\r\n\r\nclass CollectionConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n registerPagePopulator(this.repopulate);\r\n this.props.dispatchFetchRootFolders();\r\n this.props.dispatchFetchQueueDetails();\r\n }\r\n\r\n componentWillUnmount() {\r\n unregisterPagePopulator(this.repopulate);\r\n this.props.dispatchClearQueueDetails();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onScroll = ({ scrollTop }) => {\r\n scrollPositions.movieCollections = scrollTop;\r\n };\r\n\r\n onUpdateSelectedPress = (payload) => {\r\n this.props.onUpdateSelectedPress(payload);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCollectionConnector.propTypes = {\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n view: PropTypes.string.isRequired,\r\n onUpdateSelectedPress: PropTypes.func.isRequired,\r\n dispatchFetchRootFolders: PropTypes.func.isRequired,\r\n dispatchFetchQueueDetails: PropTypes.func.isRequired,\r\n dispatchClearQueueDetails: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withScrollPosition(\r\n connect(createMapStateToProps, createMapDispatchToProps)(CollectionConnector),\r\n 'movieCollections'\r\n);\r\n","import React from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './NotFound.css';\r\n\r\ninterface NotFoundProps {\r\n message?: string;\r\n}\r\n\r\nfunction NotFound(props: NotFoundProps) {\r\n const { message = translate('DefaultNotFoundMessage') } = props;\r\n\r\n return (\r\n \r\n
\r\n
{message}
\r\n\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default NotFound;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"NotFound-container-fJ0iq\",\"message\":\"NotFound-message-Qdgw5\",\"image\":\"NotFound-image-FkW9i\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport SpinnerIcon from 'Components/SpinnerIcon';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './DiscoverMovieFooterLabel.css';\r\n\r\nfunction DiscoverMovieFooterLabel(props) {\r\n const {\r\n className,\r\n label,\r\n isSaving\r\n } = props;\r\n\r\n return (\r\n
\r\n {label}\r\n\r\n {\r\n isSaving &&\r\n \r\n }\r\n
\r\n );\r\n}\r\n\r\nDiscoverMovieFooterLabel.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n isSaving: PropTypes.bool.isRequired\r\n};\r\n\r\nDiscoverMovieFooterLabel.defaultProps = {\r\n className: styles.label\r\n};\r\n\r\nexport default DiscoverMovieFooterLabel;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"label\":\"DiscoverMovieFooterLabel-label-Kw8RF\",\"savingIcon\":\"DiscoverMovieFooterLabel-savingIcon-lOnOm\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ExcludeMovieModalContent.css';\r\n\r\nclass ExcludeMovieModalContent extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onExcludeMovieConfirmed = () => {\r\n this.props.onExcludePress();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n tmdbId,\r\n title,\r\n onModalClose\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n Exclude - {title} ({tmdbId})\r\n \r\n\r\n \r\n
\r\n {translate('ExcludeTitle', [title])}\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n\r\n \r\n Exclude\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nExcludeMovieModalContent.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n title: PropTypes.string.isRequired,\r\n onExcludePress: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ExcludeMovieModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"pathContainer\":\"ExcludeMovieModalContent-pathContainer-Y0TaL\",\"pathIcon\":\"ExcludeMovieModalContent-pathIcon-i1hDd\",\"deleteFilesMessage\":\"ExcludeMovieModalContent-deleteFilesMessage-ldhoa\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { addImportListExclusions } from 'Store/Actions/discoverMovieActions';\r\nimport ExcludeMovieModalContent from './ExcludeMovieModalContent';\r\n\r\nconst mapDispatchToProps = {\r\n addImportListExclusions\r\n};\r\n\r\nclass ExcludeMovieModalContentConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onExcludePress = () => {\r\n this.props.addImportListExclusions({ ids: [this.props.tmdbId] });\r\n\r\n this.props.onModalClose(true);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nExcludeMovieModalContentConnector.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n addImportListExclusions: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(undefined, mapDispatchToProps)(ExcludeMovieModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport ExcludeMovieModalContentConnector from './ExcludeMovieModalContentConnector';\r\n\r\nfunction ExcludeMovieModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nExcludeMovieModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ExcludeMovieModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"inputContainer\":\"DiscoverMovieFooter-inputContainer-opAGW\",\"buttonContainer\":\"DiscoverMovieFooter-buttonContainer-EC3Q4\",\"buttonContainerContent\":\"DiscoverMovieFooter-buttonContainerContent-NK0yA\",\"buttons\":\"DiscoverMovieFooter-buttons-LRPjD\",\"addSelectedButton\":\"DiscoverMovieFooter-addSelectedButton-DKkMy SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\",\"excludeSelectedButton\":\"DiscoverMovieFooter-excludeSelectedButton-jTFAd SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\",\"selectedMovieLabel\":\"DiscoverMovieFooter-selectedMovieLabel-JJ3HT\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport AvailabilitySelectInput from 'Components/Form/AvailabilitySelectInput';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport QualityProfileSelectInputConnector from 'Components/Form/QualityProfileSelectInputConnector';\r\nimport RootFolderSelectInputConnector from 'Components/Form/RootFolderSelectInputConnector';\r\nimport SelectInput from 'Components/Form/SelectInput';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport PageContentFooter from 'Components/Page/PageContentFooter';\r\nimport { kinds } from 'Helpers/Props';\r\nimport monitorOptions from 'Utilities/Movie/monitorOptions';\r\nimport translate from 'Utilities/String/translate';\r\nimport DiscoverMovieFooterLabel from './DiscoverMovieFooterLabel';\r\nimport ExcludeMovieModal from './Exclusion/ExcludeMovieModal';\r\nimport styles from './DiscoverMovieFooter.css';\r\n\r\nclass DiscoverMovieFooter extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n const {\r\n defaultMonitor,\r\n defaultQualityProfileId,\r\n defaultMinimumAvailability,\r\n defaultRootFolderPath,\r\n defaultSearchForMovie\r\n } = props;\r\n\r\n this.state = {\r\n monitor: defaultMonitor,\r\n qualityProfileId: defaultQualityProfileId,\r\n minimumAvailability: defaultMinimumAvailability,\r\n rootFolderPath: defaultRootFolderPath,\r\n searchForMovie: defaultSearchForMovie,\r\n isExcludeMovieModalOpen: false,\r\n destinationRootFolder: null\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n defaultMonitor,\r\n defaultQualityProfileId,\r\n defaultMinimumAvailability,\r\n defaultRootFolderPath,\r\n defaultSearchForMovie\r\n } = this.props;\r\n\r\n const {\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n rootFolderPath,\r\n searchForMovie\r\n } = this.state;\r\n\r\n const newState = {};\r\n\r\n if (monitor !== defaultMonitor) {\r\n newState.monitor = defaultMonitor;\r\n }\r\n\r\n if (qualityProfileId !== defaultQualityProfileId) {\r\n newState.qualityProfileId = defaultQualityProfileId;\r\n }\r\n\r\n if (minimumAvailability !== defaultMinimumAvailability) {\r\n newState.minimumAvailability = defaultMinimumAvailability;\r\n }\r\n\r\n if (rootFolderPath !== defaultRootFolderPath) {\r\n newState.rootFolderPath = defaultRootFolderPath;\r\n }\r\n\r\n if (searchForMovie !== defaultSearchForMovie) {\r\n newState.searchForMovie = defaultSearchForMovie;\r\n }\r\n\r\n if (!_.isEmpty(newState)) {\r\n this.setState(newState);\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onExcludeSelectedPress = () => {\r\n this.setState({ isExcludeMovieModalOpen: true });\r\n };\r\n\r\n onExcludeMovieModalClose = () => {\r\n this.setState({ isExcludeMovieModalOpen: false });\r\n };\r\n\r\n onAddMoviesPress = () => {\r\n const {\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n rootFolderPath,\r\n searchForMovie\r\n } = this.state;\r\n\r\n const addOptions = {\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n rootFolderPath,\r\n searchForMovie\r\n };\r\n\r\n this.props.onAddMoviesPress({ addOptions });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n selectedIds,\r\n selectedCount,\r\n isAdding,\r\n isExcluding,\r\n onInputChange\r\n } = this.props;\r\n\r\n const {\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n rootFolderPath,\r\n searchForMovie,\r\n isExcludeMovieModalOpen\r\n } = this.state;\r\n\r\n return (\r\n \r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n\r\n
\r\n
\r\n \r\n {translate('AddMovies')}\r\n \r\n\r\n \r\n {translate('AddExclusion')}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieFooter.propTypes = {\r\n selectedIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n selectedCount: PropTypes.number.isRequired,\r\n isAdding: PropTypes.bool.isRequired,\r\n isExcluding: PropTypes.bool.isRequired,\r\n defaultMonitor: PropTypes.string.isRequired,\r\n defaultQualityProfileId: PropTypes.number,\r\n defaultMinimumAvailability: PropTypes.string,\r\n defaultRootFolderPath: PropTypes.string,\r\n defaultSearchForMovie: PropTypes.bool,\r\n onInputChange: PropTypes.func.isRequired,\r\n onAddMoviesPress: PropTypes.func.isRequired,\r\n onExcludeMoviesPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovieFooter;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { setAddMovieDefault } from 'Store/Actions/discoverMovieActions';\r\nimport DiscoverMovieFooter from './DiscoverMovieFooter';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.discoverMovie,\r\n (state) => state.settings.importListExclusions,\r\n (state, { selectedIds }) => selectedIds,\r\n (discoverMovie, importListExclusions, selectedIds) => {\r\n const {\r\n monitor: defaultMonitor,\r\n qualityProfileId: defaultQualityProfileId,\r\n minimumAvailability: defaultMinimumAvailability,\r\n rootFolderPath: defaultRootFolderPath,\r\n searchForMovie: defaultSearchForMovie\r\n } = discoverMovie.defaults;\r\n\r\n const {\r\n isAdding\r\n } = discoverMovie;\r\n\r\n const {\r\n isSaving\r\n } = importListExclusions;\r\n\r\n return {\r\n selectedCount: selectedIds.length,\r\n isAdding,\r\n isExcluding: isSaving,\r\n defaultMonitor,\r\n defaultQualityProfileId,\r\n defaultMinimumAvailability,\r\n defaultRootFolderPath,\r\n defaultSearchForMovie\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setAddMovieDefault\r\n};\r\n\r\nclass DiscoverMovieFooterConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setAddMovieDefault({ [name]: value });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieFooterConnector.propTypes = {\r\n setAddMovieDefault: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(DiscoverMovieFooterConnector);\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport FilterModal from 'Components/Filter/FilterModal';\r\nimport { setListMovieFilter } from 'Store/Actions/discoverMovieActions';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.discoverMovie.items,\r\n (state) => state.discoverMovie.filterBuilderProps,\r\n (sectionItems, filterBuilderProps) => {\r\n return {\r\n sectionItems,\r\n filterBuilderProps,\r\n customFilterType: 'discoverMovie'\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSetFilter: setListMovieFilter\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(FilterModal);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport DiscoverMovieFilterModalConnector from 'DiscoverMovie/DiscoverMovieFilterModalConnector';\r\nimport { align } from 'Helpers/Props';\r\n\r\nfunction DiscoverMovieFilterMenu(props) {\r\n const {\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n isDisabled,\r\n onFilterSelect\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nDiscoverMovieFilterMenu.propTypes = {\r\n selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired\r\n};\r\n\r\nDiscoverMovieFilterMenu.defaultProps = {\r\n showCustomFilters: false\r\n};\r\n\r\nexport default DiscoverMovieFilterMenu;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport SortMenu from 'Components/Menu/SortMenu';\r\nimport SortMenuItem from 'Components/Menu/SortMenuItem';\r\nimport { align, sortDirections } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction DiscoverMovieSortMenu(props) {\r\n const {\r\n sortKey,\r\n sortDirection,\r\n isDisabled,\r\n onSortSelect\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {translate('Status')}\r\n \r\n\r\n \r\n {translate('Title')}\r\n \r\n\r\n \r\n {translate('Studio')}\r\n \r\n\r\n \r\n {translate('InCinemas')}\r\n \r\n\r\n \r\n {translate('DigitalRelease')}\r\n \r\n\r\n \r\n {translate('PhysicalRelease')}\r\n \r\n\r\n \r\n {translate('Runtime')}\r\n \r\n\r\n \r\n {translate('TmdbRating')}\r\n \r\n\r\n \r\n {translate('ImdbRating')}\r\n \r\n\r\n \r\n {translate('RottenTomatoesRating')}\r\n \r\n\r\n \r\n {translate('TraktRating')}\r\n \r\n\r\n \r\n {translate('Certification')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nDiscoverMovieSortMenu.propTypes = {\r\n sortKey: PropTypes.string,\r\n sortDirection: PropTypes.oneOf(sortDirections.all),\r\n isDisabled: PropTypes.bool.isRequired,\r\n onSortSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovieSortMenu;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton';\r\nimport { align, icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction ViewMenu(props) {\r\n const {\r\n children,\r\n isDisabled,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nViewMenu.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n alignMenu: PropTypes.oneOf([align.LEFT, align.RIGHT])\r\n};\r\n\r\nViewMenu.defaultProps = {\r\n isDisabled: false\r\n};\r\n\r\nexport default ViewMenu;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport ViewMenu from 'Components/Menu/ViewMenu';\r\nimport ViewMenuItem from 'Components/Menu/ViewMenuItem';\r\nimport { align } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction DiscoverMovieViewMenu(props) {\r\n const {\r\n view,\r\n isDisabled,\r\n onViewSelect\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {translate('Table')}\r\n \r\n\r\n \r\n {translate('Posters')}\r\n \r\n\r\n \r\n {translate('Overview')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nDiscoverMovieViewMenu.propTypes = {\r\n view: PropTypes.string.isRequired,\r\n isDisabled: PropTypes.bool.isRequired,\r\n onViewSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovieViewMenu;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"NoDiscoverMovie-message-EwCya\",\"buttonContainer\":\"NoDiscoverMovie-buttonContainer-N_Xqp\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './NoDiscoverMovie.css';\r\n\r\nfunction NoDiscoverMovie(props) {\r\n const { totalItems } = props;\r\n\r\n if (totalItems > 0) {\r\n return (\r\n
\r\n
\r\n {translate('AllMoviesHiddenDueToFilter')}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {translate('NoListRecommendations')}\r\n
\r\n\r\n
\r\n \r\n {translate('ImportExistingMovies')}\r\n \r\n
\r\n\r\n
\r\n \r\n {translate('AddNewMovie')}\r\n \r\n
\r\n\r\n
\r\n \r\n {translate('AddImportList')}\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nNoDiscoverMovie.propTypes = {\r\n totalItems: PropTypes.number.isRequired\r\n};\r\n\r\nexport default NoDiscoverMovie;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createDiscoverMovieSelector from 'Store/Selectors/createDiscoverMovieSelector';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createDiscoverMovieSelector(),\r\n (\r\n movie\r\n ) => {\r\n\r\n // If a movie is deleted this selector may fire before the parent\r\n // selecors, which will result in an undefined movie, if that happens\r\n // we want to return early here and again in the render function to avoid\r\n // trying to show a movie that has no information available.\r\n\r\n if (!movie) {\r\n return {};\r\n }\r\n\r\n return {\r\n ...movie\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass DiscoverMovieItemConnector extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n tmdbId,\r\n component: ItemComponent,\r\n ...otherProps\r\n } = this.props;\r\n\r\n if (!tmdbId) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieItemConnector.propTypes = {\r\n tmdbId: PropTypes.number,\r\n component: PropTypes.elementType.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps)(DiscoverMovieItemConnector);\r\n","import { createSelector } from 'reselect';\r\n\r\nfunction createDiscoverMovieSelector() {\r\n return createSelector(\r\n (state, { movieId }) => movieId,\r\n (state) => state.discoverMovie,\r\n (movieId, allMovies) => {\r\n return allMovies.items.find((movie) => movie.tmdbId === movieId);\r\n }\r\n );\r\n}\r\n\r\nexport default createDiscoverMovieSelector;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { kinds, sizes } from 'Helpers/Props';\r\nimport Label from './Label';\r\nimport styles from './ImportListList.css';\r\n\r\nfunction ImportListList({ lists, importListList }) {\r\n return (\r\n
\r\n {\r\n lists.map((t) => {\r\n const list = _.find(importListList, { id: t });\r\n\r\n if (!list) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {list.name}\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n}\r\n\r\nImportListList.propTypes = {\r\n lists: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n importListList: PropTypes.arrayOf(PropTypes.object).isRequired\r\n};\r\n\r\nImportListList.defaultProps = {\r\n lists: []\r\n};\r\n\r\nexport default ImportListList;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"lists\":\"ImportListList-lists-lAKKb\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createImportListSelector from 'Store/Selectors/createImportListSelector';\r\nimport ImportListList from './ImportListList';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createImportListSelector(),\r\n (importListList) => {\r\n return {\r\n importListList\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(ImportListList);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AddNewMovieModalContent from 'AddMovie/AddNewMovie/AddNewMovieModalContent';\r\nimport { addMovie, setAddMovieDefault } from 'Store/Actions/discoverMovieActions';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.discoverMovie,\r\n createDimensionsSelector(),\r\n createSystemStatusSelector(),\r\n (discoverMovieState, dimensions, systemStatus) => {\r\n const {\r\n isAdding,\r\n addError,\r\n defaults\r\n } = discoverMovieState;\r\n\r\n const {\r\n settings,\r\n validationErrors,\r\n validationWarnings\r\n } = selectSettings(defaults, {}, addError);\r\n\r\n return {\r\n isAdding,\r\n addError,\r\n isSmallScreen: dimensions.isSmallScreen,\r\n validationErrors,\r\n validationWarnings,\r\n isWindows: systemStatus.isWindows,\r\n ...settings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setAddMovieDefault,\r\n addMovie\r\n};\r\n\r\nclass AddNewDiscoverMovieModalContentConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setAddMovieDefault({ [name]: value });\r\n };\r\n\r\n onAddMoviePress = () => {\r\n const {\r\n tmdbId,\r\n rootFolderPath,\r\n monitor,\r\n qualityProfileId,\r\n minimumAvailability,\r\n searchForMovie,\r\n tags\r\n } = this.props;\r\n\r\n this.props.addMovie({\r\n tmdbId,\r\n rootFolderPath: rootFolderPath.value,\r\n monitor: monitor.value,\r\n qualityProfileId: qualityProfileId.value,\r\n minimumAvailability: minimumAvailability.value,\r\n searchForMovie: searchForMovie.value,\r\n tags: tags.value\r\n });\r\n\r\n this.props.onModalClose(true);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddNewDiscoverMovieModalContentConnector.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n rootFolderPath: PropTypes.object,\r\n monitor: PropTypes.object.isRequired,\r\n qualityProfileId: PropTypes.object,\r\n minimumAvailability: PropTypes.object.isRequired,\r\n searchForMovie: PropTypes.object.isRequired,\r\n tags: PropTypes.object.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n setAddMovieDefault: PropTypes.func.isRequired,\r\n addMovie: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddNewDiscoverMovieModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddNewDiscoverMovieModalContentConnector from './AddNewDiscoverMovieModalContentConnector';\r\n\r\nfunction AddNewDiscoverMovieModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddNewDiscoverMovieModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNewDiscoverMovieModal;\r\n","import React from 'react';\r\nimport Icon, { IconProps } from 'Components/Icon';\r\nimport styles from './DiscoverMovieOverviewInfoRow.css';\r\n\r\ninterface DiscoverMovieOverviewInfoRowProps {\r\n title?: string;\r\n iconName: IconProps['name'];\r\n label: string | null;\r\n}\r\n\r\nfunction DiscoverMovieOverviewInfoRow(\r\n props: DiscoverMovieOverviewInfoRowProps\r\n) {\r\n const { title, iconName, label } = props;\r\n\r\n return (\r\n
\r\n \r\n\r\n {label}\r\n
\r\n );\r\n}\r\n\r\nexport default DiscoverMovieOverviewInfoRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"infoRow\":\"DiscoverMovieOverviewInfoRow-infoRow-r_Otk\",\"icon\":\"DiscoverMovieOverviewInfoRow-icon-Sr2lC\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { icons } from 'Helpers/Props';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport translate from 'Utilities/String/translate';\r\nimport DiscoverMovieOverviewInfoRow from './DiscoverMovieOverviewInfoRow';\r\nimport styles from './DiscoverMovieOverviewInfo.css';\r\n\r\nconst infoRowHeight = parseInt(dimensions.movieIndexOverviewInfoRowHeight);\r\n\r\nconst rows = [\r\n {\r\n name: 'year',\r\n showProp: 'showYear',\r\n valueProp: 'year'\r\n },\r\n {\r\n name: 'studio',\r\n showProp: 'showStudio',\r\n valueProp: 'studio'\r\n },\r\n {\r\n name: 'genres',\r\n showProp: 'showGenres',\r\n valueProp: 'genres'\r\n },\r\n {\r\n name: 'tmdbRating',\r\n showProp: 'showTmdbRating',\r\n valueProp: 'ratings.tmdb.value'\r\n },\r\n {\r\n name: 'imdbRating',\r\n showProp: 'showImdbRating',\r\n valueProp: 'ratings.imdb.value'\r\n },\r\n {\r\n name: 'certification',\r\n showProp: 'showCertification',\r\n valueProp: 'certification'\r\n }\r\n];\r\n\r\nfunction isVisible(row, props) {\r\n const {\r\n name,\r\n showProp,\r\n valueProp\r\n } = row;\r\n\r\n return _.has(props, valueProp) && _.get(props, valueProp) !== null && (props[showProp] || props.sortKey === name);\r\n}\r\n\r\nfunction getInfoRowProps(row, props) {\r\n const { name } = row;\r\n\r\n if (name === 'year') {\r\n return {\r\n title: translate('Year'),\r\n iconName: icons.CALENDAR,\r\n label: props.year\r\n };\r\n }\r\n\r\n if (name === 'studio') {\r\n return {\r\n title: translate('Studio'),\r\n iconName: icons.STUDIO,\r\n label: props.studio\r\n };\r\n }\r\n\r\n if (name === 'genres') {\r\n return {\r\n title: translate('Genres'),\r\n iconName: icons.GENRE,\r\n label: props.genres.slice(0, 2).join(', ')\r\n };\r\n }\r\n\r\n if (name === 'tmdbRating' && !!props.ratings.tmdb) {\r\n return {\r\n title: translate('TmdbRating'),\r\n iconName: icons.HEART,\r\n label: `${(props.ratings.tmdb.value * 10).toFixed()}%`\r\n };\r\n }\r\n\r\n if (name === 'imdbRating' && !!props.ratings.imdb) {\r\n return {\r\n title: translate('ImdbRating'),\r\n iconName: icons.IMDB,\r\n label: `${(props.ratings.imdb.value).toFixed(1)}`\r\n };\r\n }\r\n\r\n if (name === 'certification') {\r\n return {\r\n title: translate('Certification'),\r\n iconName: icons.FILM,\r\n label: props.certification\r\n };\r\n }\r\n}\r\n\r\nfunction DiscoverMovieOverviewInfo(props) {\r\n const {\r\n height\r\n } = props;\r\n\r\n let shownRows = 1;\r\n const maxRows = Math.floor(height / (infoRowHeight + 4));\r\n\r\n return (\r\n
\r\n {\r\n rows.map((row) => {\r\n if (!isVisible(row, props)) {\r\n return null;\r\n }\r\n\r\n if (shownRows >= maxRows) {\r\n return null;\r\n }\r\n\r\n shownRows++;\r\n\r\n const infoRowProps = getInfoRowProps(row, props);\r\n\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n}\r\n\r\nDiscoverMovieOverviewInfo.propTypes = {\r\n height: PropTypes.number.isRequired,\r\n showYear: PropTypes.bool.isRequired,\r\n showStudio: PropTypes.bool.isRequired,\r\n showGenres: PropTypes.bool.isRequired,\r\n showTmdbRating: PropTypes.bool.isRequired,\r\n showImdbRating: PropTypes.bool.isRequired,\r\n showCertification: PropTypes.bool.isRequired,\r\n studio: PropTypes.string,\r\n year: PropTypes.number,\r\n certification: PropTypes.string,\r\n ratings: PropTypes.object,\r\n genres: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n sortKey: PropTypes.string.isRequired\r\n};\r\n\r\nexport default DiscoverMovieOverviewInfo;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"infos\":\"DiscoverMovieOverviewInfo-infos-obnt7\"};","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"DiscoverMovieOverview-content-y0iAo\",\"poster\":\"DiscoverMovieOverview-poster-V_bvd\",\"editorSelect\":\"DiscoverMovieOverview-editorSelect-Wx2rZ\",\"posterContainer\":\"DiscoverMovieOverview-posterContainer-MY3Ek\",\"link\":\"DiscoverMovieOverview-link-PO5ln Link-link-RInnp\",\"alreadyExistsIcon\":\"DiscoverMovieOverview-alreadyExistsIcon-Jck5V\",\"exclusionIcon\":\"DiscoverMovieOverview-exclusionIcon-fdSwl\",\"info\":\"DiscoverMovieOverview-info-bDkFm\",\"titleRow\":\"DiscoverMovieOverview-titleRow-q3vcV\",\"lists\":\"DiscoverMovieOverview-lists-WOejv\",\"title\":\"DiscoverMovieOverview-title-i1myl DiscoverMovieOverview-link-PO5ln Link-link-RInnp\",\"actions\":\"DiscoverMovieOverview-actions-t8eRr\",\"details\":\"DiscoverMovieOverview-details-t95cY\",\"overviewContainer\":\"DiscoverMovieOverview-overviewContainer-z1clK\",\"overview\":\"DiscoverMovieOverview-overview-hMIdL DiscoverMovieOverview-link-PO5ln Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport TextTruncate from 'react-text-truncate';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport Icon from 'Components/Icon';\r\nimport ImportListListConnector from 'Components/ImportListListConnector';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport AddNewDiscoverMovieModal from 'DiscoverMovie/AddNewDiscoverMovieModal';\r\nimport ExcludeMovieModal from 'DiscoverMovie/Exclusion/ExcludeMovieModal';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport fonts from 'Styles/Variables/fonts';\r\nimport translate from 'Utilities/String/translate';\r\nimport DiscoverMovieOverviewInfo from './DiscoverMovieOverviewInfo';\r\nimport styles from './DiscoverMovieOverview.css';\r\n\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(dimensions.movieIndexColumnPaddingSmallScreen);\r\nconst defaultFontSize = parseInt(fonts.defaultFontSize);\r\nconst lineHeight = parseFloat(fonts.lineHeight);\r\n\r\n// Hardcoded height beased on line-height of 32 + bottom margin of 10. 19 + 5 for List Row\r\n// Less side-effecty than using react-measure.\r\nconst titleRowHeight = 66;\r\n\r\nfunction getContentHeight(rowHeight, isSmallScreen) {\r\n const padding = isSmallScreen ? columnPaddingSmallScreen : columnPadding;\r\n\r\n return rowHeight - padding;\r\n}\r\n\r\nclass DiscoverMovieOverview extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isNewAddMovieModalOpen: false,\r\n isExcludeMovieModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n this.setState({ isNewAddMovieModalOpen: true });\r\n };\r\n\r\n onAddMovieModalClose = () => {\r\n this.setState({ isNewAddMovieModalOpen: false });\r\n };\r\n\r\n onExcludeMoviePress = () => {\r\n this.setState({ isExcludeMovieModalOpen: true });\r\n };\r\n\r\n onExcludeMovieModalClose = () => {\r\n this.setState({ isExcludeMovieModalOpen: false });\r\n };\r\n\r\n onChange = ({ value, shiftKey }) => {\r\n const {\r\n tmdbId,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n onSelectedChange({ id: tmdbId, value, shiftKey });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n tmdbId,\r\n imdbId,\r\n youTubeTrailerId,\r\n title,\r\n folder,\r\n year,\r\n overview,\r\n images,\r\n lists,\r\n posterWidth,\r\n posterHeight,\r\n rowHeight,\r\n isSmallScreen,\r\n isExisting,\r\n isExcluded,\r\n isRecommendation,\r\n isPopular,\r\n isTrending,\r\n isSelected,\r\n overviewOptions,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isNewAddMovieModalOpen,\r\n isExcludeMovieModalOpen\r\n } = this.state;\r\n\r\n const elementStyle = {\r\n width: `${posterWidth}px`,\r\n height: `${posterHeight}px`\r\n };\r\n\r\n const linkProps = isExisting ? { to: `/movie/${tmdbId}` } : { onPress: this.onPress };\r\n\r\n const contentHeight = getContentHeight(rowHeight, isSmallScreen);\r\n const overviewHeight = contentHeight - titleRowHeight;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n {title}\r\n\r\n {\r\n isExisting ?\r\n : null\r\n }\r\n {\r\n isExcluded &&\r\n \r\n }\r\n \r\n\r\n
\r\n \r\n \r\n }\r\n title={translate('Links')}\r\n body={\r\n \r\n }\r\n />\r\n \r\n\r\n \r\n
\r\n
\r\n\r\n
\r\n {\r\n isRecommendation ?\r\n \r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n isPopular ?\r\n \r\n {translate('Popular')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n isTrending ?\r\n \r\n {translate('Trending')}\r\n :\r\n null\r\n }\r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieOverview.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n imdbId: PropTypes.string,\r\n youTubeTrailerId: PropTypes.string,\r\n title: PropTypes.string.isRequired,\r\n folder: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n overview: PropTypes.string.isRequired,\r\n status: PropTypes.string.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n posterWidth: PropTypes.number.isRequired,\r\n posterHeight: PropTypes.number.isRequired,\r\n rowHeight: PropTypes.number.isRequired,\r\n overviewOptions: PropTypes.object.isRequired,\r\n showRelativeDates: PropTypes.bool.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n longDateFormat: PropTypes.string.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n isExisting: PropTypes.bool.isRequired,\r\n isExcluded: PropTypes.bool.isRequired,\r\n isRecommendation: PropTypes.bool.isRequired,\r\n isPopular: PropTypes.bool.isRequired,\r\n isTrending: PropTypes.bool.isRequired,\r\n isSelected: PropTypes.bool,\r\n lists: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nDiscoverMovieOverview.defaultProps = {\r\n lists: []\r\n};\r\n\r\nexport default DiscoverMovieOverview;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport DiscoverMovieOverview from './DiscoverMovieOverview';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createDimensionsSelector(),\r\n (dimensions) => {\r\n return {\r\n isSmallScreen: dimensions.isSmallScreen\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(DiscoverMovieOverview);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { Grid, WindowScroller } from 'react-virtualized';\r\nimport Measure from 'Components/Measure';\r\nimport DiscoverMovieItemConnector from 'DiscoverMovie/DiscoverMovieItemConnector';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\nimport hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';\r\nimport DiscoverMovieOverviewConnector from './DiscoverMovieOverviewConnector';\r\nimport styles from './DiscoverMovieOverviews.css';\r\n\r\n// Poster container dimensions\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(dimensions.movieIndexColumnPaddingSmallScreen);\r\n\r\nfunction calculatePosterWidth(posterSize, isSmallScreen) {\r\n const maxiumPosterWidth = isSmallScreen ? 152 : 162;\r\n\r\n if (posterSize === 'large') {\r\n return maxiumPosterWidth;\r\n }\r\n\r\n if (posterSize === 'medium') {\r\n return Math.floor(maxiumPosterWidth * 0.75);\r\n }\r\n\r\n return Math.floor(maxiumPosterWidth * 0.5);\r\n}\r\n\r\nfunction calculateRowHeight(posterHeight, sortKey, isSmallScreen, overviewOptions) {\r\n\r\n const heights = [\r\n posterHeight,\r\n isSmallScreen ? columnPaddingSmallScreen : columnPadding\r\n ];\r\n\r\n return heights.reduce((acc, height) => acc + height, 0);\r\n}\r\n\r\nfunction calculatePosterHeight(posterWidth) {\r\n return Math.ceil((250 / 170) * posterWidth);\r\n}\r\n\r\nclass DiscoverMovieOverviews extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n width: 0,\r\n columnCount: 1,\r\n posterWidth: 162,\r\n posterHeight: 238,\r\n rowHeight: calculateRowHeight(238, null, props.isSmallScreen, {})\r\n };\r\n\r\n this._grid = null;\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const {\r\n items,\r\n sortKey,\r\n overviewOptions,\r\n jumpToCharacter,\r\n isSmallScreen\r\n } = this.props;\r\n\r\n const {\r\n width,\r\n rowHeight\r\n } = this.state;\r\n\r\n if (prevProps.sortKey !== sortKey ||\r\n prevProps.overviewOptions !== overviewOptions) {\r\n this.calculateGrid(this.state.width, isSmallScreen);\r\n }\r\n\r\n if (\r\n this._grid &&\r\n (prevState.width !== width ||\r\n prevState.rowHeight !== rowHeight ||\r\n hasDifferentItemsOrOrder(prevProps.items, items, 'tmdbId') ||\r\n prevProps.overviewOptions !== overviewOptions\r\n )\r\n ) {\r\n // recomputeGridSize also forces Grid to discard its cache of rendered cells\r\n this._grid.recomputeGridSize();\r\n }\r\n\r\n if (jumpToCharacter != null && jumpToCharacter !== prevProps.jumpToCharacter) {\r\n const index = getIndexOfFirstCharacter(items, jumpToCharacter);\r\n\r\n if (this._grid && index != null) {\r\n\r\n this._grid.scrollToCell({\r\n rowIndex: index,\r\n columnIndex: 0\r\n });\r\n }\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n setGridRef = (ref) => {\r\n this._grid = ref;\r\n };\r\n\r\n calculateGrid = (width = this.state.width, isSmallScreen) => {\r\n const {\r\n sortKey,\r\n overviewOptions\r\n } = this.props;\r\n\r\n const posterWidth = calculatePosterWidth(overviewOptions.size, isSmallScreen);\r\n const posterHeight = calculatePosterHeight(posterWidth);\r\n const rowHeight = calculateRowHeight(posterHeight, sortKey, isSmallScreen, overviewOptions);\r\n\r\n this.setState({\r\n width,\r\n posterWidth,\r\n posterHeight,\r\n rowHeight\r\n });\r\n };\r\n\r\n cellRenderer = ({ key, rowIndex, style }) => {\r\n const {\r\n items,\r\n sortKey,\r\n overviewOptions,\r\n showRelativeDates,\r\n shortDateFormat,\r\n longDateFormat,\r\n timeFormat,\r\n isSmallScreen,\r\n selectedState,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n const {\r\n posterWidth,\r\n posterHeight,\r\n rowHeight\r\n } = this.state;\r\n\r\n const movie = items[rowIndex];\r\n\r\n if (!movie) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = ({ width }) => {\r\n this.calculateGrid(width, this.props.isSmallScreen);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSmallScreen,\r\n scroller,\r\n items,\r\n selectedState\r\n } = this.props;\r\n\r\n const {\r\n width,\r\n rowHeight\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {({ height, registerChild, onChildScroll, scrollTop }) => {\r\n if (!height) {\r\n return
;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieOverviews.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n sortKey: PropTypes.string,\r\n overviewOptions: PropTypes.object.isRequired,\r\n jumpToCharacter: PropTypes.string,\r\n scroller: PropTypes.instanceOf(Element).isRequired,\r\n showRelativeDates: PropTypes.bool.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n longDateFormat: PropTypes.string.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n selectedState: PropTypes.object.isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovieOverviews;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"DiscoverMovieOverviews-grid-sBFCM\",\"container\":\"DiscoverMovieOverviews-container-tF68u\",\"content\":\"DiscoverMovieOverviews-content-Dc2ZP\",\"externalLinks\":\"DiscoverMovieOverviews-externalLinks-gsHz8\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport DiscoverMovieOverviews from './DiscoverMovieOverviews';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.discoverMovie.overviewOptions,\r\n createUISettingsSelector(),\r\n createDimensionsSelector(),\r\n (overviewOptions, uiSettings, dimensions) => {\r\n return {\r\n overviewOptions,\r\n showRelativeDates: uiSettings.showRelativeDates,\r\n shortDateFormat: uiSettings.shortDateFormat,\r\n longDateFormat: uiSettings.longDateFormat,\r\n timeFormat: uiSettings.timeFormat,\r\n isSmallScreen: dimensions.isSmallScreen\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(DiscoverMovieOverviews);\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nconst posterSizeOptions = [\r\n {\r\n key: 'small',\r\n get value() {\r\n return translate('Small');\r\n }\r\n },\r\n {\r\n key: 'medium',\r\n get value() {\r\n return translate('Medium');\r\n }\r\n },\r\n {\r\n key: 'large',\r\n get value() {\r\n return translate('Large');\r\n }\r\n }\r\n];\r\n\r\nclass DiscoverMovieOverviewOptionsModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n size: props.size,\r\n showYear: props.showYear,\r\n showStudio: props.showStudio,\r\n showGenres: props.showGenres,\r\n showTmdbRating: props.showTmdbRating,\r\n showImdbRating: props.showImdbRating,\r\n showCertification: props.showCertification,\r\n includeRecommendations: props.includeRecommendations,\r\n includeTrending: props.includeTrending,\r\n includePopular: props.includePopular\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n size,\r\n showYear,\r\n showStudio,\r\n showGenres,\r\n showTmdbRating,\r\n showImdbRating,\r\n showCertification,\r\n includeRecommendations,\r\n includeTrending,\r\n includePopular\r\n } = this.props;\r\n\r\n const state = {};\r\n\r\n if (size !== prevProps.size) {\r\n state.size = size;\r\n }\r\n\r\n if (showYear !== prevProps.showYear) {\r\n state.showYear = showYear;\r\n }\r\n\r\n if (showStudio !== prevProps.showStudio) {\r\n state.showStudio = showStudio;\r\n }\r\n\r\n if (showGenres !== prevProps.showGenres) {\r\n state.showGenres = showGenres;\r\n }\r\n\r\n if (showTmdbRating !== prevProps.showTmdbRating) {\r\n state.showTmdbRating = showTmdbRating;\r\n }\r\n\r\n if (showImdbRating !== prevProps.showImdbRating) {\r\n state.showImdbRating = showImdbRating;\r\n }\r\n\r\n if (showCertification !== prevProps.showCertification) {\r\n state.showCertification = showCertification;\r\n }\r\n\r\n if (includeRecommendations !== prevProps.includeRecommendations) {\r\n state.includeRecommendations = includeRecommendations;\r\n }\r\n\r\n if (includeTrending !== prevProps.includeTrending) {\r\n state.includeTrending = includeTrending;\r\n }\r\n\r\n if (includePopular !== prevProps.includePopular) {\r\n state.includePopular = includePopular;\r\n }\r\n\r\n if (!_.isEmpty(state)) {\r\n this.setState(state);\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChangeOverviewOption = ({ name, value }) => {\r\n this.setState({\r\n [name]: value\r\n }, () => {\r\n this.props.onChangeOverviewOption({ [name]: value });\r\n });\r\n };\r\n\r\n onChangeOption = ({ name, value }) => {\r\n this.setState({\r\n [name]: value\r\n }, () => {\r\n this.props.onChangeOption({\r\n [name]: value\r\n });\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n size,\r\n showYear,\r\n showStudio,\r\n showGenres,\r\n showTmdbRating,\r\n showImdbRating,\r\n showCertification,\r\n includeRecommendations,\r\n includeTrending,\r\n includePopular\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {translate('OverviewOptions')}\r\n \r\n\r\n \r\n
\r\n \r\n {translate('IncludeRadarrRecommendations')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('IncludeTrending')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('IncludePopular')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('PosterSize')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowYear')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowStudio')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowGenres')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowTmdbRating')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowImdbRating')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowCertification')}\r\n\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieOverviewOptionsModalContent.propTypes = {\r\n size: PropTypes.string.isRequired,\r\n showYear: PropTypes.bool.isRequired,\r\n showStudio: PropTypes.bool.isRequired,\r\n showGenres: PropTypes.bool.isRequired,\r\n showTmdbRating: PropTypes.bool.isRequired,\r\n showImdbRating: PropTypes.bool.isRequired,\r\n showCertification: PropTypes.bool.isRequired,\r\n includeRecommendations: PropTypes.bool.isRequired,\r\n includeTrending: PropTypes.bool.isRequired,\r\n includePopular: PropTypes.bool.isRequired,\r\n onChangeOverviewOption: PropTypes.func.isRequired,\r\n onChangeOption: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovieOverviewOptionsModalContent;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { setListMovieOption, setListMovieOverviewOption } from 'Store/Actions/discoverMovieActions';\r\nimport DiscoverMovieOverviewOptionsModalContent from './DiscoverMovieOverviewOptionsModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.discoverMovie,\r\n (discoverMovie) => {\r\n return {\r\n ...discoverMovie.options,\r\n ...discoverMovie.overviewOptions\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onChangeOverviewOption(payload) {\r\n dispatch(setListMovieOverviewOption(payload));\r\n },\r\n onChangeOption(payload) {\r\n dispatch(setListMovieOption(payload));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(DiscoverMovieOverviewOptionsModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport DiscoverMovieOverviewOptionsModalContentConnector from './DiscoverMovieOverviewOptionsModalContentConnector';\r\n\r\nfunction DiscoverMovieOverviewOptionsModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nDiscoverMovieOverviewOptionsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovieOverviewOptionsModal;\r\n","import React from 'react';\r\nimport { Ratings, RatingValues } from 'Movie/Movie';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './RottenTomatoRating.css';\r\n\r\ninterface RottenTomatoRatingProps {\r\n ratings: Ratings;\r\n iconSize?: number;\r\n hideIcon?: boolean;\r\n}\r\n\r\nfunction RottenTomatoRating(props: RottenTomatoRatingProps) {\r\n const { ratings, iconSize = 14, hideIcon = false } = props;\r\n\r\n const rtRotten =\r\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTYwIDU2MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNDQ1LjE4NSA0NDQuNjg0Yy03OS4zNjkgNC4xNjctOTUuNTg3LTg2LjY1Mi0xMjYuNzI2LTg2LjAwNi0xMy4yNjguMjc5LTIzLjcyNiAxNC4xNTEtMTkuMTMzIDMwLjMyIDIuNTI1IDguODg4IDkuNTMgMjEuOTIzIDEzLjk0NCAzMC4wMTEgMTUuNTcgMjguNTQ0LTcuNDQ3IDYwLjg0NS0zNC4zODMgNjMuNTc3LTQ0Ljc2IDQuNTQtNjMuNDMzLTIxLjQyNi02Mi4yNzgtNDguMDA3IDEuMy0yOS44NCAyNi42LTYwLjMzMS42NS03My4zMDUtMjcuMTk0LTEzLjU5Ny00OS4zMDEgMzkuNTcyLTc1LjMyNSA1MS40MzktMjMuNTUzIDEwLjc0MS01Ni4yNDggMi40MTMtNjcuODcyLTIzLjc0MS04LjE2NC0xOC4zNzktNi42OC01My43NjggMjkuNjctNjcuMjcgMjIuNzA2LTguNDMzIDczLjMwNSAxMS4wMjkgNzUuOS0xMy42MjMgMi45OTItMjguNDE2LTUzLjE1NS0zMC44MTItNzAuMDYtMzcuNjI2LTI5LjkxMi0xMi4wNTUtNDcuNTY3LTM3Ljg1LTMzLjczNC02NS41MjIgMTAuMzc4LTIwLjc1NyA0MC45MTUtMjkuMjAzIDY0LjIyMy0yMC4xMSAyNy45MjIgMTAuODkyIDMyLjQwNCAzOS44NTMgNDYuNzEgNTEuODk3IDEyLjMyNCAxMC4zOCAyOS4xOSAxMS42OCA0MC4yMiA0LjU0MyA4LjEzNS01LjI2NSAxMC44NDMtMTYuODI4IDcuNzc0LTI3LjM5LTQuMDctMTQuMDIzLTE0Ljg3NS0yMi43NzMtMjUuNDE1LTMxLjM0Ni0xOC43NTgtMTUuMjQ5LTQ1LjI0LTI4LjM2LTI5LjIyMi02OS45ODMgMTMuMTMtMzQuMTEgNTEuNjQyLTM1LjM0IDUxLjY0Mi0zNS4zNCAxNS4zLTEuNzIgMjkuMDAyIDIuOSA0MC4xNjcgMTIuODc1IDE0LjkyNyAxMy4zMzUgMTcuODM0IDMxLjE2IDE1LjMzNiA1MC4xNzYtMi4yODMgMTcuMzU4LTguNDI2IDMyLjU2LTExLjYzIDQ5Ljc1OS0zLjcxNyAxOS45NjYgNi45NTQgNDAuMDg2IDI3LjI0OSA0MC44NjkgMjYuNjk0IDEuMDMxIDM0LjY5OC0xOS40ODYgMzcuOTY0LTMyLjQ5MiA0Ljc4Mi0xOS4wMjggMTEuMDU4LTM2LjY5NCAyOC43MTgtNDcuODIgMjUuMzQ2LTE1Ljk3IDYwLjU1Mi0xMi40NyA3Ni44ODYgMTguMjIyIDEyLjkyIDI0LjI4NCA4Ljc3MiA1Ny43MTUtMTEuMDQ3IDc1Ljk3LTguODkyIDguMTg4LTE5LjU4NCAxMS4wNzUtMzEuMTQ4IDExLjE1Ni0xNi41ODUuMTE3LTMzLjE2Mi0uMjktNDguNTU2IDcuNDcxLTEwLjQ4IDUuMjgxLTE1LjA0NyAxMy44ODgtMTUuMDQ1IDI1LjQyMyAwIDExLjI0MiA1Ljg1MyAxOC41ODUgMTUuMzM2IDIzLjM2MyAxNy44NiA5LjAwMyAzNy41NzcgMTAuODQzIDU2Ljg3MSAxNC4yMjIgMjcuOTggNC45IDUyLjU4MSAxNC43NTUgNjguMzc1IDQwLjcyLjE0Mi4yMjguMjguNDU4LjQxNS42OSAxOC4xMzkgMzAuNzQxLS44MzEgNzUuMDA1LTM2LjQ3NiA3Ni44NzgiIGZpbGw9IiMwQUM4NTUiLz48L3N2Zz4=';\r\n const rtFresh =\r\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTYwIDU2MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNDc4LjI5IDI5Ni45OGMtMy45OS02My45NjYtMzYuNTItMTExLjgyLTg1LjQ2OC0xMzguNTggMC4yNzggMS41Ni0xLjEwOSAzLjUwOC0yLjY4OCAyLjgxOC0zMi4wMTYtMTQuMDA2LTg2LjMyOCAzMS4zMi0xMjQuMjggNy41ODQgMC4yODUgOC41MTktMS4zNzggNTAuMDcyLTU5LjkxNCA1Mi40ODMtMS4zODIgMC4wNTYtMi4xNDItMS4zNTUtMS4yNjgtMi4zNTQgNy44MjgtOC45MjkgMTUuNzMyLTMxLjUzNSA0LjM2Ny00My41ODYtMjQuMzM4IDIxLjgxLTM4LjQ3MiAzMC4wMTctODUuMTM4IDE5LjE4Ni0yOS44NzggMzEuMjQxLTQ2LjgwOSA3NC00My40ODUgMTI3LjI2IDYuNzggMTA4Ljc0IDEwOC42MyAxNzAuODkgMjExLjE5IDE2NC40OSAxMDIuNTYtNi4zOTUgMTkzLjQ3LTgwLjU3MiAxODYuNjgtMTg5LjMxIiBmaWxsPSIjRkEzMjBBIi8+PHBhdGggZD0iTTI5MS4zNzUgMTMyLjI5M2MyMS4wNzUtNS4wMjMgODEuNjkzLS40OSAxMDEuMTE0IDI1LjI3NCAxLjE2NiAxLjU0NS0uNDc1IDQuNDY4LTIuMzU1IDMuNjQ4LTMyLjAxNi0xNC4wMDYtODYuMzI4IDMxLjMyLTEyNC4yODIgNy41ODQuMjg1IDguNTE5LTEuMzc4IDUwLjA3Mi01OS45MTQgNTIuNDgzLTEuMzgyLjA1Ni0yLjE0Mi0xLjM1NS0xLjI2OC0yLjM1NCA3LjgyOC04LjkyOSAxNS43My0zMS41MzUgNC4zNjctNDMuNTg2LTI2LjUxMiAyMy43NTgtNDAuODg0IDMxLjM5Mi05OC40MjYgMTUuODM4LTEuODgzLS41MDgtMS4yNDEtMy41MzUuNzYyLTQuMjk4IDEwLjg3Ni00LjE1NyAzNS41MTUtMjIuMzYxIDU4LjgyNC0zMC4zODUgNC40MzgtMS41MjYgOC44NjItMi43MSAxMy4xOC0zLjQtMjUuNjY1LTIuMjkzLTM3LjIzNS01Ljg2Mi01My41NTktMy40LTEuNzg5LjI3LTMuMDA0LTEuODEzLTEuODk1LTMuMjQxIDIxLjk5NS0yOC4zMzIgNjIuNTEzLTM2Ljg4OCA4Ny41MTItMjEuODM3LTE1LjQxLTE5LjA5NC0yNy40OC0zNC4zMjEtMjcuNDgtMzQuMzIxbDI4LjYwMS0xNi4yNDZzMTEuODE3IDI2LjQgMjAuNDE0IDQ1LjYxNGMyMS4yNzUtMzEuNDM1IDYwLjg2LTM0LjMzNiA3Ny41ODUtMTIuMDMzLjk5MiAxLjMyNi0uMDQ1IDMuMjEtMS43MDIgMy4xNzEtMTMuNjEyLS4zMzEtMjEuMTA3IDEyLjA1LTIxLjY3NSAyMS40NjZsLjE5Ny4wMjMiIGZpbGw9IiMwMDkxMkQiLz48L3N2Zz4=';\r\n\r\n const { rottenTomatoes: rottenTomatoesRatings = {} as RatingValues } =\r\n ratings;\r\n const { value = 0 } = rottenTomatoesRatings;\r\n\r\n const ratingImage = value > 50 ? rtFresh : rtRotten;\r\n\r\n return (\r\n \r\n {!hideIcon && (\r\n \r\n )}\r\n {value}%\r\n \r\n );\r\n}\r\n\r\nexport default RottenTomatoRating;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"RottenTomatoRating-wrapper-Wt1w5\",\"image\":\"RottenTomatoRating-image-HoF9G\"};","import React from 'react';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { kinds, tooltipPositions } from 'Helpers/Props';\r\nimport { Ratings } from 'Movie/Movie';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './TraktRating.css';\r\n\r\ninterface TraktRatingProps {\r\n ratings: Ratings;\r\n iconSize?: number;\r\n hideIcon?: boolean;\r\n}\r\n\r\nfunction TraktRating(props: TraktRatingProps) {\r\n const { ratings, iconSize = 14, hideIcon = false } = props;\r\n\r\n const traktImage =\r\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6ICM5ZjQyYzY7CiAgICAgIH0KCiAgICAgIC5jbHMtMiB7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2RlZnM+CiAgPGcgaWQ9Il94MkRfLXByb2R1Y3Rpb24iPgogICAgPGcgaWQ9ImxvZ29tYXJrLmNpcmNsZS5jb2xvciI+CiAgICAgIDxwYXRoIGlkPSJiYWNrZ3JvdW5kIiBjbGFzcz0iY2xzLTEiIGQ9Ik00OCwyNGMwLDYuNjItMi42OSwxMi42Mi03LjAzLDE2Ljk3LTQuMzQsNC4zNC0xMC4zNCw3LjAzLTE2Ljk3LDcuMDNDMTAuNzUsNDgsMCwzNy4yNSwwLDI0YzAtNi42MywyLjY5LTEyLjYzLDcuMDMtMTYuOTdDMTEuMzcsMi42OCwxNy4zNywwLDI0LDBzMTIuNjMsMi42OCwxNi45Nyw3LjAzYy4xNC4xNC4yNy4yOC40LjQyLjQ4LjUuOTQsMS4wMiwxLjM3LDEuNTYuMjEuMjYuNDEuNTIuNi43OS40My41Ny44MiwxLjE2LDEuMTgsMS43Ni4xOC4yOS4zNS41OC41MS44Ny4zNS42NC42OCwxLjI5Ljk2LDEuOTcsMS4zLDIuOTQsMi4wMSw2LjE4LDIuMDEsOS42WiIvPgogICAgICA8ZyBpZD0iY2hlY2tib3giPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTEyLjkzLDE4LjY3bC0xLjQ3LDEuNDYsMTQuNCwxNC40LDEuNDctMS40Ny00LjMyLTQuMzEsMTkuNzMtMTkuNzRjLS40My0uNTQtLjg5LTEuMDYtMS4zNy0xLjU2bC0xOS44MywxOS44My04LjYxLTguNjFaTTI4LjAyLDMyLjM3bDEuNDYtMS40Ni0yLjE1LTIuMTYsMTcuMTktMTcuMTljLS4zNi0uNi0uNzUtMS4xOS0xLjE4LTEuNzZsLTE4Ljk0LDE4Ljk1LDMuNjIsMy42MlpNMzAuMTgsMzAuMjFsMTUuODEtMTUuODFjLS4yOC0uNjgtLjYxLTEuMzMtLjk2LTEuOTdsLTE2LjMyLDE2LjMyLDEuNDcsMS40NlpNMTMuNjIsMTcuOTdsNy45Miw3LjkyLDEuNDctMS40Ny03LjkyLTcuOTItMS40NywxLjQ3Wk0yNS4xNywyMi4yN2wtNy45Mi03LjkyLTEuNDcsMS40Nyw3LjkyLDcuOTIsMS40Ny0xLjQ3Wk0yNCw0MS4zMmMtOS41NSwwLTE3LjMyLTcuNzctMTcuMzItMTcuMzJTMTQuNDUsNi42NywyNCw2LjY3YzIuNiwwLDUuMTEuNTYsNy40NCwxLjY4bC44OS0xLjg3Yy0yLjYxLTEuMjUtNS40Mi0xLjg4LTguMzMtMS44OEMxMy4zMSw0LjYsNC42MSwxMy4zLDQuNjEsMjRzOC43LDE5LjQsMTkuNCwxOS40YzcuNjQsMCwxNC41OS00LjUxLDE3LjcxLTExLjQ4bC0xLjg5LS44NWMtMi43OSw2LjIzLTksMTAuMjYtMTUuODIsMTAuMjZaIi8+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPg==';\r\n\r\n const { value = 0, votes = 0 } = ratings.trakt;\r\n\r\n return (\r\n \r\n {!hideIcon && (\r\n \r\n )}\r\n {(value * 10).toFixed()}%\r\n \r\n }\r\n tooltip={translate('CountVotes', { votes })}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n />\r\n );\r\n}\r\n\r\nexport default TraktRating;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"TraktRating-wrapper-JOPcO\",\"image\":\"TraktRating-image-seN4U\"};","import { icons } from 'Helpers/Props';\r\nimport { MovieStatus } from 'Movie/Movie';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nexport default function getMovieStatusDetails(status: MovieStatus) {\r\n let statusDetails = {\r\n icon: icons.ANNOUNCED,\r\n title: translate('Announced'),\r\n message: translate('AnnouncedMovieDescription'),\r\n };\r\n\r\n if (status === 'deleted') {\r\n statusDetails = {\r\n icon: icons.MOVIE_DELETED,\r\n title: translate('Deleted'),\r\n message: translate('DeletedMovieDescription'),\r\n };\r\n } else if (status === 'inCinemas') {\r\n statusDetails = {\r\n icon: icons.IN_CINEMAS,\r\n title: translate('InCinemas'),\r\n message: translate('InCinemasMovieDescription'),\r\n };\r\n } else if (status === 'released') {\r\n statusDetails = {\r\n icon: icons.MOVIE_FILE,\r\n title: translate('Released'),\r\n message: translate('ReleasedMovieDescription'),\r\n };\r\n }\r\n\r\n return statusDetails;\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"info\":\"DiscoverMoviePosterInfo-info-Y2wbw\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport ImdbRating from 'Components/ImdbRating';\r\nimport RottenTomatoRating from 'Components/RottenTomatoRating';\r\nimport TmdbRating from 'Components/TmdbRating';\r\nimport TraktRating from 'Components/TraktRating';\r\nimport { icons } from 'Helpers/Props';\r\nimport getMovieStatusDetails from 'Movie/getMovieStatusDetails';\r\nimport formatRuntime from 'Utilities/Date/formatRuntime';\r\nimport getRelativeDate from 'Utilities/Date/getRelativeDate';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './DiscoverMoviePosterInfo.css';\r\n\r\nfunction DiscoverMoviePosterInfo(props) {\r\n const {\r\n status,\r\n studio,\r\n inCinemas,\r\n digitalRelease,\r\n physicalRelease,\r\n certification,\r\n runtime,\r\n ratings,\r\n sortKey,\r\n showRelativeDates,\r\n shortDateFormat,\r\n timeFormat,\r\n movieRuntimeFormat,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating\r\n } = props;\r\n\r\n if (sortKey === 'status' && status) {\r\n return (\r\n
\r\n {getMovieStatusDetails(status).title}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'studio' && studio) {\r\n return (\r\n
\r\n {studio}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'inCinemas' && inCinemas) {\r\n const inCinemasDate = getRelativeDate({\r\n date: inCinemas,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false\r\n });\r\n\r\n return (\r\n
\r\n {inCinemasDate}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'digitalRelease' && digitalRelease) {\r\n const digitalReleaseDate = getRelativeDate({\r\n date: digitalRelease,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false\r\n });\r\n\r\n return (\r\n
\r\n {digitalReleaseDate}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'physicalRelease' && physicalRelease) {\r\n const physicalReleaseDate = getRelativeDate({\r\n date: physicalRelease,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false\r\n });\r\n\r\n return (\r\n
\r\n {physicalReleaseDate}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'certification' && certification) {\r\n return (\r\n
\r\n {certification}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'runtime' && runtime) {\r\n return (\r\n
\r\n {formatRuntime(runtime, movieRuntimeFormat)}\r\n
\r\n );\r\n }\r\n\r\n if (!showTmdbRating && sortKey === 'tmdbRating' && !!ratings.tmdb) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (!showImdbRating && sortKey === 'imdbRating' && !!ratings.imdb) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (!showRottenTomatoesRating && sortKey === 'rottenTomatoesRating' && !!ratings.rottenTomatoes) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (!showTraktRating && sortKey === 'traktRating' && !!ratings.trakt) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n return null;\r\n}\r\n\r\nDiscoverMoviePosterInfo.propTypes = {\r\n status: PropTypes.string,\r\n studio: PropTypes.string,\r\n inCinemas: PropTypes.string,\r\n certification: PropTypes.string,\r\n digitalRelease: PropTypes.string,\r\n physicalRelease: PropTypes.string,\r\n runtime: PropTypes.number,\r\n ratings: PropTypes.object.isRequired,\r\n sortKey: PropTypes.string.isRequired,\r\n showRelativeDates: PropTypes.bool.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n movieRuntimeFormat: PropTypes.string.isRequired,\r\n showTmdbRating: PropTypes.bool.isRequired,\r\n showImdbRating: PropTypes.bool.isRequired,\r\n showRottenTomatoesRating: PropTypes.bool.isRequired,\r\n showTraktRating: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default DiscoverMoviePosterInfo;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"DiscoverMoviePoster-content-qeiIu\",\"controls\":\"DiscoverMoviePoster-controls-xTZNb\",\"posterContainer\":\"DiscoverMoviePoster-posterContainer-FwYfa\",\"link\":\"DiscoverMoviePoster-link-I0PH3 Link-link-RInnp\",\"externalLinks\":\"DiscoverMoviePoster-externalLinks-lareh\",\"overlayTitle\":\"DiscoverMoviePoster-overlayTitle-y2osW\",\"title\":\"DiscoverMoviePoster-title-GxC81\",\"excluded\":\"DiscoverMoviePoster-excluded-bDxaG\",\"existing\":\"DiscoverMoviePoster-existing-nxeR9\",\"editorSelect\":\"DiscoverMoviePoster-editorSelect-rlsR2\",\"action\":\"DiscoverMoviePoster-action-QxZVO IconButton-button-t4C5V Link-link-RInnp\",\"container\":\"DiscoverMoviePoster-container-EOUP3\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport Icon from 'Components/Icon';\r\nimport ImdbRating from 'Components/ImdbRating';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport RottenTomatoRating from 'Components/RottenTomatoRating';\r\nimport TmdbRating from 'Components/TmdbRating';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport TraktRating from 'Components/TraktRating';\r\nimport AddNewDiscoverMovieModal from 'DiscoverMovie/AddNewDiscoverMovieModal';\r\nimport ExcludeMovieModal from 'DiscoverMovie/Exclusion/ExcludeMovieModal';\r\nimport { icons } from 'Helpers/Props';\r\nimport MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport translate from 'Utilities/String/translate';\r\nimport DiscoverMoviePosterInfo from './DiscoverMoviePosterInfo';\r\nimport styles from './DiscoverMoviePoster.css';\r\n\r\nclass DiscoverMoviePoster extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n hasPosterError: false,\r\n isNewAddMovieModalOpen: false,\r\n isExcludeMovieModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n this.setState({ isNewAddMovieModalOpen: true });\r\n };\r\n\r\n onAddMovieModalClose = () => {\r\n this.setState({ isNewAddMovieModalOpen: false });\r\n };\r\n\r\n onExcludeMoviePress = () => {\r\n this.setState({ isExcludeMovieModalOpen: true });\r\n };\r\n\r\n onExcludeMovieModalClose = () => {\r\n this.setState({ isExcludeMovieModalOpen: false });\r\n };\r\n\r\n onPosterLoad = () => {\r\n if (this.state.hasPosterError) {\r\n this.setState({ hasPosterError: false });\r\n }\r\n };\r\n\r\n onPosterLoadError = () => {\r\n if (!this.state.hasPosterError) {\r\n this.setState({ hasPosterError: true });\r\n }\r\n };\r\n\r\n onChange = ({ value, shiftKey }) => {\r\n const {\r\n tmdbId,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n onSelectedChange({ id: tmdbId, value, shiftKey });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n tmdbId,\r\n imdbId,\r\n youTubeTrailerId,\r\n title,\r\n year,\r\n overview,\r\n folder,\r\n images,\r\n posterWidth,\r\n posterHeight,\r\n showTitle,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating,\r\n ratings,\r\n isExisting,\r\n isExcluded,\r\n isSelected,\r\n showRelativeDates,\r\n shortDateFormat,\r\n timeFormat,\r\n movieRuntimeFormat,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n hasPosterError,\r\n isNewAddMovieModalOpen,\r\n isExcludeMovieModalOpen\r\n } = this.state;\r\n\r\n const linkProps = isExisting ? { to: `/movie/${tmdbId}` } : { onPress: this.onPress };\r\n\r\n const elementStyle = {\r\n width: `${posterWidth}px`,\r\n height: `${posterHeight}px`\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {\r\n
\r\n \r\n
\r\n }\r\n\r\n \r\n\r\n {\r\n isExcluded &&\r\n \r\n }\r\n\r\n {\r\n isExisting &&\r\n \r\n }\r\n\r\n \r\n \r\n\r\n {\r\n hasPosterError &&\r\n
\r\n {title}\r\n
\r\n }\r\n \r\n
\r\n\r\n {showTitle ?\r\n
\r\n {title}\r\n
:\r\n null}\r\n\r\n {showTmdbRating && !!ratings.tmdb ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n\r\n {showImdbRating && !!ratings.imdb ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n\r\n {showRottenTomatoesRating && !!ratings.rottenTomatoes ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n\r\n {showTraktRating && !!ratings.trakt ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nDiscoverMoviePoster.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n imdbId: PropTypes.string,\r\n youTubeTrailerId: PropTypes.string,\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n overview: PropTypes.string.isRequired,\r\n folder: PropTypes.string.isRequired,\r\n status: PropTypes.string.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n posterWidth: PropTypes.number.isRequired,\r\n posterHeight: PropTypes.number.isRequired,\r\n showTitle: PropTypes.bool.isRequired,\r\n showTmdbRating: PropTypes.bool.isRequired,\r\n showImdbRating: PropTypes.bool.isRequired,\r\n showRottenTomatoesRating: PropTypes.bool.isRequired,\r\n showTraktRating: PropTypes.bool.isRequired,\r\n ratings: PropTypes.object.isRequired,\r\n showRelativeDates: PropTypes.bool.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n movieRuntimeFormat: PropTypes.string.isRequired,\r\n isExisting: PropTypes.bool.isRequired,\r\n isExcluded: PropTypes.bool.isRequired,\r\n isSelected: PropTypes.bool,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMoviePoster;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport DiscoverMoviePoster from './DiscoverMoviePoster';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.ui.item.movieRuntimeFormat,\r\n createDimensionsSelector(),\r\n (movieRuntimeFormat, dimensions) => {\r\n return {\r\n movieRuntimeFormat,\r\n isSmallScreen: dimensions.isSmallScreen\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(DiscoverMoviePoster);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"DiscoverMoviePosters-grid-LsiJ6\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { Grid, WindowScroller } from 'react-virtualized';\r\nimport Measure from 'Components/Measure';\r\nimport DiscoverMovieItemConnector from 'DiscoverMovie/DiscoverMovieItemConnector';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\nimport hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';\r\nimport DiscoverMoviePosterConnector from './DiscoverMoviePosterConnector';\r\nimport styles from './DiscoverMoviePosters.css';\r\n\r\n// Poster container dimensions\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(dimensions.movieIndexColumnPaddingSmallScreen);\r\nconst progressBarHeight = parseInt(dimensions.progressBarSmallHeight);\r\nconst detailedProgressBarHeight = parseInt(dimensions.progressBarMediumHeight);\r\n\r\nconst additionalColumnCount = {\r\n small: 3,\r\n medium: 2,\r\n large: 1\r\n};\r\n\r\nfunction calculateColumnWidth(width, posterSize, isSmallScreen) {\r\n const maxiumColumnWidth = isSmallScreen ? 172 : 182;\r\n const columns = Math.floor(width / maxiumColumnWidth);\r\n const remainder = width % maxiumColumnWidth;\r\n\r\n if (remainder === 0 && posterSize === 'large') {\r\n return maxiumColumnWidth;\r\n }\r\n\r\n return Math.floor(width / (columns + additionalColumnCount[posterSize]));\r\n}\r\n\r\nfunction calculateRowHeight(posterHeight, sortKey, isSmallScreen, posterOptions) {\r\n const {\r\n detailedProgressBar,\r\n showTitle,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating\r\n } = posterOptions;\r\n\r\n const heights = [\r\n posterHeight,\r\n detailedProgressBar ? detailedProgressBarHeight : progressBarHeight,\r\n isSmallScreen ? columnPaddingSmallScreen : columnPadding\r\n ];\r\n\r\n if (showTitle) {\r\n heights.push(19);\r\n }\r\n\r\n if (showTmdbRating) {\r\n heights.push(19);\r\n }\r\n\r\n if (showImdbRating) {\r\n heights.push(19);\r\n }\r\n\r\n if (showRottenTomatoesRating) {\r\n heights.push(19);\r\n }\r\n\r\n if (showTraktRating) {\r\n heights.push(19);\r\n }\r\n\r\n switch (sortKey) {\r\n case 'studio':\r\n case 'inCinemas':\r\n case 'digitalRelease':\r\n case 'physicalRelease':\r\n case 'runtime':\r\n case 'certification':\r\n heights.push(19);\r\n break;\r\n case 'tmdbRating':\r\n if (!showTmdbRating) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'imdbRating':\r\n if (!showImdbRating) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'rottenTomatoesRating':\r\n if (!showRottenTomatoesRating) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'traktRating':\r\n if (!showTraktRating) {\r\n heights.push(19);\r\n }\r\n break;\r\n default:\r\n // No need to add a height of 0\r\n }\r\n\r\n return heights.reduce((acc, height) => acc + height, 0);\r\n}\r\n\r\nfunction calculatePosterHeight(posterWidth) {\r\n return Math.ceil((250 / 170) * posterWidth);\r\n}\r\n\r\nclass DiscoverMoviePosters extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n width: 0,\r\n columnWidth: 182,\r\n columnCount: 1,\r\n posterWidth: 162,\r\n posterHeight: 238,\r\n rowHeight: calculateRowHeight(238, null, props.isSmallScreen, {})\r\n };\r\n\r\n this._isInitialized = false;\r\n this._grid = null;\r\n this._padding = props.isSmallScreen ? columnPaddingSmallScreen : columnPadding;\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const {\r\n items,\r\n sortKey,\r\n posterOptions,\r\n jumpToCharacter,\r\n isSmallScreen,\r\n selectedState\r\n } = this.props;\r\n\r\n const {\r\n width,\r\n columnWidth,\r\n columnCount,\r\n rowHeight\r\n } = this.state;\r\n\r\n if (prevProps.sortKey !== sortKey ||\r\n prevProps.posterOptions !== posterOptions) {\r\n this.calculateGrid(width, isSmallScreen);\r\n }\r\n\r\n if (this._grid &&\r\n (prevState.width !== width ||\r\n prevState.columnWidth !== columnWidth ||\r\n prevState.columnCount !== columnCount ||\r\n prevState.rowHeight !== rowHeight ||\r\n prevProps.selectedState !== selectedState ||\r\n hasDifferentItemsOrOrder(prevProps.items, items, 'tmdbId'))) {\r\n // recomputeGridSize also forces Grid to discard its cache of rendered cells\r\n this._grid.recomputeGridSize();\r\n }\r\n\r\n if (jumpToCharacter != null && jumpToCharacter !== prevProps.jumpToCharacter) {\r\n const index = getIndexOfFirstCharacter(items, jumpToCharacter);\r\n\r\n if (this._grid && index != null) {\r\n const row = Math.floor(index / columnCount);\r\n\r\n this._grid.scrollToCell({\r\n rowIndex: row,\r\n columnIndex: 0\r\n });\r\n }\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n setGridRef = (ref) => {\r\n this._grid = ref;\r\n };\r\n\r\n calculateGrid = (width = this.state.width, isSmallScreen) => {\r\n const {\r\n sortKey,\r\n posterOptions\r\n } = this.props;\r\n\r\n const columnWidth = calculateColumnWidth(width, posterOptions.size, isSmallScreen);\r\n const columnCount = Math.max(Math.floor(width / columnWidth), 1);\r\n const posterWidth = columnWidth - this._padding * 2;\r\n const posterHeight = calculatePosterHeight(posterWidth);\r\n const rowHeight = calculateRowHeight(posterHeight, sortKey, isSmallScreen, posterOptions);\r\n\r\n this.setState({\r\n width,\r\n columnWidth,\r\n columnCount,\r\n posterWidth,\r\n posterHeight,\r\n rowHeight\r\n });\r\n };\r\n\r\n cellRenderer = ({ key, rowIndex, columnIndex, style }) => {\r\n const {\r\n items,\r\n sortKey,\r\n posterOptions,\r\n showRelativeDates,\r\n shortDateFormat,\r\n timeFormat,\r\n selectedState,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n const {\r\n posterWidth,\r\n posterHeight,\r\n columnCount\r\n } = this.state;\r\n\r\n const {\r\n showTitle,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating\r\n } = posterOptions;\r\n\r\n const movieIdx = rowIndex * columnCount + columnIndex;\r\n const movie = items[movieIdx];\r\n\r\n if (!movie) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = ({ width }) => {\r\n this.calculateGrid(width, this.props.isSmallScreen);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSmallScreen,\r\n scroller,\r\n items,\r\n selectedState\r\n } = this.props;\r\n\r\n const {\r\n width,\r\n columnWidth,\r\n columnCount,\r\n rowHeight\r\n } = this.state;\r\n\r\n const rowCount = Math.ceil(items.length / columnCount);\r\n\r\n return (\r\n \r\n \r\n {({ height, registerChild, onChildScroll, scrollTop }) => {\r\n if (!height) {\r\n return
;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDiscoverMoviePosters.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n sortKey: PropTypes.string,\r\n posterOptions: PropTypes.object.isRequired,\r\n jumpToCharacter: PropTypes.string,\r\n scroller: PropTypes.instanceOf(Element).isRequired,\r\n showRelativeDates: PropTypes.bool.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n selectedState: PropTypes.object.isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMoviePosters;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport DiscoverMoviePosters from './DiscoverMoviePosters';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.discoverMovie.posterOptions,\r\n createUISettingsSelector(),\r\n createDimensionsSelector(),\r\n (posterOptions, uiSettings, dimensions) => {\r\n return {\r\n posterOptions,\r\n showRelativeDates: uiSettings.showRelativeDates,\r\n shortDateFormat: uiSettings.shortDateFormat,\r\n timeFormat: uiSettings.timeFormat,\r\n isSmallScreen: dimensions.isSmallScreen\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(DiscoverMoviePosters);\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nconst posterSizeOptions = [\r\n {\r\n key: 'small',\r\n get value() {\r\n return translate('Small');\r\n }\r\n },\r\n {\r\n key: 'medium',\r\n get value() {\r\n return translate('Medium');\r\n }\r\n },\r\n {\r\n key: 'large',\r\n get value() {\r\n return translate('Large');\r\n }\r\n }\r\n];\r\n\r\nclass DiscoverMoviePosterOptionsModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n size: props.size,\r\n showTitle: props.showTitle,\r\n showTmdbRating: props.showTmdbRating,\r\n showImdbRating: props.showImdbRating,\r\n showRottenTomatoesRating: props.showRottenTomatoesRating,\r\n showTraktRating: props.showTraktRating,\r\n includeRecommendations: props.includeRecommendations,\r\n includeTrending: props.includeTrending,\r\n includePopular: props.includePopular\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n size,\r\n showTitle,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating,\r\n includeRecommendations,\r\n includeTrending,\r\n includePopular\r\n } = this.props;\r\n\r\n const state = {};\r\n\r\n if (size !== prevProps.size) {\r\n state.size = size;\r\n }\r\n\r\n if (showTitle !== prevProps.showTitle) {\r\n state.showTitle = showTitle;\r\n }\r\n\r\n if (showTmdbRating !== prevProps.showTmdbRating) {\r\n state.showTmdbRating = showTmdbRating;\r\n }\r\n\r\n if (showImdbRating !== prevProps.showImdbRating) {\r\n state.showImdbRating = showImdbRating;\r\n }\r\n\r\n if (showRottenTomatoesRating !== prevProps.showRottenTomatoesRating) {\r\n state.showRottenTomatoesRating = showRottenTomatoesRating;\r\n }\r\n\r\n if (showTraktRating !== prevProps.showTraktRating) {\r\n state.showTraktRating = showTraktRating;\r\n }\r\n\r\n if (includeRecommendations !== prevProps.includeRecommendations) {\r\n state.includeRecommendations = includeRecommendations;\r\n }\r\n\r\n if (includeTrending !== prevProps.includeTrending) {\r\n state.includeTrending = includeTrending;\r\n }\r\n\r\n if (includePopular !== prevProps.includePopular) {\r\n state.includePopular = includePopular;\r\n }\r\n\r\n if (!_.isEmpty(state)) {\r\n this.setState(state);\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChangePosterOption = ({ name, value }) => {\r\n this.setState({\r\n [name]: value\r\n }, () => {\r\n this.props.onChangePosterOption({ [name]: value });\r\n });\r\n };\r\n\r\n onChangeOption = ({ name, value }) => {\r\n this.setState({\r\n [name]: value\r\n }, () => {\r\n this.props.onChangeOption({\r\n [name]: value\r\n });\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n size,\r\n showTitle,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating,\r\n includeRecommendations,\r\n includeTrending,\r\n includePopular\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {translate('PosterOptions')}\r\n \r\n\r\n \r\n
\r\n \r\n {translate('IncludeRadarrRecommendations')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('IncludeTrending')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('IncludePopular')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('PosterSize')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowTitle')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowTmdbRating')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowImdbRating')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowRottenTomatoesRating')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowTraktRating')}\r\n\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nDiscoverMoviePosterOptionsModalContent.propTypes = {\r\n size: PropTypes.string.isRequired,\r\n showTitle: PropTypes.bool.isRequired,\r\n showTmdbRating: PropTypes.bool.isRequired,\r\n showImdbRating: PropTypes.bool.isRequired,\r\n showRottenTomatoesRating: PropTypes.bool.isRequired,\r\n showTraktRating: PropTypes.bool.isRequired,\r\n includeRecommendations: PropTypes.bool.isRequired,\r\n includeTrending: PropTypes.bool.isRequired,\r\n includePopular: PropTypes.bool.isRequired,\r\n onChangePosterOption: PropTypes.func.isRequired,\r\n onChangeOption: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMoviePosterOptionsModalContent;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { setListMovieOption, setListMoviePosterOption } from 'Store/Actions/discoverMovieActions';\r\nimport DiscoverMoviePosterOptionsModalContent from './DiscoverMoviePosterOptionsModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.discoverMovie,\r\n (discoverMovie) => {\r\n return {\r\n ...discoverMovie.options,\r\n ...discoverMovie.posterOptions\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onChangePosterOption(payload) {\r\n dispatch(setListMoviePosterOption(payload));\r\n },\r\n onChangeOption(payload) {\r\n dispatch(setListMovieOption(payload));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(DiscoverMoviePosterOptionsModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport DiscoverMoviePosterOptionsModalContentConnector from './DiscoverMoviePosterOptionsModalContentConnector';\r\n\r\nfunction DiscoverMoviePosterOptionsModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nDiscoverMoviePosterOptionsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMoviePosterOptionsModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nclass DiscoverMovieTableOptions extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n includeRecommendations: props.includeRecommendations,\r\n includeTrending: props.includeTrending,\r\n includePopular: props.includePopular\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n includeRecommendations,\r\n includeTrending,\r\n includePopular\r\n } = this.props;\r\n\r\n if (includeRecommendations !== prevProps.includeRecommendations) {\r\n this.setState({ includeRecommendations });\r\n }\r\n\r\n if (includeTrending !== prevProps.includeTrending) {\r\n this.setState({ includeTrending });\r\n }\r\n\r\n if (includePopular !== prevProps.includePopular) {\r\n this.setState({ includePopular });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChangeOption = ({ name, value }) => {\r\n this.setState({\r\n [name]: value\r\n }, () => {\r\n this.props.onChangeOption({\r\n [name]: value\r\n });\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n includeRecommendations,\r\n includeTrending,\r\n includePopular\r\n } = this.state;\r\n\r\n return (\r\n <>\r\n \r\n {translate('IncludeRadarrRecommendations')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('IncludeTrending')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('IncludePopular')}\r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieTableOptions.propTypes = {\r\n includeRecommendations: PropTypes.bool.isRequired,\r\n includeTrending: PropTypes.bool.isRequired,\r\n includePopular: PropTypes.bool.isRequired,\r\n onChangeOption: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovieTableOptions;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { setListMovieOption } from 'Store/Actions/discoverMovieActions';\r\nimport DiscoverMovieTableOptions from './DiscoverMovieTableOptions';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.discoverMovie,\r\n (discoverMovie) => {\r\n return discoverMovie.options;\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onChangeOption(payload) {\r\n dispatch(setListMovieOption(payload));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(DiscoverMovieTableOptions);\r\n\r\n","// extracted by mini-css-extract-plugin\nexport default {\"status\":\"DiscoverMovieHeader-status-UboHT VirtualTableHeaderCell-headerCell-oq_lz\",\"collection\":\"DiscoverMovieHeader-collection-Q4Q4W VirtualTableHeaderCell-headerCell-oq_lz\",\"sortTitle\":\"DiscoverMovieHeader-sortTitle-JUIJD VirtualTableHeaderCell-headerCell-oq_lz\",\"studio\":\"DiscoverMovieHeader-studio-oBqwP VirtualTableHeaderCell-headerCell-oq_lz\",\"inCinemas\":\"DiscoverMovieHeader-inCinemas-sVOOL VirtualTableHeaderCell-headerCell-oq_lz\",\"physicalRelease\":\"DiscoverMovieHeader-physicalRelease-BI9OR VirtualTableHeaderCell-headerCell-oq_lz\",\"digitalRelease\":\"DiscoverMovieHeader-digitalRelease-D6CnQ VirtualTableHeaderCell-headerCell-oq_lz\",\"genres\":\"DiscoverMovieHeader-genres-x_T7P VirtualTableHeaderCell-headerCell-oq_lz\",\"originalLanguage\":\"DiscoverMovieHeader-originalLanguage-Uyq4J VirtualTableHeaderCell-headerCell-oq_lz\",\"tmdbRating\":\"DiscoverMovieHeader-tmdbRating-wr8RA VirtualTableHeaderCell-headerCell-oq_lz\",\"imdbRating\":\"DiscoverMovieHeader-imdbRating-onA1W VirtualTableHeaderCell-headerCell-oq_lz\",\"rottenTomatoesRating\":\"DiscoverMovieHeader-rottenTomatoesRating-KVygl VirtualTableHeaderCell-headerCell-oq_lz\",\"traktRating\":\"DiscoverMovieHeader-traktRating-GBuG4 VirtualTableHeaderCell-headerCell-oq_lz\",\"runtime\":\"DiscoverMovieHeader-runtime-Vgs5s VirtualTableHeaderCell-headerCell-oq_lz\",\"popularity\":\"DiscoverMovieHeader-popularity-OmtFF VirtualTableHeaderCell-headerCell-oq_lz\",\"lists\":\"DiscoverMovieHeader-lists-okF78 VirtualTableHeaderCell-headerCell-oq_lz\",\"certification\":\"DiscoverMovieHeader-certification-BOJ3p VirtualTableHeaderCell-headerCell-oq_lz\",\"isTrending\":\"DiscoverMovieHeader-isTrending-TGfQO VirtualTableHeaderCell-headerCell-oq_lz\",\"isPopular\":\"DiscoverMovieHeader-isPopular-BSuU1 VirtualTableHeaderCell-headerCell-oq_lz\",\"isRecommendation\":\"DiscoverMovieHeader-isRecommendation-OWFMy VirtualTableHeaderCell-headerCell-oq_lz\",\"actions\":\"DiscoverMovieHeader-actions-DvRUL VirtualTableHeaderCell-headerCell-oq_lz\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport TableOptionsModal from 'Components/Table/TableOptions/TableOptionsModal';\r\nimport VirtualTableHeader from 'Components/Table/VirtualTableHeader';\r\nimport VirtualTableHeaderCell from 'Components/Table/VirtualTableHeaderCell';\r\nimport VirtualTableSelectAllHeaderCell from 'Components/Table/VirtualTableSelectAllHeaderCell';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport DiscoverMovieTableOptionsConnector from './DiscoverMovieTableOptionsConnector';\r\nimport styles from './DiscoverMovieHeader.css';\r\n\r\nclass DiscoverMovieHeader extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isTableOptionsModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onTableOptionsPress = () => {\r\n this.setState({ isTableOptionsModalOpen: true });\r\n };\r\n\r\n onTableOptionsModalClose = () => {\r\n this.setState({ isTableOptionsModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n columns,\r\n onTableOptionChange,\r\n allSelected,\r\n allUnselected,\r\n onSelectAllChange,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n\r\n {\r\n columns.map((column) => {\r\n const {\r\n name,\r\n label,\r\n isSortable,\r\n isVisible\r\n } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'isRecommendation') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'isTrending') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'isPopular') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {typeof label === 'function' ? label() : label}\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieHeader.propTypes = {\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onTableOptionChange: PropTypes.func.isRequired,\r\n allSelected: PropTypes.bool.isRequired,\r\n allUnselected: PropTypes.bool.isRequired,\r\n onSelectAllChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovieHeader;\r\n","import { connect } from 'react-redux';\r\nimport { setListMovieTableOption } from 'Store/Actions/discoverMovieActions';\r\nimport DiscoverMovieHeader from './DiscoverMovieHeader';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onTableOptionChange(payload) {\r\n dispatch(setListMovieTableOption(payload));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(undefined, createMapDispatchToProps)(DiscoverMovieHeader);\r\n","import React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Label from 'Components/Label';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MoviePopularityIndex.css';\r\n\r\ninterface MoviePopularityIndexProps {\r\n popularity: number;\r\n}\r\n\r\nfunction MoviePopularityIndex(props: MoviePopularityIndexProps) {\r\n const { popularity } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MoviePopularityIndex;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"popularityIcon\":\"MoviePopularityIndex-popularityIcon-bUKfw\"};","// extracted by mini-css-extract-plugin\nexport default {\"statusIcon\":\"ListMovieStatusCell-statusIcon-JOOwq\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport VirtualTableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport getMovieStatusDetails from 'Movie/getMovieStatusDetails';\r\nimport styles from './ListMovieStatusCell.css';\r\n\r\nfunction ListMovieStatusCell(props) {\r\n const {\r\n className,\r\n status,\r\n component: Component,\r\n ...otherProps\r\n } = props;\r\n\r\n const statusDetails = getMovieStatusDetails(status);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nListMovieStatusCell.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n status: PropTypes.string.isRequired,\r\n component: PropTypes.elementType\r\n};\r\n\r\nListMovieStatusCell.defaultProps = {\r\n className: styles.status,\r\n component: VirtualTableRowCell\r\n};\r\n\r\nexport default ListMovieStatusCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"status\":\"DiscoverMovieRow-status-_rK5V DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"alreadyExistsIcon\":\"DiscoverMovieRow-alreadyExistsIcon-WDAS0\",\"exclusionIcon\":\"DiscoverMovieRow-exclusionIcon-GW08o\",\"collection\":\"DiscoverMovieRow-collection-SzzEb DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"sortTitle\":\"DiscoverMovieRow-sortTitle-hkM66 DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"studio\":\"DiscoverMovieRow-studio-zvXyl DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"inCinemas\":\"DiscoverMovieRow-inCinemas-m525l DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"physicalRelease\":\"DiscoverMovieRow-physicalRelease-UgQxp DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"digitalRelease\":\"DiscoverMovieRow-digitalRelease-X1Ewg DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"genres\":\"DiscoverMovieRow-genres-ngcRl DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"certification\":\"DiscoverMovieRow-certification-Q6B_i DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"originalLanguage\":\"DiscoverMovieRow-originalLanguage-kmnG4 DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"tmdbRating\":\"DiscoverMovieRow-tmdbRating-pCf_s DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"imdbRating\":\"DiscoverMovieRow-imdbRating-pnuo9 DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"rottenTomatoesRating\":\"DiscoverMovieRow-rottenTomatoesRating-MDyaF DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"traktRating\":\"DiscoverMovieRow-traktRating-RO8wC DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"runtime\":\"DiscoverMovieRow-runtime-Tkn3Z DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"popularity\":\"DiscoverMovieRow-popularity-wvz4I DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"lists\":\"DiscoverMovieRow-lists-l0TTt DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"isTrending\":\"DiscoverMovieRow-isTrending-UoBzW DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"isPopular\":\"DiscoverMovieRow-isPopular-FqUfi DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"isRecommendation\":\"DiscoverMovieRow-isRecommendation-qNCsh DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"actions\":\"DiscoverMovieRow-actions-StBgv DiscoverMovieRow-cell-lqMNK VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"checkInput\":\"DiscoverMovieRow-checkInput-UBjI7 CheckInput-input-VAM1T\",\"statusIcon\":\"DiscoverMovieRow-statusIcon-TBMFP\",\"externalLinks\":\"DiscoverMovieRow-externalLinks-QqrBd\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport ImdbRating from 'Components/ImdbRating';\r\nimport ImportListListConnector from 'Components/ImportListListConnector';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport RottenTomatoRating from 'Components/RottenTomatoRating';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';\r\nimport VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell';\r\nimport TmdbRating from 'Components/TmdbRating';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport TraktRating from 'Components/TraktRating';\r\nimport AddNewDiscoverMovieModal from 'DiscoverMovie/AddNewDiscoverMovieModal';\r\nimport ExcludeMovieModal from 'DiscoverMovie/Exclusion/ExcludeMovieModal';\r\nimport { icons } from 'Helpers/Props';\r\nimport MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';\r\nimport MoviePopularityIndex from 'Movie/MoviePopularityIndex';\r\nimport formatRuntime from 'Utilities/Date/formatRuntime';\r\nimport translate from 'Utilities/String/translate';\r\nimport ListMovieStatusCell from './ListMovieStatusCell';\r\nimport styles from './DiscoverMovieRow.css';\r\n\r\nclass DiscoverMovieRow extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isNewAddMovieModalOpen: false,\r\n isExcludeMovieModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddMoviePress = () => {\r\n this.setState({ isNewAddMovieModalOpen: true });\r\n };\r\n\r\n onAddMovieModalClose = () => {\r\n this.setState({ isNewAddMovieModalOpen: false });\r\n };\r\n\r\n onExcludeMoviePress = () => {\r\n this.setState({ isExcludeMovieModalOpen: true });\r\n };\r\n\r\n onExcludeMovieModalClose = () => {\r\n this.setState({ isExcludeMovieModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n status,\r\n tmdbId,\r\n imdbId,\r\n youTubeTrailerId,\r\n title,\r\n originalLanguage,\r\n studio,\r\n inCinemas,\r\n physicalRelease,\r\n digitalRelease,\r\n runtime,\r\n year,\r\n overview,\r\n folder,\r\n images,\r\n genres,\r\n ratings,\r\n popularity,\r\n certification,\r\n movieRuntimeFormat,\r\n collection,\r\n columns,\r\n isExisting,\r\n isExcluded,\r\n isRecommendation,\r\n isTrending,\r\n isPopular,\r\n isSelected,\r\n lists,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n const {\r\n isNewAddMovieModalOpen,\r\n isExcludeMovieModalOpen\r\n } = this.state;\r\n\r\n const linkProps = isExisting ? { to: `/movie/${tmdbId}` } : { onPress: this.onAddMoviePress };\r\n\r\n return (\r\n <>\r\n \r\n\r\n {\r\n columns.map((column) => {\r\n const {\r\n name,\r\n isVisible\r\n } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'status') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'sortTitle') {\r\n return (\r\n \r\n \r\n {title}\r\n \r\n\r\n {\r\n isExisting ?\r\n : null\r\n }\r\n\r\n {\r\n isExcluded ?\r\n : null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'collection') {\r\n return (\r\n \r\n {collection ? collection.title : null }\r\n \r\n );\r\n }\r\n\r\n if (name === 'originalLanguage') {\r\n return (\r\n \r\n {originalLanguage.name}\r\n \r\n );\r\n }\r\n\r\n if (name === 'studio') {\r\n return (\r\n \r\n {studio}\r\n \r\n );\r\n }\r\n\r\n if (name === 'inCinemas') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'physicalRelease') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'digitalRelease') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'runtime') {\r\n return (\r\n \r\n {formatRuntime(runtime, movieRuntimeFormat)}\r\n \r\n );\r\n }\r\n\r\n if (name === 'genres') {\r\n const joinedGenres = genres.join(', ');\r\n\r\n return (\r\n \r\n \r\n {joinedGenres}\r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'tmdbRating') {\r\n return (\r\n \r\n {ratings.tmdb ? : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'imdbRating') {\r\n return (\r\n \r\n {ratings.imdb ? : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'rottenTomatoesRating') {\r\n return (\r\n \r\n {ratings.rottenTomatoes ? : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'traktRating') {\r\n return (\r\n \r\n {ratings.trakt ? : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'popularity') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'certification') {\r\n return (\r\n \r\n {certification}\r\n \r\n );\r\n }\r\n\r\n if (name === 'lists') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'isRecommendation') {\r\n return (\r\n \r\n {\r\n isRecommendation ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'isTrending') {\r\n return (\r\n \r\n {\r\n isTrending ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'isPopular') {\r\n return (\r\n \r\n {\r\n isPopular ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n \r\n \r\n }\r\n title={translate('Links')}\r\n body={\r\n \r\n }\r\n />\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n\r\n return null;\r\n })\r\n }\r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieRow.propTypes = {\r\n tmdbId: PropTypes.number.isRequired,\r\n imdbId: PropTypes.string,\r\n youTubeTrailerId: PropTypes.string,\r\n status: PropTypes.string.isRequired,\r\n title: PropTypes.string.isRequired,\r\n originalLanguage: PropTypes.object.isRequired,\r\n year: PropTypes.number.isRequired,\r\n overview: PropTypes.string.isRequired,\r\n folder: PropTypes.string.isRequired,\r\n images: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n studio: PropTypes.string,\r\n inCinemas: PropTypes.string,\r\n physicalRelease: PropTypes.string,\r\n digitalRelease: PropTypes.string,\r\n runtime: PropTypes.number,\r\n genres: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n ratings: PropTypes.object.isRequired,\r\n popularity: PropTypes.number.isRequired,\r\n certification: PropTypes.string,\r\n collection: PropTypes.object,\r\n movieRuntimeFormat: PropTypes.string.isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isExisting: PropTypes.bool.isRequired,\r\n isExcluded: PropTypes.bool.isRequired,\r\n isSelected: PropTypes.bool,\r\n isRecommendation: PropTypes.bool.isRequired,\r\n isPopular: PropTypes.bool.isRequired,\r\n isTrending: PropTypes.bool.isRequired,\r\n lists: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nDiscoverMovieRow.defaultProps = {\r\n genres: [],\r\n lists: []\r\n};\r\n\r\nexport default DiscoverMovieRow;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport DiscoverMovieRow from './DiscoverMovieRow';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.ui.item.movieRuntimeFormat,\r\n createDimensionsSelector(),\r\n (movieRuntimeFormat, dimensions) => {\r\n return {\r\n movieRuntimeFormat,\r\n isSmallScreen: dimensions.isSmallScreen\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(DiscoverMovieRow);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport VirtualTable from 'Components/Table/VirtualTable';\r\nimport VirtualTableRow from 'Components/Table/VirtualTableRow';\r\nimport DiscoverMovieItemConnector from 'DiscoverMovie/DiscoverMovieItemConnector';\r\nimport { sortDirections } from 'Helpers/Props';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\nimport DiscoverMovieHeaderConnector from './DiscoverMovieHeaderConnector';\r\nimport DiscoverMovieRowConnector from './DiscoverMovieRowConnector';\r\nimport styles from './DiscoverMovieTable.css';\r\n\r\nclass DiscoverMovieTable extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n scrollIndex: null\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n items,\r\n jumpToCharacter\r\n } = this.props;\r\n\r\n if (jumpToCharacter != null && jumpToCharacter !== prevProps.jumpToCharacter) {\r\n\r\n const scrollIndex = getIndexOfFirstCharacter(items, jumpToCharacter);\r\n\r\n if (scrollIndex != null) {\r\n this.setState({ scrollIndex });\r\n }\r\n } else if (jumpToCharacter == null && prevProps.jumpToCharacter != null) {\r\n this.setState({ scrollIndex: null });\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n rowRenderer = ({ key, rowIndex, style }) => {\r\n const {\r\n items,\r\n columns,\r\n selectedState,\r\n onSelectedChange\r\n } = this.props;\r\n\r\n const movie = items[rowIndex];\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n columns,\r\n sortKey,\r\n sortDirection,\r\n isSmallScreen,\r\n onSortPress,\r\n scroller,\r\n allSelected,\r\n allUnselected,\r\n onSelectAllChange,\r\n selectedState\r\n } = this.props;\r\n\r\n return (\r\n \r\n }\r\n selectedState={selectedState}\r\n columns={columns}\r\n />\r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieTable.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n sortKey: PropTypes.string,\r\n sortDirection: PropTypes.oneOf(sortDirections.all),\r\n jumpToCharacter: PropTypes.string,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n scroller: PropTypes.instanceOf(Element).isRequired,\r\n onSortPress: PropTypes.func.isRequired,\r\n allSelected: PropTypes.bool.isRequired,\r\n allUnselected: PropTypes.bool.isRequired,\r\n selectedState: PropTypes.object.isRequired,\r\n onSelectedChange: PropTypes.func.isRequired,\r\n onSelectAllChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovieTable;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tableContainer\":\"DiscoverMovieTable-tableContainer-ckAxc VirtualTable-tableContainer-MHSuC\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { setListMovieSort } from 'Store/Actions/discoverMovieActions';\r\nimport DiscoverMovieTable from './DiscoverMovieTable';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.app.dimensions,\r\n (state) => state.discoverMovie.columns,\r\n (dimensions, columns) => {\r\n return {\r\n isSmallScreen: dimensions.isSmallScreen,\r\n columns\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onSortPress(sortKey) {\r\n dispatch(setListMovieSort({ sortKey }));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(DiscoverMovieTable);\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageJumpBar from 'Components/Page/PageJumpBar';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport { align, icons, kinds, sortDirections } from 'Helpers/Props';\r\nimport styles from 'Movie/Index/MovieIndex.css';\r\nimport hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport selectAll from 'Utilities/Table/selectAll';\r\nimport toggleSelected from 'Utilities/Table/toggleSelected';\r\nimport DiscoverMovieFooterConnector from './DiscoverMovieFooterConnector';\r\nimport DiscoverMovieFilterMenu from './Menus/DiscoverMovieFilterMenu';\r\nimport DiscoverMovieSortMenu from './Menus/DiscoverMovieSortMenu';\r\nimport DiscoverMovieViewMenu from './Menus/DiscoverMovieViewMenu';\r\nimport NoDiscoverMovie from './NoDiscoverMovie';\r\nimport DiscoverMovieOverviewsConnector from './Overview/DiscoverMovieOverviewsConnector';\r\nimport DiscoverMovieOverviewOptionsModal from './Overview/Options/DiscoverMovieOverviewOptionsModal';\r\nimport DiscoverMoviePostersConnector from './Posters/DiscoverMoviePostersConnector';\r\nimport DiscoverMoviePosterOptionsModal from './Posters/Options/DiscoverMoviePosterOptionsModal';\r\nimport DiscoverMovieTableConnector from './Table/DiscoverMovieTableConnector';\r\nimport DiscoverMovieTableOptionsConnector from './Table/DiscoverMovieTableOptionsConnector';\r\n\r\nfunction getViewComponent(view) {\r\n if (view === 'posters') {\r\n return DiscoverMoviePostersConnector;\r\n }\r\n\r\n if (view === 'overview') {\r\n return DiscoverMovieOverviewsConnector;\r\n }\r\n\r\n return DiscoverMovieTableConnector;\r\n}\r\n\r\nclass DiscoverMovie extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.scrollerRef = React.createRef();\r\n\r\n this.state = {\r\n jumpBarItems: { order: [] },\r\n jumpToCharacter: null,\r\n isPosterOptionsModalOpen: false,\r\n isOverviewOptionsModalOpen: false,\r\n isConfirmSearchModalOpen: false,\r\n searchType: null,\r\n allSelected: false,\r\n allUnselected: false,\r\n lastToggled: null,\r\n selectedState: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setJumpBarItems();\r\n this.setSelectedState();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n items,\r\n sortKey,\r\n sortDirection,\r\n includeRecommendations,\r\n includeTrending,\r\n includePopular\r\n } = this.props;\r\n\r\n if (includeRecommendations !== prevProps.includeRecommendations ||\r\n includeTrending !== prevProps.includeTrending ||\r\n includePopular !== prevProps.includePopular\r\n ) {\r\n this.props.dispatchFetchListMovies();\r\n }\r\n\r\n if (sortKey !== prevProps.sortKey ||\r\n sortDirection !== prevProps.sortDirection ||\r\n hasDifferentItemsOrOrder(prevProps.items, items)\r\n ) {\r\n this.setJumpBarItems();\r\n this.setSelectedState();\r\n }\r\n\r\n if (this.state.jumpToCharacter != null) {\r\n this.setState({ jumpToCharacter: null });\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n getSelectedIds = () => {\r\n if (this.state.allUnselected) {\r\n return [];\r\n }\r\n return getSelectedIds(this.state.selectedState);\r\n };\r\n\r\n setSelectedState() {\r\n const {\r\n items\r\n } = this.props;\r\n\r\n const {\r\n selectedState\r\n } = this.state;\r\n\r\n const newSelectedState = {};\r\n\r\n items.forEach((movie) => {\r\n const isItemSelected = selectedState[movie.tmdbId];\r\n\r\n if (isItemSelected) {\r\n newSelectedState[movie.tmdbId] = isItemSelected;\r\n } else {\r\n newSelectedState[movie.tmdbId] = false;\r\n }\r\n });\r\n\r\n const selectedCount = getSelectedIds(newSelectedState).length;\r\n const newStateCount = Object.keys(newSelectedState).length;\r\n let isAllSelected = false;\r\n let isAllUnselected = false;\r\n\r\n if (selectedCount === 0) {\r\n isAllUnselected = true;\r\n } else if (selectedCount === newStateCount) {\r\n isAllSelected = true;\r\n }\r\n\r\n this.setState({ selectedState: newSelectedState, allSelected: isAllSelected, allUnselected: isAllUnselected });\r\n }\r\n\r\n setJumpBarItems() {\r\n const {\r\n items,\r\n sortKey,\r\n sortDirection\r\n } = this.props;\r\n\r\n // Reset if not sorting by sortTitle\r\n if (sortKey !== 'sortTitle') {\r\n this.setState({ jumpBarItems: { order: [] } });\r\n return;\r\n }\r\n\r\n const characters = _.reduce(items, (acc, item) => {\r\n let char = item.sortTitle.charAt(0);\r\n\r\n if (!isNaN(char)) {\r\n char = '#';\r\n }\r\n\r\n if (char in acc) {\r\n acc[char] = acc[char] + 1;\r\n } else {\r\n acc[char] = 1;\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\n const order = Object.keys(characters).sort();\r\n\r\n // Reverse if sorting descending\r\n if (sortDirection === sortDirections.DESCENDING) {\r\n order.reverse();\r\n }\r\n\r\n const jumpBarItems = {\r\n characters,\r\n order\r\n };\r\n\r\n this.setState({ jumpBarItems });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onPosterOptionsPress = () => {\r\n this.setState({ isPosterOptionsModalOpen: true });\r\n };\r\n\r\n onPosterOptionsModalClose = () => {\r\n this.setState({ isPosterOptionsModalOpen: false });\r\n };\r\n\r\n onOverviewOptionsPress = () => {\r\n this.setState({ isOverviewOptionsModalOpen: true });\r\n };\r\n\r\n onOverviewOptionsModalClose = () => {\r\n this.setState({ isOverviewOptionsModalOpen: false });\r\n };\r\n\r\n onJumpBarItemPress = (jumpToCharacter) => {\r\n this.setState({ jumpToCharacter });\r\n };\r\n\r\n onSelectAllChange = ({ value }) => {\r\n this.setState(selectAll(this.state.selectedState, value));\r\n };\r\n\r\n onSelectAllPress = () => {\r\n this.onSelectAllChange({ value: !this.state.allSelected });\r\n };\r\n\r\n onImportListSyncPress = () => {\r\n this.props.onImportListSyncPress();\r\n };\r\n\r\n onSelectedChange = ({ id, value, shiftKey = false }) => {\r\n this.setState((state) => {\r\n return toggleSelected(state, this.props.items, id, value, shiftKey, 'tmdbId');\r\n });\r\n };\r\n\r\n onAddMoviesPress = ({ addOptions }) => {\r\n this.props.onAddMoviesPress({ ids: this.getSelectedIds(), addOptions });\r\n };\r\n\r\n onExcludeMoviesPress = () => {\r\n this.props.onExcludeMoviesPress({ ids: this.getSelectedIds() });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n totalItems,\r\n items,\r\n columns,\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n sortKey,\r\n sortDirection,\r\n view,\r\n onSortSelect,\r\n onFilterSelect,\r\n onViewSelect,\r\n onScroll,\r\n onAddMoviesPress,\r\n isSyncingLists,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n jumpBarItems,\r\n jumpToCharacter,\r\n isPosterOptionsModalOpen,\r\n isOverviewOptionsModalOpen,\r\n selectedState,\r\n allSelected,\r\n allUnselected\r\n } = this.state;\r\n\r\n const selectedMovieIds = this.getSelectedIds();\r\n\r\n const ViewComponent = getViewComponent(view);\r\n const isLoaded = !!(!error && isPopulated && items.length && this.scrollerRef.current);\r\n const hasNoMovie = !totalItems;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {\r\n view === 'table' ?\r\n \r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n view === 'posters' ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n view === 'overview' ?\r\n :\r\n null\r\n }\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n \r\n {\r\n isFetching && !isPopulated &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('UnableToLoadMovies')}\r\n \r\n }\r\n\r\n {\r\n isLoaded &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {\r\n !error && isPopulated && !items.length &&\r\n \r\n }\r\n \r\n\r\n {\r\n isLoaded && !!jumpBarItems.order.length &&\r\n \r\n }\r\n
\r\n\r\n {\r\n isLoaded &&\r\n \r\n }\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nDiscoverMovie.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n totalItems: PropTypes.number.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n sortKey: PropTypes.string,\r\n sortDirection: PropTypes.oneOf(sortDirections.all),\r\n view: PropTypes.string.isRequired,\r\n includeRecommendations: PropTypes.bool.isRequired,\r\n includeTrending: PropTypes.bool.isRequired,\r\n includePopular: PropTypes.bool.isRequired,\r\n isSyncingLists: PropTypes.bool.isRequired,\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n onSortSelect: PropTypes.func.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired,\r\n onViewSelect: PropTypes.func.isRequired,\r\n onScroll: PropTypes.func.isRequired,\r\n onAddMoviesPress: PropTypes.func.isRequired,\r\n onExcludeMoviesPress: PropTypes.func.isRequired,\r\n onImportListSyncPress: PropTypes.func.isRequired,\r\n dispatchFetchListMovies: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DiscoverMovie;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport withScrollPosition from 'Components/withScrollPosition';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { addImportListExclusions, addMovies, clearAddMovie, fetchDiscoverMovies, setListMovieFilter, setListMovieSort, setListMovieTableOption, setListMovieView } from 'Store/Actions/discoverMovieActions';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport scrollPositions from 'Store/scrollPositions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createDiscoverMovieClientSideCollectionItemsSelector from 'Store/Selectors/createDiscoverMovieClientSideCollectionItemsSelector';\r\nimport { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';\r\nimport DiscoverMovie from './DiscoverMovie';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.discoverMovie,\r\n createDiscoverMovieClientSideCollectionItemsSelector('discoverMovie'),\r\n createCommandExecutingSelector(commandNames.IMPORT_LIST_SYNC),\r\n createDimensionsSelector(),\r\n (\r\n discoverMovie,\r\n movies,\r\n isSyncingLists,\r\n dimensionsState\r\n ) => {\r\n return {\r\n ...discoverMovie.options,\r\n ...movies,\r\n isSyncingLists,\r\n isSmallScreen: dimensionsState.isSmallScreen\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n dispatchFetchRootFolders() {\r\n dispatch(fetchRootFolders());\r\n },\r\n\r\n dispatchClearListMovie() {\r\n dispatch(clearAddMovie());\r\n },\r\n\r\n dispatchFetchListMovies() {\r\n dispatch(fetchDiscoverMovies());\r\n },\r\n\r\n onTableOptionChange(payload) {\r\n dispatch(setListMovieTableOption(payload));\r\n },\r\n\r\n onSortSelect(sortKey) {\r\n dispatch(setListMovieSort({ sortKey }));\r\n },\r\n\r\n onFilterSelect(selectedFilterKey) {\r\n dispatch(setListMovieFilter({ selectedFilterKey }));\r\n },\r\n\r\n dispatchSetListMovieView(view) {\r\n dispatch(setListMovieView({ view }));\r\n },\r\n\r\n dispatchAddMovies(ids, addOptions) {\r\n dispatch(addMovies({ ids, addOptions }));\r\n },\r\n\r\n dispatchAddImportListExclusions(exclusions) {\r\n dispatch(addImportListExclusions(exclusions));\r\n },\r\n\r\n onImportListSyncPress() {\r\n dispatch(executeCommand({\r\n name: commandNames.IMPORT_LIST_SYNC,\r\n commandFinished: this.dispatchFetchListMovies\r\n }));\r\n }\r\n };\r\n}\r\n\r\nclass DiscoverMovieConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n registerPagePopulator(this.repopulate);\r\n this.props.dispatchFetchRootFolders();\r\n this.props.dispatchFetchListMovies();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.dispatchClearListMovie();\r\n unregisterPagePopulator(this.repopulate);\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onViewSelect = (view) => {\r\n this.props.dispatchSetListMovieView(view);\r\n };\r\n\r\n onScroll = ({ scrollTop }) => {\r\n scrollPositions.discoverMovie = scrollTop;\r\n };\r\n\r\n onAddMoviesPress = ({ ids, addOptions }) => {\r\n this.props.dispatchAddMovies(ids, addOptions);\r\n };\r\n\r\n onExcludeMoviesPress =({ ids }) => {\r\n this.props.dispatchAddImportListExclusions({ ids });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDiscoverMovieConnector.propTypes = {\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n view: PropTypes.string.isRequired,\r\n dispatchFetchRootFolders: PropTypes.func.isRequired,\r\n dispatchFetchListMovies: PropTypes.func.isRequired,\r\n dispatchClearListMovie: PropTypes.func.isRequired,\r\n dispatchSetListMovieView: PropTypes.func.isRequired,\r\n dispatchAddMovies: PropTypes.func.isRequired,\r\n dispatchAddImportListExclusions: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withScrollPosition(\r\n connect(createMapStateToProps, createMapDispatchToProps)(DiscoverMovieConnector),\r\n 'discoverMovie'\r\n);\r\n","import { createSelector } from 'reselect';\r\nimport createClientSideCollectionSelector from './createClientSideCollectionSelector';\r\nimport createDeepEqualSelector from './createDeepEqualSelector';\r\n\r\nfunction createUnoptimizedSelector(uiSection) {\r\n return createSelector(\r\n createClientSideCollectionSelector('movies', uiSection),\r\n (movies) => {\r\n const items = movies.items.map((s) => {\r\n const {\r\n tmdbId,\r\n sortTitle\r\n } = s;\r\n\r\n return {\r\n tmdbId,\r\n sortTitle\r\n };\r\n });\r\n\r\n return {\r\n ...movies,\r\n items\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createDiscoverMovieClientSideCollectionItemsSelector(uiSection) {\r\n return createDeepEqualSelector(\r\n createUnoptimizedSelector(uiSection),\r\n (movies) => movies\r\n );\r\n}\r\n\r\nexport default createDiscoverMovieClientSideCollectionItemsSelector;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"label\":\"InfoLabel-label-Wzh9H\",\"name\":\"InfoLabel-name-NH4Ts\",\"default\":\"InfoLabel-default-E_bcO\",\"small\":\"InfoLabel-small-IGdqv\",\"medium\":\"InfoLabel-medium-F0bfF\",\"large\":\"InfoLabel-large-nQsou\",\"outline\":\"InfoLabel-outline-cJaK3\"};","import classNames from 'classnames';\r\nimport React, { ComponentProps, ReactNode } from 'react';\r\nimport { Kind } from 'Helpers/Props/kinds';\r\nimport { Size } from 'Helpers/Props/sizes';\r\nimport styles from './InfoLabel.css';\r\n\r\ninterface InfoLabelProps extends ComponentProps<'span'> {\r\n className?: string;\r\n name: string;\r\n kind?: Extract;\r\n size?: Extract;\r\n outline?: boolean;\r\n children: ReactNode;\r\n}\r\n\r\nfunction InfoLabel({\r\n className = styles.label,\r\n name,\r\n kind = 'default',\r\n size = 'small',\r\n outline = false,\r\n children,\r\n ...otherProps\r\n}: InfoLabelProps) {\r\n return (\r\n \r\n
{name}
\r\n
{children}
\r\n \r\n );\r\n}\r\n\r\nexport default InfoLabel;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\n\r\nconst FPS = 20;\r\nconst STEP = 1;\r\nconst TIMEOUT = 1 / FPS * 1000;\r\n\r\nclass Marquee extends Component {\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n animatedWidth: 0,\r\n overflowWidth: 0,\r\n direction: 0\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.measureText();\r\n\r\n if (this.props.hoverToStop) {\r\n this.startAnimation();\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.props.text.length !== nextProps.text.length) {\r\n clearTimeout(this.marqueeTimer);\r\n this.setState({ animatedWidth: 0, direction: 0 });\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n this.measureText();\r\n\r\n if (this.props.hoverToStop) {\r\n this.startAnimation();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n clearTimeout(this.marqueeTimer);\r\n }\r\n\r\n onHandleMouseEnter = () => {\r\n if (this.props.hoverToStop) {\r\n clearTimeout(this.marqueeTimer);\r\n } else if (this.state.overflowWidth > 0) {\r\n this.startAnimation();\r\n }\r\n };\r\n\r\n onHandleMouseLeave = () => {\r\n if (this.props.hoverToStop && this.state.overflowWidth > 0) {\r\n this.startAnimation();\r\n } else {\r\n clearTimeout(this.marqueeTimer);\r\n this.setState({ animatedWidth: 0 });\r\n }\r\n };\r\n\r\n startAnimation = () => {\r\n clearTimeout(this.marqueeTimer);\r\n const isLeading = this.state.animatedWidth === 0;\r\n const timeout = isLeading ? 0 : TIMEOUT;\r\n\r\n const animate = () => {\r\n const { overflowWidth } = this.state;\r\n let animatedWidth = this.state.animatedWidth;\r\n let direction = this.state.direction;\r\n\r\n if (direction === 0) {\r\n animatedWidth = this.state.animatedWidth + STEP;\r\n } else {\r\n animatedWidth = this.state.animatedWidth - STEP;\r\n }\r\n\r\n const isRoundOver = animatedWidth < 0;\r\n const endOfText = animatedWidth > overflowWidth;\r\n\r\n if (endOfText) {\r\n direction = direction === 1;\r\n }\r\n\r\n if (isRoundOver) {\r\n if (this.props.loop) {\r\n direction = direction === 0;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n this.setState({ animatedWidth, direction });\r\n this.marqueeTimer = setTimeout(animate, TIMEOUT);\r\n };\r\n\r\n this.marqueeTimer = setTimeout(animate, timeout);\r\n };\r\n\r\n measureText = () => {\r\n const container = this.container;\r\n const node = this.text;\r\n\r\n if (container && node) {\r\n const containerWidth = container.offsetWidth;\r\n const textWidth = node.offsetWidth;\r\n const overflowWidth = textWidth - containerWidth;\r\n\r\n if (overflowWidth !== this.state.overflowWidth) {\r\n this.setState({ overflowWidth });\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n const style = {\r\n position: 'relative',\r\n right: this.state.animatedWidth,\r\n whiteSpace: 'nowrap'\r\n };\r\n\r\n if (this.state.overflowWidth < 0) {\r\n return (\r\n {\r\n this.container = el;\r\n }}\r\n className={classNames('ui-marquee', this.props.className)}\r\n style={{ overflow: 'hidden' }}\r\n >\r\n {\r\n this.text = el;\r\n }}\r\n style={style}\r\n title={(this.props.title && (this.props.text !== this.props.title)) ? `Original Title: ${this.props.title}` : this.props.text}\r\n >\r\n {this.props.text}\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n {\r\n this.container = el;\r\n }}\r\n className={classNames('ui-marquee', this.props.className)}\r\n style={{ overflow: 'hidden' }}\r\n onMouseEnter={this.onHandleMouseEnter}\r\n onMouseLeave={this.onHandleMouseLeave}\r\n >\r\n {\r\n this.text = el;\r\n }}\r\n style={style}\r\n title={(this.props.title && (this.props.text !== this.props.title)) ? `Original Title: ${this.props.title}` : this.props.text}\r\n >\r\n {this.props.text}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nMarquee.propTypes = {\r\n text: PropTypes.string,\r\n title: PropTypes.string,\r\n hoverToStop: PropTypes.bool,\r\n loop: PropTypes.bool,\r\n className: PropTypes.string\r\n};\r\n\r\nMarquee.defaultProps = {\r\n text: '',\r\n title: '',\r\n hoverToStop: true,\r\n loop: false,\r\n className: ''\r\n};\r\n\r\nexport default Marquee;\r\n","import { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\r\nimport {\r\n default as useMeasureHook,\r\n Options,\r\n RectReadOnly,\r\n} from 'react-use-measure';\r\n\r\nconst ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\r\n\r\nexport type Measurements = RectReadOnly;\r\n\r\nfunction useMeasure(\r\n options?: Omit\r\n): ReturnType {\r\n return useMeasureHook({\r\n polyfill: ResizeObserver,\r\n ...options,\r\n });\r\n}\r\n\r\nexport default useMeasure;\r\n","import React, { useCallback, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { icons, inputTypes, kinds } from 'Helpers/Props';\r\nimport { Statistics } from 'Movie/Movie';\r\nimport useMovie from 'Movie/useMovie';\r\nimport { deleteMovie, setDeleteOption } from 'Store/Actions/movieActions';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './DeleteMovieModalContent.css';\r\n\r\nexport interface DeleteMovieModalContentProps {\r\n movieId: number;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction DeleteMovieModalContent({\r\n movieId,\r\n onModalClose,\r\n}: DeleteMovieModalContentProps) {\r\n const dispatch = useDispatch();\r\n const {\r\n title,\r\n path,\r\n collection,\r\n statistics = {} as Statistics,\r\n } = useMovie(movieId)!;\r\n const { addImportExclusion } = useSelector(\r\n (state: AppState) => state.movies.deleteOptions\r\n );\r\n\r\n const { movieFileCount = 0, sizeOnDisk = 0 } = statistics;\r\n\r\n const [deleteFiles, setDeleteFiles] = useState(false);\r\n\r\n const handleDeleteFilesChange = useCallback(\r\n ({ value }: CheckInputChanged) => {\r\n setDeleteFiles(value);\r\n },\r\n []\r\n );\r\n\r\n const handleDeleteMovieConfirmed = useCallback(() => {\r\n dispatch(\r\n deleteMovie({\r\n id: movieId,\r\n collectionTmdbId: collection?.tmdbId,\r\n deleteFiles,\r\n addImportExclusion,\r\n })\r\n );\r\n\r\n onModalClose();\r\n }, [\r\n movieId,\r\n collection,\r\n addImportExclusion,\r\n deleteFiles,\r\n dispatch,\r\n onModalClose,\r\n ]);\r\n\r\n const handleDeleteOptionChange = useCallback(\r\n ({ name, value }: CheckInputChanged) => {\r\n dispatch(setDeleteOption({ [name]: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n {translate('DeleteHeader', { title })}\r\n\r\n \r\n
\r\n \r\n\r\n {path}\r\n
\r\n\r\n \r\n {translate('AddListExclusion')}\r\n\r\n \r\n \r\n\r\n \r\n \r\n {movieFileCount === 0\r\n ? translate('DeleteMovieFolder')\r\n : translate('DeleteMovieFiles', { movieFileCount })}\r\n \r\n\r\n \r\n \r\n\r\n {deleteFiles ? (\r\n
\r\n
\r\n \r\n
\r\n\r\n {movieFileCount ? (\r\n
\r\n {translate('DeleteMovieFolderMovieCount', {\r\n movieFileCount,\r\n size: formatBytes(sizeOnDisk),\r\n })}\r\n
\r\n ) : null}\r\n
\r\n ) : null}\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default DeleteMovieModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"pathContainer\":\"DeleteMovieModalContent-pathContainer-kO_OD\",\"pathIcon\":\"DeleteMovieModalContent-pathIcon-GH7e9\",\"folderPath\":\"DeleteMovieModalContent-folderPath-uwV2T\",\"deleteFilesMessage\":\"DeleteMovieModalContent-deleteFilesMessage-s6kFt\",\"deleteCount\":\"DeleteMovieModalContent-deleteCount-G40bz\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport DeleteMovieModalContent, {\r\n DeleteMovieModalContentProps,\r\n} from './DeleteMovieModalContent';\r\n\r\ninterface DeleteMovieModalProps extends DeleteMovieModalContentProps {\r\n isOpen: boolean;\r\n}\r\n\r\nfunction DeleteMovieModal({\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n}: DeleteMovieModalProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default DeleteMovieModal;\r\n","import React, { useCallback, useState } from 'react';\r\nimport HistoryDetailsModal from 'Activity/History/Details/HistoryDetailsModal';\r\nimport HistoryEventTypeCell from 'Activity/History/HistoryEventTypeCell';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport Language from 'Language/Language';\r\nimport MovieFormats from 'Movie/MovieFormats';\r\nimport MovieLanguages from 'Movie/MovieLanguages';\r\nimport MovieQuality from 'Movie/MovieQuality';\r\nimport { QualityModel } from 'Quality/Quality';\r\nimport CustomFormat from 'typings/CustomFormat';\r\nimport { HistoryData, HistoryEventType } from 'typings/History';\r\nimport formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MovieHistoryRow.css';\r\n\r\ninterface MovieHistoryRowProps {\r\n id: number;\r\n eventType: HistoryEventType;\r\n sourceTitle: string;\r\n languages?: Language[];\r\n quality: QualityModel;\r\n qualityCutoffNotMet: boolean;\r\n customFormats?: CustomFormat[];\r\n customFormatScore: number;\r\n date: string;\r\n data: HistoryData;\r\n downloadId?: string;\r\n onMarkAsFailedPress: (historyId: number) => void;\r\n}\r\n\r\nfunction MovieHistoryRow({\r\n id,\r\n eventType,\r\n sourceTitle,\r\n languages = [],\r\n quality,\r\n qualityCutoffNotMet,\r\n customFormats = [],\r\n customFormatScore,\r\n date,\r\n data,\r\n downloadId,\r\n onMarkAsFailedPress,\r\n}: MovieHistoryRowProps) {\r\n const [isDetailsModalOpen, setIsDetailsModalOpen] = useState(false);\r\n const [isMarkAsFailedModalOpen, setIsMarkAsFailedModalOpen] = useState(false);\r\n\r\n const handleDetailsPress = useCallback(() => {\r\n setIsDetailsModalOpen(true);\r\n }, [setIsDetailsModalOpen]);\r\n\r\n const handleDetailsModalClose = useCallback(() => {\r\n setIsDetailsModalOpen(false);\r\n }, [setIsDetailsModalOpen]);\r\n\r\n const handleMarkAsFailedPress = useCallback(() => {\r\n setIsMarkAsFailedModalOpen(true);\r\n }, []);\r\n\r\n const handleConfirmMarkAsFailed = useCallback(() => {\r\n onMarkAsFailedPress(id);\r\n setIsMarkAsFailedModalOpen(false);\r\n }, [id, onMarkAsFailedPress]);\r\n\r\n const handleMarkAsFailedModalClose = useCallback(() => {\r\n setIsMarkAsFailedModalOpen(false);\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n\r\n {sourceTitle}\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {formatCustomFormatScore(customFormatScore, customFormats.length)}\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n {eventType === 'grabbed' ? (\r\n \r\n ) : null}\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieHistoryRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"MovieHistoryRow-actions-SVCD3 TableRowCell-cell-giPrj\",\"sourceTitle\":\"MovieHistoryRow-sourceTitle-x2TjG TableRowCell-cell-giPrj\",\"customFormatScore\":\"MovieHistoryRow-customFormatScore-azPE4 TableRowCell-cell-giPrj\"};","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport Alert from 'Components/Alert';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Column from 'Components/Table/Column';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport {\r\n clearMovieHistory,\r\n fetchMovieHistory,\r\n movieHistoryMarkAsFailed,\r\n} from 'Store/Actions/movieHistoryActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport MovieHistoryRow from './MovieHistoryRow';\r\n\r\nconst columns: Column[] = [\r\n {\r\n name: 'eventType',\r\n label: '',\r\n isVisible: true,\r\n },\r\n {\r\n name: 'sourceTitle',\r\n label: () => translate('SourceTitle'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Languages'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'quality',\r\n label: () => translate('Quality'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'customFormats',\r\n label: () => translate('CustomFormats'),\r\n isSortable: false,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'customFormatScore',\r\n label: React.createElement(Icon, {\r\n name: icons.SCORE,\r\n title: () => translate('CustomFormatScore'),\r\n }),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'date',\r\n label: () => translate('Date'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'actions',\r\n label: '',\r\n isVisible: true,\r\n },\r\n];\r\n\r\nexport interface MovieHistoryModalContentProps {\r\n movieId: number;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction MovieHistoryModalContent({\r\n movieId,\r\n onModalClose,\r\n}: MovieHistoryModalContentProps) {\r\n const dispatch = useDispatch();\r\n\r\n const { isFetching, isPopulated, error, items } = useSelector(\r\n (state: AppState) => state.movieHistory\r\n );\r\n\r\n const hasItems = !!items.length;\r\n\r\n const handleMarkAsFailedPress = useCallback(\r\n (historyId: number) => {\r\n dispatch(\r\n movieHistoryMarkAsFailed({\r\n historyId,\r\n movieId,\r\n })\r\n );\r\n },\r\n [movieId, dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n dispatch(fetchMovieHistory({ movieId }));\r\n\r\n return () => {\r\n dispatch(clearMovieHistory());\r\n };\r\n }, [movieId, dispatch]);\r\n\r\n return (\r\n \r\n {translate('History')}\r\n\r\n \r\n {isFetching && !isPopulated ? : null}\r\n\r\n {!isFetching && !!error ? (\r\n {translate('HistoryLoadError')}\r\n ) : null}\r\n\r\n {isPopulated && !hasItems && !error ? (\r\n
{translate('NoHistory')}
\r\n ) : null}\r\n\r\n {isPopulated && hasItems && !error && (\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n )}\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieHistoryModalContent;\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport MovieHistoryModalContent, {\r\n MovieHistoryModalContentProps,\r\n} from 'Movie/History/MovieHistoryModalContent';\r\n\r\ninterface MovieHistoryModalProps extends MovieHistoryModalContentProps {\r\n isOpen: boolean;\r\n}\r\n\r\nfunction MovieHistoryModal({\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n}: MovieHistoryModalProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieHistoryModal;\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport MonitorToggleButton from 'Components/MonitorToggleButton';\r\nimport { toggleCollectionMonitored } from 'Store/Actions/movieCollectionActions';\r\nimport { createCollectionSelectorForHook } from 'Store/Selectors/createCollectionSelector';\r\nimport MovieCollection from 'typings/MovieCollection';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MovieCollectionLabel.css';\r\n\r\ninterface MovieCollectionLabelProps {\r\n tmdbId: number;\r\n}\r\n\r\nfunction MovieCollectionLabel({ tmdbId }: MovieCollectionLabelProps) {\r\n const {\r\n id,\r\n monitored,\r\n title,\r\n isSaving = false,\r\n } = useSelector(createCollectionSelectorForHook(tmdbId)) ||\r\n ({} as MovieCollection);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const handleMonitorTogglePress = useCallback(\r\n (value: boolean) => {\r\n dispatch(\r\n toggleCollectionMonitored({ collectionId: id, monitored: value })\r\n );\r\n },\r\n [id, dispatch]\r\n );\r\n\r\n if (!id) {\r\n return translate('Unknown');\r\n }\r\n\r\n return (\r\n
\r\n \r\n {title}\r\n
\r\n );\r\n}\r\n\r\nexport default MovieCollectionLabel;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"monitorToggleButton\":\"MovieCollectionLabel-monitorToggleButton-jkuXb MonitorToggleButton-toggleButton-fG17x IconButton-button-t4C5V Link-link-RInnp\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport MenuButton from 'Components/Menu/MenuButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './PageMenuButton.css';\r\n\r\nfunction PageMenuButton(props) {\r\n const {\r\n iconName,\r\n showIndicator,\r\n text,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n\r\n {\r\n showIndicator ?\r\n \r\n \r\n :\r\n null\r\n }\r\n\r\n
\r\n {text}\r\n
\r\n \r\n );\r\n}\r\n\r\nPageMenuButton.propTypes = {\r\n iconName: PropTypes.object.isRequired,\r\n text: PropTypes.string,\r\n showIndicator: PropTypes.bool.isRequired\r\n};\r\n\r\nPageMenuButton.defaultProps = {\r\n showIndicator: false\r\n};\r\n\r\nexport default PageMenuButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"menuButton\":\"PageMenuButton-menuButton-xRzLO MenuButton-menuButton-Jl5Je\",\"indicatorContainer\":\"PageMenuButton-indicatorContainer-POVDu\",\"label\":\"PageMenuButton-label-Jm2ou\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FilterModal from 'Components/Filter/FilterModal';\r\nimport { setReleasesFilter } from 'Store/Actions/releaseActions';\r\n\r\nfunction createReleasesSelector() {\r\n return createSelector(\r\n (state: AppState) => state.releases.items,\r\n (releases) => {\r\n return releases;\r\n }\r\n );\r\n}\r\n\r\nfunction createFilterBuilderPropsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.releases.filterBuilderProps,\r\n (filterBuilderProps) => {\r\n return filterBuilderProps;\r\n }\r\n );\r\n}\r\n\r\ninterface InteractiveSearchFilterModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nexport default function InteractiveSearchFilterModal({\r\n ...otherProps\r\n}: InteractiveSearchFilterModalProps) {\r\n const sectionItems = useSelector(createReleasesSelector());\r\n const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());\r\n\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSetFilter = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setReleasesFilter(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import { createSelector } from 'reselect';\r\nimport { DownloadClientAppState } from 'App/State/SettingsAppState';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport DownloadClient from 'typings/DownloadClient';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\n\r\nexport default function createEnabledDownloadClientsSelector(\r\n protocol: DownloadProtocol\r\n) {\r\n return createSelector(\r\n createSortedSectionSelector(\r\n 'settings.downloadClients',\r\n sortByProp('name')\r\n ),\r\n (downloadClients: DownloadClientAppState) => {\r\n const { isFetching, isPopulated, error, items } = downloadClients;\r\n\r\n const clients = items.filter(\r\n (item) => item.protocol === protocol && item.enable\r\n );\r\n\r\n return { isFetching, isPopulated, error, items: clients };\r\n }\r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"downloadClient\":\"SelectDownloadClientRow-downloadClient-xQOZi\"};","import React, { useCallback } from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './SelectDownloadClientRow.css';\r\n\r\ninterface SelectSeasonRowProps {\r\n id: number;\r\n name: string;\r\n priority: number;\r\n onDownloadClientSelect(downloadClientId: number): unknown;\r\n}\r\n\r\nfunction SelectDownloadClientRow(props: SelectSeasonRowProps) {\r\n const { id, name, priority, onDownloadClientSelect } = props;\r\n\r\n const onSeasonSelectWrapper = useCallback(() => {\r\n onDownloadClientSelect(id);\r\n }, [id, onDownloadClientSelect]);\r\n\r\n return (\r\n \r\n
{name}
\r\n
{translate('PrioritySettings', { priority })}
\r\n \r\n );\r\n}\r\n\r\nexport default SelectDownloadClientRow;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport { kinds } from 'Helpers/Props';\r\nimport createEnabledDownloadClientsSelector from 'Store/Selectors/createEnabledDownloadClientsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport SelectDownloadClientRow from './SelectDownloadClientRow';\r\n\r\ninterface SelectDownloadClientModalContentProps {\r\n protocol: DownloadProtocol;\r\n modalTitle: string;\r\n onDownloadClientSelect(downloadClientId: number): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectDownloadClientModalContent(\r\n props: SelectDownloadClientModalContentProps\r\n) {\r\n const { modalTitle, protocol, onDownloadClientSelect, onModalClose } = props;\r\n\r\n const { isFetching, isPopulated, error, items } = useSelector(\r\n createEnabledDownloadClientsSelector(protocol)\r\n );\r\n\r\n return (\r\n \r\n \r\n {translate('SelectDownloadClientModalTitle', { modalTitle })}\r\n \r\n\r\n \r\n {isFetching ? : null}\r\n\r\n {!isFetching && error ? (\r\n \r\n {translate('DownloadClientsLoadError')}\r\n \r\n ) : null}\r\n\r\n {isPopulated && !error ? (\r\n
\r\n {items.map((downloadClient) => {\r\n const { id, name, priority } = downloadClient;\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n ) : null}\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default SelectDownloadClientModalContent;\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport { sizes } from 'Helpers/Props';\r\nimport SelectDownloadClientModalContent from './SelectDownloadClientModalContent';\r\n\r\ninterface SelectDownloadClientModalProps {\r\n isOpen: boolean;\r\n protocol: DownloadProtocol;\r\n modalTitle: string;\r\n onDownloadClientSelect(downloadClientId: number): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction SelectDownloadClientModal(props: SelectDownloadClientModalProps) {\r\n const { isOpen, protocol, modalTitle, onDownloadClientSelect, onModalClose } =\r\n props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelectDownloadClientModal;\r\n","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport styles from './OverrideMatchData.css';\r\n\r\ninterface OverrideMatchDataProps {\r\n value?: string | number | JSX.Element | JSX.Element[];\r\n isDisabled?: boolean;\r\n isOptional?: boolean;\r\n onPress: () => void;\r\n}\r\n\r\nfunction OverrideMatchData(props: OverrideMatchDataProps) {\r\n const { value, isDisabled = false, isOptional, onPress } = props;\r\n\r\n return (\r\n \r\n {(value == null || (Array.isArray(value) && value.length === 0)) &&\r\n !isDisabled ? (\r\n \r\n  \r\n \r\n ) : (\r\n value\r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default OverrideMatchData;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"OverrideMatchData-link-PKQNa Link-link-RInnp\",\"placeholder\":\"OverrideMatchData-placeholder-mDuC1\",\"optional\":\"OverrideMatchData-optional-YwTls\"};","// extracted by mini-css-extract-plugin\nexport default {\"label\":\"OverrideMatchModalContent-label-ydHUJ Label-label-DYldh\",\"item\":\"OverrideMatchModalContent-item-ASVat\",\"footer\":\"OverrideMatchModalContent-footer-MpAPK ModalFooter-modalFooter-wjkx5\",\"error\":\"OverrideMatchModalContent-error-aKJAK\",\"buttons\":\"OverrideMatchModalContent-buttons-r21Pi\"};","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport SelectLanguageModal from 'InteractiveImport/Language/SelectLanguageModal';\r\nimport SelectMovieModal from 'InteractiveImport/Movie/SelectMovieModal';\r\nimport SelectQualityModal from 'InteractiveImport/Quality/SelectQualityModal';\r\nimport Language from 'Language/Language';\r\nimport Movie from 'Movie/Movie';\r\nimport MovieLanguages from 'Movie/MovieLanguages';\r\nimport MovieQuality from 'Movie/MovieQuality';\r\nimport { QualityModel } from 'Quality/Quality';\r\nimport { grabRelease } from 'Store/Actions/releaseActions';\r\nimport { fetchDownloadClients } from 'Store/Actions/settingsActions';\r\nimport createEnabledDownloadClientsSelector from 'Store/Selectors/createEnabledDownloadClientsSelector';\r\nimport { createMovieSelectorForHook } from 'Store/Selectors/createMovieSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport SelectDownloadClientModal from './DownloadClient/SelectDownloadClientModal';\r\nimport OverrideMatchData from './OverrideMatchData';\r\nimport styles from './OverrideMatchModalContent.css';\r\n\r\ntype SelectType =\r\n | 'select'\r\n | 'movie'\r\n | 'quality'\r\n | 'language'\r\n | 'downloadClient';\r\n\r\ninterface OverrideMatchModalContentProps {\r\n indexerId: number;\r\n title: string;\r\n guid: string;\r\n movieId?: number;\r\n languages: Language[];\r\n quality: QualityModel;\r\n protocol: DownloadProtocol;\r\n isGrabbing: boolean;\r\n grabError?: string;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction OverrideMatchModalContent(props: OverrideMatchModalContentProps) {\r\n const modalTitle = translate('ManualGrab');\r\n const {\r\n indexerId,\r\n title,\r\n guid,\r\n protocol,\r\n isGrabbing,\r\n grabError,\r\n onModalClose,\r\n } = props;\r\n\r\n const [movieId, setMovieId] = useState(props.movieId);\r\n const [languages, setLanguages] = useState(props.languages);\r\n const [quality, setQuality] = useState(props.quality);\r\n const [downloadClientId, setDownloadClientId] = useState(null);\r\n const [error, setError] = useState(null);\r\n const [selectModalOpen, setSelectModalOpen] = useState(\r\n null\r\n );\r\n const previousIsGrabbing = usePrevious(isGrabbing);\r\n\r\n const dispatch = useDispatch();\r\n const movie: Movie | undefined = useSelector(\r\n createMovieSelectorForHook(movieId)\r\n );\r\n const { items: downloadClients } = useSelector(\r\n createEnabledDownloadClientsSelector(protocol)\r\n );\r\n\r\n const onSelectModalClose = useCallback(() => {\r\n setSelectModalOpen(null);\r\n }, [setSelectModalOpen]);\r\n\r\n const onSelectMoviePress = useCallback(() => {\r\n setSelectModalOpen('movie');\r\n }, [setSelectModalOpen]);\r\n\r\n const onMovieSelect = useCallback(\r\n (m: Movie) => {\r\n setMovieId(m.id);\r\n setSelectModalOpen(null);\r\n },\r\n [setMovieId, setSelectModalOpen]\r\n );\r\n\r\n const onSelectQualityPress = useCallback(() => {\r\n setSelectModalOpen('quality');\r\n }, [setSelectModalOpen]);\r\n\r\n const onQualitySelect = useCallback(\r\n (quality: QualityModel) => {\r\n setQuality(quality);\r\n setSelectModalOpen(null);\r\n },\r\n [setQuality, setSelectModalOpen]\r\n );\r\n\r\n const onSelectLanguagesPress = useCallback(() => {\r\n setSelectModalOpen('language');\r\n }, [setSelectModalOpen]);\r\n\r\n const onLanguagesSelect = useCallback(\r\n (languages: Language[]) => {\r\n setLanguages(languages);\r\n setSelectModalOpen(null);\r\n },\r\n [setLanguages, setSelectModalOpen]\r\n );\r\n\r\n const onSelectDownloadClientPress = useCallback(() => {\r\n setSelectModalOpen('downloadClient');\r\n }, [setSelectModalOpen]);\r\n\r\n const onDownloadClientSelect = useCallback(\r\n (downloadClientId: number) => {\r\n setDownloadClientId(downloadClientId);\r\n setSelectModalOpen(null);\r\n },\r\n [setDownloadClientId, setSelectModalOpen]\r\n );\r\n\r\n const onGrabPress = useCallback(() => {\r\n if (!movieId) {\r\n setError(translate('OverrideGrabNoMovie'));\r\n return;\r\n } else if (!quality) {\r\n setError(translate('OverrideGrabNoQuality'));\r\n return;\r\n } else if (!languages.length) {\r\n setError(translate('OverrideGrabNoLanguage'));\r\n return;\r\n }\r\n\r\n dispatch(\r\n grabRelease({\r\n indexerId,\r\n guid,\r\n movieId,\r\n quality,\r\n languages,\r\n downloadClientId,\r\n shouldOverride: true,\r\n })\r\n );\r\n }, [\r\n indexerId,\r\n guid,\r\n movieId,\r\n quality,\r\n languages,\r\n downloadClientId,\r\n setError,\r\n dispatch,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!isGrabbing && previousIsGrabbing) {\r\n onModalClose();\r\n }\r\n }, [isGrabbing, previousIsGrabbing, onModalClose]);\r\n\r\n useEffect(\r\n () => {\r\n dispatch(fetchDownloadClients());\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n return (\r\n \r\n \r\n {translate('OverrideGrabModalTitle', { title })}\r\n \r\n\r\n \r\n \r\n \r\n }\r\n />\r\n\r\n \r\n }\r\n onPress={onSelectQualityPress}\r\n />\r\n }\r\n />\r\n\r\n \r\n }\r\n onPress={onSelectLanguagesPress}\r\n />\r\n }\r\n />\r\n\r\n {downloadClients.length > 1 ? (\r\n downloadClient.id === downloadClientId\r\n )?.name ?? translate('Default')\r\n }\r\n onPress={onSelectDownloadClientPress}\r\n />\r\n }\r\n />\r\n ) : null}\r\n \r\n \r\n\r\n \r\n
{error || grabError}
\r\n\r\n
\r\n \r\n\r\n \r\n {translate('GrabRelease')}\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n 1 : false}\r\n real={quality ? quality.revision.real > 0 : false}\r\n modalTitle={modalTitle}\r\n onQualitySelect={onQualitySelect}\r\n onModalClose={onSelectModalClose}\r\n />\r\n\r\n l.id) : []}\r\n modalTitle={modalTitle}\r\n onLanguagesSelect={onLanguagesSelect}\r\n onModalClose={onSelectModalClose}\r\n />\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default OverrideMatchModalContent;\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport { sizes } from 'Helpers/Props';\r\nimport Language from 'Language/Language';\r\nimport { QualityModel } from 'Quality/Quality';\r\nimport OverrideMatchModalContent from './OverrideMatchModalContent';\r\n\r\ninterface OverrideMatchModalProps {\r\n isOpen: boolean;\r\n title: string;\r\n indexerId: number;\r\n guid: string;\r\n movieId?: number;\r\n languages: Language[];\r\n quality: QualityModel;\r\n protocol: DownloadProtocol;\r\n isGrabbing: boolean;\r\n grabError?: string;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction OverrideMatchModal(props: OverrideMatchModalProps) {\r\n const {\r\n isOpen,\r\n title,\r\n indexerId,\r\n guid,\r\n movieId,\r\n languages,\r\n quality,\r\n protocol,\r\n isGrabbing,\r\n grabError,\r\n onModalClose,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default OverrideMatchModal;\r\n","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { kinds } from 'Helpers/Props';\r\n\r\nfunction getKind(seeders: number = 0) {\r\n if (seeders > 50) {\r\n return kinds.PRIMARY;\r\n }\r\n\r\n if (seeders > 10) {\r\n return kinds.INFO;\r\n }\r\n\r\n if (seeders > 0) {\r\n return kinds.WARNING;\r\n }\r\n\r\n return kinds.DANGER;\r\n}\r\n\r\nfunction getPeersTooltipPart(peers: number | undefined, peersUnit: string) {\r\n if (peers == null) {\r\n return `Unknown ${peersUnit}s`;\r\n }\r\n\r\n if (peers === 1) {\r\n return `1 ${peersUnit}`;\r\n }\r\n\r\n return `${peers} ${peersUnit}s`;\r\n}\r\n\r\ninterface PeersProps {\r\n seeders?: number;\r\n leechers?: number;\r\n}\r\n\r\nfunction Peers(props: PeersProps) {\r\n const { seeders, leechers } = props;\r\n\r\n const kind = getKind(seeders);\r\n\r\n return (\r\n \r\n {seeders == null ? '-' : seeders} / {leechers == null ? '-' : leechers}\r\n \r\n );\r\n}\r\n\r\nexport default Peers;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"protocol\":\"InteractiveSearchRow-protocol-b6LO7 TableRowCell-cell-giPrj\",\"titleContent\":\"InteractiveSearchRow-titleContent-U2HxT\",\"indexer\":\"InteractiveSearchRow-indexer-d6vdv TableRowCell-cell-giPrj\",\"quality\":\"InteractiveSearchRow-quality-Dfyom TableRowCell-cell-giPrj\",\"languages\":\"InteractiveSearchRow-languages-O4K6A TableRowCell-cell-giPrj\",\"customFormatScore\":\"InteractiveSearchRow-customFormatScore-_bMLv TableRowCell-cell-giPrj\",\"rejected\":\"InteractiveSearchRow-rejected-Zg0fy TableRowCell-cell-giPrj\",\"indexerFlags\":\"InteractiveSearchRow-indexerFlags-WmlTF TableRowCell-cell-giPrj\",\"age\":\"InteractiveSearchRow-age-_Al2v TableRowCell-cell-giPrj\",\"size\":\"InteractiveSearchRow-size-gI6mO TableRowCell-cell-giPrj\",\"peers\":\"InteractiveSearchRow-peers-KAl97 TableRowCell-cell-giPrj\",\"history\":\"InteractiveSearchRow-history-eOHwm TableRowCell-cell-giPrj\",\"blocklist\":\"InteractiveSearchRow-blocklist-DkIKc\",\"download\":\"InteractiveSearchRow-download-VeAgn TableRowCell-cell-giPrj\",\"manualDownloadContent\":\"InteractiveSearchRow-manualDownloadContent-Akkjh\",\"interactiveIcon\":\"InteractiveSearchRow-interactiveIcon-LzVGJ\",\"downloadIcon\":\"InteractiveSearchRow-downloadIcon-Yb6Yj\"};","import React, { useCallback, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport ProtocolLabel from 'Activity/Queue/ProtocolLabel';\r\nimport AppState from 'App/State/AppState';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { icons, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport MovieFormats from 'Movie/MovieFormats';\r\nimport MovieLanguages from 'Movie/MovieLanguages';\r\nimport MovieQuality from 'Movie/MovieQuality';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport Release from 'typings/Release';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport formatAge from 'Utilities/Number/formatAge';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';\r\nimport translate from 'Utilities/String/translate';\r\nimport InteractiveSearchPayload from './InteractiveSearchPayload';\r\nimport OverrideMatchModal from './OverrideMatch/OverrideMatchModal';\r\nimport Peers from './Peers';\r\nimport styles from './InteractiveSearchRow.css';\r\n\r\nfunction getDownloadIcon(\r\n isGrabbing: boolean,\r\n isGrabbed: boolean,\r\n grabError?: string\r\n) {\r\n if (isGrabbing) {\r\n return icons.SPINNER;\r\n } else if (isGrabbed) {\r\n return icons.DOWNLOADING;\r\n } else if (grabError) {\r\n return icons.DOWNLOADING;\r\n }\r\n\r\n return icons.DOWNLOAD;\r\n}\r\n\r\nfunction getDownloadKind(isGrabbed: boolean, grabError?: string) {\r\n if (isGrabbed) {\r\n return kinds.SUCCESS;\r\n }\r\n\r\n if (grabError) {\r\n return kinds.DANGER;\r\n }\r\n\r\n return kinds.DEFAULT;\r\n}\r\n\r\nfunction getDownloadTooltip(\r\n isGrabbing: boolean,\r\n isGrabbed: boolean,\r\n grabError?: string\r\n) {\r\n if (isGrabbing) {\r\n return '';\r\n } else if (isGrabbed) {\r\n return translate('AddedToDownloadQueue');\r\n } else if (grabError) {\r\n return grabError;\r\n }\r\n\r\n return translate('AddToDownloadQueue');\r\n}\r\n\r\nfunction releaseHistorySelector({ guid }: Release) {\r\n return createSelector(\r\n (state: AppState) => state.movieHistory.items,\r\n (state: AppState) => state.movieBlocklist.items,\r\n (movieHistory, movieBlocklist) => {\r\n let historyFailedData = null;\r\n let blocklistedData = null;\r\n\r\n const historyGrabbedData = movieHistory.find(\r\n ({ eventType, data }) =>\r\n eventType === 'grabbed' && 'guid' in data && data.guid === guid\r\n );\r\n\r\n if (historyGrabbedData) {\r\n historyFailedData = movieHistory.find(\r\n ({ eventType, sourceTitle }) =>\r\n eventType === 'downloadFailed' &&\r\n sourceTitle === historyGrabbedData.sourceTitle\r\n );\r\n\r\n blocklistedData = movieBlocklist.find(\r\n (item) => item.sourceTitle === historyGrabbedData.sourceTitle\r\n );\r\n }\r\n\r\n return {\r\n historyGrabbedData,\r\n historyFailedData,\r\n blocklistedData,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface InteractiveSearchRowProps extends Release {\r\n searchPayload: InteractiveSearchPayload;\r\n onGrabPress(...args: unknown[]): void;\r\n}\r\n\r\nfunction InteractiveSearchRow(props: InteractiveSearchRowProps) {\r\n const {\r\n guid,\r\n indexerId,\r\n protocol,\r\n age,\r\n ageHours,\r\n ageMinutes,\r\n publishDate,\r\n title,\r\n infoUrl,\r\n indexer,\r\n size,\r\n seeders,\r\n leechers,\r\n quality,\r\n languages,\r\n customFormatScore,\r\n customFormats,\r\n mappedMovieId,\r\n indexerFlags = [],\r\n rejections = [],\r\n downloadAllowed,\r\n isGrabbing = false,\r\n isGrabbed = false,\r\n grabError,\r\n searchPayload,\r\n onGrabPress,\r\n } = props;\r\n\r\n const { longDateFormat, timeFormat } = useSelector(\r\n createUISettingsSelector()\r\n );\r\n\r\n const { historyGrabbedData, historyFailedData, blocklistedData } =\r\n useSelector(releaseHistorySelector(props));\r\n\r\n const [isConfirmGrabModalOpen, setIsConfirmGrabModalOpen] = useState(false);\r\n const [isOverrideModalOpen, setIsOverrideModalOpen] = useState(false);\r\n\r\n const onGrabPressWrapper = useCallback(() => {\r\n if (downloadAllowed) {\r\n onGrabPress({\r\n guid,\r\n indexerId,\r\n });\r\n\r\n return;\r\n }\r\n\r\n setIsConfirmGrabModalOpen(true);\r\n }, [\r\n guid,\r\n indexerId,\r\n downloadAllowed,\r\n onGrabPress,\r\n setIsConfirmGrabModalOpen,\r\n ]);\r\n\r\n const onGrabConfirm = useCallback(() => {\r\n setIsConfirmGrabModalOpen(false);\r\n\r\n onGrabPress({\r\n guid,\r\n indexerId,\r\n ...searchPayload,\r\n });\r\n }, [guid, indexerId, searchPayload, onGrabPress, setIsConfirmGrabModalOpen]);\r\n\r\n const onGrabCancel = useCallback(() => {\r\n setIsConfirmGrabModalOpen(false);\r\n }, [setIsConfirmGrabModalOpen]);\r\n\r\n const onOverridePress = useCallback(() => {\r\n setIsOverrideModalOpen(true);\r\n }, [setIsOverrideModalOpen]);\r\n\r\n const onOverrideModalClose = useCallback(() => {\r\n setIsOverrideModalOpen(false);\r\n }, [setIsOverrideModalOpen]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n {formatAge(age, ageHours, ageMinutes)}\r\n \r\n\r\n \r\n
\r\n \r\n {title}\r\n \r\n
\r\n
\r\n\r\n {indexer}\r\n\r\n \r\n {historyGrabbedData?.date && !historyFailedData?.date ? (\r\n }\r\n tooltip={translate('GrabbedAt', {\r\n date: formatDateTime(\r\n historyGrabbedData.date,\r\n longDateFormat,\r\n timeFormat,\r\n { includeSeconds: true }\r\n ),\r\n })}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.LEFT}\r\n />\r\n ) : null}\r\n\r\n {historyFailedData?.date ? (\r\n }\r\n tooltip={translate('FailedAt', {\r\n date: formatDateTime(\r\n historyFailedData.date,\r\n longDateFormat,\r\n timeFormat,\r\n { includeSeconds: true }\r\n ),\r\n })}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.LEFT}\r\n />\r\n ) : null}\r\n\r\n {blocklistedData?.date ? (\r\n \r\n ) : null}\r\n \r\n\r\n {formatBytes(size)}\r\n\r\n \r\n {protocol === 'torrent' ? (\r\n \r\n ) : null}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n }\r\n position={tooltipPositions.LEFT}\r\n />\r\n \r\n\r\n \r\n {indexerFlags.length ? (\r\n }\r\n title={translate('IndexerFlags')}\r\n body={\r\n
    \r\n {indexerFlags.map((flag, index) => {\r\n return
  • {flag}
  • ;\r\n })}\r\n
\r\n }\r\n position={tooltipPositions.LEFT}\r\n />\r\n ) : null}\r\n
\r\n\r\n \r\n {rejections.length ? (\r\n }\r\n title={translate('ReleaseRejected')}\r\n body={\r\n
    \r\n {rejections.map((rejection, index) => {\r\n return
  • {rejection}
  • ;\r\n })}\r\n
\r\n }\r\n position={tooltipPositions.LEFT}\r\n />\r\n ) : null}\r\n
\r\n\r\n \r\n \r\n\r\n \r\n
\r\n \r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default InteractiveSearchRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"filterMenuContainer\":\"InteractiveSearch-filterMenuContainer-fP7Zp\",\"alert\":\"InteractiveSearch-alert-Ccmqf Alert-alert-_KgnQ\"};","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport ClientSideCollectionAppState from 'App/State/ClientSideCollectionAppState';\r\nimport ReleasesAppState from 'App/State/ReleasesAppState';\r\nimport Alert from 'Components/Alert';\r\nimport Icon from 'Components/Icon';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport PageMenuButton from 'Components/Menu/PageMenuButton';\r\nimport Column from 'Components/Table/Column';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { align, icons, kinds, sortDirections } from 'Helpers/Props';\r\nimport { SortDirection } from 'Helpers/Props/sortDirections';\r\nimport { fetchMovieBlocklist } from 'Store/Actions/movieBlocklistActions';\r\nimport { fetchMovieHistory } from 'Store/Actions/movieHistoryActions';\r\nimport {\r\n fetchReleases,\r\n grabRelease,\r\n setReleasesFilter,\r\n setReleasesSort,\r\n} from 'Store/Actions/releaseActions';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport InteractiveSearchFilterModal from './InteractiveSearchFilterModal';\r\nimport InteractiveSearchPayload from './InteractiveSearchPayload';\r\nimport InteractiveSearchRow from './InteractiveSearchRow';\r\nimport styles from './InteractiveSearch.css';\r\n\r\nconst columns: Column[] = [\r\n {\r\n name: 'protocol',\r\n label: () => translate('Source'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'age',\r\n label: () => translate('Age'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'title',\r\n label: () => translate('Title'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'indexer',\r\n label: () => translate('Indexer'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'history',\r\n label: () => translate('History'),\r\n isSortable: true,\r\n fixedSortDirection: sortDirections.ASCENDING,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'size',\r\n label: () => translate('Size'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'peers',\r\n label: () => translate('Peers'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'languages',\r\n label: () => translate('Language'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'qualityWeight',\r\n label: () => translate('Quality'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'customFormatScore',\r\n label: React.createElement(Icon, {\r\n name: icons.SCORE,\r\n title: () => translate('CustomFormatScore'),\r\n }),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'indexerFlags',\r\n label: React.createElement(Icon, {\r\n name: icons.FLAG,\r\n title: () => translate('IndexerFlags'),\r\n }),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'rejections',\r\n label: React.createElement(Icon, {\r\n name: icons.DANGER,\r\n title: () => translate('Rejections'),\r\n }),\r\n isSortable: true,\r\n fixedSortDirection: sortDirections.ASCENDING,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'releaseWeight',\r\n label: React.createElement(Icon, { name: icons.DOWNLOAD }),\r\n isSortable: true,\r\n fixedSortDirection: sortDirections.ASCENDING,\r\n isVisible: true,\r\n },\r\n];\r\n\r\ninterface InteractiveSearchProps {\r\n searchPayload: InteractiveSearchPayload;\r\n}\r\n\r\nfunction InteractiveSearch({ searchPayload }: InteractiveSearchProps) {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n totalItems,\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n sortKey,\r\n sortDirection,\r\n }: ReleasesAppState & ClientSideCollectionAppState = useSelector(\r\n createClientSideCollectionSelector('releases')\r\n );\r\n\r\n const dispatch = useDispatch();\r\n\r\n const handleFilterSelect = useCallback(\r\n (selectedFilterKey: string | number) => {\r\n dispatch(setReleasesFilter({ selectedFilterKey }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleSortPress = useCallback(\r\n (sortKey: string, sortDirection?: SortDirection) => {\r\n dispatch(setReleasesSort({ sortKey, sortDirection }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleGrabPress = useCallback(\r\n (payload: object) => {\r\n dispatch(grabRelease(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n useEffect(\r\n () => {\r\n // Only fetch releases if they are not already being fetched and not yet populated.\r\n\r\n if (!isFetching && !isPopulated) {\r\n dispatch(fetchReleases(searchPayload));\r\n\r\n const { movieId } = searchPayload;\r\n\r\n if (movieId) {\r\n dispatch(fetchMovieBlocklist({ movieId }));\r\n dispatch(fetchMovieHistory({ movieId }));\r\n }\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n const errorMessage = getErrorMessage(error);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n\r\n {isFetching ? : null}\r\n\r\n {!isFetching && error ? (\r\n \r\n {errorMessage ? (\r\n <>\r\n {translate('InteractiveSearchResultsFailedErrorMessage', {\r\n message:\r\n errorMessage.charAt(0).toLowerCase() + errorMessage.slice(1),\r\n })}\r\n \r\n ) : (\r\n translate('MovieSearchResultsLoadError')\r\n )}\r\n \r\n ) : null}\r\n\r\n {!isFetching && isPopulated && !totalItems ? (\r\n \r\n {translate('NoResultsFound')}\r\n \r\n ) : null}\r\n\r\n {!!totalItems && isPopulated && !items.length ? (\r\n \r\n {translate('AllResultsHiddenFilter')}\r\n \r\n ) : null}\r\n\r\n {isPopulated && !!items.length ? (\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n ) : null}\r\n\r\n {totalItems !== items.length && !!items.length ? (\r\n \r\n {translate('SomeResultsHiddenFilter')}\r\n \r\n ) : null}\r\n
\r\n );\r\n}\r\n\r\nexport default InteractiveSearch;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { scrollDirections } from 'Helpers/Props';\r\nimport InteractiveSearch from 'InteractiveSearch/InteractiveSearch';\r\nimport { clearMovieBlocklist } from 'Store/Actions/movieBlocklistActions';\r\nimport { clearMovieHistory } from 'Store/Actions/movieHistoryActions';\r\nimport {\r\n cancelFetchReleases,\r\n clearReleases,\r\n} from 'Store/Actions/releaseActions';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface MovieInteractiveSearchModalContentProps {\r\n movieId: number;\r\n movieTitle?: string;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction MovieInteractiveSearchModalContent(\r\n props: MovieInteractiveSearchModalContentProps\r\n) {\r\n const { movieId, movieTitle, onModalClose } = props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n return () => {\r\n dispatch(cancelFetchReleases());\r\n dispatch(clearReleases());\r\n\r\n dispatch(clearMovieBlocklist());\r\n dispatch(clearMovieHistory());\r\n };\r\n }, [dispatch]);\r\n\r\n return (\r\n \r\n \r\n {movieTitle\r\n ? translate('InteractiveSearchModalHeaderTitle', {\r\n title: movieTitle,\r\n })\r\n : translate('InteractiveSearchModalHeader')}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieInteractiveSearchModalContent;\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport { clearMovieBlocklist } from 'Store/Actions/movieBlocklistActions';\r\nimport { clearMovieHistory } from 'Store/Actions/movieHistoryActions';\r\nimport {\r\n cancelFetchReleases,\r\n clearReleases,\r\n} from 'Store/Actions/releaseActions';\r\nimport MovieInteractiveSearchModalContent from './MovieInteractiveSearchModalContent';\r\n\r\ninterface MovieInteractiveSearchModalProps {\r\n isOpen: boolean;\r\n movieId: number;\r\n movieTitle?: string;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction MovieInteractiveSearchModal(props: MovieInteractiveSearchModalProps) {\r\n const { isOpen, movieId, movieTitle, onModalClose } = props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const handleModalClose = useCallback(() => {\r\n dispatch(cancelFetchReleases());\r\n dispatch(clearReleases());\r\n\r\n dispatch(clearMovieBlocklist());\r\n dispatch(clearMovieHistory());\r\n\r\n onModalClose();\r\n }, [dispatch, onModalClose]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieInteractiveSearchModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nclass FileEditModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n const {\r\n qualityId,\r\n languageIds,\r\n indexerFlags,\r\n proper,\r\n real,\r\n edition,\r\n releaseGroup\r\n } = props;\r\n\r\n this.state = {\r\n qualityId,\r\n languageIds,\r\n indexerFlags,\r\n proper,\r\n real,\r\n edition,\r\n releaseGroup\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onQualityChange = ({ value }) => {\r\n this.setState({ qualityId: parseInt(value) });\r\n };\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.setState({ [name]: value });\r\n };\r\n\r\n onSaveInputs = () => {\r\n this.props.onSaveInputs(this.state);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n qualities,\r\n languages,\r\n relativePath,\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n qualityId,\r\n languageIds,\r\n indexerFlags,\r\n proper,\r\n real,\r\n edition,\r\n releaseGroup\r\n } = this.state;\r\n\r\n const qualityOptions = qualities.map(({ id, name }) => {\r\n return {\r\n key: id,\r\n value: name\r\n };\r\n });\r\n\r\n const languageOptions = languages.map(({ id, name }) => {\r\n return {\r\n key: id,\r\n value: name\r\n };\r\n });\r\n\r\n return (\r\n \r\n \r\n {translate('EditMovieFile')} - {relativePath}\r\n \r\n\r\n \r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('QualitiesLoadError')}\r\n \r\n }\r\n\r\n {\r\n isPopulated && !error &&\r\n
\r\n \r\n {translate('Quality')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Proper')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Real')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Languages')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('IndexerFlags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Edition')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ReleaseGroup')}\r\n\r\n \r\n \r\n
\r\n }\r\n
\r\n\r\n \r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nFileEditModalContent.propTypes = {\r\n qualityId: PropTypes.number.isRequired,\r\n proper: PropTypes.bool.isRequired,\r\n real: PropTypes.bool.isRequired,\r\n relativePath: PropTypes.string.isRequired,\r\n edition: PropTypes.string.isRequired,\r\n releaseGroup: PropTypes.string.isRequired,\r\n languageIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n languages: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n indexerFlags: PropTypes.number.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n qualities: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onSaveInputs: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default FileEditModalContent;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { updateMovieFiles } from 'Store/Actions/movieFileActions';\r\nimport { fetchQualityProfileSchema } from 'Store/Actions/settingsActions';\r\nimport createMovieFileSelector from 'Store/Selectors/createMovieFileSelector';\r\nimport getQualities from 'Utilities/Quality/getQualities';\r\nimport FileEditModalContent from './FileEditModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createMovieFileSelector(),\r\n (state) => state.settings.qualityProfiles,\r\n (state) => state.settings.languages,\r\n (movieFile, qualityProfiles, languages) => {\r\n\r\n const filterItems = ['Any', 'Original'];\r\n const filteredLanguages = languages.items.filter((lang) => !filterItems.includes(lang.name));\r\n\r\n const quality = movieFile.quality;\r\n\r\n return {\r\n isFetching: qualityProfiles.isSchemaFetching || languages.isFetching,\r\n isPopulated: qualityProfiles.isSchemaPopulated && languages.isPopulated,\r\n error: qualityProfiles.error || languages.error,\r\n qualityId: quality ? quality.quality.id : 0,\r\n real: quality ? quality.revision.real > 0 : false,\r\n proper: quality ? quality.revision.version > 1 : false,\r\n qualities: getQualities(qualityProfiles.schema.items),\r\n languageIds: movieFile.languages ? movieFile.languages.map((l) => l.id) : [],\r\n languages: filteredLanguages,\r\n indexerFlags: movieFile.indexerFlags,\r\n edition: movieFile.edition,\r\n releaseGroup: movieFile.releaseGroup,\r\n relativePath: movieFile.relativePath\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchQualityProfileSchema: fetchQualityProfileSchema,\r\n dispatchUpdateMovieFiles: updateMovieFiles\r\n};\r\n\r\nclass FileEditModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount = () => {\r\n if (!this.props.isPopulated) {\r\n this.props.dispatchFetchQualityProfileSchema();\r\n }\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onSaveInputs = ( payload ) => {\r\n const {\r\n qualityId,\r\n real,\r\n proper,\r\n languageIds,\r\n edition,\r\n releaseGroup,\r\n indexerFlags\r\n } = payload;\r\n\r\n const quality = this.props.qualities.find((item) => item.id === qualityId);\r\n\r\n const languages = [];\r\n\r\n languageIds.forEach((languageId) => {\r\n const language = this.props.languages.find((item) => item.id === parseInt(languageId));\r\n\r\n if (language !== undefined) {\r\n languages.push(language);\r\n }\r\n });\r\n\r\n const revision = {\r\n version: proper ? 2 : 1,\r\n real: real ? 1 : 0\r\n };\r\n\r\n this.props.dispatchUpdateMovieFiles({\r\n files: [{\r\n id: this.props.movieFileId,\r\n languages,\r\n indexerFlags,\r\n edition,\r\n releaseGroup,\r\n quality: {\r\n quality,\r\n revision\r\n }\r\n }]\r\n });\r\n\r\n this.props.onModalClose(true);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nFileEditModalContentConnector.propTypes = {\r\n movieFileId: PropTypes.number.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n qualities: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n languages: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n languageIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n indexerFlags: PropTypes.number.isRequired,\r\n qualityId: PropTypes.number.isRequired,\r\n real: PropTypes.bool.isRequired,\r\n edition: PropTypes.string.isRequired,\r\n releaseGroup: PropTypes.string.isRequired,\r\n relativePath: PropTypes.string.isRequired,\r\n proper: PropTypes.bool.isRequired,\r\n dispatchFetchQualityProfileSchema: PropTypes.func.isRequired,\r\n dispatchUpdateMovieFiles: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(FileEditModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport FileEditModalContentConnector from './FileEditModalContentConnector';\r\n\r\nclass FileEditModal extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nFileEditModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default FileEditModal;\r\n","import createAjaxRequest from 'Utilities/createAjaxRequest';\r\n\r\ninterface LanguageResponse {\r\n identifier: string;\r\n}\r\n\r\nfunction getLanguage() {\r\n return createAjaxRequest({\r\n global: false,\r\n dataType: 'json',\r\n url: '/localization/language',\r\n }).request;\r\n}\r\n\r\nfunction getDisplayName(code: string) {\r\n return Intl.DisplayNames\r\n ? new Intl.DisplayNames([code], { type: 'language' })\r\n : null;\r\n}\r\n\r\nlet languageNames = getDisplayName('en');\r\n\r\ngetLanguage().then((data: LanguageResponse) => {\r\n const names = getDisplayName(data.identifier);\r\n\r\n if (names) {\r\n languageNames = names;\r\n }\r\n});\r\n\r\nexport default function getLanguageName(code: string) {\r\n if (!languageNames) {\r\n return code;\r\n }\r\n\r\n try {\r\n return languageNames.of(code) ?? code;\r\n } catch {\r\n return code;\r\n }\r\n}\r\n","import { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createMovieFileSelector(movieFileId?: number) {\r\n return createSelector(\r\n (state: AppState) => state.movieFiles.items,\r\n (movieFiles) => {\r\n return movieFiles.find(({ id }) => id === movieFileId);\r\n }\r\n );\r\n}\r\n\r\nfunction useMovieFile(movieFileId: number | undefined) {\r\n return useSelector(createMovieFileSelector(movieFileId));\r\n}\r\n\r\nexport default useMovieFile;\r\n","import React from 'react';\r\nimport getLanguageName from 'Utilities/String/getLanguageName';\r\nimport translate from 'Utilities/String/translate';\r\nimport useMovieFile from './useMovieFile';\r\n\r\nfunction formatLanguages(languages: string | undefined) {\r\n if (!languages) {\r\n return null;\r\n }\r\n\r\n const splitLanguages = [...new Set(languages.split('/'))].map((l) => {\r\n const simpleLanguage = l.split('_')[0];\r\n\r\n if (simpleLanguage === 'und') {\r\n return translate('Unknown');\r\n }\r\n\r\n return getLanguageName(simpleLanguage);\r\n });\r\n\r\n if (splitLanguages.length > 3) {\r\n return (\r\n \r\n {splitLanguages.slice(0, 2).join(', ')}, {splitLanguages.length - 2}{' '}\r\n more\r\n \r\n );\r\n }\r\n\r\n return {splitLanguages.join(', ')};\r\n}\r\n\r\nexport type MediaInfoType =\r\n | 'audio'\r\n | 'audioLanguages'\r\n | 'subtitles'\r\n | 'video'\r\n | 'videoDynamicRangeType';\r\n\r\ninterface MediaInfoProps {\r\n movieFileId?: number;\r\n type: MediaInfoType;\r\n}\r\n\r\nfunction MediaInfo({ movieFileId, type }: MediaInfoProps) {\r\n const movieFile = useMovieFile(movieFileId);\r\n\r\n if (!movieFile?.mediaInfo) {\r\n return null;\r\n }\r\n\r\n const {\r\n audioChannels,\r\n audioCodec,\r\n audioLanguages,\r\n subtitles,\r\n videoCodec,\r\n videoDynamicRangeType,\r\n } = movieFile.mediaInfo;\r\n\r\n if (type === 'audio') {\r\n return (\r\n \r\n {audioCodec ? audioCodec : ''}\r\n\r\n {audioCodec && audioChannels ? ' - ' : ''}\r\n\r\n {audioChannels ? audioChannels.toFixed(1) : ''}\r\n \r\n );\r\n }\r\n\r\n if (type === 'audioLanguages') {\r\n return formatLanguages(audioLanguages);\r\n }\r\n\r\n if (type === 'subtitles') {\r\n return formatLanguages(subtitles);\r\n }\r\n\r\n if (type === 'video') {\r\n return {videoCodec};\r\n }\r\n\r\n if (type === 'videoDynamicRangeType') {\r\n return {videoDynamicRangeType};\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport default MediaInfo;\r\n","import { filesize } from 'filesize';\r\n\r\nfunction formatBitrate(input: string | number) {\r\n const size = Number(input);\r\n\r\n if (isNaN(size)) {\r\n return '';\r\n }\r\n\r\n const { value, symbol } = filesize(size, {\r\n base: 10,\r\n round: 1,\r\n output: 'object',\r\n });\r\n\r\n return `${value} ${symbol}/s`;\r\n}\r\n\r\nexport default formatBitrate;\r\n","import React from 'react';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';\r\nimport MediaInfoProps from 'typings/MediaInfo';\r\nimport formatBitrate from 'Utilities/Number/formatBitrate';\r\nimport getEntries from 'Utilities/Object/getEntries';\r\n\r\nfunction MediaInfo(props: MediaInfoProps) {\r\n return (\r\n \r\n {getEntries(props).map(([key, value]) => {\r\n const title = key\r\n .replace(/([A-Z])/g, ' $1')\r\n .replace(/^./, (str) => str.toUpperCase());\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n if (key === 'audioBitrate' || key === 'videoBitrate') {\r\n return (\r\n {formatBitrate(value)}\r\n }\r\n />\r\n );\r\n }\r\n\r\n return ;\r\n })}\r\n \r\n );\r\n}\r\n\r\nexport default MediaInfo;\r\n","export type Entries = {\r\n [K in keyof T]: [K, T[K]];\r\n}[keyof T][];\r\n\r\nfunction getEntries(obj: T): Entries {\r\n return Object.entries(obj) as Entries;\r\n}\r\n\r\nexport default getEntries;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport MediaInfo from './Editor/MediaInfo';\r\n\r\nfunction FileDetailsModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n mediaInfo\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {translate('Details')}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nFileDetailsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n mediaInfo: PropTypes.object\r\n};\r\n\r\nexport default FileDetailsModal;\r\n","import React from 'react';\r\nimport styles from './MovieFileRowCellPlaceholder.css';\r\n\r\nfunction MovieFileRowCellPlaceholder() {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieFileRowCellPlaceholder;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"placeholder\":\"MovieFileRowCellPlaceholder-placeholder-nYldU\"};","// extracted by mini-css-extract-plugin\nexport default {\"relativePath\":\"MovieFileEditorRow-relativePath-VWAkB TableRowCell-cell-giPrj\",\"quality\":\"MovieFileEditorRow-quality-wGizK TableRowCell-cell-giPrj\",\"formats\":\"MovieFileEditorRow-formats-MHJ_Z TableRowCell-cell-giPrj\",\"language\":\"MovieFileEditorRow-language-E46u2 TableRowCell-cell-giPrj\",\"rejected\":\"MovieFileEditorRow-rejected-sCkJa TableRowCell-cell-giPrj\",\"download\":\"MovieFileEditorRow-download-b316f TableRowCell-cell-giPrj\",\"age\":\"MovieFileEditorRow-age-v7eVu TableRowCell-cell-giPrj\",\"size\":\"MovieFileEditorRow-size-oBzPx TableRowCell-cell-giPrj\",\"languages\":\"MovieFileEditorRow-languages-Fwzrf TableRowCell-cell-giPrj\",\"audio\":\"MovieFileEditorRow-audio-_yut7 TableRowCell-cell-giPrj\",\"video\":\"MovieFileEditorRow-video-lV3Hv TableRowCell-cell-giPrj\",\"actions\":\"MovieFileEditorRow-actions-u1W2r TableRowCell-cell-giPrj\",\"audioLanguages\":\"MovieFileEditorRow-audioLanguages-jpxm8 TableRowCell-cell-giPrj\",\"videoDynamicRangeType\":\"MovieFileEditorRow-videoDynamicRangeType-AHI4G TableRowCell-cell-giPrj\",\"subtitles\":\"MovieFileEditorRow-subtitles-GpLj3 TableRowCell-cell-giPrj\",\"releaseGroup\":\"MovieFileEditorRow-releaseGroup-i5gAc TableRowCell-cell-giPrj\",\"dateAdded\":\"MovieFileEditorRow-dateAdded-NRyoi TableRowCell-cell-giPrj\",\"customFormatScore\":\"MovieFileEditorRow-customFormatScore-w4f7e TableRowCell-cell-giPrj\",\"indexerFlags\":\"MovieFileEditorRow-indexerFlags-Ittgy TableRowCell-cell-giPrj\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { icons, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport IndexerFlags from 'Movie/IndexerFlags';\r\nimport MovieFormats from 'Movie/MovieFormats';\r\nimport MovieLanguages from 'Movie/MovieLanguages';\r\nimport MovieQuality from 'Movie/MovieQuality';\r\nimport FileEditModal from 'MovieFile/Edit/FileEditModal';\r\nimport MediaInfo from 'MovieFile/MediaInfo';\r\nimport * as mediaInfoTypes from 'MovieFile/mediaInfoTypes';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';\r\nimport translate from 'Utilities/String/translate';\r\nimport FileDetailsModal from '../FileDetailsModal';\r\nimport MovieFileRowCellPlaceholder from './MovieFileRowCellPlaceholder';\r\nimport styles from './MovieFileEditorRow.css';\r\n\r\nclass MovieFileEditorRow extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isConfirmDeleteModalOpen: false,\r\n isFileDetailsModalOpen: false,\r\n isFileEditModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onDeletePress = () => {\r\n this.setState({ isConfirmDeleteModalOpen: true });\r\n };\r\n\r\n onConfirmDelete = () => {\r\n this.setState({ isConfirmDeleteModalOpen: false });\r\n\r\n this.props.onDeletePress(this.props.id);\r\n };\r\n\r\n onConfirmDeleteModalClose = () => {\r\n this.setState({ isConfirmDeleteModalOpen: false });\r\n };\r\n\r\n onFileDetailsPress = () => {\r\n this.setState({ isFileDetailsModalOpen: true });\r\n };\r\n\r\n onFileDetailsModalClose = () => {\r\n this.setState({ isFileDetailsModalOpen: false });\r\n };\r\n\r\n onFileEditPress = () => {\r\n this.setState({ isFileEditModalOpen: true });\r\n };\r\n\r\n onFileEditModalClose = () => {\r\n this.setState({ isFileEditModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n mediaInfo,\r\n relativePath,\r\n size,\r\n releaseGroup,\r\n quality,\r\n qualityCutoffNotMet,\r\n customFormats,\r\n customFormatScore,\r\n indexerFlags,\r\n languages,\r\n dateAdded,\r\n columns\r\n } = this.props;\r\n\r\n const {\r\n isFileDetailsModalOpen,\r\n isFileEditModalOpen,\r\n isConfirmDeleteModalOpen\r\n } = this.state;\r\n\r\n const showQualityPlaceholder = !quality;\r\n const showLanguagePlaceholder = !languages;\r\n\r\n return (\r\n \r\n {\r\n columns.map((column) => {\r\n const {\r\n name,\r\n isVisible\r\n } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'relativePath') {\r\n return (\r\n \r\n {relativePath}\r\n \r\n );\r\n }\r\n\r\n if (name === 'customFormats') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'customFormatScore') {\r\n return (\r\n \r\n }\r\n position={tooltipPositions.LEFT}\r\n />\r\n \r\n );\r\n }\r\n\r\n if (name === 'indexerFlags') {\r\n return (\r\n \r\n {indexerFlags ? (\r\n }\r\n title={translate('IndexerFlags')}\r\n body={}\r\n position={tooltipPositions.LEFT}\r\n />\r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'languages') {\r\n return (\r\n \r\n {\r\n showLanguagePlaceholder ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n !showLanguagePlaceholder && !!languages &&\r\n \r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'quality') {\r\n return (\r\n \r\n {\r\n showQualityPlaceholder ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n !showQualityPlaceholder && !!quality &&\r\n \r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'audioInfo') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'audioLanguages') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'subtitleLanguages') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'videoCodec') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'videoDynamicRangeType') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'size') {\r\n return (\r\n \r\n {formatBytes(size)}\r\n \r\n );\r\n }\r\n\r\n if (name === 'releaseGroup') {\r\n return (\r\n \r\n {releaseGroup}\r\n \r\n );\r\n }\r\n\r\n if (name === 'dateAdded') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n\r\n return null;\r\n })\r\n }\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nMovieFileEditorRow.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n size: PropTypes.number.isRequired,\r\n relativePath: PropTypes.string.isRequired,\r\n quality: PropTypes.object.isRequired,\r\n releaseGroup: PropTypes.string,\r\n customFormats: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n customFormatScore: PropTypes.number.isRequired,\r\n indexerFlags: PropTypes.number.isRequired,\r\n qualityCutoffNotMet: PropTypes.bool.isRequired,\r\n languages: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n mediaInfo: PropTypes.object,\r\n dateAdded: PropTypes.string,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onDeletePress: PropTypes.func.isRequired\r\n};\r\n\r\nMovieFileEditorRow.defaultProps = {\r\n customFormats: [],\r\n indexerFlags: 0\r\n};\r\n\r\nexport default MovieFileEditorRow;\r\n","export const AUDIO = 'audio';\r\nexport const AUDIO_LANGUAGES = 'audioLanguages';\r\nexport const SUBTITLES = 'subtitles';\r\nexport const VIDEO = 'video';\r\nexport const VIDEO_DYNAMIC_RANGE_TYPE = 'videoDynamicRangeType';\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { sortDirections } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport MovieFileEditorRow from './MovieFileEditorRow';\r\nimport styles from './MovieFileEditorTableContent.css';\r\n\r\nclass MovieFileEditorTableContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n columns,\r\n sortKey,\r\n sortDirection,\r\n onSortPress,\r\n onTableOptionChange\r\n } = this.props;\r\n\r\n return (\r\n
\r\n {\r\n !items.length &&\r\n
\r\n {translate('NoMovieFilesToManage')}\r\n
\r\n }\r\n\r\n {\r\n !!items.length &&\r\n \r\n \r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n }\r\n\r\n
\r\n );\r\n }\r\n}\r\n\r\nMovieFileEditorTableContent.propTypes = {\r\n movieId: PropTypes.number,\r\n isDeleting: PropTypes.bool.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n sortKey: PropTypes.string.isRequired,\r\n sortDirection: PropTypes.oneOf(sortDirections.all),\r\n onTableOptionChange: PropTypes.func.isRequired,\r\n onSortPress: PropTypes.func.isRequired,\r\n onDeletePress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default MovieFileEditorTableContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"MovieFileEditorTableContent-actions-BKq0h\",\"selectInput\":\"MovieFileEditorTableContent-selectInput-scRNf\",\"blankpad\":\"MovieFileEditorTableContent-blankpad-sYscw\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteMovieFile, setMovieFilesSort, setMovieFilesTableOption } from 'Store/Actions/movieFileActions';\r\nimport { fetchLanguages, fetchQualityProfileSchema } from 'Store/Actions/settingsActions';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport createMovieSelector from 'Store/Selectors/createMovieSelector';\r\nimport getQualities from 'Utilities/Quality/getQualities';\r\nimport MovieFileEditorTableContent from './MovieFileEditorTableContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { movieId }) => movieId,\r\n createClientSideCollectionSelector('movieFiles'),\r\n (state) => state.settings.languages,\r\n (state) => state.settings.qualityProfiles,\r\n createMovieSelector(),\r\n (\r\n movieId,\r\n movieFiles,\r\n languageProfiles,\r\n qualityProfiles\r\n ) => {\r\n const languages = languageProfiles.items;\r\n const qualities = getQualities(qualityProfiles.schema.items);\r\n const filesForMovie = movieFiles.items.filter((file) => file.movieId === movieId);\r\n\r\n return {\r\n items: filesForMovie,\r\n columns: movieFiles.columns,\r\n sortKey: movieFiles.sortKey,\r\n sortDirection: movieFiles.sortDirection,\r\n isDeleting: movieFiles.isDeleting,\r\n isSaving: movieFiles.isSaving,\r\n error: null,\r\n languages,\r\n qualities\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchQualityProfileSchema,\r\n fetchLanguages,\r\n deleteMovieFile,\r\n setMovieFilesTableOption,\r\n setMovieFilesSort\r\n};\r\n\r\nclass MovieFileEditorTableContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchLanguages();\r\n this.props.fetchQualityProfileSchema();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onDeletePress = (movieFileId) => {\r\n this.props.deleteMovieFile({\r\n id: movieFileId\r\n });\r\n };\r\n\r\n onTableOptionChange = (payload) => {\r\n this.props.setMovieFilesTableOption(payload);\r\n };\r\n\r\n onSortPress = (sortKey, sortDirection) => {\r\n this.props.setMovieFilesSort({\r\n sortKey,\r\n sortDirection\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nMovieFileEditorTableContentConnector.propTypes = {\r\n movieId: PropTypes.number.isRequired,\r\n languages: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n qualities: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n fetchLanguages: PropTypes.func.isRequired,\r\n fetchQualityProfileSchema: PropTypes.func.isRequired,\r\n deleteMovieFile: PropTypes.func.isRequired,\r\n setMovieFilesTableOption: PropTypes.func.isRequired,\r\n setMovieFilesSort: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(MovieFileEditorTableContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport MovieFileEditorTableContentConnector from './MovieFileEditorTableContentConnector';\r\nimport styles from './MovieFileEditorTable.css';\r\n\r\nfunction MovieFileEditorTable(props) {\r\n const {\r\n movieId\r\n } = props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nMovieFileEditorTable.propTypes = {\r\n movieId: PropTypes.number.isRequired\r\n};\r\n\r\nexport default MovieFileEditorTable;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"MovieFileEditorTable-container-_tNir\"};","import React from 'react';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons, tooltipPositions } from 'Helpers/Props';\r\nimport { ExtraFileType } from 'MovieFile/ExtraFile';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface ExtraFileDetailsPopoverProps {\r\n type: ExtraFileType;\r\n title?: string;\r\n languageTags?: string[];\r\n}\r\n\r\nfunction ExtraFileDetailsPopover(props: ExtraFileDetailsPopoverProps) {\r\n const { type, title, languageTags = [] } = props;\r\n\r\n const details = [];\r\n\r\n if (type === 'subtitle') {\r\n if (title) {\r\n details.push({ name: translate('Title'), value: title });\r\n }\r\n\r\n if (languageTags.length) {\r\n details.push({\r\n name: translate('Disposition'),\r\n value: languageTags.join(', '),\r\n });\r\n }\r\n }\r\n\r\n if (details.length) {\r\n return (\r\n }\r\n title={translate('Tags')}\r\n body={\r\n
    \r\n {details.map(({ name, value }, index) => {\r\n return (\r\n
  • \r\n {name}: {value}\r\n
  • \r\n );\r\n })}\r\n
\r\n }\r\n position={tooltipPositions.LEFT}\r\n />\r\n );\r\n }\r\n\r\n return '';\r\n}\r\n\r\nexport default ExtraFileDetailsPopover;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"relativePath\":\"ExtraFileRow-relativePath-uC88V TableRowCell-cell-giPrj\",\"extension\":\"ExtraFileRow-extension-ObLTn TableRowCell-cell-giPrj\",\"type\":\"ExtraFileRow-type-ctZ36 TableRowCell-cell-giPrj\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport ExtraFileDetailsPopover from './ExtraFileDetailsPopover';\r\nimport styles from './ExtraFileRow.css';\r\n\r\nclass ExtraFileRow extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n relativePath,\r\n extension,\r\n type,\r\n title,\r\n languageTags\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {relativePath}\r\n \r\n\r\n \r\n {extension}\r\n \r\n\r\n \r\n {titleCase(type)}\r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nExtraFileRow.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n extension: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n relativePath: PropTypes.string.isRequired,\r\n title: PropTypes.string,\r\n languageTags: PropTypes.arrayOf(PropTypes.string)\r\n};\r\n\r\nexport default ExtraFileRow;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport ExtraFileRow from './ExtraFileRow';\r\nimport styles from './ExtraFileTableContent.css';\r\n\r\nconst columns = [\r\n {\r\n name: 'relativePath',\r\n label: () => translate('RelativePath'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'extension',\r\n label: () => translate('Extension'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'type',\r\n label: () => translate('Type'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'action',\r\n label: React.createElement(IconButton, { name: icons.ADVANCED_SETTINGS }),\r\n isVisible: true\r\n }\r\n];\r\n\r\nclass ExtraFileTableContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items\r\n } = this.props;\r\n\r\n return (\r\n
\r\n {\r\n !items.length &&\r\n
\r\n {translate('NoExtraFilesToManage')}\r\n
\r\n }\r\n\r\n {\r\n !!items.length &&\r\n \r\n \r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n
\r\n }\r\n\r\n
\r\n );\r\n }\r\n}\r\n\r\nExtraFileTableContent.propTypes = {\r\n movieId: PropTypes.number,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired\r\n};\r\n\r\nexport default ExtraFileTableContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"ExtraFileTableContent-actions-u9vkA\",\"blankpad\":\"ExtraFileTableContent-blankpad-JlcGd\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createMovieSelector from 'Store/Selectors/createMovieSelector';\r\nimport ExtraFileTableContent from './ExtraFileTableContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { movieId }) => movieId,\r\n (state) => state.extraFiles,\r\n createMovieSelector(),\r\n (\r\n movieId,\r\n extraFiles\r\n ) => {\r\n const filesForMovie = extraFiles.items.filter((file) => file.movieId === movieId);\r\n\r\n return {\r\n items: filesForMovie,\r\n error: null\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass ExtraFileTableContentConnector extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nExtraFileTableContentConnector.propTypes = {\r\n movieId: PropTypes.number.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, null)(ExtraFileTableContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport ExtraFileTableContentConnector from './ExtraFileTableContentConnector';\r\nimport styles from './ExtraFileTable.css';\r\n\r\nfunction ExtraFileTable(props) {\r\n const {\r\n movieId\r\n } = props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n\r\n );\r\n}\r\n\r\nExtraFileTable.propTypes = {\r\n movieId: PropTypes.number.isRequired\r\n};\r\n\r\nexport default ExtraFileTable;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"ExtraFileTable-container-qahaK\"};","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"OrganizePreviewRow-row-rLTEj\",\"selectedContainer\":\"OrganizePreviewRow-selectedContainer-IbbiT\",\"path\":\"OrganizePreviewRow-path-H586p\"};","import React, { useCallback, useEffect } from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport Icon from 'Components/Icon';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport styles from './OrganizePreviewRow.css';\r\n\r\ninterface OrganizePreviewRowProps {\r\n id: number;\r\n existingPath: string;\r\n newPath: string;\r\n isSelected?: boolean;\r\n onSelectedChange: (props: SelectStateInputProps) => void;\r\n}\r\n\r\nfunction OrganizePreviewRow({\r\n id,\r\n existingPath,\r\n newPath,\r\n isSelected,\r\n onSelectedChange,\r\n}: OrganizePreviewRowProps) {\r\n const handleSelectedChange = useCallback(\r\n ({ value, shiftKey }: CheckInputChanged) => {\r\n onSelectedChange({ id, value, shiftKey });\r\n },\r\n [id, onSelectedChange]\r\n );\r\n\r\n useEffect(() => {\r\n onSelectedChange({ id, value: true, shiftKey: false });\r\n }, [id, onSelectedChange]);\r\n\r\n return (\r\n
\r\n \r\n\r\n
\r\n
\r\n \r\n\r\n {existingPath}\r\n
\r\n\r\n
\r\n \r\n\r\n {newPath}\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default OrganizePreviewRow;\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport Alert from 'Components/Alert';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport useSelectState from 'Helpers/Hooks/useSelectState';\r\nimport { kinds } from 'Helpers/Props';\r\nimport useMovie from 'Movie/useMovie';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { fetchOrganizePreview } from 'Store/Actions/organizePreviewActions';\r\nimport { fetchNamingSettings } from 'Store/Actions/settingsActions';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport OrganizePreviewRow from './OrganizePreviewRow';\r\nimport styles from './OrganizePreviewModalContent.css';\r\n\r\nfunction getValue(allSelected: boolean, allUnselected: boolean) {\r\n if (allSelected) {\r\n return true;\r\n } else if (allUnselected) {\r\n return false;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport interface OrganizePreviewModalContentProps {\r\n movieId: number;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction OrganizePreviewModalContent({\r\n movieId,\r\n onModalClose,\r\n}: OrganizePreviewModalContentProps) {\r\n const dispatch = useDispatch();\r\n const {\r\n items,\r\n isFetching: isPreviewFetching,\r\n isPopulated: isPreviewPopulated,\r\n error: previewError,\r\n } = useSelector((state: AppState) => state.organizePreview);\r\n\r\n const {\r\n isFetching: isNamingFetching,\r\n isPopulated: isNamingPopulated,\r\n error: namingError,\r\n item: naming,\r\n } = useSelector((state: AppState) => state.settings.naming);\r\n\r\n const movie = useMovie(movieId)!;\r\n const [selectState, setSelectState] = useSelectState();\r\n\r\n const { allSelected, allUnselected, selectedState } = selectState;\r\n const isFetching = isPreviewFetching || isNamingFetching;\r\n const isPopulated = isPreviewPopulated && isNamingPopulated;\r\n const error = previewError || namingError;\r\n const { renameMovies, standardMovieFormat } = naming;\r\n\r\n const selectAllValue = getValue(allSelected, allUnselected);\r\n\r\n const handleSelectAllChange = useCallback(\r\n ({ value }: CheckInputChanged) => {\r\n setSelectState({ type: value ? 'selectAll' : 'unselectAll', items });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const handleSelectedChange = useCallback(\r\n ({ id, value, shiftKey = false }: SelectStateInputProps) => {\r\n setSelectState({\r\n type: 'toggleSelected',\r\n items,\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const handleOrganizePress = useCallback(() => {\r\n const files = getSelectedIds(selectedState);\r\n\r\n dispatch(\r\n executeCommand({\r\n name: commandNames.RENAME_FILES,\r\n files,\r\n movieId,\r\n })\r\n );\r\n\r\n onModalClose();\r\n }, [movieId, selectedState, dispatch, onModalClose]);\r\n\r\n useEffect(() => {\r\n dispatch(fetchOrganizePreview({ movieId }));\r\n dispatch(fetchNamingSettings());\r\n }, [movieId, dispatch]);\r\n\r\n return (\r\n \r\n {translate('OrganizeModalHeader')}\r\n\r\n \r\n {isFetching ? : null}\r\n\r\n {!isFetching && error ? (\r\n {translate('OrganizeLoadError')}\r\n ) : null}\r\n\r\n {!isFetching && isPopulated && !items.length ? (\r\n
\r\n {renameMovies ? (\r\n
{translate('OrganizeNothingToRename')}
\r\n ) : (\r\n
{translate('OrganizeRenamingDisabled')}
\r\n )}\r\n
\r\n ) : null}\r\n\r\n {!isFetching && isPopulated && items.length ? (\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n ) : null}\r\n
\r\n\r\n \r\n {isPopulated && items.length ? (\r\n \r\n ) : null}\r\n\r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default OrganizePreviewModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"path\":\"OrganizePreviewModalContent-path-yhz8C\",\"standardMovieFormat\":\"OrganizePreviewModalContent-standardMovieFormat-fIzfY\",\"previews\":\"OrganizePreviewModalContent-previews-QQ9Ez\",\"selectAllInputContainer\":\"OrganizePreviewModalContent-selectAllInputContainer-utcdu\",\"selectAllInput\":\"OrganizePreviewModalContent-selectAllInput-w6Apl CheckInput-input-VAM1T\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { clearOrganizePreview } from 'Store/Actions/organizePreviewActions';\r\nimport OrganizePreviewModalContent, {\r\n OrganizePreviewModalContentProps,\r\n} from './OrganizePreviewModalContent';\r\n\r\ninterface OrganizePreviewModalProps extends OrganizePreviewModalContentProps {\r\n isOpen: boolean;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction OrganizePreviewModal({\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n}: OrganizePreviewModalProps) {\r\n const dispatch = useDispatch();\r\n\r\n const handleOnModalClose = useCallback(() => {\r\n dispatch(clearOrganizePreview());\r\n onModalClose();\r\n }, [dispatch, onModalClose]);\r\n\r\n return (\r\n \r\n {isOpen ? (\r\n \r\n ) : null}\r\n \r\n );\r\n}\r\nexport default OrganizePreviewModal;\r\n","import _ from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport { MovieCreditType } from 'typings/MovieCredit';\r\n\r\nfunction createMovieCreditsSelector(movieCreditType: MovieCreditType) {\r\n return createSelector(\r\n (state: AppState) => state.movieCredits.items,\r\n (movieCredits) => {\r\n const credits = movieCredits.filter(\r\n ({ type }) => type === movieCreditType\r\n );\r\n\r\n const sortedCredits = credits.sort((a, b) => a.order - b.order);\r\n\r\n return {\r\n items: _.uniqBy(sortedCredits, 'personName'),\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createMovieCreditsSelector;\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport {\r\n selectImportListSchema,\r\n setImportListFieldValue,\r\n setImportListValue,\r\n} from 'Store/Actions/settingsActions';\r\nimport createMovieCreditImportListSelector from 'Store/Selectors/createMovieCreditImportListSelector';\r\nimport { MovieCastPosterProps } from './Cast/MovieCastPoster';\r\nimport { MovieCrewPosterProps } from './Crew/MovieCrewPoster';\r\n\r\ntype MovieCreditPosterProps = {\r\n component: React.ElementType;\r\n} & (\r\n | Omit\r\n | Omit\r\n);\r\n\r\nfunction MovieCreditPoster({\r\n component: ItemComponent,\r\n tmdbId,\r\n personName,\r\n ...otherProps\r\n}: MovieCreditPosterProps) {\r\n const importList = useSelector(createMovieCreditImportListSelector(tmdbId));\r\n\r\n const dispatch = useDispatch();\r\n\r\n const handleImportListSelect = useCallback(() => {\r\n dispatch(\r\n selectImportListSchema({\r\n implementation: 'TMDbPersonImport',\r\n implementationName: 'TMDb Person',\r\n presetName: undefined,\r\n })\r\n );\r\n\r\n dispatch(\r\n // @ts-expect-error 'setImportListFieldValue' isn't typed yet\r\n setImportListFieldValue({ name: 'personId', value: tmdbId.toString() })\r\n );\r\n\r\n dispatch(\r\n // @ts-expect-error 'setImportListValue' isn't typed yet\r\n setImportListValue({ name: 'name', value: `${personName} - ${tmdbId}` })\r\n );\r\n }, [dispatch, tmdbId, personName]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieCreditPoster;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport ImportList from 'typings/ImportList';\r\n\r\nfunction createMovieCreditImportListSelector(tmdbId: number) {\r\n return createSelector(\r\n (state: AppState) => state.settings.importLists.items,\r\n (importLists) => {\r\n const importListIds = importLists.reduce(\r\n (acc: ImportList[], importList) => {\r\n if (importList.implementation === 'TMDbPersonImport') {\r\n const personIdValue = importList.fields.find(\r\n (field) => field.name === 'personId'\r\n )?.value as string | null;\r\n\r\n if (personIdValue && parseInt(personIdValue) === tmdbId) {\r\n acc.push(importList);\r\n\r\n return acc;\r\n }\r\n }\r\n\r\n return acc;\r\n },\r\n []\r\n );\r\n\r\n if (importListIds.length === 0) {\r\n return undefined;\r\n }\r\n\r\n return importListIds[0];\r\n }\r\n );\r\n}\r\n\r\nexport default createMovieCreditImportListSelector;\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport { Navigation } from 'swiper';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport { Swiper as SwiperClass } from 'swiper/types';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport MovieCredit from 'typings/MovieCredit';\r\nimport MovieCreditPoster from './MovieCreditPoster';\r\nimport styles from './MovieCreditPosters.css';\r\n\r\n// Import Swiper styles\r\nimport 'swiper/css';\r\nimport 'swiper/css/navigation';\r\n\r\n// Poster container dimensions\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(\r\n dimensions.movieIndexColumnPaddingSmallScreen\r\n);\r\n\r\ninterface MovieCreditPostersProps {\r\n items: MovieCredit[];\r\n itemComponent: React.ElementType;\r\n isSmallScreen: boolean;\r\n}\r\n\r\nfunction MovieCreditPosters(props: MovieCreditPostersProps) {\r\n const { items, itemComponent, isSmallScreen } = props;\r\n\r\n const posterWidth = 162;\r\n const posterHeight = 238;\r\n\r\n const rowHeight = useMemo(() => {\r\n const titleHeight = 19;\r\n const characterHeight = 19;\r\n\r\n const heights = [\r\n posterHeight,\r\n titleHeight,\r\n characterHeight,\r\n isSmallScreen ? columnPaddingSmallScreen : columnPadding,\r\n ];\r\n\r\n return heights.reduce((acc, height) => acc + height, 0);\r\n }, [posterHeight, isSmallScreen]);\r\n\r\n const handleSwiperInit = useCallback((swiper: SwiperClass) => {\r\n swiper.navigation.init();\r\n swiper.navigation.update();\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n {items.map((credit) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieCreditPosters;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"MovieCreditPosters-grid-pGCER\",\"movie\":\"MovieCreditPosters-movie-uq5V8\",\"container\":\"MovieCreditPosters-container-BJcMS\",\"sliderContainer\":\"MovieCreditPosters-sliderContainer-OcqiL\"};","import { useCallback, useState } from 'react';\r\n\r\nexport default function useModalOpenState(\r\n initialState: boolean\r\n): [boolean, () => void, () => void] {\r\n const [isOpen, setIsOpen] = useState(initialState);\r\n\r\n const setModalOpen = useCallback(() => {\r\n setIsOpen(true);\r\n }, [setIsOpen]);\r\n\r\n const setModalClosed = useCallback(() => {\r\n setIsOpen(false);\r\n }, [setIsOpen]);\r\n\r\n return [isOpen, setModalOpen, setModalClosed];\r\n}\r\n","import React from 'react';\r\nimport MovieImage, { MovieImageProps } from './MovieImage';\r\n\r\nconst posterPlaceholder =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAD3CAMAAAC+Te+kAAAAZlBMVEUvLi8vLy8vLzAvMDAwLy8wLzAwMDAwMDEwMTExMDAxMDExMTExMTIxMjIyMjIyMjMyMzMzMjMzMzMzMzQzNDQ0NDQ0NDU0NTU1NTU1NTY1NjY2NTY2NjY2Njc2Nzc3Njc3Nzc3NziHChLWAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+MKCgEdHeShUbsAAALZSURBVHja7dxNcuwgDEZR1qAVmP1vMrNUJe91GfTzCSpXo575lAymjYWGXRIDKFCgQIECBQoUKFCgQIECBQoUKFCgQIECBQoUKFCgQIECBQoUKNA/AZ3fcTR0/owjofNDnAadnwPoPnS+xTXQeQZ0rkQ/dC4H0Gzo7ITO3bgGOnug/2PcAF3Mczt0fUj0QncG7znQBupw3PkWqh8qpkagpnyqjuArkkxaC02kRqGypCZANVYFdJZCdy9WTRVB5znQ6qTmjFFBWnOhdg20Lqnp0CpqAbRmAJRAK5JaA32zngTNvv910OSkVkJTs1oLtWugeTkNQZ/nkT2rotBHldUwNE6VQTVWGTQ6AHKggqGaBS23JkKf0hUgE1qa01Ro5fzPhoapR0HtCGg4q0poSCqFRgaAFhqxqqEr1EOgmdJaqHdaHQq1I6CunPZAHdY2aIJUBN2V9kE3H1Wd0BXrNVA7BLpgdUCtALo8pZqhdgd0Z6OyE7q1pdoH3dv7tS7o7iZ1E3R/N70Huuz795cQao65vvkqooT+vEgDdPcbj2s3zxTv9Qt/7cuhdgfUo2yAOplyqNuphfqZSqhFmEJo0HkcdPZCo0rRymRxpwSawHR+YtyBZihfvi+nQO0OqCmcYahGqYPGS4qCUJkzBpUpJdCkordyaFZxXi1UUpaZAJ2XQFOLh8ug2XXjVdD0+vYiqLIO3w1VH8EogtoxUPnpGxe04zyTA1p57i4T2nTmbnnnUuLMg1afYE2C1h+1zYEKjlknQLtPg9tb3YzU+dL054qOBb8cvcz3DlqBZhUmhdrnKo9j+pR0rkN5UHkznZHPtJIYN2TTCe1poTUyk9nWPO0bt8Ys7Ug34mlUMONtPUXMaEdXnXN1MnUzN2Z9q3Lr8XQN1DaLQJpXpiamZwltYdIUHShQoECBAgUKFChQoECBAgUKFChQoECBAgUKFChQoECBAgUKFCjQ+vgCff/mEp/vtiIAAAAASUVORK5CYII=';\r\n\r\ninterface MovieHeadshotProps\r\n extends Omit {\r\n size?: 250 | 500;\r\n}\r\n\r\nfunction MovieHeadshot({ size = 250, ...otherProps }: MovieHeadshotProps) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieHeadshot;\r\n","import _ from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\n\r\nfunction selector(id, section) {\r\n if (!id) {\r\n const item = _.isArray(section.schema) ? section.selectedSchema : section.schema;\r\n const settings = selectSettings(Object.assign({ name: '' }, item), section.pendingChanges, section.saveError);\r\n\r\n const {\r\n isSchemaFetching: isFetching,\r\n isSchemaPopulated: isPopulated,\r\n schemaError: error,\r\n isSaving,\r\n saveError,\r\n isTesting,\r\n pendingChanges\r\n } = section;\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n isSaving,\r\n saveError,\r\n isTesting,\r\n pendingChanges,\r\n ...settings,\r\n item: settings.settings\r\n };\r\n }\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n isSaving,\r\n saveError,\r\n isTesting,\r\n pendingChanges\r\n } = section;\r\n\r\n const settings = selectSettings(_.find(section.items, { id }), pendingChanges, saveError);\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n isSaving,\r\n saveError,\r\n isTesting,\r\n ...settings,\r\n item: settings.settings\r\n };\r\n}\r\n\r\nexport default function createProviderSettingsSelector(sectionName) {\r\n return createSelector(\r\n (state, { id }) => id,\r\n (state) => state.settings[sectionName],\r\n (id, section) => selector(id, section)\r\n );\r\n}\r\n\r\nexport function createProviderSettingsSelectorHook(sectionName, id) {\r\n return createSelector(\r\n (state) => state.settings[sectionName],\r\n (section) => selector(id, section)\r\n );\r\n}\r\n\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes } from 'Helpers/Props';\r\n\r\nfunction getType({ type, selectOptionsProviderAction }) {\r\n switch (type) {\r\n case 'captcha':\r\n return inputTypes.CAPTCHA;\r\n case 'checkbox':\r\n return inputTypes.CHECK;\r\n case 'device':\r\n return inputTypes.DEVICE;\r\n case 'keyValueList':\r\n return inputTypes.KEY_VALUE_LIST;\r\n case 'password':\r\n return inputTypes.PASSWORD;\r\n case 'number':\r\n return inputTypes.NUMBER;\r\n case 'path':\r\n return inputTypes.PATH;\r\n case 'filePath':\r\n return inputTypes.PATH;\r\n case 'select':\r\n if (selectOptionsProviderAction) {\r\n return inputTypes.DYNAMIC_SELECT;\r\n }\r\n return inputTypes.SELECT;\r\n case 'movieTag':\r\n return inputTypes.MOVIE_TAG;\r\n case 'tag':\r\n return inputTypes.TEXT_TAG;\r\n case 'tagSelect':\r\n return inputTypes.TAG_SELECT;\r\n case 'textbox':\r\n return inputTypes.TEXT;\r\n case 'oAuth':\r\n return inputTypes.OAUTH;\r\n case 'rootFolder':\r\n return inputTypes.ROOT_FOLDER_SELECT;\r\n case 'qualityProfile':\r\n return inputTypes.QUALITY_PROFILE_SELECT;\r\n default:\r\n return inputTypes.TEXT;\r\n }\r\n}\r\n\r\nfunction getSelectValues(selectOptions) {\r\n if (!selectOptions) {\r\n return;\r\n }\r\n\r\n return _.reduce(selectOptions, (result, option) => {\r\n result.push({\r\n key: option.value,\r\n value: option.name,\r\n dividerAfter: option.dividerAfter,\r\n hint: option.hint\r\n });\r\n\r\n return result;\r\n }, []);\r\n}\r\n\r\nfunction ProviderFieldFormGroup(props) {\r\n const {\r\n advancedSettings,\r\n name,\r\n label,\r\n helpText,\r\n helpTextWarning,\r\n helpLink,\r\n placeholder,\r\n value,\r\n type,\r\n advanced,\r\n hidden,\r\n pending,\r\n errors,\r\n warnings,\r\n selectOptions,\r\n onChange,\r\n ...otherProps\r\n } = props;\r\n\r\n if (\r\n hidden === 'hidden' ||\r\n (hidden === 'hiddenIfNotSet' && !value)\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {label}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nconst selectOptionsShape = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number.isRequired,\r\n hint: PropTypes.string\r\n};\r\n\r\nProviderFieldFormGroup.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n helpText: PropTypes.string,\r\n helpTextWarning: PropTypes.string,\r\n helpLink: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n value: PropTypes.any,\r\n type: PropTypes.string.isRequired,\r\n advanced: PropTypes.bool.isRequired,\r\n hidden: PropTypes.string,\r\n isDisabled: PropTypes.bool,\r\n provider: PropTypes.string,\r\n pending: PropTypes.bool.isRequired,\r\n errors: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n warnings: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n selectOptions: PropTypes.arrayOf(PropTypes.shape(selectOptionsShape)),\r\n selectOptionsProviderAction: PropTypes.string,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nProviderFieldFormGroup.defaultProps = {\r\n advancedSettings: false\r\n};\r\n\r\nexport default ProviderFieldFormGroup;\r\n","import moment from 'moment';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction formatShortTimeSpan(timeSpan) {\r\n if (!timeSpan) {\r\n return '';\r\n }\r\n\r\n const duration = moment.duration(timeSpan);\r\n\r\n const hours = Math.floor(duration.asHours());\r\n const minutes = Math.floor(duration.asMinutes());\r\n const seconds = Math.floor(duration.asSeconds());\r\n\r\n if (hours > 0) {\r\n return translate('FormatShortTimeSpanHours', { hours });\r\n }\r\n\r\n if (minutes > 0) {\r\n return translate('FormatShortTimeSpanMinutes', { minutes });\r\n }\r\n\r\n return translate('FormatShortTimeSpanSeconds', { seconds });\r\n}\r\n\r\nexport default formatShortTimeSpan;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditImportListModalContent-deleteButton-snrok Button-button-paJ9a Link-link-RInnp\",\"labelIcon\":\"EditImportListModalContent-labelIcon-tJxZ5\",\"message\":\"EditImportListModalContent-message-mgth4 Alert-alert-_KgnQ\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport MovieMinimumAvailabilityPopoverContent from 'AddMovie/MovieMinimumAvailabilityPopoverContent';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport ProviderFieldFormGroup from 'Components/Form/ProviderFieldFormGroup';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons, inputTypes, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport AdvancedSettingsButton from 'Settings/AdvancedSettingsButton';\r\nimport formatShortTimeSpan from 'Utilities/Date/formatShortTimeSpan';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditImportListModalContent.css';\r\n\r\nfunction EditImportListModalContent(props) {\r\n const {\r\n advancedSettings,\r\n isFetching,\r\n error,\r\n rootFolderError,\r\n isSaving,\r\n isTesting,\r\n saveError,\r\n item,\r\n onInputChange,\r\n onFieldChange,\r\n onModalClose,\r\n onSavePress,\r\n onTestPress,\r\n onAdvancedSettingsPress,\r\n onDeleteImportListPress,\r\n ...otherProps\r\n } = props;\r\n\r\n const {\r\n id,\r\n implementationName,\r\n name,\r\n enabled,\r\n enableAuto,\r\n minRefreshInterval,\r\n monitor,\r\n minimumAvailability,\r\n qualityProfileId,\r\n rootFolderPath,\r\n searchOnAdd,\r\n tags,\r\n fields,\r\n message\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditImportListImplementation', { implementationName }) : translate('AddImportListImplementation', { implementationName })}\r\n \r\n\r\n \r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && (!!error || !!rootFolderError) ?\r\n \r\n {translate('AddListError')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n !isFetching && !error && !rootFolderError &&\r\n \r\n {\r\n !!message &&\r\n \r\n {message.value.message}\r\n \r\n }\r\n\r\n \r\n {translate('ListWillRefreshEveryInterval', {\r\n refreshInterval: formatShortTimeSpan(minRefreshInterval.value)\r\n })}\r\n \r\n\r\n \r\n {translate('Name')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Enable')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('EnableAutomaticAdd')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Monitor')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SearchOnAdd')}\r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('MinimumAvailability')}\r\n\r\n \r\n }\r\n title={translate('MinimumAvailability')}\r\n body={}\r\n position={tooltipPositions.RIGHT}\r\n />\r\n \r\n\r\n \r\n \r\n\r\n \r\n {translate('QualityProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RootFolder')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RadarrTags')}\r\n\r\n \r\n \r\n\r\n {\r\n fields.map((field) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n }\r\n \r\n \r\n {\r\n id &&\r\n \r\n {translate('Delete')}\r\n \r\n }\r\n\r\n \r\n\r\n \r\n {translate('Test')}\r\n \r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditImportListModalContent.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n rootFolderError: PropTypes.object,\r\n isSaving: PropTypes.bool.isRequired,\r\n isTesting: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onFieldChange: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onTestPress: PropTypes.func.isRequired,\r\n onAdvancedSettingsPress: PropTypes.func.isRequired,\r\n onDeleteImportListPress: PropTypes.func\r\n};\r\n\r\nexport default EditImportListModalContent;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport {\r\n saveImportList,\r\n setImportListFieldValue,\r\n setImportListValue,\r\n testImportList,\r\n toggleAdvancedSettings\r\n} from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditImportListModalContent from './EditImportListModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n (state) => state.rootFolders,\r\n createProviderSettingsSelector('importLists'),\r\n (advancedSettings, rootFolders, importList) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n ...otherProps\r\n } = importList;\r\n\r\n return {\r\n advancedSettings,\r\n isFetching: rootFolders.isFetching || isFetching,\r\n isPopulated: rootFolders.isPopulated && isPopulated,\r\n rootFolderError: rootFolders.error,\r\n ...otherProps\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setImportListValue,\r\n setImportListFieldValue,\r\n saveImportList,\r\n testImportList,\r\n toggleAdvancedSettings\r\n};\r\n\r\nclass EditImportListModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {\r\n this.props.onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setImportListValue({ name, value });\r\n };\r\n\r\n onFieldChange = ({ name, value }) => {\r\n this.props.setImportListFieldValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveImportList({ id: this.props.id });\r\n };\r\n\r\n onTestPress = () => {\r\n this.props.testImportList({ id: this.props.id });\r\n };\r\n\r\n onAdvancedSettingsPress = () => {\r\n this.props.toggleAdvancedSettings();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditImportListModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n isFetching: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n setImportListValue: PropTypes.func.isRequired,\r\n setImportListFieldValue: PropTypes.func.isRequired,\r\n saveImportList: PropTypes.func.isRequired,\r\n testImportList: PropTypes.func.isRequired,\r\n toggleAdvancedSettings: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditImportListModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport EditImportListModalContentConnector from './EditImportListModalContentConnector';\r\n\r\nfunction EditImportListModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditImportListModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditImportListModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { cancelSaveImportList, cancelTestImportList } from 'Store/Actions/settingsActions';\r\nimport EditImportListModal from './EditImportListModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n const section = 'settings.importLists';\r\n\r\n return {\r\n dispatchClearPendingChanges() {\r\n dispatch(clearPendingChanges({ section }));\r\n },\r\n\r\n dispatchCancelTestImportList() {\r\n dispatch(cancelTestImportList({ section }));\r\n },\r\n\r\n dispatchCancelSaveImportList() {\r\n dispatch(cancelSaveImportList({ section }));\r\n }\r\n };\r\n}\r\n\r\nclass EditImportListModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.dispatchClearPendingChanges();\r\n this.props.dispatchCancelTestImportList();\r\n this.props.dispatchCancelSaveImportList();\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n dispatchClearPendingChanges,\r\n dispatchCancelTestImportList,\r\n dispatchCancelSaveImportList,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditImportListModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n dispatchCancelTestImportList: PropTypes.func.isRequired,\r\n dispatchCancelSaveImportList: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(null, createMapDispatchToProps)(EditImportListModalConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"MovieCreditPoster-content-mqrYr\",\"controls\":\"MovieCreditPoster-controls-_H23m\",\"posterContainer\":\"MovieCreditPoster-posterContainer-jElSL\",\"poster\":\"MovieCreditPoster-poster-YHOqS\",\"overlayTitle\":\"MovieCreditPoster-overlayTitle-sMK62\",\"title\":\"MovieCreditPoster-title-wArQs\",\"toggleMonitoredContainer\":\"MovieCreditPoster-toggleMonitoredContainer-u8_75\",\"monitorToggleButton\":\"MovieCreditPoster-monitorToggleButton-x4fK5 MonitorToggleButton-toggleButton-fG17x IconButton-button-t4C5V Link-link-RInnp\",\"action\":\"MovieCreditPoster-action-Eym2S IconButton-button-t4C5V Link-link-RInnp\",\"container\":\"MovieCreditPoster-container-wPZsM\",\"externalLinks\":\"MovieCreditPoster-externalLinks-qfhtG\",\"externalLinkLabel\":\"MovieCreditPoster-externalLinkLabel-dZQnC Label-label-DYldh\"};","import classNames from 'classnames';\r\nimport React, { useCallback, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Icon from 'Components/Icon';\r\nimport Label from 'Components/Label';\r\nimport Link from 'Components/Link/Link';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport MonitorToggleButton from 'Components/MonitorToggleButton';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport { icons, kinds, sizes } from 'Helpers/Props';\r\nimport MovieHeadshot from 'Movie/MovieHeadshot';\r\nimport EditImportListModalConnector from 'Settings/ImportLists/ImportLists/EditImportListModalConnector';\r\nimport { deleteImportList } from 'Store/Actions/Settings/importLists';\r\nimport ImportList from 'typings/ImportList';\r\nimport MovieCredit from 'typings/MovieCredit';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from '../MovieCreditPoster.css';\r\n\r\nexport interface MovieCastPosterProps\r\n extends Pick {\r\n tmdbId: number;\r\n posterWidth: number;\r\n posterHeight: number;\r\n importList?: ImportList;\r\n onImportListSelect(): void;\r\n}\r\n\r\nfunction MovieCastPoster(props: MovieCastPosterProps) {\r\n const {\r\n tmdbId,\r\n personName,\r\n character,\r\n images = [],\r\n posterWidth,\r\n posterHeight,\r\n importList,\r\n onImportListSelect,\r\n } = props;\r\n\r\n const importListId = importList?.id ?? 0;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [hasPosterError, setHasPosterError] = useState(false);\r\n\r\n const [\r\n isEditImportListModalOpen,\r\n setEditImportListModalOpen,\r\n setEditImportListModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const [\r\n isDeleteImportListModalOpen,\r\n setDeleteImportListModalOpen,\r\n setDeleteImportListModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const handlePosterLoadError = useCallback(() => {\r\n setHasPosterError(true);\r\n }, [setHasPosterError]);\r\n\r\n const handlePosterLoad = useCallback(() => {\r\n setHasPosterError(false);\r\n }, [setHasPosterError]);\r\n\r\n const handleManageImportListPress = useCallback(() => {\r\n if (importListId === 0) {\r\n onImportListSelect();\r\n }\r\n\r\n setEditImportListModalOpen();\r\n }, [importListId, onImportListSelect, setEditImportListModalOpen]);\r\n\r\n const handleDeleteImportListConfirmed = useCallback(() => {\r\n dispatch(deleteImportList({ id: importListId }));\r\n\r\n setEditImportListModalClosed();\r\n setDeleteImportListModalClosed();\r\n }, [\r\n importListId,\r\n setEditImportListModalClosed,\r\n setDeleteImportListModalClosed,\r\n dispatch,\r\n ]);\r\n\r\n const elementStyle = {\r\n width: `${posterWidth}px`,\r\n height: `${posterHeight}px`,\r\n borderRadius: '5px',\r\n };\r\n\r\n const contentStyle = {\r\n width: `${posterWidth}px`,\r\n };\r\n\r\n const monitored =\r\n importList?.enabled === true && importList?.enableAuto === true;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n\r\n
\r\n \r\n\r\n {hasPosterError && (\r\n
{personName}
\r\n )}\r\n
\r\n
\r\n\r\n
\r\n {personName}\r\n
\r\n
\r\n {character}\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieCastPoster;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport createMovieCreditsSelector from 'Store/Selectors/createMovieCreditsSelector';\r\nimport MovieCreditPosters from '../MovieCreditPosters';\r\nimport MovieCastPoster from './MovieCastPoster';\r\n\r\ninterface MovieCastPostersProps {\r\n isSmallScreen: boolean;\r\n}\r\n\r\nfunction MovieCastPosters({ isSmallScreen }: MovieCastPostersProps) {\r\n const { items: castCredits } = useSelector(\r\n createMovieCreditsSelector('cast')\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieCastPosters;\r\n","import classNames from 'classnames';\r\nimport React, { useCallback, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Icon from 'Components/Icon';\r\nimport Label from 'Components/Label';\r\nimport Link from 'Components/Link/Link';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport MonitorToggleButton from 'Components/MonitorToggleButton';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport { icons, kinds, sizes } from 'Helpers/Props';\r\nimport MovieHeadshot from 'Movie/MovieHeadshot';\r\nimport EditImportListModalConnector from 'Settings/ImportLists/ImportLists/EditImportListModalConnector';\r\nimport { deleteImportList } from 'Store/Actions/Settings/importLists';\r\nimport ImportList from 'typings/ImportList';\r\nimport MovieCredit from 'typings/MovieCredit';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from '../MovieCreditPoster.css';\r\n\r\nexport interface MovieCrewPosterProps\r\n extends Pick {\r\n tmdbId: number;\r\n posterWidth: number;\r\n posterHeight: number;\r\n importList?: ImportList;\r\n onImportListSelect(): void;\r\n}\r\n\r\nfunction MovieCrewPoster(props: MovieCrewPosterProps) {\r\n const {\r\n tmdbId,\r\n personName,\r\n job,\r\n images = [],\r\n posterWidth,\r\n posterHeight,\r\n importList,\r\n onImportListSelect,\r\n } = props;\r\n\r\n const importListId = importList?.id ?? 0;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [hasPosterError, setHasPosterError] = useState(false);\r\n\r\n const [\r\n isEditImportListModalOpen,\r\n setEditImportListModalOpen,\r\n setEditImportListModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const [\r\n isDeleteImportListModalOpen,\r\n setDeleteImportListModalOpen,\r\n setDeleteImportListModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const handlePosterLoadError = useCallback(() => {\r\n setHasPosterError(true);\r\n }, [setHasPosterError]);\r\n\r\n const handlePosterLoad = useCallback(() => {\r\n setHasPosterError(false);\r\n }, [setHasPosterError]);\r\n\r\n const handleManageImportListPress = useCallback(() => {\r\n if (importListId === 0) {\r\n onImportListSelect();\r\n }\r\n\r\n setEditImportListModalOpen();\r\n }, [importListId, onImportListSelect, setEditImportListModalOpen]);\r\n\r\n const handleDeleteImportListConfirmed = useCallback(() => {\r\n dispatch(deleteImportList({ id: importListId }));\r\n\r\n setEditImportListModalClosed();\r\n setDeleteImportListModalClosed();\r\n }, [\r\n importListId,\r\n setEditImportListModalClosed,\r\n setDeleteImportListModalClosed,\r\n dispatch,\r\n ]);\r\n\r\n const elementStyle = {\r\n width: `${posterWidth}px`,\r\n height: `${posterHeight}px`,\r\n borderRadius: '5px',\r\n };\r\n\r\n const contentStyle = {\r\n width: `${posterWidth}px`,\r\n };\r\n\r\n const monitored =\r\n importList?.enabled === true && importList?.enableAuto === true;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n\r\n
\r\n \r\n\r\n {hasPosterError && (\r\n
{personName}
\r\n )}\r\n
\r\n
\r\n\r\n
\r\n {personName}\r\n
\r\n
{job}
\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieCrewPoster;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport createMovieCreditsSelector from 'Store/Selectors/createMovieCreditsSelector';\r\nimport MovieCreditPosters from '../MovieCreditPosters';\r\nimport MovieCrewPoster from './MovieCrewPoster';\r\n\r\ninterface MovieCrewPostersProps {\r\n isSmallScreen: boolean;\r\n}\r\n\r\nfunction MovieCrewPosters({ isSmallScreen }: MovieCrewPostersProps) {\r\n const { items: crewCredits } = useSelector(\r\n createMovieCreditsSelector('crew')\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieCrewPosters;\r\n","import moment from 'moment';\r\n\r\nfunction formatDate(date, dateFormat) {\r\n if (!date) {\r\n return '';\r\n }\r\n\r\n return moment(date).format(dateFormat);\r\n}\r\n\r\nexport default formatDate;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"dateIcon\":\"MovieReleaseDates-dateIcon-Hnf9R\"};","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport Icon from 'Components/Icon';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport { icons } from 'Helpers/Props';\r\nimport Movie from 'Movie/Movie';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport formatDate from 'Utilities/Date/formatDate';\r\nimport getRelativeDate from 'Utilities/Date/getRelativeDate';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MovieReleaseDates.css';\r\n\r\ntype MovieReleaseDatesProps = Pick<\r\n Movie,\r\n 'tmdbId' | 'inCinemas' | 'digitalRelease' | 'physicalRelease'\r\n>;\r\n\r\nfunction MovieReleaseDates({\r\n tmdbId,\r\n inCinemas,\r\n digitalRelease,\r\n physicalRelease,\r\n}: MovieReleaseDatesProps) {\r\n const { showRelativeDates, shortDateFormat, longDateFormat, timeFormat } =\r\n useSelector(createUISettingsSelector());\r\n\r\n if (!inCinemas && !physicalRelease && !digitalRelease) {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {inCinemas ? (\r\n \r\n
\r\n \r\n
\r\n\r\n {getRelativeDate({\r\n date: inCinemas,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n })}\r\n \r\n ) : null}\r\n\r\n {digitalRelease ? (\r\n \r\n
\r\n \r\n
\r\n\r\n {getRelativeDate({\r\n date: digitalRelease,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n })}\r\n \r\n ) : null}\r\n\r\n {physicalRelease ? (\r\n \r\n
\r\n \r\n
\r\n\r\n {getRelativeDate({\r\n date: physicalRelease,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n })}\r\n \r\n ) : null}\r\n \r\n );\r\n}\r\n\r\nexport default MovieReleaseDates;\r\n","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { kinds, sizes } from 'Helpers/Props';\r\nimport useMovie from 'Movie/useMovie';\r\nimport useTags from 'Tags/useTags';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\n\r\ninterface MovieTagsProps {\r\n movieId: number;\r\n}\r\n\r\nfunction MovieTags({ movieId }: MovieTagsProps) {\r\n const movie = useMovie(movieId)!;\r\n const tagList = useTags();\r\n\r\n const tags = movie.tags\r\n .map((tagId) => tagList.find((tag) => tag.id === tagId))\r\n .filter((tag) => !!tag)\r\n .sort(sortByProp('label'))\r\n .map((tag) => tag.label);\r\n\r\n return (\r\n
\r\n {tags.map((tag) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n}\r\n\r\nexport default MovieTags;\r\n","import { useSelector } from 'react-redux';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\n\r\nconst useTags = () => {\r\n return useSelector(createTagsSelector());\r\n};\r\n\r\nexport default useTags;\r\n","import React from 'react';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport titleCase from 'Utilities/String/titleCase';\r\n\r\ninterface MovieTitlesRowProps {\r\n title: string;\r\n sourceType: string;\r\n}\r\n\r\nfunction MovieTitlesRow({ title, sourceType }: MovieTitlesRowProps) {\r\n return (\r\n \r\n {title}\r\n\r\n {titleCase(sourceType)}\r\n \r\n );\r\n}\r\n\r\nexport default MovieTitlesRow;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Column from 'Components/Table/Column';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { kinds } from 'Helpers/Props';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport MovieTitlesRow from './MovieTitlesRow';\r\nimport styles from './MovieTitlesTable.css';\r\n\r\nconst columns: Column[] = [\r\n {\r\n name: 'alternativeTitle',\r\n label: () => translate('AlternativeTitle'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'sourceType',\r\n label: () => translate('Type'),\r\n isVisible: true,\r\n },\r\n];\r\n\r\nfunction movieAlternativeTitlesSelector(movieId: number) {\r\n return createSelector(\r\n (state: AppState) => state.movies,\r\n (movies) => {\r\n const { isFetching, isPopulated, error, items } = movies;\r\n\r\n const alternateTitles =\r\n items.find((m) => m.id === movieId)?.alternateTitles ?? [];\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items: alternateTitles,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface MovieTitlesProps {\r\n movieId: number;\r\n}\r\n\r\nfunction MovieTitlesTable({ movieId }: MovieTitlesProps) {\r\n const { isFetching, isPopulated, error, items } = useSelector(\r\n movieAlternativeTitlesSelector(movieId)\r\n );\r\n\r\n const sortedItems = items.sort(sortByProp('title'));\r\n\r\n if (!isFetching && !!error) {\r\n return (\r\n \r\n {translate('AlternativeTitlesLoadError')}\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n {isFetching && }\r\n\r\n {isPopulated && !items.length && !error ? (\r\n
\r\n {translate('NoAlternativeTitles')}\r\n
\r\n ) : null}\r\n\r\n {isPopulated && !!items.length && !error ? (\r\n \r\n \r\n {sortedItems.map((item) => (\r\n \r\n ))}\r\n \r\n
\r\n ) : null}\r\n
\r\n );\r\n}\r\n\r\nexport default MovieTitlesTable;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"blankpad\":\"MovieTitlesTable-blankpad-rzGhA\",\"container\":\"MovieTitlesTable-container-d22qO\"};","// extracted by mini-css-extract-plugin\nexport default {\"innerContentBody\":\"MovieDetails-innerContentBody-ZFMpt\",\"header\":\"MovieDetails-header-FEq6F\",\"errorMessage\":\"MovieDetails-errorMessage-Mpvwv\",\"backdrop\":\"MovieDetails-backdrop-xLWPd\",\"backdropOverlay\":\"MovieDetails-backdropOverlay-enPTs\",\"headerContent\":\"MovieDetails-headerContent-LU2fx\",\"poster\":\"MovieDetails-poster-Qp_05\",\"info\":\"MovieDetails-info-ykf8t\",\"titleRow\":\"MovieDetails-titleRow-Z2heu\",\"titleContainer\":\"MovieDetails-titleContainer-s3R0R\",\"title\":\"MovieDetails-title-yaEzx\",\"toggleMonitoredContainer\":\"MovieDetails-toggleMonitoredContainer-bGWSE\",\"monitorToggleButton\":\"MovieDetails-monitorToggleButton-APdLa MonitorToggleButton-toggleButton-fG17x IconButton-button-t4C5V Link-link-RInnp\",\"alternateTitlesIconContainer\":\"MovieDetails-alternateTitlesIconContainer-QpXFR\",\"filterIcon\":\"MovieDetails-filterIcon-XoVQ7\",\"movieNavigationButtons\":\"MovieDetails-movieNavigationButtons-ttiAZ\",\"movieNavigationButton\":\"MovieDetails-movieNavigationButton-b8M4Y IconButton-button-t4C5V Link-link-RInnp\",\"details\":\"MovieDetails-details-dEDRX\",\"links\":\"MovieDetails-links-RgCzv\",\"rating\":\"MovieDetails-rating-gwOHo\",\"year\":\"MovieDetails-year-FZGC1\",\"runtime\":\"MovieDetails-runtime-_q_iv\",\"certification\":\"MovieDetails-certification-uctzJ\",\"detailsLabel\":\"MovieDetails-detailsLabel-yEMVH Label-label-DYldh\",\"detailsInfoLabel\":\"MovieDetails-detailsInfoLabel-o7IZQ InfoLabel-label-Wzh9H\",\"path\":\"MovieDetails-path-UGxp_\",\"sizeOnDisk\":\"MovieDetails-sizeOnDisk-vp0I9\",\"qualityProfileName\":\"MovieDetails-qualityProfileName-RNI2f\",\"statusName\":\"MovieDetails-statusName-N_KwB\",\"originalLanguage\":\"MovieDetails-originalLanguage-h8ELA\",\"studio\":\"MovieDetails-studio-msMUn\",\"collection\":\"MovieDetails-collection-fJzbV\",\"genres\":\"MovieDetails-genres-LWKII\",\"overview\":\"MovieDetails-overview-kEtB2\",\"contentContainer\":\"MovieDetails-contentContainer-m5gIt\",\"tabList\":\"MovieDetails-tabList-EpZo2\",\"tab\":\"MovieDetails-tab-Zc0iA\",\"selectedTab\":\"MovieDetails-selectedTab-tx8_A\",\"tabContent\":\"MovieDetails-tabContent-ojQSW\"};","import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router';\r\nimport TextTruncate from 'react-text-truncate';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport ImdbRating from 'Components/ImdbRating';\r\nimport InfoLabel from 'Components/InfoLabel';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Marquee from 'Components/Marquee';\r\nimport MonitorToggleButton from 'Components/MonitorToggleButton';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport RottenTomatoRating from 'Components/RottenTomatoRating';\r\nimport TmdbRating from 'Components/TmdbRating';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport TraktRating from 'Components/TraktRating';\r\nimport useMeasure from 'Helpers/Hooks/useMeasure';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport {\r\n icons,\r\n kinds,\r\n sizes,\r\n sortDirections,\r\n tooltipPositions,\r\n} from 'Helpers/Props';\r\nimport InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';\r\nimport DeleteMovieModal from 'Movie/Delete/DeleteMovieModal';\r\nimport EditMovieModal from 'Movie/Edit/EditMovieModal';\r\nimport getMovieStatusDetails from 'Movie/getMovieStatusDetails';\r\nimport MovieHistoryModal from 'Movie/History/MovieHistoryModal';\r\nimport { Image, Statistics } from 'Movie/Movie';\r\nimport MovieCollectionLabel from 'Movie/MovieCollectionLabel';\r\nimport MovieGenres from 'Movie/MovieGenres';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport MovieInteractiveSearchModal from 'Movie/Search/MovieInteractiveSearchModal';\r\nimport useMovie from 'Movie/useMovie';\r\nimport MovieFileEditorTable from 'MovieFile/Editor/MovieFileEditorTable';\r\nimport ExtraFileTable from 'MovieFile/Extras/ExtraFileTable';\r\nimport OrganizePreviewModal from 'Organize/OrganizePreviewModal';\r\nimport QualityProfileName from 'Settings/Profiles/Quality/QualityProfileName';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport {\r\n clearExtraFiles,\r\n fetchExtraFiles,\r\n} from 'Store/Actions/extraFileActions';\r\nimport { toggleMovieMonitored } from 'Store/Actions/movieActions';\r\nimport {\r\n clearMovieCredits,\r\n fetchMovieCredits,\r\n} from 'Store/Actions/movieCreditsActions';\r\nimport {\r\n clearMovieFiles,\r\n fetchMovieFiles,\r\n} from 'Store/Actions/movieFileActions';\r\nimport {\r\n clearQueueDetails,\r\n fetchQueueDetails,\r\n} from 'Store/Actions/queueActions';\r\nimport {\r\n cancelFetchReleases,\r\n clearReleases,\r\n} from 'Store/Actions/releaseActions';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport { fetchImportListSchema } from 'Store/Actions/Settings/importLists';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport createCommandsSelector from 'Store/Selectors/createCommandsSelector';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport fonts from 'Styles/Variables/fonts';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport { findCommand, isCommandExecuting } from 'Utilities/Command';\r\nimport formatRuntime from 'Utilities/Date/formatRuntime';\r\nimport getPathWithUrlBase from 'Utilities/getPathWithUrlBase';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport {\r\n registerPagePopulator,\r\n unregisterPagePopulator,\r\n} from 'Utilities/pagePopulator';\r\nimport translate from 'Utilities/String/translate';\r\nimport MovieCastPosters from './Credits/Cast/MovieCastPosters';\r\nimport MovieCrewPosters from './Credits/Crew/MovieCrewPosters';\r\nimport MovieDetailsLinks from './MovieDetailsLinks';\r\nimport MovieReleaseDates from './MovieReleaseDates';\r\nimport MovieStatusLabel from './MovieStatusLabel';\r\nimport MovieTags from './MovieTags';\r\nimport MovieTitlesTable from './Titles/MovieTitlesTable';\r\nimport styles from './MovieDetails.css';\r\n\r\nconst defaultFontSize = parseInt(fonts.defaultFontSize);\r\nconst lineHeight = parseFloat(fonts.lineHeight);\r\n\r\nfunction getFanartUrl(images: Image[]) {\r\n const image = images.find((image) => image.coverType === 'fanart');\r\n return image?.url ?? image?.remoteUrl;\r\n}\r\n\r\nfunction createMovieFilesSelector() {\r\n return createSelector(\r\n (state: AppState) => state.movieFiles,\r\n ({ items, isFetching, isPopulated, error }) => {\r\n const hasMovieFiles = !!items.length;\r\n\r\n return {\r\n isMovieFilesFetching: isFetching,\r\n isMovieFilesPopulated: isPopulated,\r\n movieFilesError: error,\r\n hasMovieFiles,\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createExtraFilesSelector() {\r\n return createSelector(\r\n (state: AppState) => state.extraFiles,\r\n ({ isFetching, isPopulated, error }) => {\r\n return {\r\n isExtraFilesFetching: isFetching,\r\n isExtraFilesPopulated: isPopulated,\r\n extraFilesError: error,\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMovieCreditsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.movieCredits,\r\n ({ isFetching, isPopulated, error }) => {\r\n return {\r\n isMovieCreditsFetching: isFetching,\r\n isMovieCreditsPopulated: isPopulated,\r\n movieCreditsError: error,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface MovieDetailsProps {\r\n movieId: number;\r\n}\r\n\r\nfunction MovieDetails({ movieId }: MovieDetailsProps) {\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n\r\n const movie = useMovie(movieId);\r\n const allMovies = useSelector(createAllMoviesSelector());\r\n\r\n const { isMovieFilesFetching, movieFilesError, hasMovieFiles } = useSelector(\r\n createMovieFilesSelector()\r\n );\r\n const { isExtraFilesFetching, extraFilesError } = useSelector(\r\n createExtraFilesSelector()\r\n );\r\n const { isMovieCreditsFetching, movieCreditsError } = useSelector(\r\n createMovieCreditsSelector()\r\n );\r\n const { movieRuntimeFormat } = useSelector(createUISettingsSelector());\r\n const isSidebarVisible = useSelector(\r\n (state: AppState) => state.app.isSidebarVisible\r\n );\r\n const { isSmallScreen } = useSelector(createDimensionsSelector());\r\n\r\n const commands = useSelector(createCommandsSelector());\r\n\r\n const { isRefreshing, isRenaming, isSearching } = useMemo(() => {\r\n const movieRefreshingCommand = findCommand(commands, {\r\n name: commandNames.REFRESH_MOVIE,\r\n });\r\n\r\n const isMovieRefreshingCommandExecuting = isCommandExecuting(\r\n movieRefreshingCommand\r\n );\r\n\r\n const allMoviesRefreshing =\r\n isMovieRefreshingCommandExecuting &&\r\n !movieRefreshingCommand?.body.movieIds?.length;\r\n\r\n const isMovieRefreshing =\r\n isMovieRefreshingCommandExecuting &&\r\n movieRefreshingCommand?.body.movieIds?.includes(movieId);\r\n\r\n const isSearchingExecuting = isCommandExecuting(\r\n findCommand(commands, {\r\n name: commandNames.MOVIE_SEARCH,\r\n movieIds: [movieId],\r\n })\r\n );\r\n\r\n const isRenamingFiles = isCommandExecuting(\r\n findCommand(commands, {\r\n name: commandNames.RENAME_FILES,\r\n movieId,\r\n })\r\n );\r\n\r\n const isRenamingMovieCommand = findCommand(commands, {\r\n name: commandNames.RENAME_MOVIE,\r\n });\r\n\r\n const isRenamingMovie =\r\n isCommandExecuting(isRenamingMovieCommand) &&\r\n isRenamingMovieCommand?.body?.movieIds?.includes(movieId);\r\n\r\n return {\r\n isRefreshing: isMovieRefreshing || allMoviesRefreshing,\r\n isRenaming: isRenamingFiles || isRenamingMovie,\r\n isSearching: isSearchingExecuting,\r\n };\r\n }, [movieId, commands]);\r\n\r\n const { nextMovie, previousMovie } = useMemo(() => {\r\n const sortedMovies = [...allMovies].sort(sortByProp('sortTitle'));\r\n const movieIndex = sortedMovies.findIndex((movie) => movie.id === movieId);\r\n\r\n if (movieIndex === -1) {\r\n return {\r\n nextMovie: undefined,\r\n previousMovie: undefined,\r\n };\r\n }\r\n\r\n const nextMovie = sortedMovies[movieIndex + 1] ?? sortedMovies[0];\r\n const previousMovie =\r\n sortedMovies[movieIndex - 1] ?? sortedMovies[sortedMovies.length - 1];\r\n\r\n return {\r\n nextMovie: {\r\n title: nextMovie.title,\r\n titleSlug: nextMovie.titleSlug,\r\n },\r\n previousMovie: {\r\n title: previousMovie.title,\r\n titleSlug: previousMovie.titleSlug,\r\n },\r\n };\r\n }, [movieId, allMovies]);\r\n\r\n const touchStart = useRef(null);\r\n const [isOrganizeModalOpen, setIsOrganizeModalOpen] = useState(false);\r\n const [isManageMoviesModalOpen, setIsManageMoviesModalOpen] = useState(false);\r\n const [isInteractiveSearchModalOpen, setIsInteractiveSearchModalOpen] =\r\n useState(false);\r\n const [isEditMovieModalOpen, setIsEditMovieModalOpen] = useState(false);\r\n const [isDeleteMovieModalOpen, setIsDeleteMovieModalOpen] = useState(false);\r\n const [isMovieHistoryModalOpen, setIsMovieHistoryModalOpen] = useState(false);\r\n const [titleRef, { width: titleWidth }] = useMeasure();\r\n const [overviewRef, { height: overviewHeight }] = useMeasure();\r\n const wasRefreshing = usePrevious(isRefreshing);\r\n const wasRenaming = usePrevious(isRenaming);\r\n\r\n const handleOrganizePress = useCallback(() => {\r\n setIsOrganizeModalOpen(true);\r\n }, []);\r\n\r\n const handleOrganizeModalClose = useCallback(() => {\r\n setIsOrganizeModalOpen(false);\r\n }, []);\r\n\r\n const handleManageMoviesPress = useCallback(() => {\r\n setIsManageMoviesModalOpen(true);\r\n }, []);\r\n\r\n const handleManageMoviesModalClose = useCallback(() => {\r\n setIsManageMoviesModalOpen(false);\r\n }, []);\r\n\r\n const handleInteractiveSearchPress = useCallback(() => {\r\n setIsInteractiveSearchModalOpen(true);\r\n }, []);\r\n\r\n const handleInteractiveSearchModalClose = useCallback(() => {\r\n setIsInteractiveSearchModalOpen(false);\r\n }, []);\r\n\r\n const handleEditMoviePress = useCallback(() => {\r\n setIsEditMovieModalOpen(true);\r\n }, []);\r\n\r\n const handleEditMovieModalClose = useCallback(() => {\r\n setIsEditMovieModalOpen(false);\r\n }, []);\r\n\r\n const handleDeleteMoviePress = useCallback(() => {\r\n setIsEditMovieModalOpen(false);\r\n setIsDeleteMovieModalOpen(true);\r\n }, []);\r\n\r\n const handleDeleteMovieModalClose = useCallback(() => {\r\n setIsDeleteMovieModalOpen(false);\r\n }, []);\r\n\r\n const handleMovieHistoryPress = useCallback(() => {\r\n setIsMovieHistoryModalOpen(true);\r\n }, []);\r\n\r\n const handleMovieHistoryModalClose = useCallback(() => {\r\n setIsMovieHistoryModalOpen(false);\r\n }, []);\r\n\r\n const handleMonitorTogglePress = useCallback(\r\n (value: boolean) => {\r\n dispatch(\r\n toggleMovieMonitored({\r\n movieId,\r\n monitored: value,\r\n })\r\n );\r\n },\r\n [movieId, dispatch]\r\n );\r\n\r\n const handleRefreshPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: commandNames.REFRESH_MOVIE,\r\n movieIds: [movieId],\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n const handleSearchPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: commandNames.MOVIE_SEARCH,\r\n movieIds: [movieId],\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n const handleTouchStart = useCallback(\r\n (event: TouchEvent) => {\r\n const touches = event.touches;\r\n const currentTouch = touches[0].pageX;\r\n const touchY = touches[0].pageY;\r\n\r\n // Only change when swipe is on header, we need horizontal scroll on tables\r\n if (touchY > 470) {\r\n return;\r\n }\r\n\r\n if (touches.length !== 1) {\r\n return;\r\n }\r\n\r\n if (\r\n currentTouch < 50 ||\r\n isSidebarVisible ||\r\n isOrganizeModalOpen ||\r\n isEditMovieModalOpen ||\r\n isDeleteMovieModalOpen ||\r\n isManageMoviesModalOpen ||\r\n isInteractiveSearchModalOpen ||\r\n isMovieHistoryModalOpen\r\n ) {\r\n return;\r\n }\r\n\r\n touchStart.current = currentTouch;\r\n },\r\n [\r\n isSidebarVisible,\r\n isOrganizeModalOpen,\r\n isEditMovieModalOpen,\r\n isDeleteMovieModalOpen,\r\n isManageMoviesModalOpen,\r\n isInteractiveSearchModalOpen,\r\n isMovieHistoryModalOpen,\r\n ]\r\n );\r\n\r\n const handleTouchEnd = useCallback(\r\n (event: TouchEvent) => {\r\n const touches = event.changedTouches;\r\n const currentTouch = touches[0].pageX;\r\n\r\n if (!touchStart.current) {\r\n return;\r\n }\r\n\r\n if (\r\n currentTouch > touchStart.current &&\r\n currentTouch - touchStart.current > 100 &&\r\n previousMovie !== undefined\r\n ) {\r\n history.push(getPathWithUrlBase(`/movie/${previousMovie.titleSlug}`));\r\n } else if (\r\n currentTouch < touchStart.current &&\r\n touchStart.current - currentTouch > 100 &&\r\n nextMovie !== undefined\r\n ) {\r\n history.push(getPathWithUrlBase(`/movie/${nextMovie.titleSlug}`));\r\n }\r\n\r\n touchStart.current = null;\r\n },\r\n [previousMovie, nextMovie, history]\r\n );\r\n\r\n const handleTouchCancel = useCallback(() => {\r\n touchStart.current = null;\r\n }, []);\r\n\r\n const handleTouchMove = useCallback(() => {\r\n if (!touchStart.current) {\r\n return;\r\n }\r\n }, []);\r\n\r\n const handleKeyUp = useCallback(\r\n (event: KeyboardEvent) => {\r\n if (\r\n isOrganizeModalOpen ||\r\n isManageMoviesModalOpen ||\r\n isInteractiveSearchModalOpen ||\r\n isEditMovieModalOpen ||\r\n isDeleteMovieModalOpen ||\r\n isMovieHistoryModalOpen\r\n ) {\r\n return;\r\n }\r\n\r\n if (event.composedPath && event.composedPath().length === 4) {\r\n if (event.key === 'ArrowLeft' && previousMovie !== undefined) {\r\n history.push(getPathWithUrlBase(`/movie/${previousMovie.titleSlug}`));\r\n }\r\n\r\n if (event.key === 'ArrowRight' && nextMovie !== undefined) {\r\n history.push(getPathWithUrlBase(`/movie/${nextMovie.titleSlug}`));\r\n }\r\n }\r\n },\r\n [\r\n isOrganizeModalOpen,\r\n isManageMoviesModalOpen,\r\n isInteractiveSearchModalOpen,\r\n isEditMovieModalOpen,\r\n isDeleteMovieModalOpen,\r\n isMovieHistoryModalOpen,\r\n previousMovie,\r\n nextMovie,\r\n history,\r\n ]\r\n );\r\n\r\n const populate = useCallback(() => {\r\n dispatch(fetchMovieFiles({ movieId }));\r\n dispatch(fetchExtraFiles({ movieId }));\r\n dispatch(fetchMovieCredits({ movieId }));\r\n dispatch(fetchQueueDetails({ movieId }));\r\n dispatch(fetchImportListSchema());\r\n dispatch(fetchRootFolders());\r\n }, [movieId, dispatch]);\r\n\r\n useEffect(() => {\r\n populate();\r\n }, [populate]);\r\n\r\n useEffect(() => {\r\n registerPagePopulator(populate, ['movieUpdated']);\r\n\r\n return () => {\r\n unregisterPagePopulator(populate);\r\n dispatch(clearMovieFiles());\r\n dispatch(clearExtraFiles());\r\n dispatch(clearMovieCredits());\r\n dispatch(clearQueueDetails());\r\n dispatch(cancelFetchReleases());\r\n dispatch(clearReleases());\r\n };\r\n }, [populate, dispatch]);\r\n\r\n useEffect(() => {\r\n if ((!isRefreshing && wasRefreshing) || (!isRenaming && wasRenaming)) {\r\n populate();\r\n }\r\n }, [isRefreshing, wasRefreshing, isRenaming, wasRenaming, populate]);\r\n\r\n useEffect(() => {\r\n window.addEventListener('touchstart', handleTouchStart);\r\n window.addEventListener('touchend', handleTouchEnd);\r\n window.addEventListener('touchcancel', handleTouchCancel);\r\n window.addEventListener('touchmove', handleTouchMove);\r\n window.addEventListener('keyup', handleKeyUp);\r\n\r\n return () => {\r\n window.removeEventListener('touchstart', handleTouchStart);\r\n window.removeEventListener('touchend', handleTouchEnd);\r\n window.removeEventListener('touchcancel', handleTouchCancel);\r\n window.removeEventListener('touchmove', handleTouchMove);\r\n window.removeEventListener('keyup', handleKeyUp);\r\n };\r\n }, [\r\n handleTouchStart,\r\n handleTouchEnd,\r\n handleTouchCancel,\r\n handleTouchMove,\r\n handleKeyUp,\r\n ]);\r\n\r\n if (!movie) {\r\n return null;\r\n }\r\n\r\n const {\r\n id,\r\n tmdbId,\r\n imdbId,\r\n title,\r\n originalTitle,\r\n year,\r\n inCinemas,\r\n physicalRelease,\r\n digitalRelease,\r\n runtime,\r\n certification,\r\n ratings,\r\n path,\r\n statistics = {} as Statistics,\r\n qualityProfileId,\r\n monitored,\r\n studio,\r\n originalLanguage,\r\n genres = [],\r\n collection,\r\n overview,\r\n status,\r\n youTubeTrailerId,\r\n isAvailable,\r\n images,\r\n tags,\r\n isSaving = false,\r\n } = movie;\r\n\r\n const { sizeOnDisk = 0 } = statistics;\r\n\r\n const statusDetails = getMovieStatusDetails(status);\r\n\r\n const fanartUrl = getFanartUrl(images);\r\n const isFetching =\r\n isMovieFilesFetching || isExtraFilesFetching || isMovieCreditsFetching;\r\n\r\n const marqueeWidth = isSmallScreen ? titleWidth : titleWidth - 150;\r\n\r\n const titleWithYear = `${title}${year > 0 ? ` (${year})` : ''}`;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n {previousMovie ? (\r\n \r\n ) : null}\r\n\r\n {nextMovie ? (\r\n \r\n ) : null}\r\n
\r\n \r\n\r\n
\r\n
\r\n {certification ? (\r\n \r\n {certification}\r\n \r\n ) : null}\r\n\r\n \r\n 0 ? (\r\n year\r\n ) : (\r\n \r\n )\r\n }\r\n title={translate('ReleaseDates')}\r\n body={\r\n \r\n }\r\n position={tooltipPositions.BOTTOM}\r\n />\r\n \r\n\r\n {runtime ? (\r\n \r\n {formatRuntime(runtime, movieRuntimeFormat)}\r\n \r\n ) : null}\r\n\r\n \r\n }\r\n tooltip={\r\n \r\n }\r\n position={tooltipPositions.BOTTOM}\r\n />\r\n \r\n\r\n {!!tags.length && (\r\n \r\n }\r\n tooltip={}\r\n position={tooltipPositions.BOTTOM}\r\n />\r\n \r\n )}\r\n
\r\n
\r\n\r\n
\r\n {ratings.tmdb ? (\r\n \r\n \r\n \r\n ) : null}\r\n {ratings.imdb ? (\r\n \r\n \r\n \r\n ) : null}\r\n {ratings.rottenTomatoes ? (\r\n \r\n \r\n \r\n ) : null}\r\n {ratings.trakt ? (\r\n \r\n \r\n \r\n ) : null}\r\n
\r\n\r\n
\r\n \r\n {path}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {formatBytes(sizeOnDisk)}\r\n \r\n \r\n\r\n {collection ? (\r\n \r\n
\r\n \r\n
\r\n \r\n ) : null}\r\n\r\n {originalLanguage?.name && !isSmallScreen ? (\r\n \r\n \r\n {originalLanguage.name}\r\n \r\n \r\n ) : null}\r\n\r\n {studio && !isSmallScreen ? (\r\n \r\n {studio}\r\n \r\n ) : null}\r\n\r\n {genres.length && !isSmallScreen ? (\r\n \r\n \r\n \r\n ) : null}\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n\r\n
\r\n {!isFetching && movieFilesError ? (\r\n \r\n {translate('LoadingMovieFilesFailed')}\r\n \r\n ) : null}\r\n\r\n {!isFetching && extraFilesError ? (\r\n \r\n {translate('LoadingMovieExtraFilesFailed')}\r\n \r\n ) : null}\r\n\r\n {!isFetching && movieCreditsError ? (\r\n \r\n {translate('LoadingMovieCreditsFailed')}\r\n \r\n ) : null}\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieDetails;\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { useParams } from 'react-router';\r\nimport { useHistory } from 'react-router-dom';\r\nimport NotFound from 'Components/NotFound';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport MovieDetails from './MovieDetails';\r\n\r\nfunction MovieDetailsPage() {\r\n const allMovies = useSelector(createAllMoviesSelector());\r\n const { titleSlug } = useParams<{ titleSlug: string }>();\r\n const history = useHistory();\r\n\r\n const movieIndex = allMovies.findIndex(\r\n (movie) => movie.titleSlug === titleSlug\r\n );\r\n\r\n const previousIndex = usePrevious(movieIndex);\r\n\r\n useEffect(() => {\r\n if (\r\n movieIndex === -1 &&\r\n previousIndex !== -1 &&\r\n previousIndex !== undefined\r\n ) {\r\n history.push(`${window.Radarr.urlBase}/`);\r\n }\r\n }, [movieIndex, previousIndex, history]);\r\n\r\n if (movieIndex === -1) {\r\n return ;\r\n }\r\n\r\n return ;\r\n}\r\n\r\nexport default MovieDetailsPage;\r\n","import { createSelector, createSelectorCreator, defaultMemoize } from 'reselect';\r\nimport hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';\r\nimport createClientSideCollectionSelector from './createClientSideCollectionSelector';\r\n\r\nfunction createUnoptimizedSelector(uiSection) {\r\n return createSelector(\r\n createClientSideCollectionSelector('movies', uiSection),\r\n (movies) => {\r\n const items = movies.items.map((s) => {\r\n const {\r\n id,\r\n sortTitle,\r\n collectionId\r\n } = s;\r\n\r\n return {\r\n id,\r\n sortTitle,\r\n collectionId\r\n };\r\n });\r\n\r\n return {\r\n ...movies,\r\n items\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction movieListEqual(a, b) {\r\n return hasDifferentItemsOrOrder(a, b);\r\n}\r\n\r\nconst createMovieEqualSelector = createSelectorCreator(\r\n defaultMemoize,\r\n movieListEqual\r\n);\r\n\r\nfunction createMovieClientSideCollectionItemsSelector(uiSection) {\r\n return createMovieEqualSelector(\r\n createUnoptimizedSelector(uiSection),\r\n (movies) => movies\r\n );\r\n}\r\n\r\nexport default createMovieClientSideCollectionItemsSelector;\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FilterModal from 'Components/Filter/FilterModal';\r\nimport { setMovieFilter } from 'Store/Actions/movieIndexActions';\r\n\r\nfunction createMovieSelector() {\r\n return createSelector(\r\n (state: AppState) => state.movies.items,\r\n (movies) => {\r\n return movies;\r\n }\r\n );\r\n}\r\n\r\nfunction createFilterBuilderPropsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.movieIndex.filterBuilderProps,\r\n (filterBuilderProps) => {\r\n return filterBuilderProps;\r\n }\r\n );\r\n}\r\n\r\ninterface MovieIndexFilterModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nexport default function MovieIndexFilterModal(\r\n props: MovieIndexFilterModalProps\r\n) {\r\n const sectionItems = useSelector(createMovieSelector());\r\n const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());\r\n const customFilterType = 'movieIndex';\r\n\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSetFilter = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setMovieFilter(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { CustomFilter } from 'App/State/AppState';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport { align } from 'Helpers/Props';\r\nimport MovieIndexFilterModal from 'Movie/Index/MovieIndexFilterModal';\r\n\r\ninterface MovieIndexFilterMenuProps {\r\n selectedFilterKey: string | number;\r\n filters: object[];\r\n customFilters: CustomFilter[];\r\n isDisabled: boolean;\r\n onFilterSelect(filterName: string): unknown;\r\n}\r\n\r\nfunction MovieIndexFilterMenu(props: MovieIndexFilterMenuProps) {\r\n const {\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n isDisabled,\r\n onFilterSelect,\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nMovieIndexFilterMenu.defaultProps = {\r\n showCustomFilters: false,\r\n};\r\n\r\nexport default MovieIndexFilterMenu;\r\n","import React from 'react';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport SortMenu from 'Components/Menu/SortMenu';\r\nimport SortMenuItem from 'Components/Menu/SortMenuItem';\r\nimport { align } from 'Helpers/Props';\r\nimport { SortDirection } from 'Helpers/Props/sortDirections';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface MovieIndexSortMenuProps {\r\n sortKey?: string;\r\n sortDirection?: SortDirection;\r\n isDisabled: boolean;\r\n onSortSelect(sortKey: string): unknown;\r\n}\r\n\r\nfunction MovieIndexSortMenu(props: MovieIndexSortMenuProps) {\r\n const { sortKey, sortDirection, isDisabled, onSortSelect } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {translate('MonitoredStatus')}\r\n \r\n\r\n \r\n {translate('Title')}\r\n \r\n\r\n \r\n {translate('Studio')}\r\n \r\n\r\n \r\n {translate('QualityProfile')}\r\n \r\n\r\n \r\n {translate('Added')}\r\n \r\n\r\n \r\n {translate('Year')}\r\n \r\n\r\n \r\n {translate('InCinemas')}\r\n \r\n\r\n \r\n {translate('DigitalRelease')}\r\n \r\n\r\n \r\n {translate('PhysicalRelease')}\r\n \r\n\r\n \r\n {translate('ReleaseDate')}\r\n \r\n\r\n \r\n {translate('TmdbRating')}\r\n \r\n\r\n \r\n {translate('ImdbRating')}\r\n \r\n\r\n \r\n {translate('RottenTomatoesRating')}\r\n \r\n\r\n \r\n {translate('TraktRating')}\r\n \r\n\r\n \r\n {translate('Popularity')}\r\n \r\n\r\n \r\n {translate('Path')}\r\n \r\n\r\n \r\n {translate('SizeOnDisk')}\r\n \r\n\r\n \r\n {translate('Certification')}\r\n \r\n\r\n \r\n {translate('OriginalTitle')}\r\n \r\n\r\n \r\n {translate('OriginalLanguage')}\r\n \r\n\r\n \r\n {translate('Tags')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexSortMenu;\r\n","import React from 'react';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport ViewMenu from 'Components/Menu/ViewMenu';\r\nimport ViewMenuItem from 'Components/Menu/ViewMenuItem';\r\nimport { align } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface MovieIndexViewMenuProps {\r\n view: string;\r\n isDisabled: boolean;\r\n onViewSelect(value: string): unknown;\r\n}\r\n\r\nfunction MovieIndexViewMenu(props: MovieIndexViewMenuProps) {\r\n const { view, isDisabled, onViewSelect } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {translate('Table')}\r\n \r\n\r\n \r\n {translate('Posters')}\r\n \r\n\r\n \r\n {translate('Overview')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexViewMenu;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"footer\":\"MovieIndexFooter-footer-nXiiF\",\"legendItem\":\"MovieIndexFooter-legendItem-C5Hpq\",\"legendItemColor\":\"MovieIndexFooter-legendItemColor-FkuL3\",\"queue\":\"MovieIndexFooter-queue-ql14D MovieIndexFooter-legendItemColor-FkuL3\",\"continuing\":\"MovieIndexFooter-continuing-Ja2bn MovieIndexFooter-legendItemColor-FkuL3\",\"availNotMonitored\":\"MovieIndexFooter-availNotMonitored-WJx2C MovieIndexFooter-legendItemColor-FkuL3\",\"ended\":\"MovieIndexFooter-ended-YVumZ MovieIndexFooter-legendItemColor-FkuL3\",\"missingMonitored\":\"MovieIndexFooter-missingMonitored-qt_m6 MovieIndexFooter-legendItemColor-FkuL3\",\"missingUnmonitored\":\"MovieIndexFooter-missingUnmonitored-XuZyx MovieIndexFooter-legendItemColor-FkuL3\",\"statistics\":\"MovieIndexFooter-statistics-EX8uE\"};","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { ColorImpairedConsumer } from 'App/ColorImpairedContext';\r\nimport MoviesAppState from 'App/State/MoviesAppState';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport createDeepEqualSelector from 'Store/Selectors/createDeepEqualSelector';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MovieIndexFooter.css';\r\n\r\nfunction createUnoptimizedSelector() {\r\n return createSelector(\r\n createClientSideCollectionSelector('movies', 'movieIndex'),\r\n (movies: MoviesAppState) => {\r\n return movies.items.map((m) => {\r\n const { monitored, status, hasFile, statistics } = m;\r\n\r\n return {\r\n monitored,\r\n status,\r\n hasFile,\r\n statistics,\r\n };\r\n });\r\n }\r\n );\r\n}\r\n\r\nfunction createMovieSelector() {\r\n return createDeepEqualSelector(\r\n createUnoptimizedSelector(),\r\n (movies) => movies\r\n );\r\n}\r\n\r\nexport default function MovieIndexFooter() {\r\n const movies = useSelector(createMovieSelector());\r\n const count = movies.length;\r\n let movieFiles = 0;\r\n let monitored = 0;\r\n let totalFileSize = 0;\r\n\r\n movies.forEach((m) => {\r\n const { statistics = { sizeOnDisk: 0 } } = m;\r\n\r\n const { sizeOnDisk = 0 } = statistics;\r\n\r\n if (m.hasFile) {\r\n movieFiles += 1;\r\n }\r\n\r\n if (m.monitored) {\r\n monitored++;\r\n }\r\n\r\n totalFileSize += sizeOnDisk;\r\n });\r\n\r\n return (\r\n \r\n {(enableColorImpairedMode) => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
{translate('DownloadedAndMonitored')}
\r\n
\r\n\r\n
\r\n
\r\n
{translate('DownloadedButNotMonitored')}
\r\n
\r\n\r\n
\r\n \r\n
{translate('MissingMonitoredAndConsideredAvailable')}
\r\n
\r\n\r\n
\r\n \r\n
{translate('MissingNotMonitored')}
\r\n
\r\n\r\n
\r\n
\r\n
{translate('Queued')}
\r\n
\r\n\r\n
\r\n
\r\n
{translate('Unreleased')}
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }}\r\n \r\n );\r\n}\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport ClientSideCollectionAppState from 'App/State/ClientSideCollectionAppState';\r\nimport MoviesAppState, { MovieIndexAppState } from 'App/State/MoviesAppState';\r\nimport { REFRESH_MOVIE } from 'Commands/commandNames';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createMovieClientSideCollectionItemsSelector from 'Store/Selectors/createMovieClientSideCollectionItemsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\n\r\ninterface MovieIndexRefreshMovieButtonProps {\r\n isSelectMode: boolean;\r\n selectedFilterKey: string;\r\n}\r\n\r\nfunction MovieIndexRefreshMovieButton(\r\n props: MovieIndexRefreshMovieButtonProps\r\n) {\r\n const isRefreshing = useSelector(\r\n createCommandExecutingSelector(REFRESH_MOVIE)\r\n );\r\n const {\r\n items,\r\n totalItems,\r\n }: MoviesAppState & MovieIndexAppState & ClientSideCollectionAppState =\r\n useSelector(createMovieClientSideCollectionItemsSelector('movieIndex'));\r\n\r\n const dispatch = useDispatch();\r\n const { isSelectMode, selectedFilterKey } = props;\r\n const [selectState] = useSelect();\r\n const { selectedState } = selectState;\r\n\r\n const selectedMovieIds = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const moviesToRefresh =\r\n isSelectMode && selectedMovieIds.length > 0\r\n ? selectedMovieIds\r\n : items.map((m) => m.id);\r\n\r\n const refreshIndexLabel =\r\n selectedFilterKey === 'all'\r\n ? translate('UpdateAll')\r\n : translate('UpdateFiltered');\r\n\r\n const refreshSelectLabel =\r\n selectedMovieIds.length > 0\r\n ? translate('UpdateSelected')\r\n : translate('UpdateAll');\r\n\r\n const onPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: REFRESH_MOVIE,\r\n movieIds: moviesToRefresh,\r\n })\r\n );\r\n }, [dispatch, moviesToRefresh]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexRefreshMovieButton;\r\n","import React, { useCallback, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport ClientSideCollectionAppState from 'App/State/ClientSideCollectionAppState';\r\nimport MoviesAppState, { MovieIndexAppState } from 'App/State/MoviesAppState';\r\nimport { MOVIE_SEARCH } from 'Commands/commandNames';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createMovieClientSideCollectionItemsSelector from 'Store/Selectors/createMovieClientSideCollectionItemsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\n\r\ninterface MovieIndexSearchButtonProps {\r\n isSelectMode: boolean;\r\n selectedFilterKey: string;\r\n overflowComponent: React.FunctionComponent;\r\n}\r\n\r\nfunction MovieIndexSearchButton(props: MovieIndexSearchButtonProps) {\r\n const isSearching = useSelector(createCommandExecutingSelector(MOVIE_SEARCH));\r\n const {\r\n items,\r\n }: MoviesAppState & MovieIndexAppState & ClientSideCollectionAppState =\r\n useSelector(createMovieClientSideCollectionItemsSelector('movieIndex'));\r\n\r\n const dispatch = useDispatch();\r\n const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false);\r\n\r\n const { isSelectMode, selectedFilterKey } = props;\r\n const [selectState] = useSelect();\r\n const { selectedState } = selectState;\r\n\r\n const selectedMovieIds = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const moviesToSearch =\r\n isSelectMode && selectedMovieIds.length > 0\r\n ? selectedMovieIds\r\n : items.map((m) => m.id);\r\n\r\n const searchIndexLabel =\r\n selectedFilterKey === 'all'\r\n ? translate('SearchAll')\r\n : translate('SearchFiltered');\r\n\r\n const searchSelectLabel =\r\n selectedMovieIds.length > 0\r\n ? translate('SearchSelected')\r\n : translate('SearchAll');\r\n\r\n const onPress = useCallback(() => {\r\n setIsConfirmModalOpen(false);\r\n\r\n dispatch(\r\n executeCommand({\r\n name: MOVIE_SEARCH,\r\n movieIds: moviesToSearch,\r\n })\r\n );\r\n }, [dispatch, moviesToSearch]);\r\n\r\n const onConfirmPress = useCallback(() => {\r\n setIsConfirmModalOpen(true);\r\n }, [setIsConfirmModalOpen]);\r\n\r\n const onConfirmModalClose = useCallback(() => {\r\n setIsConfirmModalOpen(false);\r\n }, [setIsConfirmModalOpen]);\r\n\r\n return (\r\n <>\r\n 5 ? onConfirmPress : onPress}\r\n />\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexSearchButton;\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport ClientSideCollectionAppState from 'App/State/ClientSideCollectionAppState';\r\nimport MoviesAppState, { MovieIndexAppState } from 'App/State/MoviesAppState';\r\nimport { MOVIE_SEARCH } from 'Commands/commandNames';\r\nimport PageToolbarOverflowMenuItem from 'Components/Page/Toolbar/PageToolbarOverflowMenuItem';\r\nimport { icons } from 'Helpers/Props';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createMovieClientSideCollectionItemsSelector from 'Store/Selectors/createMovieClientSideCollectionItemsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\n\r\ninterface MovieIndexSearchMenuItemProps {\r\n isSelectMode: boolean;\r\n selectedFilterKey: string;\r\n}\r\n\r\nfunction MovieIndexSearchMenuItem(props: MovieIndexSearchMenuItemProps) {\r\n const isSearching = useSelector(createCommandExecutingSelector(MOVIE_SEARCH));\r\n const {\r\n items,\r\n }: MoviesAppState & MovieIndexAppState & ClientSideCollectionAppState =\r\n useSelector(createMovieClientSideCollectionItemsSelector('movieIndex'));\r\n\r\n const dispatch = useDispatch();\r\n\r\n const { isSelectMode, selectedFilterKey } = props;\r\n const [selectState] = useSelect();\r\n const { selectedState } = selectState;\r\n\r\n const selectedMovieIds = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const moviesToSearch =\r\n isSelectMode && selectedMovieIds.length > 0\r\n ? selectedMovieIds\r\n : items.map((m) => m.id);\r\n\r\n const searchIndexLabel =\r\n selectedFilterKey === 'all'\r\n ? translate('SearchAll')\r\n : translate('SearchFiltered');\r\n\r\n const searchSelectLabel =\r\n selectedMovieIds.length > 0\r\n ? translate('SearchSelected')\r\n : translate('SearchAll');\r\n\r\n const onPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: MOVIE_SEARCH,\r\n movieIds: moviesToSearch,\r\n })\r\n );\r\n }, [dispatch, moviesToSearch]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexSearchMenuItem;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { kinds } from 'Helpers/Props';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport Label from './Label';\r\nimport styles from './TagList.css';\r\n\r\nfunction TagList({ tags, tagList }) {\r\n const sortedTags = tags\r\n .map((tagId) => tagList.find((tag) => tag.id === tagId))\r\n .filter((tag) => !!tag)\r\n .sort(sortByProp('label'));\r\n\r\n return (\r\n
\r\n {\r\n sortedTags.map((tag) => {\r\n return (\r\n \r\n {tag.label}\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n}\r\n\r\nTagList.propTypes = {\r\n tags: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired\r\n};\r\n\r\nexport default TagList;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tags\":\"TagList-tags-AT8ST\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport TagList from './TagList';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createTagsSelector(),\r\n (tagList) => {\r\n return {\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(TagList);\r\n","import React, { SyntheticEvent, useCallback } from 'react';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport { icons } from 'Helpers/Props';\r\nimport styles from './MovieIndexPosterSelect.css';\r\n\r\ninterface MovieIndexPosterSelectProps {\r\n movieId: number;\r\n}\r\n\r\nfunction MovieIndexPosterSelect(props: MovieIndexPosterSelectProps) {\r\n const { movieId } = props;\r\n const [selectState, selectDispatch] = useSelect();\r\n const isSelected = selectState.selectedState[movieId];\r\n\r\n const onSelectPress = useCallback(\r\n (event: SyntheticEvent) => {\r\n const nativeEvent = event.nativeEvent as PointerEvent;\r\n const shiftKey = nativeEvent.shiftKey;\r\n\r\n selectDispatch({\r\n type: 'toggleSelected',\r\n id: movieId,\r\n isSelected: !isSelected,\r\n shiftKey,\r\n });\r\n },\r\n [movieId, isSelected, selectDispatch]\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexPosterSelect;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"checkButton\":\"MovieIndexPosterSelect-checkButton-o0JGH\",\"checkContainer\":\"MovieIndexPosterSelect-checkContainer-HI4ax\",\"selected\":\"MovieIndexPosterSelect-selected-MCMBa\",\"unselected\":\"MovieIndexPosterSelect-unselected-JHJyd\"};","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport { isCommandExecuting } from 'Utilities/Command';\r\n\r\nfunction createExecutingCommandsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.commands.items,\r\n (commands) => {\r\n return commands.filter((command) => isCommandExecuting(command));\r\n }\r\n );\r\n}\r\n\r\nexport default createExecutingCommandsSelector;\r\n","import { createSelector } from 'reselect';\r\nimport Command from 'Commands/Command';\r\nimport { MOVIE_SEARCH, REFRESH_MOVIE } from 'Commands/commandNames';\r\nimport Movie from 'Movie/Movie';\r\nimport createExecutingCommandsSelector from 'Store/Selectors/createExecutingCommandsSelector';\r\nimport createMovieQualityProfileSelector from 'Store/Selectors/createMovieQualityProfileSelector';\r\nimport { createMovieSelectorForHook } from 'Store/Selectors/createMovieSelector';\r\n\r\nfunction createMovieIndexItemSelector(movieId: number) {\r\n return createSelector(\r\n createMovieSelectorForHook(movieId),\r\n createMovieQualityProfileSelector(movieId),\r\n createExecutingCommandsSelector(),\r\n (movie: Movie, qualityProfile, executingCommands: Command[]) => {\r\n const isRefreshingMovie = executingCommands.some((command) => {\r\n return (\r\n command.name === REFRESH_MOVIE &&\r\n command.body.movieIds?.includes(movieId)\r\n );\r\n });\r\n\r\n const isSearchingMovie = executingCommands.some((command) => {\r\n return (\r\n command.name === MOVIE_SEARCH &&\r\n command.body.movieIds?.includes(movieId)\r\n );\r\n });\r\n\r\n return {\r\n movie,\r\n qualityProfile,\r\n isRefreshingMovie,\r\n isSearchingMovie,\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createMovieIndexItemSelector;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Movie from 'Movie/Movie';\r\nimport QualityProfile from 'typings/QualityProfile';\r\nimport { createMovieSelectorForHook } from './createMovieSelector';\r\n\r\nfunction createMovieQualityProfileSelector(movieId: number) {\r\n return createSelector(\r\n (state: AppState) => state.settings.qualityProfiles.items,\r\n createMovieSelectorForHook(movieId),\r\n (qualityProfiles: QualityProfile[], movie = {} as Movie) => {\r\n return qualityProfiles.find(\r\n (profile) => profile.id === movie.qualityProfileId\r\n );\r\n }\r\n );\r\n}\r\n\r\nexport default createMovieQualityProfileSelector;\r\n","import React from 'react';\r\nimport Icon, { IconProps } from 'Components/Icon';\r\nimport styles from './MovieIndexOverviewInfoRow.css';\r\n\r\ninterface MovieIndexOverviewInfoRowProps {\r\n title?: string;\r\n iconName: IconProps['name'];\r\n label: string;\r\n}\r\n\r\nfunction MovieIndexOverviewInfoRow(props: MovieIndexOverviewInfoRowProps) {\r\n const { title, iconName, label } = props;\r\n\r\n return (\r\n
\r\n \r\n\r\n {label}\r\n
\r\n );\r\n}\r\n\r\nexport default MovieIndexOverviewInfoRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"infoRow\":\"MovieIndexOverviewInfoRow-infoRow-isLLk\",\"icon\":\"MovieIndexOverviewInfoRow-icon-yfFsz\"};","import { IconDefinition } from '@fortawesome/free-regular-svg-icons';\r\nimport React, { useMemo } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { icons } from 'Helpers/Props';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport QualityProfile from 'typings/QualityProfile';\r\nimport UiSettings from 'typings/Settings/UiSettings';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport getRelativeDate from 'Utilities/Date/getRelativeDate';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport MovieIndexOverviewInfoRow from './MovieIndexOverviewInfoRow';\r\nimport styles from './MovieIndexOverviewInfo.css';\r\n\r\ninterface RowProps {\r\n name: string;\r\n showProp: string;\r\n valueProp: string;\r\n}\r\n\r\ninterface RowInfoProps {\r\n title: string;\r\n iconName: IconDefinition;\r\n label: string;\r\n}\r\n\r\ninterface MovieIndexOverviewInfoProps {\r\n height: number;\r\n showStudio: boolean;\r\n showMonitored: boolean;\r\n showQualityProfile: boolean;\r\n showAdded: boolean;\r\n showPath: boolean;\r\n showSizeOnDisk: boolean;\r\n monitored: boolean;\r\n studio?: string;\r\n qualityProfile?: QualityProfile;\r\n added?: string;\r\n path: string;\r\n sizeOnDisk?: number;\r\n sortKey: string;\r\n}\r\n\r\nconst infoRowHeight = parseInt(dimensions.movieIndexOverviewInfoRowHeight);\r\n\r\nconst rows = [\r\n {\r\n name: 'monitored',\r\n showProp: 'showMonitored',\r\n valueProp: 'monitored',\r\n },\r\n {\r\n name: 'studio',\r\n showProp: 'showStudio',\r\n valueProp: 'studio',\r\n },\r\n {\r\n name: 'qualityProfileId',\r\n showProp: 'showQualityProfile',\r\n valueProp: 'qualityProfile',\r\n },\r\n {\r\n name: 'added',\r\n showProp: 'showAdded',\r\n valueProp: 'added',\r\n },\r\n {\r\n name: 'path',\r\n showProp: 'showPath',\r\n valueProp: 'path',\r\n },\r\n {\r\n name: 'sizeOnDisk',\r\n showProp: 'showSizeOnDisk',\r\n valueProp: 'sizeOnDisk',\r\n },\r\n];\r\n\r\nfunction getInfoRowProps(\r\n row: RowProps,\r\n props: MovieIndexOverviewInfoProps,\r\n uiSettings: UiSettings\r\n): RowInfoProps | null {\r\n const { name } = row;\r\n\r\n if (name === 'monitored') {\r\n const monitoredText = props.monitored ? 'Monitored' : 'Unmonitored';\r\n\r\n return {\r\n title: monitoredText,\r\n iconName: props.monitored ? icons.MONITORED : icons.UNMONITORED,\r\n label: monitoredText,\r\n };\r\n }\r\n\r\n if (name === 'studio') {\r\n return {\r\n title: 'Studio',\r\n iconName: icons.STUDIO,\r\n label: props.studio ?? '',\r\n };\r\n }\r\n\r\n if (name === 'qualityProfileId' && !!props.qualityProfile?.name) {\r\n return {\r\n title: 'Quality Profile',\r\n iconName: icons.PROFILE,\r\n label: props.qualityProfile.name,\r\n };\r\n }\r\n\r\n if (name === 'added') {\r\n const added = props.added;\r\n const { showRelativeDates, shortDateFormat, longDateFormat, timeFormat } =\r\n uiSettings;\r\n\r\n return {\r\n title: `Added: ${formatDateTime(added, longDateFormat, timeFormat)}`,\r\n iconName: icons.ADD,\r\n label: getRelativeDate({\r\n date: added,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: true,\r\n }),\r\n };\r\n }\r\n\r\n if (name === 'path') {\r\n return {\r\n title: 'Path',\r\n iconName: icons.FOLDER,\r\n label: props.path,\r\n };\r\n }\r\n\r\n if (name === 'sizeOnDisk') {\r\n const { sizeOnDisk = 0 } = props;\r\n\r\n return {\r\n title: 'Size on Disk',\r\n iconName: icons.DRIVE,\r\n label: formatBytes(sizeOnDisk),\r\n };\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction MovieIndexOverviewInfo(props: MovieIndexOverviewInfoProps) {\r\n const height = props.height;\r\n\r\n const uiSettings = useSelector(createUISettingsSelector());\r\n\r\n let shownRows = 1;\r\n const maxRows = Math.floor(height / (infoRowHeight + 4));\r\n\r\n const rowInfo = useMemo(() => {\r\n return rows.map((row) => {\r\n const { name, showProp, valueProp } = row;\r\n\r\n const isVisible =\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore ts(7053)\r\n props[valueProp] != null && (props[showProp] || props.sortKey === name);\r\n\r\n return {\r\n ...row,\r\n isVisible,\r\n };\r\n });\r\n }, [props]);\r\n\r\n return (\r\n
\r\n {rowInfo.map((row) => {\r\n if (!row.isVisible) {\r\n return null;\r\n }\r\n\r\n if (shownRows >= maxRows) {\r\n return null;\r\n }\r\n\r\n shownRows++;\r\n\r\n const infoRowProps = getInfoRowProps(row, props, uiSettings);\r\n\r\n if (infoRowProps == null) {\r\n return null;\r\n }\r\n\r\n return ;\r\n })}\r\n
\r\n );\r\n}\r\n\r\nexport default MovieIndexOverviewInfo;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"infos\":\"MovieIndexOverviewInfo-infos-BRPyP\"};","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nconst selectOverviewOptions = createSelector(\r\n (state: AppState) => state.movieIndex.overviewOptions,\r\n (overviewOptions) => overviewOptions\r\n);\r\n\r\nexport default selectOverviewOptions;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"MovieIndexOverview-content-OYdmn\",\"poster\":\"MovieIndexOverview-poster-ci2iR\",\"editorSelect\":\"MovieIndexOverview-editorSelect-_1wpR\",\"posterContainer\":\"MovieIndexOverview-posterContainer-nNMlw\",\"link\":\"MovieIndexOverview-link-MS8Nr Link-link-RInnp\",\"deleted\":\"MovieIndexOverview-deleted-AW0Gy\",\"info\":\"MovieIndexOverview-info-oESxH\",\"titleRow\":\"MovieIndexOverview-titleRow-yfell\",\"title\":\"MovieIndexOverview-title-VqDgM MovieIndexOverview-link-MS8Nr Link-link-RInnp\",\"actions\":\"MovieIndexOverview-actions-I8heZ\",\"details\":\"MovieIndexOverview-details-TwnsQ\",\"overviewContainer\":\"MovieIndexOverview-overviewContainer-Fbsfd\",\"overview\":\"MovieIndexOverview-overview-CVIat MovieIndexOverview-link-MS8Nr Link-link-RInnp\",\"tags\":\"MovieIndexOverview-tags-Q7APX\",\"externalLinks\":\"MovieIndexOverview-externalLinks-rV68E\",\"queue\":\"MovieIndexOverview-queue-YIJvW\"};","import React, { useCallback, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport TextTruncate from 'react-text-truncate';\r\nimport { MOVIE_SEARCH, REFRESH_MOVIE } from 'Commands/commandNames';\r\nimport Icon from 'Components/Icon';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport TagListConnector from 'Components/TagListConnector';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons } from 'Helpers/Props';\r\nimport DeleteMovieModal from 'Movie/Delete/DeleteMovieModal';\r\nimport MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';\r\nimport EditMovieModal from 'Movie/Edit/EditMovieModal';\r\nimport MovieIndexProgressBar from 'Movie/Index/ProgressBar/MovieIndexProgressBar';\r\nimport MovieIndexPosterSelect from 'Movie/Index/Select/MovieIndexPosterSelect';\r\nimport { Statistics } from 'Movie/Movie';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport fonts from 'Styles/Variables/fonts';\r\nimport translate from 'Utilities/String/translate';\r\nimport createMovieIndexItemSelector from '../createMovieIndexItemSelector';\r\nimport MovieIndexOverviewInfo from './MovieIndexOverviewInfo';\r\nimport selectOverviewOptions from './selectOverviewOptions';\r\nimport styles from './MovieIndexOverview.css';\r\n\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(\r\n dimensions.movieIndexColumnPaddingSmallScreen\r\n);\r\nconst defaultFontSize = parseInt(fonts.defaultFontSize);\r\nconst lineHeight = parseFloat(fonts.lineHeight);\r\n\r\n// Hardcoded height beased on line-height of 32 + bottom margin of 10.\r\n// Less side-effecty than using react-measure.\r\nconst titleRowHeight = 42;\r\n\r\ninterface MovieIndexOverviewProps {\r\n movieId: number;\r\n sortKey: string;\r\n posterWidth: number;\r\n posterHeight: number;\r\n rowHeight: number;\r\n isSelectMode: boolean;\r\n isSmallScreen: boolean;\r\n}\r\n\r\nfunction MovieIndexOverview(props: MovieIndexOverviewProps) {\r\n const {\r\n movieId,\r\n sortKey,\r\n posterWidth,\r\n posterHeight,\r\n rowHeight,\r\n isSelectMode,\r\n isSmallScreen,\r\n } = props;\r\n\r\n const { movie, qualityProfile, isRefreshingMovie, isSearchingMovie } =\r\n useSelector(createMovieIndexItemSelector(props.movieId));\r\n\r\n const overviewOptions = useSelector(selectOverviewOptions);\r\n\r\n const {\r\n title,\r\n monitored,\r\n status,\r\n path,\r\n overview,\r\n statistics = {} as Statistics,\r\n images,\r\n tags,\r\n hasFile,\r\n isAvailable,\r\n tmdbId,\r\n imdbId,\r\n studio,\r\n added,\r\n youTubeTrailerId,\r\n } = movie;\r\n\r\n const { sizeOnDisk = 0 } = statistics;\r\n\r\n const dispatch = useDispatch();\r\n const [isEditMovieModalOpen, setIsEditMovieModalOpen] = useState(false);\r\n const [isDeleteMovieModalOpen, setIsDeleteMovieModalOpen] = useState(false);\r\n\r\n const onRefreshPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: REFRESH_MOVIE,\r\n movieIds: [movieId],\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n const onSearchPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: MOVIE_SEARCH,\r\n movieIds: [movieId],\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n const onEditMoviePress = useCallback(() => {\r\n setIsEditMovieModalOpen(true);\r\n }, [setIsEditMovieModalOpen]);\r\n\r\n const onEditMovieModalClose = useCallback(() => {\r\n setIsEditMovieModalOpen(false);\r\n }, [setIsEditMovieModalOpen]);\r\n\r\n const onDeleteMoviePress = useCallback(() => {\r\n setIsEditMovieModalOpen(false);\r\n setIsDeleteMovieModalOpen(true);\r\n }, [setIsDeleteMovieModalOpen]);\r\n\r\n const onDeleteMovieModalClose = useCallback(() => {\r\n setIsDeleteMovieModalOpen(false);\r\n }, [setIsDeleteMovieModalOpen]);\r\n\r\n const link = `/movie/${tmdbId}`;\r\n\r\n const elementStyle = {\r\n width: `${posterWidth}px`,\r\n height: `${posterHeight}px`,\r\n };\r\n\r\n const contentHeight = useMemo(() => {\r\n const padding = isSmallScreen ? columnPaddingSmallScreen : columnPadding;\r\n\r\n return rowHeight - padding;\r\n }, [rowHeight, isSmallScreen]);\r\n\r\n const overviewHeight = contentHeight - titleRowHeight;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {isSelectMode ? : null}\r\n\r\n {status === 'deleted' ? (\r\n
\r\n ) : null}\r\n\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n {title}\r\n \r\n\r\n
\r\n \r\n }\r\n title={translate('Links')}\r\n body={\r\n \r\n }\r\n />\r\n \r\n\r\n \r\n\r\n {overviewOptions.showSearchAction ? (\r\n \r\n ) : null}\r\n\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n {overviewOptions.showTags ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieIndexOverview;\r\n","import { throttle } from 'lodash';\r\nimport React, { RefObject, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { FixedSizeList as List, ListChildComponentProps } from 'react-window';\r\nimport useMeasure from 'Helpers/Hooks/useMeasure';\r\nimport Movie from 'Movie/Movie';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\nimport MovieIndexOverview from './MovieIndexOverview';\r\nimport selectOverviewOptions from './selectOverviewOptions';\r\n\r\n// Poster container dimensions\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(\r\n dimensions.movieIndexColumnPaddingSmallScreen\r\n);\r\nconst progressBarHeight = parseInt(dimensions.progressBarSmallHeight);\r\nconst detailedProgressBarHeight = parseInt(dimensions.progressBarMediumHeight);\r\nconst bodyPadding = parseInt(dimensions.pageContentBodyPadding);\r\nconst bodyPaddingSmallScreen = parseInt(\r\n dimensions.pageContentBodyPaddingSmallScreen\r\n);\r\n\r\ninterface RowItemData {\r\n items: Movie[];\r\n sortKey: string;\r\n posterWidth: number;\r\n posterHeight: number;\r\n rowHeight: number;\r\n isSelectMode: boolean;\r\n isSmallScreen: boolean;\r\n}\r\n\r\ninterface MovieIndexOverviewsProps {\r\n items: Movie[];\r\n sortKey: string;\r\n sortDirection?: string;\r\n jumpToCharacter?: string;\r\n scrollTop?: number;\r\n scrollerRef: RefObject;\r\n isSelectMode: boolean;\r\n isSmallScreen: boolean;\r\n}\r\n\r\nfunction Row({ index, style, data }: ListChildComponentProps) {\r\n const { items, ...otherData } = data;\r\n\r\n if (index >= items.length) {\r\n return null;\r\n }\r\n\r\n const movie = items[index];\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nfunction getWindowScrollTopPosition() {\r\n return document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n}\r\n\r\nfunction MovieIndexOverviews(props: MovieIndexOverviewsProps) {\r\n const {\r\n items,\r\n sortKey,\r\n jumpToCharacter,\r\n scrollerRef,\r\n isSelectMode,\r\n isSmallScreen,\r\n } = props;\r\n\r\n const { size: posterSize, detailedProgressBar } = useSelector(\r\n selectOverviewOptions\r\n );\r\n const listRef = useRef(null);\r\n const [measureRef, bounds] = useMeasure();\r\n const [size, setSize] = useState({ width: 0, height: 0 });\r\n\r\n const posterWidth = useMemo(() => {\r\n const maxiumPosterWidth = isSmallScreen ? 152 : 162;\r\n\r\n if (posterSize === 'large') {\r\n return maxiumPosterWidth;\r\n }\r\n\r\n if (posterSize === 'medium') {\r\n return Math.floor(maxiumPosterWidth * 0.75);\r\n }\r\n\r\n return Math.floor(maxiumPosterWidth * 0.5);\r\n }, [posterSize, isSmallScreen]);\r\n\r\n const posterHeight = useMemo(() => {\r\n return Math.ceil((250 / 170) * posterWidth);\r\n }, [posterWidth]);\r\n\r\n const rowHeight = useMemo(() => {\r\n const heights = [\r\n posterHeight,\r\n detailedProgressBar ? detailedProgressBarHeight : progressBarHeight,\r\n isSmallScreen ? columnPaddingSmallScreen : columnPadding,\r\n ];\r\n\r\n return heights.reduce((acc, height) => acc + height, 0);\r\n }, [detailedProgressBar, posterHeight, isSmallScreen]);\r\n\r\n useEffect(() => {\r\n const current = scrollerRef.current as HTMLElement;\r\n\r\n if (isSmallScreen) {\r\n setSize({\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (current) {\r\n const width = current.clientWidth;\r\n const padding =\r\n (isSmallScreen ? bodyPaddingSmallScreen : bodyPadding) - 5;\r\n\r\n setSize({\r\n width: width - padding * 2,\r\n height: window.innerHeight,\r\n });\r\n }\r\n }, [isSmallScreen, scrollerRef, bounds]);\r\n\r\n useEffect(() => {\r\n const currentScrollerRef = scrollerRef.current as HTMLElement;\r\n const currentScrollListener = isSmallScreen ? window : currentScrollerRef;\r\n\r\n const handleScroll = throttle(() => {\r\n const { offsetTop = 0 } = currentScrollerRef;\r\n const scrollTop =\r\n (isSmallScreen\r\n ? getWindowScrollTopPosition()\r\n : currentScrollerRef.scrollTop) - offsetTop;\r\n\r\n listRef.current?.scrollTo(scrollTop);\r\n }, 10);\r\n\r\n currentScrollListener.addEventListener('scroll', handleScroll);\r\n\r\n return () => {\r\n handleScroll.cancel();\r\n\r\n if (currentScrollListener) {\r\n currentScrollListener.removeEventListener('scroll', handleScroll);\r\n }\r\n };\r\n }, [isSmallScreen, listRef, scrollerRef]);\r\n\r\n useEffect(() => {\r\n if (jumpToCharacter) {\r\n const index = getIndexOfFirstCharacter(items, jumpToCharacter);\r\n\r\n if (index != null) {\r\n let scrollTop = index * rowHeight;\r\n\r\n // If the offset is zero go to the top, otherwise offset\r\n // by the approximate size of the header + padding (37 + 20).\r\n if (scrollTop > 0) {\r\n const offset = 57;\r\n\r\n scrollTop += offset;\r\n }\r\n\r\n listRef.current?.scrollTo(scrollTop);\r\n scrollerRef.current?.scrollTo(0, scrollTop);\r\n }\r\n }\r\n }, [jumpToCharacter, rowHeight, items, scrollerRef, listRef]);\r\n\r\n return (\r\n
\r\n \r\n ref={listRef}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'none',\r\n }}\r\n width={size.width}\r\n height={size.height}\r\n itemCount={items.length}\r\n itemSize={rowHeight}\r\n itemData={{\r\n items,\r\n sortKey,\r\n posterWidth,\r\n posterHeight,\r\n rowHeight,\r\n isSelectMode,\r\n isSmallScreen,\r\n }}\r\n >\r\n {Row}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieIndexOverviews;\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport { setMovieOverviewOption } from 'Store/Actions/movieIndexActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport selectOverviewOptions from '../selectOverviewOptions';\r\n\r\nconst posterSizeOptions = [\r\n {\r\n key: 'small',\r\n get value() {\r\n return translate('Small');\r\n },\r\n },\r\n {\r\n key: 'medium',\r\n get value() {\r\n return translate('Medium');\r\n },\r\n },\r\n {\r\n key: 'large',\r\n get value() {\r\n return translate('Large');\r\n },\r\n },\r\n];\r\n\r\ninterface MovieIndexOverviewOptionsModalContentProps {\r\n onModalClose(...args: unknown[]): void;\r\n}\r\n\r\nfunction MovieIndexOverviewOptionsModalContent(\r\n props: MovieIndexOverviewOptionsModalContentProps\r\n) {\r\n const { onModalClose } = props;\r\n\r\n const {\r\n detailedProgressBar,\r\n size,\r\n showMonitored,\r\n showStudio,\r\n showQualityProfile,\r\n showAdded,\r\n showPath,\r\n showSizeOnDisk,\r\n showTags,\r\n showSearchAction,\r\n } = useSelector(selectOverviewOptions);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const onOverviewOptionChange = useCallback(\r\n ({ name, value }: { name: string; value: unknown }) => {\r\n dispatch(setMovieOverviewOption({ [name]: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n {translate('OverviewOptions')}\r\n\r\n \r\n
\r\n \r\n {translate('PosterSize')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('DetailedProgressBar')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowMonitored')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowStudio')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowQualityProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowDateAdded')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowPath')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowSizeOnDisk')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowTags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowSearch')}\r\n\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieIndexOverviewOptionsModalContent;\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport MovieIndexOverviewOptionsModalContent from './MovieIndexOverviewOptionsModalContent';\r\n\r\ninterface MovieIndexOverviewOptionsModalProps {\r\n isOpen: boolean;\r\n onModalClose(...args: unknown[]): void;\r\n}\r\n\r\nfunction MovieIndexOverviewOptionsModal({\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n}: MovieIndexOverviewOptionsModalProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexOverviewOptionsModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"info\":\"MovieIndexPosterInfo-info-iEzEw\",\"title\":\"MovieIndexPosterInfo-title-ZAj5E MovieIndexPosterInfo-info-iEzEw\",\"tags\":\"MovieIndexPosterInfo-tags-QOd0J MovieIndexPoster-tags-WpPoz\",\"tagsList\":\"MovieIndexPosterInfo-tagsList-x68uo MovieIndexPoster-tagsList-iPYsl\"};","import React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport ImdbRating from 'Components/ImdbRating';\r\nimport RottenTomatoRating from 'Components/RottenTomatoRating';\r\nimport TagListConnector from 'Components/TagListConnector';\r\nimport TmdbRating from 'Components/TmdbRating';\r\nimport TraktRating from 'Components/TraktRating';\r\nimport { icons } from 'Helpers/Props';\r\nimport Language from 'Language/Language';\r\nimport { Ratings } from 'Movie/Movie';\r\nimport QualityProfile from 'typings/QualityProfile';\r\nimport formatDate from 'Utilities/Date/formatDate';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport getRelativeDate from 'Utilities/Date/getRelativeDate';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MovieIndexPosterInfo.css';\r\n\r\ninterface MovieIndexPosterInfoProps {\r\n studio?: string;\r\n showQualityProfile: boolean;\r\n qualityProfile?: QualityProfile;\r\n added?: string;\r\n year: number;\r\n inCinemas?: string;\r\n digitalRelease?: string;\r\n physicalRelease?: string;\r\n releaseDate?: string;\r\n path: string;\r\n ratings: Ratings;\r\n certification: string;\r\n originalTitle: string;\r\n originalLanguage: Language;\r\n sizeOnDisk?: number;\r\n tags: number[];\r\n sortKey: string;\r\n showRelativeDates: boolean;\r\n showCinemaRelease: boolean;\r\n showDigitalRelease: boolean;\r\n showPhysicalRelease: boolean;\r\n showReleaseDate: boolean;\r\n shortDateFormat: string;\r\n longDateFormat: string;\r\n timeFormat: string;\r\n showTmdbRating: boolean;\r\n showImdbRating: boolean;\r\n showRottenTomatoesRating: boolean;\r\n showTraktRating: boolean;\r\n showTags: boolean;\r\n}\r\n\r\nfunction MovieIndexPosterInfo(props: MovieIndexPosterInfoProps) {\r\n const {\r\n studio,\r\n showQualityProfile,\r\n qualityProfile,\r\n added,\r\n year,\r\n inCinemas,\r\n digitalRelease,\r\n physicalRelease,\r\n releaseDate,\r\n path,\r\n ratings,\r\n certification,\r\n originalTitle,\r\n originalLanguage,\r\n sizeOnDisk = 0,\r\n tags = [],\r\n sortKey,\r\n showRelativeDates,\r\n showCinemaRelease,\r\n showDigitalRelease,\r\n showPhysicalRelease,\r\n showReleaseDate,\r\n shortDateFormat,\r\n longDateFormat,\r\n timeFormat,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating,\r\n showTags,\r\n } = props;\r\n\r\n if (sortKey === 'studio' && studio) {\r\n return (\r\n
\r\n {studio}\r\n
\r\n );\r\n }\r\n\r\n if (\r\n sortKey === 'qualityProfileId' &&\r\n !showQualityProfile &&\r\n !!qualityProfile?.name\r\n ) {\r\n return (\r\n
\r\n {qualityProfile.name}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'added' && added) {\r\n const addedDate = getRelativeDate({\r\n date: added,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n });\r\n\r\n return (\r\n \r\n {translate('Added')}: {addedDate}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'year' && year) {\r\n return (\r\n
\r\n {year}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'inCinemas' && inCinemas && !showCinemaRelease) {\r\n const inCinemasDate = getRelativeDate({\r\n date: inCinemas,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n });\r\n\r\n return (\r\n \r\n {inCinemasDate}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'digitalRelease' && digitalRelease && !showDigitalRelease) {\r\n const digitalReleaseDate = getRelativeDate({\r\n date: digitalRelease,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n });\r\n\r\n return (\r\n \r\n {digitalReleaseDate}\r\n
\r\n );\r\n }\r\n\r\n if (\r\n sortKey === 'physicalRelease' &&\r\n physicalRelease &&\r\n !showPhysicalRelease\r\n ) {\r\n const physicalReleaseDate = getRelativeDate({\r\n date: physicalRelease,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n });\r\n\r\n return (\r\n \r\n {physicalReleaseDate}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'releaseDate' && releaseDate && !showReleaseDate) {\r\n return (\r\n \r\n {' '}\r\n {getRelativeDate({\r\n date: releaseDate,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n })}\r\n
\r\n );\r\n }\r\n\r\n if (!showTmdbRating && sortKey === 'tmdbRating' && !!ratings.tmdb) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (!showImdbRating && sortKey === 'imdbRating' && !!ratings.imdb) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (\r\n !showRottenTomatoesRating &&\r\n sortKey === 'rottenTomatoesRating' &&\r\n !!ratings.rottenTomatoes\r\n ) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (!showTraktRating && sortKey === 'traktRating' && !!ratings.trakt) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (!showTags && sortKey === 'tags' && tags.length) {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'path') {\r\n return (\r\n
\r\n {path}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'sizeOnDisk') {\r\n return (\r\n
\r\n {formatBytes(sizeOnDisk)}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'certification') {\r\n return
{certification}
;\r\n }\r\n\r\n if (sortKey === 'originalTitle' && originalTitle) {\r\n return (\r\n
\r\n {originalTitle}\r\n
\r\n );\r\n }\r\n\r\n if (sortKey === 'originalLanguage' && originalLanguage) {\r\n return (\r\n
\r\n {originalLanguage.name}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport default MovieIndexPosterInfo;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nconst selectPosterOptions = createSelector(\r\n (state: AppState) => state.movieIndex.posterOptions,\r\n (posterOptions) => posterOptions\r\n);\r\n\r\nexport default selectPosterOptions;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"MovieIndexPoster-content-EcQfG\",\"controls\":\"MovieIndexPoster-controls-wC0zX\",\"posterContainer\":\"MovieIndexPoster-posterContainer-RqOOf\",\"poster\":\"MovieIndexPoster-poster-yWZHK\",\"overlayTitle\":\"MovieIndexPoster-overlayTitle-rchvK\",\"title\":\"MovieIndexPoster-title-jXLGH\",\"action\":\"MovieIndexPoster-action-wX4EJ IconButton-button-t4C5V Link-link-RInnp\",\"container\":\"MovieIndexPoster-container-W4svh\",\"tags\":\"MovieIndexPoster-tags-WpPoz\",\"tagsList\":\"MovieIndexPoster-tagsList-iPYsl\",\"deleted\":\"MovieIndexPoster-deleted-fFmsq\",\"editorSelect\":\"MovieIndexPoster-editorSelect-F8pBj\",\"externalLinks\":\"MovieIndexPoster-externalLinks-u3B0H\",\"link\":\"MovieIndexPoster-link-tskJp Link-link-RInnp\",\"nextAiring\":\"MovieIndexPoster-nextAiring-MmFQw\"};","import React, { useCallback, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { MOVIE_SEARCH, REFRESH_MOVIE } from 'Commands/commandNames';\r\nimport Icon from 'Components/Icon';\r\nimport ImdbRating from 'Components/ImdbRating';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport RottenTomatoRating from 'Components/RottenTomatoRating';\r\nimport TagListConnector from 'Components/TagListConnector';\r\nimport TmdbRating from 'Components/TmdbRating';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport TraktRating from 'Components/TraktRating';\r\nimport { icons } from 'Helpers/Props';\r\nimport DeleteMovieModal from 'Movie/Delete/DeleteMovieModal';\r\nimport MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';\r\nimport EditMovieModal from 'Movie/Edit/EditMovieModal';\r\nimport MovieIndexProgressBar from 'Movie/Index/ProgressBar/MovieIndexProgressBar';\r\nimport MovieIndexPosterSelect from 'Movie/Index/Select/MovieIndexPosterSelect';\r\nimport { Statistics } from 'Movie/Movie';\r\nimport MoviePoster from 'Movie/MoviePoster';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport formatDate from 'Utilities/Date/formatDate';\r\nimport getRelativeDate from 'Utilities/Date/getRelativeDate';\r\nimport translate from 'Utilities/String/translate';\r\nimport createMovieIndexItemSelector from '../createMovieIndexItemSelector';\r\nimport MovieIndexPosterInfo from './MovieIndexPosterInfo';\r\nimport selectPosterOptions from './selectPosterOptions';\r\nimport styles from './MovieIndexPoster.css';\r\n\r\ninterface MovieIndexPosterProps {\r\n movieId: number;\r\n sortKey: string;\r\n isSelectMode: boolean;\r\n posterWidth: number;\r\n posterHeight: number;\r\n}\r\n\r\nfunction MovieIndexPoster(props: MovieIndexPosterProps) {\r\n const { movieId, sortKey, isSelectMode, posterWidth, posterHeight } = props;\r\n\r\n const { movie, qualityProfile, isRefreshingMovie, isSearchingMovie } =\r\n useSelector(createMovieIndexItemSelector(props.movieId));\r\n\r\n const {\r\n detailedProgressBar,\r\n showTitle,\r\n showMonitored,\r\n showQualityProfile,\r\n showCinemaRelease,\r\n showDigitalRelease,\r\n showPhysicalRelease,\r\n showReleaseDate,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating,\r\n showTags,\r\n showSearchAction,\r\n } = useSelector(selectPosterOptions);\r\n\r\n const { showRelativeDates, shortDateFormat, longDateFormat, timeFormat } =\r\n useSelector(createUISettingsSelector());\r\n\r\n const {\r\n title,\r\n monitored,\r\n status,\r\n images,\r\n tmdbId,\r\n imdbId,\r\n youTubeTrailerId,\r\n hasFile,\r\n isAvailable,\r\n studio,\r\n added,\r\n year,\r\n inCinemas,\r\n physicalRelease,\r\n digitalRelease,\r\n releaseDate,\r\n path,\r\n movieFile,\r\n ratings,\r\n statistics = {} as Statistics,\r\n certification,\r\n originalTitle,\r\n originalLanguage,\r\n tags = [],\r\n } = movie;\r\n\r\n const { sizeOnDisk = 0 } = statistics;\r\n\r\n const dispatch = useDispatch();\r\n const [hasPosterError, setHasPosterError] = useState(false);\r\n const [isEditMovieModalOpen, setIsEditMovieModalOpen] = useState(false);\r\n const [isDeleteMovieModalOpen, setIsDeleteMovieModalOpen] = useState(false);\r\n\r\n const onRefreshPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: REFRESH_MOVIE,\r\n movieIds: [movieId],\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n const onSearchPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: MOVIE_SEARCH,\r\n movieIds: [movieId],\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n const onPosterLoadError = useCallback(() => {\r\n setHasPosterError(true);\r\n }, [setHasPosterError]);\r\n\r\n const onPosterLoad = useCallback(() => {\r\n setHasPosterError(false);\r\n }, [setHasPosterError]);\r\n\r\n const onEditMoviePress = useCallback(() => {\r\n setIsEditMovieModalOpen(true);\r\n }, [setIsEditMovieModalOpen]);\r\n\r\n const onEditMovieModalClose = useCallback(() => {\r\n setIsEditMovieModalOpen(false);\r\n }, [setIsEditMovieModalOpen]);\r\n\r\n const onDeleteMoviePress = useCallback(() => {\r\n setIsEditMovieModalOpen(false);\r\n setIsDeleteMovieModalOpen(true);\r\n }, [setIsDeleteMovieModalOpen]);\r\n\r\n const onDeleteMovieModalClose = useCallback(() => {\r\n setIsDeleteMovieModalOpen(false);\r\n }, [setIsDeleteMovieModalOpen]);\r\n\r\n const link = `/movie/${tmdbId}`;\r\n\r\n const elementStyle = {\r\n width: `${posterWidth}px`,\r\n height: `${posterHeight}px`,\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {isSelectMode ? : null}\r\n\r\n \r\n\r\n {status === 'deleted' ? (\r\n
\r\n ) : null}\r\n\r\n \r\n \r\n\r\n {hasPosterError ? (\r\n
{title}
\r\n ) : null}\r\n \r\n
\r\n\r\n \r\n\r\n {showTitle ? (\r\n
\r\n {title}\r\n
\r\n ) : null}\r\n\r\n {showMonitored ? (\r\n
\r\n {monitored ? translate('Monitored') : translate('Unmonitored')}\r\n
\r\n ) : null}\r\n\r\n {showQualityProfile && !!qualityProfile?.name ? (\r\n
\r\n {qualityProfile.name}\r\n
\r\n ) : null}\r\n\r\n {showCinemaRelease && inCinemas ? (\r\n \r\n {' '}\r\n {getRelativeDate({\r\n date: inCinemas,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n })}\r\n
\r\n ) : null}\r\n\r\n {showDigitalRelease && digitalRelease ? (\r\n \r\n {' '}\r\n {getRelativeDate({\r\n date: digitalRelease,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n })}\r\n
\r\n ) : null}\r\n\r\n {showPhysicalRelease && physicalRelease ? (\r\n \r\n {' '}\r\n {getRelativeDate({\r\n date: physicalRelease,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n })}\r\n \r\n ) : null}\r\n\r\n {showReleaseDate && releaseDate ? (\r\n \r\n {' '}\r\n {getRelativeDate({\r\n date: releaseDate,\r\n shortDateFormat,\r\n showRelativeDates,\r\n timeFormat,\r\n timeForToday: false,\r\n })}\r\n \r\n ) : null}\r\n\r\n {showTmdbRating && !!ratings.tmdb ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n\r\n {showImdbRating && !!ratings.imdb ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n\r\n {showRottenTomatoesRating && !!ratings.rottenTomatoes ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n\r\n {showTraktRating && !!ratings.trakt ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n\r\n {showTags && tags.length ? (\r\n
\r\n
\r\n \r\n
\r\n
\r\n ) : null}\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexPoster;\r\n","import { throttle } from 'lodash';\r\nimport React, { RefObject, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { FixedSizeGrid as Grid, GridChildComponentProps } from 'react-window';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport useMeasure from 'Helpers/Hooks/useMeasure';\r\nimport { SortDirection } from 'Helpers/Props/sortDirections';\r\nimport MovieIndexPoster from 'Movie/Index/Posters/MovieIndexPoster';\r\nimport Movie from 'Movie/Movie';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\n\r\nconst bodyPadding = parseInt(dimensions.pageContentBodyPadding);\r\nconst bodyPaddingSmallScreen = parseInt(\r\n dimensions.pageContentBodyPaddingSmallScreen\r\n);\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(\r\n dimensions.movieIndexColumnPaddingSmallScreen\r\n);\r\nconst progressBarHeight = parseInt(dimensions.progressBarSmallHeight);\r\nconst detailedProgressBarHeight = parseInt(dimensions.progressBarMediumHeight);\r\n\r\nconst ADDITIONAL_COLUMN_COUNT: Record = {\r\n small: 3,\r\n medium: 2,\r\n large: 1,\r\n};\r\n\r\ninterface CellItemData {\r\n layout: {\r\n columnCount: number;\r\n padding: number;\r\n posterWidth: number;\r\n posterHeight: number;\r\n };\r\n items: Movie[];\r\n sortKey: string;\r\n isSelectMode: boolean;\r\n}\r\n\r\ninterface MovieIndexPostersProps {\r\n items: Movie[];\r\n sortKey: string;\r\n sortDirection?: SortDirection;\r\n jumpToCharacter?: string;\r\n scrollTop?: number;\r\n scrollerRef: RefObject;\r\n isSelectMode: boolean;\r\n isSmallScreen: boolean;\r\n}\r\n\r\nconst movieIndexSelector = createSelector(\r\n (state: AppState) => state.movieIndex.posterOptions,\r\n (posterOptions) => {\r\n return {\r\n posterOptions,\r\n };\r\n }\r\n);\r\n\r\nfunction Cell({\r\n columnIndex,\r\n rowIndex,\r\n style,\r\n data,\r\n}: GridChildComponentProps) {\r\n const { layout, items, sortKey, isSelectMode } = data;\r\n\r\n const { columnCount, padding, posterWidth, posterHeight } = layout;\r\n\r\n const index = rowIndex * columnCount + columnIndex;\r\n\r\n if (index >= items.length) {\r\n return null;\r\n }\r\n\r\n const movie = items[index];\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction getWindowScrollTopPosition() {\r\n return document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n}\r\n\r\nexport default function MovieIndexPosters(props: MovieIndexPostersProps) {\r\n const {\r\n scrollerRef,\r\n items,\r\n sortKey,\r\n jumpToCharacter,\r\n isSelectMode,\r\n isSmallScreen,\r\n } = props;\r\n\r\n const { posterOptions } = useSelector(movieIndexSelector);\r\n const ref = useRef(null);\r\n const [measureRef, bounds] = useMeasure();\r\n const [size, setSize] = useState({ width: 0, height: 0 });\r\n\r\n const columnWidth = useMemo(() => {\r\n const { width } = size;\r\n const maximumColumnWidth = isSmallScreen ? 172 : 182;\r\n const columns = Math.floor(width / maximumColumnWidth);\r\n const remainder = width % maximumColumnWidth;\r\n return remainder === 0\r\n ? maximumColumnWidth\r\n : Math.floor(\r\n width / (columns + ADDITIONAL_COLUMN_COUNT[posterOptions.size])\r\n );\r\n }, [isSmallScreen, posterOptions, size]);\r\n\r\n const columnCount = useMemo(\r\n () => Math.max(Math.floor(size.width / columnWidth), 1),\r\n [size, columnWidth]\r\n );\r\n const padding = props.isSmallScreen\r\n ? columnPaddingSmallScreen\r\n : columnPadding;\r\n const posterWidth = columnWidth - padding * 2;\r\n const posterHeight = Math.ceil((250 / 170) * posterWidth);\r\n\r\n const rowHeight = useMemo(() => {\r\n const {\r\n detailedProgressBar,\r\n showTitle,\r\n showMonitored,\r\n showQualityProfile,\r\n showCinemaRelease,\r\n showDigitalRelease,\r\n showPhysicalRelease,\r\n showReleaseDate,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating,\r\n showTags,\r\n } = posterOptions;\r\n\r\n const heights = [\r\n posterHeight,\r\n detailedProgressBar ? detailedProgressBarHeight : progressBarHeight,\r\n isSmallScreen ? columnPaddingSmallScreen : columnPadding,\r\n ];\r\n\r\n if (showTitle) {\r\n heights.push(19);\r\n }\r\n\r\n if (showMonitored) {\r\n heights.push(19);\r\n }\r\n\r\n if (showQualityProfile) {\r\n heights.push(19);\r\n }\r\n\r\n if (showCinemaRelease) {\r\n heights.push(19);\r\n }\r\n\r\n if (showDigitalRelease) {\r\n heights.push(19);\r\n }\r\n\r\n if (showPhysicalRelease) {\r\n heights.push(19);\r\n }\r\n\r\n if (showReleaseDate) {\r\n heights.push(19);\r\n }\r\n\r\n if (showTmdbRating) {\r\n heights.push(19);\r\n }\r\n\r\n if (showImdbRating) {\r\n heights.push(19);\r\n }\r\n\r\n if (showRottenTomatoesRating) {\r\n heights.push(19);\r\n }\r\n\r\n if (showTraktRating) {\r\n heights.push(19);\r\n }\r\n\r\n if (showTags) {\r\n heights.push(21);\r\n }\r\n\r\n switch (sortKey) {\r\n case 'studio':\r\n case 'added':\r\n case 'year':\r\n case 'path':\r\n case 'sizeOnDisk':\r\n case 'originalTitle':\r\n case 'originalLanguage':\r\n heights.push(19);\r\n break;\r\n case 'qualityProfileId':\r\n if (!showQualityProfile) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'inCinemas':\r\n if (!showCinemaRelease) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'digitalRelease':\r\n if (!showDigitalRelease) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'physicalRelease':\r\n if (!showPhysicalRelease) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'releaseDate':\r\n if (!showReleaseDate) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'tmdbRating':\r\n if (!showTmdbRating) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'imdbRating':\r\n if (!showImdbRating) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'rottenTomatoesRating':\r\n if (!showRottenTomatoesRating) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'traktRating':\r\n if (!showTraktRating) {\r\n heights.push(19);\r\n }\r\n break;\r\n case 'tags':\r\n if (!showTags) {\r\n heights.push(21);\r\n }\r\n break;\r\n default:\r\n // No need to add a height of 0\r\n }\r\n\r\n return heights.reduce((acc, height) => acc + height, 0);\r\n }, [isSmallScreen, posterOptions, sortKey, posterHeight]);\r\n\r\n useEffect(() => {\r\n const current = scrollerRef.current;\r\n\r\n if (isSmallScreen) {\r\n const padding = bodyPaddingSmallScreen - 5;\r\n const width = window.innerWidth - padding * 2;\r\n const height = window.innerHeight;\r\n\r\n if (width !== size.width || height !== size.height) {\r\n setSize({\r\n width,\r\n height,\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (current) {\r\n const width = current.clientWidth;\r\n const padding = bodyPadding - 5;\r\n const finalWidth = width - padding * 2;\r\n\r\n if (Math.abs(size.width - finalWidth) < 20 || size.width === finalWidth) {\r\n return;\r\n }\r\n\r\n setSize({\r\n width: finalWidth,\r\n height: window.innerHeight,\r\n });\r\n }\r\n }, [isSmallScreen, size, scrollerRef, bounds]);\r\n\r\n useEffect(() => {\r\n const currentScrollerRef = scrollerRef.current as HTMLElement;\r\n const currentScrollListener = isSmallScreen ? window : currentScrollerRef;\r\n\r\n const handleScroll = throttle(() => {\r\n const { offsetTop = 0 } = currentScrollerRef;\r\n const scrollTop =\r\n (isSmallScreen\r\n ? getWindowScrollTopPosition()\r\n : currentScrollerRef.scrollTop) - offsetTop;\r\n\r\n ref.current?.scrollTo({ scrollLeft: 0, scrollTop });\r\n }, 10);\r\n\r\n currentScrollListener.addEventListener('scroll', handleScroll);\r\n\r\n return () => {\r\n handleScroll.cancel();\r\n\r\n if (currentScrollListener) {\r\n currentScrollListener.removeEventListener('scroll', handleScroll);\r\n }\r\n };\r\n }, [isSmallScreen, ref, scrollerRef]);\r\n\r\n useEffect(() => {\r\n if (jumpToCharacter) {\r\n const index = getIndexOfFirstCharacter(items, jumpToCharacter);\r\n\r\n if (index != null) {\r\n const rowIndex = Math.floor(index / columnCount);\r\n\r\n const scrollTop = rowIndex * rowHeight + padding;\r\n\r\n ref.current?.scrollTo({ scrollLeft: 0, scrollTop });\r\n scrollerRef.current?.scrollTo(0, scrollTop);\r\n }\r\n }\r\n }, [\r\n jumpToCharacter,\r\n rowHeight,\r\n columnCount,\r\n padding,\r\n items,\r\n scrollerRef,\r\n ref,\r\n ]);\r\n\r\n return (\r\n
\r\n \r\n ref={ref}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'none',\r\n }}\r\n width={size.width}\r\n height={size.height}\r\n columnCount={columnCount}\r\n columnWidth={columnWidth}\r\n rowCount={Math.ceil(items.length / columnCount)}\r\n rowHeight={rowHeight}\r\n itemData={{\r\n layout: {\r\n columnCount,\r\n padding,\r\n posterWidth,\r\n posterHeight,\r\n },\r\n items,\r\n sortKey,\r\n isSelectMode,\r\n }}\r\n >\r\n {Cell}\r\n \r\n
\r\n );\r\n}\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, sizes } from 'Helpers/Props';\r\nimport { setMoviePosterOption } from 'Store/Actions/movieIndexActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport selectPosterOptions from '../selectPosterOptions';\r\n\r\nconst posterSizeOptions = [\r\n {\r\n key: 'small',\r\n get value() {\r\n return translate('Small');\r\n },\r\n },\r\n {\r\n key: 'medium',\r\n get value() {\r\n return translate('Medium');\r\n },\r\n },\r\n {\r\n key: 'large',\r\n get value() {\r\n return translate('Large');\r\n },\r\n },\r\n];\r\n\r\ninterface MovieIndexPosterOptionsModalContentProps {\r\n onModalClose(...args: unknown[]): unknown;\r\n}\r\n\r\nfunction MovieIndexPosterOptionsModalContent(\r\n props: MovieIndexPosterOptionsModalContentProps\r\n) {\r\n const { onModalClose } = props;\r\n\r\n const posterOptions = useSelector(selectPosterOptions);\r\n\r\n const {\r\n detailedProgressBar,\r\n size,\r\n showTitle,\r\n showMonitored,\r\n showQualityProfile,\r\n showCinemaRelease,\r\n showDigitalRelease,\r\n showPhysicalRelease,\r\n showReleaseDate,\r\n showTmdbRating,\r\n showImdbRating,\r\n showRottenTomatoesRating,\r\n showTraktRating,\r\n showTags,\r\n showSearchAction,\r\n } = posterOptions;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const onPosterOptionChange = useCallback(\r\n ({ name, value }: { name: string; value: unknown }) => {\r\n dispatch(setMoviePosterOption({ [name]: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n {translate('PosterOptions')}\r\n\r\n \r\n
\r\n \r\n {translate('PosterSize')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('DetailedProgressBar')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowTitle')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowMonitored')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowQualityProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowCinemaRelease')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowDigitalRelease')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowPhysicalRelease')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowReleaseDate')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowTmdbRating')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowImdbRating')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowRottenTomatoesRating')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowTraktRating')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowTags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ShowSearch')}\r\n\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieIndexPosterOptionsModalContent;\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport MovieIndexPosterOptionsModalContent from './MovieIndexPosterOptionsModalContent';\r\n\r\ninterface MovieIndexPosterOptionsModalProps {\r\n isOpen: boolean;\r\n onModalClose(...args: unknown[]): unknown;\r\n}\r\n\r\nfunction MovieIndexPosterOptionsModal({\r\n isOpen,\r\n onModalClose,\r\n}: MovieIndexPosterOptionsModalProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexPosterOptionsModal;\r\n","import React, { useCallback } from 'react';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface MovieIndexSelectAllButtonProps {\r\n label: string;\r\n isSelectMode: boolean;\r\n overflowComponent: React.FunctionComponent;\r\n}\r\n\r\nfunction MovieIndexSelectAllButton(props: MovieIndexSelectAllButtonProps) {\r\n const { isSelectMode } = props;\r\n const [selectState, selectDispatch] = useSelect();\r\n const { allSelected, allUnselected } = selectState;\r\n\r\n let icon = icons.SQUARE_MINUS;\r\n\r\n if (allSelected) {\r\n icon = icons.CHECK_SQUARE;\r\n } else if (allUnselected) {\r\n icon = icons.SQUARE;\r\n }\r\n\r\n const onPress = useCallback(() => {\r\n selectDispatch({\r\n type: allSelected ? 'unselectAll' : 'selectAll',\r\n });\r\n }, [allSelected, selectDispatch]);\r\n\r\n return isSelectMode ? (\r\n \r\n ) : null;\r\n}\r\n\r\nexport default MovieIndexSelectAllButton;\r\n","import React, { useCallback } from 'react';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport PageToolbarOverflowMenuItem from 'Components/Page/Toolbar/PageToolbarOverflowMenuItem';\r\nimport { icons } from 'Helpers/Props';\r\n\r\ninterface MovieIndexSelectAllMenuItemProps {\r\n label: string;\r\n isSelectMode: boolean;\r\n}\r\n\r\nfunction MovieIndexSelectAllMenuItem(props: MovieIndexSelectAllMenuItemProps) {\r\n const { isSelectMode } = props;\r\n const [selectState, selectDispatch] = useSelect();\r\n const { allSelected, allUnselected } = selectState;\r\n\r\n let iconName = icons.SQUARE_MINUS;\r\n\r\n if (allSelected) {\r\n iconName = icons.CHECK_SQUARE;\r\n } else if (allUnselected) {\r\n iconName = icons.SQUARE;\r\n }\r\n\r\n const onPressWrapper = useCallback(() => {\r\n selectDispatch({\r\n type: allSelected ? 'unselectAll' : 'selectAll',\r\n });\r\n }, [allSelected, selectDispatch]);\r\n\r\n return isSelectMode ? (\r\n \r\n ) : null;\r\n}\r\n\r\nexport default MovieIndexSelectAllMenuItem;\r\n","import { orderBy } from 'lodash';\r\nimport React, { useCallback, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport Movie from 'Movie/Movie';\r\nimport { bulkDeleteMovie, setDeleteOption } from 'Store/Actions/movieActions';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './DeleteMovieModalContent.css';\r\n\r\ninterface DeleteMovieModalContentProps {\r\n movieIds: number[];\r\n onModalClose(): void;\r\n}\r\n\r\nconst selectDeleteOptions = createSelector(\r\n (state: AppState) => state.movies.deleteOptions,\r\n (deleteOptions) => deleteOptions\r\n);\r\n\r\nfunction DeleteMovieModalContent(props: DeleteMovieModalContentProps) {\r\n const { movieIds, onModalClose } = props;\r\n\r\n const { addImportExclusion } = useSelector(selectDeleteOptions);\r\n const allMovies: Movie[] = useSelector(createAllMoviesSelector());\r\n const dispatch = useDispatch();\r\n\r\n const [deleteFiles, setDeleteFiles] = useState(false);\r\n\r\n const movies = useMemo((): Movie[] => {\r\n const movies = movieIds.map((id) => {\r\n return allMovies.find((s) => s.id === id);\r\n }) as Movie[];\r\n\r\n return orderBy(movies, ['sortTitle']);\r\n }, [movieIds, allMovies]);\r\n\r\n const onDeleteFilesChange = useCallback(\r\n ({ value }: CheckInputChanged) => {\r\n setDeleteFiles(value);\r\n },\r\n [setDeleteFiles]\r\n );\r\n\r\n const onDeleteOptionChange = useCallback(\r\n ({ name, value }: { name: string; value: boolean }) => {\r\n dispatch(\r\n setDeleteOption({\r\n [name]: value,\r\n })\r\n );\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onDeleteMoviesConfirmed = useCallback(() => {\r\n setDeleteFiles(false);\r\n\r\n dispatch(\r\n bulkDeleteMovie({\r\n movieIds,\r\n deleteFiles,\r\n addImportExclusion,\r\n })\r\n );\r\n\r\n onModalClose();\r\n }, [\r\n movieIds,\r\n deleteFiles,\r\n addImportExclusion,\r\n setDeleteFiles,\r\n dispatch,\r\n onModalClose,\r\n ]);\r\n\r\n const { totalMovieFileCount, totalSizeOnDisk } = useMemo(() => {\r\n return movies.reduce(\r\n (acc, { statistics = {} }) => {\r\n const { movieFileCount = 0, sizeOnDisk = 0 } = statistics;\r\n\r\n acc.totalMovieFileCount += movieFileCount;\r\n acc.totalSizeOnDisk += sizeOnDisk;\r\n\r\n return acc;\r\n },\r\n {\r\n totalMovieFileCount: 0,\r\n totalSizeOnDisk: 0,\r\n }\r\n );\r\n }, [movies]);\r\n\r\n return (\r\n \r\n \r\n {movies.length > 1\r\n ? translate('DeleteSelectedMovies')\r\n : translate('DeleteSelectedMovie')}\r\n \r\n\r\n \r\n
\r\n \r\n {translate('AddListExclusion')}\r\n\r\n \r\n \r\n\r\n \r\n \r\n {movies.length > 1\r\n ? translate('DeleteMovieFolders')\r\n : translate('DeleteMovieFolder')}\r\n \r\n\r\n 1\r\n ? translate('DeleteMovieFoldersHelpText')\r\n : translate('DeleteMovieFolderHelpText')\r\n }\r\n kind={kinds.DANGER}\r\n onChange={onDeleteFilesChange}\r\n />\r\n \r\n
\r\n\r\n
\r\n {deleteFiles\r\n ? translate('DeleteMovieFolderCountWithFilesConfirmation', {\r\n count: movies.length,\r\n })\r\n : translate('DeleteMovieFolderCountConfirmation', {\r\n count: movies.length,\r\n })}\r\n
\r\n\r\n
    \r\n {movies.map(({ title, path, statistics = {} }) => {\r\n const { movieFileCount = 0, sizeOnDisk = 0 } = statistics;\r\n\r\n return (\r\n
  • \r\n {title}\r\n\r\n {deleteFiles && (\r\n \r\n \r\n -{path}\r\n \r\n\r\n {!!movieFileCount && (\r\n \r\n (\r\n {translate('DeleteMovieFolderMovieCount', {\r\n movieFileCount,\r\n size: formatBytes(sizeOnDisk),\r\n })}\r\n )\r\n \r\n )}\r\n \r\n )}\r\n
  • \r\n );\r\n })}\r\n
\r\n\r\n {deleteFiles && !!totalMovieFileCount ? (\r\n
\r\n {translate('DeleteMovieFolderMovieCount', {\r\n movieFileCount: totalMovieFileCount,\r\n size: formatBytes(totalSizeOnDisk),\r\n })}\r\n
\r\n ) : null}\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default DeleteMovieModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"DeleteMovieModalContent-message-SbHKu\",\"pathContainer\":\"DeleteMovieModalContent-pathContainer-YiNEZ\",\"path\":\"DeleteMovieModalContent-path-hpUgR\",\"statistics\":\"DeleteMovieModalContent-statistics-yk0LK\",\"deleteFilesMessage\":\"DeleteMovieModalContent-deleteFilesMessage-K0w3U\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport DeleteMovieModalContent from './DeleteMovieModalContent';\r\n\r\ninterface DeleteMovieModalProps {\r\n isOpen: boolean;\r\n movieIds: number[];\r\n onModalClose(): void;\r\n}\r\n\r\nfunction DeleteMovieModal(props: DeleteMovieModalProps) {\r\n const { isOpen, movieIds, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default DeleteMovieModal;\r\n","import React, { useCallback, useState } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport MoveMovieModal from 'Movie/MoveMovie/MoveMovieModal';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditMoviesModalContent.css';\r\n\r\ninterface SavePayload {\r\n monitored?: boolean;\r\n qualityProfileId?: number;\r\n minimumAvailability?: string;\r\n rootFolderPath?: string;\r\n moveFiles?: boolean;\r\n}\r\n\r\ninterface EditMoviesModalContentProps {\r\n movieIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nconst NO_CHANGE = 'noChange';\r\n\r\nconst monitoredOptions = [\r\n {\r\n key: NO_CHANGE,\r\n get value() {\r\n return translate('NoChange');\r\n },\r\n isDisabled: true,\r\n },\r\n {\r\n key: 'monitored',\r\n get value() {\r\n return translate('Monitored');\r\n },\r\n },\r\n {\r\n key: 'unmonitored',\r\n get value() {\r\n return translate('Unmonitored');\r\n },\r\n },\r\n];\r\n\r\nfunction EditMoviesModalContent(props: EditMoviesModalContentProps) {\r\n const { movieIds, onSavePress, onModalClose } = props;\r\n\r\n const [monitored, setMonitored] = useState(NO_CHANGE);\r\n const [qualityProfileId, setQualityProfileId] = useState(\r\n NO_CHANGE\r\n );\r\n const [minimumAvailability, setMinimumAvailability] = useState(NO_CHANGE);\r\n const [rootFolderPath, setRootFolderPath] = useState(NO_CHANGE);\r\n const [isConfirmMoveModalOpen, setIsConfirmMoveModalOpen] = useState(false);\r\n\r\n const save = useCallback(\r\n (moveFiles: boolean) => {\r\n let hasChanges = false;\r\n const payload: SavePayload = {};\r\n\r\n if (monitored !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.monitored = monitored === 'monitored';\r\n }\r\n\r\n if (qualityProfileId !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.qualityProfileId = qualityProfileId as number;\r\n }\r\n\r\n if (minimumAvailability !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.minimumAvailability = minimumAvailability as string;\r\n }\r\n\r\n if (rootFolderPath !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.rootFolderPath = rootFolderPath;\r\n payload.moveFiles = moveFiles;\r\n }\r\n\r\n if (hasChanges) {\r\n onSavePress(payload);\r\n }\r\n\r\n onModalClose();\r\n },\r\n [\r\n monitored,\r\n qualityProfileId,\r\n minimumAvailability,\r\n rootFolderPath,\r\n onSavePress,\r\n onModalClose,\r\n ]\r\n );\r\n\r\n const onInputChange = useCallback(\r\n ({ name, value }: { name: string; value: string }) => {\r\n switch (name) {\r\n case 'monitored':\r\n setMonitored(value);\r\n break;\r\n case 'qualityProfileId':\r\n setQualityProfileId(value);\r\n break;\r\n case 'minimumAvailability':\r\n setMinimumAvailability(value);\r\n break;\r\n case 'rootFolderPath':\r\n setRootFolderPath(value);\r\n break;\r\n default:\r\n console.warn('EditMoviesModalContent Unknown Input');\r\n }\r\n },\r\n [setMonitored]\r\n );\r\n\r\n const onSavePressWrapper = useCallback(() => {\r\n if (rootFolderPath === NO_CHANGE) {\r\n save(false);\r\n } else {\r\n setIsConfirmMoveModalOpen(true);\r\n }\r\n }, [rootFolderPath, save]);\r\n\r\n const onCancelPress = useCallback(() => {\r\n setIsConfirmMoveModalOpen(false);\r\n }, [setIsConfirmMoveModalOpen]);\r\n\r\n const onDoNotMoveMoviePress = useCallback(() => {\r\n setIsConfirmMoveModalOpen(false);\r\n save(false);\r\n }, [setIsConfirmMoveModalOpen, save]);\r\n\r\n const onMoveMoviePress = useCallback(() => {\r\n setIsConfirmMoveModalOpen(false);\r\n save(true);\r\n }, [setIsConfirmMoveModalOpen, save]);\r\n\r\n const selectedCount = movieIds.length;\r\n\r\n return (\r\n \r\n {translate('EditSelectedMovies')}\r\n\r\n \r\n \r\n {translate('Monitored')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('QualityProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('MinimumAvailability')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RootFolder')}\r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n {translate('MoviesSelectedInterp', { count: selectedCount })}\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default EditMoviesModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalFooter\":\"EditMoviesModalContent-modalFooter-gHsNV ModalFooter-modalFooter-wjkx5\",\"selected\":\"EditMoviesModalContent-selected-ReHHI\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport EditMoviesModalContent from './EditMoviesModalContent';\r\n\r\ninterface EditMoviesModalProps {\r\n isOpen: boolean;\r\n movieIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction EditMoviesModal(props: EditMoviesModalProps) {\r\n const { isOpen, movieIds, onSavePress, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default EditMoviesModal;\r\n","import { orderBy } from 'lodash';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RENAME_MOVIE } from 'Commands/commandNames';\r\nimport Alert from 'Components/Alert';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport Movie from 'Movie/Movie';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './OrganizeMoviesModalContent.css';\r\n\r\ninterface OrganizeMoviesModalContentProps {\r\n movieIds: number[];\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction OrganizeMoviesModalContent(props: OrganizeMoviesModalContentProps) {\r\n const { movieIds, onModalClose } = props;\r\n\r\n const allMovies: Movie[] = useSelector(createAllMoviesSelector());\r\n const dispatch = useDispatch();\r\n\r\n const movieTitles = useMemo(() => {\r\n const movie = movieIds.reduce((acc: Movie[], id) => {\r\n const s = allMovies.find((s) => s.id === id);\r\n\r\n if (s) {\r\n acc.push(s);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n const sorted = orderBy(movie, ['sortTitle']);\r\n\r\n return sorted.map((s) => s.title);\r\n }, [movieIds, allMovies]);\r\n\r\n const onOrganizePress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: RENAME_MOVIE,\r\n movieIds,\r\n })\r\n );\r\n\r\n onModalClose();\r\n }, [movieIds, onModalClose, dispatch]);\r\n\r\n return (\r\n \r\n {translate('OrganizeSelectedMovies')}\r\n\r\n \r\n \r\n {translate('PreviewRenameHelpText')}\r\n \r\n \r\n\r\n
\r\n {translate('OrganizeConfirm', { count: movieTitles.length })}\r\n
\r\n\r\n
    \r\n {movieTitles.map((title) => {\r\n return
  • {title}
  • ;\r\n })}\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default OrganizeMoviesModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"renameIcon\":\"OrganizeMoviesModalContent-renameIcon-OcwsN\",\"message\":\"OrganizeMoviesModalContent-message-TpkEd\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport OrganizeMoviesModalContent from './OrganizeMoviesModalContent';\r\n\r\ninterface OrganizeMoviesModalProps {\r\n isOpen: boolean;\r\n movieIds: number[];\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction OrganizeMoviesModal(props: OrganizeMoviesModalProps) {\r\n const { isOpen, onModalClose, ...otherProps } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default OrganizeMoviesModal;\r\n","import { uniq } from 'lodash';\r\nimport React, { useCallback, useMemo, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { Tag } from 'App/State/TagsAppState';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Label from 'Components/Label';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport Movie from 'Movie/Movie';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './TagsModalContent.css';\r\n\r\ninterface TagsModalContentProps {\r\n movieIds: number[];\r\n onApplyTagsPress: (tags: number[], applyTags: string) => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction TagsModalContent(props: TagsModalContentProps) {\r\n const { movieIds, onModalClose, onApplyTagsPress } = props;\r\n\r\n const allMovies: Movie[] = useSelector(createAllMoviesSelector());\r\n const tagList: Tag[] = useSelector(createTagsSelector());\r\n\r\n const [tags, setTags] = useState([]);\r\n const [applyTags, setApplyTags] = useState('add');\r\n\r\n const movieTags = useMemo(() => {\r\n const tags = movieIds.reduce((acc: number[], id) => {\r\n const s = allMovies.find((s) => s.id === id);\r\n\r\n if (s) {\r\n acc.push(...s.tags);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return uniq(tags);\r\n }, [movieIds, allMovies]);\r\n\r\n const onTagsChange = useCallback(\r\n ({ value }: { value: number[] }) => {\r\n setTags(value);\r\n },\r\n [setTags]\r\n );\r\n\r\n const onApplyTagsChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n setApplyTags(value);\r\n },\r\n [setApplyTags]\r\n );\r\n\r\n const onApplyPress = useCallback(() => {\r\n onApplyTagsPress(tags, applyTags);\r\n }, [tags, applyTags, onApplyTagsPress]);\r\n\r\n const applyTagsOptions = [\r\n { key: 'add', value: translate('Add') },\r\n { key: 'remove', value: translate('Remove') },\r\n { key: 'replace', value: translate('Replace') },\r\n ];\r\n\r\n return (\r\n \r\n {translate('Tags')}\r\n\r\n \r\n
\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ApplyTags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Result')}\r\n\r\n
\r\n {movieTags.map((id) => {\r\n const tag = tagList.find((t) => t.id === id);\r\n\r\n if (!tag) {\r\n return null;\r\n }\r\n\r\n const removeTag =\r\n (applyTags === 'remove' && tags.indexOf(id) > -1) ||\r\n (applyTags === 'replace' && tags.indexOf(id) === -1);\r\n\r\n return (\r\n \r\n {tag.label}\r\n \r\n );\r\n })}\r\n\r\n {(applyTags === 'add' || applyTags === 'replace') &&\r\n tags.map((id) => {\r\n const tag = tagList.find((t) => t.id === id);\r\n\r\n if (!tag) {\r\n return null;\r\n }\r\n\r\n if (movieTags.indexOf(id) > -1) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {tag.label}\r\n \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default TagsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"renameIcon\":\"TagsModalContent-renameIcon-wc7rg\",\"message\":\"TagsModalContent-message-vtjNy\",\"result\":\"TagsModalContent-result-v6Y79\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport TagsModalContent from './TagsModalContent';\r\n\r\ninterface TagsModalProps {\r\n isOpen: boolean;\r\n movieIds: number[];\r\n onApplyTagsPress: (tags: number[], applyTags: string) => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction TagsModal(props: TagsModalProps) {\r\n const { isOpen, onModalClose, ...otherProps } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default TagsModal;\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport AppState from 'App/State/AppState';\r\nimport { RENAME_MOVIE } from 'Commands/commandNames';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport PageContentFooter from 'Components/Page/PageContentFooter';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { saveMovieEditor } from 'Store/Actions/movieActions';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport DeleteMovieModal from './Delete/DeleteMovieModal';\r\nimport EditMoviesModal from './Edit/EditMoviesModal';\r\nimport OrganizeMoviesModal from './Organize/OrganizeMoviesModal';\r\nimport TagsModal from './Tags/TagsModal';\r\nimport styles from './MovieIndexSelectFooter.css';\r\n\r\ninterface SavePayload {\r\n monitored?: boolean;\r\n qualityProfileId?: number;\r\n rootFolderPath?: string;\r\n moveFiles?: boolean;\r\n}\r\n\r\nconst movieEditorSelector = createSelector(\r\n (state: AppState) => state.movies,\r\n (movies) => {\r\n const { isSaving, isDeleting, deleteError } = movies;\r\n\r\n return {\r\n isSaving,\r\n isDeleting,\r\n deleteError,\r\n };\r\n }\r\n);\r\n\r\nfunction MovieIndexSelectFooter() {\r\n const { isSaving, isDeleting, deleteError } =\r\n useSelector(movieEditorSelector);\r\n\r\n const isOrganizingMovies = useSelector(\r\n createCommandExecutingSelector(RENAME_MOVIE)\r\n );\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\r\n const [isOrganizeModalOpen, setIsOrganizeModalOpen] = useState(false);\r\n const [isTagsModalOpen, setIsTagsModalOpen] = useState(false);\r\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\r\n const [isSavingMovies, setIsSavingMovies] = useState(false);\r\n const [isSavingTags, setIsSavingTags] = useState(false);\r\n const previousIsDeleting = usePrevious(isDeleting);\r\n\r\n const [selectState, selectDispatch] = useSelect();\r\n const { selectedState } = selectState;\r\n\r\n const movieIds = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const selectedCount = movieIds.length ? movieIds.length : 0;\r\n\r\n const onEditPress = useCallback(() => {\r\n setIsEditModalOpen(true);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onEditModalClose = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onSavePress = useCallback(\r\n (payload: SavePayload) => {\r\n setIsSavingMovies(true);\r\n setIsEditModalOpen(false);\r\n\r\n dispatch(\r\n saveMovieEditor({\r\n ...payload,\r\n movieIds,\r\n })\r\n );\r\n },\r\n [movieIds, dispatch]\r\n );\r\n\r\n const onOrganizePress = useCallback(() => {\r\n setIsOrganizeModalOpen(true);\r\n }, [setIsOrganizeModalOpen]);\r\n\r\n const onOrganizeModalClose = useCallback(() => {\r\n setIsOrganizeModalOpen(false);\r\n }, [setIsOrganizeModalOpen]);\r\n\r\n const onTagsPress = useCallback(() => {\r\n setIsTagsModalOpen(true);\r\n }, [setIsTagsModalOpen]);\r\n\r\n const onTagsModalClose = useCallback(() => {\r\n setIsTagsModalOpen(false);\r\n }, [setIsTagsModalOpen]);\r\n\r\n const onApplyTagsPress = useCallback(\r\n (tags: number[], applyTags: string) => {\r\n setIsSavingTags(true);\r\n setIsTagsModalOpen(false);\r\n\r\n dispatch(\r\n saveMovieEditor({\r\n movieIds,\r\n tags,\r\n applyTags,\r\n })\r\n );\r\n },\r\n [movieIds, dispatch]\r\n );\r\n\r\n const onDeletePress = useCallback(() => {\r\n setIsDeleteModalOpen(true);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onDeleteModalClose = useCallback(() => {\r\n setIsDeleteModalOpen(false);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isSaving) {\r\n setIsSavingMovies(false);\r\n setIsSavingTags(false);\r\n }\r\n }, [isSaving]);\r\n\r\n useEffect(() => {\r\n if (previousIsDeleting && !isDeleting && !deleteError) {\r\n selectDispatch({ type: 'unselectAll' });\r\n }\r\n }, [previousIsDeleting, isDeleting, deleteError, selectDispatch]);\r\n\r\n useEffect(() => {\r\n dispatch(fetchRootFolders());\r\n }, [dispatch]);\r\n\r\n const anySelected = selectedCount > 0;\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n {translate('Edit')}\r\n \r\n\r\n \r\n {translate('RenameFiles')}\r\n \r\n\r\n \r\n {translate('SetTags')}\r\n \r\n
\r\n\r\n
\r\n \r\n {translate('Delete')}\r\n \r\n
\r\n
\r\n\r\n
\r\n {translate('MoviesSelectedInterp', { count: selectedCount })}\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieIndexSelectFooter;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"footer\":\"MovieIndexSelectFooter-footer-cqCnQ PageContentFooter-contentFooter-RHpBL\",\"buttons\":\"MovieIndexSelectFooter-buttons-C8jss\",\"actionButtons\":\"MovieIndexSelectFooter-actionButtons-l9ngv\",\"deleteButtons\":\"MovieIndexSelectFooter-deleteButtons-DrnJH\",\"selected\":\"MovieIndexSelectFooter-selected-QMP03\"};","import { IconDefinition } from '@fortawesome/fontawesome-common-types';\r\nimport React, { useCallback } from 'react';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\n\r\ninterface MovieIndexSelectModeButtonProps {\r\n label: string;\r\n iconName: IconDefinition;\r\n isSelectMode: boolean;\r\n overflowComponent: React.FunctionComponent;\r\n onPress: () => void;\r\n}\r\n\r\nfunction MovieIndexSelectModeButton(props: MovieIndexSelectModeButtonProps) {\r\n const { label, iconName, isSelectMode, onPress } = props;\r\n const [, selectDispatch] = useSelect();\r\n\r\n const onPressWrapper = useCallback(() => {\r\n if (isSelectMode) {\r\n selectDispatch({\r\n type: 'reset',\r\n });\r\n }\r\n\r\n onPress();\r\n }, [isSelectMode, onPress, selectDispatch]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexSelectModeButton;\r\n","import { IconDefinition } from '@fortawesome/fontawesome-common-types';\r\nimport React, { useCallback } from 'react';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport PageToolbarOverflowMenuItem from 'Components/Page/Toolbar/PageToolbarOverflowMenuItem';\r\n\r\ninterface MovieIndexSelectModeMenuItemProps {\r\n label: string;\r\n iconName: IconDefinition;\r\n isSelectMode: boolean;\r\n onPress: () => void;\r\n}\r\n\r\nfunction MovieIndexSelectModeMenuItem(\r\n props: MovieIndexSelectModeMenuItemProps\r\n) {\r\n const { label, iconName, isSelectMode, onPress } = props;\r\n const [, selectDispatch] = useSelect();\r\n\r\n const onPressWrapper = useCallback(() => {\r\n if (isSelectMode) {\r\n selectDispatch({\r\n type: 'reset',\r\n });\r\n }\r\n\r\n onPress();\r\n }, [isSelectMode, onPress, selectDispatch]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexSelectModeMenuItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"status\":\"MovieStatusCell-status-XFJul TableRowCell-cell-giPrj\",\"statusIcon\":\"MovieStatusCell-statusIcon-QQe6l\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Icon from 'Components/Icon';\r\nimport MonitorToggleButton from 'Components/MonitorToggleButton';\r\nimport VirtualTableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport { icons } from 'Helpers/Props';\r\nimport getMovieStatusDetails from 'Movie/getMovieStatusDetails';\r\nimport { MovieStatus } from 'Movie/Movie';\r\nimport { toggleMovieMonitored } from 'Store/Actions/movieActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './MovieStatusCell.css';\r\n\r\ninterface MovieStatusCellProps {\r\n className: string;\r\n movieId: number;\r\n monitored: boolean;\r\n status: MovieStatus;\r\n isSelectMode: boolean;\r\n isSaving: boolean;\r\n component?: React.ElementType;\r\n}\r\n\r\nfunction MovieStatusCell(props: MovieStatusCellProps) {\r\n const {\r\n className,\r\n movieId,\r\n monitored,\r\n status,\r\n isSelectMode,\r\n isSaving,\r\n component: Component = VirtualTableRowCell,\r\n ...otherProps\r\n } = props;\r\n\r\n const statusDetails = getMovieStatusDetails(status);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const onMonitoredPress = useCallback(() => {\r\n dispatch(toggleMovieMonitored({ movieId, monitored: !monitored }));\r\n }, [movieId, monitored, dispatch]);\r\n\r\n return (\r\n \r\n {isSelectMode ? (\r\n \r\n ) : (\r\n \r\n )}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieStatusCell;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nconst selectTableOptions = createSelector(\r\n (state: AppState) => state.movieIndex.tableOptions,\r\n (tableOptions) => tableOptions\r\n);\r\n\r\nexport default selectTableOptions;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"status\":\"MovieIndexRow-status-cuom0 MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"collection\":\"MovieIndexRow-collection-mm1EI MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"originalTitle\":\"MovieIndexRow-originalTitle-_llHF MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"sortTitle\":\"MovieIndexRow-sortTitle-o9duu MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"minimumAvailability\":\"MovieIndexRow-minimumAvailability-RhlvD MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"studio\":\"MovieIndexRow-studio-F904P MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"originalLanguage\":\"MovieIndexRow-originalLanguage-n5ctS MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"qualityProfileId\":\"MovieIndexRow-qualityProfileId-fZMw9 MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"releaseGroups\":\"MovieIndexRow-releaseGroups-ttoOY MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"inCinemas\":\"MovieIndexRow-inCinemas-USBp8 MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"physicalRelease\":\"MovieIndexRow-physicalRelease-jxUVK MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"digitalRelease\":\"MovieIndexRow-digitalRelease-VId5i MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"releaseDate\":\"MovieIndexRow-releaseDate-GDtTY MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"genres\":\"MovieIndexRow-genres-Q_0lm MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"added\":\"MovieIndexRow-added-rfm6P MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"popularity\":\"MovieIndexRow-popularity-y81bi MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"runtime\":\"MovieIndexRow-runtime-saRhx MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"movieStatus\":\"MovieIndexRow-movieStatus-uYrl8 MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"certification\":\"MovieIndexRow-certification-hI1RP MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"year\":\"MovieIndexRow-year-L6lBm MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"path\":\"MovieIndexRow-path-ccsNN MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"sizeOnDisk\":\"MovieIndexRow-sizeOnDisk-VDAQT MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"imdbRating\":\"MovieIndexRow-imdbRating-xWbrg MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"tmdbRating\":\"MovieIndexRow-tmdbRating-zEtQT MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"rottenTomatoesRating\":\"MovieIndexRow-rottenTomatoesRating-vJt4t MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"traktRating\":\"MovieIndexRow-traktRating-iCPKC MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"tags\":\"MovieIndexRow-tags-goPcR MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"actions\":\"MovieIndexRow-actions-bzjId MovieIndexRow-cell-Xl9QP VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"checkInput\":\"MovieIndexRow-checkInput-UbCz9 CheckInput-input-VAM1T\",\"externalLinks\":\"MovieIndexRow-externalLinks-cKPhe\"};","import React, { useCallback, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport { MOVIE_SEARCH, REFRESH_MOVIE } from 'Commands/commandNames';\r\nimport Icon from 'Components/Icon';\r\nimport ImdbRating from 'Components/ImdbRating';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport RottenTomatoRating from 'Components/RottenTomatoRating';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';\r\nimport VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell';\r\nimport Column from 'Components/Table/Column';\r\nimport TagListConnector from 'Components/TagListConnector';\r\nimport TmdbRating from 'Components/TmdbRating';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport TraktRating from 'Components/TraktRating';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport DeleteMovieModal from 'Movie/Delete/DeleteMovieModal';\r\nimport MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';\r\nimport EditMovieModal from 'Movie/Edit/EditMovieModal';\r\nimport createMovieIndexItemSelector from 'Movie/Index/createMovieIndexItemSelector';\r\nimport { Statistics } from 'Movie/Movie';\r\nimport MoviePopularityIndex from 'Movie/MoviePopularityIndex';\r\nimport MovieTitleLink from 'Movie/MovieTitleLink';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport formatRuntime from 'Utilities/Date/formatRuntime';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport firstCharToUpper from 'Utilities/String/firstCharToUpper';\r\nimport translate from 'Utilities/String/translate';\r\nimport MovieIndexProgressBar from '../ProgressBar/MovieIndexProgressBar';\r\nimport MovieStatusCell from './MovieStatusCell';\r\nimport selectTableOptions from './selectTableOptions';\r\nimport styles from './MovieIndexRow.css';\r\n\r\ninterface MovieIndexRowProps {\r\n movieId: number;\r\n sortKey: string;\r\n columns: Column[];\r\n isSelectMode: boolean;\r\n}\r\n\r\nfunction MovieIndexRow(props: MovieIndexRowProps) {\r\n const { movieId, columns, isSelectMode } = props;\r\n\r\n const { movie, qualityProfile, isRefreshingMovie, isSearchingMovie } =\r\n useSelector(createMovieIndexItemSelector(props.movieId));\r\n\r\n const { showSearchAction } = useSelector(selectTableOptions);\r\n\r\n const { movieRuntimeFormat } = useSelector(createUISettingsSelector());\r\n\r\n const {\r\n monitored,\r\n titleSlug,\r\n title,\r\n collection,\r\n studio,\r\n status,\r\n originalLanguage,\r\n originalTitle,\r\n added,\r\n statistics = {} as Statistics,\r\n year,\r\n inCinemas,\r\n digitalRelease,\r\n physicalRelease,\r\n releaseDate,\r\n runtime,\r\n minimumAvailability,\r\n path,\r\n genres = [],\r\n ratings,\r\n popularity,\r\n certification,\r\n tags = [],\r\n tmdbId,\r\n imdbId,\r\n isAvailable,\r\n hasFile,\r\n movieFile,\r\n youTubeTrailerId,\r\n isSaving = false,\r\n } = movie;\r\n\r\n const { sizeOnDisk = 0, releaseGroups = [] } = statistics;\r\n\r\n const dispatch = useDispatch();\r\n const [isEditMovieModalOpen, setIsEditMovieModalOpen] = useState(false);\r\n const [isDeleteMovieModalOpen, setIsDeleteMovieModalOpen] = useState(false);\r\n const [selectState, selectDispatch] = useSelect();\r\n\r\n const onRefreshPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: REFRESH_MOVIE,\r\n movieIds: [movieId],\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n const onSearchPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: MOVIE_SEARCH,\r\n movieIds: [movieId],\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n const onEditMoviePress = useCallback(() => {\r\n setIsEditMovieModalOpen(true);\r\n }, [setIsEditMovieModalOpen]);\r\n\r\n const onEditMovieModalClose = useCallback(() => {\r\n setIsEditMovieModalOpen(false);\r\n }, [setIsEditMovieModalOpen]);\r\n\r\n const onDeleteMoviePress = useCallback(() => {\r\n setIsEditMovieModalOpen(false);\r\n setIsDeleteMovieModalOpen(true);\r\n }, [setIsDeleteMovieModalOpen]);\r\n\r\n const onDeleteMovieModalClose = useCallback(() => {\r\n setIsDeleteMovieModalOpen(false);\r\n }, [setIsDeleteMovieModalOpen]);\r\n\r\n const onSelectedChange = useCallback(\r\n ({ id, value, shiftKey }: SelectStateInputProps) => {\r\n selectDispatch({\r\n type: 'toggleSelected',\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n },\r\n [selectDispatch]\r\n );\r\n\r\n return (\r\n <>\r\n {isSelectMode ? (\r\n \r\n ) : null}\r\n\r\n {columns.map((column) => {\r\n const { name, isVisible } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'status') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'sortTitle') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'collection') {\r\n return (\r\n \r\n {collection ? collection.title : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'studio') {\r\n return (\r\n \r\n {studio}\r\n \r\n );\r\n }\r\n\r\n if (name === 'originalLanguage') {\r\n return (\r\n \r\n {originalLanguage.name}\r\n \r\n );\r\n }\r\n\r\n if (name === 'originalTitle') {\r\n return (\r\n \r\n {originalTitle}\r\n \r\n );\r\n }\r\n\r\n if (name === 'qualityProfileId') {\r\n return (\r\n \r\n {qualityProfile?.name ?? ''}\r\n \r\n );\r\n }\r\n\r\n if (name === 'added') {\r\n return (\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore ts(2739)\r\n \r\n );\r\n }\r\n\r\n if (name === 'year') {\r\n return (\r\n \r\n {year > 0 ? year : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'inCinemas') {\r\n return (\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore ts(2739)\r\n \r\n );\r\n }\r\n\r\n if (name === 'digitalRelease') {\r\n return (\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore ts(2739)\r\n \r\n );\r\n }\r\n\r\n if (name === 'physicalRelease') {\r\n return (\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore ts(2739)\r\n \r\n );\r\n }\r\n\r\n if (name === 'releaseDate') {\r\n return (\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore ts(2739)\r\n \r\n );\r\n }\r\n\r\n if (name === 'runtime') {\r\n return (\r\n \r\n {formatRuntime(runtime, movieRuntimeFormat)}\r\n \r\n );\r\n }\r\n\r\n if (name === 'minimumAvailability') {\r\n return (\r\n \r\n {translate(firstCharToUpper(minimumAvailability))}\r\n \r\n );\r\n }\r\n\r\n if (name === 'path') {\r\n return (\r\n \r\n {path}\r\n \r\n );\r\n }\r\n\r\n if (name === 'sizeOnDisk') {\r\n return (\r\n \r\n {formatBytes(sizeOnDisk)}\r\n \r\n );\r\n }\r\n\r\n if (name === 'genres') {\r\n const joinedGenres = genres.join(', ');\r\n\r\n return (\r\n \r\n {joinedGenres}\r\n \r\n );\r\n }\r\n\r\n if (name === 'movieStatus') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'tmdbRating') {\r\n return (\r\n \r\n {ratings.tmdb ? : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'imdbRating') {\r\n return (\r\n \r\n {ratings.imdb ? : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'rottenTomatoesRating') {\r\n return (\r\n \r\n {ratings.rottenTomatoes ? (\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'traktRating') {\r\n return (\r\n \r\n {ratings.trakt ? : null}\r\n \r\n );\r\n }\r\n\r\n if (name === 'popularity') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'certification') {\r\n return (\r\n \r\n {certification}\r\n \r\n );\r\n }\r\n\r\n if (name === 'releaseGroups') {\r\n const joinedReleaseGroups = releaseGroups.join(', ');\r\n const truncatedReleaseGroups =\r\n releaseGroups.length > 3\r\n ? `${releaseGroups.slice(0, 3).join(', ')}...`\r\n : joinedReleaseGroups;\r\n\r\n return (\r\n \r\n {truncatedReleaseGroups}\r\n \r\n );\r\n }\r\n\r\n if (name === 'tags') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n \r\n }\r\n tooltip={\r\n \r\n }\r\n canFlip={true}\r\n kind={kinds.INVERSE}\r\n />\r\n \r\n\r\n \r\n\r\n {showSearchAction ? (\r\n \r\n ) : null}\r\n\r\n \r\n \r\n );\r\n }\r\n\r\n return null;\r\n })}\r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexRow;\r\n","import React, { useCallback } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport translate from 'Utilities/String/translate';\r\nimport selectTableOptions from './selectTableOptions';\r\n\r\ninterface MovieIndexTableOptionsProps {\r\n onTableOptionChange(...args: unknown[]): unknown;\r\n}\r\n\r\nfunction MovieIndexTableOptions(props: MovieIndexTableOptionsProps) {\r\n const { onTableOptionChange } = props;\r\n\r\n const tableOptions = useSelector(selectTableOptions);\r\n\r\n const { showSearchAction } = tableOptions;\r\n\r\n const onTableOptionChangeWrapper = useCallback(\r\n ({ name, value }: CheckInputChanged) => {\r\n onTableOptionChange({\r\n tableOptions: {\r\n ...tableOptions,\r\n [name]: value,\r\n },\r\n });\r\n },\r\n [tableOptions, onTableOptionChange]\r\n );\r\n\r\n return (\r\n \r\n {translate('ShowSearch')}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexTableOptions;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"status\":\"MovieIndexTableHeader-status-O1yt8 VirtualTableHeaderCell-headerCell-oq_lz\",\"collection\":\"MovieIndexTableHeader-collection-aZDnc VirtualTableHeaderCell-headerCell-oq_lz\",\"originalTitle\":\"MovieIndexTableHeader-originalTitle-pPuPv VirtualTableHeaderCell-headerCell-oq_lz\",\"sortTitle\":\"MovieIndexTableHeader-sortTitle-v7Fy2 VirtualTableHeaderCell-headerCell-oq_lz\",\"minimumAvailability\":\"MovieIndexTableHeader-minimumAvailability-gyOxu VirtualTableHeaderCell-headerCell-oq_lz\",\"studio\":\"MovieIndexTableHeader-studio-BupGj VirtualTableHeaderCell-headerCell-oq_lz\",\"originalLanguage\":\"MovieIndexTableHeader-originalLanguage-thjw4 VirtualTableHeaderCell-headerCell-oq_lz\",\"qualityProfileId\":\"MovieIndexTableHeader-qualityProfileId-u01UN VirtualTableHeaderCell-headerCell-oq_lz\",\"releaseGroups\":\"MovieIndexTableHeader-releaseGroups-rrgXb VirtualTableHeaderCell-headerCell-oq_lz\",\"inCinemas\":\"MovieIndexTableHeader-inCinemas-ug5Vz VirtualTableHeaderCell-headerCell-oq_lz\",\"physicalRelease\":\"MovieIndexTableHeader-physicalRelease-wgHn9 VirtualTableHeaderCell-headerCell-oq_lz\",\"digitalRelease\":\"MovieIndexTableHeader-digitalRelease-ChiAG VirtualTableHeaderCell-headerCell-oq_lz\",\"releaseDate\":\"MovieIndexTableHeader-releaseDate-sCGMu VirtualTableHeaderCell-headerCell-oq_lz\",\"genres\":\"MovieIndexTableHeader-genres-XogIR VirtualTableHeaderCell-headerCell-oq_lz\",\"added\":\"MovieIndexTableHeader-added-diuNJ VirtualTableHeaderCell-headerCell-oq_lz\",\"popularity\":\"MovieIndexTableHeader-popularity-Scufo VirtualTableHeaderCell-headerCell-oq_lz\",\"runtime\":\"MovieIndexTableHeader-runtime-mwTwq VirtualTableHeaderCell-headerCell-oq_lz\",\"movieStatus\":\"MovieIndexTableHeader-movieStatus-nQgge VirtualTableHeaderCell-headerCell-oq_lz\",\"certification\":\"MovieIndexTableHeader-certification-I1llH VirtualTableHeaderCell-headerCell-oq_lz\",\"year\":\"MovieIndexTableHeader-year-cxvKq VirtualTableHeaderCell-headerCell-oq_lz\",\"path\":\"MovieIndexTableHeader-path-KqGHw VirtualTableHeaderCell-headerCell-oq_lz\",\"sizeOnDisk\":\"MovieIndexTableHeader-sizeOnDisk-y5iMh VirtualTableHeaderCell-headerCell-oq_lz\",\"imdbRating\":\"MovieIndexTableHeader-imdbRating-_gux0 VirtualTableHeaderCell-headerCell-oq_lz\",\"tmdbRating\":\"MovieIndexTableHeader-tmdbRating-uO7Oq VirtualTableHeaderCell-headerCell-oq_lz\",\"rottenTomatoesRating\":\"MovieIndexTableHeader-rottenTomatoesRating-vXRac VirtualTableHeaderCell-headerCell-oq_lz\",\"traktRating\":\"MovieIndexTableHeader-traktRating-NXwZA VirtualTableHeaderCell-headerCell-oq_lz\",\"tags\":\"MovieIndexTableHeader-tags-sg8mb VirtualTableHeaderCell-headerCell-oq_lz\",\"actions\":\"MovieIndexTableHeader-actions-Hnq3y VirtualTableHeaderCell-headerCell-oq_lz\"};","import classNames from 'classnames';\r\nimport React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Column from 'Components/Table/Column';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport VirtualTableHeader from 'Components/Table/VirtualTableHeader';\r\nimport VirtualTableHeaderCell from 'Components/Table/VirtualTableHeaderCell';\r\nimport VirtualTableSelectAllHeaderCell from 'Components/Table/VirtualTableSelectAllHeaderCell';\r\nimport { icons } from 'Helpers/Props';\r\nimport { SortDirection } from 'Helpers/Props/sortDirections';\r\nimport {\r\n setMovieSort,\r\n setMovieTableOption,\r\n} from 'Store/Actions/movieIndexActions';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport MovieIndexTableOptions from './MovieIndexTableOptions';\r\nimport styles from './MovieIndexTableHeader.css';\r\n\r\ninterface MovieIndexTableHeaderProps {\r\n columns: Column[];\r\n sortKey?: string;\r\n sortDirection?: SortDirection;\r\n isSelectMode: boolean;\r\n}\r\n\r\nfunction MovieIndexTableHeader(props: MovieIndexTableHeaderProps) {\r\n const { columns, sortKey, sortDirection, isSelectMode } = props;\r\n const dispatch = useDispatch();\r\n const [selectState, selectDispatch] = useSelect();\r\n\r\n const onSortPress = useCallback(\r\n (value: string) => {\r\n dispatch(setMovieSort({ sortKey: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onTableOptionChange = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setMovieTableOption(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onSelectAllChange = useCallback(\r\n ({ value }: CheckInputChanged) => {\r\n selectDispatch({\r\n type: value ? 'selectAll' : 'unselectAll',\r\n });\r\n },\r\n [selectDispatch]\r\n );\r\n\r\n return (\r\n \r\n {isSelectMode ? (\r\n \r\n ) : null}\r\n\r\n {columns.map((column) => {\r\n const { name, label, isSortable, isVisible } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {typeof label === 'function' ? label() : label}\r\n \r\n );\r\n })}\r\n \r\n );\r\n}\r\n\r\nexport default MovieIndexTableHeader;\r\n","import { throttle } from 'lodash';\r\nimport React, { RefObject, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { FixedSizeList as List, ListChildComponentProps } from 'react-window';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport Column from 'Components/Table/Column';\r\nimport useMeasure from 'Helpers/Hooks/useMeasure';\r\nimport { SortDirection } from 'Helpers/Props/sortDirections';\r\nimport Movie from 'Movie/Movie';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\nimport MovieIndexRow from './MovieIndexRow';\r\nimport MovieIndexTableHeader from './MovieIndexTableHeader';\r\nimport styles from './MovieIndexTable.css';\r\n\r\nconst bodyPadding = parseInt(dimensions.pageContentBodyPadding);\r\nconst bodyPaddingSmallScreen = parseInt(\r\n dimensions.pageContentBodyPaddingSmallScreen\r\n);\r\n\r\ninterface RowItemData {\r\n items: Movie[];\r\n sortKey: string;\r\n columns: Column[];\r\n isSelectMode: boolean;\r\n}\r\n\r\ninterface MovieIndexTableProps {\r\n items: Movie[];\r\n sortKey: string;\r\n sortDirection?: SortDirection;\r\n jumpToCharacter?: string;\r\n scrollTop?: number;\r\n scrollerRef: RefObject;\r\n isSelectMode: boolean;\r\n isSmallScreen: boolean;\r\n}\r\n\r\nconst columnsSelector = createSelector(\r\n (state: AppState) => state.movieIndex.columns,\r\n (columns) => columns\r\n);\r\n\r\nfunction Row({ index, style, data }: ListChildComponentProps) {\r\n const { items, sortKey, columns, isSelectMode } = data;\r\n\r\n if (index >= items.length) {\r\n return null;\r\n }\r\n\r\n const movie = items[index];\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction getWindowScrollTopPosition() {\r\n return document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n}\r\n\r\nfunction MovieIndexTable(props: MovieIndexTableProps) {\r\n const {\r\n items,\r\n sortKey,\r\n sortDirection,\r\n jumpToCharacter,\r\n isSelectMode,\r\n isSmallScreen,\r\n scrollerRef,\r\n } = props;\r\n\r\n const columns = useSelector(columnsSelector);\r\n const listRef = useRef>(null);\r\n const [measureRef, bounds] = useMeasure();\r\n const [size, setSize] = useState({ width: 0, height: 0 });\r\n const windowWidth = window.innerWidth;\r\n const windowHeight = window.innerHeight;\r\n\r\n const rowHeight = useMemo(() => {\r\n return 38;\r\n }, []);\r\n\r\n useEffect(() => {\r\n const current = scrollerRef?.current as HTMLElement;\r\n\r\n if (isSmallScreen) {\r\n setSize({\r\n width: windowWidth,\r\n height: windowHeight,\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (current) {\r\n const width = current.clientWidth;\r\n const padding =\r\n (isSmallScreen ? bodyPaddingSmallScreen : bodyPadding) - 5;\r\n\r\n setSize({\r\n width: width - padding * 2,\r\n height: windowHeight,\r\n });\r\n }\r\n }, [isSmallScreen, windowWidth, windowHeight, scrollerRef, bounds]);\r\n\r\n useEffect(() => {\r\n const currentScrollerRef = scrollerRef.current as HTMLElement;\r\n const currentScrollListener = isSmallScreen ? window : currentScrollerRef;\r\n\r\n const handleScroll = throttle(() => {\r\n const { offsetTop = 0 } = currentScrollerRef;\r\n const scrollTop =\r\n (isSmallScreen\r\n ? getWindowScrollTopPosition()\r\n : currentScrollerRef.scrollTop) - offsetTop;\r\n\r\n listRef.current?.scrollTo(scrollTop);\r\n }, 10);\r\n\r\n currentScrollListener.addEventListener('scroll', handleScroll);\r\n\r\n return () => {\r\n handleScroll.cancel();\r\n\r\n if (currentScrollListener) {\r\n currentScrollListener.removeEventListener('scroll', handleScroll);\r\n }\r\n };\r\n }, [isSmallScreen, listRef, scrollerRef]);\r\n\r\n useEffect(() => {\r\n if (jumpToCharacter) {\r\n const index = getIndexOfFirstCharacter(items, jumpToCharacter);\r\n\r\n if (index != null) {\r\n let scrollTop = index * rowHeight;\r\n\r\n // If the offset is zero go to the top, otherwise offset\r\n // by the approximate size of the header + padding (37 + 20).\r\n if (scrollTop > 0) {\r\n const offset = 57;\r\n\r\n scrollTop += offset;\r\n }\r\n\r\n listRef.current?.scrollTo(scrollTop);\r\n scrollerRef?.current?.scrollTo(0, scrollTop);\r\n }\r\n }\r\n }, [jumpToCharacter, rowHeight, items, scrollerRef, listRef]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n ref={listRef}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'none',\r\n }}\r\n width={size.width}\r\n height={size.height}\r\n itemCount={items.length}\r\n itemSize={rowHeight}\r\n itemData={{\r\n items,\r\n sortKey,\r\n columns,\r\n isSelectMode,\r\n }}\r\n >\r\n {Row}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieIndexTable;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tableScroller\":\"MovieIndexTable-tableScroller-QkFM5\",\"row\":\"MovieIndexTable-row-MZIas\"};","import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { SelectProvider } from 'App/SelectContext';\r\nimport ClientSideCollectionAppState from 'App/State/ClientSideCollectionAppState';\r\nimport MoviesAppState, { MovieIndexAppState } from 'App/State/MoviesAppState';\r\nimport { RSS_SYNC } from 'Commands/commandNames';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageJumpBar from 'Components/Page/PageJumpBar';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport withScrollPosition from 'Components/withScrollPosition';\r\nimport { align, icons, kinds } from 'Helpers/Props';\r\nimport { DESCENDING } from 'Helpers/Props/sortDirections';\r\nimport InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';\r\nimport NoMovie from 'Movie/NoMovie';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport {\r\n setMovieFilter,\r\n setMovieSort,\r\n setMovieTableOption,\r\n setMovieView,\r\n} from 'Store/Actions/movieIndexActions';\r\nimport { fetchQueueDetails } from 'Store/Actions/queueActions';\r\nimport scrollPositions from 'Store/scrollPositions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createMovieClientSideCollectionItemsSelector from 'Store/Selectors/createMovieClientSideCollectionItemsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport MovieIndexFilterMenu from './Menus/MovieIndexFilterMenu';\r\nimport MovieIndexSortMenu from './Menus/MovieIndexSortMenu';\r\nimport MovieIndexViewMenu from './Menus/MovieIndexViewMenu';\r\nimport MovieIndexFooter from './MovieIndexFooter';\r\nimport MovieIndexRefreshMovieButton from './MovieIndexRefreshMovieButton';\r\nimport MovieIndexSearchButton from './MovieIndexSearchButton';\r\nimport MovieIndexSearchMenuItem from './MovieIndexSearchMenuItem';\r\nimport MovieIndexOverviews from './Overview/MovieIndexOverviews';\r\nimport MovieIndexOverviewOptionsModal from './Overview/Options/MovieIndexOverviewOptionsModal';\r\nimport MovieIndexPosters from './Posters/MovieIndexPosters';\r\nimport MovieIndexPosterOptionsModal from './Posters/Options/MovieIndexPosterOptionsModal';\r\nimport MovieIndexSelectAllButton from './Select/MovieIndexSelectAllButton';\r\nimport MovieIndexSelectAllMenuItem from './Select/MovieIndexSelectAllMenuItem';\r\nimport MovieIndexSelectFooter from './Select/MovieIndexSelectFooter';\r\nimport MovieIndexSelectModeButton from './Select/MovieIndexSelectModeButton';\r\nimport MovieIndexSelectModeMenuItem from './Select/MovieIndexSelectModeMenuItem';\r\nimport MovieIndexTable from './Table/MovieIndexTable';\r\nimport MovieIndexTableOptions from './Table/MovieIndexTableOptions';\r\nimport styles from './MovieIndex.css';\r\n\r\nfunction getViewComponent(view: string) {\r\n if (view === 'posters') {\r\n return MovieIndexPosters;\r\n }\r\n\r\n if (view === 'overview') {\r\n return MovieIndexOverviews;\r\n }\r\n\r\n return MovieIndexTable;\r\n}\r\n\r\ninterface MovieIndexProps {\r\n initialScrollTop?: number;\r\n}\r\n\r\nconst MovieIndex = withScrollPosition((props: MovieIndexProps) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n totalItems,\r\n items,\r\n columns,\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n sortKey,\r\n sortDirection,\r\n view,\r\n }: MoviesAppState & MovieIndexAppState & ClientSideCollectionAppState =\r\n useSelector(createMovieClientSideCollectionItemsSelector('movieIndex'));\r\n\r\n const isRssSyncExecuting = useSelector(\r\n createCommandExecutingSelector(RSS_SYNC)\r\n );\r\n const { isSmallScreen } = useSelector(createDimensionsSelector());\r\n const dispatch = useDispatch();\r\n const scrollerRef = useRef(null);\r\n const [isOptionsModalOpen, setIsOptionsModalOpen] = useState(false);\r\n const [isInteractiveImportModalOpen, setIsInteractiveImportModalOpen] =\r\n useState(false);\r\n const [jumpToCharacter, setJumpToCharacter] = useState(\r\n undefined\r\n );\r\n const [isSelectMode, setIsSelectMode] = useState(false);\r\n\r\n useEffect(() => {\r\n dispatch(fetchQueueDetails({ all: true }));\r\n }, [dispatch]);\r\n\r\n const onRssSyncPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: RSS_SYNC,\r\n })\r\n );\r\n }, [dispatch]);\r\n\r\n const onSelectModePress = useCallback(() => {\r\n setIsSelectMode(!isSelectMode);\r\n }, [isSelectMode, setIsSelectMode]);\r\n\r\n const onTableOptionChange = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setMovieTableOption(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onViewSelect = useCallback(\r\n (value: string) => {\r\n dispatch(setMovieView({ view: value }));\r\n\r\n if (scrollerRef.current) {\r\n scrollerRef.current.scrollTo(0, 0);\r\n }\r\n },\r\n [scrollerRef, dispatch]\r\n );\r\n\r\n const onSortSelect = useCallback(\r\n (value: string) => {\r\n dispatch(setMovieSort({ sortKey: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onFilterSelect = useCallback(\r\n (value: string) => {\r\n dispatch(setMovieFilter({ selectedFilterKey: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onOptionsPress = useCallback(() => {\r\n setIsOptionsModalOpen(true);\r\n }, [setIsOptionsModalOpen]);\r\n\r\n const onOptionsModalClose = useCallback(() => {\r\n setIsOptionsModalOpen(false);\r\n }, [setIsOptionsModalOpen]);\r\n\r\n const onInteractiveImportPress = useCallback(() => {\r\n setIsInteractiveImportModalOpen(true);\r\n }, [setIsInteractiveImportModalOpen]);\r\n\r\n const onInteractiveImportModalClose = useCallback(() => {\r\n setIsInteractiveImportModalOpen(false);\r\n }, [setIsInteractiveImportModalOpen]);\r\n\r\n const onJumpBarItemPress = useCallback(\r\n (character: string) => {\r\n setJumpToCharacter(character);\r\n },\r\n [setJumpToCharacter]\r\n );\r\n\r\n const onScroll = useCallback(\r\n ({ scrollTop }: { scrollTop: number }) => {\r\n setJumpToCharacter(undefined);\r\n scrollPositions.movieIndex = scrollTop;\r\n },\r\n [setJumpToCharacter]\r\n );\r\n\r\n const jumpBarItems = useMemo(() => {\r\n // Reset if not sorting by sortTitle\r\n if (sortKey !== 'sortTitle') {\r\n return {\r\n order: [],\r\n };\r\n }\r\n\r\n const characters = items.reduce((acc: Record, item) => {\r\n let char = item.sortTitle.charAt(0);\r\n\r\n if (!isNaN(Number(char))) {\r\n char = '#';\r\n }\r\n\r\n if (char in acc) {\r\n acc[char] = acc[char] + 1;\r\n } else {\r\n acc[char] = 1;\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\n const order = Object.keys(characters).sort();\r\n\r\n // Reverse if sorting descending\r\n if (sortDirection === DESCENDING) {\r\n order.reverse();\r\n }\r\n\r\n return {\r\n characters,\r\n order,\r\n };\r\n }, [items, sortKey, sortDirection]);\r\n const ViewComponent = useMemo(() => getViewComponent(view), [view]);\r\n\r\n const isLoaded = !!(!error && isPopulated && items.length);\r\n const hasNoMovie = !totalItems;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n {view === 'table' ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n {isFetching && !isPopulated ? : null}\r\n\r\n {!isFetching && !!error ? (\r\n \r\n {translate('UnableToLoadMovies')}\r\n \r\n ) : null}\r\n\r\n {isLoaded ? (\r\n
\r\n \r\n\r\n \r\n
\r\n ) : null}\r\n\r\n {!error && isPopulated && !items.length ? (\r\n \r\n ) : null}\r\n \r\n\r\n {isLoaded && !!jumpBarItems.order.length ? (\r\n \r\n ) : null}\r\n
\r\n\r\n {isSelectMode ? : null}\r\n\r\n \r\n\r\n {view === 'posters' ? (\r\n \r\n ) : null}\r\n {view === 'overview' ? (\r\n \r\n ) : null}\r\n
\r\n
\r\n );\r\n}, 'movieIndex');\r\n\r\nexport default MovieIndex;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"ParseResultItem-item-fq1V3\",\"title\":\"ParseResultItem-title-Jvbx7\"};","import React, { ReactNode } from 'react';\r\nimport styles from './ParseResultItem.css';\r\n\r\ninterface ParseResultItemProps {\r\n title: string;\r\n data: string | number | ReactNode;\r\n}\r\n\r\nfunction ParseResultItem(props: ParseResultItemProps) {\r\n const { title, data } = props;\r\n\r\n return (\r\n
\r\n
{title}
\r\n
{data}
\r\n
\r\n );\r\n}\r\n\r\nexport default ParseResultItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"ParseResult-container-pfU9F\",\"column\":\"ParseResult-column-v9q7Q\"};","import React from 'react';\r\nimport { ParseModel } from 'App/State/ParseAppState';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport MovieFormats from 'Movie/MovieFormats';\r\nimport MovieTitleLink from 'Movie/MovieTitleLink';\r\nimport translate from 'Utilities/String/translate';\r\nimport ParseResultItem from './ParseResultItem';\r\nimport styles from './ParseResult.css';\r\n\r\ninterface ParseResultProps {\r\n item: ParseModel;\r\n}\r\n\r\nfunction ParseResult(props: ParseResultProps) {\r\n const { item } = props;\r\n const {\r\n customFormats,\r\n customFormatScore,\r\n languages,\r\n parsedMovieInfo,\r\n movie,\r\n } = item;\r\n\r\n const {\r\n releaseTitle,\r\n movieTitle,\r\n movieTitles,\r\n year,\r\n edition,\r\n releaseGroup,\r\n releaseHash,\r\n quality,\r\n tmdbId,\r\n imdbId,\r\n } = parsedMovieInfo;\r\n\r\n const finalLanguages = languages ?? parsedMovieInfo.languages;\r\n\r\n return (\r\n
\r\n
\r\n \r\n\r\n \r\n\r\n 0 ? year : '-'}\r\n />\r\n\r\n \r\n\r\n 0 ? movieTitles.join(', ') : '-'}\r\n />\r\n\r\n \r\n\r\n \r\n\r\n {tmdbId ? (\r\n \r\n ) : null}\r\n\r\n {imdbId ? (\r\n \r\n ) : null}\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n 1 && !quality.revision.isRepack\r\n ? 'True'\r\n : '-'\r\n }\r\n />\r\n\r\n \r\n
\r\n\r\n
\r\n 1 ? quality.revision.version : '-'\r\n }\r\n />\r\n\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n l.name).join(', ')}\r\n />\r\n
\r\n\r\n
\r\n \r\n ) : (\r\n '-'\r\n )\r\n }\r\n />\r\n\r\n {movie && movie.originalLanguage ? (\r\n \r\n ) : null}\r\n\r\n \r\n ) : (\r\n '-'\r\n )\r\n }\r\n />\r\n\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ParseResult;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"inputContainer\":\"ParseModalContent-inputContainer-l4Hf8\",\"inputIconContainer\":\"ParseModalContent-inputIconContainer-d9BJp\",\"input\":\"ParseModalContent-input-O1c7r TextInput-input-svfXu Input-input-KWeec\",\"clearButton\":\"ParseModalContent-clearButton-Z5YHE\",\"message\":\"ParseModalContent-message-ILozf\",\"helpText\":\"ParseModalContent-helpText-AH6wq\"};","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport TextInput from 'Components/Form/TextInput';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { icons } from 'Helpers/Props';\r\nimport { clear, fetch } from 'Store/Actions/parseActions';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport ParseResult from './ParseResult';\r\nimport parseStateSelector from './parseStateSelector';\r\nimport styles from './ParseModalContent.css';\r\n\r\ninterface ParseModalContentProps {\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction ParseModalContent(props: ParseModalContentProps) {\r\n const { onModalClose } = props;\r\n const { isFetching, error, item } = useSelector(parseStateSelector());\r\n\r\n const [title, setTitle] = useState('');\r\n const dispatch = useDispatch();\r\n\r\n const onInputChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n const trimmedValue = value.trim();\r\n\r\n setTitle(value);\r\n\r\n if (trimmedValue === '') {\r\n dispatch(clear());\r\n } else {\r\n dispatch(fetch({ title: trimmedValue }));\r\n }\r\n },\r\n [setTitle, dispatch]\r\n );\r\n\r\n const onClearPress = useCallback(() => {\r\n setTitle('');\r\n dispatch(clear());\r\n }, [setTitle, dispatch]);\r\n\r\n useEffect(\r\n () => {\r\n return () => {\r\n dispatch(clear());\r\n };\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n return (\r\n \r\n {translate('TestParsing')}\r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n
\r\n\r\n {isFetching ? : null}\r\n\r\n {!isFetching && !!error ? (\r\n
\r\n
\r\n {translate('ParseModalErrorParsing')}\r\n
\r\n
{getErrorMessage(error)}
\r\n
\r\n ) : null}\r\n\r\n {!isFetching && title && !error && !item.parsedMovieInfo ? (\r\n
\r\n {translate('ParseModalUnableToParse')}\r\n
\r\n ) : null}\r\n\r\n {!isFetching && !error && item.parsedMovieInfo ? (\r\n \r\n ) : null}\r\n\r\n {title ? null : (\r\n
\r\n
\r\n {translate('ParseModalHelpText')}\r\n
\r\n
{translate('ParseModalHelpTextDetails')}
\r\n
\r\n )}\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ParseModalContent;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport ParseAppState from 'App/State/ParseAppState';\r\n\r\nexport default function parseStateSelector() {\r\n return createSelector(\r\n (state: AppState) => state.parse,\r\n (parse: ParseAppState) => {\r\n return parse;\r\n }\r\n );\r\n}\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ParseModalContent from './ParseModalContent';\r\n\r\ninterface ParseModalProps {\r\n isOpen: boolean;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction ParseModal(props: ParseModalProps) {\r\n const { isOpen, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ParseModal;\r\n","import React, { useCallback, useState } from 'react';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport ParseModal from 'Parse/ParseModal';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction ParseToolbarButton() {\r\n const [isParseModalOpen, setIsParseModalOpen] = useState(false);\r\n\r\n const onOpenParseModalPress = useCallback(() => {\r\n setIsParseModalOpen(true);\r\n }, [setIsParseModalOpen]);\r\n\r\n const onParseModalClose = useCallback(() => {\r\n setIsParseModalOpen(false);\r\n }, [setIsParseModalOpen]);\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ParseToolbarButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"Card-card-aoesq\",\"underlay\":\"Card-underlay-bObAW\",\"overlay\":\"Card-overlay-WuJz0\"};","import React from 'react';\r\nimport Link, { LinkProps } from 'Components/Link/Link';\r\nimport styles from './Card.css';\r\n\r\ninterface CardProps extends Pick {\r\n // TODO: Consider using different properties for classname depending if it's overlaying content or not\r\n className?: string;\r\n overlayClassName?: string;\r\n overlayContent?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nfunction Card(props: CardProps) {\r\n const {\r\n className = styles.card,\r\n overlayClassName = styles.overlay,\r\n overlayContent = false,\r\n children,\r\n onPress,\r\n } = props;\r\n\r\n if (overlayContent) {\r\n return (\r\n
\r\n \r\n\r\n
{children}
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport default Card;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport { kinds } from 'Helpers/Props';\r\n\r\nfunction PageSectionContent(props) {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n errorMessage,\r\n children\r\n } = props;\r\n\r\n if (isFetching) {\r\n return (\r\n \r\n );\r\n } else if (!isFetching && !!error) {\r\n return (\r\n {errorMessage}\r\n );\r\n } else if (isPopulated && !error) {\r\n return (\r\n
{children}
\r\n );\r\n }\r\n\r\n return null;\r\n}\r\n\r\nPageSectionContent.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n errorMessage: PropTypes.string.isRequired,\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nexport default PageSectionContent;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ImportCustomFormatModalContent.css';\r\n\r\nclass ImportCustomFormatModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._importTimeout = null;\r\n\r\n this.state = {\r\n json: '',\r\n isSpinning: false,\r\n parseError: null\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._importTimeout) {\r\n clearTimeout(this._importTimeout);\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n onChange = (event) => {\r\n this.setState({ json: event.value });\r\n };\r\n\r\n onImportPress = () => {\r\n this.setState({ isSpinning: true });\r\n // this is a bodge as we need to register a isSpinning: true to get the spinner button to update\r\n this._importTimeout = setTimeout(this.doImport, 250);\r\n };\r\n\r\n doImport = () => {\r\n const parseError = this.props.onImportPress(this.state.json);\r\n this.setState({\r\n parseError,\r\n isSpinning: false\r\n });\r\n\r\n if (!parseError) {\r\n this.props.onModalClose();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n error,\r\n specificationsPopulated,\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n json,\r\n isSpinning,\r\n parseError\r\n } = this.state;\r\n\r\n return (\r\n \r\n\r\n \r\n {translate('ImportCustomFormat')}\r\n \r\n\r\n \r\n
\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('CustomFormatsLoadError')}\r\n \r\n }\r\n\r\n {\r\n !isFetching && !error && specificationsPopulated &&\r\n
\r\n \r\n \r\n {translate('CustomFormatJson')}\r\n \r\n \r\n \r\n
\r\n }\r\n
\r\n
\r\n \r\n \r\n {translate('Cancel')}\r\n \r\n \r\n {translate('Import')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nImportCustomFormatModalContent.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n specificationsPopulated: PropTypes.bool.isRequired,\r\n onImportPress: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportCustomFormatModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"ImportCustomFormatModalContent-input-pByC1 TextArea-input-E794O Input-input-KWeec\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { clearCustomFormatSpecificationPending, deleteAllCustomFormatSpecification, fetchCustomFormatSpecificationSchema, saveCustomFormatSpecification, selectCustomFormatSpecificationSchema, setCustomFormatSpecificationFieldValue, setCustomFormatSpecificationValue, setCustomFormatValue } from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport ImportCustomFormatModalContent from './ImportCustomFormatModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('customFormats'),\r\n (state) => state.settings.customFormatSpecifications,\r\n (advancedSettings, customFormat, specifications) => {\r\n return {\r\n advancedSettings,\r\n ...customFormat,\r\n specificationsPopulated: specifications.isPopulated,\r\n specificationSchema: specifications.schema\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n deleteAllCustomFormatSpecification,\r\n clearCustomFormatSpecificationPending,\r\n clearPendingChanges,\r\n saveCustomFormatSpecification,\r\n selectCustomFormatSpecificationSchema,\r\n setCustomFormatSpecificationFieldValue,\r\n setCustomFormatSpecificationValue,\r\n setCustomFormatValue,\r\n fetchCustomFormatSpecificationSchema\r\n};\r\n\r\nclass ImportCustomFormatModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchCustomFormatSpecificationSchema();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n clearPending = () => {\r\n this.props.clearPendingChanges({ section: 'settings.customFormats' });\r\n this.props.clearCustomFormatSpecificationPending();\r\n this.props.deleteAllCustomFormatSpecification();\r\n };\r\n\r\n onImportPress = (payload) => {\r\n\r\n this.clearPending();\r\n\r\n try {\r\n const cf = JSON.parse(payload);\r\n this.parseCf(cf);\r\n } catch (err) {\r\n this.clearPending();\r\n return {\r\n message: err.message,\r\n detailedMessage: err.stack\r\n };\r\n }\r\n\r\n return null;\r\n };\r\n\r\n parseCf = (cf) => {\r\n for (const [key, value] of Object.entries(cf)) {\r\n if (key === 'specifications') {\r\n for (const spec of value) {\r\n this.parseSpecification(spec);\r\n }\r\n } else if (key !== 'id') {\r\n this.props.setCustomFormatValue({ name: key, value });\r\n }\r\n }\r\n };\r\n\r\n parseSpecification = (spec) => {\r\n const selectedImplementation = _.find(this.props.specificationSchema, { implementation: spec.implementation });\r\n\r\n if (!selectedImplementation) {\r\n throw new Error(translate('CustomFormatUnknownCondition', {\r\n implementation: spec.implementation\r\n }));\r\n }\r\n\r\n this.props.selectCustomFormatSpecificationSchema({ implementation: spec.implementation });\r\n\r\n for (const [key, value] of Object.entries(spec)) {\r\n if (key === 'fields') {\r\n this.parseFields(value, selectedImplementation);\r\n } else if (key !== 'id') {\r\n this.props.setCustomFormatSpecificationValue({ name: key, value });\r\n }\r\n }\r\n\r\n this.props.saveCustomFormatSpecification();\r\n };\r\n\r\n parseFields = (fields, schema) => {\r\n for (const [key, value] of Object.entries(fields)) {\r\n const field = _.find(schema.fields, { name: key });\r\n if (!field) {\r\n throw new Error(translate('CustomFormatUnknownConditionOption', {\r\n key,\r\n implementation: schema.implementationName\r\n }));\r\n }\r\n\r\n this.props.setCustomFormatSpecificationFieldValue({ name: key, value });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nImportCustomFormatModalContentConnector.propTypes = {\r\n specificationSchema: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired,\r\n deleteAllCustomFormatSpecification: PropTypes.func.isRequired,\r\n clearCustomFormatSpecificationPending: PropTypes.func.isRequired,\r\n saveCustomFormatSpecification: PropTypes.func.isRequired,\r\n fetchCustomFormatSpecificationSchema: PropTypes.func.isRequired,\r\n selectCustomFormatSpecificationSchema: PropTypes.func.isRequired,\r\n setCustomFormatSpecificationValue: PropTypes.func.isRequired,\r\n setCustomFormatSpecificationFieldValue: PropTypes.func.isRequired,\r\n setCustomFormatValue: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ImportCustomFormatModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport ImportCustomFormatModalContentConnector from './ImportCustomFormatModalContentConnector';\r\n\r\nclass ImportCustomFormatModal extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n height: 'auto'\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onContentHeightChange = (height) => {\r\n if (this.state.height === 'auto' || height > this.state.height) {\r\n this.setState({ height });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nImportCustomFormatModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportCustomFormatModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\n\r\nclass AddSpecificationPresetMenuItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n name,\r\n implementation\r\n } = this.props;\r\n\r\n this.props.onPress({\r\n name,\r\n implementation\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n name,\r\n implementation,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {name}\r\n \r\n );\r\n }\r\n}\r\n\r\nAddSpecificationPresetMenuItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n implementation: PropTypes.string.isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddSpecificationPresetMenuItem;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Link from 'Components/Link/Link';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport { sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddSpecificationPresetMenuItem from './AddSpecificationPresetMenuItem';\r\nimport styles from './AddSpecificationItem.css';\r\n\r\nclass AddSpecificationItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onSpecificationSelect = () => {\r\n const {\r\n implementation\r\n } = this.props;\r\n\r\n this.props.onSpecificationSelect({ implementation });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n implementation,\r\n implementationName,\r\n infoLink,\r\n presets,\r\n onSpecificationSelect\r\n } = this.props;\r\n\r\n const hasPresets = !!presets && !!presets.length;\r\n\r\n return (\r\n \r\n \r\n\r\n
\r\n
\r\n {implementationName}\r\n
\r\n\r\n
\r\n {\r\n hasPresets &&\r\n \r\n \r\n {translate('Custom')}\r\n \r\n\r\n \r\n \r\n {translate('Presets')}\r\n \r\n\r\n \r\n {\r\n presets.map((preset, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n \r\n }\r\n\r\n \r\n {translate('MoreInfo')}\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nAddSpecificationItem.propTypes = {\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n infoLink: PropTypes.string.isRequired,\r\n presets: PropTypes.arrayOf(PropTypes.object),\r\n onSpecificationSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddSpecificationItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"specification\":\"AddSpecificationItem-specification-ifqAt Card-card-aoesq\",\"underlay\":\"AddSpecificationItem-underlay-w1aRk\",\"overlay\":\"AddSpecificationItem-overlay-5g_Xp\",\"name\":\"AddSpecificationItem-name-VwWrp\",\"actions\":\"AddSpecificationItem-actions-MMs3Y\",\"presetsMenu\":\"AddSpecificationItem-presetsMenu-oMDbn Menu-menu-Uz3_0\",\"presetsMenuButton\":\"AddSpecificationItem-presetsMenuButton-AfrGQ Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Button from 'Components/Link/Button';\r\nimport Link from 'Components/Link/Link';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddSpecificationItem from './AddSpecificationItem';\r\nimport styles from './AddSpecificationModalContent.css';\r\n\r\nclass AddSpecificationModalContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema,\r\n onSpecificationSelect,\r\n onModalClose\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n Add Condition\r\n \r\n\r\n \r\n {\r\n isSchemaFetching &&\r\n \r\n }\r\n\r\n {\r\n !isSchemaFetching && !!schemaError &&\r\n \r\n {translate('AddConditionError')}\r\n \r\n }\r\n\r\n {\r\n isSchemaPopulated && !schemaError &&\r\n
\r\n\r\n \r\n
\r\n {translate('SupportedCustomConditions')}\r\n
\r\n
\r\n {translate('VisitTheWikiForMoreDetails')}\r\n {translate('Wiki')}\r\n
\r\n
\r\n\r\n
\r\n {\r\n schema.map((specification) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n\r\n
\r\n }\r\n
\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nAddSpecificationModalContent.propTypes = {\r\n isSchemaFetching: PropTypes.bool.isRequired,\r\n isSchemaPopulated: PropTypes.bool.isRequired,\r\n schemaError: PropTypes.object,\r\n schema: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onSpecificationSelect: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddSpecificationModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"specifications\":\"AddSpecificationModalContent-specifications-x_4O_\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchCustomFormatSpecificationSchema, selectCustomFormatSpecificationSchema } from 'Store/Actions/settingsActions';\r\nimport AddSpecificationModalContent from './AddSpecificationModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.customFormatSpecifications,\r\n (specifications) => {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n } = specifications;\r\n\r\n return {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchCustomFormatSpecificationSchema,\r\n selectCustomFormatSpecificationSchema\r\n};\r\n\r\nclass AddSpecificationModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchCustomFormatSpecificationSchema();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onSpecificationSelect = ({ implementation, name }) => {\r\n this.props.selectCustomFormatSpecificationSchema({ implementation, presetName: name });\r\n this.props.onModalClose({ specificationSelected: true });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddSpecificationModalContentConnector.propTypes = {\r\n fetchCustomFormatSpecificationSchema: PropTypes.func.isRequired,\r\n selectCustomFormatSpecificationSchema: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddSpecificationModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddSpecificationModalContentConnector from './AddSpecificationModalContentConnector';\r\n\r\nfunction AddSpecificationModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddSpecificationModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddSpecificationModal;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport ProviderFieldFormGroup from 'Components/Form/ProviderFieldFormGroup';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditSpecificationModalContent.css';\r\n\r\nfunction EditSpecificationModalContent(props) {\r\n const {\r\n advancedSettings,\r\n item,\r\n onInputChange,\r\n onFieldChange,\r\n onCancelPress,\r\n onSavePress,\r\n onDeleteSpecificationPress,\r\n ...otherProps\r\n } = props;\r\n\r\n const {\r\n id,\r\n implementationName,\r\n name,\r\n negate,\r\n required,\r\n fields\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditConditionImplementation', { implementationName }) : translate('AddConditionImplementation', { implementationName })}\r\n \r\n\r\n \r\n \r\n {\r\n fields && fields.some((x) => x.label === translate('CustomFormatsSpecificationRegularExpression')) &&\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n\r\n \r\n \r\n {translate('Name')}\r\n \r\n\r\n \r\n \r\n\r\n {\r\n fields && fields.map((field) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n \r\n {translate('Negate')}\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('Required')}\r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n {\r\n id &&\r\n \r\n {translate('Delete')}\r\n \r\n }\r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nEditSpecificationModalContent.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n item: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onFieldChange: PropTypes.func.isRequired,\r\n onCancelPress: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onDeleteSpecificationPress: PropTypes.func\r\n};\r\n\r\nexport default EditSpecificationModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditSpecificationModalContent-deleteButton-c9rQ4 Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearCustomFormatSpecificationPending, saveCustomFormatSpecification, setCustomFormatSpecificationFieldValue, setCustomFormatSpecificationValue } from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditSpecificationModalContent from './EditSpecificationModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('customFormatSpecifications'),\r\n (advancedSettings, specification) => {\r\n return {\r\n advancedSettings,\r\n ...specification\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setCustomFormatSpecificationValue,\r\n setCustomFormatSpecificationFieldValue,\r\n saveCustomFormatSpecification,\r\n clearCustomFormatSpecificationPending\r\n};\r\n\r\nclass EditSpecificationModalContentConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setCustomFormatSpecificationValue({ name, value });\r\n };\r\n\r\n onFieldChange = ({ name, value }) => {\r\n this.props.setCustomFormatSpecificationFieldValue({ name, value });\r\n };\r\n\r\n onCancelPress = () => {\r\n this.props.clearCustomFormatSpecificationPending();\r\n this.props.onModalClose();\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveCustomFormatSpecification({ id: this.props.id });\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditSpecificationModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n item: PropTypes.object.isRequired,\r\n setCustomFormatSpecificationValue: PropTypes.func.isRequired,\r\n setCustomFormatSpecificationFieldValue: PropTypes.func.isRequired,\r\n clearCustomFormatSpecificationPending: PropTypes.func.isRequired,\r\n saveCustomFormatSpecification: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditSpecificationModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport EditSpecificationModalContentConnector from './EditSpecificationModalContentConnector';\r\n\r\nfunction EditSpecificationModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditSpecificationModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditSpecificationModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditSpecificationModal from './EditSpecificationModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n const section = 'settings.customFormatSpecifications';\r\n\r\n return {\r\n dispatchClearPendingChanges() {\r\n dispatch(clearPendingChanges({ section }));\r\n }\r\n };\r\n}\r\n\r\nclass EditSpecificationModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.dispatchClearPendingChanges();\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n dispatchClearPendingChanges,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditSpecificationModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(null, createMapDispatchToProps)(EditSpecificationModalConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditSpecificationModalConnector from './EditSpecificationModal';\r\nimport styles from './Specification.css';\r\n\r\nclass Specification extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditSpecificationModalOpen: false,\r\n isDeleteSpecificationModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditSpecificationPress = () => {\r\n this.setState({ isEditSpecificationModalOpen: true });\r\n };\r\n\r\n onEditSpecificationModalClose = () => {\r\n this.setState({ isEditSpecificationModalOpen: false });\r\n };\r\n\r\n onDeleteSpecificationPress = () => {\r\n this.setState({\r\n isEditSpecificationModalOpen: false,\r\n isDeleteSpecificationModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteSpecificationModalClose = () => {\r\n this.setState({ isDeleteSpecificationModalOpen: false });\r\n };\r\n\r\n onCloneSpecificationPress = () => {\r\n this.props.onCloneSpecificationPress(this.props.id);\r\n };\r\n\r\n onConfirmDeleteSpecification = () => {\r\n this.props.onConfirmDeleteSpecification(this.props.id);\r\n };\r\n\r\n //\r\n // Lifecycle\r\n\r\n render() {\r\n const {\r\n id,\r\n implementationName,\r\n name,\r\n required,\r\n negate\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n
\r\n {name}\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n {\r\n negate &&\r\n \r\n }\r\n\r\n {\r\n required &&\r\n \r\n }\r\n
\r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nSpecification.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n negate: PropTypes.bool.isRequired,\r\n required: PropTypes.bool.isRequired,\r\n fields: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteSpecification: PropTypes.func.isRequired,\r\n onCloneSpecificationPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Specification;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"customFormat\":\"Specification-customFormat-eMwyx Card-card-aoesq\",\"nameContainer\":\"Specification-nameContainer-RnvUM\",\"name\":\"Specification-name-CCiQR\",\"cloneButton\":\"Specification-cloneButton-u1JT_ IconButton-button-t4C5V Link-link-RInnp\",\"labels\":\"Specification-labels-KH_af\",\"tooltipLabel\":\"Specification-tooltipLabel-ffdMM Label-label-DYldh\"};","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditCustomFormatModalContent-deleteButton-YRaYD Button-button-paJ9a Link-link-RInnp\",\"rightButtons\":\"EditCustomFormatModalContent-rightButtons-cMlfm\",\"addSpecification\":\"EditCustomFormatModalContent-addSpecification-ziqyR CustomFormat-customFormat-bQGEb Card-card-aoesq\",\"center\":\"EditCustomFormatModalContent-center-CwrAN\",\"customFormats\":\"EditCustomFormatModalContent-customFormats-qVU9p\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { icons, inputTypes, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport ImportCustomFormatModal from './ImportCustomFormatModal';\r\nimport AddSpecificationModal from './Specifications/AddSpecificationModal';\r\nimport EditSpecificationModalConnector from './Specifications/EditSpecificationModalConnector';\r\nimport Specification from './Specifications/Specification';\r\nimport styles from './EditCustomFormatModalContent.css';\r\n\r\nclass EditCustomFormatModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isAddSpecificationModalOpen: false,\r\n isEditSpecificationModalOpen: false,\r\n isImportCustomFormatModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddSpecificationPress = () => {\r\n this.setState({ isAddSpecificationModalOpen: true });\r\n };\r\n\r\n onAddSpecificationModalClose = ({ specificationSelected = false } = {}) => {\r\n this.setState({\r\n isAddSpecificationModalOpen: false,\r\n isEditSpecificationModalOpen: specificationSelected\r\n });\r\n };\r\n\r\n onEditSpecificationModalClose = () => {\r\n this.setState({ isEditSpecificationModalOpen: false });\r\n };\r\n\r\n onImportPress = () => {\r\n this.setState({ isImportCustomFormatModalOpen: true });\r\n };\r\n\r\n onImportCustomFormatModalClose = () => {\r\n this.setState({ isImportCustomFormatModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n item,\r\n specificationsPopulated,\r\n specifications,\r\n onInputChange,\r\n onSavePress,\r\n onModalClose,\r\n onDeleteCustomFormatPress,\r\n onCloneSpecificationPress,\r\n onConfirmDeleteSpecification,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isAddSpecificationModalOpen,\r\n isEditSpecificationModalOpen,\r\n isImportCustomFormatModalOpen\r\n } = this.state;\r\n\r\n const {\r\n id,\r\n name,\r\n includeCustomFormatWhenRenaming\r\n } = item;\r\n\r\n return (\r\n \r\n\r\n \r\n {id ? translate('EditCustomFormat') : translate('AddCustomFormat')}\r\n \r\n\r\n \r\n
\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('AddCustomFormatError')}\r\n \r\n }\r\n\r\n {\r\n !isFetching && !error && specificationsPopulated &&\r\n
\r\n \r\n \r\n \r\n {translate('Name')}\r\n \r\n\r\n \r\n \r\n\r\n \r\n {translate('IncludeCustomFormatWhenRenaming')}\r\n\r\n \r\n \r\n \r\n\r\n
\r\n \r\n
\r\n {translate('CustomFormatsSettingsTriggerInfo')}\r\n
\r\n
\r\n
\r\n {\r\n specifications.map((tag) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n
\r\n }\r\n
\r\n
\r\n \r\n
\r\n {\r\n id &&\r\n \r\n {translate('Delete')}\r\n \r\n }\r\n\r\n \r\n {translate('Import')}\r\n \r\n
\r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nEditCustomFormatModalContent.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n specificationsPopulated: PropTypes.bool.isRequired,\r\n specifications: PropTypes.arrayOf(PropTypes.object),\r\n onInputChange: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onContentHeightChange: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onDeleteCustomFormatPress: PropTypes.func,\r\n onCloneSpecificationPress: PropTypes.func.isRequired,\r\n onConfirmDeleteSpecification: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditCustomFormatModalContent;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { cloneCustomFormatSpecification, deleteCustomFormatSpecification, fetchCustomFormatSpecifications, saveCustomFormat, setCustomFormatValue } from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditCustomFormatModalContent from './EditCustomFormatModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('customFormats'),\r\n (state) => state.settings.customFormatSpecifications,\r\n (advancedSettings, customFormat, specifications) => {\r\n return {\r\n advancedSettings,\r\n ...customFormat,\r\n specificationsPopulated: specifications.isPopulated,\r\n specifications: specifications.items\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setCustomFormatValue,\r\n saveCustomFormat,\r\n fetchCustomFormatSpecifications,\r\n cloneCustomFormatSpecification,\r\n deleteCustomFormatSpecification\r\n};\r\n\r\nclass EditCustomFormatModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n id,\r\n tagsFromId\r\n } = this.props;\r\n this.props.fetchCustomFormatSpecifications({ id: tagsFromId || id });\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {\r\n this.props.onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setCustomFormatValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveCustomFormat({ id: this.props.id });\r\n };\r\n\r\n onCloneSpecificationPress = (id) => {\r\n this.props.cloneCustomFormatSpecification({ id });\r\n };\r\n\r\n onConfirmDeleteSpecification = (id) => {\r\n this.props.deleteCustomFormatSpecification({ id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditCustomFormatModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n tagsFromId: PropTypes.number,\r\n isFetching: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n setCustomFormatValue: PropTypes.func.isRequired,\r\n saveCustomFormat: PropTypes.func.isRequired,\r\n fetchCustomFormatSpecifications: PropTypes.func.isRequired,\r\n cloneCustomFormatSpecification: PropTypes.func.isRequired,\r\n deleteCustomFormatSpecification: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditCustomFormatModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport EditCustomFormatModalContentConnector from './EditCustomFormatModalContentConnector';\r\n\r\nclass EditCustomFormatModal extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n height: 'auto'\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onContentHeightChange = (height) => {\r\n if (this.state.height === 'auto' || height > this.state.height) {\r\n this.setState({ height });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nEditCustomFormatModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditCustomFormatModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditCustomFormatModal from './EditCustomFormatModal';\r\nimport EditCustomFormatModalContentConnector from './EditCustomFormatModalContentConnector';\r\n\r\nfunction mapStateToProps() {\r\n return {};\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n clearPendingChanges\r\n};\r\n\r\nclass EditCustomFormatModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.clearPendingChanges({ section: 'settings.customFormats' });\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditCustomFormatModalConnector.propTypes = {\r\n ...EditCustomFormatModalContentConnector.propTypes,\r\n onModalClose: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(EditCustomFormatModalConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Button from 'Components/Link/Button';\r\nimport ClipboardButton from 'Components/Link/ClipboardButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ExportCustomFormatModalContent.css';\r\n\r\nclass ExportCustomFormatModalContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n error,\r\n json,\r\n specificationsPopulated,\r\n onModalClose\r\n } = this.props;\r\n\r\n return (\r\n \r\n\r\n \r\n {translate('ExportCustomFormat')}\r\n \r\n\r\n \r\n
\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('CustomFormatsLoadError')}\r\n \r\n }\r\n\r\n {\r\n !isFetching && !error && specificationsPopulated &&\r\n
\r\n
\r\n                    {json}\r\n                  
\r\n
\r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nExportCustomFormatModalContent.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n json: PropTypes.string.isRequired,\r\n specificationsPopulated: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ExportCustomFormatModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"ExportCustomFormatModalContent-button-eh1Jq Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchCustomFormatSpecifications } from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport ExportCustomFormatModalContent from './ExportCustomFormatModalContent';\r\n\r\nconst omittedProperties = ['id', 'implementationName', 'infoLink'];\r\n\r\nfunction replacer(key, value) {\r\n if (omittedProperties.includes(key)) {\r\n return undefined;\r\n }\r\n\r\n // provider fields\r\n if (key === 'fields') {\r\n return value.reduce((acc, cur) => {\r\n acc[cur.name] = cur.value;\r\n return acc;\r\n }, {});\r\n }\r\n\r\n // regular setting values\r\n if (value.hasOwnProperty('value')) {\r\n return value.value;\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('customFormats'),\r\n (state) => state.settings.customFormatSpecifications,\r\n (advancedSettings, customFormat, specifications) => {\r\n const json = customFormat.item ? JSON.stringify(customFormat.item, replacer, 2) : '';\r\n return {\r\n advancedSettings,\r\n ...customFormat,\r\n json,\r\n specificationsPopulated: specifications.isPopulated,\r\n specifications: specifications.items\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchCustomFormatSpecifications\r\n};\r\n\r\nclass ExportCustomFormatModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n id\r\n } = this.props;\r\n this.props.fetchCustomFormatSpecifications({ id });\r\n }\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nExportCustomFormatModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n fetchCustomFormatSpecifications: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ExportCustomFormatModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport ExportCustomFormatModalContentConnector from './ExportCustomFormatModalContentConnector';\r\n\r\nclass ExportCustomFormatModal extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n height: 'auto'\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onContentHeightChange = (height) => {\r\n if (this.state.height === 'auto' || height > this.state.height) {\r\n this.setState({ height });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nExportCustomFormatModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ExportCustomFormatModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"customFormat\":\"CustomFormat-customFormat-bQGEb Card-card-aoesq\",\"nameContainer\":\"CustomFormat-nameContainer-kd6SP\",\"name\":\"CustomFormat-name-tDmWt\",\"buttons\":\"CustomFormat-buttons-eI3y1\",\"cloneButton\":\"CustomFormat-cloneButton-Alwpt IconButton-button-t4C5V Link-link-RInnp\",\"formats\":\"CustomFormat-formats-z88F4\",\"tooltipLabel\":\"CustomFormat-tooltipLabel-UmJ9l Label-label-DYldh\",\"label\":\"CustomFormat-label-mIDsS Label-label-DYldh\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditCustomFormatModalConnector from './EditCustomFormatModalConnector';\r\nimport ExportCustomFormatModal from './ExportCustomFormatModal';\r\nimport styles from './CustomFormat.css';\r\n\r\nclass CustomFormat extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditCustomFormatModalOpen: false,\r\n isExportCustomFormatModalOpen: false,\r\n isDeleteCustomFormatModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditCustomFormatPress = () => {\r\n this.setState({ isEditCustomFormatModalOpen: true });\r\n };\r\n\r\n onEditCustomFormatModalClose = () => {\r\n this.setState({ isEditCustomFormatModalOpen: false });\r\n };\r\n\r\n onExportCustomFormatPress = () => {\r\n this.setState({ isExportCustomFormatModalOpen: true });\r\n };\r\n\r\n onExportCustomFormatModalClose = () => {\r\n this.setState({ isExportCustomFormatModalOpen: false });\r\n };\r\n\r\n onDeleteCustomFormatPress = () => {\r\n this.setState({\r\n isEditCustomFormatModalOpen: false,\r\n isDeleteCustomFormatModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteCustomFormatModalClose = () => {\r\n this.setState({ isDeleteCustomFormatModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteCustomFormat = () => {\r\n this.props.onConfirmDeleteCustomFormat(this.props.id);\r\n };\r\n\r\n onCloneCustomFormatPress = () => {\r\n const {\r\n id,\r\n onCloneCustomFormatPress\r\n } = this.props;\r\n\r\n onCloneCustomFormatPress(id);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n name,\r\n specifications,\r\n isDeleting\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n
\r\n {name}\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n\r\n
\r\n {\r\n specifications.map((item, index) => {\r\n if (!item) {\r\n return null;\r\n }\r\n\r\n let kind = kinds.DEFAULT;\r\n if (item.required) {\r\n kind = kinds.SUCCESS;\r\n }\r\n if (item.negate) {\r\n kind = kinds.DANGER;\r\n }\r\n\r\n return (\r\n \r\n {item.name}\r\n \r\n );\r\n })\r\n }\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nCustomFormat.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n specifications: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isDeleting: PropTypes.bool.isRequired,\r\n onConfirmDeleteCustomFormat: PropTypes.func.isRequired,\r\n onCloneCustomFormatPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CustomFormat;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport CustomFormat from './CustomFormat';\r\nimport EditCustomFormatModalConnector from './EditCustomFormatModalConnector';\r\nimport styles from './CustomFormats.css';\r\n\r\nclass CustomFormats extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isCustomFormatModalOpen: false,\r\n tagsFromId: undefined\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onCloneCustomFormatPress = (id) => {\r\n this.props.onCloneCustomFormatPress(id);\r\n this.setState({\r\n isCustomFormatModalOpen: true,\r\n tagsFromId: id\r\n });\r\n };\r\n\r\n onEditCustomFormatPress = () => {\r\n this.setState({ isCustomFormatModalOpen: true });\r\n };\r\n\r\n onModalClose = () => {\r\n this.setState({\r\n isCustomFormatModalOpen: false,\r\n tagsFromId: undefined\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n isDeleting,\r\n onConfirmDeleteCustomFormat,\r\n onCloneCustomFormatPress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nCustomFormats.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isDeleting: PropTypes.bool.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteCustomFormat: PropTypes.func.isRequired,\r\n onCloneCustomFormatPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CustomFormats;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"customFormats\":\"CustomFormats-customFormats-B875M\",\"addCustomFormat\":\"CustomFormats-addCustomFormat-RgATG CustomFormat-customFormat-bQGEb Card-card-aoesq\",\"center\":\"CustomFormats-center-W2JPX\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { cloneCustomFormat, deleteCustomFormat, fetchCustomFormats } from 'Store/Actions/settingsActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport CustomFormats from './CustomFormats';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.customFormats', sortByProp('name')),\r\n (customFormats) => customFormats\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchCustomFormats: fetchCustomFormats,\r\n dispatchDeleteCustomFormat: deleteCustomFormat,\r\n dispatchCloneCustomFormat: cloneCustomFormat\r\n};\r\n\r\nclass CustomFormatsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.dispatchFetchCustomFormats();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteCustomFormat = (id) => {\r\n this.props.dispatchDeleteCustomFormat({ id });\r\n };\r\n\r\n onCloneCustomFormatPress = (id) => {\r\n this.props.dispatchCloneCustomFormat({ id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCustomFormatsConnector.propTypes = {\r\n dispatchFetchCustomFormats: PropTypes.func.isRequired,\r\n dispatchDeleteCustomFormat: PropTypes.func.isRequired,\r\n dispatchCloneCustomFormat: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(CustomFormatsConnector);\r\n","import React, { useCallback, useState } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ManageCustomFormatsEditModalContent.css';\r\n\r\ninterface SavePayload {\r\n includeCustomFormatWhenRenaming?: boolean;\r\n}\r\n\r\ninterface ManageCustomFormatsEditModalContentProps {\r\n customFormatIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nconst NO_CHANGE = 'noChange';\r\n\r\nconst enableOptions = [\r\n {\r\n key: NO_CHANGE,\r\n get value() {\r\n return translate('NoChange');\r\n },\r\n isDisabled: true,\r\n },\r\n {\r\n key: 'enabled',\r\n get value() {\r\n return translate('Enabled');\r\n },\r\n },\r\n {\r\n key: 'disabled',\r\n get value() {\r\n return translate('Disabled');\r\n },\r\n },\r\n];\r\n\r\nfunction ManageCustomFormatsEditModalContent(\r\n props: ManageCustomFormatsEditModalContentProps\r\n) {\r\n const { customFormatIds, onSavePress, onModalClose } = props;\r\n\r\n const [includeCustomFormatWhenRenaming, setIncludeCustomFormatWhenRenaming] =\r\n useState(NO_CHANGE);\r\n\r\n const save = useCallback(() => {\r\n let hasChanges = false;\r\n const payload: SavePayload = {};\r\n\r\n if (includeCustomFormatWhenRenaming !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.includeCustomFormatWhenRenaming =\r\n includeCustomFormatWhenRenaming === 'enabled';\r\n }\r\n\r\n if (hasChanges) {\r\n onSavePress(payload);\r\n }\r\n\r\n onModalClose();\r\n }, [includeCustomFormatWhenRenaming, onSavePress, onModalClose]);\r\n\r\n const onInputChange = useCallback(\r\n ({ name, value }: { name: string; value: string }) => {\r\n switch (name) {\r\n case 'includeCustomFormatWhenRenaming':\r\n setIncludeCustomFormatWhenRenaming(value);\r\n break;\r\n default:\r\n console.warn(\r\n `EditCustomFormatsModalContent Unknown Input: '${name}'`\r\n );\r\n }\r\n },\r\n []\r\n );\r\n\r\n const selectedCount = customFormatIds.length;\r\n\r\n return (\r\n \r\n {translate('EditSelectedCustomFormats')}\r\n\r\n \r\n \r\n {translate('IncludeCustomFormatWhenRenaming')}\r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n {translate('CountCustomFormatsSelected', {\r\n count: selectedCount,\r\n })}\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ManageCustomFormatsEditModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalFooter\":\"ManageCustomFormatsEditModalContent-modalFooter-zjkFe ModalFooter-modalFooter-wjkx5\",\"selected\":\"ManageCustomFormatsEditModalContent-selected-boz8Z\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ManageCustomFormatsEditModalContent from './ManageCustomFormatsEditModalContent';\r\n\r\ninterface ManageCustomFormatsEditModalProps {\r\n isOpen: boolean;\r\n customFormatIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageCustomFormatsEditModal(\r\n props: ManageCustomFormatsEditModalProps\r\n) {\r\n const { isOpen, customFormatIds, onSavePress, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageCustomFormatsEditModal;\r\n","import React, { useCallback, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport Column from 'Components/Table/Column';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport { icons } from 'Helpers/Props';\r\nimport { deleteCustomFormat } from 'Store/Actions/settingsActions';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditCustomFormatModalConnector from '../EditCustomFormatModalConnector';\r\nimport styles from './ManageCustomFormatsModalRow.css';\r\n\r\ninterface ManageCustomFormatsModalRowProps {\r\n id: number;\r\n name: string;\r\n includeCustomFormatWhenRenaming: boolean;\r\n columns: Column[];\r\n isSelected?: boolean;\r\n onSelectedChange(result: SelectStateInputProps): void;\r\n}\r\n\r\nfunction isDeletingSelector() {\r\n return createSelector(\r\n (state: AppState) => state.settings.customFormats.isDeleting,\r\n (isDeleting) => {\r\n return isDeleting;\r\n }\r\n );\r\n}\r\n\r\nfunction ManageCustomFormatsModalRow(props: ManageCustomFormatsModalRowProps) {\r\n const {\r\n id,\r\n isSelected,\r\n name,\r\n includeCustomFormatWhenRenaming,\r\n onSelectedChange,\r\n } = props;\r\n\r\n const dispatch = useDispatch();\r\n const isDeleting = useSelector(isDeletingSelector());\r\n\r\n const [isEditCustomFormatModalOpen, setIsEditCustomFormatModalOpen] =\r\n useState(false);\r\n\r\n const [isDeleteCustomFormatModalOpen, setIsDeleteCustomFormatModalOpen] =\r\n useState(false);\r\n\r\n const handlelectedChange = useCallback(\r\n (result: SelectStateInputProps) => {\r\n onSelectedChange({\r\n ...result,\r\n });\r\n },\r\n [onSelectedChange]\r\n );\r\n\r\n const handleEditCustomFormatModalOpen = useCallback(() => {\r\n setIsEditCustomFormatModalOpen(true);\r\n }, [setIsEditCustomFormatModalOpen]);\r\n\r\n const handleEditCustomFormatModalClose = useCallback(() => {\r\n setIsEditCustomFormatModalOpen(false);\r\n }, [setIsEditCustomFormatModalOpen]);\r\n\r\n const handleDeleteCustomFormatPress = useCallback(() => {\r\n setIsEditCustomFormatModalOpen(false);\r\n setIsDeleteCustomFormatModalOpen(true);\r\n }, [setIsEditCustomFormatModalOpen, setIsDeleteCustomFormatModalOpen]);\r\n\r\n const handleDeleteCustomFormatModalClose = useCallback(() => {\r\n setIsDeleteCustomFormatModalOpen(false);\r\n }, [setIsDeleteCustomFormatModalOpen]);\r\n\r\n const handleConfirmDeleteCustomFormat = useCallback(() => {\r\n dispatch(deleteCustomFormat({ id }));\r\n }, [id, dispatch]);\r\n\r\n return (\r\n \r\n \r\n\r\n {name}\r\n\r\n \r\n {includeCustomFormatWhenRenaming ? translate('Yes') : translate('No')}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageCustomFormatsModalRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"name\":\"ManageCustomFormatsModalRow-name-KDdaF TableRowCell-cell-giPrj\",\"includeCustomFormatWhenRenaming\":\"ManageCustomFormatsModalRow-includeCustomFormatWhenRenaming-IUUOz TableRowCell-cell-giPrj\",\"actions\":\"ManageCustomFormatsModalRow-actions-wlLi1 TableRowCell-cell-giPrj\"};","import React, { useCallback, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { CustomFormatAppState } from 'App/State/SettingsAppState';\r\nimport Alert from 'Components/Alert';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport useSelectState from 'Helpers/Hooks/useSelectState';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { SortDirection } from 'Helpers/Props/sortDirections';\r\nimport {\r\n bulkDeleteCustomFormats,\r\n bulkEditCustomFormats,\r\n setManageCustomFormatsSort,\r\n} from 'Store/Actions/settingsActions';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport ManageCustomFormatsEditModal from './Edit/ManageCustomFormatsEditModal';\r\nimport ManageCustomFormatsModalRow from './ManageCustomFormatsModalRow';\r\nimport styles from './ManageCustomFormatsModalContent.css';\r\n\r\n// TODO: This feels janky to do, but not sure of a better way currently\r\ntype OnSelectedChangeCallback = React.ComponentProps<\r\n typeof ManageCustomFormatsModalRow\r\n>['onSelectedChange'];\r\n\r\nconst COLUMNS = [\r\n {\r\n name: 'name',\r\n label: () => translate('Name'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'includeCustomFormatWhenRenaming',\r\n label: () => translate('IncludeCustomFormatWhenRenaming'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'actions',\r\n label: '',\r\n isVisible: true,\r\n },\r\n];\r\n\r\ninterface ManageCustomFormatsModalContentProps {\r\n onModalClose(): void;\r\n sortKey?: string;\r\n sortDirection?: SortDirection;\r\n}\r\n\r\nfunction ManageCustomFormatsModalContent(\r\n props: ManageCustomFormatsModalContentProps\r\n) {\r\n const { onModalClose } = props;\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n isDeleting,\r\n isSaving,\r\n error,\r\n items,\r\n sortKey,\r\n sortDirection,\r\n }: CustomFormatAppState = useSelector(\r\n createClientSideCollectionSelector('settings.customFormats')\r\n );\r\n const dispatch = useDispatch();\r\n\r\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\r\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\r\n\r\n const [selectState, setSelectState] = useSelectState();\r\n\r\n const { allSelected, allUnselected, selectedState } = selectState;\r\n\r\n const selectedIds: number[] = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const selectedCount = selectedIds.length;\r\n\r\n const onSortPress = useCallback(\r\n (value: string) => {\r\n dispatch(setManageCustomFormatsSort({ sortKey: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onDeletePress = useCallback(() => {\r\n setIsDeleteModalOpen(true);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onDeleteModalClose = useCallback(() => {\r\n setIsDeleteModalOpen(false);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onEditPress = useCallback(() => {\r\n setIsEditModalOpen(true);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onEditModalClose = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onConfirmDelete = useCallback(() => {\r\n dispatch(bulkDeleteCustomFormats({ ids: selectedIds }));\r\n setIsDeleteModalOpen(false);\r\n }, [selectedIds, dispatch]);\r\n\r\n const onSavePress = useCallback(\r\n (payload: object) => {\r\n setIsEditModalOpen(false);\r\n\r\n dispatch(\r\n bulkEditCustomFormats({\r\n ids: selectedIds,\r\n ...payload,\r\n })\r\n );\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onSelectAllChange = useCallback(\r\n ({ value }: SelectStateInputProps) => {\r\n setSelectState({ type: value ? 'selectAll' : 'unselectAll', items });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const onSelectedChange = useCallback(\r\n ({ id, value, shiftKey = false }) => {\r\n setSelectState({\r\n type: 'toggleSelected',\r\n items,\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const errorMessage = getErrorMessage(error, 'Unable to load custom formats.');\r\n const anySelected = selectedCount > 0;\r\n\r\n return (\r\n \r\n {translate('ManageCustomFormats')}\r\n \r\n {isFetching ? : null}\r\n\r\n {error ?
{errorMessage}
: null}\r\n\r\n {isPopulated && !error && !items.length ? (\r\n {translate('NoCustomFormatsFound')}\r\n ) : null}\r\n\r\n {isPopulated && !!items.length && !isFetching && !isFetching ? (\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n ) : null}\r\n
\r\n\r\n \r\n
\r\n \r\n {translate('Delete')}\r\n \r\n\r\n \r\n {translate('Edit')}\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ManageCustomFormatsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"leftButtons\":\"ManageCustomFormatsModalContent-leftButtons-sXYPu\",\"rightButtons\":\"ManageCustomFormatsModalContent-rightButtons-dvVA5\",\"deleteButton\":\"ManageCustomFormatsModalContent-deleteButton-h3hL3 Button-button-paJ9a Link-link-RInnp\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ManageCustomFormatsModalContent from './ManageCustomFormatsModalContent';\r\n\r\ninterface ManageCustomFormatsModalProps {\r\n isOpen: boolean;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageCustomFormatsModal(props: ManageCustomFormatsModalProps) {\r\n const { isOpen, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageCustomFormatsModal;\r\n","import React from 'react';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport ManageCustomFormatsModal from './ManageCustomFormatsModal';\r\n\r\nfunction ManageCustomFormatsToolbarButton() {\r\n const [isManageModalOpen, openManageModal, closeManageModal] =\r\n useModalOpenState(false);\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageCustomFormatsToolbarButton;\r\n","import React from 'react';\r\nimport { DndProvider } from 'react-dnd';\r\nimport { HTML5Backend } from 'react-dnd-html5-backend';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport ParseToolbarButton from 'Parse/ParseToolbarButton';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport CustomFormatsConnector from './CustomFormats/CustomFormatsConnector';\r\nimport ManageCustomFormatsToolbarButton from './CustomFormats/Manage/ManageCustomFormatsToolbarButton';\r\n\r\nfunction CustomFormatSettingsPage() {\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n }\r\n />\r\n\r\n \r\n {/* TODO: Upgrade react-dnd to get typings, we're 2 major versions behind */}\r\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\r\n {/* @ts-ignore */}\r\n \r\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\r\n {/* @ts-ignore */}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default CustomFormatSettingsPage;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\n\r\nclass AddDownloadClientPresetMenuItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n name,\r\n implementation\r\n } = this.props;\r\n\r\n this.props.onPress({\r\n name,\r\n implementation\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n name,\r\n implementation,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {name}\r\n \r\n );\r\n }\r\n}\r\n\r\nAddDownloadClientPresetMenuItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n implementation: PropTypes.string.isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddDownloadClientPresetMenuItem;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Link from 'Components/Link/Link';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport { sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddDownloadClientPresetMenuItem from './AddDownloadClientPresetMenuItem';\r\nimport styles from './AddDownloadClientItem.css';\r\n\r\nclass AddDownloadClientItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onDownloadClientSelect = () => {\r\n const {\r\n implementation\r\n } = this.props;\r\n\r\n this.props.onDownloadClientSelect({ implementation });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n implementation,\r\n implementationName,\r\n infoLink,\r\n presets,\r\n onDownloadClientSelect\r\n } = this.props;\r\n\r\n const hasPresets = !!presets && !!presets.length;\r\n\r\n return (\r\n \r\n \r\n\r\n
\r\n
\r\n {implementationName}\r\n
\r\n\r\n
\r\n {\r\n hasPresets &&\r\n \r\n \r\n {translate('Custom')}\r\n \r\n\r\n \r\n \r\n {translate('Presets')}\r\n \r\n\r\n \r\n {\r\n presets.map((preset) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n \r\n }\r\n\r\n \r\n {translate('MoreInfo')}\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nAddDownloadClientItem.propTypes = {\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n infoLink: PropTypes.string.isRequired,\r\n presets: PropTypes.arrayOf(PropTypes.object),\r\n onDownloadClientSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddDownloadClientItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"downloadClient\":\"AddDownloadClientItem-downloadClient-oMifk Card-card-aoesq\",\"underlay\":\"AddDownloadClientItem-underlay-oxdhA\",\"overlay\":\"AddDownloadClientItem-overlay-rlyny\",\"name\":\"AddDownloadClientItem-name-iXjGD\",\"actions\":\"AddDownloadClientItem-actions-qbQIO\",\"presetsMenu\":\"AddDownloadClientItem-presetsMenu-V3Cfm Menu-menu-Uz3_0\",\"presetsMenuButton\":\"AddDownloadClientItem-presetsMenuButton-C3eVP Button-button-paJ9a Link-link-RInnp\"};","// extracted by mini-css-extract-plugin\nexport default {\"downloadClients\":\"AddDownloadClientModalContent-downloadClients-Oi2LK\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddDownloadClientItem from './AddDownloadClientItem';\r\nimport styles from './AddDownloadClientModalContent.css';\r\n\r\nclass AddDownloadClientModalContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n usenetDownloadClients,\r\n torrentDownloadClients,\r\n onDownloadClientSelect,\r\n onModalClose\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {translate('AddDownloadClient')}\r\n \r\n\r\n \r\n {\r\n isSchemaFetching &&\r\n \r\n }\r\n\r\n {\r\n !isSchemaFetching && !!schemaError &&\r\n \r\n {translate('AddDownloadClientError')}\r\n \r\n }\r\n\r\n {\r\n isSchemaPopulated && !schemaError &&\r\n
\r\n\r\n \r\n
\r\n {translate('SupportedDownloadClients')}\r\n
\r\n
\r\n {translate('SupportedDownloadClientsMoreInfo')}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {\r\n usenetDownloadClients.map((downloadClient) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n
\r\n\r\n
\r\n
\r\n {\r\n torrentDownloadClients.map((downloadClient) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n
\r\n
\r\n }\r\n
\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nAddDownloadClientModalContent.propTypes = {\r\n isSchemaFetching: PropTypes.bool.isRequired,\r\n isSchemaPopulated: PropTypes.bool.isRequired,\r\n schemaError: PropTypes.object,\r\n usenetDownloadClients: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n torrentDownloadClients: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onDownloadClientSelect: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddDownloadClientModalContent;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchDownloadClientSchema, selectDownloadClientSchema } from 'Store/Actions/settingsActions';\r\nimport AddDownloadClientModalContent from './AddDownloadClientModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.downloadClients,\r\n (downloadClients) => {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n } = downloadClients;\r\n\r\n const usenetDownloadClients = _.filter(schema, { protocol: 'usenet' });\r\n const torrentDownloadClients = _.filter(schema, { protocol: 'torrent' });\r\n\r\n return {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n usenetDownloadClients,\r\n torrentDownloadClients\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchDownloadClientSchema,\r\n selectDownloadClientSchema\r\n};\r\n\r\nclass AddDownloadClientModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchDownloadClientSchema();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onDownloadClientSelect = ({ implementation }) => {\r\n this.props.selectDownloadClientSchema({ implementation });\r\n this.props.onModalClose({ downloadClientSelected: true });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddDownloadClientModalContentConnector.propTypes = {\r\n fetchDownloadClientSchema: PropTypes.func.isRequired,\r\n selectDownloadClientSchema: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddDownloadClientModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddDownloadClientModalContentConnector from './AddDownloadClientModalContentConnector';\r\n\r\nfunction AddDownloadClientModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddDownloadClientModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddDownloadClientModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport ProviderFieldFormGroup from 'Components/Form/ProviderFieldFormGroup';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport AdvancedSettingsButton from 'Settings/AdvancedSettingsButton';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditDownloadClientModalContent.css';\r\n\r\nclass EditDownloadClientModalContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n advancedSettings,\r\n isFetching,\r\n error,\r\n isSaving,\r\n isTesting,\r\n saveError,\r\n item,\r\n onInputChange,\r\n onFieldChange,\r\n onModalClose,\r\n onSavePress,\r\n onTestPress,\r\n onAdvancedSettingsPress,\r\n onDeleteDownloadClientPress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n id,\r\n implementationName,\r\n name,\r\n enable,\r\n protocol,\r\n priority,\r\n removeCompletedDownloads,\r\n removeFailedDownloads,\r\n fields,\r\n tags,\r\n message\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditDownloadClientImplementation', { implementationName }) : translate('AddDownloadClientImplementation', { implementationName })}\r\n \r\n\r\n \r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('AddDownloadClientError')}\r\n \r\n }\r\n\r\n {\r\n !isFetching && !error &&\r\n
\r\n {\r\n !!message &&\r\n \r\n {message.value.message}\r\n \r\n }\r\n\r\n \r\n {translate('Name')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Enable')}\r\n\r\n \r\n \r\n\r\n {\r\n fields.map((field) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n {translate('ClientPriority')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('RemoveCompleted')}\r\n\r\n \r\n \r\n\r\n {\r\n protocol.value !== 'torrent' &&\r\n \r\n {translate('RemoveFailed')}\r\n\r\n \r\n \r\n }\r\n \r\n \r\n }\r\n
\r\n \r\n {\r\n id &&\r\n \r\n {translate('Delete')}\r\n \r\n }\r\n\r\n \r\n\r\n \r\n {translate('Test')}\r\n \r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nEditDownloadClientModalContent.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n isTesting: PropTypes.bool.isRequired,\r\n item: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onFieldChange: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onTestPress: PropTypes.func.isRequired,\r\n onAdvancedSettingsPress: PropTypes.func.isRequired,\r\n onDeleteDownloadClientPress: PropTypes.func\r\n};\r\n\r\nexport default EditDownloadClientModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditDownloadClientModalContent-deleteButton-dwUEi Button-button-paJ9a Link-link-RInnp\",\"message\":\"EditDownloadClientModalContent-message-XIiHZ Alert-alert-_KgnQ\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport {\r\n saveDownloadClient,\r\n setDownloadClientFieldValue,\r\n setDownloadClientValue,\r\n testDownloadClient,\r\n toggleAdvancedSettings\r\n} from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditDownloadClientModalContent from './EditDownloadClientModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('downloadClients'),\r\n (advancedSettings, downloadClient) => {\r\n return {\r\n advancedSettings,\r\n ...downloadClient\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setDownloadClientValue,\r\n setDownloadClientFieldValue,\r\n saveDownloadClient,\r\n testDownloadClient,\r\n toggleAdvancedSettings\r\n};\r\n\r\nclass EditDownloadClientModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {\r\n this.props.onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setDownloadClientValue({ name, value });\r\n };\r\n\r\n onFieldChange = ({ name, value }) => {\r\n this.props.setDownloadClientFieldValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveDownloadClient({ id: this.props.id });\r\n };\r\n\r\n onTestPress = () => {\r\n this.props.testDownloadClient({ id: this.props.id });\r\n };\r\n\r\n onAdvancedSettingsPress = () => {\r\n this.props.toggleAdvancedSettings();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditDownloadClientModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n isFetching: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n setDownloadClientValue: PropTypes.func.isRequired,\r\n setDownloadClientFieldValue: PropTypes.func.isRequired,\r\n saveDownloadClient: PropTypes.func.isRequired,\r\n testDownloadClient: PropTypes.func.isRequired,\r\n toggleAdvancedSettings: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditDownloadClientModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport EditDownloadClientModalContentConnector from './EditDownloadClientModalContentConnector';\r\n\r\nfunction EditDownloadClientModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditDownloadClientModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditDownloadClientModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { cancelSaveDownloadClient, cancelTestDownloadClient } from 'Store/Actions/settingsActions';\r\nimport EditDownloadClientModal from './EditDownloadClientModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n const section = 'settings.downloadClients';\r\n\r\n return {\r\n dispatchClearPendingChanges() {\r\n dispatch(clearPendingChanges({ section }));\r\n },\r\n\r\n dispatchCancelTestDownloadClient() {\r\n dispatch(cancelTestDownloadClient({ section }));\r\n },\r\n\r\n dispatchCancelSaveDownloadClient() {\r\n dispatch(cancelSaveDownloadClient({ section }));\r\n }\r\n };\r\n}\r\n\r\nclass EditDownloadClientModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.dispatchClearPendingChanges();\r\n this.props.dispatchCancelTestDownloadClient();\r\n this.props.dispatchCancelSaveDownloadClient();\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n dispatchClearPendingChanges,\r\n dispatchCancelTestDownloadClient,\r\n dispatchCancelSaveDownloadClient,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditDownloadClientModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n dispatchCancelTestDownloadClient: PropTypes.func.isRequired,\r\n dispatchCancelSaveDownloadClient: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(null, createMapDispatchToProps)(EditDownloadClientModalConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TagList from 'Components/TagList';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditDownloadClientModalConnector from './EditDownloadClientModalConnector';\r\nimport styles from './DownloadClient.css';\r\n\r\nclass DownloadClient extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditDownloadClientModalOpen: false,\r\n isDeleteDownloadClientModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditDownloadClientPress = () => {\r\n this.setState({ isEditDownloadClientModalOpen: true });\r\n };\r\n\r\n onEditDownloadClientModalClose = () => {\r\n this.setState({ isEditDownloadClientModalOpen: false });\r\n };\r\n\r\n onDeleteDownloadClientPress = () => {\r\n this.setState({\r\n isEditDownloadClientModalOpen: false,\r\n isDeleteDownloadClientModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteDownloadClientModalClose = () => {\r\n this.setState({ isDeleteDownloadClientModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteDownloadClient = () => {\r\n this.props.onConfirmDeleteDownloadClient(this.props.id);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n name,\r\n enable,\r\n priority,\r\n tags,\r\n tagList\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n {name}\r\n
\r\n\r\n
\r\n {\r\n enable ?\r\n :\r\n \r\n {translate('Disabled')}\r\n \r\n }\r\n\r\n {\r\n priority > 1 &&\r\n \r\n {translate('PrioritySettings', { priority })}\r\n \r\n }\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDownloadClient.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n enable: PropTypes.bool.isRequired,\r\n priority: PropTypes.number.isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteDownloadClient: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DownloadClient;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"downloadClient\":\"DownloadClient-downloadClient-wZ1JM Card-card-aoesq\",\"name\":\"DownloadClient-name-eDUtm\",\"enabled\":\"DownloadClient-enabled-SSDPC\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddDownloadClientModal from './AddDownloadClientModal';\r\nimport DownloadClient from './DownloadClient';\r\nimport EditDownloadClientModalConnector from './EditDownloadClientModalConnector';\r\nimport styles from './DownloadClients.css';\r\n\r\nclass DownloadClients extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isAddDownloadClientModalOpen: false,\r\n isEditDownloadClientModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddDownloadClientPress = () => {\r\n this.setState({ isAddDownloadClientModalOpen: true });\r\n };\r\n\r\n onAddDownloadClientModalClose = ({ downloadClientSelected = false } = {}) => {\r\n this.setState({\r\n isAddDownloadClientModalOpen: false,\r\n isEditDownloadClientModalOpen: downloadClientSelected\r\n });\r\n };\r\n\r\n onEditDownloadClientModalClose = () => {\r\n this.setState({ isEditDownloadClientModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n onConfirmDeleteDownloadClient,\r\n tagList,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isAddDownloadClientModalOpen,\r\n isEditDownloadClientModalOpen\r\n } = this.state;\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nDownloadClients.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteDownloadClient: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DownloadClients;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"downloadClients\":\"DownloadClients-downloadClients-yJxlI\",\"addDownloadClient\":\"DownloadClients-addDownloadClient-pW5Mv DownloadClient-downloadClient-wZ1JM Card-card-aoesq\",\"center\":\"DownloadClients-center-WmFhO\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteDownloadClient, fetchDownloadClients } from 'Store/Actions/settingsActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport DownloadClients from './DownloadClients';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.downloadClients', sortByProp('name')),\r\n createTagsSelector(),\r\n (downloadClients, tagList) => {\r\n return {\r\n ...downloadClients,\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchDownloadClients,\r\n deleteDownloadClient\r\n};\r\n\r\nclass DownloadClientsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchDownloadClients();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteDownloadClient = (id) => {\r\n this.props.deleteDownloadClient({ id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDownloadClientsConnector.propTypes = {\r\n fetchDownloadClients: PropTypes.func.isRequired,\r\n deleteDownloadClient: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(DownloadClientsConnector);\r\n","import React, { useCallback, useState } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ManageDownloadClientsEditModalContent.css';\r\n\r\ninterface SavePayload {\r\n enable?: boolean;\r\n removeCompletedDownloads?: boolean;\r\n removeFailedDownloads?: boolean;\r\n priority?: number;\r\n}\r\n\r\ninterface ManageDownloadClientsEditModalContentProps {\r\n downloadClientIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nconst NO_CHANGE = 'noChange';\r\n\r\nconst enableOptions = [\r\n {\r\n key: NO_CHANGE,\r\n get value() {\r\n return translate('NoChange');\r\n },\r\n isDisabled: true,\r\n },\r\n {\r\n key: 'enabled',\r\n get value() {\r\n return translate('Enabled');\r\n },\r\n },\r\n {\r\n key: 'disabled',\r\n get value() {\r\n return translate('Disabled');\r\n },\r\n },\r\n];\r\n\r\nfunction ManageDownloadClientsEditModalContent(\r\n props: ManageDownloadClientsEditModalContentProps\r\n) {\r\n const { downloadClientIds, onSavePress, onModalClose } = props;\r\n\r\n const [enable, setEnable] = useState(NO_CHANGE);\r\n const [removeCompletedDownloads, setRemoveCompletedDownloads] =\r\n useState(NO_CHANGE);\r\n const [removeFailedDownloads, setRemoveFailedDownloads] = useState(NO_CHANGE);\r\n const [priority, setPriority] = useState(null);\r\n\r\n const save = useCallback(() => {\r\n let hasChanges = false;\r\n const payload: SavePayload = {};\r\n\r\n if (enable !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.enable = enable === 'enabled';\r\n }\r\n\r\n if (removeCompletedDownloads !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.removeCompletedDownloads = removeCompletedDownloads === 'enabled';\r\n }\r\n\r\n if (removeFailedDownloads !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.removeFailedDownloads = removeFailedDownloads === 'enabled';\r\n }\r\n\r\n if (priority !== null) {\r\n hasChanges = true;\r\n payload.priority = priority as number;\r\n }\r\n\r\n if (hasChanges) {\r\n onSavePress(payload);\r\n }\r\n\r\n onModalClose();\r\n }, [\r\n enable,\r\n priority,\r\n removeCompletedDownloads,\r\n removeFailedDownloads,\r\n onSavePress,\r\n onModalClose,\r\n ]);\r\n\r\n const onInputChange = useCallback(\r\n ({ name, value }: { name: string; value: string }) => {\r\n switch (name) {\r\n case 'enable':\r\n setEnable(value);\r\n break;\r\n case 'priority':\r\n setPriority(value);\r\n break;\r\n case 'removeCompletedDownloads':\r\n setRemoveCompletedDownloads(value);\r\n break;\r\n case 'removeFailedDownloads':\r\n setRemoveFailedDownloads(value);\r\n break;\r\n default:\r\n console.warn(\r\n `EditDownloadClientsModalContent Unknown Input: '${name}'`\r\n );\r\n }\r\n },\r\n []\r\n );\r\n\r\n const selectedCount = downloadClientIds.length;\r\n\r\n return (\r\n \r\n {translate('EditSelectedDownloadClients')}\r\n\r\n \r\n \r\n {translate('Enabled')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Priority')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RemoveCompletedDownloads')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RemoveFailedDownloads')}\r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n {translate('CountDownloadClientsSelected', { count: selectedCount })}\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ManageDownloadClientsEditModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalFooter\":\"ManageDownloadClientsEditModalContent-modalFooter-lujmM ModalFooter-modalFooter-wjkx5\",\"selected\":\"ManageDownloadClientsEditModalContent-selected-OpTW9\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ManageDownloadClientsEditModalContent from './ManageDownloadClientsEditModalContent';\r\n\r\ninterface ManageDownloadClientsEditModalProps {\r\n isOpen: boolean;\r\n downloadClientIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageDownloadClientsEditModal(\r\n props: ManageDownloadClientsEditModalProps\r\n) {\r\n const { isOpen, downloadClientIds, onSavePress, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageDownloadClientsEditModal;\r\n","import React, { useCallback } from 'react';\r\nimport Label from 'Components/Label';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport Column from 'Components/Table/Column';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport TagListConnector from 'Components/TagListConnector';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ManageDownloadClientsModalRow.css';\r\n\r\ninterface ManageDownloadClientsModalRowProps {\r\n id: number;\r\n name: string;\r\n enable: boolean;\r\n priority: number;\r\n removeCompletedDownloads: boolean;\r\n removeFailedDownloads: boolean;\r\n implementation: string;\r\n tags: number[];\r\n columns: Column[];\r\n isSelected?: boolean;\r\n onSelectedChange(result: SelectStateInputProps): void;\r\n}\r\n\r\nfunction ManageDownloadClientsModalRow(\r\n props: ManageDownloadClientsModalRowProps\r\n) {\r\n const {\r\n id,\r\n isSelected,\r\n name,\r\n enable,\r\n priority,\r\n removeCompletedDownloads,\r\n removeFailedDownloads,\r\n implementation,\r\n tags,\r\n onSelectedChange,\r\n } = props;\r\n\r\n const onSelectedChangeWrapper = useCallback(\r\n (result: SelectStateInputProps) => {\r\n onSelectedChange({\r\n ...result,\r\n });\r\n },\r\n [onSelectedChange]\r\n );\r\n\r\n return (\r\n \r\n \r\n\r\n {name}\r\n\r\n \r\n {implementation}\r\n \r\n\r\n \r\n \r\n \r\n\r\n {priority}\r\n\r\n \r\n {removeCompletedDownloads ? translate('Yes') : translate('No')}\r\n \r\n\r\n \r\n {removeFailedDownloads ? translate('Yes') : translate('No')}\r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageDownloadClientsModalRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"name\":\"ManageDownloadClientsModalRow-name-tXtzB TableRowCell-cell-giPrj\",\"enable\":\"ManageDownloadClientsModalRow-enable-cd4Aq TableRowCell-cell-giPrj\",\"tags\":\"ManageDownloadClientsModalRow-tags-l762O TableRowCell-cell-giPrj\",\"priority\":\"ManageDownloadClientsModalRow-priority-kDQJC TableRowCell-cell-giPrj\",\"removeCompletedDownloads\":\"ManageDownloadClientsModalRow-removeCompletedDownloads-pLVmi TableRowCell-cell-giPrj\",\"removeFailedDownloads\":\"ManageDownloadClientsModalRow-removeFailedDownloads-J9yDQ TableRowCell-cell-giPrj\",\"implementation\":\"ManageDownloadClientsModalRow-implementation-P7X40 TableRowCell-cell-giPrj\"};","import { uniq } from 'lodash';\r\nimport React, { useCallback, useMemo, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport { DownloadClientAppState } from 'App/State/SettingsAppState';\r\nimport { Tag } from 'App/State/TagsAppState';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Label from 'Components/Label';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport DownloadClient from 'typings/DownloadClient';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './TagsModalContent.css';\r\n\r\ninterface TagsModalContentProps {\r\n ids: number[];\r\n onApplyTagsPress: (tags: number[], applyTags: string) => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction TagsModalContent(props: TagsModalContentProps) {\r\n const { ids, onModalClose, onApplyTagsPress } = props;\r\n\r\n const allDownloadClients: DownloadClientAppState = useSelector(\r\n (state: AppState) => state.settings.downloadClients\r\n );\r\n const tagList: Tag[] = useSelector(createTagsSelector());\r\n\r\n const [tags, setTags] = useState([]);\r\n const [applyTags, setApplyTags] = useState('add');\r\n\r\n const downloadClientsTags = useMemo(() => {\r\n const tags = ids.reduce((acc: number[], id) => {\r\n const s = allDownloadClients.items.find(\r\n (s: DownloadClient) => s.id === id\r\n );\r\n\r\n if (s) {\r\n acc.push(...s.tags);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return uniq(tags);\r\n }, [ids, allDownloadClients]);\r\n\r\n const onTagsChange = useCallback(\r\n ({ value }: { value: number[] }) => {\r\n setTags(value);\r\n },\r\n [setTags]\r\n );\r\n\r\n const onApplyTagsChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n setApplyTags(value);\r\n },\r\n [setApplyTags]\r\n );\r\n\r\n const onApplyPress = useCallback(() => {\r\n onApplyTagsPress(tags, applyTags);\r\n }, [tags, applyTags, onApplyTagsPress]);\r\n\r\n const applyTagsOptions = [\r\n {\r\n key: 'add',\r\n get value() {\r\n return translate('Add');\r\n },\r\n },\r\n {\r\n key: 'remove',\r\n get value() {\r\n return translate('Remove');\r\n },\r\n },\r\n {\r\n key: 'replace',\r\n get value() {\r\n return translate('Replace');\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {translate('Tags')}\r\n\r\n \r\n
\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ApplyTags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Result')}\r\n\r\n
\r\n {downloadClientsTags.map((id) => {\r\n const tag = tagList.find((t) => t.id === id);\r\n\r\n if (!tag) {\r\n return null;\r\n }\r\n\r\n const removeTag =\r\n (applyTags === 'remove' && tags.indexOf(id) > -1) ||\r\n (applyTags === 'replace' && tags.indexOf(id) === -1);\r\n\r\n return (\r\n \r\n {tag.label}\r\n \r\n );\r\n })}\r\n\r\n {(applyTags === 'add' || applyTags === 'replace') &&\r\n tags.map((id) => {\r\n const tag = tagList.find((t) => t.id === id);\r\n\r\n if (!tag) {\r\n return null;\r\n }\r\n\r\n if (downloadClientsTags.indexOf(id) > -1) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {tag.label}\r\n \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default TagsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"renameIcon\":\"TagsModalContent-renameIcon-cVYe8\",\"message\":\"TagsModalContent-message-zRYdW\",\"result\":\"TagsModalContent-result-poJQI\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport TagsModalContent from './TagsModalContent';\r\n\r\ninterface TagsModalProps {\r\n isOpen: boolean;\r\n ids: number[];\r\n onApplyTagsPress: (tags: number[], applyTags: string) => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction TagsModal(props: TagsModalProps) {\r\n const { isOpen, onModalClose, ...otherProps } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default TagsModal;\r\n","import React, { useCallback, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { DownloadClientAppState } from 'App/State/SettingsAppState';\r\nimport Alert from 'Components/Alert';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport useSelectState from 'Helpers/Hooks/useSelectState';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { SortDirection } from 'Helpers/Props/sortDirections';\r\nimport {\r\n bulkDeleteDownloadClients,\r\n bulkEditDownloadClients,\r\n setManageDownloadClientsSort,\r\n} from 'Store/Actions/settingsActions';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport ManageDownloadClientsEditModal from './Edit/ManageDownloadClientsEditModal';\r\nimport ManageDownloadClientsModalRow from './ManageDownloadClientsModalRow';\r\nimport TagsModal from './Tags/TagsModal';\r\nimport styles from './ManageDownloadClientsModalContent.css';\r\n\r\n// TODO: This feels janky to do, but not sure of a better way currently\r\ntype OnSelectedChangeCallback = React.ComponentProps<\r\n typeof ManageDownloadClientsModalRow\r\n>['onSelectedChange'];\r\n\r\nconst COLUMNS = [\r\n {\r\n name: 'name',\r\n label: () => translate('Name'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'implementation',\r\n label: () => translate('Implementation'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'enable',\r\n label: () => translate('Enabled'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'priority',\r\n label: () => translate('Priority'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'removeCompletedDownloads',\r\n label: () => translate('RemoveCompleted'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'removeFailedDownloads',\r\n label: () => translate('RemoveFailed'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'tags',\r\n label: 'Tags',\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n];\r\n\r\ninterface ManageDownloadClientsModalContentProps {\r\n onModalClose(): void;\r\n sortKey?: string;\r\n sortDirection?: SortDirection;\r\n}\r\n\r\nfunction ManageDownloadClientsModalContent(\r\n props: ManageDownloadClientsModalContentProps\r\n) {\r\n const { onModalClose } = props;\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n isDeleting,\r\n isSaving,\r\n error,\r\n items,\r\n sortKey,\r\n sortDirection,\r\n }: DownloadClientAppState = useSelector(\r\n createClientSideCollectionSelector('settings.downloadClients')\r\n );\r\n const dispatch = useDispatch();\r\n\r\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\r\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\r\n const [isTagsModalOpen, setIsTagsModalOpen] = useState(false);\r\n const [isSavingTags, setIsSavingTags] = useState(false);\r\n\r\n const [selectState, setSelectState] = useSelectState();\r\n\r\n const { allSelected, allUnselected, selectedState } = selectState;\r\n\r\n const selectedIds: number[] = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const selectedCount = selectedIds.length;\r\n\r\n const onSortPress = useCallback(\r\n (value: string) => {\r\n dispatch(setManageDownloadClientsSort({ sortKey: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onDeletePress = useCallback(() => {\r\n setIsDeleteModalOpen(true);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onDeleteModalClose = useCallback(() => {\r\n setIsDeleteModalOpen(false);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onEditPress = useCallback(() => {\r\n setIsEditModalOpen(true);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onEditModalClose = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onConfirmDelete = useCallback(() => {\r\n dispatch(bulkDeleteDownloadClients({ ids: selectedIds }));\r\n setIsDeleteModalOpen(false);\r\n }, [selectedIds, dispatch]);\r\n\r\n const onSavePress = useCallback(\r\n (payload: object) => {\r\n setIsEditModalOpen(false);\r\n\r\n dispatch(\r\n bulkEditDownloadClients({\r\n ids: selectedIds,\r\n ...payload,\r\n })\r\n );\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onTagsPress = useCallback(() => {\r\n setIsTagsModalOpen(true);\r\n }, [setIsTagsModalOpen]);\r\n\r\n const onTagsModalClose = useCallback(() => {\r\n setIsTagsModalOpen(false);\r\n }, [setIsTagsModalOpen]);\r\n\r\n const onApplyTagsPress = useCallback(\r\n (tags: number[], applyTags: string) => {\r\n setIsSavingTags(true);\r\n setIsTagsModalOpen(false);\r\n\r\n dispatch(\r\n bulkEditDownloadClients({\r\n ids: selectedIds,\r\n tags,\r\n applyTags,\r\n })\r\n );\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onSelectAllChange = useCallback(\r\n ({ value }: SelectStateInputProps) => {\r\n setSelectState({ type: value ? 'selectAll' : 'unselectAll', items });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const onSelectedChange = useCallback(\r\n ({ id, value, shiftKey = false }) => {\r\n setSelectState({\r\n type: 'toggleSelected',\r\n items,\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const errorMessage = getErrorMessage(\r\n error,\r\n 'Unable to load download clients.'\r\n );\r\n const anySelected = selectedCount > 0;\r\n\r\n return (\r\n \r\n {translate('ManageDownloadClients')}\r\n \r\n {isFetching ? : null}\r\n\r\n {error ?
{errorMessage}
: null}\r\n\r\n {isPopulated && !error && !items.length ? (\r\n {translate('NoDownloadClientsFound')}\r\n ) : null}\r\n\r\n {isPopulated && !!items.length && !isFetching && !isFetching ? (\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n ) : null}\r\n
\r\n\r\n \r\n
\r\n \r\n {translate('Delete')}\r\n \r\n\r\n \r\n {translate('Edit')}\r\n \r\n\r\n \r\n {translate('SetTags')}\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ManageDownloadClientsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"leftButtons\":\"ManageDownloadClientsModalContent-leftButtons-T17BS\",\"rightButtons\":\"ManageDownloadClientsModalContent-rightButtons-EvNoz\",\"deleteButton\":\"ManageDownloadClientsModalContent-deleteButton-irV2f Button-button-paJ9a Link-link-RInnp\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ManageDownloadClientsModalContent from './ManageDownloadClientsModalContent';\r\n\r\ninterface ManageDownloadClientsModalProps {\r\n isOpen: boolean;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageDownloadClientsModal(props: ManageDownloadClientsModalProps) {\r\n const { isOpen, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageDownloadClientsModal;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction DownloadClientOptions(props) {\r\n const {\r\n advancedSettings,\r\n isFetching,\r\n error,\r\n settings,\r\n hasSettings,\r\n onInputChange\r\n } = props;\r\n\r\n return (\r\n
\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && error &&\r\n \r\n {translate('DownloadClientOptionsLoadError')}\r\n \r\n }\r\n\r\n {\r\n hasSettings && !isFetching && !error && advancedSettings &&\r\n
\r\n
\r\n\r\n
\r\n \r\n {translate('Enable')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('CheckForFinishedDownloadsInterval')}\r\n\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {translate('AutoRedownloadFailed')}\r\n\r\n \r\n \r\n\r\n {\r\n settings.autoRedownloadFailed.value ?\r\n \r\n {translate('AutoRedownloadFailedFromInteractiveSearch')}\r\n\r\n \r\n :\r\n null\r\n }\r\n \r\n\r\n \r\n {translate('RemoveDownloadsAlert')}\r\n \r\n \r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nDownloadClientOptions.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n settings: PropTypes.object.isRequired,\r\n hasSettings: PropTypes.bool.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DownloadClientOptions;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { fetchDownloadClientOptions, saveDownloadClientOptions, setDownloadClientOptionsValue } from 'Store/Actions/settingsActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport DownloadClientOptions from './DownloadClientOptions';\r\n\r\nconst SECTION = 'downloadClientOptions';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createSettingsSectionSelector(SECTION),\r\n (advancedSettings, sectionSettings) => {\r\n return {\r\n advancedSettings,\r\n ...sectionSettings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchDownloadClientOptions: fetchDownloadClientOptions,\r\n dispatchSetDownloadClientOptionsValue: setDownloadClientOptionsValue,\r\n dispatchSaveDownloadClientOptions: saveDownloadClientOptions,\r\n dispatchClearPendingChanges: clearPendingChanges\r\n};\r\n\r\nclass DownloadClientOptionsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n dispatchFetchDownloadClientOptions,\r\n dispatchSaveDownloadClientOptions,\r\n onChildMounted\r\n } = this.props;\r\n\r\n dispatchFetchDownloadClientOptions();\r\n onChildMounted(dispatchSaveDownloadClientOptions);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n hasPendingChanges,\r\n isSaving,\r\n onChildStateChange\r\n } = this.props;\r\n\r\n if (\r\n prevProps.isSaving !== isSaving ||\r\n prevProps.hasPendingChanges !== hasPendingChanges\r\n ) {\r\n onChildStateChange({\r\n isSaving,\r\n hasPendingChanges\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.dispatchClearPendingChanges({ section: `settings.${SECTION}` });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.dispatchSetDownloadClientOptionsValue({ name, value });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDownloadClientOptionsConnector.propTypes = {\r\n isSaving: PropTypes.bool.isRequired,\r\n hasPendingChanges: PropTypes.bool.isRequired,\r\n dispatchFetchDownloadClientOptions: PropTypes.func.isRequired,\r\n dispatchSetDownloadClientOptionsValue: PropTypes.func.isRequired,\r\n dispatchSaveDownloadClientOptions: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n onChildMounted: PropTypes.func.isRequired,\r\n onChildStateChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(DownloadClientOptionsConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"EditRemotePathMappingModalContent-body-PE4id ModalBody-modalBody-RVK6D\",\"deleteButton\":\"EditRemotePathMappingModalContent-deleteButton-ZAVCm Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\n\r\nconst settingShape = {\r\n value: PropTypes.oneOf([PropTypes.bool, PropTypes.number, PropTypes.string]),\r\n warnings: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n errors: PropTypes.arrayOf(PropTypes.string).isRequired\r\n};\r\n\r\nexport const arraySettingShape = {\r\n ...settingShape,\r\n value: PropTypes.array.isRequired\r\n};\r\n\r\nexport const boolSettingShape = {\r\n ...settingShape,\r\n value: PropTypes.bool.isRequired\r\n};\r\n\r\nexport const numberSettingShape = {\r\n ...settingShape,\r\n value: PropTypes.number.isRequired\r\n};\r\n\r\nexport const stringSettingShape = {\r\n ...settingShape,\r\n value: PropTypes.string\r\n};\r\n\r\nexport const tagSettingShape = {\r\n ...settingShape,\r\n value: PropTypes.arrayOf(PropTypes.number).isRequired\r\n};\r\n\r\nexport default settingShape;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport { stringSettingShape } from 'Helpers/Props/Shapes/settingShape';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditRemotePathMappingModalContent.css';\r\n\r\nfunction EditRemotePathMappingModalContent(props) {\r\n const {\r\n id,\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n item,\r\n downloadClientHosts,\r\n onInputChange,\r\n onSavePress,\r\n onModalClose,\r\n onDeleteRemotePathMappingPress,\r\n ...otherProps\r\n } = props;\r\n\r\n const {\r\n host,\r\n remotePath,\r\n localPath\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditRemotePathMapping') : translate('AddRemotePathMapping')}\r\n \r\n\r\n \r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('AddRemotePathMappingError')}\r\n \r\n }\r\n\r\n {\r\n !isFetching && !error &&\r\n
\r\n \r\n {translate('Host')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RemotePath')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('LocalPath')}\r\n\r\n \r\n \r\n
\r\n }\r\n
\r\n\r\n \r\n {\r\n id &&\r\n \r\n {translate('Delete')}\r\n \r\n }\r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nconst remotePathMappingShape = {\r\n host: PropTypes.shape(stringSettingShape).isRequired,\r\n remotePath: PropTypes.shape(stringSettingShape).isRequired,\r\n localPath: PropTypes.shape(stringSettingShape).isRequired\r\n};\r\n\r\nEditRemotePathMappingModalContent.propTypes = {\r\n id: PropTypes.number,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.shape(remotePathMappingShape).isRequired,\r\n downloadClientHosts: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onDeleteRemotePathMappingPress: PropTypes.func\r\n};\r\n\r\nexport default EditRemotePathMappingModalContent;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { saveRemotePathMapping, setRemotePathMappingValue } from 'Store/Actions/settingsActions';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport EditRemotePathMappingModalContent from './EditRemotePathMappingModalContent';\r\n\r\nconst newRemotePathMapping = {\r\n host: '',\r\n remotePath: '',\r\n localPath: ''\r\n};\r\n\r\nconst selectDownloadClientHosts = createSelector(\r\n (state) => state.settings.downloadClients.items,\r\n (downloadClients) => {\r\n const hosts = downloadClients.reduce((acc, downloadClient) => {\r\n const name = downloadClient.name;\r\n const host = downloadClient.fields.find((field) => {\r\n return field.name === 'host';\r\n });\r\n\r\n if (host) {\r\n const group = acc[host.value] = acc[host.value] || [];\r\n group.push(name);\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\n return Object.keys(hosts).map((host) => {\r\n return {\r\n key: host,\r\n value: host,\r\n hint: `${hosts[host].join(', ')}`\r\n };\r\n });\r\n }\r\n);\r\n\r\nfunction createRemotePathMappingSelector() {\r\n return createSelector(\r\n (state, { id }) => id,\r\n (state) => state.settings.remotePathMappings,\r\n selectDownloadClientHosts,\r\n (id, remotePathMappings, downloadClientHosts) => {\r\n const {\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n pendingChanges,\r\n items\r\n } = remotePathMappings;\r\n\r\n const mapping = id ? items.find((i) => i.id === id) : newRemotePathMapping;\r\n const settings = selectSettings(mapping, pendingChanges, saveError);\r\n\r\n return {\r\n id,\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n item: settings.settings,\r\n ...settings,\r\n downloadClientHosts\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createRemotePathMappingSelector(),\r\n (remotePathMapping) => {\r\n return {\r\n ...remotePathMapping\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSetRemotePathMappingValue: setRemotePathMappingValue,\r\n dispatchSaveRemotePathMapping: saveRemotePathMapping\r\n};\r\n\r\nclass EditRemotePathMappingModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n if (!this.props.id) {\r\n Object.keys(newRemotePathMapping).forEach((name) => {\r\n this.props.dispatchSetRemotePathMappingValue({\r\n name,\r\n value: newRemotePathMapping[name]\r\n });\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {\r\n this.props.onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.dispatchSetRemotePathMappingValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.dispatchSaveRemotePathMapping({ id: this.props.id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditRemotePathMappingModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n dispatchSetRemotePathMappingValue: PropTypes.func.isRequired,\r\n dispatchSaveRemotePathMapping: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditRemotePathMappingModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport EditRemotePathMappingModalContentConnector from './EditRemotePathMappingModalContentConnector';\r\n\r\nfunction EditRemotePathMappingModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditRemotePathMappingModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditRemotePathMappingModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditRemotePathMappingModal from './EditRemotePathMappingModal';\r\n\r\nfunction mapStateToProps() {\r\n return {};\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n clearPendingChanges\r\n};\r\n\r\nclass EditRemotePathMappingModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.clearPendingChanges({ section: 'settings.remotePathMappings' });\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditRemotePathMappingModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(EditRemotePathMappingModalConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"remotePathMapping\":\"RemotePathMapping-remotePathMapping-Jy6fO\",\"host\":\"RemotePathMapping-host-o0xdT\",\"path\":\"RemotePathMapping-path-T3frI\",\"actions\":\"RemotePathMapping-actions-sV1xS\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditRemotePathMappingModalConnector from './EditRemotePathMappingModalConnector';\r\nimport styles from './RemotePathMapping.css';\r\n\r\nclass RemotePathMapping extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditRemotePathMappingModalOpen: false,\r\n isDeleteRemotePathMappingModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditRemotePathMappingPress = () => {\r\n this.setState({ isEditRemotePathMappingModalOpen: true });\r\n };\r\n\r\n onEditRemotePathMappingModalClose = () => {\r\n this.setState({ isEditRemotePathMappingModalOpen: false });\r\n };\r\n\r\n onDeleteRemotePathMappingPress = () => {\r\n this.setState({\r\n isEditRemotePathMappingModalOpen: false,\r\n isDeleteRemotePathMappingModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteRemotePathMappingModalClose = () => {\r\n this.setState({ isDeleteRemotePathMappingModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteRemotePathMapping = () => {\r\n this.props.onConfirmDeleteRemotePathMapping(this.props.id);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n host,\r\n remotePath,\r\n localPath\r\n } = this.props;\r\n\r\n return (\r\n \r\n
{host}
\r\n
{remotePath}
\r\n
{localPath}
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nRemotePathMapping.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n host: PropTypes.string.isRequired,\r\n remotePath: PropTypes.string.isRequired,\r\n localPath: PropTypes.string.isRequired,\r\n onConfirmDeleteRemotePathMapping: PropTypes.func.isRequired\r\n};\r\n\r\nRemotePathMapping.defaultProps = {\r\n // The drag preview will not connect the drag handle.\r\n connectDragSource: (node) => node\r\n};\r\n\r\nexport default RemotePathMapping;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"remotePathMappingsHeader\":\"RemotePathMappings-remotePathMappingsHeader-TcQ3F\",\"host\":\"RemotePathMappings-host-LzeXa\",\"path\":\"RemotePathMappings-path-yhMRC\",\"addRemotePathMapping\":\"RemotePathMappings-addRemotePathMapping-rGEoO\",\"addButton\":\"RemotePathMappings-addButton-xS9B4\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditRemotePathMappingModalConnector from './EditRemotePathMappingModalConnector';\r\nimport RemotePathMapping from './RemotePathMapping';\r\nimport styles from './RemotePathMappings.css';\r\n\r\nclass RemotePathMappings extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isAddRemotePathMappingModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddRemotePathMappingPress = () => {\r\n this.setState({ isAddRemotePathMappingModalOpen: true });\r\n };\r\n\r\n onModalClose = () => {\r\n this.setState({ isAddRemotePathMappingModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n onConfirmDeleteRemotePathMapping,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n {translate('Host')}\r\n
\r\n
\r\n {translate('RemotePath')}\r\n
\r\n
\r\n {translate('LocalPath')}\r\n
\r\n
\r\n\r\n
\r\n {\r\n items.map((item, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nRemotePathMappings.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteRemotePathMapping: PropTypes.func.isRequired\r\n};\r\n\r\nexport default RemotePathMappings;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteRemotePathMapping, fetchRemotePathMappings } from 'Store/Actions/settingsActions';\r\nimport RemotePathMappings from './RemotePathMappings';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.remotePathMappings,\r\n (remotePathMappings) => {\r\n return {\r\n ...remotePathMappings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchRemotePathMappings,\r\n deleteRemotePathMapping\r\n};\r\n\r\nclass RemotePathMappingsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchRemotePathMappings();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteRemotePathMapping = (id) => {\r\n this.props.deleteRemotePathMapping({ id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nRemotePathMappingsConnector.propTypes = {\r\n fetchRemotePathMappings: PropTypes.func.isRequired,\r\n deleteRemotePathMapping: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(RemotePathMappingsConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component, Fragment } from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport { icons } from 'Helpers/Props';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport DownloadClientsConnector from './DownloadClients/DownloadClientsConnector';\r\nimport ManageDownloadClientsModal from './DownloadClients/Manage/ManageDownloadClientsModal';\r\nimport DownloadClientOptionsConnector from './Options/DownloadClientOptionsConnector';\r\nimport RemotePathMappingsConnector from './RemotePathMappings/RemotePathMappingsConnector';\r\n\r\nclass DownloadClientSettings extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._saveCallback = null;\r\n\r\n this.state = {\r\n isSaving: false,\r\n hasPendingChanges: false,\r\n isManageDownloadClientsOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChildMounted = (saveCallback) => {\r\n this._saveCallback = saveCallback;\r\n };\r\n\r\n onChildStateChange = (payload) => {\r\n this.setState(payload);\r\n };\r\n\r\n onManageDownloadClientsPress = () => {\r\n this.setState({ isManageDownloadClientsOpen: true });\r\n };\r\n\r\n onManageDownloadClientsModalClose = () => {\r\n this.setState({ isManageDownloadClientsOpen: false });\r\n };\r\n\r\n onSavePress = () => {\r\n if (this._saveCallback) {\r\n this._saveCallback();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isTestingAll,\r\n dispatchTestAllDownloadClients\r\n } = this.props;\r\n\r\n const {\r\n isSaving,\r\n hasPendingChanges,\r\n isManageDownloadClientsOpen\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n }\r\n onSavePress={this.onSavePress}\r\n />\r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDownloadClientSettings.propTypes = {\r\n isTestingAll: PropTypes.bool.isRequired,\r\n dispatchTestAllDownloadClients: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DownloadClientSettings;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { testAllDownloadClients } from 'Store/Actions/settingsActions';\r\nimport DownloadClientSettings from './DownloadClientSettings';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.downloadClients.isTestingAll,\r\n (isTestingAll) => {\r\n return {\r\n isTestingAll\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchTestAllDownloadClients: testAllDownloadClients\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(DownloadClientSettings);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction AnalyticSettings(props) {\r\n const {\r\n settings,\r\n onInputChange\r\n } = props;\r\n\r\n const {\r\n analyticsEnabled\r\n } = settings;\r\n\r\n return (\r\n
\r\n \r\n {translate('SendAnonymousUsageData')}\r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nAnalyticSettings.propTypes = {\r\n settings: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AnalyticSettings;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction BackupSettings(props) {\r\n const {\r\n advancedSettings,\r\n settings,\r\n onInputChange\r\n } = props;\r\n\r\n const {\r\n backupFolder,\r\n backupInterval,\r\n backupRetention\r\n } = settings;\r\n\r\n if (!advancedSettings) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {translate('Folder')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Interval')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Retention')}\r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nBackupSettings.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n settings: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default BackupSettings;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction HostSettings(props) {\r\n const {\r\n advancedSettings,\r\n settings,\r\n isWindows,\r\n mode,\r\n onInputChange\r\n } = props;\r\n\r\n const {\r\n bindAddress,\r\n port,\r\n urlBase,\r\n instanceName,\r\n applicationUrl,\r\n enableSsl,\r\n sslPort,\r\n sslCertPath,\r\n sslCertPassword,\r\n launchBrowser\r\n } = settings;\r\n\r\n return (\r\n
\r\n \r\n {translate('BindAddress')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('PortNumber')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('UrlBase')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('InstanceName')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ApplicationURL')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('EnableSsl')}\r\n\r\n \r\n \r\n\r\n {\r\n enableSsl.value ?\r\n \r\n {translate('SslPort')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n enableSsl.value ?\r\n \r\n {translate('SslCertPath')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n enableSsl.value ?\r\n \r\n {translate('SslCertPassword')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n isWindows && mode !== 'service' ?\r\n \r\n {translate('OpenBrowserOnStart')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n
\r\n );\r\n}\r\n\r\nHostSettings.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n settings: PropTypes.object.isRequired,\r\n isWindows: PropTypes.bool.isRequired,\r\n mode: PropTypes.string.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default HostSettings;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nconst logLevelOptions = [\r\n {\r\n key: 'info',\r\n get value() {\r\n return translate('Info');\r\n }\r\n },\r\n {\r\n key: 'debug',\r\n get value() {\r\n return translate('Debug');\r\n }\r\n },\r\n {\r\n key: 'trace',\r\n get value() {\r\n return translate('Trace');\r\n }\r\n }\r\n];\r\n\r\nfunction LoggingSettings(props) {\r\n const {\r\n advancedSettings,\r\n settings,\r\n onInputChange\r\n } = props;\r\n\r\n const {\r\n logLevel,\r\n logSizeLimit\r\n } = settings;\r\n\r\n return (\r\n
\r\n \r\n {translate('LogLevel')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('LogSizeLimit')}\r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nLoggingSettings.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n settings: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default LoggingSettings;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction ProxySettings(props) {\r\n const {\r\n settings,\r\n onInputChange\r\n } = props;\r\n\r\n const {\r\n proxyEnabled,\r\n proxyType,\r\n proxyHostname,\r\n proxyPort,\r\n proxyUsername,\r\n proxyPassword,\r\n proxyBypassFilter,\r\n proxyBypassLocalAddresses\r\n } = settings;\r\n\r\n const proxyTypeOptions = [\r\n {\r\n key: 'http',\r\n value: translate('HttpHttps')\r\n },\r\n {\r\n key: 'socks4',\r\n value: translate('Socks4')\r\n },\r\n {\r\n key: 'socks5',\r\n value: translate('Socks5')\r\n }\r\n ];\r\n\r\n return (\r\n
\r\n \r\n {translate('UseProxy')}\r\n\r\n \r\n \r\n\r\n {\r\n proxyEnabled.value &&\r\n
\r\n \r\n {translate('ProxyType')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Hostname')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Port')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Username')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Password')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('IgnoredAddresses')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('BypassProxyForLocalAddresses')}\r\n\r\n \r\n \r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nProxySettings.propTypes = {\r\n settings: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ProxySettings;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes, sizes } from 'Helpers/Props';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nconst branchValues = [\r\n 'master',\r\n 'develop',\r\n 'nightly'\r\n];\r\n\r\nfunction UpdateSettings(props) {\r\n const {\r\n advancedSettings,\r\n settings,\r\n packageUpdateMechanism,\r\n onInputChange\r\n } = props;\r\n\r\n const {\r\n branch,\r\n updateAutomatically,\r\n updateMechanism,\r\n updateScriptPath\r\n } = settings;\r\n\r\n if (!advancedSettings) {\r\n return null;\r\n }\r\n\r\n const usingExternalUpdateMechanism = packageUpdateMechanism !== 'builtIn';\r\n\r\n const updateOptions = [];\r\n\r\n if (usingExternalUpdateMechanism) {\r\n updateOptions.push({\r\n key: packageUpdateMechanism,\r\n value: titleCase(packageUpdateMechanism)\r\n });\r\n } else {\r\n updateOptions.push({ key: 'builtIn', value: translate('BuiltIn') });\r\n }\r\n\r\n updateOptions.push({ key: 'script', value: translate('Script') });\r\n\r\n return (\r\n
\r\n \r\n {translate('Branch')}\r\n\r\n \r\n \r\n\r\n
\r\n \r\n {translate('Automatic')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Mechanism')}\r\n\r\n \r\n \r\n\r\n {\r\n updateMechanism.value === 'script' &&\r\n \r\n {translate('ScriptPath')}\r\n\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nUpdateSettings.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n settings: PropTypes.object.isRequired,\r\n isWindows: PropTypes.bool.isRequired,\r\n packageUpdateMechanism: PropTypes.string.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default UpdateSettings;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport { kinds } from 'Helpers/Props';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport AnalyticSettings from './AnalyticSettings';\r\nimport BackupSettings from './BackupSettings';\r\nimport HostSettings from './HostSettings';\r\nimport LoggingSettings from './LoggingSettings';\r\nimport ProxySettings from './ProxySettings';\r\nimport SecuritySettings from './SecuritySettings';\r\nimport UpdateSettings from './UpdateSettings';\r\n\r\nconst requiresRestartKeys = [\r\n 'bindAddress',\r\n 'port',\r\n 'urlBase',\r\n 'instanceName',\r\n 'enableSsl',\r\n 'sslPort',\r\n 'sslCertPath',\r\n 'sslCertPassword'\r\n];\r\n\r\nclass GeneralSettings extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isRestartRequiredModalOpen: false\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n settings,\r\n isSaving,\r\n saveError,\r\n isResettingApiKey\r\n } = this.props;\r\n\r\n if (!isResettingApiKey && prevProps.isResettingApiKey) {\r\n this.setState({ isRestartRequiredModalOpen: true });\r\n return;\r\n }\r\n\r\n if (isSaving || saveError || !prevProps.isSaving) {\r\n return;\r\n }\r\n\r\n const prevSettings = prevProps.settings;\r\n\r\n const pendingRestart = _.some(requiresRestartKeys, (key) => {\r\n const setting = settings[key];\r\n const prevSetting = prevSettings[key];\r\n\r\n if (!setting || !prevSetting) {\r\n return false;\r\n }\r\n\r\n const previousValue = prevSetting.previousValue;\r\n const value = setting.value;\r\n\r\n return previousValue != null && previousValue !== value;\r\n });\r\n\r\n this.setState({ isRestartRequiredModalOpen: pendingRestart });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmRestart = () => {\r\n this.setState({ isRestartRequiredModalOpen: false });\r\n this.props.onConfirmRestart();\r\n };\r\n\r\n onCloseRestartRequiredModalOpen = () => {\r\n this.setState({ isRestartRequiredModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n advancedSettings,\r\n isFetching,\r\n isPopulated,\r\n error,\r\n settings,\r\n hasSettings,\r\n isResettingApiKey,\r\n isWindows,\r\n isWindowsService,\r\n mode,\r\n packageUpdateMechanism,\r\n onInputChange,\r\n onConfirmResetApiKey,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {\r\n isFetching && !isPopulated &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && error &&\r\n \r\n {translate('GeneralSettingsLoadError')}\r\n \r\n }\r\n\r\n {\r\n hasSettings && isPopulated && !error &&\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n }\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nGeneralSettings.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n settings: PropTypes.object.isRequired,\r\n isResettingApiKey: PropTypes.bool.isRequired,\r\n hasSettings: PropTypes.bool.isRequired,\r\n isWindows: PropTypes.bool.isRequired,\r\n isWindowsService: PropTypes.bool.isRequired,\r\n mode: PropTypes.string.isRequired,\r\n packageUpdateMechanism: PropTypes.string.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onConfirmResetApiKey: PropTypes.func.isRequired,\r\n onConfirmRestart: PropTypes.func.isRequired\r\n};\r\n\r\nexport default GeneralSettings;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { fetchGeneralSettings, saveGeneralSettings, setGeneralSettingsValue } from 'Store/Actions/settingsActions';\r\nimport { restart } from 'Store/Actions/systemActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport GeneralSettings from './GeneralSettings';\r\n\r\nconst SECTION = 'general';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createSettingsSectionSelector(SECTION),\r\n createCommandExecutingSelector(commandNames.RESET_API_KEY),\r\n createSystemStatusSelector(),\r\n (advancedSettings, sectionSettings, isResettingApiKey, systemStatus) => {\r\n return {\r\n advancedSettings,\r\n isResettingApiKey,\r\n isWindows: systemStatus.isWindows,\r\n isWindowsService: systemStatus.isWindows && systemStatus.mode === 'service',\r\n mode: systemStatus.mode,\r\n packageUpdateMechanism: systemStatus.packageUpdateMechanism,\r\n ...sectionSettings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setGeneralSettingsValue,\r\n saveGeneralSettings,\r\n fetchGeneralSettings,\r\n executeCommand,\r\n restart,\r\n clearPendingChanges\r\n};\r\n\r\nclass GeneralSettingsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchGeneralSettings();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (!this.props.isResettingApiKey && prevProps.isResettingApiKey) {\r\n this.props.fetchGeneralSettings();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.clearPendingChanges({ section: `settings.${SECTION}` });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setGeneralSettingsValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveGeneralSettings();\r\n };\r\n\r\n onConfirmResetApiKey = () => {\r\n this.props.executeCommand({ name: commandNames.RESET_API_KEY });\r\n };\r\n\r\n onConfirmRestart = () => {\r\n this.props.restart();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nGeneralSettingsConnector.propTypes = {\r\n isResettingApiKey: PropTypes.bool.isRequired,\r\n setGeneralSettingsValue: PropTypes.func.isRequired,\r\n saveGeneralSettings: PropTypes.func.isRequired,\r\n fetchGeneralSettings: PropTypes.func.isRequired,\r\n executeCommand: PropTypes.func.isRequired,\r\n restart: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(GeneralSettingsConnector);\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport {\r\n saveImportListExclusion,\r\n setImportListExclusionValue,\r\n} from 'Store/Actions/settingsActions';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport ImportListExclusion from 'typings/ImportListExclusion';\r\nimport { PendingSection } from 'typings/pending';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditImportListExclusionModalContent.css';\r\n\r\nconst newImportListExclusion = {\r\n movieTitle: '',\r\n movieYear: 0,\r\n tmdbId: 0,\r\n};\r\n\r\nfunction createImportListExclusionSelector(id?: number) {\r\n return createSelector(\r\n (state: AppState) => state.settings.importListExclusions,\r\n (importListExclusions) => {\r\n const { isFetching, error, isSaving, saveError, pendingChanges, items } =\r\n importListExclusions;\r\n\r\n const mapping = id\r\n ? items.find((i) => i.id === id)!\r\n : newImportListExclusion;\r\n const settings = selectSettings(mapping, pendingChanges, saveError);\r\n\r\n return {\r\n id,\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n item: settings.settings as PendingSection,\r\n ...settings,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface EditImportListExclusionModalContentProps {\r\n id?: number;\r\n onModalClose: () => void;\r\n onDeleteImportListExclusionPress?: () => void;\r\n}\r\n\r\nfunction EditImportListExclusionModalContent({\r\n id,\r\n onModalClose,\r\n onDeleteImportListExclusionPress,\r\n}: EditImportListExclusionModalContentProps) {\r\n const { isFetching, isSaving, item, error, saveError, ...otherProps } =\r\n useSelector(createImportListExclusionSelector(id));\r\n\r\n const { movieTitle, movieYear, tmdbId } = item;\r\n\r\n const dispatch = useDispatch();\r\n const previousIsSaving = usePrevious(isSaving);\r\n\r\n const dispatchSetImportListExclusionValue = (payload: {\r\n name: string;\r\n value: string | number;\r\n }) => {\r\n // @ts-expect-error 'setImportListExclusionValue' isn't typed yet\r\n dispatch(setImportListExclusionValue(payload));\r\n };\r\n\r\n useEffect(() => {\r\n if (!id) {\r\n Object.entries(newImportListExclusion).forEach(([name, value]) => {\r\n dispatchSetImportListExclusionValue({ name, value });\r\n });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (previousIsSaving && !isSaving && !saveError) {\r\n onModalClose();\r\n }\r\n }, [previousIsSaving, isSaving, saveError, onModalClose]);\r\n\r\n const onSavePress = useCallback(() => {\r\n dispatch(saveImportListExclusion({ id }));\r\n }, [dispatch, id]);\r\n\r\n const onInputChange = useCallback(\r\n (payload: { name: string; value: string | number }) => {\r\n // @ts-expect-error 'setImportListExclusionValue' isn't typed yet\r\n dispatch(setImportListExclusionValue(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n \r\n {id\r\n ? translate('EditImportListExclusion')\r\n : translate('AddImportListExclusion')}\r\n \r\n\r\n \r\n {isFetching && }\r\n\r\n {!isFetching && !!error && (\r\n \r\n {translate('AddImportListExclusionError')}\r\n \r\n )}\r\n\r\n {!isFetching && !error && (\r\n
\r\n \r\n {translate('TMDBId')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Title')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Year')}\r\n\r\n \r\n \r\n
\r\n )}\r\n
\r\n\r\n \r\n {id && (\r\n \r\n {translate('Delete')}\r\n \r\n )}\r\n\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default EditImportListExclusionModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"EditImportListExclusionModalContent-body-vc_c_ ModalBody-modalBody-RVK6D\",\"deleteButton\":\"EditImportListExclusionModalContent-deleteButton-q8gjG Button-button-paJ9a Link-link-RInnp\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditImportListExclusionModalContent from './EditImportListExclusionModalContent';\r\n\r\ninterface EditImportListExclusionModalProps {\r\n id?: number;\r\n isOpen: boolean;\r\n onModalClose: () => void;\r\n onDeleteImportListExclusionPress?: () => void;\r\n}\r\n\r\nfunction EditImportListExclusionModal(\r\n props: EditImportListExclusionModalProps\r\n) {\r\n const { isOpen, onModalClose, ...otherProps } = props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const handleModalClose = useCallback(() => {\r\n dispatch(\r\n clearPendingChanges({\r\n section: 'settings.importListExclusions',\r\n })\r\n );\r\n onModalClose();\r\n }, [dispatch, onModalClose]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default EditImportListExclusionModal;\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport { deleteImportListExclusion } from 'Store/Actions/Settings/importListExclusions';\r\nimport ImportListExclusion from 'typings/ImportListExclusion';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditImportListExclusionModal from './EditImportListExclusionModal';\r\nimport styles from './ImportListExclusionRow.css';\r\n\r\ninterface ImportListExclusionRowProps extends ImportListExclusion {\r\n isSelected: boolean;\r\n onSelectedChange: (options: SelectStateInputProps) => void;\r\n}\r\n\r\nfunction ImportListExclusionRow(props: ImportListExclusionRowProps) {\r\n const { id, tmdbId, movieTitle, movieYear, isSelected, onSelectedChange } =\r\n props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [\r\n isEditImportListExclusionModalOpen,\r\n setEditImportListExclusionModalOpen,\r\n setEditImportListExclusionModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const [\r\n isDeleteImportListExclusionModalOpen,\r\n setDeleteImportListExclusionModalOpen,\r\n setDeleteImportListExclusionModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const handleDeletePress = useCallback(() => {\r\n dispatch(deleteImportListExclusion({ id }));\r\n }, [id, dispatch]);\r\n\r\n return (\r\n \r\n \r\n\r\n {tmdbId}\r\n {movieTitle}\r\n {movieYear}\r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ImportListExclusionRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"ImportListExclusionRow-actions-_EXJg TableRowCell-cell-giPrj\"};","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport Column from 'Components/Table/Column';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TablePager from 'Components/Table/TablePager';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport usePaging from 'Components/Table/usePaging';\r\nimport useCurrentPage from 'Helpers/Hooks/useCurrentPage';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport useSelectState from 'Helpers/Hooks/useSelectState';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport {\r\n bulkDeleteImportListExclusions,\r\n clearImportListExclusions,\r\n fetchImportListExclusions,\r\n gotoImportListExclusionPage,\r\n setImportListExclusionSort,\r\n setImportListExclusionTableOption,\r\n} from 'Store/Actions/Settings/importListExclusions';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport { TableOptionsChangePayload } from 'typings/Table';\r\nimport {\r\n registerPagePopulator,\r\n unregisterPagePopulator,\r\n} from 'Utilities/pagePopulator';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport EditImportListExclusionModal from './EditImportListExclusionModal';\r\nimport ImportListExclusionRow from './ImportListExclusionRow';\r\nimport styles from './ImportListExclusions.css';\r\n\r\nconst COLUMNS: Column[] = [\r\n {\r\n name: 'tmdbId',\r\n label: () => translate('TMDBId'),\r\n isVisible: true,\r\n isSortable: true,\r\n },\r\n {\r\n name: 'movieTitle',\r\n label: () => translate('Title'),\r\n isVisible: true,\r\n isSortable: true,\r\n },\r\n {\r\n name: 'movieYear',\r\n label: () => translate('Year'),\r\n isVisible: true,\r\n isSortable: true,\r\n },\r\n {\r\n className: styles.actions,\r\n name: 'actions',\r\n label: '',\r\n isVisible: true,\r\n isSortable: false,\r\n },\r\n];\r\n\r\nfunction createImportListExclusionsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.settings.importListExclusions,\r\n (importListExclusions) => {\r\n return {\r\n ...importListExclusions,\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction ImportListExclusions() {\r\n const requestCurrentPage = useCurrentPage();\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n items,\r\n pageSize,\r\n sortKey,\r\n error,\r\n sortDirection,\r\n page,\r\n totalPages,\r\n totalRecords,\r\n isDeleting,\r\n deleteError,\r\n } = useSelector(createImportListExclusionsSelector());\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [isConfirmDeleteModalOpen, setIsConfirmDeleteModalOpen] =\r\n useState(false);\r\n const previousIsDeleting = usePrevious(isDeleting);\r\n\r\n const [selectState, setSelectState] = useSelectState();\r\n const { allSelected, allUnselected, selectedState } = selectState;\r\n\r\n const selectedIds = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const handleSelectAllChange = useCallback(\r\n ({ value }: CheckInputChanged) => {\r\n setSelectState({ type: value ? 'selectAll' : 'unselectAll', items });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const handleSelectedChange = useCallback(\r\n ({ id, value, shiftKey = false }: SelectStateInputProps) => {\r\n setSelectState({\r\n type: 'toggleSelected',\r\n items,\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const handleDeleteSelectedPress = useCallback(() => {\r\n setIsConfirmDeleteModalOpen(true);\r\n }, [setIsConfirmDeleteModalOpen]);\r\n\r\n const handleDeleteSelectedConfirmed = useCallback(() => {\r\n dispatch(bulkDeleteImportListExclusions({ ids: selectedIds }));\r\n setIsConfirmDeleteModalOpen(false);\r\n }, [selectedIds, setIsConfirmDeleteModalOpen, dispatch]);\r\n\r\n const handleConfirmDeleteModalClose = useCallback(() => {\r\n setIsConfirmDeleteModalOpen(false);\r\n }, [setIsConfirmDeleteModalOpen]);\r\n\r\n const {\r\n handleFirstPagePress,\r\n handlePreviousPagePress,\r\n handleNextPagePress,\r\n handleLastPagePress,\r\n handlePageSelect,\r\n } = usePaging({\r\n page,\r\n totalPages,\r\n gotoPage: gotoImportListExclusionPage,\r\n });\r\n\r\n const handleSortPress = useCallback(\r\n (sortKey: { sortKey: string }) => {\r\n dispatch(setImportListExclusionSort({ sortKey }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleTableOptionChange = useCallback(\r\n (payload: TableOptionsChangePayload) => {\r\n dispatch(setImportListExclusionTableOption(payload));\r\n\r\n if (payload.pageSize) {\r\n dispatch(gotoImportListExclusionPage({ page: 1 }));\r\n }\r\n },\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n if (requestCurrentPage) {\r\n dispatch(fetchImportListExclusions());\r\n } else {\r\n dispatch(gotoImportListExclusionPage({ page: 1 }));\r\n }\r\n\r\n return () => {\r\n dispatch(clearImportListExclusions());\r\n };\r\n }, [requestCurrentPage, dispatch]);\r\n\r\n useEffect(() => {\r\n const repopulate = () => {\r\n dispatch(fetchImportListExclusions());\r\n };\r\n\r\n registerPagePopulator(repopulate);\r\n\r\n return () => {\r\n unregisterPagePopulator(repopulate);\r\n };\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n if (previousIsDeleting && !isDeleting && !deleteError) {\r\n setSelectState({ type: 'unselectAll', items });\r\n\r\n dispatch(fetchImportListExclusions());\r\n }\r\n }, [\r\n previousIsDeleting,\r\n isDeleting,\r\n deleteError,\r\n items,\r\n dispatch,\r\n setSelectState,\r\n ]);\r\n\r\n const [\r\n isAddImportListExclusionModalOpen,\r\n setAddImportListExclusionModalOpen,\r\n setAddImportListExclusionModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const isFetchingForFirstTime = isFetching && !isPopulated;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n\r\n \r\n \r\n \r\n {translate('Delete')}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ImportListExclusions;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"ImportListExclusions-actions-IV8p_ TableHeaderCell-headerCell-aJDuw\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\n\r\nclass AddImportListPresetMenuItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n name,\r\n implementation,\r\n implementationName,\r\n minRefreshInterval\r\n } = this.props;\r\n\r\n this.props.onPress({\r\n name,\r\n implementation,\r\n implementationName,\r\n minRefreshInterval\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n name,\r\n implementation,\r\n implementationName,\r\n minRefreshInterval,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {name}\r\n \r\n );\r\n }\r\n}\r\n\r\nAddImportListPresetMenuItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n minRefreshInterval: PropTypes.string.isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddImportListPresetMenuItem;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Link from 'Components/Link/Link';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport { sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddImportListPresetMenuItem from './AddImportListPresetMenuItem';\r\nimport styles from './AddImportListItem.css';\r\n\r\nclass AddImportListItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onImportListSelect = () => {\r\n const {\r\n implementation,\r\n implementationName,\r\n minRefreshInterval\r\n } = this.props;\r\n\r\n this.props.onImportListSelect({ implementation, implementationName, minRefreshInterval });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n implementation,\r\n implementationName,\r\n minRefreshInterval,\r\n infoLink,\r\n presets,\r\n onImportListSelect\r\n } = this.props;\r\n\r\n const hasPresets = !!presets && !!presets.length;\r\n\r\n return (\r\n \r\n \r\n\r\n
\r\n
\r\n {implementationName}\r\n
\r\n\r\n
\r\n {\r\n hasPresets &&\r\n \r\n \r\n {translate('Custom')}\r\n \r\n\r\n \r\n \r\n {translate('Presets')}\r\n \r\n\r\n \r\n {\r\n presets.map((preset) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n \r\n }\r\n\r\n \r\n {translate('MoreInfo')}\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nAddImportListItem.propTypes = {\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n minRefreshInterval: PropTypes.string.isRequired,\r\n infoLink: PropTypes.string.isRequired,\r\n presets: PropTypes.arrayOf(PropTypes.object),\r\n onImportListSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddImportListItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"list\":\"AddImportListItem-list-oFr_m Card-card-aoesq\",\"underlay\":\"AddImportListItem-underlay-eQ6Rc\",\"overlay\":\"AddImportListItem-overlay-SV_VG\",\"name\":\"AddImportListItem-name-ww4lQ\",\"actions\":\"AddImportListItem-actions-CpSnE\",\"presetsMenu\":\"AddImportListItem-presetsMenu-TZXKp Menu-menu-Uz3_0\",\"presetsMenuButton\":\"AddImportListItem-presetsMenuButton-hxJ1r Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddImportListItem from './AddImportListItem';\r\nimport styles from './AddImportListModalContent.css';\r\n\r\nclass AddImportListModalContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n listGroups,\r\n onImportListSelect,\r\n onModalClose\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {translate('AddImportList')}\r\n \r\n\r\n \r\n {\r\n isSchemaFetching ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n !isSchemaFetching && !!schemaError ?\r\n \r\n {translate('AddListError')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n isSchemaPopulated && !schemaError ?\r\n
\r\n\r\n \r\n
\r\n {translate('SupportedListsMovie')}\r\n
\r\n
\r\n {translate('SupportedListsMoreInfo')}\r\n
\r\n
\r\n {\r\n Object.keys(listGroups).map((key) => {\r\n return (\r\n
\r\n
\r\n {\r\n listGroups[key].map((list) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n
\r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n
\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nAddImportListModalContent.propTypes = {\r\n isSchemaFetching: PropTypes.bool.isRequired,\r\n isSchemaPopulated: PropTypes.bool.isRequired,\r\n schemaError: PropTypes.object,\r\n listGroups: PropTypes.object.isRequired,\r\n onImportListSelect: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddImportListModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"lists\":\"AddImportListModalContent-lists-gojEB\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchImportListSchema, selectImportListSchema } from 'Store/Actions/settingsActions';\r\nimport AddImportListModalContent from './AddImportListModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.importLists,\r\n (importLists) => {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n } = importLists;\r\n\r\n const listGroups = _.chain(schema)\r\n .sortBy((o) => o.listOrder)\r\n .groupBy('listType')\r\n .value();\r\n\r\n return {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n listGroups\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchImportListSchema,\r\n selectImportListSchema\r\n};\r\n\r\nclass AddImportListModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchImportListSchema();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onImportListSelect = ({ implementation, implementationName, name, minRefreshInterval }) => {\r\n this.props.selectImportListSchema({ implementation, implementationName, presetName: name, minRefreshInterval });\r\n this.props.onModalClose({ listSelected: true });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddImportListModalContentConnector.propTypes = {\r\n fetchImportListSchema: PropTypes.func.isRequired,\r\n selectImportListSchema: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddImportListModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddImportListModalContentConnector from './AddImportListModalContentConnector';\r\n\r\nfunction AddImportListModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddImportListModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddImportListModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"list\":\"ImportList-list-c7gQt Card-card-aoesq\",\"name\":\"ImportList-name-Wx4wM\",\"enabled\":\"ImportList-enabled-C_uMU\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TagList from 'Components/TagList';\r\nimport { kinds } from 'Helpers/Props';\r\nimport formatShortTimeSpan from 'Utilities/Date/formatShortTimeSpan';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditImportListModalConnector from './EditImportListModalConnector';\r\nimport styles from './ImportList.css';\r\n\r\nclass ImportList extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditImportListModalOpen: false,\r\n isDeleteImportListModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditImportListPress = () => {\r\n this.setState({ isEditImportListModalOpen: true });\r\n };\r\n\r\n onEditImportListModalClose = () => {\r\n this.setState({ isEditImportListModalOpen: false });\r\n };\r\n\r\n onDeleteImportListPress = () => {\r\n this.setState({\r\n isEditImportListModalOpen: false,\r\n isDeleteImportListModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteImportListModalClose = () => {\r\n this.setState({ isDeleteImportListModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteImportList = () => {\r\n this.props.onConfirmDeleteImportList(this.props.id);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n name,\r\n enabled,\r\n enableAuto,\r\n tags,\r\n tagList,\r\n minRefreshInterval\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n {name}\r\n
\r\n\r\n
\r\n {\r\n enabled ?\r\n :\r\n \r\n {translate('Disabled')}\r\n \r\n }\r\n\r\n {\r\n enableAuto ?\r\n :\r\n null\r\n }\r\n
\r\n\r\n \r\n\r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nImportList.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n enabled: PropTypes.bool.isRequired,\r\n enableAuto: PropTypes.bool.isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n minRefreshInterval: PropTypes.string.isRequired,\r\n onConfirmDeleteImportList: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportList;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddImportListModal from './AddImportListModal';\r\nimport EditImportListModalConnector from './EditImportListModalConnector';\r\nimport ImportList from './ImportList';\r\nimport styles from './ImportLists.css';\r\n\r\nclass ImportLists extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isAddImportListModalOpen: false,\r\n isEditImportListModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddImportListPress = () => {\r\n this.setState({ isAddImportListModalOpen: true });\r\n };\r\n\r\n onAddImportListModalClose = ({ listSelected = false } = {}) => {\r\n this.setState({\r\n isAddImportListModalOpen: false,\r\n isEditImportListModalOpen: listSelected\r\n });\r\n };\r\n\r\n onEditImportListModalClose = () => {\r\n this.setState({ isEditImportListModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n tagList,\r\n onConfirmDeleteImportList,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isAddImportListModalOpen,\r\n isEditImportListModalOpen\r\n } = this.state;\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nImportLists.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteImportList: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportLists;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"lists\":\"ImportLists-lists-vKPjg\",\"addList\":\"ImportLists-addList-gGcxK ImportList-list-c7gQt Card-card-aoesq\",\"center\":\"ImportLists-center-f_Mdw\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport { deleteImportList, fetchImportLists } from 'Store/Actions/settingsActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport ImportLists from './ImportLists';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.importLists', sortByProp('name')),\r\n createTagsSelector(),\r\n (importLists, tagList) => {\r\n return {\r\n ...importLists,\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchImportLists,\r\n deleteImportList,\r\n fetchRootFolders\r\n};\r\n\r\nclass ImportListsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchImportLists();\r\n this.props.fetchRootFolders();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteImportList = (id) => {\r\n this.props.deleteImportList({ id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nImportListsConnector.propTypes = {\r\n fetchImportLists: PropTypes.func.isRequired,\r\n deleteImportList: PropTypes.func.isRequired,\r\n fetchRootFolders: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ImportListsConnector);\r\n","import React, { useCallback, useState } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ManageImportListsEditModalContent.css';\r\n\r\ninterface SavePayload {\r\n enabled?: boolean;\r\n enableAuto?: boolean;\r\n qualityProfileId?: number;\r\n minimumAvailability?: string;\r\n rootFolderPath?: string;\r\n}\r\n\r\ninterface ManageImportListsEditModalContentProps {\r\n importListIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nconst NO_CHANGE = 'noChange';\r\n\r\nconst enableOptions = [\r\n {\r\n key: NO_CHANGE,\r\n get value() {\r\n return translate('NoChange');\r\n },\r\n isDisabled: true,\r\n },\r\n {\r\n key: 'enabled',\r\n get value() {\r\n return translate('Enabled');\r\n },\r\n },\r\n {\r\n key: 'disabled',\r\n get value() {\r\n return translate('Disabled');\r\n },\r\n },\r\n];\r\n\r\nfunction ManageImportListsEditModalContent(\r\n props: ManageImportListsEditModalContentProps\r\n) {\r\n const { importListIds, onSavePress, onModalClose } = props;\r\n\r\n const [enabled, setEnabled] = useState(NO_CHANGE);\r\n const [enableAuto, setEnableAuto] = useState(NO_CHANGE);\r\n const [qualityProfileId, setQualityProfileId] = useState(\r\n NO_CHANGE\r\n );\r\n const [minimumAvailability, setMinimumAvailability] = useState(NO_CHANGE);\r\n const [rootFolderPath, setRootFolderPath] = useState(NO_CHANGE);\r\n\r\n const save = useCallback(() => {\r\n let hasChanges = false;\r\n const payload: SavePayload = {};\r\n\r\n if (enabled !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.enabled = enabled === 'enabled';\r\n }\r\n\r\n if (enableAuto !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.enableAuto = enableAuto === 'enabled';\r\n }\r\n\r\n if (qualityProfileId !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.qualityProfileId = qualityProfileId as number;\r\n }\r\n\r\n if (minimumAvailability !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.minimumAvailability = minimumAvailability as string;\r\n }\r\n\r\n if (rootFolderPath !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.rootFolderPath = rootFolderPath;\r\n }\r\n\r\n if (hasChanges) {\r\n onSavePress(payload);\r\n }\r\n\r\n onModalClose();\r\n }, [\r\n enabled,\r\n enableAuto,\r\n qualityProfileId,\r\n minimumAvailability,\r\n rootFolderPath,\r\n onSavePress,\r\n onModalClose,\r\n ]);\r\n\r\n const onInputChange = useCallback(\r\n ({ name, value }: { name: string; value: string }) => {\r\n switch (name) {\r\n case 'enabled':\r\n setEnabled(value);\r\n break;\r\n case 'enableAuto':\r\n setEnableAuto(value);\r\n break;\r\n case 'qualityProfileId':\r\n setQualityProfileId(value);\r\n break;\r\n case 'minimumAvailability':\r\n setMinimumAvailability(value);\r\n break;\r\n case 'rootFolderPath':\r\n setRootFolderPath(value);\r\n break;\r\n default:\r\n console.warn(`EditImportListModalContent Unknown Input: '${name}'`);\r\n }\r\n },\r\n []\r\n );\r\n\r\n const selectedCount = importListIds.length;\r\n\r\n return (\r\n \r\n {translate('EditSelectedImportLists')}\r\n\r\n \r\n \r\n {translate('Enabled')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('AutomaticAdd')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('QualityProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('MinimumAvailability')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RootFolder')}\r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n {translate('CountImportListsSelected', {\r\n count: selectedCount,\r\n })}\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ManageImportListsEditModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalFooter\":\"ManageImportListsEditModalContent-modalFooter-vOLBE ModalFooter-modalFooter-wjkx5\",\"selected\":\"ManageImportListsEditModalContent-selected-snufW\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ManageImportListsEditModalContent from './ManageImportListsEditModalContent';\r\n\r\ninterface ManageImportListsEditModalProps {\r\n isOpen: boolean;\r\n importListIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageImportListsEditModal(props: ManageImportListsEditModalProps) {\r\n const { isOpen, importListIds, onSavePress, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageImportListsEditModal;\r\n","import React, { useCallback } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport Column from 'Components/Table/Column';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport TagListConnector from 'Components/TagListConnector';\r\nimport { createQualityProfileSelectorForHook } from 'Store/Selectors/createQualityProfileSelector';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport firstCharToUpper from 'Utilities/String/firstCharToUpper';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ManageImportListsModalRow.css';\r\n\r\ninterface ManageImportListsModalRowProps {\r\n id: number;\r\n name: string;\r\n rootFolderPath: string;\r\n qualityProfileId: number;\r\n minimumAvailability: string;\r\n implementation: string;\r\n tags: number[];\r\n enabled: boolean;\r\n enableAuto: boolean;\r\n columns: Column[];\r\n isSelected?: boolean;\r\n onSelectedChange(result: SelectStateInputProps): void;\r\n}\r\n\r\nfunction ManageImportListsModalRow(props: ManageImportListsModalRowProps) {\r\n const {\r\n id,\r\n isSelected,\r\n name,\r\n rootFolderPath,\r\n minimumAvailability,\r\n qualityProfileId,\r\n implementation,\r\n enabled,\r\n enableAuto,\r\n tags,\r\n onSelectedChange,\r\n } = props;\r\n\r\n const qualityProfile = useSelector(\r\n createQualityProfileSelectorForHook(qualityProfileId)\r\n );\r\n\r\n const onSelectedChangeWrapper = useCallback(\r\n (result: SelectStateInputProps) => {\r\n onSelectedChange({\r\n ...result,\r\n });\r\n },\r\n [onSelectedChange]\r\n );\r\n\r\n return (\r\n \r\n \r\n\r\n {name}\r\n\r\n \r\n {implementation}\r\n \r\n\r\n \r\n {qualityProfile?.name ?? translate('None')}\r\n \r\n\r\n \r\n {translate(firstCharToUpper(minimumAvailability))}\r\n \r\n\r\n \r\n {rootFolderPath}\r\n \r\n\r\n \r\n {enabled ? translate('Yes') : translate('No')}\r\n \r\n\r\n \r\n {enableAuto ? translate('Yes') : translate('No')}\r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageImportListsModalRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"name\":\"ManageImportListsModalRow-name-jCmYl TableRowCell-cell-giPrj\",\"tags\":\"ManageImportListsModalRow-tags-WVEIX TableRowCell-cell-giPrj\",\"enabled\":\"ManageImportListsModalRow-enabled-ajtLC TableRowCell-cell-giPrj\",\"enableAuto\":\"ManageImportListsModalRow-enableAuto-f2wm2 TableRowCell-cell-giPrj\",\"minimumAvailability\":\"ManageImportListsModalRow-minimumAvailability-zcWAn TableRowCell-cell-giPrj\",\"qualityProfileId\":\"ManageImportListsModalRow-qualityProfileId-Q8GRF TableRowCell-cell-giPrj\",\"rootFolderPath\":\"ManageImportListsModalRow-rootFolderPath-FzmIs TableRowCell-cell-giPrj\",\"implementation\":\"ManageImportListsModalRow-implementation-LVthP TableRowCell-cell-giPrj\"};","import { uniq } from 'lodash';\r\nimport React, { useCallback, useMemo, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport { ImportListAppState } from 'App/State/SettingsAppState';\r\nimport { Tag } from 'App/State/TagsAppState';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Label from 'Components/Label';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport ImportList from 'typings/ImportList';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './TagsModalContent.css';\r\n\r\ninterface TagsModalContentProps {\r\n ids: number[];\r\n onApplyTagsPress: (tags: number[], applyTags: string) => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction TagsModalContent(props: TagsModalContentProps) {\r\n const { ids, onModalClose, onApplyTagsPress } = props;\r\n\r\n const allImportLists: ImportListAppState = useSelector(\r\n (state: AppState) => state.settings.importLists\r\n );\r\n const tagList: Tag[] = useSelector(createTagsSelector());\r\n\r\n const [tags, setTags] = useState([]);\r\n const [applyTags, setApplyTags] = useState('add');\r\n\r\n const importListsTags = useMemo(() => {\r\n const tags = ids.reduce((acc: number[], id) => {\r\n const s = allImportLists.items.find((s: ImportList) => s.id === id);\r\n\r\n if (s) {\r\n acc.push(...s.tags);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return uniq(tags);\r\n }, [ids, allImportLists]);\r\n\r\n const onTagsChange = useCallback(\r\n ({ value }: { value: number[] }) => {\r\n setTags(value);\r\n },\r\n [setTags]\r\n );\r\n\r\n const onApplyTagsChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n setApplyTags(value);\r\n },\r\n [setApplyTags]\r\n );\r\n\r\n const onApplyPress = useCallback(() => {\r\n onApplyTagsPress(tags, applyTags);\r\n }, [tags, applyTags, onApplyTagsPress]);\r\n\r\n const applyTagsOptions = [\r\n {\r\n key: 'add',\r\n get value() {\r\n return translate('Add');\r\n },\r\n },\r\n {\r\n key: 'remove',\r\n get value() {\r\n return translate('Remove');\r\n },\r\n },\r\n {\r\n key: 'replace',\r\n get value() {\r\n return translate('Replace');\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {translate('Tags')}\r\n\r\n \r\n
\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ApplyTags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Result')}\r\n\r\n
\r\n {importListsTags.map((id) => {\r\n const tag = tagList.find((t) => t.id === id);\r\n\r\n if (!tag) {\r\n return null;\r\n }\r\n\r\n const removeTag =\r\n (applyTags === 'remove' && tags.indexOf(id) > -1) ||\r\n (applyTags === 'replace' && tags.indexOf(id) === -1);\r\n\r\n return (\r\n \r\n {tag.label}\r\n \r\n );\r\n })}\r\n\r\n {(applyTags === 'add' || applyTags === 'replace') &&\r\n tags.map((id) => {\r\n const tag = tagList.find((t) => t.id === id);\r\n\r\n if (!tag) {\r\n return null;\r\n }\r\n\r\n if (importListsTags.indexOf(id) > -1) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {tag.label}\r\n \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default TagsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"renameIcon\":\"TagsModalContent-renameIcon-p0YsH\",\"message\":\"TagsModalContent-message-XHnCK\",\"result\":\"TagsModalContent-result-SDxiV\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport TagsModalContent from './TagsModalContent';\r\n\r\ninterface TagsModalProps {\r\n isOpen: boolean;\r\n ids: number[];\r\n onApplyTagsPress: (tags: number[], applyTags: string) => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction TagsModal(props: TagsModalProps) {\r\n const { isOpen, onModalClose, ...otherProps } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default TagsModal;\r\n","import React, { useCallback, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { ImportListAppState } from 'App/State/SettingsAppState';\r\nimport Alert from 'Components/Alert';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport useSelectState from 'Helpers/Hooks/useSelectState';\r\nimport { kinds } from 'Helpers/Props';\r\nimport {\r\n bulkDeleteImportLists,\r\n bulkEditImportLists,\r\n} from 'Store/Actions/settingsActions';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport ManageImportListsEditModal from './Edit/ManageImportListsEditModal';\r\nimport ManageImportListsModalRow from './ManageImportListsModalRow';\r\nimport TagsModal from './Tags/TagsModal';\r\nimport styles from './ManageImportListsModalContent.css';\r\n\r\n// TODO: This feels janky to do, but not sure of a better way currently\r\ntype OnSelectedChangeCallback = React.ComponentProps<\r\n typeof ManageImportListsModalRow\r\n>['onSelectedChange'];\r\n\r\nconst COLUMNS = [\r\n {\r\n name: 'name',\r\n label: () => translate('Name'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'implementation',\r\n label: () => translate('Implementation'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'qualityProfileId',\r\n label: () => translate('QualityProfile'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'minimumAvailability',\r\n label: () => translate('MinimumAvailability'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'rootFolderPath',\r\n label: () => translate('RootFolder'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'enabled',\r\n label: () => translate('Enabled'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'enableAuto',\r\n label: () => translate('AutomaticAdd'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'tags',\r\n label: () => translate('Tags'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n];\r\n\r\ninterface ManageImportListsModalContentProps {\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageImportListsModalContent(\r\n props: ManageImportListsModalContentProps\r\n) {\r\n const { onModalClose } = props;\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n isDeleting,\r\n isSaving,\r\n error,\r\n items,\r\n }: ImportListAppState = useSelector(\r\n createClientSideCollectionSelector('settings.importLists')\r\n );\r\n const dispatch = useDispatch();\r\n\r\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\r\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\r\n const [isTagsModalOpen, setIsTagsModalOpen] = useState(false);\r\n const [isSavingTags, setIsSavingTags] = useState(false);\r\n\r\n const [selectState, setSelectState] = useSelectState();\r\n\r\n const { allSelected, allUnselected, selectedState } = selectState;\r\n\r\n const selectedIds: number[] = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const selectedCount = selectedIds.length;\r\n\r\n const onDeletePress = useCallback(() => {\r\n setIsDeleteModalOpen(true);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onDeleteModalClose = useCallback(() => {\r\n setIsDeleteModalOpen(false);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onEditPress = useCallback(() => {\r\n setIsEditModalOpen(true);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onEditModalClose = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onConfirmDelete = useCallback(() => {\r\n dispatch(bulkDeleteImportLists({ ids: selectedIds }));\r\n setIsDeleteModalOpen(false);\r\n }, [selectedIds, dispatch]);\r\n\r\n const onSavePress = useCallback(\r\n (payload: object) => {\r\n setIsEditModalOpen(false);\r\n\r\n dispatch(\r\n bulkEditImportLists({\r\n ids: selectedIds,\r\n ...payload,\r\n })\r\n );\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onTagsPress = useCallback(() => {\r\n setIsTagsModalOpen(true);\r\n }, [setIsTagsModalOpen]);\r\n\r\n const onTagsModalClose = useCallback(() => {\r\n setIsTagsModalOpen(false);\r\n }, [setIsTagsModalOpen]);\r\n\r\n const onApplyTagsPress = useCallback(\r\n (tags: number[], applyTags: string) => {\r\n setIsSavingTags(true);\r\n setIsTagsModalOpen(false);\r\n\r\n dispatch(\r\n bulkEditImportLists({\r\n ids: selectedIds,\r\n tags,\r\n applyTags,\r\n })\r\n );\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onSelectAllChange = useCallback(\r\n ({ value }: SelectStateInputProps) => {\r\n setSelectState({ type: value ? 'selectAll' : 'unselectAll', items });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const onSelectedChange = useCallback(\r\n ({ id, value, shiftKey = false }) => {\r\n setSelectState({\r\n type: 'toggleSelected',\r\n items,\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const errorMessage = getErrorMessage(error, 'Unable to load import lists.');\r\n const anySelected = selectedCount > 0;\r\n\r\n return (\r\n \r\n {translate('ManageImportLists')}\r\n \r\n {isFetching ? : null}\r\n\r\n {error ?
{errorMessage}
: null}\r\n\r\n {isPopulated && !error && !items.length ? (\r\n {translate('NoImportListsFound')}\r\n ) : null}\r\n\r\n {isPopulated && !!items.length && !isFetching && !isFetching ? (\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n ) : null}\r\n
\r\n\r\n \r\n
\r\n \r\n {translate('Delete')}\r\n \r\n\r\n \r\n {translate('Edit')}\r\n \r\n\r\n \r\n {translate('SetTags')}\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ManageImportListsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"leftButtons\":\"ManageImportListsModalContent-leftButtons-P1y81\",\"rightButtons\":\"ManageImportListsModalContent-rightButtons-luPS3\",\"deleteButton\":\"ManageImportListsModalContent-deleteButton-Zgfud Button-button-paJ9a Link-link-RInnp\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport ManageImportListsModalContent from './ManageImportListsModalContent';\r\n\r\ninterface ManageImportListsModalProps {\r\n isOpen: boolean;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageImportListsModal(props: ManageImportListsModalProps) {\r\n const { isOpen, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageImportListsModal;\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport {\r\n fetchImportListOptions,\r\n saveImportListOptions,\r\n setImportListOptionsValue,\r\n} from 'Store/Actions/settingsActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nconst SECTION = 'importListOptions';\r\nconst cleanLibraryLevelOptions = [\r\n { key: 'disabled', value: () => translate('Disabled') },\r\n { key: 'logOnly', value: () => translate('LogOnly') },\r\n { key: 'keepAndUnmonitor', value: () => translate('KeepAndUnmonitorMovie') },\r\n { key: 'removeAndKeep', value: () => translate('RemoveMovieAndKeepFiles') },\r\n {\r\n key: 'removeAndDelete',\r\n value: () => translate('RemoveMovieAndDeleteFiles'),\r\n },\r\n];\r\n\r\nfunction createImportListOptionsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.settings.advancedSettings,\r\n createSettingsSectionSelector(SECTION),\r\n (advancedSettings, sectionSettings) => {\r\n return {\r\n advancedSettings,\r\n save: sectionSettings.isSaving,\r\n ...sectionSettings,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface ImportListOptionsPageProps {\r\n setChildSave(saveCallback: () => void): void;\r\n onChildStateChange(payload: unknown): void;\r\n}\r\n\r\nfunction ImportListOptions(props: ImportListOptionsPageProps) {\r\n const { setChildSave, onChildStateChange } = props;\r\n\r\n const {\r\n isSaving,\r\n hasPendingChanges,\r\n advancedSettings,\r\n isFetching,\r\n error,\r\n settings,\r\n hasSettings,\r\n } = useSelector(createImportListOptionsSelector());\r\n\r\n const { listSyncLevel } = settings;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const onInputChange = useCallback(\r\n ({ name, value }: { name: string; value: unknown }) => {\r\n // @ts-expect-error 'setImportListOptionsValue' isn't typed yet\r\n dispatch(setImportListOptionsValue({ name, value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n dispatch(fetchImportListOptions());\r\n setChildSave(() => dispatch(saveImportListOptions()));\r\n\r\n return () => {\r\n dispatch(clearPendingChanges({ section: SECTION }));\r\n };\r\n }, [dispatch, setChildSave]);\r\n\r\n useEffect(() => {\r\n onChildStateChange({\r\n isSaving,\r\n hasPendingChanges,\r\n });\r\n }, [onChildStateChange, isSaving, hasPendingChanges]);\r\n\r\n const translatedLevelOptions = cleanLibraryLevelOptions.map(\r\n ({ key, value }) => {\r\n return {\r\n key,\r\n value: value(),\r\n };\r\n }\r\n );\r\n\r\n return advancedSettings ? (\r\n
\r\n {isFetching ? : null}\r\n\r\n {!isFetching && error ? (\r\n {translate('ListOptionsLoadError')}\r\n ) : null}\r\n\r\n {hasSettings && !isFetching && !error ? (\r\n
\r\n \r\n {translate('CleanLibraryLevel')}\r\n \r\n \r\n
\r\n ) : null}\r\n
\r\n ) : null;\r\n}\r\n\r\nexport default ImportListOptions;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component, Fragment } from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport { icons } from 'Helpers/Props';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport ImportListExclusions from './ImportListExclusions/ImportListExclusions';\r\nimport ImportListsConnector from './ImportLists/ImportListsConnector';\r\nimport ManageImportListsModal from './ImportLists/Manage/ManageImportListsModal';\r\nimport ImportListOptions from './Options/ImportListOptions';\r\n\r\nclass ImportListSettings extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._saveCallback = null;\r\n\r\n this.state = {\r\n isSaving: false,\r\n hasPendingChanges: false,\r\n isManageImportListsOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n setChildSave = (saveCallback) => {\r\n this._saveCallback = saveCallback;\r\n };\r\n\r\n onChildStateChange = (payload) => {\r\n this.setState(payload);\r\n };\r\n\r\n onManageImportListsPress = () => {\r\n this.setState({ isManageImportListsOpen: true });\r\n };\r\n\r\n onManageImportListsModalClose = () => {\r\n this.setState({ isManageImportListsOpen: false });\r\n };\r\n\r\n onSavePress = () => {\r\n if (this._saveCallback) {\r\n this._saveCallback();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isTestingAll,\r\n dispatchTestAllImportLists\r\n } = this.props;\r\n\r\n const {\r\n isSaving,\r\n hasPendingChanges,\r\n isManageImportListsOpen\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n }\r\n onSavePress={this.onSavePress}\r\n />\r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nImportListSettings.propTypes = {\r\n isTestingAll: PropTypes.bool.isRequired,\r\n dispatchTestAllImportLists: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ImportListSettings;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { testAllImportLists } from 'Store/Actions/settingsActions';\r\nimport ImportListSettings from './ImportListSettings';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.importLists.isTestingAll,\r\n (isTestingAll) => {\r\n return {\r\n isTestingAll\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchTestAllImportLists: testAllImportLists\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ImportListSettings);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\n\r\nclass AddIndexerPresetMenuItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n name,\r\n implementation,\r\n implementationName\r\n } = this.props;\r\n\r\n this.props.onPress({\r\n name,\r\n implementation,\r\n implementationName\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n name,\r\n implementation,\r\n implementationName,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {name}\r\n \r\n );\r\n }\r\n}\r\n\r\nAddIndexerPresetMenuItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddIndexerPresetMenuItem;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Link from 'Components/Link/Link';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport { sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddIndexerPresetMenuItem from './AddIndexerPresetMenuItem';\r\nimport styles from './AddIndexerItem.css';\r\n\r\nclass AddIndexerItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onIndexerSelect = () => {\r\n const {\r\n implementation,\r\n implementationName\r\n } = this.props;\r\n\r\n this.props.onIndexerSelect({ implementation, implementationName });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n implementation,\r\n implementationName,\r\n infoLink,\r\n presets,\r\n onIndexerSelect\r\n } = this.props;\r\n\r\n const hasPresets = !!presets && !!presets.length;\r\n\r\n return (\r\n \r\n \r\n\r\n
\r\n
\r\n {implementationName}\r\n
\r\n\r\n
\r\n {\r\n hasPresets &&\r\n \r\n \r\n {translate('Custom')}\r\n \r\n\r\n \r\n \r\n {translate('Presets')}\r\n \r\n\r\n \r\n {\r\n presets.map((preset) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n \r\n }\r\n\r\n \r\n {translate('MoreInfo')}\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nAddIndexerItem.propTypes = {\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n infoLink: PropTypes.string.isRequired,\r\n presets: PropTypes.arrayOf(PropTypes.object),\r\n onIndexerSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddIndexerItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"indexer\":\"AddIndexerItem-indexer-tTo8N Card-card-aoesq\",\"underlay\":\"AddIndexerItem-underlay-u2paU\",\"overlay\":\"AddIndexerItem-overlay-Z0Tf4\",\"name\":\"AddIndexerItem-name-us4Tk\",\"actions\":\"AddIndexerItem-actions-u_UFM\",\"presetsMenu\":\"AddIndexerItem-presetsMenu-a2J0h Menu-menu-Uz3_0\",\"presetsMenuButton\":\"AddIndexerItem-presetsMenuButton-HCMQr Button-button-paJ9a Link-link-RInnp\"};","// extracted by mini-css-extract-plugin\nexport default {\"indexers\":\"AddIndexerModalContent-indexers-zh7Wv\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddIndexerItem from './AddIndexerItem';\r\nimport styles from './AddIndexerModalContent.css';\r\n\r\nclass AddIndexerModalContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n usenetIndexers,\r\n torrentIndexers,\r\n onIndexerSelect,\r\n onModalClose\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {translate('AddIndexer')}\r\n \r\n\r\n \r\n {\r\n isSchemaFetching &&\r\n \r\n }\r\n\r\n {\r\n !isSchemaFetching && !!schemaError &&\r\n \r\n {translate('AddIndexerError')}\r\n \r\n }\r\n\r\n {\r\n isSchemaPopulated && !schemaError &&\r\n
\r\n\r\n \r\n
\r\n {translate('SupportedIndexers')}\r\n
\r\n
\r\n {translate('SupportedIndexersMoreInfo')}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {\r\n usenetIndexers.map((indexer) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n
\r\n\r\n
\r\n
\r\n {\r\n torrentIndexers.map((indexer) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n
\r\n
\r\n }\r\n
\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nAddIndexerModalContent.propTypes = {\r\n isSchemaFetching: PropTypes.bool.isRequired,\r\n isSchemaPopulated: PropTypes.bool.isRequired,\r\n schemaError: PropTypes.object,\r\n usenetIndexers: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n torrentIndexers: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onIndexerSelect: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddIndexerModalContent;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchIndexerSchema, selectIndexerSchema } from 'Store/Actions/settingsActions';\r\nimport AddIndexerModalContent from './AddIndexerModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.indexers,\r\n (indexers) => {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n } = indexers;\r\n\r\n const usenetIndexers = _.filter(schema, { protocol: 'usenet' });\r\n const torrentIndexers = _.filter(schema, { protocol: 'torrent' });\r\n\r\n return {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n usenetIndexers,\r\n torrentIndexers\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchIndexerSchema,\r\n selectIndexerSchema\r\n};\r\n\r\nclass AddIndexerModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchIndexerSchema();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onIndexerSelect = ({ implementation, implementationName, name }) => {\r\n this.props.selectIndexerSchema({ implementation, implementationName, presetName: name });\r\n this.props.onModalClose({ indexerSelected: true });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddIndexerModalContentConnector.propTypes = {\r\n fetchIndexerSchema: PropTypes.func.isRequired,\r\n selectIndexerSchema: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddIndexerModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddIndexerModalContentConnector from './AddIndexerModalContentConnector';\r\n\r\nfunction AddIndexerModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddIndexerModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddIndexerModal;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport ProviderFieldFormGroup from 'Components/Form/ProviderFieldFormGroup';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport AdvancedSettingsButton from 'Settings/AdvancedSettingsButton';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditIndexerModalContent.css';\r\n\r\nfunction EditIndexerModalContent(props) {\r\n const {\r\n advancedSettings,\r\n isFetching,\r\n error,\r\n isSaving,\r\n isTesting,\r\n saveError,\r\n item,\r\n onInputChange,\r\n onFieldChange,\r\n onModalClose,\r\n onSavePress,\r\n onTestPress,\r\n onDeleteIndexerPress,\r\n onAdvancedSettingsPress,\r\n ...otherProps\r\n } = props;\r\n\r\n const {\r\n id,\r\n implementationName,\r\n name,\r\n enableRss,\r\n enableAutomaticSearch,\r\n enableInteractiveSearch,\r\n supportsRss,\r\n supportsSearch,\r\n tags,\r\n fields,\r\n priority,\r\n protocol,\r\n downloadClientId\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditIndexerImplementation', { implementationName }) : translate('AddIndexerImplementation', { implementationName })}\r\n \r\n\r\n \r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('AddIndexerError')}\r\n \r\n }\r\n\r\n {\r\n !isFetching && !error &&\r\n
\r\n \r\n {translate('Name')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('EnableRss')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('EnableAutomaticSearch')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('EnableInteractiveSearch')}\r\n\r\n \r\n \r\n\r\n {\r\n fields.map((field) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n {translate('IndexerPriority')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('DownloadClient')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n \r\n }\r\n
\r\n \r\n {\r\n id &&\r\n \r\n {translate('Delete')}\r\n \r\n }\r\n\r\n \r\n\r\n \r\n {translate('Test')}\r\n \r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nEditIndexerModalContent.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isSaving: PropTypes.bool.isRequired,\r\n isTesting: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onFieldChange: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onTestPress: PropTypes.func.isRequired,\r\n onAdvancedSettingsPress: PropTypes.func.isRequired,\r\n onDeleteIndexerPress: PropTypes.func\r\n};\r\n\r\nexport default EditIndexerModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditIndexerModalContent-deleteButton-gyzhH Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { saveIndexer, setIndexerFieldValue, setIndexerValue, testIndexer, toggleAdvancedSettings } from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditIndexerModalContent from './EditIndexerModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('indexers'),\r\n (advancedSettings, indexer) => {\r\n return {\r\n advancedSettings,\r\n ...indexer\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setIndexerValue,\r\n setIndexerFieldValue,\r\n saveIndexer,\r\n testIndexer,\r\n toggleAdvancedSettings\r\n};\r\n\r\nclass EditIndexerModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {\r\n this.props.onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setIndexerValue({ name, value });\r\n };\r\n\r\n onFieldChange = ({ name, value }) => {\r\n this.props.setIndexerFieldValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveIndexer({ id: this.props.id });\r\n };\r\n\r\n onTestPress = () => {\r\n this.props.testIndexer({ id: this.props.id });\r\n };\r\n\r\n onAdvancedSettingsPress = () => {\r\n this.props.toggleAdvancedSettings();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditIndexerModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n isFetching: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n setIndexerValue: PropTypes.func.isRequired,\r\n setIndexerFieldValue: PropTypes.func.isRequired,\r\n toggleAdvancedSettings: PropTypes.func.isRequired,\r\n saveIndexer: PropTypes.func.isRequired,\r\n testIndexer: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditIndexerModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport EditIndexerModalContentConnector from './EditIndexerModalContentConnector';\r\n\r\nfunction EditIndexerModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditIndexerModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditIndexerModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { cancelSaveIndexer, cancelTestIndexer } from 'Store/Actions/settingsActions';\r\nimport EditIndexerModal from './EditIndexerModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n const section = 'settings.indexers';\r\n\r\n return {\r\n dispatchClearPendingChanges() {\r\n dispatch(clearPendingChanges({ section }));\r\n },\r\n\r\n dispatchCancelTestIndexer() {\r\n dispatch(cancelTestIndexer({ section }));\r\n },\r\n\r\n dispatchCancelSaveIndexer() {\r\n dispatch(cancelSaveIndexer({ section }));\r\n }\r\n };\r\n}\r\n\r\nclass EditIndexerModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.dispatchClearPendingChanges();\r\n this.props.dispatchCancelTestIndexer();\r\n this.props.dispatchCancelSaveIndexer();\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n dispatchClearPendingChanges,\r\n dispatchCancelTestIndexer,\r\n dispatchCancelSaveIndexer,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditIndexerModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n dispatchCancelTestIndexer: PropTypes.func.isRequired,\r\n dispatchCancelSaveIndexer: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(null, createMapDispatchToProps)(EditIndexerModalConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TagList from 'Components/TagList';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditIndexerModalConnector from './EditIndexerModalConnector';\r\nimport styles from './Indexer.css';\r\n\r\nclass Indexer extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditIndexerModalOpen: false,\r\n isDeleteIndexerModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditIndexerPress = () => {\r\n this.setState({ isEditIndexerModalOpen: true });\r\n };\r\n\r\n onEditIndexerModalClose = () => {\r\n this.setState({ isEditIndexerModalOpen: false });\r\n };\r\n\r\n onDeleteIndexerPress = () => {\r\n this.setState({\r\n isEditIndexerModalOpen: false,\r\n isDeleteIndexerModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteIndexerModalClose = () => {\r\n this.setState({ isDeleteIndexerModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteIndexer = () => {\r\n this.props.onConfirmDeleteIndexer(this.props.id);\r\n };\r\n\r\n onCloneIndexerPress = () => {\r\n const {\r\n id,\r\n onCloneIndexerPress\r\n } = this.props;\r\n\r\n onCloneIndexerPress(id);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n name,\r\n enableRss,\r\n enableAutomaticSearch,\r\n enableInteractiveSearch,\r\n tags,\r\n tagList,\r\n supportsRss,\r\n supportsSearch,\r\n priority,\r\n showPriority\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n
\r\n {name}\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n\r\n {\r\n supportsRss && enableRss &&\r\n \r\n }\r\n\r\n {\r\n supportsSearch && enableAutomaticSearch &&\r\n \r\n }\r\n\r\n {\r\n supportsSearch && enableInteractiveSearch &&\r\n \r\n }\r\n\r\n {\r\n showPriority &&\r\n \r\n }\r\n {\r\n !enableRss && !enableAutomaticSearch && !enableInteractiveSearch &&\r\n \r\n {translate('Disabled')}\r\n \r\n }\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nIndexer.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n enableRss: PropTypes.bool.isRequired,\r\n enableAutomaticSearch: PropTypes.bool.isRequired,\r\n enableInteractiveSearch: PropTypes.bool.isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n supportsRss: PropTypes.bool.isRequired,\r\n supportsSearch: PropTypes.bool.isRequired,\r\n onCloneIndexerPress: PropTypes.func.isRequired,\r\n onConfirmDeleteIndexer: PropTypes.func.isRequired,\r\n priority: PropTypes.number.isRequired,\r\n showPriority: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default Indexer;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"indexer\":\"Indexer-indexer-KNEbl Card-card-aoesq\",\"nameContainer\":\"Indexer-nameContainer-iKZDb\",\"name\":\"Indexer-name-FoGnv\",\"cloneButton\":\"Indexer-cloneButton-eTzP5 IconButton-button-t4C5V Link-link-RInnp\",\"enabled\":\"Indexer-enabled-alXzS\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddIndexerModal from './AddIndexerModal';\r\nimport EditIndexerModalConnector from './EditIndexerModalConnector';\r\nimport Indexer from './Indexer';\r\nimport styles from './Indexers.css';\r\n\r\nclass Indexers extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isAddIndexerModalOpen: false,\r\n isEditIndexerModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddIndexerPress = () => {\r\n this.setState({ isAddIndexerModalOpen: true });\r\n };\r\n\r\n onCloneIndexerPress = (id) => {\r\n this.props.dispatchCloneIndexer({ id });\r\n this.setState({ isEditIndexerModalOpen: true });\r\n };\r\n\r\n onAddIndexerModalClose = ({ indexerSelected = false } = {}) => {\r\n this.setState({\r\n isAddIndexerModalOpen: false,\r\n isEditIndexerModalOpen: indexerSelected\r\n });\r\n };\r\n\r\n onEditIndexerModalClose = () => {\r\n this.setState({ isEditIndexerModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n tagList,\r\n dispatchCloneIndexer,\r\n onConfirmDeleteIndexer,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isAddIndexerModalOpen,\r\n isEditIndexerModalOpen\r\n } = this.state;\r\n\r\n const showPriority = items.some((index) => index.priority !== 25);\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nIndexers.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n dispatchCloneIndexer: PropTypes.func.isRequired,\r\n onConfirmDeleteIndexer: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Indexers;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"indexers\":\"Indexers-indexers-CV9Qr\",\"addIndexer\":\"Indexers-addIndexer-RmEIL Indexer-indexer-KNEbl Card-card-aoesq\",\"center\":\"Indexers-center-GKwQP\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { cloneIndexer, deleteIndexer, fetchIndexers } from 'Store/Actions/settingsActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport Indexers from './Indexers';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.indexers', sortByProp('name')),\r\n createTagsSelector(),\r\n (indexers, tagList) => {\r\n return {\r\n ...indexers,\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchIndexers: fetchIndexers,\r\n dispatchDeleteIndexer: deleteIndexer,\r\n dispatchCloneIndexer: cloneIndexer\r\n};\r\n\r\nclass IndexersConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.dispatchFetchIndexers();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteIndexer = (id) => {\r\n this.props.dispatchDeleteIndexer({ id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nIndexersConnector.propTypes = {\r\n dispatchFetchIndexers: PropTypes.func.isRequired,\r\n dispatchDeleteIndexer: PropTypes.func.isRequired,\r\n dispatchCloneIndexer: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(IndexersConnector);\r\n","import React, { useCallback, useState } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ManageIndexersEditModalContent.css';\r\n\r\ninterface SavePayload {\r\n enableRss?: boolean;\r\n enableAutomaticSearch?: boolean;\r\n enableInteractiveSearch?: boolean;\r\n priority?: number;\r\n}\r\n\r\ninterface ManageIndexersEditModalContentProps {\r\n indexerIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nconst NO_CHANGE = 'noChange';\r\n\r\nconst enableOptions = [\r\n {\r\n key: NO_CHANGE,\r\n get value() {\r\n return translate('NoChange');\r\n },\r\n isDisabled: true,\r\n },\r\n {\r\n key: 'enabled',\r\n get value() {\r\n return translate('Enabled');\r\n },\r\n },\r\n {\r\n key: 'disabled',\r\n get value() {\r\n return translate('Disabled');\r\n },\r\n },\r\n];\r\n\r\nfunction ManageIndexersEditModalContent(\r\n props: ManageIndexersEditModalContentProps\r\n) {\r\n const { indexerIds, onSavePress, onModalClose } = props;\r\n\r\n const [enableRss, setEnableRss] = useState(NO_CHANGE);\r\n const [enableAutomaticSearch, setEnableAutomaticSearch] = useState(NO_CHANGE);\r\n const [enableInteractiveSearch, setEnableInteractiveSearch] =\r\n useState(NO_CHANGE);\r\n const [priority, setPriority] = useState(null);\r\n\r\n const save = useCallback(() => {\r\n let hasChanges = false;\r\n const payload: SavePayload = {};\r\n\r\n if (enableRss !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.enableRss = enableRss === 'enabled';\r\n }\r\n\r\n if (enableAutomaticSearch !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.enableAutomaticSearch = enableAutomaticSearch === 'enabled';\r\n }\r\n\r\n if (enableInteractiveSearch !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.enableInteractiveSearch = enableInteractiveSearch === 'enabled';\r\n }\r\n\r\n if (priority !== null) {\r\n hasChanges = true;\r\n payload.priority = priority as number;\r\n }\r\n\r\n if (hasChanges) {\r\n onSavePress(payload);\r\n }\r\n\r\n onModalClose();\r\n }, [\r\n enableRss,\r\n enableAutomaticSearch,\r\n enableInteractiveSearch,\r\n priority,\r\n onSavePress,\r\n onModalClose,\r\n ]);\r\n\r\n const onInputChange = useCallback(\r\n ({ name, value }: { name: string; value: string }) => {\r\n switch (name) {\r\n case 'enableRss':\r\n setEnableRss(value);\r\n break;\r\n case 'enableAutomaticSearch':\r\n setEnableAutomaticSearch(value);\r\n break;\r\n case 'enableInteractiveSearch':\r\n setEnableInteractiveSearch(value);\r\n break;\r\n case 'priority':\r\n setPriority(value);\r\n break;\r\n default:\r\n console.warn(`EditIndexersModalContent Unknown Input: '${name}'`);\r\n }\r\n },\r\n []\r\n );\r\n\r\n const selectedCount = indexerIds.length;\r\n\r\n return (\r\n \r\n {translate('EditSelectedIndexers')}\r\n\r\n \r\n \r\n {translate('EnableRss')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('EnableAutomaticSearch')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('EnableInteractiveSearch')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Priority')}\r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n {translate('CountIndexersSelected', { count: selectedCount })}\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ManageIndexersEditModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalFooter\":\"ManageIndexersEditModalContent-modalFooter-vZ7Ni ModalFooter-modalFooter-wjkx5\",\"selected\":\"ManageIndexersEditModalContent-selected-AIOM2\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ManageIndexersEditModalContent from './ManageIndexersEditModalContent';\r\n\r\ninterface ManageIndexersEditModalProps {\r\n isOpen: boolean;\r\n indexerIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageIndexersEditModal(props: ManageIndexersEditModalProps) {\r\n const { isOpen, indexerIds, onSavePress, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageIndexersEditModal;\r\n","import React, { useCallback } from 'react';\r\nimport Label from 'Components/Label';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport Column from 'Components/Table/Column';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport TagListConnector from 'Components/TagListConnector';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ManageIndexersModalRow.css';\r\n\r\ninterface ManageIndexersModalRowProps {\r\n id: number;\r\n name: string;\r\n enableRss: boolean;\r\n enableAutomaticSearch: boolean;\r\n enableInteractiveSearch: boolean;\r\n priority: number;\r\n implementation: string;\r\n tags: number[];\r\n columns: Column[];\r\n isSelected?: boolean;\r\n onSelectedChange(result: SelectStateInputProps): void;\r\n}\r\n\r\nfunction ManageIndexersModalRow(props: ManageIndexersModalRowProps) {\r\n const {\r\n id,\r\n isSelected,\r\n name,\r\n enableRss,\r\n enableAutomaticSearch,\r\n enableInteractiveSearch,\r\n priority,\r\n implementation,\r\n tags,\r\n onSelectedChange,\r\n } = props;\r\n\r\n const onSelectedChangeWrapper = useCallback(\r\n (result: SelectStateInputProps) => {\r\n onSelectedChange({\r\n ...result,\r\n });\r\n },\r\n [onSelectedChange]\r\n );\r\n\r\n return (\r\n \r\n \r\n\r\n {name}\r\n\r\n \r\n {implementation}\r\n \r\n\r\n \r\n \r\n {enableRss ? translate('Yes') : translate('No')}\r\n \r\n \r\n\r\n \r\n \r\n {enableAutomaticSearch ? translate('Yes') : translate('No')}\r\n \r\n \r\n\r\n \r\n \r\n {enableInteractiveSearch ? translate('Yes') : translate('No')}\r\n \r\n \r\n\r\n {priority}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageIndexersModalRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"name\":\"ManageIndexersModalRow-name-hpa0l TableRowCell-cell-giPrj\",\"tags\":\"ManageIndexersModalRow-tags-H3xmx TableRowCell-cell-giPrj\",\"enableRss\":\"ManageIndexersModalRow-enableRss-p0XNi TableRowCell-cell-giPrj\",\"enableAutomaticSearch\":\"ManageIndexersModalRow-enableAutomaticSearch-PZHf0 TableRowCell-cell-giPrj\",\"enableInteractiveSearch\":\"ManageIndexersModalRow-enableInteractiveSearch-iIJEt TableRowCell-cell-giPrj\",\"priority\":\"ManageIndexersModalRow-priority-PTS6N TableRowCell-cell-giPrj\",\"implementation\":\"ManageIndexersModalRow-implementation-DkTDw TableRowCell-cell-giPrj\"};","import { uniq } from 'lodash';\r\nimport React, { useCallback, useMemo, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport { IndexerAppState } from 'App/State/SettingsAppState';\r\nimport { Tag } from 'App/State/TagsAppState';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Label from 'Components/Label';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport Indexer from 'typings/Indexer';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './TagsModalContent.css';\r\n\r\ninterface TagsModalContentProps {\r\n ids: number[];\r\n onApplyTagsPress: (tags: number[], applyTags: string) => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction TagsModalContent(props: TagsModalContentProps) {\r\n const { ids, onModalClose, onApplyTagsPress } = props;\r\n\r\n const allIndexers: IndexerAppState = useSelector(\r\n (state: AppState) => state.settings.indexers\r\n );\r\n const tagList: Tag[] = useSelector(createTagsSelector());\r\n\r\n const [tags, setTags] = useState([]);\r\n const [applyTags, setApplyTags] = useState('add');\r\n\r\n const indexersTags = useMemo(() => {\r\n const tags = ids.reduce((acc: number[], id) => {\r\n const s = allIndexers.items.find((s: Indexer) => s.id === id);\r\n\r\n if (s) {\r\n acc.push(...s.tags);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return uniq(tags);\r\n }, [ids, allIndexers]);\r\n\r\n const onTagsChange = useCallback(\r\n ({ value }: { value: number[] }) => {\r\n setTags(value);\r\n },\r\n [setTags]\r\n );\r\n\r\n const onApplyTagsChange = useCallback(\r\n ({ value }: { value: string }) => {\r\n setApplyTags(value);\r\n },\r\n [setApplyTags]\r\n );\r\n\r\n const onApplyPress = useCallback(() => {\r\n onApplyTagsPress(tags, applyTags);\r\n }, [tags, applyTags, onApplyTagsPress]);\r\n\r\n const applyTagsOptions = [\r\n {\r\n key: 'add',\r\n get value() {\r\n return translate('Add');\r\n },\r\n },\r\n {\r\n key: 'remove',\r\n get value() {\r\n return translate('Remove');\r\n },\r\n },\r\n {\r\n key: 'replace',\r\n get value() {\r\n return translate('Replace');\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n \r\n {translate('Tags')}\r\n\r\n \r\n
\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ApplyTags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Result')}\r\n\r\n
\r\n {indexersTags.map((id) => {\r\n const tag = tagList.find((t) => t.id === id);\r\n\r\n if (!tag) {\r\n return null;\r\n }\r\n\r\n const removeTag =\r\n (applyTags === 'remove' && tags.indexOf(id) > -1) ||\r\n (applyTags === 'replace' && tags.indexOf(id) === -1);\r\n\r\n return (\r\n \r\n {tag.label}\r\n \r\n );\r\n })}\r\n\r\n {(applyTags === 'add' || applyTags === 'replace') &&\r\n tags.map((id) => {\r\n const tag = tagList.find((t) => t.id === id);\r\n\r\n if (!tag) {\r\n return null;\r\n }\r\n\r\n if (indexersTags.indexOf(id) > -1) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {tag.label}\r\n \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default TagsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"renameIcon\":\"TagsModalContent-renameIcon-g4MBi\",\"message\":\"TagsModalContent-message-jZkJe\",\"result\":\"TagsModalContent-result-HDHRf\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport TagsModalContent from './TagsModalContent';\r\n\r\ninterface TagsModalProps {\r\n isOpen: boolean;\r\n ids: number[];\r\n onApplyTagsPress: (tags: number[], applyTags: string) => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction TagsModal(props: TagsModalProps) {\r\n const { isOpen, onModalClose, ...otherProps } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default TagsModal;\r\n","import React, { useCallback, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { IndexerAppState } from 'App/State/SettingsAppState';\r\nimport Alert from 'Components/Alert';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport useSelectState from 'Helpers/Hooks/useSelectState';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { SortDirection } from 'Helpers/Props/sortDirections';\r\nimport {\r\n bulkDeleteIndexers,\r\n bulkEditIndexers,\r\n setManageIndexersSort,\r\n} from 'Store/Actions/settingsActions';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport ManageIndexersEditModal from './Edit/ManageIndexersEditModal';\r\nimport ManageIndexersModalRow from './ManageIndexersModalRow';\r\nimport TagsModal from './Tags/TagsModal';\r\nimport styles from './ManageIndexersModalContent.css';\r\n\r\n// TODO: This feels janky to do, but not sure of a better way currently\r\ntype OnSelectedChangeCallback = React.ComponentProps<\r\n typeof ManageIndexersModalRow\r\n>['onSelectedChange'];\r\n\r\nconst COLUMNS = [\r\n {\r\n name: 'name',\r\n label: () => translate('Name'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'implementation',\r\n label: () => translate('Implementation'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'enableRss',\r\n label: () => translate('EnableRss'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'enableAutomaticSearch',\r\n label: () => translate('EnableAutomaticSearch'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'enableInteractiveSearch',\r\n label: () => translate('EnableInteractiveSearch'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'priority',\r\n label: () => translate('Priority'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'tags',\r\n label: () => translate('Tags'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n];\r\n\r\ninterface ManageIndexersModalContentProps {\r\n onModalClose(): void;\r\n sortKey?: string;\r\n sortDirection?: SortDirection;\r\n}\r\n\r\nfunction ManageIndexersModalContent(props: ManageIndexersModalContentProps) {\r\n const { onModalClose } = props;\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n isDeleting,\r\n isSaving,\r\n error,\r\n items,\r\n sortKey,\r\n sortDirection,\r\n }: IndexerAppState = useSelector(\r\n createClientSideCollectionSelector('settings.indexers')\r\n );\r\n const dispatch = useDispatch();\r\n\r\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\r\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\r\n const [isTagsModalOpen, setIsTagsModalOpen] = useState(false);\r\n const [isSavingTags, setIsSavingTags] = useState(false);\r\n\r\n const [selectState, setSelectState] = useSelectState();\r\n\r\n const { allSelected, allUnselected, selectedState } = selectState;\r\n\r\n const selectedIds: number[] = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const selectedCount = selectedIds.length;\r\n\r\n const onSortPress = useCallback(\r\n (value: string) => {\r\n dispatch(setManageIndexersSort({ sortKey: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onDeletePress = useCallback(() => {\r\n setIsDeleteModalOpen(true);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onDeleteModalClose = useCallback(() => {\r\n setIsDeleteModalOpen(false);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onEditPress = useCallback(() => {\r\n setIsEditModalOpen(true);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onEditModalClose = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onConfirmDelete = useCallback(() => {\r\n dispatch(bulkDeleteIndexers({ ids: selectedIds }));\r\n setIsDeleteModalOpen(false);\r\n }, [selectedIds, dispatch]);\r\n\r\n const onSavePress = useCallback(\r\n (payload: object) => {\r\n setIsEditModalOpen(false);\r\n\r\n dispatch(\r\n bulkEditIndexers({\r\n ids: selectedIds,\r\n ...payload,\r\n })\r\n );\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onTagsPress = useCallback(() => {\r\n setIsTagsModalOpen(true);\r\n }, [setIsTagsModalOpen]);\r\n\r\n const onTagsModalClose = useCallback(() => {\r\n setIsTagsModalOpen(false);\r\n }, [setIsTagsModalOpen]);\r\n\r\n const onApplyTagsPress = useCallback(\r\n (tags: number[], applyTags: string) => {\r\n setIsSavingTags(true);\r\n setIsTagsModalOpen(false);\r\n\r\n dispatch(\r\n bulkEditIndexers({\r\n ids: selectedIds,\r\n tags,\r\n applyTags,\r\n })\r\n );\r\n },\r\n [selectedIds, dispatch]\r\n );\r\n\r\n const onSelectAllChange = useCallback(\r\n ({ value }: SelectStateInputProps) => {\r\n setSelectState({ type: value ? 'selectAll' : 'unselectAll', items });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const onSelectedChange = useCallback(\r\n ({ id, value, shiftKey = false }) => {\r\n setSelectState({\r\n type: 'toggleSelected',\r\n items,\r\n id,\r\n isSelected: value,\r\n shiftKey,\r\n });\r\n },\r\n [items, setSelectState]\r\n );\r\n\r\n const errorMessage = getErrorMessage(error, 'Unable to load indexers.');\r\n const anySelected = selectedCount > 0;\r\n\r\n return (\r\n \r\n {translate('ManageIndexers')}\r\n \r\n {isFetching ? : null}\r\n\r\n {error ?
{errorMessage}
: null}\r\n\r\n {isPopulated && !error && !items.length ? (\r\n {translate('NoIndexersFound')}\r\n ) : null}\r\n\r\n {isPopulated && !!items.length && !isFetching && !isFetching ? (\r\n \r\n \r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n ) : null}\r\n
\r\n\r\n \r\n
\r\n \r\n {translate('Delete')}\r\n \r\n\r\n \r\n {translate('Edit')}\r\n \r\n\r\n \r\n {translate('SetTags')}\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ManageIndexersModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"leftButtons\":\"ManageIndexersModalContent-leftButtons-zb78b\",\"rightButtons\":\"ManageIndexersModalContent-rightButtons-NdpSY\",\"deleteButton\":\"ManageIndexersModalContent-deleteButton-YJFbP Button-button-paJ9a Link-link-RInnp\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ManageIndexersModalContent from './ManageIndexersModalContent';\r\n\r\ninterface ManageIndexersModalProps {\r\n isOpen: boolean;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageIndexersModal(props: ManageIndexersModalProps) {\r\n const { isOpen, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageIndexersModal;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction IndexerOptions(props) {\r\n const {\r\n advancedSettings,\r\n isFetching,\r\n error,\r\n settings,\r\n hasSettings,\r\n onInputChange,\r\n onWhitelistedSubtitleChange\r\n } = props;\r\n\r\n return (\r\n
\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && error &&\r\n \r\n {translate('IndexerOptionsLoadError')}\r\n \r\n }\r\n\r\n {\r\n hasSettings && !isFetching && !error &&\r\n
\r\n \r\n {translate('MinimumAge')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Retention')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('MaximumSize')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('PreferIndexerFlags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('AvailabilityDelay')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RssSyncInterval')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('WhitelistedSubtitleTags')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('AllowHardcodedSubs')}\r\n\r\n \r\n \r\n \r\n }\r\n
\r\n );\r\n}\r\n\r\nIndexerOptions.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n settings: PropTypes.object.isRequired,\r\n hasSettings: PropTypes.bool.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onWhitelistedSubtitleChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default IndexerOptions;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { fetchIndexerOptions, saveIndexerOptions, setIndexerOptionsValue } from 'Store/Actions/settingsActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport IndexerOptions from './IndexerOptions';\r\n\r\nconst SECTION = 'indexerOptions';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createSettingsSectionSelector(SECTION),\r\n (advancedSettings, sectionSettings) => {\r\n return {\r\n advancedSettings,\r\n ...sectionSettings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchIndexerOptions: fetchIndexerOptions,\r\n dispatchSetIndexerOptionsValue: setIndexerOptionsValue,\r\n dispatchSaveIndexerOptions: saveIndexerOptions,\r\n dispatchClearPendingChanges: clearPendingChanges\r\n};\r\n\r\nclass IndexerOptionsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n dispatchFetchIndexerOptions,\r\n dispatchSaveIndexerOptions,\r\n onChildMounted\r\n } = this.props;\r\n\r\n dispatchFetchIndexerOptions();\r\n onChildMounted(dispatchSaveIndexerOptions);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n hasPendingChanges,\r\n isSaving,\r\n onChildStateChange\r\n } = this.props;\r\n\r\n if (\r\n prevProps.isSaving !== isSaving ||\r\n prevProps.hasPendingChanges !== hasPendingChanges\r\n ) {\r\n onChildStateChange({\r\n isSaving,\r\n hasPendingChanges\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.dispatchClearPendingChanges({ section: `settings.${SECTION}` });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.dispatchSetIndexerOptionsValue({ name, value });\r\n };\r\n\r\n onWhitelistedSubtitleChange = ({ name, value }) => {\r\n this.props.dispatchSetIndexerOptionsValue({ name, value: value.join(',') });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nIndexerOptionsConnector.propTypes = {\r\n isSaving: PropTypes.bool.isRequired,\r\n hasPendingChanges: PropTypes.bool.isRequired,\r\n dispatchFetchIndexerOptions: PropTypes.func.isRequired,\r\n dispatchSetIndexerOptionsValue: PropTypes.func.isRequired,\r\n dispatchSaveIndexerOptions: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n onChildMounted: PropTypes.func.isRequired,\r\n onChildStateChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(IndexerOptionsConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component, Fragment } from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport { icons } from 'Helpers/Props';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport IndexersConnector from './Indexers/IndexersConnector';\r\nimport ManageIndexersModal from './Indexers/Manage/ManageIndexersModal';\r\nimport IndexerOptionsConnector from './Options/IndexerOptionsConnector';\r\n\r\nclass IndexerSettings extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._saveCallback = null;\r\n\r\n this.state = {\r\n isSaving: false,\r\n hasPendingChanges: false,\r\n isManageIndexersOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChildMounted = (saveCallback) => {\r\n this._saveCallback = saveCallback;\r\n };\r\n\r\n onChildStateChange = (payload) => {\r\n this.setState(payload);\r\n };\r\n\r\n onManageIndexersPress = () => {\r\n this.setState({ isManageIndexersOpen: true });\r\n };\r\n\r\n onManageIndexersModalClose = () => {\r\n this.setState({ isManageIndexersOpen: false });\r\n };\r\n\r\n onSavePress = () => {\r\n if (this._saveCallback) {\r\n this._saveCallback();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isTestingAll,\r\n dispatchTestAllIndexers\r\n } = this.props;\r\n\r\n const {\r\n isSaving,\r\n hasPendingChanges,\r\n isManageIndexersOpen\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n }\r\n onSavePress={this.onSavePress}\r\n />\r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nIndexerSettings.propTypes = {\r\n isTestingAll: PropTypes.bool.isRequired,\r\n dispatchTestAllIndexers: PropTypes.func.isRequired\r\n};\r\n\r\nexport default IndexerSettings;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { testAllIndexers } from 'Store/Actions/settingsActions';\r\nimport IndexerSettings from './IndexerSettings';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.indexers.isTestingAll,\r\n (isTestingAll) => {\r\n return {\r\n isTestingAll\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchTestAllIndexers: testAllIndexers\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(IndexerSettings);\r\n","import React, { useCallback, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport { deleteRootFolder } from 'Store/Actions/rootFolderActions';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './RootFolderRow.css';\r\n\r\ninterface RootFolderRowProps {\r\n id: number;\r\n path: string;\r\n accessible: boolean;\r\n freeSpace?: number;\r\n unmappedFolders: object[];\r\n}\r\n\r\nfunction RootFolderRow(props: RootFolderRowProps) {\r\n const { id, path, accessible, freeSpace = 0, unmappedFolders = [] } = props;\r\n\r\n const isUnavailable = !accessible;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\r\n\r\n const onDeletePress = useCallback(() => {\r\n setIsDeleteModalOpen(true);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onDeleteModalClose = useCallback(() => {\r\n setIsDeleteModalOpen(false);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onConfirmDelete = useCallback(() => {\r\n dispatch(deleteRootFolder({ id }));\r\n\r\n setIsDeleteModalOpen(false);\r\n }, [dispatch, id]);\r\n\r\n return (\r\n \r\n \r\n {isUnavailable ? (\r\n
\r\n {path}\r\n\r\n \r\n
\r\n ) : (\r\n \r\n {path}\r\n \r\n )}\r\n
\r\n\r\n \r\n {isUnavailable || isNaN(Number(freeSpace))\r\n ? '-'\r\n : formatBytes(freeSpace)}\r\n \r\n\r\n \r\n {isUnavailable ? '-' : unmappedFolders.length}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default RootFolderRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"RootFolderRow-link-zblA4 Link-link-RInnp\",\"unavailablePath\":\"RootFolderRow-unavailablePath-ygS2p\",\"unavailableLabel\":\"RootFolderRow-unavailableLabel-d_l6T Label-label-DYldh\",\"freeSpace\":\"RootFolderRow-freeSpace-Zzpi0 TableRowCell-cell-giPrj\",\"unmappedFolders\":\"RootFolderRow-unmappedFolders-oPsl9 TableRowCell-cell-giPrj\",\"actions\":\"RootFolderRow-actions-zB4PR TableRowCell-cell-giPrj\"};","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport createRootFoldersSelector from 'Store/Selectors/createRootFoldersSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport RootFolderRow from './RootFolderRow';\r\n\r\nconst rootFolderColumns = [\r\n {\r\n name: 'path',\r\n label: () => translate('Path'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'freeSpace',\r\n label: () => translate('FreeSpace'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'unmappedFolders',\r\n label: () => translate('UnmappedFolders'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'actions',\r\n isVisible: true,\r\n },\r\n];\r\n\r\nfunction RootFolders() {\r\n const { isFetching, isPopulated, error, items } = useSelector(\r\n createRootFoldersSelector()\r\n );\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(fetchRootFolders());\r\n }, [dispatch]);\r\n\r\n if (isFetching && !isPopulated) {\r\n return ;\r\n }\r\n\r\n if (!isFetching && !!error) {\r\n return (\r\n {translate('RootFoldersLoadError')}\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {items.map((rootFolder) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default RootFolders;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"option\":\"NamingOption-option-OKNvA\",\"token\":\"NamingOption-token-of4IX\",\"example\":\"NamingOption-example-kZLgU\",\"small\":\"NamingOption-small-vYnmm\",\"large\":\"NamingOption-large-p2cXH\",\"footNotes\":\"NamingOption-footNotes-k9vwL\",\"title\":\"NamingOption-title-tq5Wz\",\"lower\":\"NamingOption-lower-HoDkb\",\"upper\":\"NamingOption-upper-pA7T0\",\"isFullFilename\":\"NamingOption-isFullFilename-uqt7V\"};","import classNames from 'classnames';\r\nimport React, { useCallback } from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport { Size } from 'Helpers/Props/sizes';\r\nimport TokenCase from './TokenCase';\r\nimport TokenSeparator from './TokenSeparator';\r\nimport styles from './NamingOption.css';\r\n\r\ninterface NamingOptionProps {\r\n token: string;\r\n tokenSeparator: TokenSeparator;\r\n example: string;\r\n tokenCase: TokenCase;\r\n isFullFilename?: boolean;\r\n footNotes?: string;\r\n size?: Extract;\r\n onPress: ({\r\n isFullFilename,\r\n tokenValue,\r\n }: {\r\n isFullFilename: boolean;\r\n tokenValue: string;\r\n }) => void;\r\n}\r\n\r\nfunction NamingOption(props: NamingOptionProps) {\r\n const {\r\n token,\r\n tokenSeparator,\r\n example,\r\n tokenCase,\r\n isFullFilename = false,\r\n footNotes,\r\n size = 'small',\r\n onPress,\r\n } = props;\r\n\r\n const handlePress = useCallback(() => {\r\n let tokenValue = token;\r\n\r\n tokenValue = tokenValue.replace(/ /g, tokenSeparator);\r\n\r\n if (tokenCase === 'lower') {\r\n tokenValue = token.toLowerCase();\r\n } else if (tokenCase === 'upper') {\r\n tokenValue = token.toUpperCase();\r\n }\r\n\r\n onPress({ isFullFilename, tokenValue });\r\n }, [token, tokenCase, tokenSeparator, isFullFilename, onPress]);\r\n\r\n return (\r\n \r\n
{token.replace(/ /g, tokenSeparator)}
\r\n\r\n
\r\n {example.replace(/ /g, tokenSeparator)}\r\n\r\n {footNotes ? (\r\n
\r\n {footNotes}\r\n
\r\n ) : null}\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default NamingOption;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"groups\":\"NamingModal-groups-DrUz_\",\"namingSelectContainer\":\"NamingModal-namingSelectContainer-OFvkv\",\"namingSelect\":\"NamingModal-namingSelect-p7fJH SelectInput-select-M6gsU Input-input-KWeec\",\"footNote\":\"NamingModal-footNote-uR3xH\",\"identifier\":\"NamingModal-identifier-xO7Wj\"};","import React, { useCallback, useState } from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport SelectInput from 'Components/Form/SelectInput';\r\nimport TextInput from 'Components/Form/TextInput';\r\nimport Button from 'Components/Link/Button';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { sizes } from 'Helpers/Props';\r\nimport NamingConfig from 'typings/Settings/NamingConfig';\r\nimport translate from 'Utilities/String/translate';\r\nimport NamingOption from './NamingOption';\r\nimport TokenCase from './TokenCase';\r\nimport TokenSeparator from './TokenSeparator';\r\nimport styles from './NamingModal.css';\r\n\r\nconst separatorOptions: { key: TokenSeparator; value: string }[] = [\r\n {\r\n key: ' ',\r\n get value() {\r\n return `${translate('Space')} ( )`;\r\n },\r\n },\r\n {\r\n key: '.',\r\n get value() {\r\n return `${translate('Period')} (.)`;\r\n },\r\n },\r\n {\r\n key: '_',\r\n get value() {\r\n return `${translate('Underscore')} (_)`;\r\n },\r\n },\r\n {\r\n key: '-',\r\n get value() {\r\n return `${translate('Dash')} (-)`;\r\n },\r\n },\r\n];\r\n\r\nconst caseOptions: { key: TokenCase; value: string }[] = [\r\n {\r\n key: 'title',\r\n get value() {\r\n return translate('DefaultCase');\r\n },\r\n },\r\n {\r\n key: 'lower',\r\n get value() {\r\n return translate('Lowercase');\r\n },\r\n },\r\n {\r\n key: 'upper',\r\n get value() {\r\n return translate('Uppercase');\r\n },\r\n },\r\n];\r\n\r\nconst fileNameTokens = [\r\n {\r\n token:\r\n '{Movie Title} ({Release Year}) - {Edition Tags }{[Custom Formats]}{[Quality Full]}{-Release Group}',\r\n example:\r\n 'The Movie - Title (2010) - Ultimate Extended Edition [Surround Sound x264][Bluray-1080p Proper]-EVOLVE',\r\n },\r\n {\r\n token:\r\n '{Movie CleanTitle} {Release Year} - {Edition Tags }{[Custom Formats]}{[Quality Full]}{-Release Group}',\r\n example:\r\n 'The Movie Title 2010 - Ultimate Extended Edition [Surround Sound x264][Bluray-1080p Proper]-EVOLVE',\r\n },\r\n {\r\n token:\r\n '{Movie.CleanTitle}{.Release.Year}{.Edition.Tags}{.Custom.Formats}{.Quality.Full}{-Release Group}',\r\n example:\r\n 'The.Movie.Title.2010.Ultimate.Extended.Edition.Surround.Sound.x264.Bluray-1080p.Proper-EVOLVE',\r\n },\r\n];\r\n\r\nconst movieTokens = [\r\n { token: '{Movie Title}', example: \"Movie's Title\", footNotes: '1' },\r\n { token: '{Movie Title:DE}', example: 'Titel des Films', footNotes: '1' },\r\n { token: '{Movie CleanTitle}', example: 'Movies Title', footNotes: '1' },\r\n {\r\n token: '{Movie CleanTitle:DE}',\r\n example: 'Titel des Films',\r\n footNotes: '1',\r\n },\r\n { token: '{Movie TitleThe}', example: \"Movie's Title, The\", footNotes: '1' },\r\n {\r\n token: '{Movie CleanTitleThe}',\r\n example: 'Movies Title, The',\r\n footNotes: '1',\r\n },\r\n { token: '{Movie OriginalTitle}', example: 'Τίτλος ταινίας', footNotes: '1' },\r\n {\r\n token: '{Movie CleanOriginalTitle}',\r\n example: 'Τίτλος ταινίας',\r\n footNotes: '1',\r\n },\r\n { token: '{Movie TitleFirstCharacter}', example: 'M' },\r\n { token: '{Movie TitleFirstCharacter:DE}', example: 'T' },\r\n {\r\n token: '{Movie Collection}',\r\n example: 'The Movie Collection',\r\n footNotes: '1',\r\n },\r\n { token: '{Movie Certification}', example: 'R' },\r\n { token: '{Release Year}', example: '2009' },\r\n];\r\n\r\nconst movieIdTokens = [\r\n { token: '{ImdbId}', example: 'tt12345' },\r\n { token: '{TmdbId}', example: '123456' },\r\n];\r\n\r\nconst qualityTokens = [\r\n { token: '{Quality Full}', example: 'HDTV-720p Proper' },\r\n { token: '{Quality Title}', example: 'HDTV-720p' },\r\n];\r\n\r\nconst mediaInfoTokens = [\r\n { token: '{MediaInfo Simple}', example: 'x264 DTS' },\r\n { token: '{MediaInfo Full}', example: 'x264 DTS [EN+DE]', footNotes: '1' },\r\n\r\n { token: '{MediaInfo AudioCodec}', example: 'DTS' },\r\n { token: '{MediaInfo AudioChannels}', example: '5.1' },\r\n {\r\n token: '{MediaInfo AudioLanguages}',\r\n example: '[EN+DE]',\r\n footNotes: '1,2',\r\n },\r\n {\r\n token: '{MediaInfo AudioLanguagesAll}',\r\n example: '[EN]',\r\n footNotes: '1',\r\n },\r\n { token: '{MediaInfo SubtitleLanguages}', example: '[DE]', footNotes: '1' },\r\n\r\n { token: '{MediaInfo VideoCodec}', example: 'x264' },\r\n { token: '{MediaInfo VideoBitDepth}', example: '10' },\r\n { token: '{MediaInfo VideoDynamicRange}', example: 'HDR' },\r\n { token: '{MediaInfo VideoDynamicRangeType}', example: 'DV HDR10' },\r\n { token: '{MediaInfo 3D}', example: '3D' },\r\n];\r\n\r\nconst releaseGroupTokens = [\r\n { token: '{Release Group}', example: 'Rls Grp', footNotes: '1' },\r\n];\r\n\r\nconst editionTokens = [\r\n { token: '{Edition Tags}', example: 'IMAX', footNotes: '1' },\r\n];\r\n\r\nconst customFormatTokens = [\r\n { token: '{Custom Formats}', example: 'Surround Sound x264' },\r\n { token: '{Custom Format:FormatName}', example: 'AMZN' },\r\n];\r\n\r\nconst originalTokens = [\r\n { token: '{Original Title}', example: 'Movie.Title.HDTV.x264-EVOLVE' },\r\n { token: '{Original Filename}', example: 'movie title hdtv.x264-Evolve' },\r\n];\r\n\r\ninterface NamingModalProps {\r\n isOpen: boolean;\r\n name: keyof Pick;\r\n value: string;\r\n movie?: boolean;\r\n additional?: boolean;\r\n onInputChange: ({ name, value }: { name: string; value: string }) => void;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction NamingModal(props: NamingModalProps) {\r\n const {\r\n isOpen,\r\n name,\r\n value,\r\n movie = false,\r\n additional = false,\r\n onInputChange,\r\n onModalClose,\r\n } = props;\r\n\r\n const [tokenSeparator, setTokenSeparator] = useState(' ');\r\n const [tokenCase, setTokenCase] = useState('title');\r\n const [selectionStart, setSelectionStart] = useState(null);\r\n const [selectionEnd, setSelectionEnd] = useState(null);\r\n\r\n const handleTokenSeparatorChange = useCallback(\r\n ({ value }: { value: TokenSeparator }) => {\r\n setTokenSeparator(value);\r\n },\r\n [setTokenSeparator]\r\n );\r\n\r\n const handleTokenCaseChange = useCallback(\r\n ({ value }: { value: TokenCase }) => {\r\n setTokenCase(value);\r\n },\r\n [setTokenCase]\r\n );\r\n\r\n const handleInputSelectionChange = useCallback(\r\n (selectionStart: number, selectionEnd: number) => {\r\n setSelectionStart(selectionStart);\r\n setSelectionEnd(selectionEnd);\r\n },\r\n [setSelectionStart, setSelectionEnd]\r\n );\r\n\r\n const handleOptionPress = useCallback(\r\n ({\r\n isFullFilename,\r\n tokenValue,\r\n }: {\r\n isFullFilename: boolean;\r\n tokenValue: string;\r\n }) => {\r\n if (isFullFilename) {\r\n onInputChange({ name, value: tokenValue });\r\n } else if (selectionStart == null || selectionEnd == null) {\r\n onInputChange({\r\n name,\r\n value: `${value}${tokenValue}`,\r\n });\r\n } else {\r\n const start = value.substring(0, selectionStart);\r\n const end = value.substring(selectionEnd);\r\n const newValue = `${start}${tokenValue}${end}`;\r\n\r\n onInputChange({ name, value: newValue });\r\n\r\n setSelectionStart(newValue.length - 1);\r\n setSelectionEnd(newValue.length - 1);\r\n }\r\n },\r\n [name, value, selectionEnd, selectionStart, onInputChange]\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {movie ? translate('FileNameTokens') : translate('FolderNameTokens')}\r\n \r\n\r\n \r\n
\r\n \r\n\r\n \r\n
\r\n\r\n {movie ? (\r\n
\r\n
\r\n {fileNameTokens.map(({ token, example }) => (\r\n \r\n ))}\r\n
\r\n
\r\n ) : null}\r\n\r\n
\r\n
\r\n {movieTokens.map(({ token, example, footNotes }) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n\r\n
\r\n 1\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n {movieIdTokens.map(({ token, example }) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n\r\n {additional ? (\r\n
\r\n
\r\n
\r\n {qualityTokens.map(({ token, example }) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {mediaInfoTokens.map(({ token, example, footNotes }) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n\r\n
\r\n 1\r\n \r\n
\r\n\r\n
\r\n 2\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n {releaseGroupTokens.map(({ token, example, footNotes }) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n\r\n
\r\n 1\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n {editionTokens.map(({ token, example, footNotes }) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n\r\n
\r\n 1\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n {customFormatTokens.map(({ token, example }) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {originalTokens.map(({ token, example }) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n ) : null}\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default NamingModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"namingInput\":\"Naming-namingInput-k33Yg TextInput-input-svfXu Input-input-KWeec\"};","import React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputButton from 'Components/Form/FormInputButton';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport {\r\n fetchNamingExamples,\r\n fetchNamingSettings,\r\n setNamingSettingsValue,\r\n} from 'Store/Actions/settingsActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport NamingConfig from 'typings/Settings/NamingConfig';\r\nimport translate from 'Utilities/String/translate';\r\nimport NamingModal from './NamingModal';\r\nimport styles from './Naming.css';\r\n\r\nconst SECTION = 'naming';\r\n\r\nfunction createNamingSelector() {\r\n return createSelector(\r\n (state: AppState) => state.settings.advancedSettings,\r\n (state: AppState) => state.settings.namingExamples,\r\n createSettingsSectionSelector(SECTION),\r\n (advancedSettings, namingExamples, sectionSettings) => {\r\n return {\r\n advancedSettings,\r\n examples: namingExamples.item,\r\n examplesPopulated: namingExamples.isPopulated,\r\n ...sectionSettings,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface NamingModalOptions {\r\n name: keyof Pick;\r\n movie?: boolean;\r\n additional?: boolean;\r\n}\r\n\r\nfunction Naming() {\r\n const {\r\n advancedSettings,\r\n isFetching,\r\n error,\r\n settings,\r\n hasSettings,\r\n examples,\r\n examplesPopulated,\r\n } = useSelector(createNamingSelector());\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [isNamingModalOpen, setNamingModalOpen, setNamingModalClosed] =\r\n useModalOpenState(false);\r\n const [namingModalOptions, setNamingModalOptions] =\r\n useState(null);\r\n const namingExampleTimeout = useRef>();\r\n\r\n useEffect(() => {\r\n dispatch(fetchNamingSettings());\r\n dispatch(fetchNamingExamples());\r\n\r\n return () => {\r\n dispatch(clearPendingChanges({ section: SECTION }));\r\n };\r\n }, [dispatch]);\r\n\r\n const handleInputChange = useCallback(\r\n ({ name, value }: { name: string; value: string }) => {\r\n // @ts-expect-error 'setNamingSettingsValue' isn't typed yet\r\n dispatch(setNamingSettingsValue({ name, value }));\r\n\r\n if (namingExampleTimeout.current) {\r\n clearTimeout(namingExampleTimeout.current);\r\n }\r\n\r\n namingExampleTimeout.current = setTimeout(() => {\r\n dispatch(fetchNamingExamples());\r\n }, 1000);\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onStandardNamingModalOpenClick = useCallback(() => {\r\n setNamingModalOpen();\r\n\r\n setNamingModalOptions({\r\n name: 'standardMovieFormat',\r\n movie: true,\r\n additional: true,\r\n });\r\n }, [setNamingModalOpen, setNamingModalOptions]);\r\n\r\n const onMovieFolderNamingModalOpenClick = useCallback(() => {\r\n setNamingModalOpen();\r\n\r\n setNamingModalOptions({\r\n name: 'movieFolderFormat',\r\n });\r\n }, [setNamingModalOpen, setNamingModalOptions]);\r\n\r\n const renameMovies = hasSettings && settings.renameMovies.value;\r\n const replaceIllegalCharacters =\r\n hasSettings && settings.replaceIllegalCharacters.value;\r\n\r\n const colonReplacementOptions = [\r\n { key: 'delete', value: translate('Delete') },\r\n { key: 'dash', value: translate('ReplaceWithDash') },\r\n { key: 'spaceDash', value: translate('ReplaceWithSpaceDash') },\r\n { key: 'spaceDashSpace', value: translate('ReplaceWithSpaceDashSpace') },\r\n {\r\n key: 'smart',\r\n value: translate('SmartReplace'),\r\n hint: translate('SmartReplaceHint'),\r\n },\r\n ];\r\n\r\n const standardMovieFormatHelpTexts = [];\r\n const standardMovieFormatErrors = [];\r\n const movieFolderFormatHelpTexts = [];\r\n const movieFolderFormatErrors = [];\r\n\r\n if (examplesPopulated) {\r\n if (examples.movieExample) {\r\n standardMovieFormatHelpTexts.push(\r\n `${translate('Movie')}: ${examples.movieExample}`\r\n );\r\n } else {\r\n standardMovieFormatErrors.push({\r\n message: translate('MovieInvalidFormat'),\r\n });\r\n }\r\n\r\n if (examples.movieFolderExample) {\r\n movieFolderFormatHelpTexts.push(\r\n `${translate('Example')}: ${examples.movieFolderExample}`\r\n );\r\n } else {\r\n movieFolderFormatErrors.push({ message: translate('InvalidFormat') });\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {isFetching ? : null}\r\n\r\n {!isFetching && error ? (\r\n \r\n {translate('NamingSettingsLoadError')}\r\n \r\n ) : null}\r\n\r\n {hasSettings && !isFetching && !error ? (\r\n
\r\n \r\n {translate('RenameMovies')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ReplaceIllegalCharacters')}\r\n\r\n \r\n \r\n\r\n {replaceIllegalCharacters ? (\r\n \r\n {translate('ColonReplacement')}\r\n\r\n \r\n \r\n ) : null}\r\n\r\n {renameMovies ? (\r\n \r\n {translate('StandardMovieFormat')}\r\n\r\n \r\n ?\r\n \r\n }\r\n onChange={handleInputChange}\r\n {...settings.standardMovieFormat}\r\n helpTexts={standardMovieFormatHelpTexts}\r\n errors={[\r\n ...standardMovieFormatErrors,\r\n ...settings.standardMovieFormat.errors,\r\n ]}\r\n />\r\n \r\n ) : null}\r\n\r\n \r\n {translate('MovieFolderFormat')}\r\n\r\n \r\n ?\r\n \r\n }\r\n onChange={handleInputChange}\r\n {...settings.movieFolderFormat}\r\n helpTexts={[\r\n translate('MovieFolderFormatHelpText'),\r\n ...movieFolderFormatHelpTexts,\r\n ]}\r\n errors={[\r\n ...movieFolderFormatErrors,\r\n ...settings.movieFolderFormat.errors,\r\n ]}\r\n />\r\n \r\n\r\n {namingModalOptions ? (\r\n \r\n ) : null}\r\n \r\n ) : null}\r\n
\r\n );\r\n}\r\n\r\nexport default Naming;\r\n","import React, { useCallback, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Alert from 'Components/Alert';\r\nimport FileBrowserModal from 'Components/FileBrowser/FileBrowserModal';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport { icons, kinds, sizes } from 'Helpers/Props';\r\nimport { addRootFolder } from 'Store/Actions/rootFolderActions';\r\nimport createRootFoldersSelector from 'Store/Selectors/createRootFoldersSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './AddRootFolder.css';\r\n\r\nfunction AddRootFolder() {\r\n const { isSaving, saveError } = useSelector(createRootFoldersSelector());\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [isAddNewRootFolderModalOpen, setIsAddNewRootFolderModalOpen] =\r\n useState(false);\r\n\r\n const onAddNewRootFolderPress = useCallback(() => {\r\n setIsAddNewRootFolderModalOpen(true);\r\n }, [setIsAddNewRootFolderModalOpen]);\r\n\r\n const onNewRootFolderSelect = useCallback(\r\n ({ value }: { value: string }) => {\r\n dispatch(addRootFolder({ path: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onAddRootFolderModalClose = useCallback(() => {\r\n setIsAddNewRootFolderModalOpen(false);\r\n }, [setIsAddNewRootFolderModalOpen]);\r\n\r\n return (\r\n <>\r\n {!isSaving && saveError ? (\r\n \r\n {translate('AddRootFolderError')}\r\n\r\n
    \r\n {Array.isArray(saveError.responseJSON) ? (\r\n saveError.responseJSON.map((e, index) => {\r\n return
  • {e.errorMessage}
  • ;\r\n })\r\n ) : (\r\n
  • {JSON.stringify(saveError.responseJSON)}
  • \r\n )}\r\n
\r\n
\r\n ) : null}\r\n\r\n
\r\n \r\n \r\n {translate('AddRootFolder')}\r\n \r\n\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nexport default AddRootFolder;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"addRootFolderButtonContainer\":\"AddRootFolder-addRootFolderButtonContainer-u8P7c\",\"importButtonIcon\":\"AddRootFolder-importButtonIcon-jUpzw\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport RootFolders from 'RootFolder/RootFolders';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport Naming from './Naming/Naming';\r\nimport AddRootFolder from './RootFolder/AddRootFolder';\r\n\r\nconst rescanAfterRefreshOptions = [\r\n {\r\n key: 'always',\r\n get value() {\r\n return translate('Always');\r\n }\r\n },\r\n {\r\n key: 'afterManual',\r\n get value() {\r\n return translate('AfterManualRefresh');\r\n }\r\n },\r\n {\r\n key: 'never',\r\n get value() {\r\n return translate('Never');\r\n }\r\n }\r\n];\r\n\r\nconst downloadPropersAndRepacksOptions = [\r\n {\r\n key: 'preferAndUpgrade',\r\n get value() {\r\n return translate('PreferAndUpgrade');\r\n }\r\n },\r\n {\r\n key: 'doNotUpgrade',\r\n get value() {\r\n return translate('DoNotUpgradeAutomatically');\r\n }\r\n },\r\n {\r\n key: 'doNotPrefer',\r\n get value() {\r\n return translate('DoNotPrefer');\r\n }\r\n }\r\n];\r\n\r\nconst fileDateOptions = [\r\n {\r\n key: 'none',\r\n get value() {\r\n return translate('None');\r\n }\r\n },\r\n {\r\n key: 'cinemas',\r\n get value() {\r\n return translate('InCinemasDate');\r\n }\r\n },\r\n {\r\n key: 'release',\r\n get value() {\r\n return translate('PhysicalReleaseDate');\r\n }\r\n }\r\n];\r\n\r\nclass MediaManagement extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n advancedSettings,\r\n isFetching,\r\n error,\r\n settings,\r\n hasSettings,\r\n isWindows,\r\n onInputChange,\r\n onSavePress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n\r\n {\r\n isFetching ?\r\n
\r\n \r\n
: null\r\n }\r\n\r\n {\r\n !isFetching && error ?\r\n
\r\n \r\n {translate('MediaManagementSettingsLoadError')}\r\n \r\n
: null\r\n }\r\n\r\n {\r\n hasSettings && !isFetching && !error ?\r\n \r\n {\r\n advancedSettings ?\r\n
\r\n \r\n {translate('CreateEmptyMovieFolders')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('DeleteEmptyFolders')}\r\n\r\n \r\n \r\n
: null\r\n }\r\n\r\n {\r\n advancedSettings ?\r\n \r\n \r\n {translate('SkipFreeSpaceCheck')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('MinimumFreeSpace')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('UseHardlinksInsteadOfCopy')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ImportUsingScript')}\r\n\r\n \r\n \r\n\r\n {\r\n settings.useScriptImport.value ?\r\n \r\n {translate('ImportScriptPath')}\r\n\r\n \r\n : null\r\n }\r\n\r\n \r\n {translate('ImportExtraFiles')}\r\n\r\n \r\n \r\n\r\n {\r\n settings.importExtraFiles.value ?\r\n \r\n {translate('ImportExtraFiles')}\r\n\r\n \r\n : null\r\n }\r\n : null\r\n }\r\n\r\n \r\n \r\n {translate('IgnoreDeletedMovies')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('DownloadPropersAndRepacks')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('AnalyseVideoFiles')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RescanMovieFolderAfterRefresh')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ChangeFileDate')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RecyclingBin')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('RecyclingBinCleanup')}\r\n\r\n \r\n \r\n \r\n\r\n {\r\n advancedSettings && !isWindows ?\r\n \r\n \r\n {translate('SetPermissions')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ChmodFolder')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('ChownGroup')}\r\n\r\n \r\n \r\n : null\r\n }\r\n : null\r\n }\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nMediaManagement.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n settings: PropTypes.object.isRequired,\r\n hasSettings: PropTypes.bool.isRequired,\r\n isWindows: PropTypes.bool.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default MediaManagement;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { fetchMediaManagementSettings, saveMediaManagementSettings, saveNamingSettings, setMediaManagementSettingsValue } from 'Store/Actions/settingsActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport MediaManagement from './MediaManagement';\r\n\r\nconst SECTION = 'mediaManagement';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n (state) => state.settings.naming,\r\n createSettingsSectionSelector(SECTION),\r\n createSystemStatusSelector(),\r\n (advancedSettings, namingSettings, sectionSettings, systemStatus) => {\r\n return {\r\n advancedSettings,\r\n ...sectionSettings,\r\n hasPendingChanges: !_.isEmpty(namingSettings.pendingChanges) || sectionSettings.hasPendingChanges,\r\n isWindows: systemStatus.isWindows\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchMediaManagementSettings,\r\n setMediaManagementSettingsValue,\r\n saveMediaManagementSettings,\r\n saveNamingSettings,\r\n clearPendingChanges\r\n};\r\n\r\nclass MediaManagementConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchMediaManagementSettings();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.clearPendingChanges({ section: `settings.${SECTION}` });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setMediaManagementSettingsValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveMediaManagementSettings();\r\n this.props.saveNamingSettings();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nMediaManagementConnector.propTypes = {\r\n fetchMediaManagementSettings: PropTypes.func.isRequired,\r\n setMediaManagementSettingsValue: PropTypes.func.isRequired,\r\n saveMediaManagementSettings: PropTypes.func.isRequired,\r\n saveNamingSettings: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(MediaManagementConnector);\r\n","import React, { useCallback, useEffect, useMemo } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport ProviderFieldFormGroup from 'Components/Form/ProviderFieldFormGroup';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport {\r\n saveMetadata,\r\n setMetadataFieldValue,\r\n setMetadataValue,\r\n} from 'Store/Actions/settingsActions';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport { InputChanged } from 'typings/inputs';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditMetadataModalContent.css';\r\n\r\nexport interface EditMetadataModalContentProps {\r\n id: number;\r\n advancedSettings: boolean;\r\n onModalClose: () => void;\r\n}\r\n\r\nfunction EditMetadataModalContent({\r\n id,\r\n advancedSettings,\r\n onModalClose,\r\n}: EditMetadataModalContentProps) {\r\n const dispatch = useDispatch();\r\n\r\n const { isSaving, saveError, pendingChanges, items } = useSelector(\r\n (state: AppState) => state.settings.metadata\r\n );\r\n\r\n const wasSaving = usePrevious(isSaving);\r\n\r\n const { settings, ...otherSettings } = useMemo(() => {\r\n const item = items.find((item) => item.id === id)!;\r\n\r\n return selectSettings(item, pendingChanges, saveError);\r\n }, [id, items, pendingChanges, saveError]);\r\n\r\n const { name, enable, fields, message } = settings;\r\n\r\n const handleInputChange = useCallback(\r\n ({ name, value }: InputChanged) => {\r\n // @ts-expect-error not typed\r\n dispatch(setMetadataValue({ name, value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleFieldChange = useCallback(\r\n ({ name, value }: InputChanged) => {\r\n // @ts-expect-error not typed\r\n dispatch(setMetadataFieldValue({ name, value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const handleSavePress = useCallback(() => {\r\n dispatch(saveMetadata({ id }));\r\n }, [id, dispatch]);\r\n\r\n useEffect(() => {\r\n if (wasSaving && !isSaving && !saveError) {\r\n onModalClose();\r\n }\r\n }, [isSaving, wasSaving, saveError, onModalClose]);\r\n\r\n return (\r\n \r\n \r\n {translate('EditMetadata', { metadataType: name.value })}\r\n \r\n\r\n \r\n
\r\n {message ? (\r\n \r\n {message.value.message}\r\n \r\n ) : null}\r\n\r\n \r\n {translate('Enable')}\r\n\r\n \r\n \r\n\r\n {fields.map((field) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default EditMetadataModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"EditMetadataModalContent-message-rNLay Alert-alert-_KgnQ\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditMetadataModalContent, {\r\n EditMetadataModalContentProps,\r\n} from './EditMetadataModalContent';\r\n\r\ninterface EditMetadataModalProps\r\n extends Omit {\r\n isOpen: boolean;\r\n}\r\n\r\nfunction EditMetadataModal({\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n}: EditMetadataModalProps) {\r\n const dispatch = useDispatch();\r\n\r\n const advancedSettings = useSelector(\r\n (state: AppState) => state.settings.advancedSettings\r\n );\r\n\r\n const handleModalClose = useCallback(() => {\r\n dispatch(clearPendingChanges({ section: 'metadata' }));\r\n onModalClose();\r\n }, [dispatch, onModalClose]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default EditMetadataModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"metadata\":\"Metadata-metadata-OpuUq Card-card-aoesq\",\"name\":\"Metadata-name-LB94N\",\"section\":\"Metadata-section-GlYvh\"};","import React, { useCallback, useMemo, useState } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport { kinds } from 'Helpers/Props';\r\nimport Field from 'typings/Field';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditMetadataModal from './EditMetadataModal';\r\nimport styles from './Metadata.css';\r\n\r\ninterface MetadataProps {\r\n id: number;\r\n name: string;\r\n enable: boolean;\r\n fields: Field[];\r\n}\r\n\r\nfunction Metadata({ id, name, enable, fields }: MetadataProps) {\r\n const [isEditMetadataModalOpen, setIsEditMetadataModalOpen] = useState(false);\r\n\r\n const { metadataFields, imageFields } = useMemo(() => {\r\n return fields.reduce<{ metadataFields: Field[]; imageFields: Field[] }>(\r\n (acc, field) => {\r\n if (field.section === 'metadata') {\r\n acc.metadataFields.push(field);\r\n } else {\r\n acc.imageFields.push(field);\r\n }\r\n\r\n return acc;\r\n },\r\n { metadataFields: [], imageFields: [] }\r\n );\r\n }, [fields]);\r\n\r\n const handleOpenPress = useCallback(() => {\r\n setIsEditMetadataModalOpen(true);\r\n }, []);\r\n\r\n const handleModalClose = useCallback(() => {\r\n setIsEditMetadataModalOpen(false);\r\n }, []);\r\n\r\n return (\r\n \r\n
{name}
\r\n\r\n
\r\n {enable ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n\r\n {enable && metadataFields.length ? (\r\n
\r\n
{translate('Metadata')}
\r\n\r\n {metadataFields.map((field) => {\r\n if (!field.value) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n ) : null}\r\n\r\n {enable && imageFields.length ? (\r\n
\r\n
{translate('Images')}
\r\n\r\n {imageFields.map((field) => {\r\n if (!field.value) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n ) : null}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default Metadata;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport MetadataAppState from 'App/State/MetadataAppState';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { fetchMetadata } from 'Store/Actions/settingsActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport MetadataType from 'typings/Metadata';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport Metadata from './Metadata';\r\nimport styles from './Metadatas.css';\r\n\r\nfunction createMetadatasSelector() {\r\n return createSelector(\r\n createSortedSectionSelector(\r\n 'settings.metadata',\r\n sortByProp('name')\r\n ),\r\n (metadata: MetadataAppState) => metadata\r\n );\r\n}\r\n\r\nfunction Metadatas() {\r\n const dispatch = useDispatch();\r\n const { isFetching, error, items, ...otherProps } = useSelector(\r\n createMetadatasSelector()\r\n );\r\n\r\n useEffect(() => {\r\n dispatch(fetchMetadata());\r\n }, [dispatch]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n {items.map((item) => {\r\n return ;\r\n })}\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Metadatas;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"metadatas\":\"Metadatas-metadatas-a1EOe\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\n// Note: Do Not Translate Certification Countries\r\n\r\nexport const certificationCountryOptions = [\r\n { key: 'us', value: 'United States' },\r\n { key: 'au', value: 'Australia' },\r\n { key: 'br', value: 'Brazil' },\r\n { key: 'ca', value: 'Canada' },\r\n { key: 'fr', value: 'France' },\r\n { key: 'de', value: 'Germany' },\r\n { key: 'gb', value: 'Great Britain' },\r\n { key: 'in', value: 'India' },\r\n { key: 'ie', value: 'Ireland' },\r\n { key: 'it', value: 'Italy' },\r\n { key: 'nz', value: 'New Zealand' },\r\n { key: 'ro', value: 'Romania' },\r\n { key: 'es', value: 'Spain' }\r\n];\r\n\r\nfunction MetadataOptions(props) {\r\n const {\r\n isFetching,\r\n error,\r\n settings,\r\n hasSettings,\r\n onInputChange\r\n } = props;\r\n\r\n return (\r\n
\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && error &&\r\n \r\n {translate('UnableToLoadIndexerOptions')}\r\n \r\n }\r\n\r\n {\r\n hasSettings && !isFetching && !error &&\r\n
\r\n \r\n {translate('CertificationCountry')}\r\n\r\n \r\n \r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nMetadataOptions.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n settings: PropTypes.object.isRequired,\r\n hasSettings: PropTypes.bool.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default MetadataOptions;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { fetchMetadataOptions, saveMetadataOptions, setMetadataOptionsValue } from 'Store/Actions/settingsActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport MetadataOptions from './MetadataOptions';\r\n\r\nconst SECTION = 'metadataOptions';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createSettingsSectionSelector(SECTION),\r\n (advancedSettings, sectionSettings) => {\r\n return {\r\n advancedSettings,\r\n ...sectionSettings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchMetadataOptions: fetchMetadataOptions,\r\n dispatchSetMetadataOptionsValue: setMetadataOptionsValue,\r\n dispatchSaveMetadataOptions: saveMetadataOptions,\r\n dispatchClearPendingChanges: clearPendingChanges\r\n};\r\n\r\nclass MetadataOptionsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n dispatchFetchMetadataOptions,\r\n dispatchSaveMetadataOptions,\r\n onChildMounted\r\n } = this.props;\r\n\r\n dispatchFetchMetadataOptions();\r\n onChildMounted(dispatchSaveMetadataOptions);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n hasPendingChanges,\r\n isSaving,\r\n onChildStateChange\r\n } = this.props;\r\n\r\n if (\r\n prevProps.isSaving !== isSaving ||\r\n prevProps.hasPendingChanges !== hasPendingChanges\r\n ) {\r\n onChildStateChange({\r\n isSaving,\r\n hasPendingChanges\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.dispatchClearPendingChanges({ section: SECTION });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.dispatchSetMetadataOptionsValue({ name, value });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nMetadataOptionsConnector.propTypes = {\r\n isSaving: PropTypes.bool.isRequired,\r\n hasPendingChanges: PropTypes.bool.isRequired,\r\n dispatchFetchMetadataOptions: PropTypes.func.isRequired,\r\n dispatchSetMetadataOptionsValue: PropTypes.func.isRequired,\r\n dispatchSaveMetadataOptions: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n onChildMounted: PropTypes.func.isRequired,\r\n onChildStateChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(MetadataOptionsConnector);\r\n","import React, { Component } from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport Metadatas from './Metadata/Metadatas';\r\nimport MetadataOptionsConnector from './Options/MetadataOptionsConnector';\r\n\r\nclass MetadataSettings extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._saveCallback = null;\r\n\r\n this.state = {\r\n isSaving: false,\r\n hasPendingChanges: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChildMounted = (saveCallback) => {\r\n this._saveCallback = saveCallback;\r\n };\r\n\r\n onChildStateChange = (payload) => {\r\n this.setState(payload);\r\n };\r\n\r\n onSavePress = () => {\r\n if (this._saveCallback) {\r\n this._saveCallback();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSaving,\r\n hasPendingChanges\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default MetadataSettings;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\n\r\nclass AddNotificationPresetMenuItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n name,\r\n implementation\r\n } = this.props;\r\n\r\n this.props.onPress({\r\n name,\r\n implementation\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n name,\r\n implementation,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n {name}\r\n \r\n );\r\n }\r\n}\r\n\r\nAddNotificationPresetMenuItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n implementation: PropTypes.string.isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNotificationPresetMenuItem;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Link from 'Components/Link/Link';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport { sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddNotificationPresetMenuItem from './AddNotificationPresetMenuItem';\r\nimport styles from './AddNotificationItem.css';\r\n\r\nclass AddNotificationItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onNotificationSelect = () => {\r\n const {\r\n implementation\r\n } = this.props;\r\n\r\n this.props.onNotificationSelect({ implementation });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n implementation,\r\n implementationName,\r\n infoLink,\r\n presets,\r\n onNotificationSelect\r\n } = this.props;\r\n\r\n const hasPresets = !!presets && !!presets.length;\r\n\r\n return (\r\n \r\n \r\n\r\n
\r\n
\r\n {implementationName}\r\n
\r\n\r\n
\r\n {\r\n hasPresets &&\r\n \r\n \r\n {translate('Custom')}\r\n \r\n\r\n \r\n \r\n {translate('Presets')}\r\n \r\n\r\n \r\n {\r\n presets.map((preset) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n \r\n }\r\n\r\n \r\n {translate('MoreInfo')}\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nAddNotificationItem.propTypes = {\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n infoLink: PropTypes.string.isRequired,\r\n presets: PropTypes.arrayOf(PropTypes.object),\r\n onNotificationSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNotificationItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"notification\":\"AddNotificationItem-notification-Zc9Sv Card-card-aoesq\",\"underlay\":\"AddNotificationItem-underlay-uEE6z\",\"overlay\":\"AddNotificationItem-overlay-qT9ml\",\"name\":\"AddNotificationItem-name-PxZPX\",\"actions\":\"AddNotificationItem-actions-C_hYg\",\"presetsMenu\":\"AddNotificationItem-presetsMenu-Ytltx Menu-menu-Uz3_0\",\"presetsMenuButton\":\"AddNotificationItem-presetsMenuButton-POKVo Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddNotificationItem from './AddNotificationItem';\r\nimport styles from './AddNotificationModalContent.css';\r\n\r\nclass AddNotificationModalContent extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema,\r\n onNotificationSelect,\r\n onModalClose\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {translate('AddConnection')}\r\n \r\n\r\n \r\n {\r\n isSchemaFetching &&\r\n \r\n }\r\n\r\n {\r\n !isSchemaFetching && !!schemaError &&\r\n \r\n {translate('AddNotificationError')}\r\n \r\n }\r\n\r\n {\r\n isSchemaPopulated && !schemaError &&\r\n
\r\n
\r\n {\r\n schema.map((notification) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n
\r\n }\r\n
\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nAddNotificationModalContent.propTypes = {\r\n isSchemaFetching: PropTypes.bool.isRequired,\r\n isSchemaPopulated: PropTypes.bool.isRequired,\r\n schemaError: PropTypes.object,\r\n schema: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onNotificationSelect: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNotificationModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"notifications\":\"AddNotificationModalContent-notifications-wmzKT\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchNotificationSchema, selectNotificationSchema } from 'Store/Actions/settingsActions';\r\nimport AddNotificationModalContent from './AddNotificationModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.notifications,\r\n (notifications) => {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n } = notifications;\r\n\r\n return {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchNotificationSchema,\r\n selectNotificationSchema\r\n};\r\n\r\nclass AddNotificationModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchNotificationSchema();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onNotificationSelect = ({ implementation, name }) => {\r\n this.props.selectNotificationSchema({ implementation, presetName: name });\r\n this.props.onModalClose({ notificationSelected: true });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddNotificationModalContentConnector.propTypes = {\r\n fetchNotificationSchema: PropTypes.func.isRequired,\r\n selectNotificationSchema: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddNotificationModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddNotificationModalContentConnector from './AddNotificationModalContentConnector';\r\n\r\nfunction AddNotificationModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddNotificationModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddNotificationModal;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormInputHelpText from 'Components/Form/FormInputHelpText';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport { inputTypes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './NotificationEventItems.css';\r\n\r\nfunction NotificationEventItems(props) {\r\n const {\r\n item,\r\n onInputChange\r\n } = props;\r\n\r\n const {\r\n onGrab,\r\n onDownload,\r\n onUpgrade,\r\n onRename,\r\n onMovieAdded,\r\n onMovieDelete,\r\n onMovieFileDelete,\r\n onMovieFileDeleteForUpgrade,\r\n onHealthIssue,\r\n onHealthRestored,\r\n onApplicationUpdate,\r\n onManualInteractionRequired,\r\n supportsOnGrab,\r\n supportsOnDownload,\r\n supportsOnUpgrade,\r\n supportsOnRename,\r\n supportsOnMovieAdded,\r\n supportsOnMovieDelete,\r\n supportsOnMovieFileDelete,\r\n supportsOnMovieFileDeleteForUpgrade,\r\n supportsOnApplicationUpdate,\r\n supportsOnManualInteractionRequired,\r\n supportsOnHealthIssue,\r\n supportsOnHealthRestored,\r\n includeHealthWarnings\r\n } = item;\r\n\r\n return (\r\n \r\n {translate('NotificationTriggers')}\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n {\r\n onDownload.value &&\r\n
\r\n \r\n
\r\n }\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n {\r\n onMovieFileDelete.value &&\r\n
\r\n \r\n
\r\n }\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n {\r\n (onHealthIssue.value || onHealthRestored.value) &&\r\n
\r\n \r\n
\r\n }\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nNotificationEventItems.propTypes = {\r\n item: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default NotificationEventItems;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"events\":\"NotificationEventItems-events-dl1MD\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport ProviderFieldFormGroup from 'Components/Form/ProviderFieldFormGroup';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport AdvancedSettingsButton from 'Settings/AdvancedSettingsButton';\r\nimport translate from 'Utilities/String/translate';\r\nimport NotificationEventItems from './NotificationEventItems';\r\nimport styles from './EditNotificationModalContent.css';\r\n\r\nfunction EditNotificationModalContent(props) {\r\n const {\r\n advancedSettings,\r\n isFetching,\r\n error,\r\n isSaving,\r\n isTesting,\r\n saveError,\r\n item,\r\n onInputChange,\r\n onFieldChange,\r\n onModalClose,\r\n onSavePress,\r\n onTestPress,\r\n onAdvancedSettingsPress,\r\n onDeleteNotificationPress,\r\n ...otherProps\r\n } = props;\r\n\r\n const {\r\n id,\r\n implementationName,\r\n name,\r\n tags,\r\n fields,\r\n message\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditConnectionImplementation', { implementationName }) : translate('AddConnectionImplementation', { implementationName })}\r\n \r\n\r\n \r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('AddNotificationError')}\r\n \r\n }\r\n\r\n {\r\n !isFetching && !error &&\r\n
\r\n {\r\n !!message &&\r\n \r\n {message.value.message}\r\n \r\n }\r\n\r\n \r\n {translate('Name')}\r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n\r\n {\r\n fields.map((field) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n }\r\n
\r\n \r\n {\r\n id &&\r\n \r\n {translate('Delete')}\r\n \r\n }\r\n\r\n \r\n\r\n \r\n {translate('Test')}\r\n \r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nEditNotificationModalContent.propTypes = {\r\n advancedSettings: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isSaving: PropTypes.bool.isRequired,\r\n isTesting: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onFieldChange: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onTestPress: PropTypes.func.isRequired,\r\n onAdvancedSettingsPress: PropTypes.func.isRequired,\r\n onDeleteNotificationPress: PropTypes.func\r\n};\r\n\r\nexport default EditNotificationModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditNotificationModalContent-deleteButton-zgPAx Button-button-paJ9a Link-link-RInnp\",\"message\":\"EditNotificationModalContent-message-TWNtp Alert-alert-_KgnQ\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport {\r\n saveNotification,\r\n setNotificationFieldValues,\r\n setNotificationValue,\r\n testNotification,\r\n toggleAdvancedSettings\r\n} from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditNotificationModalContent from './EditNotificationModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('notifications'),\r\n (advancedSettings, notification) => {\r\n return {\r\n advancedSettings,\r\n ...notification\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setNotificationValue,\r\n setNotificationFieldValues,\r\n saveNotification,\r\n testNotification,\r\n toggleAdvancedSettings\r\n};\r\n\r\nclass EditNotificationModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {\r\n this.props.onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setNotificationValue({ name, value });\r\n };\r\n\r\n onFieldChange = ({ name, value, additionalProperties = {} }) => {\r\n this.props.setNotificationFieldValues({ properties: { ...additionalProperties, [name]: value } });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveNotification({ id: this.props.id });\r\n };\r\n\r\n onTestPress = () => {\r\n this.props.testNotification({ id: this.props.id });\r\n };\r\n\r\n onAdvancedSettingsPress = () => {\r\n this.props.toggleAdvancedSettings();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditNotificationModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n isFetching: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n setNotificationValue: PropTypes.func.isRequired,\r\n setNotificationFieldValues: PropTypes.func.isRequired,\r\n saveNotification: PropTypes.func.isRequired,\r\n testNotification: PropTypes.func.isRequired,\r\n toggleAdvancedSettings: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditNotificationModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport EditNotificationModalContentConnector from './EditNotificationModalContentConnector';\r\n\r\nfunction EditNotificationModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditNotificationModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditNotificationModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { cancelSaveNotification, cancelTestNotification } from 'Store/Actions/settingsActions';\r\nimport EditNotificationModal from './EditNotificationModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n const section = 'settings.notifications';\r\n\r\n return {\r\n dispatchClearPendingChanges() {\r\n dispatch(clearPendingChanges({ section }));\r\n },\r\n\r\n dispatchCancelTestNotification() {\r\n dispatch(cancelTestNotification({ section }));\r\n },\r\n\r\n dispatchCancelSaveNotification() {\r\n dispatch(cancelSaveNotification({ section }));\r\n }\r\n };\r\n}\r\n\r\nclass EditNotificationModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.dispatchClearPendingChanges();\r\n this.props.dispatchCancelTestNotification();\r\n this.props.dispatchCancelSaveNotification();\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n dispatchClearPendingChanges,\r\n dispatchCancelTestNotification,\r\n dispatchCancelSaveNotification,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditNotificationModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n dispatchCancelTestNotification: PropTypes.func.isRequired,\r\n dispatchCancelSaveNotification: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(null, createMapDispatchToProps)(EditNotificationModalConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TagList from 'Components/TagList';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditNotificationModalConnector from './EditNotificationModalConnector';\r\nimport styles from './Notification.css';\r\n\r\nclass Notification extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditNotificationModalOpen: false,\r\n isDeleteNotificationModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditNotificationPress = () => {\r\n this.setState({ isEditNotificationModalOpen: true });\r\n };\r\n\r\n onEditNotificationModalClose = () => {\r\n this.setState({ isEditNotificationModalOpen: false });\r\n };\r\n\r\n onDeleteNotificationPress = () => {\r\n this.setState({\r\n isEditNotificationModalOpen: false,\r\n isDeleteNotificationModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteNotificationModalClose= () => {\r\n this.setState({ isDeleteNotificationModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteNotification = () => {\r\n this.props.onConfirmDeleteNotification(this.props.id);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n name,\r\n onGrab,\r\n onDownload,\r\n onUpgrade,\r\n onRename,\r\n onMovieAdded,\r\n onMovieDelete,\r\n onMovieFileDelete,\r\n onMovieFileDeleteForUpgrade,\r\n onHealthIssue,\r\n onHealthRestored,\r\n onApplicationUpdate,\r\n onManualInteractionRequired,\r\n supportsOnGrab,\r\n supportsOnDownload,\r\n supportsOnUpgrade,\r\n supportsOnRename,\r\n supportsOnMovieAdded,\r\n supportsOnMovieDelete,\r\n supportsOnMovieFileDelete,\r\n supportsOnMovieFileDeleteForUpgrade,\r\n supportsOnHealthIssue,\r\n supportsOnHealthRestored,\r\n supportsOnApplicationUpdate,\r\n supportsOnManualInteractionRequired,\r\n tags,\r\n tagList\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n {name}\r\n
\r\n\r\n {\r\n supportsOnGrab && onGrab ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnDownload && onDownload ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnUpgrade && onDownload && onUpgrade ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnRename && onRename ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnMovieAdded && onMovieAdded ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnHealthIssue && onHealthIssue ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnHealthRestored && onHealthRestored ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnApplicationUpdate && onApplicationUpdate ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnMovieDelete && onMovieDelete ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnMovieFileDelete && onMovieFileDelete ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnMovieFileDeleteForUpgrade && onMovieFileDelete && onMovieFileDeleteForUpgrade ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n supportsOnManualInteractionRequired && onManualInteractionRequired ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n !onGrab && !onDownload && !onRename && !onHealthIssue && !onHealthRestored && !onApplicationUpdate && !onMovieAdded && !onMovieDelete && !onMovieFileDelete && !onManualInteractionRequired ?\r\n \r\n {translate('Disabled')}\r\n :\r\n null\r\n }\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nNotification.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n onGrab: PropTypes.bool.isRequired,\r\n onDownload: PropTypes.bool.isRequired,\r\n onUpgrade: PropTypes.bool.isRequired,\r\n onRename: PropTypes.bool.isRequired,\r\n onMovieAdded: PropTypes.bool.isRequired,\r\n onMovieDelete: PropTypes.bool.isRequired,\r\n onMovieFileDelete: PropTypes.bool.isRequired,\r\n onMovieFileDeleteForUpgrade: PropTypes.bool.isRequired,\r\n onHealthIssue: PropTypes.bool.isRequired,\r\n onHealthRestored: PropTypes.bool.isRequired,\r\n onApplicationUpdate: PropTypes.bool.isRequired,\r\n onManualInteractionRequired: PropTypes.bool.isRequired,\r\n supportsOnGrab: PropTypes.bool.isRequired,\r\n supportsOnDownload: PropTypes.bool.isRequired,\r\n supportsOnMovieDelete: PropTypes.bool.isRequired,\r\n supportsOnMovieFileDelete: PropTypes.bool.isRequired,\r\n supportsOnMovieFileDeleteForUpgrade: PropTypes.bool.isRequired,\r\n supportsOnUpgrade: PropTypes.bool.isRequired,\r\n supportsOnRename: PropTypes.bool.isRequired,\r\n supportsOnMovieAdded: PropTypes.bool.isRequired,\r\n supportsOnHealthIssue: PropTypes.bool.isRequired,\r\n supportsOnHealthRestored: PropTypes.bool.isRequired,\r\n supportsOnApplicationUpdate: PropTypes.bool.isRequired,\r\n supportsOnManualInteractionRequired: PropTypes.bool.isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteNotification: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Notification;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"notification\":\"Notification-notification-UPK7V Card-card-aoesq\",\"name\":\"Notification-name-vjjgY\",\"enabled\":\"Notification-enabled-rQjVY\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddNotificationModal from './AddNotificationModal';\r\nimport EditNotificationModalConnector from './EditNotificationModalConnector';\r\nimport Notification from './Notification';\r\nimport styles from './Notifications.css';\r\n\r\nclass Notifications extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isAddNotificationModalOpen: false,\r\n isEditNotificationModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddNotificationPress = () => {\r\n this.setState({ isAddNotificationModalOpen: true });\r\n };\r\n\r\n onAddNotificationModalClose = ({ notificationSelected = false } = {}) => {\r\n this.setState({\r\n isAddNotificationModalOpen: false,\r\n isEditNotificationModalOpen: notificationSelected\r\n });\r\n };\r\n\r\n onEditNotificationModalClose = () => {\r\n this.setState({ isEditNotificationModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n tagList,\r\n onConfirmDeleteNotification,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isAddNotificationModalOpen,\r\n isEditNotificationModalOpen\r\n } = this.state;\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nNotifications.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteNotification: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Notifications;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"notifications\":\"Notifications-notifications-nFbpD\",\"addNotification\":\"Notifications-addNotification-MUPKM Notification-notification-UPK7V Card-card-aoesq\",\"center\":\"Notifications-center-aimuW\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteNotification, fetchNotifications } from 'Store/Actions/settingsActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport Notifications from './Notifications';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.notifications', sortByProp('name')),\r\n createTagsSelector(),\r\n (notifications, tagList) => {\r\n return {\r\n ...notifications,\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchNotifications,\r\n deleteNotification\r\n};\r\n\r\nclass NotificationsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchNotifications();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteNotification = (id) => {\r\n this.props.deleteNotification({ id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nNotificationsConnector.propTypes = {\r\n fetchNotifications: PropTypes.func.isRequired,\r\n deleteNotification: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(NotificationsConnector);\r\n","import React from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport NotificationsConnector from './Notifications/NotificationsConnector';\r\n\r\nfunction NotificationSettings() {\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default NotificationSettings;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport { boolSettingShape, numberSettingShape, tagSettingShape } from 'Helpers/Props/Shapes/settingShape';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditDelayProfileModalContent.css';\r\n\r\nconst protocolOptions = [\r\n {\r\n key: 'preferUsenet',\r\n get value() {\r\n return translate('PreferUsenet');\r\n }\r\n },\r\n {\r\n key: 'preferTorrent',\r\n get value() {\r\n return translate('PreferTorrent');\r\n }\r\n },\r\n {\r\n key: 'onlyUsenet',\r\n get value() {\r\n return translate('OnlyUsenet');\r\n }\r\n },\r\n {\r\n key: 'onlyTorrent',\r\n get value() {\r\n return translate('OnlyTorrent');\r\n }\r\n }\r\n];\r\n\r\nfunction EditDelayProfileModalContent(props) {\r\n const {\r\n id,\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n item,\r\n protocol,\r\n onInputChange,\r\n onProtocolChange,\r\n onSavePress,\r\n onModalClose,\r\n onDeleteDelayProfilePress,\r\n ...otherProps\r\n } = props;\r\n\r\n const {\r\n enableUsenet,\r\n enableTorrent,\r\n usenetDelay,\r\n torrentDelay,\r\n bypassIfHighestQuality,\r\n bypassIfAboveCustomFormatScore,\r\n minimumCustomFormatScore,\r\n tags\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditDelayProfile') : translate('AddDelayProfile')}\r\n \r\n\r\n \r\n {\r\n isFetching ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n !isFetching && !!error ?\r\n \r\n {translate('AddDelayProfileError')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n !isFetching && !error ?\r\n
\r\n \r\n {translate('PreferredProtocol')}\r\n\r\n \r\n \r\n\r\n {\r\n enableUsenet.value ?\r\n \r\n {translate('UsenetDelay')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n enableTorrent.value ?\r\n \r\n {translate('TorrentDelay')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n \r\n {translate('BypassDelayIfHighestQuality')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('BypassDelayIfAboveCustomFormatScore')}\r\n\r\n \r\n \r\n\r\n {\r\n bypassIfAboveCustomFormatScore.value ?\r\n \r\n {translate('BypassDelayIfAboveCustomFormatScoreMinimumScore')}\r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n id === 1 ?\r\n \r\n {translate('DefaultDelayProfileMovie')}\r\n :\r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n }\r\n
:\r\n null\r\n }\r\n
\r\n \r\n {\r\n id && id > 1 ?\r\n \r\n {translate('Delete')}\r\n :\r\n null\r\n }\r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nconst delayProfileShape = {\r\n enableUsenet: PropTypes.shape(boolSettingShape).isRequired,\r\n enableTorrent: PropTypes.shape(boolSettingShape).isRequired,\r\n usenetDelay: PropTypes.shape(numberSettingShape).isRequired,\r\n torrentDelay: PropTypes.shape(numberSettingShape).isRequired,\r\n bypassIfHighestQuality: PropTypes.shape(boolSettingShape).isRequired,\r\n bypassIfAboveCustomFormatScore: PropTypes.shape(boolSettingShape).isRequired,\r\n minimumCustomFormatScore: PropTypes.shape(numberSettingShape).isRequired,\r\n order: PropTypes.shape(numberSettingShape),\r\n tags: PropTypes.shape(tagSettingShape).isRequired\r\n};\r\n\r\nEditDelayProfileModalContent.propTypes = {\r\n id: PropTypes.number,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.shape(delayProfileShape).isRequired,\r\n protocol: PropTypes.string.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onProtocolChange: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onDeleteDelayProfilePress: PropTypes.func\r\n};\r\n\r\nexport default EditDelayProfileModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditDelayProfileModalContent-deleteButton-IBLBk Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { saveDelayProfile, setDelayProfileValue } from 'Store/Actions/settingsActions';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport EditDelayProfileModalContent from './EditDelayProfileModalContent';\r\n\r\nconst newDelayProfile = {\r\n enableUsenet: true,\r\n enableTorrent: true,\r\n preferredProtocol: 'usenet',\r\n usenetDelay: 0,\r\n torrentDelay: 0,\r\n bypassIfHighestQuality: false,\r\n bypassIfAboveCustomFormatScore: false,\r\n minimumCustomFormatScore: 0,\r\n tags: []\r\n};\r\n\r\nfunction createDelayProfileSelector() {\r\n return createSelector(\r\n (state, { id }) => id,\r\n (state) => state.settings.delayProfiles,\r\n (id, delayProfiles) => {\r\n const {\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n pendingChanges,\r\n items\r\n } = delayProfiles;\r\n\r\n const profile = id ? items.find((i) => i.id === id) : newDelayProfile;\r\n const settings = selectSettings(profile, pendingChanges, saveError);\r\n\r\n return {\r\n id,\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n item: settings.settings,\r\n ...settings\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createDelayProfileSelector(),\r\n (delayProfile) => {\r\n const enableUsenet = delayProfile.item.enableUsenet.value;\r\n const enableTorrent = delayProfile.item.enableTorrent.value;\r\n const preferredProtocol = delayProfile.item.preferredProtocol.value;\r\n let protocol = 'preferUsenet';\r\n\r\n if (preferredProtocol === 'usenet') {\r\n protocol = 'preferUsenet';\r\n } else {\r\n protocol = 'preferTorrent';\r\n }\r\n\r\n if (!enableUsenet) {\r\n protocol = 'onlyTorrent';\r\n }\r\n\r\n if (!enableTorrent) {\r\n protocol = 'onlyUsenet';\r\n }\r\n\r\n return {\r\n protocol,\r\n ...delayProfile\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setDelayProfileValue,\r\n saveDelayProfile\r\n};\r\n\r\nclass EditDelayProfileModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n if (!this.props.id) {\r\n Object.keys(newDelayProfile).forEach((name) => {\r\n this.props.setDelayProfileValue({\r\n name,\r\n value: newDelayProfile[name]\r\n });\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {\r\n this.props.onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setDelayProfileValue({ name, value });\r\n };\r\n\r\n onProtocolChange = ({ value }) => {\r\n switch (value) {\r\n case 'preferUsenet':\r\n this.props.setDelayProfileValue({ name: 'enableUsenet', value: true });\r\n this.props.setDelayProfileValue({ name: 'enableTorrent', value: true });\r\n this.props.setDelayProfileValue({ name: 'preferredProtocol', value: 'usenet' });\r\n break;\r\n case 'preferTorrent':\r\n this.props.setDelayProfileValue({ name: 'enableUsenet', value: true });\r\n this.props.setDelayProfileValue({ name: 'enableTorrent', value: true });\r\n this.props.setDelayProfileValue({ name: 'preferredProtocol', value: 'torrent' });\r\n break;\r\n case 'onlyUsenet':\r\n this.props.setDelayProfileValue({ name: 'enableUsenet', value: true });\r\n this.props.setDelayProfileValue({ name: 'enableTorrent', value: false });\r\n this.props.setDelayProfileValue({ name: 'preferredProtocol', value: 'usenet' });\r\n break;\r\n case 'onlyTorrent':\r\n this.props.setDelayProfileValue({ name: 'enableUsenet', value: false });\r\n this.props.setDelayProfileValue({ name: 'enableTorrent', value: true });\r\n this.props.setDelayProfileValue({ name: 'preferredProtocol', value: 'torrent' });\r\n break;\r\n default:\r\n throw Error(`Unknown protocol option: ${value}`);\r\n }\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveDelayProfile({ id: this.props.id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditDelayProfileModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n setDelayProfileValue: PropTypes.func.isRequired,\r\n saveDelayProfile: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditDelayProfileModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport EditDelayProfileModalContentConnector from './EditDelayProfileModalContentConnector';\r\n\r\nfunction EditDelayProfileModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditDelayProfileModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditDelayProfileModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditDelayProfileModal from './EditDelayProfileModal';\r\n\r\nfunction mapStateToProps() {\r\n return {};\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n clearPendingChanges\r\n};\r\n\r\nclass EditDelayProfileModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.clearPendingChanges({ section: 'settings.delayProfiles' });\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditDelayProfileModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(EditDelayProfileModalConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"delayProfile\":\"DelayProfile-delayProfile-eXshH\",\"column\":\"DelayProfile-column-QGVxD\",\"actions\":\"DelayProfile-actions-qipWX\",\"dragHandle\":\"DelayProfile-dragHandle-j8RVk\",\"dragIcon\":\"DelayProfile-dragIcon-oPeXV\",\"isDragging\":\"DelayProfile-isDragging-B6sbj\",\"editButton\":\"DelayProfile-editButton-wv0Wk\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TagList from 'Components/TagList';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditDelayProfileModalConnector from './EditDelayProfileModalConnector';\r\nimport styles from './DelayProfile.css';\r\n\r\nfunction getDelay(enabled, delay) {\r\n if (!enabled) {\r\n return '-';\r\n }\r\n\r\n if (!delay) {\r\n return translate('NoDelay');\r\n }\r\n\r\n if (delay === 1) {\r\n return translate('OneMinute');\r\n }\r\n\r\n // TODO: use better units of time than just minutes\r\n return translate('DelayMinutes', { delay });\r\n}\r\n\r\nclass DelayProfile extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditDelayProfileModalOpen: false,\r\n isDeleteDelayProfileModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditDelayProfilePress = () => {\r\n this.setState({ isEditDelayProfileModalOpen: true });\r\n };\r\n\r\n onEditDelayProfileModalClose = () => {\r\n this.setState({ isEditDelayProfileModalOpen: false });\r\n };\r\n\r\n onDeleteDelayProfilePress = () => {\r\n this.setState({\r\n isEditDelayProfileModalOpen: false,\r\n isDeleteDelayProfileModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteDelayProfileModalClose = () => {\r\n this.setState({ isDeleteDelayProfileModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteDelayProfile = () => {\r\n this.props.onConfirmDeleteDelayProfile(this.props.id);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n enableUsenet,\r\n enableTorrent,\r\n preferredProtocol,\r\n usenetDelay,\r\n torrentDelay,\r\n tags,\r\n tagList,\r\n isDragging,\r\n connectDragSource\r\n } = this.props;\r\n\r\n let preferred = titleCase(translate('PreferProtocol', { preferredProtocol }));\r\n\r\n if (!enableUsenet) {\r\n preferred = translate('OnlyTorrent');\r\n } else if (!enableTorrent) {\r\n preferred = translate('OnlyUsenet');\r\n }\r\n\r\n return (\r\n \r\n
{preferred}
\r\n
{getDelay(enableUsenet, usenetDelay)}
\r\n
{getDelay(enableTorrent, torrentDelay)}
\r\n\r\n \r\n\r\n
\r\n \r\n \r\n \r\n\r\n {\r\n id !== 1 &&\r\n connectDragSource(\r\n
\r\n \r\n
\r\n )\r\n }\r\n
\r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDelayProfile.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n enableUsenet: PropTypes.bool.isRequired,\r\n enableTorrent: PropTypes.bool.isRequired,\r\n preferredProtocol: PropTypes.string.isRequired,\r\n usenetDelay: PropTypes.number.isRequired,\r\n torrentDelay: PropTypes.number.isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isDragging: PropTypes.bool.isRequired,\r\n connectDragSource: PropTypes.func,\r\n onConfirmDeleteDelayProfile: PropTypes.func.isRequired\r\n};\r\n\r\nDelayProfile.defaultProps = {\r\n // The drag preview will not connect the drag handle.\r\n connectDragSource: (node) => node\r\n};\r\n\r\nexport default DelayProfile;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { DragLayer } from 'react-dnd';\r\nimport DragPreviewLayer from 'Components/DragPreviewLayer';\r\nimport { DELAY_PROFILE } from 'Helpers/dragTypes';\r\nimport dimensions from 'Styles/Variables/dimensions.js';\r\nimport DelayProfile from './DelayProfile';\r\nimport styles from './DelayProfileDragPreview.css';\r\n\r\nconst dragHandleWidth = parseInt(dimensions.dragHandleWidth);\r\n\r\nfunction collectDragLayer(monitor) {\r\n return {\r\n item: monitor.getItem(),\r\n itemType: monitor.getItemType(),\r\n currentOffset: monitor.getSourceClientOffset()\r\n };\r\n}\r\n\r\nclass DelayProfileDragPreview extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n width,\r\n item,\r\n itemType,\r\n currentOffset\r\n } = this.props;\r\n\r\n if (!currentOffset || itemType !== DELAY_PROFILE) {\r\n return null;\r\n }\r\n\r\n // The offset is shifted because the drag handle is on the right edge of the\r\n // list item and the preview is wider than the drag handle.\r\n\r\n const { x, y } = currentOffset;\r\n const handleOffset = width - dragHandleWidth;\r\n const transform = `translate3d(${x - handleOffset}px, ${y}px, 0)`;\r\n\r\n const style = {\r\n width,\r\n position: 'absolute',\r\n WebkitTransform: transform,\r\n msTransform: transform,\r\n transform\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDelayProfileDragPreview.propTypes = {\r\n width: PropTypes.number.isRequired,\r\n item: PropTypes.object,\r\n itemType: PropTypes.string,\r\n currentOffset: PropTypes.shape({\r\n x: PropTypes.number.isRequired,\r\n y: PropTypes.number.isRequired\r\n })\r\n};\r\n\r\nexport default DragLayer(collectDragLayer)(DelayProfileDragPreview);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"dragPreview\":\"DelayProfileDragPreview-dragPreview-addkn\"};","// extracted by mini-css-extract-plugin\nexport default {\"delayProfileDragSource\":\"DelayProfileDragSource-delayProfileDragSource-RZyIB\",\"delayProfilePlaceholder\":\"DelayProfileDragSource-delayProfilePlaceholder-GSTr5\",\"delayProfilePlaceholderBefore\":\"DelayProfileDragSource-delayProfilePlaceholderBefore-jVKmf\",\"delayProfilePlaceholderAfter\":\"DelayProfileDragSource-delayProfilePlaceholderAfter-q93hD\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { DragSource, DropTarget } from 'react-dnd';\r\nimport { findDOMNode } from 'react-dom';\r\nimport { DELAY_PROFILE } from 'Helpers/dragTypes';\r\nimport DelayProfile from './DelayProfile';\r\nimport styles from './DelayProfileDragSource.css';\r\n\r\nconst delayProfileDragSource = {\r\n beginDrag(item) {\r\n return item;\r\n },\r\n\r\n endDrag(props, monitor, component) {\r\n props.onDelayProfileDragEnd(monitor.getItem(), monitor.didDrop());\r\n }\r\n};\r\n\r\nconst delayProfileDropTarget = {\r\n hover(props, monitor, component) {\r\n const dragIndex = monitor.getItem().order;\r\n const hoverIndex = props.order;\r\n\r\n const hoverBoundingRect = findDOMNode(component).getBoundingClientRect();\r\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\r\n const clientOffset = monitor.getClientOffset();\r\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\r\n\r\n if (dragIndex === hoverIndex) {\r\n return;\r\n }\r\n\r\n // When moving up, only trigger if drag position is above 50% and\r\n // when moving down, only trigger if drag position is below 50%.\r\n // If we're moving down the hoverIndex needs to be increased\r\n // by one so it's ordered properly. Otherwise the hoverIndex will work.\r\n\r\n if (dragIndex < hoverIndex && hoverClientY > hoverMiddleY) {\r\n props.onDelayProfileDragMove(dragIndex, hoverIndex + 1);\r\n } else if (dragIndex > hoverIndex && hoverClientY < hoverMiddleY) {\r\n props.onDelayProfileDragMove(dragIndex, hoverIndex);\r\n }\r\n }\r\n};\r\n\r\nfunction collectDragSource(connect, monitor) {\r\n return {\r\n connectDragSource: connect.dragSource(),\r\n isDragging: monitor.isDragging()\r\n };\r\n}\r\n\r\nfunction collectDropTarget(connect, monitor) {\r\n return {\r\n connectDropTarget: connect.dropTarget(),\r\n isOver: monitor.isOver()\r\n };\r\n}\r\n\r\nclass DelayProfileDragSource extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n order,\r\n isDragging,\r\n isDraggingUp,\r\n isDraggingDown,\r\n isOver,\r\n connectDragSource,\r\n connectDropTarget,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const isBefore = !isDragging && isDraggingUp && isOver;\r\n const isAfter = !isDragging && isDraggingDown && isOver;\r\n\r\n // if (isDragging && !isOver) {\r\n // return null;\r\n // }\r\n\r\n return connectDropTarget(\r\n \r\n {\r\n isBefore &&\r\n \r\n }\r\n\r\n \r\n\r\n {\r\n isAfter &&\r\n \r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nDelayProfileDragSource.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n order: PropTypes.number.isRequired,\r\n isDragging: PropTypes.bool,\r\n isDraggingUp: PropTypes.bool,\r\n isDraggingDown: PropTypes.bool,\r\n isOver: PropTypes.bool,\r\n connectDragSource: PropTypes.func,\r\n connectDropTarget: PropTypes.func,\r\n onDelayProfileDragMove: PropTypes.func.isRequired,\r\n onDelayProfileDragEnd: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DropTarget(\r\n DELAY_PROFILE,\r\n delayProfileDropTarget,\r\n collectDropTarget\r\n)(DragSource(\r\n DELAY_PROFILE,\r\n delayProfileDragSource,\r\n collectDragSource\r\n)(DelayProfileDragSource));\r\n","// extracted by mini-css-extract-plugin\nexport default {\"horizontalScroll\":\"DelayProfiles-horizontalScroll-CWdci\",\"delayProfiles\":\"DelayProfiles-delayProfiles-hoyqr\",\"delayProfilesHeader\":\"DelayProfiles-delayProfilesHeader-yAz4j\",\"column\":\"DelayProfiles-column-Ycnjz\",\"tags\":\"DelayProfiles-tags-ipx5u\",\"addDelayProfile\":\"DelayProfiles-addDelayProfile-_z7mB\",\"addButton\":\"DelayProfiles-addButton-iFXnd\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport Link from 'Components/Link/Link';\r\nimport Measure from 'Components/Measure';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport { icons, scrollDirections } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport DelayProfile from './DelayProfile';\r\nimport DelayProfileDragPreview from './DelayProfileDragPreview';\r\nimport DelayProfileDragSource from './DelayProfileDragSource';\r\nimport EditDelayProfileModalConnector from './EditDelayProfileModalConnector';\r\nimport styles from './DelayProfiles.css';\r\n\r\nclass DelayProfiles extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isAddDelayProfileModalOpen: false,\r\n width: 0\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddDelayProfilePress = () => {\r\n this.setState({ isAddDelayProfileModalOpen: true });\r\n };\r\n\r\n onModalClose = () => {\r\n this.setState({ isAddDelayProfileModalOpen: false });\r\n };\r\n\r\n onMeasure = ({ width }) => {\r\n this.setState({ width });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n defaultProfile,\r\n items,\r\n tagList,\r\n dragIndex,\r\n dropIndex,\r\n onConfirmDeleteDelayProfile,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isAddDelayProfileModalOpen,\r\n width\r\n } = this.state;\r\n\r\n const isDragging = dropIndex !== null;\r\n const isDraggingUp = isDragging && dropIndex < dragIndex;\r\n const isDraggingDown = isDragging && dropIndex > dragIndex;\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n {translate('PreferredProtocol')}\r\n
\r\n
\r\n {translate('UsenetDelay')}\r\n
\r\n
\r\n {translate('TorrentDelay')}\r\n
\r\n
\r\n {translate('Tags')}\r\n
\r\n
\r\n\r\n
\r\n {\r\n items.map((item, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n\r\n {\r\n defaultProfile ?\r\n
\r\n \r\n
:\r\n null\r\n }\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nDelayProfiles.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n defaultProfile: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n dragIndex: PropTypes.number,\r\n dropIndex: PropTypes.number,\r\n onConfirmDeleteDelayProfile: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DelayProfiles;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteDelayProfile, fetchDelayProfiles, reorderDelayProfile } from 'Store/Actions/settingsActions';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport DelayProfiles from './DelayProfiles';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.delayProfiles,\r\n createTagsSelector(),\r\n (delayProfiles, tagList) => {\r\n const defaultProfile = _.find(delayProfiles.items, { id: 1 });\r\n const items = _.sortBy(_.reject(delayProfiles.items, { id: 1 }), ['order']);\r\n\r\n return {\r\n defaultProfile,\r\n ...delayProfiles,\r\n items,\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchDelayProfiles,\r\n deleteDelayProfile,\r\n reorderDelayProfile\r\n};\r\n\r\nclass DelayProfilesConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n dragIndex: null,\r\n dropIndex: null\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.props.fetchDelayProfiles();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteDelayProfile = (id) => {\r\n this.props.deleteDelayProfile({ id });\r\n };\r\n\r\n onDelayProfileDragMove = (dragIndex, dropIndex) => {\r\n if (this.state.dragIndex !== dragIndex || this.state.dropIndex !== dropIndex) {\r\n this.setState({\r\n dragIndex,\r\n dropIndex\r\n });\r\n }\r\n };\r\n\r\n onDelayProfileDragEnd = ({ id }, didDrop) => {\r\n const {\r\n dropIndex\r\n } = this.state;\r\n\r\n if (didDrop && dropIndex !== null) {\r\n this.props.reorderDelayProfile({ id, moveIndex: dropIndex - 1 });\r\n }\r\n\r\n this.setState({\r\n dragIndex: null,\r\n dropIndex: null\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDelayProfilesConnector.propTypes = {\r\n fetchDelayProfiles: PropTypes.func.isRequired,\r\n deleteDelayProfile: PropTypes.func.isRequired,\r\n reorderDelayProfile: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(DelayProfilesConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport NumberInput from 'Components/Form/NumberInput';\r\nimport styles from './QualityProfileFormatItem.css';\r\n\r\nclass QualityProfileFormatItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onScoreChange = ({ value }) => {\r\n const {\r\n formatId\r\n } = this.props;\r\n\r\n this.props.onScoreChange(formatId, value);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n name,\r\n score\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n {name}\r\n
\r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nQualityProfileFormatItem.propTypes = {\r\n formatId: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n score: PropTypes.number.isRequired,\r\n onScoreChange: PropTypes.func\r\n};\r\n\r\nQualityProfileFormatItem.defaultProps = {\r\n // To handle the case score is deleted during edit\r\n score: 0\r\n};\r\n\r\nexport default QualityProfileFormatItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"qualityProfileFormatItemContainer\":\"QualityProfileFormatItem-qualityProfileFormatItemContainer-sSQHW\",\"qualityProfileFormatItem\":\"QualityProfileFormatItem-qualityProfileFormatItem-yrgJj\",\"formatNameContainer\":\"QualityProfileFormatItem-formatNameContainer-sDM7L\",\"formatName\":\"QualityProfileFormatItem-formatName-F9UbI\",\"scoreContainer\":\"QualityProfileFormatItem-scoreContainer-lLqJR\",\"scoreInput\":\"QualityProfileFormatItem-scoreInput-awUEJ Input-input-KWeec\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputHelpText from 'Components/Form/FormInputHelpText';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport { sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport QualityProfileFormatItem from './QualityProfileFormatItem';\r\nimport styles from './QualityProfileFormatItems.css';\r\n\r\nfunction calcOrder(profileFormatItems) {\r\n const items = profileFormatItems.reduce((acc, cur, index) => {\r\n acc[cur.format] = index;\r\n return acc;\r\n }, {});\r\n\r\n return [...profileFormatItems].sort((a, b) => {\r\n if (b.score !== a.score) {\r\n return b.score - a.score;\r\n }\r\n\r\n return a.name.localeCompare(b.name, undefined, { numeric: true });\r\n }).map((x) => items[x.format]);\r\n}\r\n\r\nclass QualityProfileFormatItems extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n order: calcOrder(this.props.profileFormatItems)\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onScoreChange = (formatId, value) => {\r\n const {\r\n onQualityProfileFormatItemScoreChange\r\n } = this.props;\r\n\r\n onQualityProfileFormatItemScoreChange(formatId, value);\r\n this.reorderItems();\r\n };\r\n\r\n reorderItems = _.debounce(() => this.setState({ order: calcOrder(this.props.profileFormatItems) }), 1000);\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n profileFormatItems,\r\n errors,\r\n warnings\r\n } = this.props;\r\n\r\n const {\r\n order\r\n } = this.state;\r\n\r\n if (profileFormatItems.length < 1) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {translate('CustomFormats')}\r\n \r\n\r\n
\r\n \r\n\r\n {\r\n errors.map((error, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n {\r\n warnings.map((warning, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n
\r\n
\r\n
\r\n {translate('CustomFormat')}\r\n
\r\n
\r\n {translate('Score')}\r\n
\r\n
\r\n {\r\n order.map((index) => {\r\n const {\r\n format,\r\n name,\r\n score\r\n } = profileFormatItems[index];\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nQualityProfileFormatItems.propTypes = {\r\n profileFormatItems: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n errors: PropTypes.arrayOf(PropTypes.object),\r\n warnings: PropTypes.arrayOf(PropTypes.object),\r\n onQualityProfileFormatItemScoreChange: PropTypes.func\r\n};\r\n\r\nQualityProfileFormatItems.defaultProps = {\r\n errors: [],\r\n warnings: []\r\n};\r\n\r\nexport default QualityProfileFormatItems;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"formats\":\"QualityProfileFormatItems-formats-lyjb9\",\"headerContainer\":\"QualityProfileFormatItems-headerContainer-BuDwk\",\"headerTitle\":\"QualityProfileFormatItems-headerTitle-zrt2s\",\"headerScore\":\"QualityProfileFormatItems-headerScore-rwvsN\",\"addCustomFormatMessage\":\"QualityProfileFormatItems-addCustomFormatMessage-Y8Tof\"};","// extracted by mini-css-extract-plugin\nexport default {\"qualityProfileItem\":\"QualityProfileItem-qualityProfileItem-TEAK6\",\"isInGroup\":\"QualityProfileItem-isInGroup-v0tnK\",\"checkInputContainer\":\"QualityProfileItem-checkInputContainer-XOmYl\",\"checkInput\":\"QualityProfileItem-checkInput-NtKME CheckInput-input-VAM1T\",\"qualityNameContainer\":\"QualityProfileItem-qualityNameContainer-ws1Xl\",\"qualityName\":\"QualityProfileItem-qualityName-UDxBT\",\"notAllowed\":\"QualityProfileItem-notAllowed-KHOV9\",\"createGroupButton\":\"QualityProfileItem-createGroupButton-NYwja undefined\",\"dragHandle\":\"QualityProfileItem-dragHandle-fkDC9\",\"dragIcon\":\"QualityProfileItem-dragIcon-G0p9C\",\"isDragging\":\"QualityProfileItem-isDragging-NU2zj\",\"isPreview\":\"QualityProfileItem-isPreview-L8xaf\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport Icon from 'Components/Icon';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './QualityProfileItem.css';\r\n\r\nclass QualityProfileItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onAllowedChange = ({ value }) => {\r\n const {\r\n qualityId,\r\n onQualityProfileItemAllowedChange\r\n } = this.props;\r\n\r\n onQualityProfileItemAllowedChange(qualityId, value);\r\n };\r\n\r\n onCreateGroupPress = () => {\r\n const {\r\n qualityId,\r\n onCreateGroupPress\r\n } = this.props;\r\n\r\n onCreateGroupPress(qualityId);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n editGroups,\r\n isPreview,\r\n groupId,\r\n name,\r\n allowed,\r\n isDragging,\r\n isOverCurrent,\r\n connectDragSource\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {\r\n editGroups && !groupId && !isPreview &&\r\n \r\n }\r\n\r\n {\r\n !editGroups &&\r\n \r\n }\r\n\r\n
\r\n {name}\r\n
\r\n \r\n\r\n {\r\n connectDragSource(\r\n
\r\n \r\n
\r\n )\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nQualityProfileItem.propTypes = {\r\n editGroups: PropTypes.bool,\r\n isPreview: PropTypes.bool,\r\n groupId: PropTypes.number,\r\n qualityId: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n allowed: PropTypes.bool.isRequired,\r\n isDragging: PropTypes.bool.isRequired,\r\n isOverCurrent: PropTypes.bool.isRequired,\r\n isInGroup: PropTypes.bool,\r\n connectDragSource: PropTypes.func,\r\n onCreateGroupPress: PropTypes.func,\r\n onQualityProfileItemAllowedChange: PropTypes.func\r\n};\r\n\r\nQualityProfileItem.defaultProps = {\r\n isPreview: false,\r\n isOverCurrent: false,\r\n // The drag preview will not connect the drag handle.\r\n connectDragSource: (node) => node\r\n};\r\n\r\nexport default QualityProfileItem;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { DragLayer } from 'react-dnd';\r\nimport DragPreviewLayer from 'Components/DragPreviewLayer';\r\nimport { QUALITY_PROFILE_ITEM } from 'Helpers/dragTypes';\r\nimport dimensions from 'Styles/Variables/dimensions.js';\r\nimport QualityProfileItem from './QualityProfileItem';\r\nimport styles from './QualityProfileItemDragPreview.css';\r\n\r\nconst formGroupExtraSmallWidth = parseInt(dimensions.formGroupExtraSmallWidth);\r\nconst formLabelSmallWidth = parseInt(dimensions.formLabelSmallWidth);\r\nconst formLabelRightMarginWidth = parseInt(dimensions.formLabelRightMarginWidth);\r\nconst dragHandleWidth = parseInt(dimensions.dragHandleWidth);\r\n\r\nfunction collectDragLayer(monitor) {\r\n return {\r\n item: monitor.getItem(),\r\n itemType: monitor.getItemType(),\r\n currentOffset: monitor.getSourceClientOffset()\r\n };\r\n}\r\n\r\nclass QualityProfileItemDragPreview extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n item,\r\n itemType,\r\n currentOffset\r\n } = this.props;\r\n\r\n if (!currentOffset || itemType !== QUALITY_PROFILE_ITEM) {\r\n return null;\r\n }\r\n\r\n // The offset is shifted because the drag handle is on the right edge of the\r\n // list item and the preview is wider than the drag handle.\r\n\r\n const { x, y } = currentOffset;\r\n const handleOffset = formGroupExtraSmallWidth - formLabelSmallWidth - formLabelRightMarginWidth - dragHandleWidth;\r\n const transform = `translate3d(${x - handleOffset}px, ${y}px, 0)`;\r\n\r\n const style = {\r\n position: 'absolute',\r\n WebkitTransform: transform,\r\n msTransform: transform,\r\n transform\r\n };\r\n\r\n const {\r\n editGroups,\r\n groupId,\r\n qualityId,\r\n name,\r\n allowed\r\n } = item;\r\n\r\n // TODO: Show a different preview for groups\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nQualityProfileItemDragPreview.propTypes = {\r\n item: PropTypes.object,\r\n itemType: PropTypes.string,\r\n currentOffset: PropTypes.shape({\r\n x: PropTypes.number.isRequired,\r\n y: PropTypes.number.isRequired\r\n })\r\n};\r\n\r\nexport default DragLayer(collectDragLayer)(QualityProfileItemDragPreview);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"dragPreview\":\"QualityProfileItemDragPreview-dragPreview-NbgaE\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport TextInput from 'Components/Form/TextInput';\r\nimport Icon from 'Components/Icon';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport QualityProfileItemDragSource from './QualityProfileItemDragSource';\r\nimport styles from './QualityProfileItemGroup.css';\r\n\r\nclass QualityProfileItemGroup extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onAllowedChange = ({ value }) => {\r\n const {\r\n groupId,\r\n onItemGroupAllowedChange\r\n } = this.props;\r\n\r\n onItemGroupAllowedChange(groupId, value);\r\n };\r\n\r\n onNameChange = ({ value }) => {\r\n const {\r\n groupId,\r\n onItemGroupNameChange\r\n } = this.props;\r\n\r\n onItemGroupNameChange(groupId, value);\r\n };\r\n\r\n onDeleteGroupPress = ({ value }) => {\r\n const {\r\n groupId,\r\n onDeleteGroupPress\r\n } = this.props;\r\n\r\n onDeleteGroupPress(groupId, value);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n editGroups,\r\n groupId,\r\n name,\r\n allowed,\r\n items,\r\n qualityIndex,\r\n isDragging,\r\n isDraggingUp,\r\n isDraggingDown,\r\n connectDragSource,\r\n onQualityProfileItemAllowedChange,\r\n onQualityProfileItemDragMove,\r\n onQualityProfileItemDragEnd\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n {\r\n editGroups &&\r\n
\r\n \r\n\r\n \r\n
\r\n }\r\n\r\n {\r\n !editGroups &&\r\n \r\n \r\n\r\n
\r\n
\r\n {name}\r\n
\r\n\r\n
\r\n {\r\n items.map(({ quality }) => {\r\n return (\r\n \r\n );\r\n }).reverse()\r\n }\r\n
\r\n
\r\n \r\n }\r\n\r\n {\r\n connectDragSource(\r\n
\r\n \r\n
\r\n )\r\n }\r\n
\r\n\r\n {\r\n editGroups &&\r\n
\r\n {\r\n items.map(({ quality }, index) => {\r\n return (\r\n \r\n );\r\n }).reverse()\r\n }\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nQualityProfileItemGroup.propTypes = {\r\n editGroups: PropTypes.bool,\r\n groupId: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n allowed: PropTypes.bool.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n qualityIndex: PropTypes.string.isRequired,\r\n isDragging: PropTypes.bool.isRequired,\r\n isDraggingUp: PropTypes.bool.isRequired,\r\n isDraggingDown: PropTypes.bool.isRequired,\r\n connectDragSource: PropTypes.func,\r\n onItemGroupAllowedChange: PropTypes.func.isRequired,\r\n onQualityProfileItemAllowedChange: PropTypes.func.isRequired,\r\n onItemGroupNameChange: PropTypes.func.isRequired,\r\n onDeleteGroupPress: PropTypes.func.isRequired,\r\n onQualityProfileItemDragMove: PropTypes.func.isRequired,\r\n onQualityProfileItemDragEnd: PropTypes.func.isRequired\r\n};\r\n\r\nQualityProfileItemGroup.defaultProps = {\r\n // The drag preview will not connect the drag handle.\r\n connectDragSource: (node) => node\r\n};\r\n\r\nexport default QualityProfileItemGroup;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"qualityProfileItemGroup\":\"QualityProfileItemGroup-qualityProfileItemGroup-uZqur\",\"editGroups\":\"QualityProfileItemGroup-editGroups-jmmBq\",\"qualityProfileItemGroupInfo\":\"QualityProfileItemGroup-qualityProfileItemGroupInfo-Kou2X\",\"checkInputContainer\":\"QualityProfileItemGroup-checkInputContainer-XDuB_ QualityProfileItem-checkInputContainer-XOmYl\",\"checkInput\":\"QualityProfileItemGroup-checkInput-bCDDy QualityProfileItem-checkInput-NtKME CheckInput-input-VAM1T\",\"nameInput\":\"QualityProfileItemGroup-nameInput-WZ6mI TextInput-input-svfXu Input-input-KWeec\",\"nameContainer\":\"QualityProfileItemGroup-nameContainer-WXC2r\",\"name\":\"QualityProfileItemGroup-name-mH2mG\",\"notAllowed\":\"QualityProfileItemGroup-notAllowed-ESbqc\",\"groupQualities\":\"QualityProfileItemGroup-groupQualities-ANIg_\",\"qualityNameContainer\":\"QualityProfileItemGroup-qualityNameContainer-lwJWU\",\"qualityNameLabel\":\"QualityProfileItemGroup-qualityNameLabel-nMell QualityProfileItemGroup-qualityNameContainer-lwJWU\",\"deleteGroupButton\":\"QualityProfileItemGroup-deleteGroupButton-p85Qd undefined\",\"dragHandle\":\"QualityProfileItemGroup-dragHandle-NSzyO\",\"dragIcon\":\"QualityProfileItemGroup-dragIcon-rmBVO\",\"isDragging\":\"QualityProfileItemGroup-isDragging-JtSGM\",\"items\":\"QualityProfileItemGroup-items-B4dxR\"};","// extracted by mini-css-extract-plugin\nexport default {\"qualityProfileItemDragSource\":\"QualityProfileItemDragSource-qualityProfileItemDragSource-NwZEi\",\"qualityProfileItemPlaceholder\":\"QualityProfileItemDragSource-qualityProfileItemPlaceholder-ORYGX\",\"qualityProfileItemPlaceholderBefore\":\"QualityProfileItemDragSource-qualityProfileItemPlaceholderBefore-BWGOW\",\"qualityProfileItemPlaceholderAfter\":\"QualityProfileItemDragSource-qualityProfileItemPlaceholderAfter-oWcx8\"};","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { DragSource, DropTarget } from 'react-dnd';\r\nimport { findDOMNode } from 'react-dom';\r\nimport { QUALITY_PROFILE_ITEM } from 'Helpers/dragTypes';\r\nimport QualityProfileItem from './QualityProfileItem';\r\nimport QualityProfileItemGroup from './QualityProfileItemGroup';\r\nimport styles from './QualityProfileItemDragSource.css';\r\n\r\nconst qualityProfileItemDragSource = {\r\n beginDrag(props) {\r\n const {\r\n editGroups,\r\n qualityIndex,\r\n groupId,\r\n qualityId,\r\n name,\r\n allowed\r\n } = props;\r\n\r\n return {\r\n editGroups,\r\n qualityIndex,\r\n groupId,\r\n qualityId,\r\n isGroup: !qualityId,\r\n name,\r\n allowed\r\n };\r\n },\r\n\r\n endDrag(props, monitor, component) {\r\n props.onQualityProfileItemDragEnd(monitor.didDrop());\r\n }\r\n};\r\n\r\nconst qualityProfileItemDropTarget = {\r\n hover(props, monitor, component) {\r\n const {\r\n qualityIndex: dragQualityIndex,\r\n isGroup: isDragGroup\r\n } = monitor.getItem();\r\n\r\n const dropQualityIndex = props.qualityIndex;\r\n const isDropGroupItem = !!(props.qualityId && props.groupId);\r\n\r\n // Use childNodeIndex to select the correct node to get the middle of so\r\n // we don't bounce between above and below causing rapid setState calls.\r\n const childNodeIndex = component.props.isOverCurrent && component.props.isDraggingUp ? 1 :0;\r\n const componentDOMNode = findDOMNode(component).children[childNodeIndex];\r\n const hoverBoundingRect = componentDOMNode.getBoundingClientRect();\r\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\r\n const clientOffset = monitor.getClientOffset();\r\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\r\n\r\n // If we're hovering over a child don't trigger on the parent\r\n if (!monitor.isOver({ shallow: true })) {\r\n return;\r\n }\r\n\r\n // Don't show targets for dropping on self\r\n if (dragQualityIndex === dropQualityIndex) {\r\n return;\r\n }\r\n\r\n // Don't allow a group to be dropped inside a group\r\n if (isDragGroup && isDropGroupItem) {\r\n return;\r\n }\r\n\r\n let dropPosition = null;\r\n\r\n // Determine drop position based on position over target\r\n if (hoverClientY > hoverMiddleY) {\r\n dropPosition = 'below';\r\n } else if (hoverClientY < hoverMiddleY) {\r\n dropPosition = 'above';\r\n } else {\r\n return;\r\n }\r\n\r\n props.onQualityProfileItemDragMove({\r\n dragQualityIndex,\r\n dropQualityIndex,\r\n dropPosition\r\n });\r\n }\r\n};\r\n\r\nfunction collectDragSource(connect, monitor) {\r\n return {\r\n connectDragSource: connect.dragSource(),\r\n isDragging: monitor.isDragging()\r\n };\r\n}\r\n\r\nfunction collectDropTarget(connect, monitor) {\r\n return {\r\n connectDropTarget: connect.dropTarget(),\r\n isOver: monitor.isOver(),\r\n isOverCurrent: monitor.isOver({ shallow: true })\r\n };\r\n}\r\n\r\nclass QualityProfileItemDragSource extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n editGroups,\r\n groupId,\r\n qualityId,\r\n name,\r\n allowed,\r\n items,\r\n qualityIndex,\r\n isDragging,\r\n isDraggingUp,\r\n isDraggingDown,\r\n isOverCurrent,\r\n connectDragSource,\r\n connectDropTarget,\r\n onCreateGroupPress,\r\n onDeleteGroupPress,\r\n onQualityProfileItemAllowedChange,\r\n onItemGroupAllowedChange,\r\n onItemGroupNameChange,\r\n onQualityProfileItemDragMove,\r\n onQualityProfileItemDragEnd\r\n } = this.props;\r\n\r\n const isBefore = !isDragging && isDraggingUp && isOverCurrent;\r\n const isAfter = !isDragging && isDraggingDown && isOverCurrent;\r\n\r\n return connectDropTarget(\r\n \r\n {\r\n isBefore &&\r\n \r\n }\r\n\r\n {\r\n !!groupId && qualityId == null &&\r\n \r\n }\r\n\r\n {\r\n qualityId != null &&\r\n \r\n }\r\n\r\n {\r\n isAfter &&\r\n \r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nQualityProfileItemDragSource.propTypes = {\r\n editGroups: PropTypes.bool.isRequired,\r\n groupId: PropTypes.number,\r\n qualityId: PropTypes.number,\r\n name: PropTypes.string.isRequired,\r\n allowed: PropTypes.bool.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object),\r\n qualityIndex: PropTypes.string.isRequired,\r\n isDragging: PropTypes.bool,\r\n isDraggingUp: PropTypes.bool,\r\n isDraggingDown: PropTypes.bool,\r\n isOverCurrent: PropTypes.bool,\r\n isInGroup: PropTypes.bool,\r\n connectDragSource: PropTypes.func,\r\n connectDropTarget: PropTypes.func,\r\n onCreateGroupPress: PropTypes.func,\r\n onDeleteGroupPress: PropTypes.func,\r\n onQualityProfileItemAllowedChange: PropTypes.func.isRequired,\r\n onItemGroupAllowedChange: PropTypes.func,\r\n onItemGroupNameChange: PropTypes.func,\r\n onQualityProfileItemDragMove: PropTypes.func.isRequired,\r\n onQualityProfileItemDragEnd: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DropTarget(\r\n QUALITY_PROFILE_ITEM,\r\n qualityProfileItemDropTarget,\r\n collectDropTarget\r\n)(DragSource(\r\n QUALITY_PROFILE_ITEM,\r\n qualityProfileItemDragSource,\r\n collectDragSource\r\n)(QualityProfileItemDragSource));\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputHelpText from 'Components/Form/FormInputHelpText';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport Measure from 'Components/Measure';\r\nimport { icons, kinds, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport QualityProfileItemDragPreview from './QualityProfileItemDragPreview';\r\nimport QualityProfileItemDragSource from './QualityProfileItemDragSource';\r\nimport styles from './QualityProfileItems.css';\r\n\r\nclass QualityProfileItems extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n qualitiesHeight: 0,\r\n qualitiesHeightEditGroups: 0\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = ({ height }) => {\r\n if (this.props.editGroups) {\r\n this.setState({\r\n qualitiesHeightEditGroups: height\r\n });\r\n } else {\r\n this.setState({ qualitiesHeight: height });\r\n }\r\n };\r\n\r\n onToggleEditGroupsMode = () => {\r\n this.props.onToggleEditGroupsMode();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n editGroups,\r\n dropQualityIndex,\r\n dropPosition,\r\n qualityProfileItems,\r\n errors,\r\n warnings,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n qualitiesHeight,\r\n qualitiesHeightEditGroups\r\n } = this.state;\r\n\r\n const isDragging = dropQualityIndex !== null;\r\n const isDraggingUp = isDragging && dropPosition === 'above';\r\n const isDraggingDown = isDragging && dropPosition === 'below';\r\n const minHeight = editGroups ? qualitiesHeightEditGroups : qualitiesHeight;\r\n\r\n return (\r\n \r\n \r\n {translate('Qualities')}\r\n \r\n\r\n
\r\n \r\n\r\n {\r\n errors.map((error, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n {\r\n warnings.map((warning, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n\r\n {\r\n editGroups ? translate('DoneEditingGroups') : translate('EditGroups')\r\n }\r\n
\r\n \r\n\r\n \r\n \r\n {\r\n qualityProfileItems.map(({ id, name, allowed, quality, items }, index) => {\r\n const identifier = quality ? quality.id : id;\r\n\r\n return (\r\n \r\n );\r\n }).reverse()\r\n }\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nQualityProfileItems.propTypes = {\r\n editGroups: PropTypes.bool.isRequired,\r\n dragQualityIndex: PropTypes.string,\r\n dropQualityIndex: PropTypes.string,\r\n dropPosition: PropTypes.string,\r\n qualityProfileItems: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n errors: PropTypes.arrayOf(PropTypes.object),\r\n warnings: PropTypes.arrayOf(PropTypes.object),\r\n onToggleEditGroupsMode: PropTypes.func.isRequired\r\n};\r\n\r\nQualityProfileItems.defaultProps = {\r\n errors: [],\r\n warnings: []\r\n};\r\n\r\nexport default QualityProfileItems;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"editGroupsButton\":\"QualityProfileItems-editGroupsButton-d3Isx Button-button-paJ9a Link-link-RInnp\",\"editGroupsButtonIcon\":\"QualityProfileItems-editGroupsButtonIcon-JdP1h\",\"qualities\":\"QualityProfileItems-qualities-EdMt0\"};","// extracted by mini-css-extract-plugin\nexport default {\"formGroupsContainer\":\"EditQualityProfileModalContent-formGroupsContainer-hjomj\",\"formGroupWrapper\":\"EditQualityProfileModalContent-formGroupWrapper-RN2SQ\",\"formatItemLarge\":\"EditQualityProfileModalContent-formatItemLarge-gnp2n\",\"deleteButtonContainer\":\"EditQualityProfileModalContent-deleteButtonContainer-SvWk_\",\"formatItemSmall\":\"EditQualityProfileModalContent-formatItemSmall-MG3__\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Measure from 'Components/Measure';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds, sizes } from 'Helpers/Props';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport translate from 'Utilities/String/translate';\r\nimport QualityProfileFormatItems from './QualityProfileFormatItems';\r\nimport QualityProfileItems from './QualityProfileItems';\r\nimport styles from './EditQualityProfileModalContent.css';\r\n\r\nconst MODAL_BODY_PADDING = parseInt(dimensions.modalBodyPadding);\r\n\r\nfunction getCustomFormatRender(formatItems, otherProps) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nclass EditQualityProfileModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n headerHeight: 0,\r\n bodyHeight: 0,\r\n footerHeight: 0\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const {\r\n headerHeight,\r\n bodyHeight,\r\n footerHeight\r\n } = this.state;\r\n\r\n if (\r\n headerHeight > 0 &&\r\n bodyHeight > 0 &&\r\n footerHeight > 0 &&\r\n (\r\n headerHeight !== prevState.headerHeight ||\r\n bodyHeight !== prevState.bodyHeight ||\r\n footerHeight !== prevState.footerHeight\r\n )\r\n ) {\r\n const padding = MODAL_BODY_PADDING * 2;\r\n\r\n this.props.onContentHeightChange(\r\n headerHeight + bodyHeight + footerHeight + padding\r\n );\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onHeaderMeasure = ({ height }) => {\r\n if (height > this.state.headerHeight) {\r\n this.setState({ headerHeight: height });\r\n }\r\n };\r\n\r\n onBodyMeasure = ({ height }) => {\r\n\r\n if (height > this.state.bodyHeight) {\r\n this.setState({ bodyHeight: height });\r\n }\r\n };\r\n\r\n onFooterMeasure = ({ height }) => {\r\n if (height > this.state.footerHeight) {\r\n this.setState({ footerHeight: height });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n editGroups,\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n qualities,\r\n customFormats,\r\n languages,\r\n item,\r\n isInUse,\r\n onInputChange,\r\n onCutoffChange,\r\n onLanguageChange,\r\n onSavePress,\r\n onModalClose,\r\n onDeleteQualityProfilePress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n id,\r\n name,\r\n upgradeAllowed,\r\n cutoff,\r\n minFormatScore,\r\n minUpgradeFormatScore,\r\n cutoffFormatScore,\r\n language,\r\n items,\r\n formatItems\r\n } = item;\r\n\r\n const languageId = language ? language.value.id : 0;\r\n\r\n return (\r\n \r\n \r\n \r\n {id ? translate('EditQualityProfile') : translate('AddQualityProfile')}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('AddQualityProfileError')}\r\n \r\n }\r\n\r\n {\r\n !isFetching && !error &&\r\n \r\n
\r\n
\r\n \r\n \r\n {translate('Name')}\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('UpgradesAllowed')}\r\n \r\n\r\n \r\n \r\n\r\n {\r\n upgradeAllowed.value &&\r\n \r\n \r\n {translate('UpgradeUntil')}\r\n \r\n\r\n \r\n \r\n }\r\n\r\n {\r\n formatItems.value.length > 0 &&\r\n \r\n \r\n {translate('MinimumCustomFormatScore')}\r\n \r\n\r\n \r\n \r\n }\r\n\r\n {\r\n upgradeAllowed.value && formatItems.value.length > 0 &&\r\n \r\n \r\n {translate('UpgradeUntilCustomFormatScore')}\r\n \r\n\r\n \r\n \r\n }\r\n\r\n {\r\n upgradeAllowed.value && formatItems.value.length > 0 ?\r\n \r\n \r\n {translate('MinimumCustomFormatScoreIncrement')}\r\n \r\n\r\n \r\n :\r\n null\r\n }\r\n\r\n \r\n \r\n {translate('Language')}\r\n \r\n\r\n \r\n \r\n\r\n
\r\n {getCustomFormatRender(formatItems, otherProps)}\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n {getCustomFormatRender(formatItems, otherProps)}\r\n
\r\n
\r\n \r\n\r\n }\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n {\r\n id ?\r\n \r\n \r\n {translate('Delete')}\r\n \r\n :\r\n null\r\n }\r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nEditQualityProfileModalContent.propTypes = {\r\n editGroups: PropTypes.bool.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n qualities: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n customFormats: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n languages: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n item: PropTypes.object.isRequired,\r\n isInUse: PropTypes.bool.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onCutoffChange: PropTypes.func.isRequired,\r\n onLanguageChange: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onContentHeightChange: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onDeleteQualityProfilePress: PropTypes.func\r\n};\r\n\r\nexport default EditQualityProfileModalContent;\r\n","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchQualityProfileSchema, saveQualityProfile, setQualityProfileValue } from 'Store/Actions/settingsActions';\r\nimport createProfileInUseSelector from 'Store/Selectors/createProfileInUseSelector';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditQualityProfileModalContent from './EditQualityProfileModalContent';\r\n\r\nfunction getQualityItemGroupId(qualityProfile) {\r\n // Get items with an `id` and filter out null/undefined values\r\n const ids = _.filter(_.map(qualityProfile.items.value, 'id'), (i) => i != null);\r\n\r\n return Math.max(1000, ...ids) + 1;\r\n}\r\n\r\nfunction parseIndex(index) {\r\n const split = index.split('.');\r\n\r\n if (split.length === 1) {\r\n return [\r\n null,\r\n parseInt(split[0]) - 1\r\n ];\r\n }\r\n\r\n return [\r\n parseInt(split[0]) - 1,\r\n parseInt(split[1]) - 1\r\n ];\r\n}\r\n\r\nfunction createQualitiesSelector() {\r\n return createSelector(\r\n createProviderSettingsSelector('qualityProfiles'),\r\n (qualityProfile) => {\r\n const items = qualityProfile.item.items;\r\n if (!items || !items.value) {\r\n return [];\r\n }\r\n\r\n return _.reduceRight(items.value, (result, { allowed, id, name, quality }) => {\r\n if (allowed) {\r\n if (id) {\r\n result.push({\r\n key: id,\r\n value: name\r\n });\r\n } else {\r\n result.push({\r\n key: quality.id,\r\n value: quality.name\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }, []);\r\n }\r\n );\r\n}\r\n\r\nfunction createFormatsSelector() {\r\n return createSelector(\r\n createProviderSettingsSelector('qualityProfiles'),\r\n (customFormat) => {\r\n const items = customFormat.item.formatItems;\r\n if (!items || !items.value) {\r\n return [];\r\n }\r\n\r\n return _.reduceRight(items.value, (result, { id, name, format, score }) => {\r\n if (id) {\r\n result.push({\r\n key: id,\r\n value: name,\r\n score\r\n });\r\n } else {\r\n result.push({\r\n key: format,\r\n value: name,\r\n score\r\n });\r\n }\r\n\r\n return result;\r\n }, []);\r\n }\r\n );\r\n}\r\n\r\nfunction createLanguagesSelector() {\r\n return createSelector(\r\n (state) => state.settings.languages,\r\n (languages) => {\r\n const items = languages.items;\r\n const filterItems = ['Unknown'];\r\n\r\n if (!items) {\r\n return [];\r\n }\r\n\r\n const newItems = items.filter((lang) => !filterItems.includes(lang.name)).map((item) => {\r\n return {\r\n key: item.id,\r\n value: item.name\r\n };\r\n });\r\n\r\n return newItems;\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createProviderSettingsSelector('qualityProfiles'),\r\n createQualitiesSelector(),\r\n createFormatsSelector(),\r\n createLanguagesSelector(),\r\n createProfileInUseSelector('qualityProfileId'),\r\n (qualityProfile, qualities, customFormats, languages, isInUse) => {\r\n return {\r\n qualities,\r\n customFormats,\r\n languages,\r\n ...qualityProfile,\r\n isInUse\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchQualityProfileSchema,\r\n setQualityProfileValue,\r\n saveQualityProfile\r\n};\r\n\r\nclass EditQualityProfileModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n dragQualityIndex: null,\r\n dropQualityIndex: null,\r\n dropPosition: null,\r\n editGroups: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.id && !this.props.isPopulated) {\r\n this.props.fetchQualityProfileSchema();\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {\r\n this.props.onModalClose();\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n ensureCutoff = (qualityProfile) => {\r\n const cutoff = qualityProfile.cutoff.value;\r\n\r\n const cutoffItem = _.find(qualityProfile.items.value, (i) => {\r\n if (!cutoff) {\r\n return false;\r\n }\r\n\r\n return i.id === cutoff || (i.quality && i.quality.id === cutoff);\r\n });\r\n\r\n // If the cutoff isn't allowed anymore or there isn't a cutoff set one\r\n if (!cutoff || !cutoffItem || !cutoffItem.allowed) {\r\n const firstAllowed = _.find(qualityProfile.items.value, { allowed: true });\r\n let cutoffId = null;\r\n\r\n if (firstAllowed) {\r\n cutoffId = firstAllowed.quality ? firstAllowed.quality.id : firstAllowed.id;\r\n }\r\n\r\n this.props.setQualityProfileValue({ name: 'cutoff', value: cutoffId });\r\n }\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setQualityProfileValue({ name, value });\r\n };\r\n\r\n onCutoffChange = ({ name, value }) => {\r\n const id = parseInt(value);\r\n const item = _.find(this.props.item.items.value, (i) => {\r\n if (i.quality) {\r\n return i.quality.id === id;\r\n }\r\n\r\n return i.id === id;\r\n });\r\n\r\n const cutoffId = item.quality ? item.quality.id : item.id;\r\n\r\n this.props.setQualityProfileValue({ name, value: cutoffId });\r\n };\r\n\r\n onLanguageChange = ({ name, value }) => {\r\n\r\n const id = parseInt(value);\r\n\r\n const language = _.find(this.props.languages, (item) => item.key === id);\r\n\r\n this.props.setQualityProfileValue({ name, value: { id: language.key, Name: language.value } });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveQualityProfile({ id: this.props.id });\r\n };\r\n\r\n onQualityProfileItemAllowedChange = (id, allowed) => {\r\n const qualityProfile = _.cloneDeep(this.props.item);\r\n const items = qualityProfile.items.value;\r\n const item = _.find(qualityProfile.items.value, (i) => i.quality && i.quality.id === id);\r\n\r\n item.allowed = allowed;\r\n\r\n this.props.setQualityProfileValue({\r\n name: 'items',\r\n value: items\r\n });\r\n\r\n this.ensureCutoff(qualityProfile);\r\n };\r\n\r\n onQualityProfileFormatItemScoreChange = (id, score) => {\r\n const qualityProfile = _.cloneDeep(this.props.item);\r\n const formatItems = qualityProfile.formatItems.value;\r\n const item = _.find(qualityProfile.formatItems.value, (i) => i.format === id);\r\n\r\n item.score = score;\r\n\r\n this.props.setQualityProfileValue({\r\n name: 'formatItems',\r\n value: formatItems\r\n });\r\n };\r\n\r\n onItemGroupAllowedChange = (id, allowed) => {\r\n const qualityProfile = _.cloneDeep(this.props.item);\r\n const items = qualityProfile.items.value;\r\n const item = _.find(qualityProfile.items.value, (i) => i.id === id);\r\n\r\n item.allowed = allowed;\r\n\r\n // Update each item in the group (for consistency only)\r\n item.items.forEach((i) => {\r\n i.allowed = allowed;\r\n });\r\n\r\n this.props.setQualityProfileValue({\r\n name: 'items',\r\n value: items\r\n });\r\n\r\n this.ensureCutoff(qualityProfile);\r\n };\r\n\r\n onItemGroupNameChange = (id, name) => {\r\n const qualityProfile = _.cloneDeep(this.props.item);\r\n const items = qualityProfile.items.value;\r\n const group = _.find(items, (i) => i.id === id);\r\n\r\n group.name = name;\r\n\r\n this.props.setQualityProfileValue({\r\n name: 'items',\r\n value: items\r\n });\r\n };\r\n\r\n onCreateGroupPress = (id) => {\r\n const qualityProfile = _.cloneDeep(this.props.item);\r\n const items = qualityProfile.items.value;\r\n const item = _.find(items, (i) => i.quality && i.quality.id === id);\r\n const index = items.indexOf(item);\r\n const groupId = getQualityItemGroupId(qualityProfile);\r\n\r\n const group = {\r\n id: groupId,\r\n name: item.quality.name,\r\n allowed: item.allowed,\r\n items: [\r\n item\r\n ]\r\n };\r\n\r\n // Add the group in the same location the quality item was in.\r\n items.splice(index, 1, group);\r\n\r\n this.props.setQualityProfileValue({\r\n name: 'items',\r\n value: items\r\n });\r\n\r\n this.ensureCutoff(qualityProfile);\r\n };\r\n\r\n onDeleteGroupPress = (id) => {\r\n const qualityProfile = _.cloneDeep(this.props.item);\r\n const items = qualityProfile.items.value;\r\n const group = _.find(items, (i) => i.id === id);\r\n const index = items.indexOf(group);\r\n\r\n // Add the items in the same location the group was in\r\n items.splice(index, 1, ...group.items);\r\n\r\n this.props.setQualityProfileValue({\r\n name: 'items',\r\n value: items\r\n });\r\n\r\n this.ensureCutoff(qualityProfile);\r\n };\r\n\r\n onQualityProfileItemDragMove = (options) => {\r\n const {\r\n dragQualityIndex,\r\n dropQualityIndex,\r\n dropPosition\r\n } = options;\r\n\r\n const [dragGroupIndex, dragItemIndex] = parseIndex(dragQualityIndex);\r\n const [dropGroupIndex, dropItemIndex] = parseIndex(dropQualityIndex);\r\n\r\n if (\r\n (dropPosition === 'below' && dropItemIndex - 1 === dragItemIndex) ||\r\n (dropPosition === 'above' && dropItemIndex + 1 === dragItemIndex)\r\n ) {\r\n if (\r\n this.state.dragQualityIndex != null &&\r\n this.state.dropQualityIndex != null &&\r\n this.state.dropPosition != null\r\n ) {\r\n this.setState({\r\n dragQualityIndex: null,\r\n dropQualityIndex: null,\r\n dropPosition: null\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n let adjustedDropQualityIndex = dropQualityIndex;\r\n\r\n // Correct dragging out of a group to the position above\r\n if (\r\n dropPosition === 'above' &&\r\n dragGroupIndex !== dropGroupIndex &&\r\n dropGroupIndex != null\r\n ) {\r\n // Add 1 to the group index and 2 to the item index so it's inserted above in the correct group\r\n adjustedDropQualityIndex = `${dropGroupIndex + 1}.${dropItemIndex + 2}`;\r\n }\r\n\r\n // Correct inserting above outside a group\r\n if (\r\n dropPosition === 'above' &&\r\n dragGroupIndex !== dropGroupIndex &&\r\n dropGroupIndex == null\r\n ) {\r\n // Add 2 to the item index so it's entered in the correct place\r\n adjustedDropQualityIndex = `${dropItemIndex + 2}`;\r\n }\r\n\r\n // Correct inserting below a quality within the same group (when moving a lower item)\r\n if (\r\n dropPosition === 'below' &&\r\n dragGroupIndex === dropGroupIndex &&\r\n dropGroupIndex != null &&\r\n dragItemIndex < dropItemIndex\r\n ) {\r\n // Add 1 to the group index leave the item index\r\n adjustedDropQualityIndex = `${dropGroupIndex + 1}.${dropItemIndex}`;\r\n }\r\n\r\n // Correct inserting below a quality outside a group (when moving a lower item)\r\n if (\r\n dropPosition === 'below' &&\r\n dragGroupIndex === dropGroupIndex &&\r\n dropGroupIndex == null &&\r\n dragItemIndex < dropItemIndex\r\n ) {\r\n // Leave the item index so it's inserted below the item\r\n adjustedDropQualityIndex = `${dropItemIndex}`;\r\n }\r\n\r\n if (\r\n dragQualityIndex !== this.state.dragQualityIndex ||\r\n adjustedDropQualityIndex !== this.state.dropQualityIndex ||\r\n dropPosition !== this.state.dropPosition\r\n ) {\r\n this.setState({\r\n dragQualityIndex,\r\n dropQualityIndex: adjustedDropQualityIndex,\r\n dropPosition\r\n });\r\n }\r\n };\r\n\r\n onQualityProfileItemDragEnd = (didDrop) => {\r\n const {\r\n dragQualityIndex,\r\n dropQualityIndex\r\n } = this.state;\r\n\r\n if (didDrop && dropQualityIndex != null) {\r\n const qualityProfile = _.cloneDeep(this.props.item);\r\n const items = qualityProfile.items.value;\r\n const [dragGroupIndex, dragItemIndex] = parseIndex(dragQualityIndex);\r\n const [dropGroupIndex, dropItemIndex] = parseIndex(dropQualityIndex);\r\n\r\n let item = null;\r\n let dropGroup = null;\r\n\r\n // Get the group before moving anything so we know the correct place to drop it.\r\n if (dropGroupIndex != null) {\r\n dropGroup = items[dropGroupIndex];\r\n }\r\n\r\n if (dragGroupIndex == null) {\r\n item = items.splice(dragItemIndex, 1)[0];\r\n } else {\r\n const group = items[dragGroupIndex];\r\n item = group.items.splice(dragItemIndex, 1)[0];\r\n\r\n // If the group is now empty, destroy it.\r\n if (!group.items.length) {\r\n items.splice(dragGroupIndex, 1);\r\n }\r\n }\r\n\r\n if (dropGroupIndex == null) {\r\n items.splice(dropItemIndex, 0, item);\r\n } else {\r\n dropGroup.items.splice(dropItemIndex, 0, item);\r\n }\r\n\r\n this.props.setQualityProfileValue({\r\n name: 'items',\r\n value: items\r\n });\r\n\r\n this.ensureCutoff(qualityProfile);\r\n }\r\n\r\n this.setState({\r\n dragQualityIndex: null,\r\n dropQualityIndex: null,\r\n dropPosition: null\r\n });\r\n };\r\n\r\n onToggleEditGroupsMode = () => {\r\n this.setState({ editGroups: !this.state.editGroups });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n if (_.isEmpty(this.props.item.items) && !this.props.isFetching) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditQualityProfileModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n saveError: PropTypes.object,\r\n item: PropTypes.object.isRequired,\r\n languages: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n setQualityProfileValue: PropTypes.func.isRequired,\r\n fetchQualityProfileSchema: PropTypes.func.isRequired,\r\n saveQualityProfile: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditQualityProfileModalContentConnector);\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Movie from 'Movie/Movie';\r\nimport ImportList from 'typings/ImportList';\r\nimport MovieCollection from 'typings/MovieCollection';\r\nimport createAllMoviesSelector from './createAllMoviesSelector';\r\n\r\nfunction createProfileInUseSelector(profileProp: string) {\r\n return createSelector(\r\n (_: AppState, { id }: { id: number }) => id,\r\n createAllMoviesSelector(),\r\n (state: AppState) => state.settings.importLists.items,\r\n (state: AppState) => state.movieCollections.items,\r\n (id, movies, lists, collections) => {\r\n if (!id) {\r\n return false;\r\n }\r\n\r\n return (\r\n movies.some((m) => m[profileProp as keyof Movie] === id) ||\r\n lists.some((list) => list[profileProp as keyof ImportList] === id) ||\r\n collections.some(\r\n (collection) =>\r\n collection[profileProp as keyof MovieCollection] === id\r\n )\r\n );\r\n }\r\n );\r\n}\r\n\r\nexport default createProfileInUseSelector;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport EditQualityProfileModalContentConnector from './EditQualityProfileModalContentConnector';\r\n\r\nclass EditQualityProfileModal extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n height: 'auto'\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onContentHeightChange = (height) => {\r\n if (this.state.height === 'auto' || height > this.state.height) {\r\n this.setState({ height });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nEditQualityProfileModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditQualityProfileModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditQualityProfileModal from './EditQualityProfileModal';\r\n\r\nfunction mapStateToProps() {\r\n return {};\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n clearPendingChanges\r\n};\r\n\r\nclass EditQualityProfileModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.clearPendingChanges({ section: 'settings.qualityProfiles' });\r\n this.props.onModalClose();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditQualityProfileModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(EditQualityProfileModalConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { icons, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditQualityProfileModalConnector from './EditQualityProfileModalConnector';\r\nimport styles from './QualityProfile.css';\r\n\r\nclass QualityProfile extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isEditQualityProfileModalOpen: false,\r\n isDeleteQualityProfileModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditQualityProfilePress = () => {\r\n this.setState({ isEditQualityProfileModalOpen: true });\r\n };\r\n\r\n onEditQualityProfileModalClose = () => {\r\n this.setState({ isEditQualityProfileModalOpen: false });\r\n };\r\n\r\n onDeleteQualityProfilePress = () => {\r\n this.setState({\r\n isEditQualityProfileModalOpen: false,\r\n isDeleteQualityProfileModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteQualityProfileModalClose = () => {\r\n this.setState({ isDeleteQualityProfileModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteQualityProfile = () => {\r\n this.props.onConfirmDeleteQualityProfile(this.props.id);\r\n };\r\n\r\n onCloneQualityProfilePress = () => {\r\n const {\r\n id,\r\n onCloneQualityProfilePress\r\n } = this.props;\r\n\r\n onCloneQualityProfilePress(id);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n name,\r\n upgradeAllowed,\r\n cutoff,\r\n items,\r\n isDeleting\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n
\r\n {name}\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n {\r\n items.map((item) => {\r\n if (!item.allowed) {\r\n return null;\r\n }\r\n\r\n if (item.quality) {\r\n const isCutoff = upgradeAllowed && item.quality.id === cutoff;\r\n\r\n return (\r\n \r\n {item.quality.name}\r\n \r\n );\r\n }\r\n\r\n const isCutoff = upgradeAllowed && item.id === cutoff;\r\n\r\n return (\r\n \r\n {item.name}\r\n \r\n }\r\n tooltip={\r\n
\r\n {\r\n item.items.map((groupItem) => {\r\n return (\r\n \r\n {groupItem.quality.name}\r\n \r\n );\r\n })\r\n }\r\n
\r\n }\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n />\r\n );\r\n })\r\n }\r\n
\r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nQualityProfile.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n upgradeAllowed: PropTypes.bool.isRequired,\r\n cutoff: PropTypes.number.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isDeleting: PropTypes.bool.isRequired,\r\n onConfirmDeleteQualityProfile: PropTypes.func.isRequired,\r\n onCloneQualityProfilePress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default QualityProfile;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"qualityProfile\":\"QualityProfile-qualityProfile-jkXPx Card-card-aoesq\",\"nameContainer\":\"QualityProfile-nameContainer-pK4Yv\",\"name\":\"QualityProfile-name-jAtfw\",\"cloneButton\":\"QualityProfile-cloneButton-Y4jVX IconButton-button-t4C5V Link-link-RInnp\",\"qualities\":\"QualityProfile-qualities-XTEvs\",\"tooltipLabel\":\"QualityProfile-tooltipLabel-jEOdt Label-label-DYldh\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditQualityProfileModalConnector from './EditQualityProfileModalConnector';\r\nimport QualityProfile from './QualityProfile';\r\nimport styles from './QualityProfiles.css';\r\n\r\nclass QualityProfiles extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isQualityProfileModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onCloneQualityProfilePress = (id) => {\r\n this.props.onCloneQualityProfilePress(id);\r\n this.setState({ isQualityProfileModalOpen: true });\r\n };\r\n\r\n onEditQualityProfilePress = () => {\r\n this.setState({ isQualityProfileModalOpen: true });\r\n };\r\n\r\n onModalClose = () => {\r\n this.setState({ isQualityProfileModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n isDeleting,\r\n onConfirmDeleteQualityProfile,\r\n onCloneQualityProfilePress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nQualityProfiles.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isDeleting: PropTypes.bool.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteQualityProfile: PropTypes.func.isRequired,\r\n onCloneQualityProfilePress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default QualityProfiles;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"qualityProfiles\":\"QualityProfiles-qualityProfiles-Npuli\",\"addQualityProfile\":\"QualityProfiles-addQualityProfile-L9M_D QualityProfile-qualityProfile-jkXPx Card-card-aoesq\",\"center\":\"QualityProfiles-center-_sP2Z\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchMovieCollections } from 'Store/Actions/movieCollectionActions';\r\nimport { cloneQualityProfile, deleteQualityProfile, fetchQualityProfiles } from 'Store/Actions/settingsActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport QualityProfiles from './QualityProfiles';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.qualityProfiles', sortByProp('name')),\r\n (qualityProfiles) => qualityProfiles\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchQualityProfiles: fetchQualityProfiles,\r\n dispatchDeleteQualityProfile: deleteQualityProfile,\r\n dispatchCloneQualityProfile: cloneQualityProfile,\r\n dispatchFetchMovieCollections: fetchMovieCollections\r\n};\r\n\r\nclass QualityProfilesConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.dispatchFetchQualityProfiles();\r\n this.props.dispatchFetchMovieCollections();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteQualityProfile = (id) => {\r\n this.props.dispatchDeleteQualityProfile({ id });\r\n };\r\n\r\n onCloneQualityProfilePress = (id) => {\r\n this.props.dispatchCloneQualityProfile({ id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nQualityProfilesConnector.propTypes = {\r\n dispatchFetchQualityProfiles: PropTypes.func.isRequired,\r\n dispatchDeleteQualityProfile: PropTypes.func.isRequired,\r\n dispatchCloneQualityProfile: PropTypes.func.isRequired,\r\n dispatchFetchMovieCollections: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(QualityProfilesConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditReleaseProfileModalContent-deleteButton-tiNge Button-button-paJ9a Link-link-RInnp\",\"tagInternalInput\":\"EditReleaseProfileModalContent-tagInternalInput-oAV2V TagInput-internalInput-bbdd_\"};","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport {\r\n saveReleaseProfile,\r\n setReleaseProfileValue,\r\n} from 'Store/Actions/Settings/releaseProfiles';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\nimport ReleaseProfile from 'typings/Settings/ReleaseProfile';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditReleaseProfileModalContent.css';\r\n\r\nconst tagInputDelimiters = ['Tab', 'Enter'];\r\n\r\nconst newReleaseProfile: ReleaseProfile = {\r\n id: 0,\r\n name: '',\r\n enabled: true,\r\n required: [],\r\n ignored: [],\r\n tags: [],\r\n indexerId: 0,\r\n};\r\n\r\nfunction createReleaseProfileSelector(id?: number) {\r\n return createSelector(\r\n (state: AppState) => state.settings.releaseProfiles,\r\n (releaseProfiles) => {\r\n const { items, isFetching, error, isSaving, saveError, pendingChanges } =\r\n releaseProfiles;\r\n\r\n const mapping = id ? items.find((i) => i.id === id)! : newReleaseProfile;\r\n const settings = selectSettings(\r\n mapping,\r\n pendingChanges,\r\n saveError\r\n );\r\n\r\n return {\r\n id,\r\n isFetching,\r\n error,\r\n isSaving,\r\n saveError,\r\n item: settings.settings,\r\n ...settings,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface EditReleaseProfileModalContentProps {\r\n id?: number;\r\n onModalClose: () => void;\r\n onDeleteReleaseProfilePress?: () => void;\r\n}\r\n\r\nfunction EditReleaseProfileModalContent({\r\n id,\r\n onModalClose,\r\n onDeleteReleaseProfilePress,\r\n}: EditReleaseProfileModalContentProps) {\r\n const { item, isFetching, isSaving, error, saveError, ...otherProps } =\r\n useSelector(createReleaseProfileSelector(id));\r\n\r\n const { name, enabled, required, ignored, tags, indexerId } = item;\r\n\r\n const dispatch = useDispatch();\r\n const previousIsSaving = usePrevious(isSaving);\r\n\r\n useEffect(() => {\r\n if (!id) {\r\n Object.entries(newReleaseProfile).forEach(([name, value]) => {\r\n // @ts-expect-error 'setReleaseProfileValue' isn't typed yet\r\n dispatch(setReleaseProfileValue({ name, value }));\r\n });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (previousIsSaving && !isSaving && !saveError) {\r\n onModalClose();\r\n }\r\n }, [previousIsSaving, isSaving, saveError, onModalClose]);\r\n\r\n const handleSavePress = useCallback(() => {\r\n dispatch(saveReleaseProfile({ id }));\r\n }, [dispatch, id]);\r\n\r\n const handleInputChange = useCallback(\r\n (payload: { name: string; value: string | number }) => {\r\n // @ts-expect-error 'setReleaseProfileValue' isn't typed yet\r\n dispatch(setReleaseProfileValue(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditReleaseProfile') : translate('AddReleaseProfile')}\r\n \r\n\r\n \r\n
\r\n \r\n {translate('Name')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('EnableProfile')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('MustContain')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('MustNotContain')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Indexer')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n {id ? (\r\n \r\n {translate('Delete')}\r\n \r\n ) : null}\r\n\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default EditReleaseProfileModalContent;\r\n","import React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditReleaseProfileModalContent from './EditReleaseProfileModalContent';\r\n\r\ninterface EditReleaseProfileModalProps {\r\n id?: number;\r\n isOpen: boolean;\r\n onModalClose: () => void;\r\n onDeleteReleaseProfilePress?: () => void;\r\n}\r\n\r\nfunction EditReleaseProfileModal({\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n}: EditReleaseProfileModalProps) {\r\n const dispatch = useDispatch();\r\n\r\n const handleModalClose = useCallback(() => {\r\n dispatch(\r\n clearPendingChanges({\r\n section: 'settings.releaseProfiles',\r\n })\r\n );\r\n onModalClose();\r\n }, [dispatch, onModalClose]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default EditReleaseProfileModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"releaseProfile\":\"ReleaseProfileRow-releaseProfile-gjODI Card-card-aoesq\",\"enabled\":\"ReleaseProfileRow-enabled-JqBTR\",\"name\":\"ReleaseProfileRow-name-r_NEc\",\"label\":\"ReleaseProfileRow-label-Pwas8 Label-label-DYldh\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { Tag } from 'App/State/TagsAppState';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TagList from 'Components/TagList';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { deleteReleaseProfile } from 'Store/Actions/Settings/releaseProfiles';\r\nimport Indexer from 'typings/Indexer';\r\nimport ReleaseProfile from 'typings/Settings/ReleaseProfile';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditReleaseProfileModal from './EditReleaseProfileModal';\r\nimport styles from './ReleaseProfileRow.css';\r\n\r\ninterface ReleaseProfileProps extends ReleaseProfile {\r\n tagList: Tag[];\r\n indexerList: Indexer[];\r\n}\r\n\r\nfunction ReleaseProfileRow(props: ReleaseProfileProps) {\r\n const {\r\n id,\r\n name,\r\n enabled = true,\r\n required = [],\r\n ignored = [],\r\n tags,\r\n indexerId = 0,\r\n tagList,\r\n indexerList,\r\n } = props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [\r\n isEditReleaseProfileModalOpen,\r\n setEditReleaseProfileModalOpen,\r\n setEditReleaseProfileModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const [\r\n isDeleteReleaseProfileModalOpen,\r\n setDeleteReleaseProfileModalOpen,\r\n setDeleteReleaseProfileModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const handleDeletePress = useCallback(() => {\r\n dispatch(deleteReleaseProfile({ id }));\r\n }, [id, dispatch]);\r\n\r\n const indexer =\r\n indexerId !== 0 && indexerList.find((i) => i.id === indexerId);\r\n\r\n return (\r\n \r\n {name ?
{name}
: null}\r\n\r\n
\r\n {required.map((item) => {\r\n if (!item) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n\r\n
\r\n {ignored.map((item) => {\r\n if (!item) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n\r\n \r\n\r\n
\r\n {enabled ? null : (\r\n \r\n )}\r\n\r\n {indexer ? (\r\n \r\n ) : null}\r\n
\r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ReleaseProfileRow;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport { ReleaseProfilesAppState } from 'App/State/SettingsAppState';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport { icons } from 'Helpers/Props';\r\nimport ReleaseProfileRow from 'Settings/Profiles/Release/ReleaseProfileRow';\r\nimport { fetchIndexers } from 'Store/Actions/Settings/indexers';\r\nimport { fetchReleaseProfiles } from 'Store/Actions/Settings/releaseProfiles';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditReleaseProfileModal from './EditReleaseProfileModal';\r\nimport styles from './ReleaseProfiles.css';\r\n\r\nfunction ReleaseProfiles() {\r\n const { items, isFetching, isPopulated, error }: ReleaseProfilesAppState =\r\n useSelector(createClientSideCollectionSelector('settings.releaseProfiles'));\r\n\r\n const tagList = useSelector(createTagsSelector());\r\n const indexerList = useSelector(\r\n (state: AppState) => state.settings.indexers.items\r\n );\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [\r\n isAddReleaseProfileModalOpen,\r\n setAddReleaseProfileModalOpen,\r\n setAddReleaseProfileModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n useEffect(() => {\r\n dispatch(fetchReleaseProfiles());\r\n dispatch(fetchIndexers());\r\n }, [dispatch]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n\r\n {items.map((item) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ReleaseProfiles;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"releaseProfiles\":\"ReleaseProfiles-releaseProfiles-kkFx2\",\"addReleaseProfile\":\"ReleaseProfiles-addReleaseProfile-Cxevu ReleaseProfileRow-releaseProfile-gjODI Card-card-aoesq\",\"center\":\"ReleaseProfiles-center-ubhNh\"};","import React, { Component } from 'react';\r\nimport { DndProvider } from 'react-dnd-multi-backend';\r\nimport HTML5toTouch from 'react-dnd-multi-backend/dist/esm/HTML5toTouch';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport DelayProfilesConnector from './Delay/DelayProfilesConnector';\r\nimport QualityProfilesConnector from './Quality/QualityProfilesConnector';\r\nimport ReleaseProfiles from './Release/ReleaseProfiles';\r\n\r\n// Only a single DragDrop Context can exist so it's done here to allow editing\r\n// quality profiles and reordering delay profiles to work.\r\n\r\nclass Profiles extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Profiles;\r\n","export default function roundNumber(input, decimalPlaces = 1) {\r\n const multiplier = Math.pow(10, decimalPlaces);\r\n\r\n return Math.round(input * multiplier) / multiplier;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction QualityDefinitionLimits(props) {\r\n const {\r\n bytes,\r\n message\r\n } = props;\r\n\r\n if (!bytes) {\r\n return
{message}
;\r\n }\r\n\r\n const sixty = formatBytes(bytes * 60);\r\n const ninety = formatBytes(bytes * 90);\r\n const hundredTwenty = formatBytes(bytes * 120);\r\n\r\n return (\r\n
\r\n
\r\n {translate('MinutesSixty', { sixty })}\r\n
\r\n
\r\n {translate('MinutesNinety', { ninety })}\r\n
\r\n
\r\n {translate('MinutesHundredTwenty', { hundredTwenty })}\r\n
\r\n
\r\n );\r\n}\r\n\r\nQualityDefinitionLimits.propTypes = {\r\n bytes: PropTypes.number,\r\n message: PropTypes.string.isRequired\r\n};\r\n\r\nexport default QualityDefinitionLimits;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"qualityDefinition\":\"QualityDefinition-qualityDefinition-EV5u_\",\"quality\":\"QualityDefinition-quality-crm2x\",\"title\":\"QualityDefinition-title-ZZZOU\",\"sizeLimit\":\"QualityDefinition-sizeLimit-Wkn6n\",\"slider\":\"QualityDefinition-slider-i9tTc\",\"bar\":\"QualityDefinition-bar-yVvMg\",\"handle\":\"QualityDefinition-handle-y0kYO\",\"sizes\":\"QualityDefinition-sizes-McnDO\",\"megabytesPerMinute\":\"QualityDefinition-megabytesPerMinute-thTbm\",\"sizeInput\":\"QualityDefinition-sizeInput-_Ky1y TextInput-input-svfXu Input-input-KWeec\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport ReactSlider from 'react-slider';\r\nimport NumberInput from 'Components/Form/NumberInput';\r\nimport TextInput from 'Components/Form/TextInput';\r\nimport Label from 'Components/Label';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { kinds, tooltipPositions } from 'Helpers/Props';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport roundNumber from 'Utilities/Number/roundNumber';\r\nimport translate from 'Utilities/String/translate';\r\nimport QualityDefinitionLimits from './QualityDefinitionLimits';\r\nimport styles from './QualityDefinition.css';\r\n\r\nconst MIN = 0;\r\nconst MAX = 2000;\r\nconst MIN_DISTANCE = 1;\r\n\r\nconst slider = {\r\n min: MIN,\r\n max: roundNumber(Math.pow(MAX, 1 / 1.1)),\r\n step: 0.1\r\n};\r\n\r\nfunction getValue(inputValue) {\r\n if (inputValue < MIN) {\r\n return MIN;\r\n }\r\n\r\n if (inputValue > MAX) {\r\n return MAX;\r\n }\r\n\r\n return roundNumber(inputValue);\r\n}\r\n\r\nfunction getSliderValue(value, defaultValue) {\r\n const sliderValue = value ? Math.pow(value, 1 / 1.1) : defaultValue;\r\n\r\n return roundNumber(sliderValue);\r\n}\r\n\r\nclass QualityDefinition extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n sliderMinSize: getSliderValue(props.minSize, slider.min),\r\n sliderMaxSize: getSliderValue(props.maxSize, slider.max),\r\n sliderPreferredSize: getSliderValue(props.preferredSize, (slider.max - 3))\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onSliderChange = ([sliderMinSize, sliderPreferredSize, sliderMaxSize]) => {\r\n this.setState({\r\n sliderMinSize,\r\n sliderMaxSize,\r\n sliderPreferredSize\r\n });\r\n\r\n this.props.onSizeChange({\r\n minSize: roundNumber(Math.pow(sliderMinSize, 1.1)),\r\n preferredSize: sliderPreferredSize === (slider.max - 3) ? null : roundNumber(Math.pow(sliderPreferredSize, 1.1)),\r\n maxSize: sliderMaxSize === slider.max ? null : roundNumber(Math.pow(sliderMaxSize, 1.1))\r\n });\r\n };\r\n\r\n onAfterSliderChange = () => {\r\n const {\r\n minSize,\r\n maxSize,\r\n preferredSize\r\n } = this.props;\r\n\r\n this.setState({\r\n sliderMiSize: getSliderValue(minSize, slider.min),\r\n sliderMaxSize: getSliderValue(maxSize, slider.max),\r\n sliderPreferredSize: getSliderValue(preferredSize, (slider.max - 3)) // fix\r\n });\r\n };\r\n\r\n onMinSizeChange = ({ value }) => {\r\n const minSize = getValue(value);\r\n\r\n this.setState({\r\n sliderMinSize: getSliderValue(minSize, slider.min)\r\n });\r\n\r\n this.props.onSizeChange({\r\n minSize,\r\n maxSize: this.props.maxSize,\r\n preferredSize: this.props.preferredSize\r\n });\r\n };\r\n\r\n onPreferredSizeChange = ({ value }) => {\r\n const preferredSize = value === (MAX - 3) ? null : getValue(value);\r\n\r\n this.setState({\r\n sliderPreferredSize: getSliderValue(preferredSize, slider.preferred)\r\n });\r\n\r\n this.props.onSizeChange({\r\n minSize: this.props.minSize,\r\n maxSize: this.props.maxSize,\r\n preferredSize\r\n });\r\n };\r\n\r\n onMaxSizeChange = ({ value }) => {\r\n const maxSize = value === MAX ? null : getValue(value);\r\n\r\n this.setState({\r\n sliderMaxSize: getSliderValue(maxSize, slider.max)\r\n });\r\n\r\n this.props.onSizeChange({\r\n minSize: this.props.minSize,\r\n maxSize,\r\n preferredSize: this.props.preferredSize\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n quality,\r\n title,\r\n minSize,\r\n maxSize,\r\n preferredSize,\r\n advancedSettings,\r\n onTitleChange\r\n } = this.props;\r\n\r\n const {\r\n sliderMinSize,\r\n sliderMaxSize,\r\n sliderPreferredSize\r\n } = this.state;\r\n\r\n const minBytes = minSize * 1024 * 1024;\r\n const minSixty = `${formatBytes(minBytes * 60)}/${translate('HourShorthand')}`;\r\n\r\n const preferredBytes = preferredSize * 1024 * 1024;\r\n const preferredSixty = preferredBytes ? `${formatBytes(preferredBytes * 60)}/${translate('HourShorthand')}` : translate('Unlimited');\r\n\r\n const maxBytes = maxSize && maxSize * 1024 * 1024;\r\n const maxSixty = maxBytes ? `${formatBytes(maxBytes * 60)}/${translate('HourShorthand')}` : translate('Unlimited');\r\n\r\n return (\r\n
\r\n
\r\n {quality.name}\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n
\r\n {minSixty}\r\n }\r\n title={translate('MinimumLimits')}\r\n body={\r\n \r\n }\r\n position={tooltipPositions.BOTTOM}\r\n />\r\n
\r\n\r\n
\r\n {preferredSixty}\r\n }\r\n title={translate('PreferredSize')}\r\n body={\r\n \r\n }\r\n position={tooltipPositions.BOTTOM}\r\n />\r\n
\r\n\r\n
\r\n {maxSixty}\r\n }\r\n title={translate('MaximumLimits')}\r\n body={\r\n \r\n }\r\n position={tooltipPositions.BOTTOM}\r\n />\r\n
\r\n
\r\n
\r\n\r\n {\r\n advancedSettings &&\r\n
\r\n
\r\n {translate('Min')}\r\n\r\n \r\n
\r\n\r\n
\r\n {translate('Preferred')}\r\n\r\n \r\n
\r\n\r\n
\r\n {translate('Max')}\r\n\r\n \r\n
\r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nQualityDefinition.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n quality: PropTypes.object.isRequired,\r\n title: PropTypes.string.isRequired,\r\n minSize: PropTypes.number,\r\n maxSize: PropTypes.number,\r\n preferredSize: PropTypes.number,\r\n advancedSettings: PropTypes.bool.isRequired,\r\n onTitleChange: PropTypes.func.isRequired,\r\n onSizeChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default QualityDefinition;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { setQualityDefinitionValue } from 'Store/Actions/settingsActions';\r\nimport QualityDefinition from './QualityDefinition';\r\n\r\nconst mapDispatchToProps = {\r\n setQualityDefinitionValue,\r\n clearPendingChanges\r\n};\r\n\r\nclass QualityDefinitionConnector extends Component {\r\n\r\n componentWillUnmount() {\r\n this.props.clearPendingChanges({ section: 'settings.qualityDefinitions' });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onTitleChange = ({ value }) => {\r\n this.props.setQualityDefinitionValue({ id: this.props.id, name: 'title', value });\r\n };\r\n\r\n onSizeChange = ({ minSize, maxSize, preferredSize }) => {\r\n const {\r\n id,\r\n minSize: currentMinSize,\r\n maxSize: currentMaxSize,\r\n preferredSize: currentPreferredSize\r\n } = this.props;\r\n\r\n if (minSize !== currentMinSize) {\r\n this.props.setQualityDefinitionValue({ id, name: 'minSize', value: minSize });\r\n }\r\n\r\n if (maxSize !== currentMaxSize) {\r\n this.props.setQualityDefinitionValue({ id, name: 'maxSize', value: maxSize });\r\n }\r\n\r\n if (preferredSize !== currentPreferredSize) {\r\n this.props.setQualityDefinitionValue({ id, name: 'preferredSize', value: preferredSize });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nQualityDefinitionConnector.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n minSize: PropTypes.number,\r\n maxSize: PropTypes.number,\r\n preferredSize: PropTypes.number,\r\n setQualityDefinitionValue: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(null, mapDispatchToProps)(QualityDefinitionConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport translate from 'Utilities/String/translate';\r\nimport QualityDefinitionConnector from './QualityDefinitionConnector';\r\nimport styles from './QualityDefinitions.css';\r\n\r\nclass QualityDefinitions extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n items,\r\n advancedSettings,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {translate('Quality')}\r\n
\r\n
\r\n {translate('Title')}\r\n
\r\n
\r\n {translate('SizeLimit')}\r\n
\r\n\r\n {\r\n advancedSettings ?\r\n
\r\n {translate('MegabytesPerMinute')}\r\n
:\r\n null\r\n }\r\n
\r\n\r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n\r\n
\r\n
\r\n {translate('QualityLimitsMovieRuntimeHelpText')}\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nQualityDefinitions.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n defaultProfile: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n advancedSettings: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default QualityDefinitions;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"QualityDefinitions-header-zPMYR\",\"quality\":\"QualityDefinitions-quality-YI2P0\",\"title\":\"QualityDefinitions-title-Xzibg\",\"sizeLimit\":\"QualityDefinitions-sizeLimit-MyefH\",\"megabytesPerMinute\":\"QualityDefinitions-megabytesPerMinute-a9_A5\",\"sizeLimitHelpTextContainer\":\"QualityDefinitions-sizeLimitHelpTextContainer-GMjYa\",\"sizeLimitHelpText\":\"QualityDefinitions-sizeLimitHelpText-yMOuO\",\"definitions\":\"QualityDefinitions-definitions-acRUM\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchQualityDefinitions, saveQualityDefinitions } from 'Store/Actions/settingsActions';\r\nimport QualityDefinitions from './QualityDefinitions';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.qualityDefinitions,\r\n (state) => state.settings.advancedSettings,\r\n (qualityDefinitions, advancedSettings) => {\r\n const items = qualityDefinitions.items.map((item) => {\r\n const pendingChanges = qualityDefinitions.pendingChanges[item.id] || {};\r\n\r\n return Object.assign({}, item, pendingChanges);\r\n });\r\n\r\n return {\r\n ...qualityDefinitions,\r\n items,\r\n hasPendingChanges: !_.isEmpty(qualityDefinitions.pendingChanges),\r\n advancedSettings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchQualityDefinitions: fetchQualityDefinitions,\r\n dispatchSaveQualityDefinitions: saveQualityDefinitions\r\n};\r\n\r\nclass QualityDefinitionsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n dispatchFetchQualityDefinitions,\r\n dispatchSaveQualityDefinitions,\r\n onChildMounted\r\n } = this.props;\r\n\r\n dispatchFetchQualityDefinitions();\r\n onChildMounted(dispatchSaveQualityDefinitions);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n hasPendingChanges,\r\n isSaving,\r\n onChildStateChange\r\n } = this.props;\r\n\r\n if (\r\n prevProps.isSaving !== isSaving ||\r\n prevProps.hasPendingChanges !== hasPendingChanges\r\n ) {\r\n onChildStateChange({\r\n isSaving,\r\n hasPendingChanges\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nQualityDefinitionsConnector.propTypes = {\r\n isSaving: PropTypes.bool.isRequired,\r\n hasPendingChanges: PropTypes.bool.isRequired,\r\n dispatchFetchQualityDefinitions: PropTypes.func.isRequired,\r\n dispatchSaveQualityDefinitions: PropTypes.func.isRequired,\r\n onChildMounted: PropTypes.func.isRequired,\r\n onChildStateChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps, null)(QualityDefinitionsConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ResetQualityDefinitionsModalContent.css';\r\n\r\nclass ResetQualityDefinitionsModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n resetDefinitionTitles: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onResetDefinitionTitlesChange = ({ value }) => {\r\n this.setState({ resetDefinitionTitles: value });\r\n };\r\n\r\n onResetQualityDefinitionsConfirmed = () => {\r\n const resetDefinitionTitles = this.state.resetDefinitionTitles;\r\n\r\n this.setState({ resetDefinitionTitles: false });\r\n this.props.onResetQualityDefinitions(resetDefinitionTitles);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n onModalClose,\r\n isResettingQualityDefinitions\r\n } = this.props;\r\n\r\n const resetDefinitionTitles = this.state.resetDefinitionTitles;\r\n\r\n return (\r\n \r\n \r\n {translate('ResetQualityDefinitions')}\r\n \r\n\r\n \r\n
\r\n {translate('ResetQualityDefinitionsMessageText')}\r\n
\r\n\r\n \r\n \r\n {translate('ResetTitles')}\r\n \r\n\r\n \r\n \r\n\r\n
\r\n\r\n \r\n \r\n\r\n \r\n {translate('Reset')}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nResetQualityDefinitionsModalContent.propTypes = {\r\n onResetQualityDefinitions: PropTypes.func.isRequired,\r\n isResettingQualityDefinitions: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ResetQualityDefinitionsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"messageContainer\":\"ResetQualityDefinitionsModalContent-messageContainer-4w7E0\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport ResetQualityDefinitionsModalContent from './ResetQualityDefinitionsModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createCommandExecutingSelector(commandNames.RESET_QUALITY_DEFINITIONS),\r\n (isResettingQualityDefinitions) => {\r\n return {\r\n isResettingQualityDefinitions\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n executeCommand\r\n};\r\n\r\nclass ResetQualityDefinitionsModalContentConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onResetQualityDefinitions = (resetTitles) => {\r\n this.props.executeCommand({ name: commandNames.RESET_QUALITY_DEFINITIONS, resetTitles });\r\n this.props.onModalClose(true);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nResetQualityDefinitionsModalContentConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n isResettingQualityDefinitions: PropTypes.bool.isRequired,\r\n executeCommand: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ResetQualityDefinitionsModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport ResetQualityDefinitionsModalContentConnector from './ResetQualityDefinitionsModalContentConnector';\r\n\r\nfunction ResetQualityDefinitionsModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nResetQualityDefinitionsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default ResetQualityDefinitionsModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component, Fragment } from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport { icons } from 'Helpers/Props';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport QualityDefinitionsConnector from './Definition/QualityDefinitionsConnector';\r\nimport ResetQualityDefinitionsModal from './Reset/ResetQualityDefinitionsModal';\r\n\r\nclass Quality extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this._saveCallback = null;\r\n\r\n this.state = {\r\n isSaving: false,\r\n hasPendingChanges: false,\r\n isConfirmQualityDefinitionResetModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onChildMounted = (saveCallback) => {\r\n this._saveCallback = saveCallback;\r\n };\r\n\r\n onChildStateChange = (payload) => {\r\n this.setState(payload);\r\n };\r\n\r\n onResetQualityDefinitionsPress = () => {\r\n this.setState({ isConfirmQualityDefinitionResetModalOpen: true });\r\n };\r\n\r\n onCloseResetQualityDefinitionsModal = () => {\r\n this.setState({ isConfirmQualityDefinitionResetModalOpen: false });\r\n };\r\n\r\n onSavePress = () => {\r\n if (this._saveCallback) {\r\n this._saveCallback();\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isSaving,\r\n isResettingQualityDefinitions,\r\n hasPendingChanges\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n \r\n }\r\n onSavePress={this.onSavePress}\r\n />\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nQuality.propTypes = {\r\n isResettingQualityDefinitions: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default Quality;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport Quality from './Quality';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createCommandExecutingSelector(commandNames.RESET_QUALITY_DEFINITIONS),\r\n (isResettingQualityDefinitions) => {\r\n return {\r\n isResettingQualityDefinitions\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass QualityConnector extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nQualityConnector.propTypes = {\r\n isResettingQualityDefinitions: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps)(QualityConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"Settings-link-errh1 Link-link-RInnp\",\"summary\":\"Settings-summary-eUl9k\"};","import React from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport translate from 'Utilities/String/translate';\r\nimport SettingsToolbarConnector from './SettingsToolbarConnector';\r\nimport styles from './Settings.css';\r\n\r\nfunction Settings() {\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n {translate('MediaManagement')}\r\n \r\n\r\n
\r\n {translate('MediaManagementSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('Profiles')}\r\n \r\n\r\n
\r\n {translate('ProfilesSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('Quality')}\r\n \r\n\r\n
\r\n {translate('QualitySettingsSummary')}\r\n
\r\n\r\n \r\n {translate('CustomFormats')}\r\n \r\n\r\n
\r\n {translate('CustomFormatsSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('Indexers')}\r\n \r\n\r\n
\r\n {translate('IndexersSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('DownloadClients')}\r\n \r\n\r\n
\r\n {translate('DownloadClientsSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('ImportLists')}\r\n \r\n\r\n
\r\n {translate('ImportListsSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('Connect')}\r\n \r\n\r\n
\r\n {translate('ConnectSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('Metadata')}\r\n \r\n\r\n
\r\n {translate('MetadataSettingsMovieSummary')}\r\n
\r\n\r\n \r\n {translate('Tags')}\r\n \r\n\r\n
\r\n {translate('TagsSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('General')}\r\n \r\n\r\n
\r\n {translate('GeneralSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('Ui')}\r\n \r\n\r\n
\r\n {translate('UiSettingsSummary')}\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nSettings.propTypes = {\r\n};\r\n\r\nexport default Settings;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback } from 'react';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\n\r\nexport default function AddSpecificationPresetMenuItem(props) {\r\n const {\r\n name,\r\n implementation,\r\n onPress,\r\n ...otherProps\r\n } = props;\r\n\r\n const onWrappedPress = useCallback(() => {\r\n onPress({\r\n name,\r\n implementation\r\n });\r\n }, [name, implementation, onPress]);\r\n\r\n return (\r\n \r\n {name}\r\n \r\n );\r\n}\r\n\r\nAddSpecificationPresetMenuItem.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n implementation: PropTypes.string.isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback } from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Link from 'Components/Link/Link';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport { sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddSpecificationPresetMenuItem from './AddSpecificationPresetMenuItem';\r\nimport styles from './AddSpecificationItem.css';\r\n\r\nexport default function AddSpecificationItem(props) {\r\n const {\r\n implementation,\r\n implementationName,\r\n infoLink,\r\n presets,\r\n onSpecificationSelect\r\n } = props;\r\n\r\n const onWrappedSpecificationSelect = useCallback(() => {\r\n onSpecificationSelect({ implementation });\r\n }, [implementation, onSpecificationSelect]);\r\n\r\n const hasPresets = !!presets && !!presets.length;\r\n\r\n return (\r\n \r\n \r\n\r\n
\r\n
\r\n {implementationName}\r\n
\r\n\r\n
\r\n {\r\n hasPresets ?\r\n \r\n \r\n {translate('Custom')}\r\n \r\n\r\n \r\n \r\n {translate('Presets')}\r\n \r\n\r\n \r\n {\r\n presets.map((preset, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n :\r\n null\r\n }\r\n\r\n {\r\n infoLink ?\r\n \r\n {translate('MoreInfo')}\r\n :\r\n null\r\n }\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nAddSpecificationItem.propTypes = {\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n infoLink: PropTypes.string,\r\n presets: PropTypes.arrayOf(PropTypes.object),\r\n onSpecificationSelect: PropTypes.func.isRequired\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"specification\":\"AddSpecificationItem-specification-NieD2 Card-card-aoesq\",\"underlay\":\"AddSpecificationItem-underlay-RIODZ\",\"overlay\":\"AddSpecificationItem-overlay-ag9EZ\",\"name\":\"AddSpecificationItem-name-hPY01\",\"actions\":\"AddSpecificationItem-actions-UG_vZ\",\"presetsMenu\":\"AddSpecificationItem-presetsMenu-Xl4AW Menu-menu-Uz3_0\",\"presetsMenuButton\":\"AddSpecificationItem-presetsMenuButton-ZVH9g Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Alert from 'Components/Alert';\r\nimport Button from 'Components/Link/Button';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport {\r\n fetchAutoTaggingSpecificationSchema,\r\n selectAutoTaggingSpecificationSchema\r\n} from 'Store/Actions/settingsActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddSpecificationItem from './AddSpecificationItem';\r\nimport styles from './AddSpecificationModalContent.css';\r\n\r\nexport default function AddSpecificationModalContent(props) {\r\n const {\r\n onModalClose\r\n } = props;\r\n\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n } = useSelector(\r\n (state) => state.settings.autoTaggingSpecifications\r\n );\r\n\r\n const dispatch = useDispatch();\r\n\r\n const onSpecificationSelect = useCallback(({ implementation, name }) => {\r\n dispatch(selectAutoTaggingSpecificationSchema({ implementation, presetName: name }));\r\n onModalClose({ specificationSelected: true });\r\n }, [dispatch, onModalClose]);\r\n\r\n useEffect(() => {\r\n dispatch(fetchAutoTaggingSpecificationSchema());\r\n }, [dispatch]);\r\n\r\n return (\r\n \r\n \r\n {translate('AddCondition')}\r\n \r\n\r\n \r\n {\r\n isSchemaFetching ? : null\r\n }\r\n\r\n {\r\n !isSchemaFetching && !!schemaError ?\r\n \r\n {translate('AddConditionError')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n isSchemaPopulated && !schemaError ?\r\n
\r\n\r\n \r\n
\r\n {translate('SupportedAutoTaggingProperties')}\r\n
\r\n
\r\n\r\n
\r\n {\r\n schema.map((specification) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n\r\n
:\r\n null\r\n }\r\n
\r\n\r\n \r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nAddSpecificationModalContent.propTypes = {\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"specifications\":\"AddSpecificationModalContent-specifications-c_llu\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddSpecificationModalContent from './AddSpecificationModalContent';\r\n\r\nfunction AddSpecificationModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddSpecificationModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddSpecificationModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Alert from 'Components/Alert';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport ProviderFieldFormGroup from 'Components/Form/ProviderFieldFormGroup';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { inputTypes, kinds } from 'Helpers/Props';\r\nimport {\r\n clearAutoTaggingSpecificationPending,\r\n saveAutoTaggingSpecification,\r\n setAutoTaggingSpecificationFieldValue,\r\n setAutoTaggingSpecificationValue\r\n} from 'Store/Actions/settingsActions';\r\nimport { createProviderSettingsSelectorHook } from 'Store/Selectors/createProviderSettingsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditSpecificationModalContent.css';\r\n\r\nfunction EditSpecificationModalContent(props) {\r\n const {\r\n id,\r\n onDeleteSpecificationPress,\r\n onModalClose\r\n } = props;\r\n\r\n const advancedSettings = useSelector((state) => state.settings.advancedSettings);\r\n\r\n const {\r\n item,\r\n ...otherFormProps\r\n } = useSelector(\r\n createProviderSettingsSelectorHook('autoTaggingSpecifications', id)\r\n );\r\n\r\n const dispatch = useDispatch();\r\n\r\n const onInputChange = useCallback(({ name, value }) => {\r\n dispatch(setAutoTaggingSpecificationValue({ name, value }));\r\n }, [dispatch]);\r\n\r\n const onFieldChange = useCallback(({ name, value }) => {\r\n dispatch(setAutoTaggingSpecificationFieldValue({ name, value }));\r\n }, [dispatch]);\r\n\r\n const onCancelPress = useCallback(({ name, value }) => {\r\n dispatch(clearAutoTaggingSpecificationPending());\r\n onModalClose();\r\n }, [dispatch, onModalClose]);\r\n\r\n const onSavePress = useCallback(({ name, value }) => {\r\n dispatch(saveAutoTaggingSpecification({ id }));\r\n onModalClose();\r\n }, [dispatch, id, onModalClose]);\r\n\r\n const {\r\n implementationName,\r\n name,\r\n negate,\r\n required,\r\n fields\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditConditionImplementation', { implementationName }) : translate('AddConditionImplementation', { implementationName })}\r\n \r\n\r\n \r\n \r\n {\r\n fields && fields.some((x) => x.label === 'Regular Expression') &&\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n\r\n \r\n \r\n {translate('Name')}\r\n \r\n\r\n \r\n \r\n\r\n {\r\n fields && fields.map((field) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n \r\n {translate('Negate')}\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('Required')}\r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n {\r\n id ?\r\n \r\n {translate('Delete')}\r\n :\r\n null\r\n }\r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nEditSpecificationModalContent.propTypes = {\r\n id: PropTypes.number,\r\n onDeleteSpecificationPress: PropTypes.func,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditSpecificationModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditSpecificationModalContent-deleteButton-dR0rN Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditSpecificationModalContent from './EditSpecificationModalContent';\r\n\r\nfunction EditSpecificationModal({ isOpen, onModalClose, ...otherProps }) {\r\n const dispatch = useDispatch();\r\n\r\n const onWrappedModalClose = useCallback(() => {\r\n dispatch(clearPendingChanges({ section: 'settings.autoTaggingSpecifications' }));\r\n onModalClose();\r\n }, [onModalClose, dispatch]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditSpecificationModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditSpecificationModal;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useState } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditSpecificationModal from './EditSpecificationModal';\r\nimport styles from './Specification.css';\r\n\r\nexport default function Specification(props) {\r\n const {\r\n id,\r\n implementationName,\r\n name,\r\n required,\r\n negate,\r\n onConfirmDeleteSpecification,\r\n onCloneSpecificationPress\r\n } = props;\r\n\r\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\r\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\r\n\r\n const onEditPress = useCallback(() => {\r\n setIsEditModalOpen(true);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onEditModalClose = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onDeletePress = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n setIsDeleteModalOpen(true);\r\n }, [setIsEditModalOpen, setIsDeleteModalOpen]);\r\n\r\n const onDeleteModalClose = useCallback(() => {\r\n setIsDeleteModalOpen(false);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onConfirmDelete = useCallback(() => {\r\n onConfirmDeleteSpecification(id);\r\n }, [id, onConfirmDeleteSpecification]);\r\n\r\n const onClonePress = useCallback(() => {\r\n onCloneSpecificationPress(id);\r\n }, [id, onCloneSpecificationPress]);\r\n\r\n return (\r\n \r\n
\r\n
\r\n {name}\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n {\r\n negate ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n required ?\r\n :\r\n null\r\n }\r\n
\r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nSpecification.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n implementation: PropTypes.string.isRequired,\r\n implementationName: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n negate: PropTypes.bool.isRequired,\r\n required: PropTypes.bool.isRequired,\r\n fields: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteSpecification: PropTypes.func.isRequired,\r\n onCloneSpecificationPress: PropTypes.func.isRequired\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"autoTagging\":\"Specification-autoTagging-eWXw_ Card-card-aoesq\",\"nameContainer\":\"Specification-nameContainer-nI8Ky\",\"name\":\"Specification-name-DJkOw\",\"cloneButton\":\"Specification-cloneButton-NjYsY IconButton-button-t4C5V Link-link-RInnp\",\"labels\":\"Specification-labels-hsKc3\",\"tooltipLabel\":\"Specification-tooltipLabel-bhJXn Label-label-DYldh\"};","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Alert from 'Components/Alert';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Form from 'Components/Form/Form';\r\nimport FormGroup from 'Components/Form/FormGroup';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport FormLabel from 'Components/Form/FormLabel';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { icons, inputTypes, kinds } from 'Helpers/Props';\r\nimport {\r\n cloneAutoTaggingSpecification,\r\n deleteAutoTaggingSpecification,\r\n fetchAutoTaggingSpecifications,\r\n saveAutoTagging,\r\n setAutoTaggingValue\r\n} from 'Store/Actions/settingsActions';\r\nimport { createProviderSettingsSelectorHook } from 'Store/Selectors/createProviderSettingsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddSpecificationModal from './Specifications/AddSpecificationModal';\r\nimport EditSpecificationModal from './Specifications/EditSpecificationModal';\r\nimport Specification from './Specifications/Specification';\r\nimport styles from './EditAutoTaggingModalContent.css';\r\n\r\nexport default function EditAutoTaggingModalContent(props) {\r\n const {\r\n id,\r\n tagsFromId,\r\n onModalClose,\r\n onDeleteAutoTaggingPress\r\n } = props;\r\n\r\n const {\r\n error,\r\n item,\r\n isFetching,\r\n isSaving,\r\n saveError,\r\n validationErrors,\r\n validationWarnings\r\n } = useSelector(createProviderSettingsSelectorHook('autoTaggings', id));\r\n\r\n const {\r\n isPopulated: specificationsPopulated,\r\n items: specifications\r\n } = useSelector((state) => state.settings.autoTaggingSpecifications);\r\n\r\n const dispatch = useDispatch();\r\n const [isAddSpecificationModalOpen, setIsAddSpecificationModalOpen] = useState(false);\r\n const [isEditSpecificationModalOpen, setIsEditSpecificationModalOpen] = useState(false);\r\n // const [isImportAutoTaggingModalOpen, setIsImportAutoTaggingModalOpen] = useState(false);\r\n\r\n const onAddSpecificationPress = useCallback(() => {\r\n setIsAddSpecificationModalOpen(true);\r\n }, [setIsAddSpecificationModalOpen]);\r\n\r\n const onAddSpecificationModalClose = useCallback(({ specificationSelected = false } = {}) => {\r\n setIsAddSpecificationModalOpen(false);\r\n setIsEditSpecificationModalOpen(specificationSelected);\r\n }, [setIsAddSpecificationModalOpen]);\r\n\r\n const onEditSpecificationModalClose = useCallback(() => {\r\n setIsEditSpecificationModalOpen(false);\r\n }, [setIsEditSpecificationModalOpen]);\r\n\r\n const onInputChange = useCallback(({ name, value }) => {\r\n dispatch(setAutoTaggingValue({ name, value }));\r\n }, [dispatch]);\r\n\r\n const onSavePress = useCallback(() => {\r\n dispatch(saveAutoTagging({ id }));\r\n }, [dispatch, id]);\r\n\r\n const onCloneSpecificationPress = useCallback((specId) => {\r\n dispatch(cloneAutoTaggingSpecification({ id: specId }));\r\n }, [dispatch]);\r\n\r\n const onConfirmDeleteSpecification = useCallback((specId) => {\r\n dispatch(deleteAutoTaggingSpecification({ id: specId }));\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n dispatch(fetchAutoTaggingSpecifications({ id: tagsFromId || id }));\r\n }, [id, tagsFromId, dispatch]);\r\n\r\n const isSavingRef = useRef();\r\n\r\n useEffect(() => {\r\n if (isSavingRef.current && !isSaving && !saveError) {\r\n onModalClose();\r\n }\r\n\r\n isSavingRef.current = isSaving;\r\n }, [isSaving, saveError, onModalClose]);\r\n\r\n const {\r\n name,\r\n removeTagsAutomatically,\r\n tags\r\n } = item;\r\n\r\n return (\r\n \r\n\r\n \r\n {id ? translate('EditAutoTag') : translate('AddAutoTag')}\r\n \r\n\r\n \r\n
\r\n {\r\n isFetching ? : null\r\n }\r\n\r\n {\r\n !isFetching && !!error ?\r\n \r\n {translate('AddAutoTagError')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n !isFetching && !error && specificationsPopulated ?\r\n
\r\n \r\n \r\n \r\n {translate('Name')}\r\n \r\n\r\n \r\n \r\n\r\n \r\n {translate('RemoveTagsAutomatically')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Tags')}\r\n\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n {\r\n specifications.map((tag) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n\r\n {/* */}\r\n\r\n
:\r\n null\r\n }\r\n
\r\n
\r\n \r\n
\r\n {\r\n id ?\r\n \r\n {translate('Delete')}\r\n :\r\n null\r\n }\r\n\r\n {/* \r\n Import\r\n */}\r\n
\r\n\r\n \r\n {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Save')}\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nEditAutoTaggingModalContent.propTypes = {\r\n id: PropTypes.number,\r\n tagsFromId: PropTypes.number,\r\n onModalClose: PropTypes.func.isRequired,\r\n onDeleteAutoTaggingPress: PropTypes.func\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditAutoTaggingModalContent-deleteButton-IqN1V Button-button-paJ9a Link-link-RInnp\",\"rightButtons\":\"EditAutoTaggingModalContent-rightButtons-FQU6u\",\"addSpecification\":\"EditAutoTaggingModalContent-addSpecification-FAAat AutoTagging-autoTagging-vkEJc Card-card-aoesq\",\"center\":\"EditAutoTaggingModalContent-center-x4Ueu\",\"autoTaggings\":\"EditAutoTaggingModalContent-autoTaggings-biKav\"};","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport EditAutoTaggingModalContent from './EditAutoTaggingModalContent';\r\n\r\nexport default function EditAutoTaggingModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose: onOriginalModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n const dispatch = useDispatch();\r\n const [height, setHeight] = useState('auto');\r\n\r\n const onContentHeightChange = useCallback((h) => {\r\n if (height === 'auto' || h > height) {\r\n setHeight(h);\r\n }\r\n }, [height, setHeight]);\r\n\r\n const onModalClose = useCallback(() => {\r\n dispatch(clearPendingChanges({ section: 'settings.autoTaggings' }));\r\n onOriginalModalClose();\r\n }, [dispatch, onOriginalModalClose]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditAutoTaggingModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useState } from 'react';\r\nimport Card from 'Components/Card';\r\nimport Label from 'Components/Label';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TagList from 'Components/TagList';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport EditAutoTaggingModal from './EditAutoTaggingModal';\r\nimport styles from './AutoTagging.css';\r\n\r\nexport default function AutoTagging(props) {\r\n const {\r\n id,\r\n name,\r\n tags,\r\n tagList,\r\n specifications,\r\n isDeleting,\r\n onConfirmDeleteAutoTagging,\r\n onCloneAutoTaggingPress\r\n } = props;\r\n\r\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\r\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\r\n\r\n const onEditPress = useCallback(() => {\r\n setIsEditModalOpen(true);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onEditModalClose = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onDeletePress = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n setIsDeleteModalOpen(true);\r\n }, [setIsEditModalOpen, setIsDeleteModalOpen]);\r\n\r\n const onDeleteModalClose = useCallback(() => {\r\n setIsDeleteModalOpen(false);\r\n }, [setIsDeleteModalOpen]);\r\n\r\n const onConfirmDelete = useCallback(() => {\r\n onConfirmDeleteAutoTagging(id);\r\n }, [id, onConfirmDeleteAutoTagging]);\r\n\r\n const onClonePress = useCallback(() => {\r\n onCloneAutoTaggingPress(id);\r\n }, [id, onCloneAutoTaggingPress]);\r\n\r\n return (\r\n \r\n
\r\n
\r\n {name}\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n
\r\n {\r\n specifications.map((item, index) => {\r\n if (!item) {\r\n return null;\r\n }\r\n\r\n let kind = kinds.DEFAULT;\r\n if (item.required) {\r\n kind = kinds.SUCCESS;\r\n }\r\n if (item.negate) {\r\n kind = kinds.DANGER;\r\n }\r\n\r\n return (\r\n \r\n {item.name}\r\n \r\n );\r\n })\r\n }\r\n
\r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nAutoTagging.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n specifications: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isDeleting: PropTypes.bool.isRequired,\r\n onConfirmDeleteAutoTagging: PropTypes.func.isRequired,\r\n onCloneAutoTaggingPress: PropTypes.func.isRequired\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"autoTagging\":\"AutoTagging-autoTagging-vkEJc Card-card-aoesq\",\"nameContainer\":\"AutoTagging-nameContainer-b06qv\",\"name\":\"AutoTagging-name-siJT3\",\"cloneButton\":\"AutoTagging-cloneButton-zxltW IconButton-button-t4C5V Link-link-RInnp\",\"formats\":\"AutoTagging-formats-Q02RV\",\"tooltipLabel\":\"AutoTagging-tooltipLabel-lyXVZ Label-label-DYldh\"};","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Card from 'Components/Card';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon from 'Components/Icon';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { icons } from 'Helpers/Props';\r\nimport { fetchRootFolders } from 'Store/Actions/rootFolderActions';\r\nimport { cloneAutoTagging, deleteAutoTagging, fetchAutoTaggings } from 'Store/Actions/settingsActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport AutoTagging from './AutoTagging';\r\nimport EditAutoTaggingModal from './EditAutoTaggingModal';\r\nimport styles from './AutoTaggings.css';\r\n\r\nexport default function AutoTaggings() {\r\n const {\r\n error,\r\n items,\r\n isDeleting,\r\n isFetching,\r\n isPopulated\r\n } = useSelector(\r\n createSortedSectionSelector('settings.autoTaggings', sortByProp('name'))\r\n );\r\n\r\n const tagList = useSelector(createTagsSelector());\r\n const dispatch = useDispatch();\r\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\r\n const [tagsFromId, setTagsFromId] = useState(undefined);\r\n\r\n const onClonePress = useCallback((id) => {\r\n dispatch(cloneAutoTagging({ id }));\r\n\r\n setTagsFromId(id);\r\n setIsEditModalOpen(true);\r\n }, [dispatch, setIsEditModalOpen]);\r\n\r\n const onEditPress = useCallback(() => {\r\n setIsEditModalOpen(true);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onEditModalClose = useCallback(() => {\r\n setIsEditModalOpen(false);\r\n }, [setIsEditModalOpen]);\r\n\r\n const onConfirmDelete = useCallback((id) => {\r\n dispatch(deleteAutoTagging({ id }));\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n dispatch(fetchAutoTaggings());\r\n dispatch(fetchRootFolders());\r\n }, [dispatch]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"autoTaggings\":\"AutoTaggings-autoTaggings-l32Gg\",\"addAutoTagging\":\"AutoTaggings-addAutoTagging-CgYiY AutoTagging-autoTagging-vkEJc Card-card-aoesq\",\"center\":\"AutoTaggings-center-xDaiv\"};","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createTagDetailsSelector() {\r\n return createSelector(\r\n (_: AppState, { id }: { id: number }) => id,\r\n (state: AppState) => state.tags.details.items,\r\n (id, tagDetails) => {\r\n return tagDetails.find((t) => t.id === id);\r\n }\r\n );\r\n}\r\n\r\nexport default createTagDetailsSelector;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction TagDetailsDelayProfile(props) {\r\n const {\r\n preferredProtocol,\r\n enableUsenet,\r\n enableTorrent,\r\n usenetDelay,\r\n torrentDelay\r\n } = props;\r\n\r\n return (\r\n
\r\n
\r\n {titleCase(translate('DelayProfileProtocol', { preferredProtocol }))}\r\n
\r\n\r\n
\r\n {\r\n enableUsenet ?\r\n translate('UsenetDelayTime', { usenetDelay }) :\r\n translate('UsenetDisabled')\r\n }\r\n
\r\n\r\n
\r\n {\r\n enableTorrent ?\r\n translate('TorrentDelayTime', { torrentDelay }) :\r\n translate('TorrentsDisabled')\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nTagDetailsDelayProfile.propTypes = {\r\n preferredProtocol: PropTypes.string.isRequired,\r\n enableUsenet: PropTypes.bool.isRequired,\r\n enableTorrent: PropTypes.bool.isRequired,\r\n usenetDelay: PropTypes.number.isRequired,\r\n torrentDelay: PropTypes.number.isRequired\r\n};\r\n\r\nexport default TagDetailsDelayProfile;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';\r\nimport TagDetailsModalContent from './TagDetailsModalContent';\r\n\r\nfunction findMatchingItems(ids, items) {\r\n return items.filter((s) => {\r\n return ids.includes(s.id);\r\n });\r\n}\r\n\r\nfunction createUnorderedMatchingMoviesSelector() {\r\n return createSelector(\r\n (state, { movieIds }) => movieIds,\r\n createAllMoviesSelector(),\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMatchingMoviesSelector() {\r\n return createSelector(\r\n createUnorderedMatchingMoviesSelector(),\r\n (movies) => {\r\n return movies.sort((movieA, movieB) => {\r\n const sortTitleA = movieA.sortTitle;\r\n const sortTitleB = movieB.sortTitle;\r\n\r\n if (sortTitleA > sortTitleB) {\r\n return 1;\r\n } else if (sortTitleA < sortTitleB) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n }\r\n );\r\n}\r\n\r\nfunction createMatchingDelayProfilesSelector() {\r\n return createSelector(\r\n (state, { delayProfileIds }) => delayProfileIds,\r\n (state) => state.settings.delayProfiles.items,\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMatchingNotificationsSelector() {\r\n return createSelector(\r\n (state, { notificationIds }) => notificationIds,\r\n (state) => state.settings.notifications.items,\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMatchingReleaseProfilesSelector() {\r\n return createSelector(\r\n (state, { releaseProfileIds }) => releaseProfileIds,\r\n (state) => state.settings.releaseProfiles.items,\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMatchingImportListsSelector() {\r\n return createSelector(\r\n (state, { importListIds }) => importListIds,\r\n (state) => state.settings.importLists.items,\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMatchingIndexersSelector() {\r\n return createSelector(\r\n (state, { indexerIds }) => indexerIds,\r\n (state) => state.settings.indexers.items,\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMatchingDownloadClientsSelector() {\r\n return createSelector(\r\n (state, { downloadClientIds }) => downloadClientIds,\r\n (state) => state.settings.downloadClients.items,\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMatchingAutoTagsSelector() {\r\n return createSelector(\r\n (state, { autoTagIds }) => autoTagIds,\r\n (state) => state.settings.autoTaggings.items,\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createMatchingMoviesSelector(),\r\n createMatchingDelayProfilesSelector(),\r\n createMatchingNotificationsSelector(),\r\n createMatchingReleaseProfilesSelector(),\r\n createMatchingImportListsSelector(),\r\n createMatchingIndexersSelector(),\r\n createMatchingDownloadClientsSelector(),\r\n createMatchingAutoTagsSelector(),\r\n (movies, delayProfiles, notifications, releaseProfiles, importLists, indexers, downloadClients, autoTags) => {\r\n return {\r\n movies,\r\n delayProfiles,\r\n notifications,\r\n releaseProfiles,\r\n importLists,\r\n indexers,\r\n downloadClients,\r\n autoTags\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default connect(createMapStateToProps)(TagDetailsModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Label from 'Components/Label';\r\nimport Button from 'Components/Link/Button';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport TagDetailsDelayProfile from './TagDetailsDelayProfile';\r\nimport styles from './TagDetailsModalContent.css';\r\n\r\nfunction TagDetailsModalContent(props) {\r\n const {\r\n label,\r\n isTagUsed,\r\n movies,\r\n delayProfiles,\r\n importLists,\r\n notifications,\r\n releaseProfiles,\r\n indexers,\r\n downloadClients,\r\n autoTags,\r\n onModalClose,\r\n onDeleteTagPress\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {translate('TagDetails', { label })}\r\n \r\n\r\n \r\n {\r\n !isTagUsed &&\r\n
\r\n {translate('TagIsNotUsedAndCanBeDeleted')}\r\n
\r\n }\r\n\r\n {\r\n movies.length ?\r\n
\r\n {\r\n movies.map((item) => {\r\n return (\r\n
\r\n {item.title}\r\n
\r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n\r\n {\r\n delayProfiles.length ?\r\n
\r\n {\r\n delayProfiles.map((item) => {\r\n const {\r\n id,\r\n preferredProtocol,\r\n enableUsenet,\r\n enableTorrent,\r\n usenetDelay,\r\n torrentDelay\r\n } = item;\r\n\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n\r\n {\r\n notifications.length ?\r\n
\r\n {\r\n notifications.map((item) => {\r\n return (\r\n
\r\n {item.name}\r\n
\r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n\r\n {\r\n importLists.length ?\r\n
\r\n {\r\n importLists.map((item) => {\r\n return (\r\n
\r\n {item.name}\r\n
\r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n\r\n {\r\n releaseProfiles.length ?\r\n
\r\n {\r\n releaseProfiles.map((item) => {\r\n return (\r\n \r\n
\r\n {\r\n item.required.map((r) => {\r\n return (\r\n \r\n {r}\r\n \r\n );\r\n })\r\n }\r\n
\r\n\r\n
\r\n {\r\n item.ignored.map((i) => {\r\n return (\r\n \r\n {i}\r\n \r\n );\r\n })\r\n }\r\n
\r\n \r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n\r\n {\r\n indexers.length ?\r\n
\r\n {\r\n indexers.map((item) => {\r\n return (\r\n
\r\n {item.name}\r\n
\r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n\r\n {\r\n downloadClients.length ?\r\n
\r\n {\r\n downloadClients.map((item) => {\r\n return (\r\n
\r\n {item.name}\r\n
\r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n\r\n {\r\n autoTags.length ?\r\n
\r\n {\r\n autoTags.map((item) => {\r\n return (\r\n
\r\n {item.name}\r\n
\r\n );\r\n })\r\n }\r\n
:\r\n null\r\n }\r\n
\r\n\r\n \r\n {\r\n \r\n {translate('Delete')}\r\n \r\n }\r\n\r\n \r\n {translate('Close')}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nTagDetailsModalContent.propTypes = {\r\n label: PropTypes.string.isRequired,\r\n isTagUsed: PropTypes.bool.isRequired,\r\n movies: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n delayProfiles: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n importLists: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n notifications: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n releaseProfiles: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n indexers: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n downloadClients: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n autoTags: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onDeleteTagPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default TagDetailsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"items\":\"TagDetailsModalContent-items-B5hu6\",\"item\":\"TagDetailsModalContent-item-kiFnZ\",\"restriction\":\"TagDetailsModalContent-restriction-hY7YJ\",\"deleteButton\":\"TagDetailsModalContent-deleteButton-Zhy3Y Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport TagDetailsModalContentConnector from './TagDetailsModalContentConnector';\r\n\r\nfunction TagDetailsModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nTagDetailsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default TagDetailsModal;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nexport default function TagInUse(props) {\r\n const {\r\n label,\r\n labelPlural,\r\n count\r\n } = props;\r\n\r\n if (count === 0) {\r\n return null;\r\n }\r\n\r\n if (count > 1 && labelPlural) {\r\n return (\r\n
\r\n {count} {labelPlural.toLowerCase()}\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n {count} {label.toLowerCase()}\r\n
\r\n );\r\n}\r\n\r\nTagInUse.propTypes = {\r\n label: PropTypes.string.isRequired,\r\n labelPlural: PropTypes.string,\r\n count: PropTypes.number.isRequired\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Card from 'Components/Card';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport TagDetailsModal from './Details/TagDetailsModal';\r\nimport TagInUse from './TagInUse';\r\nimport styles from './Tag.css';\r\n\r\nclass Tag extends Component {\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isDetailsModalOpen: false,\r\n isDeleteTagModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onShowDetailsPress = () => {\r\n this.setState({ isDetailsModalOpen: true });\r\n };\r\n\r\n onDetailsModalClose = () => {\r\n this.setState({ isDetailsModalOpen: false });\r\n };\r\n\r\n onDeleteTagPress = () => {\r\n this.setState({\r\n isDetailsModalOpen: false,\r\n isDeleteTagModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteTagModalClose = () => {\r\n this.setState({ isDeleteTagModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteTag = () => {\r\n this.props.onConfirmDeleteTag({ id: this.props.id });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n label,\r\n delayProfileIds,\r\n importListIds,\r\n notificationIds,\r\n releaseProfileIds,\r\n indexerIds,\r\n downloadClientIds,\r\n autoTagIds,\r\n movieIds\r\n } = this.props;\r\n\r\n const { isDetailsModalOpen, isDeleteTagModalOpen } = this.state;\r\n\r\n const isTagUsed = !!(\r\n delayProfileIds.length ||\r\n importListIds.length ||\r\n notificationIds.length ||\r\n releaseProfileIds.length ||\r\n indexerIds.length ||\r\n downloadClientIds.length ||\r\n autoTagIds.length ||\r\n movieIds.length\r\n );\r\n\r\n return (\r\n \r\n
{label}
\r\n\r\n {\r\n isTagUsed ?\r\n
\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n
:\r\n null\r\n }\r\n\r\n {\r\n !isTagUsed &&\r\n
\r\n {translate('NoLinks')}\r\n
\r\n }\r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nTag.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n label: PropTypes.string.isRequired,\r\n delayProfileIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n importListIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n notificationIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n releaseProfileIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n indexerIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n downloadClientIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n autoTagIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n movieIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n onConfirmDeleteTag: PropTypes.func.isRequired\r\n};\r\n\r\nTag.defaultProps = {\r\n delayProfileIds: [],\r\n importListIds: [],\r\n notificationIds: [],\r\n releaseProfileIds: [],\r\n indexerIds: [],\r\n downloadClientIds: [],\r\n autoTagIds: [],\r\n movieIds: []\r\n};\r\n\r\nexport default Tag;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"Tag-tag-B2rUn Card-card-aoesq\",\"label\":\"Tag-label-jmGXS\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteTag } from 'Store/Actions/tagActions';\r\nimport createTagDetailsSelector from 'Store/Selectors/createTagDetailsSelector';\r\nimport Tag from './Tag';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createTagDetailsSelector(),\r\n (tagDetails) => {\r\n return {\r\n ...tagDetails\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapStateToProps = {\r\n onConfirmDeleteTag: deleteTag\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapStateToProps)(Tag);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport TagConnector from './TagConnector';\r\nimport styles from './Tags.css';\r\n\r\nfunction Tags(props) {\r\n const {\r\n items,\r\n ...otherProps\r\n } = props;\r\n\r\n if (!items.length) {\r\n return (\r\n \r\n {translate('NoTagsHaveBeenAddedYet')}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nTags.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired\r\n};\r\n\r\nexport default Tags;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tags\":\"Tags-tags-MyS6m\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchDelayProfiles, fetchDownloadClients, fetchImportLists, fetchIndexers, fetchNotifications, fetchReleaseProfiles } from 'Store/Actions/settingsActions';\r\nimport { fetchTagDetails, fetchTags } from 'Store/Actions/tagActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport Tags from './Tags';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('tags', sortByProp('label')),\r\n (tags) => {\r\n const isFetching = tags.isFetching || tags.details.isFetching;\r\n const error = tags.error || tags.details.error;\r\n const isPopulated = tags.isPopulated && tags.details.isPopulated;\r\n\r\n return {\r\n ...tags,\r\n isFetching,\r\n error,\r\n isPopulated\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchTags: fetchTags,\r\n dispatchFetchTagDetails: fetchTagDetails,\r\n dispatchFetchDelayProfiles: fetchDelayProfiles,\r\n dispatchFetchNotifications: fetchNotifications,\r\n dispatchFetchReleaseProfiles: fetchReleaseProfiles,\r\n dispatchFetchImportLists: fetchImportLists,\r\n dispatchFetchIndexers: fetchIndexers,\r\n dispatchFetchDownloadClients: fetchDownloadClients\r\n};\r\n\r\nclass MetadatasConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n dispatchFetchTags,\r\n dispatchFetchTagDetails,\r\n dispatchFetchDelayProfiles,\r\n dispatchFetchNotifications,\r\n dispatchFetchReleaseProfiles,\r\n dispatchFetchImportLists,\r\n dispatchFetchIndexers,\r\n dispatchFetchDownloadClients\r\n } = this.props;\r\n\r\n dispatchFetchTags();\r\n dispatchFetchTagDetails();\r\n dispatchFetchDelayProfiles();\r\n dispatchFetchNotifications();\r\n dispatchFetchReleaseProfiles();\r\n dispatchFetchImportLists();\r\n dispatchFetchIndexers();\r\n dispatchFetchDownloadClients();\r\n }\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nMetadatasConnector.propTypes = {\r\n dispatchFetchTags: PropTypes.func.isRequired,\r\n dispatchFetchTagDetails: PropTypes.func.isRequired,\r\n dispatchFetchDelayProfiles: PropTypes.func.isRequired,\r\n dispatchFetchNotifications: PropTypes.func.isRequired,\r\n dispatchFetchReleaseProfiles: PropTypes.func.isRequired,\r\n dispatchFetchImportLists: PropTypes.func.isRequired,\r\n dispatchFetchIndexers: PropTypes.func.isRequired,\r\n dispatchFetchDownloadClients: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(MetadatasConnector);\r\n","import React from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport translate from 'Utilities/String/translate';\r\nimport AutoTaggings from './AutoTagging/AutoTaggings';\r\nimport TagsConnector from './TagsConnector';\r\n\r\nfunction TagSettings() {\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default TagSettings;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { fetchUISettings, saveUISettings, setUISettingsValue } from 'Store/Actions/settingsActions';\r\nimport createLanguagesSelector from 'Store/Selectors/createLanguagesSelector';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport UISettings from './UISettings';\r\n\r\nconst SECTION = 'ui';\r\nconst FILTER_LANGUAGES = ['Any', 'Unknown', 'Original'];\r\n\r\nfunction createFilteredLanguagesSelector() {\r\n return createSelector(\r\n createLanguagesSelector(),\r\n (languages) => {\r\n if (!languages || !languages.items) {\r\n return [];\r\n }\r\n\r\n const newItems = languages.items\r\n .filter((lang) => !FILTER_LANGUAGES.includes(lang.name))\r\n .map((item) => {\r\n return {\r\n key: item.id,\r\n value: item.name\r\n };\r\n });\r\n\r\n return {\r\n ...languages,\r\n items: newItems\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createSettingsSectionSelector(SECTION),\r\n createFilteredLanguagesSelector(),\r\n (advancedSettings, sectionSettings, languages) => {\r\n return {\r\n advancedSettings,\r\n languages: languages.items,\r\n isLanguagesPopulated: languages.isPopulated,\r\n ...sectionSettings,\r\n isFetching: sectionSettings.isFetching || languages.isFetching,\r\n error: sectionSettings.error || languages.error\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setUISettingsValue,\r\n saveUISettings,\r\n fetchUISettings,\r\n clearPendingChanges\r\n};\r\n\r\nclass UISettingsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchUISettings();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.clearPendingChanges({ section: `settings.${SECTION}` });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setUISettingsValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveUISettings();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nUISettingsConnector.propTypes = {\r\n setUISettingsValue: PropTypes.func.isRequired,\r\n saveUISettings: PropTypes.func.isRequired,\r\n fetchUISettings: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(UISettingsConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"additionalInfo\":\"RestoreBackupModalContent-additionalInfo-Xoijl\",\"steps\":\"RestoreBackupModalContent-steps-cQe_F\",\"step\":\"RestoreBackupModalContent-step-ydzZd\",\"stepState\":\"RestoreBackupModalContent-stepState-n5Yp1\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport TextInput from 'Components/Form/TextInput';\r\nimport Icon from 'Components/Icon';\r\nimport Button from 'Components/Link/Button';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './RestoreBackupModalContent.css';\r\n\r\nfunction getErrorMessage(error) {\r\n if (!error || !error.responseJSON || !error.responseJSON.message) {\r\n return translate('ErrorRestoringBackup');\r\n }\r\n\r\n return error.responseJSON.message;\r\n}\r\n\r\nfunction getStepIconProps(isExecuting, hasExecuted, error) {\r\n if (isExecuting) {\r\n return {\r\n name: icons.SPINNER,\r\n isSpinning: true\r\n };\r\n }\r\n\r\n if (hasExecuted) {\r\n return {\r\n name: icons.CHECK,\r\n kind: kinds.SUCCESS\r\n };\r\n }\r\n\r\n if (error) {\r\n return {\r\n name: icons.FATAL,\r\n kinds: kinds.DANGER,\r\n title: getErrorMessage(error)\r\n };\r\n }\r\n\r\n return {\r\n name: icons.PENDING\r\n };\r\n}\r\n\r\nclass RestoreBackupModalContent extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n file: null,\r\n path: '',\r\n isRestored: false,\r\n isRestarted: false,\r\n isReloading: false\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n isRestoring,\r\n restoreError,\r\n isRestarting,\r\n dispatchRestart\r\n } = this.props;\r\n\r\n if (prevProps.isRestoring && !isRestoring && !restoreError) {\r\n this.setState({ isRestored: true }, () => {\r\n dispatchRestart();\r\n });\r\n }\r\n\r\n if (prevProps.isRestarting && !isRestarting) {\r\n this.setState({\r\n isRestarted: true,\r\n isReloading: true\r\n }, () => {\r\n location.reload();\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onPathChange = ({ value, files }) => {\r\n this.setState({\r\n file: files[0],\r\n path: value\r\n });\r\n };\r\n\r\n onRestorePress = () => {\r\n const {\r\n id,\r\n onRestorePress\r\n } = this.props;\r\n\r\n onRestorePress({\r\n id,\r\n file: this.state.file\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n name,\r\n isRestoring,\r\n restoreError,\r\n isRestarting,\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n path,\r\n isRestored,\r\n isRestarted,\r\n isReloading\r\n } = this.state;\r\n\r\n const isRestoreDisabled = (\r\n (!id && !path) ||\r\n isRestoring ||\r\n isRestarting ||\r\n isReloading\r\n );\r\n\r\n return (\r\n \r\n \r\n Restore Backup\r\n \r\n\r\n \r\n {\r\n !!id && translate('WouldYouLikeToRestoreBackup', {\r\n name\r\n })\r\n }\r\n\r\n {\r\n !id &&\r\n \r\n }\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n {translate('Restore')}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n {translate('Restart')}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n {translate('Reload')}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n {translate('RestartReloadNote')}\r\n
\r\n\r\n \r\n\r\n \r\n {translate('Restore')}\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nRestoreBackupModalContent.propTypes = {\r\n id: PropTypes.number,\r\n name: PropTypes.string,\r\n path: PropTypes.string,\r\n isRestoring: PropTypes.bool.isRequired,\r\n restoreError: PropTypes.object,\r\n isRestarting: PropTypes.bool.isRequired,\r\n dispatchRestart: PropTypes.func.isRequired,\r\n onRestorePress: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default RestoreBackupModalContent;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { restart, restoreBackup } from 'Store/Actions/systemActions';\r\nimport RestoreBackupModalContent from './RestoreBackupModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.system.backups,\r\n (state) => state.app.isRestarting,\r\n (backups, isRestarting) => {\r\n const {\r\n isRestoring,\r\n restoreError\r\n } = backups;\r\n\r\n return {\r\n isRestoring,\r\n restoreError,\r\n isRestarting\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onRestorePress(payload) {\r\n dispatch(restoreBackup(payload));\r\n },\r\n\r\n dispatchRestart() {\r\n dispatch(restart());\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(RestoreBackupModalContent);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport RestoreBackupModalContentConnector from './RestoreBackupModalContentConnector';\r\n\r\nfunction RestoreBackupModal(props) {\r\n const {\r\n isOpen,\r\n onModalClose,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nRestoreBackupModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default RestoreBackupModal;\r\n","import { connect } from 'react-redux';\r\nimport { clearRestoreBackup } from 'Store/Actions/systemActions';\r\nimport RestoreBackupModal from './RestoreBackupModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onModalClose() {\r\n dispatch(clearRestoreBackup());\r\n\r\n props.onModalClose();\r\n }\r\n };\r\n}\r\n\r\nexport default connect(null, createMapDispatchToProps)(RestoreBackupModal);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport Link from 'Components/Link/Link';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport RestoreBackupModalConnector from './RestoreBackupModalConnector';\r\nimport styles from './BackupRow.css';\r\n\r\nclass BackupRow extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isRestoreModalOpen: false,\r\n isConfirmDeleteModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onRestorePress = () => {\r\n this.setState({ isRestoreModalOpen: true });\r\n };\r\n\r\n onRestoreModalClose = () => {\r\n this.setState({ isRestoreModalOpen: false });\r\n };\r\n\r\n onDeletePress = () => {\r\n this.setState({ isConfirmDeleteModalOpen: true });\r\n };\r\n\r\n onConfirmDeleteModalClose = () => {\r\n this.setState({ isConfirmDeleteModalOpen: false });\r\n };\r\n\r\n onConfirmDeletePress = () => {\r\n const {\r\n id,\r\n onDeleteBackupPress\r\n } = this.props;\r\n\r\n this.setState({ isConfirmDeleteModalOpen: false }, () => {\r\n onDeleteBackupPress(id);\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n id,\r\n type,\r\n name,\r\n path,\r\n size,\r\n time\r\n } = this.props;\r\n\r\n const {\r\n isRestoreModalOpen,\r\n isConfirmDeleteModalOpen\r\n } = this.state;\r\n\r\n let iconClassName = icons.SCHEDULED;\r\n let iconTooltip = translate('Scheduled');\r\n\r\n if (type === 'manual') {\r\n iconClassName = icons.INTERACTIVE;\r\n iconTooltip = translate('Manual');\r\n } else if (type === 'update') {\r\n iconClassName = icons.UPDATE;\r\n iconTooltip = translate('BeforeUpdate');\r\n }\r\n\r\n return (\r\n \r\n \r\n {\r\n \r\n }\r\n \r\n\r\n \r\n \r\n {name}\r\n \r\n \r\n\r\n \r\n {formatBytes(size)}\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nBackupRow.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n type: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n path: PropTypes.string.isRequired,\r\n size: PropTypes.number.isRequired,\r\n time: PropTypes.string.isRequired,\r\n onDeleteBackupPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default BackupRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"type\":\"BackupRow-type-cEm0B TableRowCell-cell-giPrj\",\"actions\":\"BackupRow-actions-jEOfc TableRowCell-cell-giPrj\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport BackupRow from './BackupRow';\r\nimport RestoreBackupModalConnector from './RestoreBackupModalConnector';\r\n\r\nconst columns = [\r\n {\r\n name: 'type',\r\n isVisible: true\r\n },\r\n {\r\n name: 'name',\r\n label: () => translate('Name'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'size',\r\n label: () => translate('Size'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'time',\r\n label: () => translate('Time'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'actions',\r\n isVisible: true\r\n }\r\n];\r\n\r\nclass Backups extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isRestoreModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onRestorePress = () => {\r\n this.setState({ isRestoreModalOpen: true });\r\n };\r\n\r\n onRestoreModalClose = () => {\r\n this.setState({ isRestoreModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n backupExecuting,\r\n onBackupPress,\r\n onDeleteBackupPress\r\n } = this.props;\r\n\r\n const hasBackups = isPopulated && !!items.length;\r\n const noBackups = isPopulated && !items.length;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {\r\n isFetching && !isPopulated &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!error &&\r\n \r\n {translate('BackupsLoadError')}\r\n \r\n }\r\n\r\n {\r\n noBackups &&\r\n \r\n {translate('NoBackupsAreAvailable')}\r\n \r\n }\r\n\r\n {\r\n hasBackups &&\r\n \r\n \r\n {\r\n items.map((item) => {\r\n const {\r\n id,\r\n type,\r\n name,\r\n path,\r\n size,\r\n time\r\n } = item;\r\n\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n }\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nBackups.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.array.isRequired,\r\n backupExecuting: PropTypes.bool.isRequired,\r\n onBackupPress: PropTypes.func.isRequired,\r\n onDeleteBackupPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Backups;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { deleteBackup, fetchBackups } from 'Store/Actions/systemActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport Backups from './Backups';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.system.backups,\r\n createCommandExecutingSelector(commandNames.BACKUP),\r\n (backups, backupExecuting) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items\r\n } = backups;\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n backupExecuting\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n dispatchFetchBackups() {\r\n dispatch(fetchBackups());\r\n },\r\n\r\n onDeleteBackupPress(id) {\r\n dispatch(deleteBackup({ id }));\r\n },\r\n\r\n onBackupPress() {\r\n dispatch(executeCommand({\r\n name: commandNames.BACKUP\r\n }));\r\n }\r\n };\r\n}\r\n\r\nclass BackupsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.dispatchFetchBackups();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.backupExecuting && !this.props.backupExecuting) {\r\n this.props.dispatchFetchBackups();\r\n }\r\n }\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nBackupsConnector.propTypes = {\r\n backupExecuting: PropTypes.bool.isRequired,\r\n dispatchFetchBackups: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(BackupsConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"detailsText\":\"LogsTableDetailsModal-detailsText-qjU64 Scroller-scroller-lhubq\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Button from 'Components/Link/Button';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ModalBody from 'Components/Modal/ModalBody';\r\nimport ModalContent from 'Components/Modal/ModalContent';\r\nimport ModalFooter from 'Components/Modal/ModalFooter';\r\nimport ModalHeader from 'Components/Modal/ModalHeader';\r\nimport Scroller from 'Components/Scroller/Scroller';\r\nimport { scrollDirections } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './LogsTableDetailsModal.css';\r\n\r\nfunction LogsTableDetailsModal(props) {\r\n const {\r\n isOpen,\r\n message,\r\n exception,\r\n onModalClose\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {translate('Details')}\r\n \r\n\r\n \r\n
\r\n {translate('Message')}\r\n
\r\n\r\n \r\n {message}\r\n \r\n\r\n {\r\n !!exception &&\r\n
\r\n
\r\n {translate('Exception')}\r\n
\r\n \r\n {exception}\r\n \r\n
\r\n }\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nLogsTableDetailsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n message: PropTypes.string.isRequired,\r\n exception: PropTypes.string,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default LogsTableDetailsModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"level\":\"LogsTableRow-level-nTilo TableRowCell-cell-giPrj\",\"info\":\"LogsTableRow-info-ZdpwB\",\"debug\":\"LogsTableRow-debug-tF08B\",\"trace\":\"LogsTableRow-trace-nN2fD\",\"warn\":\"LogsTableRow-warn-Gc7Iz\",\"error\":\"LogsTableRow-error-qpcON\",\"fatal\":\"LogsTableRow-fatal-SMfsG\",\"actions\":\"LogsTableRow-actions-yQCnd TableRowCell-cell-giPrj\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRowButton from 'Components/Table/TableRowButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport LogsTableDetailsModal from './LogsTableDetailsModal';\r\nimport styles from './LogsTableRow.css';\r\n\r\nfunction getIconName(level) {\r\n switch (level) {\r\n case 'trace':\r\n case 'debug':\r\n case 'info':\r\n return icons.INFO;\r\n case 'warn':\r\n return icons.DANGER;\r\n case 'error':\r\n return icons.BUG;\r\n case 'fatal':\r\n return icons.FATAL;\r\n default:\r\n return icons.UNKNOWN;\r\n }\r\n}\r\n\r\nclass LogsTableRow extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isDetailsModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n // Don't re-open the modal if it's already open\r\n if (!this.state.isDetailsModalOpen) {\r\n this.setState({ isDetailsModalOpen: true });\r\n }\r\n };\r\n\r\n onModalClose = () => {\r\n this.setState({ isDetailsModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n level,\r\n time,\r\n logger,\r\n message,\r\n exception,\r\n columns\r\n } = this.props;\r\n\r\n return (\r\n \r\n {\r\n columns.map((column) => {\r\n const {\r\n name,\r\n isVisible\r\n } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'level') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'time') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'logger') {\r\n return (\r\n \r\n {logger}\r\n \r\n );\r\n }\r\n\r\n if (name === 'message') {\r\n return (\r\n \r\n {message}\r\n \r\n );\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return null;\r\n })\r\n }\r\n\r\n \r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nLogsTableRow.propTypes = {\r\n level: PropTypes.string.isRequired,\r\n time: PropTypes.string.isRequired,\r\n logger: PropTypes.string.isRequired,\r\n message: PropTypes.string.isRequired,\r\n exception: PropTypes.string,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired\r\n};\r\n\r\nexport default LogsTableRow;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport TablePager from 'Components/Table/TablePager';\r\nimport { align, icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport LogsTableRow from './LogsTableRow';\r\n\r\nfunction LogsTable(props) {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n columns,\r\n selectedFilterKey,\r\n filters,\r\n totalRecords,\r\n clearLogExecuting,\r\n onRefreshPress,\r\n onClearLogsPress,\r\n onFilterSelect,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {\r\n isFetching && !isPopulated &&\r\n \r\n }\r\n\r\n {\r\n isPopulated && !error && !items.length &&\r\n \r\n {translate('NoEventsFound')}\r\n \r\n }\r\n\r\n {\r\n isPopulated && !error && !!items.length &&\r\n
\r\n \r\n \r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nLogsTable.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n selectedFilterKey: PropTypes.string.isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n totalRecords: PropTypes.number,\r\n clearLogExecuting: PropTypes.bool.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired,\r\n onRefreshPress: PropTypes.func.isRequired,\r\n onClearLogsPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default LogsTable;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport withCurrentPage from 'Components/withCurrentPage';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport * as systemActions from 'Store/Actions/systemActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport LogsTable from './LogsTable';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.system.logs,\r\n createCommandExecutingSelector(commandNames.CLEAR_LOGS),\r\n (logs, clearLogExecuting) => {\r\n return {\r\n clearLogExecuting,\r\n ...logs\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n executeCommand,\r\n ...systemActions\r\n};\r\n\r\nclass LogsTableConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n useCurrentPage,\r\n fetchLogs,\r\n gotoLogsFirstPage\r\n } = this.props;\r\n\r\n if (useCurrentPage) {\r\n fetchLogs();\r\n } else {\r\n gotoLogsFirstPage();\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.clearLogExecuting && !this.props.clearLogExecuting) {\r\n this.props.gotoLogsFirstPage();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onFirstPagePress = () => {\r\n this.props.gotoLogsFirstPage();\r\n };\r\n\r\n onPreviousPagePress = () => {\r\n this.props.gotoLogsPreviousPage();\r\n };\r\n\r\n onNextPagePress = () => {\r\n this.props.gotoLogsNextPage();\r\n };\r\n\r\n onLastPagePress = () => {\r\n this.props.gotoLogsLastPage();\r\n };\r\n\r\n onPageSelect = (page) => {\r\n this.props.gotoLogsPage({ page });\r\n };\r\n\r\n onSortPress = (sortKey) => {\r\n this.props.setLogsSort({ sortKey });\r\n };\r\n\r\n onFilterSelect = (selectedFilterKey) => {\r\n this.props.setLogsFilter({ selectedFilterKey });\r\n };\r\n\r\n onTableOptionChange = (payload) => {\r\n this.props.setLogsTableOption(payload);\r\n\r\n if (payload.pageSize) {\r\n this.props.gotoLogsFirstPage();\r\n }\r\n };\r\n\r\n onRefreshPress = () => {\r\n this.props.gotoLogsFirstPage();\r\n };\r\n\r\n onClearLogsPress = () => {\r\n this.props.executeCommand({\r\n name: commandNames.CLEAR_LOGS,\r\n commandFinished: this.onCommandFinished\r\n });\r\n };\r\n\r\n onCommandFinished = () => {\r\n this.props.gotoLogsFirstPage();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nLogsTableConnector.propTypes = {\r\n useCurrentPage: PropTypes.bool.isRequired,\r\n clearLogExecuting: PropTypes.bool.isRequired,\r\n fetchLogs: PropTypes.func.isRequired,\r\n gotoLogsFirstPage: PropTypes.func.isRequired,\r\n gotoLogsPreviousPage: PropTypes.func.isRequired,\r\n gotoLogsNextPage: PropTypes.func.isRequired,\r\n gotoLogsLastPage: PropTypes.func.isRequired,\r\n gotoLogsPage: PropTypes.func.isRequired,\r\n setLogsSort: PropTypes.func.isRequired,\r\n setLogsFilter: PropTypes.func.isRequired,\r\n setLogsTableOption: PropTypes.func.isRequired,\r\n executeCommand: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withCurrentPage(\r\n connect(createMapStateToProps, mapDispatchToProps)(LogsTableConnector)\r\n);\r\n","export default function combinePath(isWindows, basePath, paths = []) {\r\n const slash = isWindows ? '\\\\' : '/';\r\n\r\n return `${basePath}${slash}${paths.join(slash)}`;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Menu from 'Components/Menu/Menu';\r\nimport MenuButton from 'Components/Menu/MenuButton';\r\nimport MenuContent from 'Components/Menu/MenuContent';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nclass LogsNavMenu extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n isMenuOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onMenuButtonPress = () => {\r\n this.setState({ isMenuOpen: !this.state.isMenuOpen });\r\n };\r\n\r\n onMenuItemPress = () => {\r\n this.setState({ isMenuOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n current\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {current}\r\n \r\n \r\n \r\n {translate('LogFiles')}\r\n \r\n\r\n \r\n {translate('UpdaterLogFiles')}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nLogsNavMenu.propTypes = {\r\n current: PropTypes.string.isRequired\r\n};\r\n\r\nexport default LogsNavMenu;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './LogFilesTableRow.css';\r\n\r\nclass LogFilesTableRow extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n filename,\r\n lastWriteTime,\r\n downloadUrl\r\n } = this.props;\r\n\r\n return (\r\n \r\n {filename}\r\n\r\n \r\n\r\n \r\n \r\n {translate('Download')}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n}\r\n\r\nLogFilesTableRow.propTypes = {\r\n filename: PropTypes.string.isRequired,\r\n lastWriteTime: PropTypes.string.isRequired,\r\n downloadUrl: PropTypes.string.isRequired\r\n};\r\n\r\nexport default LogFilesTableRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"download\":\"LogFilesTableRow-download-sxjYG TableRowCell-cell-giPrj\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport LogsNavMenu from '../LogsNavMenu';\r\nimport LogFilesTableRow from './LogFilesTableRow';\r\n\r\nconst columns = [\r\n {\r\n name: 'filename',\r\n label: () => translate('Filename'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'lastWriteTime',\r\n label: () => translate('LastWriteTime'),\r\n isVisible: true\r\n },\r\n {\r\n name: 'download',\r\n isVisible: true\r\n }\r\n];\r\n\r\nclass LogFiles extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n items,\r\n deleteFilesExecuting,\r\n currentLogView,\r\n location,\r\n onRefreshPress,\r\n onDeleteFilesPress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {translate('LogFilesLocation', {\r\n location\r\n })}\r\n
\r\n\r\n {\r\n currentLogView === 'Log Files' &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n\r\n {\r\n isFetching &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && !!items.length &&\r\n
\r\n \r\n \r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n
\r\n }\r\n\r\n {\r\n !isFetching && !items.length &&\r\n \r\n {translate('NoLogFiles')}\r\n \r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nLogFiles.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n items: PropTypes.array.isRequired,\r\n deleteFilesExecuting: PropTypes.bool.isRequired,\r\n currentLogView: PropTypes.string.isRequired,\r\n location: PropTypes.string.isRequired,\r\n onRefreshPress: PropTypes.func.isRequired,\r\n onDeleteFilesPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default LogFiles;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { fetchLogFiles } from 'Store/Actions/systemActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport combinePath from 'Utilities/String/combinePath';\r\nimport translate from 'Utilities/String/translate';\r\nimport LogFiles from './LogFiles';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.system.logFiles,\r\n (state) => state.system.status.item,\r\n createCommandExecutingSelector(commandNames.DELETE_LOG_FILES),\r\n (logFiles, status, deleteFilesExecuting) => {\r\n const {\r\n isFetching,\r\n items\r\n } = logFiles;\r\n\r\n const {\r\n appData,\r\n isWindows\r\n } = status;\r\n\r\n return {\r\n isFetching,\r\n items,\r\n deleteFilesExecuting,\r\n currentLogView: translate('LogFiles'),\r\n location: combinePath(isWindows, appData, ['logs'])\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchLogFiles,\r\n executeCommand\r\n};\r\n\r\nclass LogFilesConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchLogFiles();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onRefreshPress = () => {\r\n this.props.fetchLogFiles();\r\n };\r\n\r\n onDeleteFilesPress = () => {\r\n this.props.executeCommand({\r\n name: commandNames.DELETE_LOG_FILES,\r\n commandFinished: this.onCommandFinished\r\n });\r\n };\r\n\r\n onCommandFinished = () => {\r\n this.props.fetchLogFiles();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nLogFilesConnector.propTypes = {\r\n deleteFilesExecuting: PropTypes.bool.isRequired,\r\n fetchLogFiles: PropTypes.func.isRequired,\r\n executeCommand: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(LogFilesConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { fetchUpdateLogFiles } from 'Store/Actions/systemActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport combinePath from 'Utilities/String/combinePath';\r\nimport LogFiles from '../Files/LogFiles';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.system.updateLogFiles,\r\n (state) => state.system.status.item,\r\n createCommandExecutingSelector(commandNames.DELETE_UPDATE_LOG_FILES),\r\n (updateLogFiles, status, deleteFilesExecuting) => {\r\n const {\r\n isFetching,\r\n items\r\n } = updateLogFiles;\r\n\r\n const {\r\n appData,\r\n isWindows\r\n } = status;\r\n\r\n return {\r\n isFetching,\r\n items,\r\n deleteFilesExecuting,\r\n currentLogView: 'Updater Log Files',\r\n location: combinePath(isWindows, appData, ['UpdateLogs'])\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchUpdateLogFiles,\r\n executeCommand\r\n};\r\n\r\nclass UpdateLogFilesConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchUpdateLogFiles();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.deleteFilesExecuting && !this.props.deleteFilesExecuting) {\r\n this.props.fetchUpdateLogFiles();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onRefreshPress = () => {\r\n this.props.fetchUpdateLogFiles();\r\n };\r\n\r\n onDeleteFilesPress = () => {\r\n this.props.executeCommand({ name: commandNames.DELETE_UPDATE_LOG_FILES });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nUpdateLogFilesConnector.propTypes = {\r\n deleteFilesExecuting: PropTypes.bool.isRequired,\r\n fetchUpdateLogFiles: PropTypes.func.isRequired,\r\n executeCommand: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(UpdateLogFilesConnector);\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport Switch from 'Components/Router/Switch';\r\nimport LogFilesConnector from './Files/LogFilesConnector';\r\nimport UpdateLogFilesConnector from './Updates/UpdateLogFilesConnector';\r\n\r\nclass Logs extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Logs;\r\n","import moment from 'moment';\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport formatTimeSpan from 'Utilities/Date/formatTimeSpan';\r\n\r\ninterface StartTimeProps {\r\n startTime: string;\r\n}\r\n\r\nfunction StartTime(props: StartTimeProps) {\r\n const { startTime } = props;\r\n const { timeFormat, longDateFormat } = useSelector(\r\n createUISettingsSelector()\r\n );\r\n const [time, setTime] = useState(Date.now());\r\n\r\n const { formattedStartTime, uptime } = useMemo(() => {\r\n return {\r\n uptime: formatTimeSpan(moment(time).diff(startTime)),\r\n formattedStartTime: formatDateTime(\r\n startTime,\r\n longDateFormat,\r\n timeFormat,\r\n {\r\n includeSeconds: true,\r\n }\r\n ),\r\n };\r\n }, [startTime, time, longDateFormat, timeFormat]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => setTime(Date.now()), 1000);\r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, [setTime]);\r\n\r\n return {uptime};\r\n}\r\n\r\nexport default StartTime;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport { fetchStatus } from 'Store/Actions/systemActions';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\nimport StartTime from './StartTime';\r\nimport styles from './About.css';\r\n\r\nfunction About() {\r\n const dispatch = useDispatch();\r\n const { item } = useSelector((state: AppState) => state.system.status);\r\n\r\n const {\r\n version,\r\n packageVersion,\r\n packageAuthor,\r\n isNetCore,\r\n isDocker,\r\n runtimeVersion,\r\n databaseVersion,\r\n databaseType,\r\n migrationVersion,\r\n appData,\r\n startupPath,\r\n mode,\r\n startTime,\r\n } = item;\r\n\r\n useEffect(() => {\r\n dispatch(fetchStatus());\r\n }, [dispatch]);\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n {packageVersion && (\r\n \r\n ) : (\r\n packageVersion\r\n )\r\n }\r\n />\r\n )}\r\n\r\n {isNetCore ? (\r\n \r\n ) : null}\r\n\r\n {isDocker ? (\r\n \r\n ) : null}\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n }\r\n />\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default About;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"descriptionList\":\"About-descriptionList-Ubr6l DescriptionList-descriptionList-o7bt3\"};","// extracted by mini-css-extract-plugin\nexport default {\"space\":\"DiskSpace-space-Pgv0A TableRowCell-cell-giPrj\"};","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport ProgressBar from 'Components/ProgressBar';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport Column from 'Components/Table/Column';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport { kinds, sizes } from 'Helpers/Props';\r\nimport { Kind } from 'Helpers/Props/kinds';\r\nimport { fetchDiskSpace } from 'Store/Actions/systemActions';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './DiskSpace.css';\r\n\r\nconst columns: Column[] = [\r\n {\r\n name: 'path',\r\n label: () => translate('Location'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'freeSpace',\r\n label: () => translate('FreeSpace'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'totalSpace',\r\n label: () => translate('TotalSpace'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'progress',\r\n label: '',\r\n isVisible: true,\r\n },\r\n];\r\n\r\nfunction createDiskSpaceSelector() {\r\n return createSelector(\r\n (state: AppState) => state.system.diskSpace,\r\n (diskSpace) => {\r\n return diskSpace;\r\n }\r\n );\r\n}\r\n\r\nfunction DiskSpace() {\r\n const dispatch = useDispatch();\r\n const { isFetching, items } = useSelector(createDiskSpaceSelector());\r\n\r\n useEffect(() => {\r\n dispatch(fetchDiskSpace());\r\n }, [dispatch]);\r\n\r\n return (\r\n
\r\n {isFetching ? : null}\r\n\r\n {isFetching ? null : (\r\n \r\n \r\n {items.map((item) => {\r\n const { freeSpace, totalSpace } = item;\r\n\r\n const diskUsage = 100 - (freeSpace / totalSpace) * 100;\r\n let diskUsageKind: Kind = kinds.PRIMARY;\r\n\r\n if (diskUsage > 90) {\r\n diskUsageKind = kinds.DANGER;\r\n } else if (diskUsage > 80) {\r\n diskUsageKind = kinds.WARNING;\r\n }\r\n\r\n return (\r\n \r\n \r\n {item.path}\r\n\r\n {item.label && ` (${item.label})`}\r\n \r\n\r\n \r\n {formatBytes(freeSpace)}\r\n \r\n\r\n \r\n {formatBytes(totalSpace)}\r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n )}\r\n
\r\n );\r\n}\r\n\r\nexport default DiskSpace;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"styles-logo-WwFI0\",\"logoContainer\":\"styles-logoContainer-VtmaF\"};","import React from 'react';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Link from 'Components/Link/Link';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from '../styles.css';\r\n\r\nfunction Donations() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Donations;\r\n","import React from 'react';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport { icons } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface HealthItemLinkProps {\r\n source: string;\r\n}\r\n\r\nfunction HealthItemLink(props: HealthItemLinkProps) {\r\n const { source } = props;\r\n\r\n switch (source) {\r\n case 'IndexerRssCheck':\r\n case 'IndexerSearchCheck':\r\n case 'IndexerStatusCheck':\r\n case 'IndexerJackettAllCheck':\r\n case 'IndexerLongTermStatusCheck':\r\n return (\r\n \r\n );\r\n case 'DownloadClientCheck':\r\n case 'DownloadClientStatusCheck':\r\n case 'ImportMechanismCheck':\r\n return (\r\n \r\n );\r\n case 'NotificationStatusCheck':\r\n return (\r\n \r\n );\r\n case 'MovieCollectionRootFolderCheck':\r\n return (\r\n \r\n );\r\n case 'RootFolderCheck':\r\n return (\r\n \r\n );\r\n case 'UpdateCheck':\r\n return (\r\n \r\n );\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nexport default HealthItemLink;\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport Alert from 'Components/Alert';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Icon, { IconProps } from 'Components/Icon';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport Column from 'Components/Table/Column';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport {\r\n testAllDownloadClients,\r\n testAllIndexers,\r\n} from 'Store/Actions/settingsActions';\r\nimport { fetchHealth } from 'Store/Actions/systemActions';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\nimport createHealthSelector from './createHealthSelector';\r\nimport HealthItemLink from './HealthItemLink';\r\nimport styles from './Health.css';\r\n\r\nconst columns: Column[] = [\r\n {\r\n className: styles.status,\r\n name: 'type',\r\n label: '',\r\n isVisible: true,\r\n },\r\n {\r\n name: 'message',\r\n label: () => translate('Message'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'actions',\r\n label: () => translate('Actions'),\r\n isVisible: true,\r\n },\r\n];\r\n\r\nfunction Health() {\r\n const dispatch = useDispatch();\r\n const { isFetching, isPopulated, items } = useSelector(\r\n createHealthSelector()\r\n );\r\n const isTestingAllDownloadClients = useSelector(\r\n (state: AppState) => state.settings.downloadClients.isTestingAll\r\n );\r\n const isTestingAllIndexers = useSelector(\r\n (state: AppState) => state.settings.indexers.isTestingAll\r\n );\r\n\r\n const healthIssues = !!items.length;\r\n\r\n const handleTestAllDownloadClientsPress = useCallback(() => {\r\n dispatch(testAllDownloadClients());\r\n }, [dispatch]);\r\n\r\n const handleTestAllIndexersPress = useCallback(() => {\r\n dispatch(testAllIndexers());\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n dispatch(fetchHealth());\r\n }, [dispatch]);\r\n\r\n return (\r\n \r\n {translate('Health')}\r\n\r\n {isFetching && isPopulated ? (\r\n \r\n ) : null}\r\n \r\n }\r\n >\r\n {isFetching && !isPopulated ? : null}\r\n\r\n {isPopulated && !healthIssues ? (\r\n
\r\n {translate('NoIssuesWithYourConfiguration')}\r\n
\r\n ) : null}\r\n\r\n {healthIssues ? (\r\n <>\r\n \r\n \r\n {items.map((item) => {\r\n const source = item.source;\r\n\r\n let kind: IconProps['kind'] = kinds.WARNING;\r\n switch (item.type.toLowerCase()) {\r\n case 'error':\r\n kind = kinds.DANGER;\r\n break;\r\n default:\r\n case 'warning':\r\n kind = kinds.WARNING;\r\n break;\r\n case 'notice':\r\n kind = kinds.INFO;\r\n break;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n {item.message}\r\n\r\n \r\n \r\n\r\n \r\n\r\n {source === 'IndexerStatusCheck' ||\r\n source === 'IndexerLongTermStatusCheck' ? (\r\n \r\n ) : null}\r\n\r\n {source === 'DownloadClientCheck' ||\r\n source === 'DownloadClientStatusCheck' ? (\r\n \r\n ) : null}\r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n}\r\n\r\nexport default Health;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"legend\":\"Health-legend-aUEiW\",\"loading\":\"Health-loading-qxbW3 LoadingIndicator-loading-DWfav\",\"status\":\"Health-status-QbfEq\",\"healthOk\":\"Health-healthOk-mf6pA\",\"actions\":\"Health-actions-BR6oB TableRowCell-cell-giPrj\"};","import React from 'react';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItemDescription from 'Components/DescriptionList/DescriptionListItemDescription';\r\nimport DescriptionListItemTitle from 'Components/DescriptionList/DescriptionListItemTitle';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport Link from 'Components/Link/Link';\r\nimport translate from 'Utilities/String/translate';\r\n\r\nfunction MoreInfo() {\r\n return (\r\n
\r\n \r\n \r\n {translate('HomePage')}\r\n \r\n \r\n radarr.video\r\n \r\n\r\n {translate('Wiki')}\r\n \r\n \r\n wiki.servarr.com/radarr\r\n \r\n \r\n\r\n \r\n {translate('Reddit')}\r\n \r\n \r\n /r/Radarr\r\n \r\n\r\n \r\n {translate('Discord')}\r\n \r\n \r\n radarr.video/discord\r\n \r\n\r\n \r\n {translate('Source')}\r\n \r\n \r\n \r\n github.com/Radarr/Radarr\r\n \r\n \r\n\r\n \r\n {translate('FeatureRequests')}\r\n \r\n \r\n \r\n github.com/Radarr/Radarr/issues\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MoreInfo;\r\n","import React from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport translate from 'Utilities/String/translate';\r\nimport About from './About/About';\r\nimport DiskSpace from './DiskSpace/DiskSpace';\r\nimport Donations from './Donations/Donations';\r\nimport Health from './Health/Health';\r\nimport MoreInfo from './MoreInfo/MoreInfo';\r\n\r\nfunction Status() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Status;\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { CommandBody } from 'Commands/Command';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport createMultiMoviesSelector from 'Store/Selectors/createMultiMoviesSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './QueuedTaskRowNameCell.css';\r\n\r\nfunction formatTitles(titles: string[]) {\r\n if (!titles) {\r\n return null;\r\n }\r\n\r\n if (titles.length > 11) {\r\n return (\r\n \r\n {titles.slice(0, 10).join(', ')}, {titles.length - 10} more\r\n \r\n );\r\n }\r\n\r\n return {titles.join(', ')};\r\n}\r\n\r\nexport interface QueuedTaskRowNameCellProps {\r\n commandName: string;\r\n body: CommandBody;\r\n clientUserAgent?: string;\r\n}\r\n\r\nexport default function QueuedTaskRowNameCell(\r\n props: QueuedTaskRowNameCellProps\r\n) {\r\n const { commandName, body, clientUserAgent } = props;\r\n const movieIds = [...(body.movieIds ?? [])];\r\n\r\n if (body.movieId) {\r\n movieIds.push(body.movieId);\r\n }\r\n\r\n const movies = useSelector(createMultiMoviesSelector(movieIds));\r\n const sortedMovies = movies.sort(sortByProp('sortTitle'));\r\n\r\n return (\r\n \r\n \r\n {commandName}\r\n {sortedMovies.length ? (\r\n - {formatTitles(sortedMovies.map((m) => m.title))}\r\n ) : null}\r\n \r\n\r\n {clientUserAgent ? (\r\n \r\n {translate('From')}: {clientUserAgent}\r\n \r\n ) : null}\r\n \r\n );\r\n}\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Movie from 'Movie/Movie';\r\n\r\nfunction createMultiMoviesSelector(movieIds: number[]) {\r\n return createSelector(\r\n (state: AppState) => state.movies.itemMap,\r\n (state: AppState) => state.movies.items,\r\n (itemMap, allMovies) => {\r\n return movieIds.reduce((acc: Movie[], movieId) => {\r\n const movie = allMovies[itemMap[movieId]];\r\n\r\n if (movie) {\r\n acc.push(movie);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n }\r\n );\r\n}\r\n\r\nexport default createMultiMoviesSelector;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"commandName\":\"QueuedTaskRowNameCell-commandName-wXKoI\",\"userAgent\":\"QueuedTaskRowNameCell-userAgent-EbkpU\"};","import moment from 'moment';\r\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { CommandBody } from 'Commands/Command';\r\nimport Icon, { IconProps } from 'Components/Icon';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport { cancelCommand } from 'Store/Actions/commandActions';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport formatDate from 'Utilities/Date/formatDate';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport formatTimeSpan from 'Utilities/Date/formatTimeSpan';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\nimport QueuedTaskRowNameCell from './QueuedTaskRowNameCell';\r\nimport styles from './QueuedTaskRow.css';\r\n\r\nfunction getStatusIconProps(\r\n status: string,\r\n message: string | undefined\r\n): IconProps {\r\n const title = titleCase(status);\r\n\r\n switch (status) {\r\n case 'queued':\r\n return {\r\n name: icons.PENDING,\r\n title,\r\n };\r\n\r\n case 'started':\r\n return {\r\n name: icons.REFRESH,\r\n isSpinning: true,\r\n title,\r\n };\r\n\r\n case 'completed':\r\n return {\r\n name: icons.CHECK,\r\n kind: kinds.SUCCESS,\r\n title: message === 'Completed' ? title : `${title}: ${message}`,\r\n };\r\n\r\n case 'failed':\r\n return {\r\n name: icons.FATAL,\r\n kind: kinds.DANGER,\r\n title: `${title}: ${message}`,\r\n };\r\n\r\n default:\r\n return {\r\n name: icons.UNKNOWN,\r\n title,\r\n };\r\n }\r\n}\r\n\r\nfunction getFormattedDates(\r\n queued: string,\r\n started: string | undefined,\r\n ended: string | undefined,\r\n showRelativeDates: boolean,\r\n shortDateFormat: string\r\n) {\r\n if (showRelativeDates) {\r\n return {\r\n queuedAt: moment(queued).fromNow(),\r\n startedAt: started ? moment(started).fromNow() : '-',\r\n endedAt: ended ? moment(ended).fromNow() : '-',\r\n };\r\n }\r\n\r\n return {\r\n queuedAt: formatDate(queued, shortDateFormat),\r\n startedAt: started ? formatDate(started, shortDateFormat) : '-',\r\n endedAt: ended ? formatDate(ended, shortDateFormat) : '-',\r\n };\r\n}\r\n\r\ninterface QueuedTimes {\r\n queuedAt: string;\r\n startedAt: string;\r\n endedAt: string;\r\n}\r\n\r\nexport interface QueuedTaskRowProps {\r\n id: number;\r\n trigger: string;\r\n commandName: string;\r\n queued: string;\r\n started?: string;\r\n ended?: string;\r\n status: string;\r\n duration?: string;\r\n message?: string;\r\n body: CommandBody;\r\n clientUserAgent?: string;\r\n}\r\n\r\nexport default function QueuedTaskRow(props: QueuedTaskRowProps) {\r\n const {\r\n id,\r\n trigger,\r\n commandName,\r\n queued,\r\n started,\r\n ended,\r\n status,\r\n duration,\r\n message,\r\n body,\r\n clientUserAgent,\r\n } = props;\r\n\r\n const dispatch = useDispatch();\r\n const { longDateFormat, shortDateFormat, showRelativeDates, timeFormat } =\r\n useSelector(createUISettingsSelector());\r\n\r\n const updateTimeTimeoutId = useRef | null>(\r\n null\r\n );\r\n const [times, setTimes] = useState(\r\n getFormattedDates(\r\n queued,\r\n started,\r\n ended,\r\n showRelativeDates,\r\n shortDateFormat\r\n )\r\n );\r\n\r\n const [\r\n isCancelConfirmModalOpen,\r\n openCancelConfirmModal,\r\n closeCancelConfirmModal,\r\n ] = useModalOpenState(false);\r\n\r\n const handleCancelPress = useCallback(() => {\r\n dispatch(cancelCommand({ id }));\r\n }, [id, dispatch]);\r\n\r\n useEffect(() => {\r\n updateTimeTimeoutId.current = setTimeout(() => {\r\n setTimes(\r\n getFormattedDates(\r\n queued,\r\n started,\r\n ended,\r\n showRelativeDates,\r\n shortDateFormat\r\n )\r\n );\r\n }, 30000);\r\n\r\n return () => {\r\n if (updateTimeTimeoutId.current) {\r\n clearTimeout(updateTimeTimeoutId.current);\r\n }\r\n };\r\n }, [queued, started, ended, showRelativeDates, shortDateFormat, setTimes]);\r\n\r\n const { queuedAt, startedAt, endedAt } = times;\r\n\r\n let triggerIcon = icons.QUICK;\r\n\r\n if (trigger === 'manual') {\r\n triggerIcon = icons.INTERACTIVE;\r\n } else if (trigger === 'scheduled') {\r\n triggerIcon = icons.SCHEDULED;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n {queuedAt}\r\n \r\n\r\n \r\n {startedAt}\r\n \r\n\r\n \r\n {endedAt}\r\n \r\n\r\n \r\n {formatTimeSpan(duration)}\r\n \r\n\r\n \r\n {status === 'queued' && (\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"trigger\":\"QueuedTaskRow-trigger-TgEBj TableRowCell-cell-giPrj\",\"triggerContent\":\"QueuedTaskRow-triggerContent-IhBio\",\"queued\":\"QueuedTaskRow-queued-MHcI5 TableRowCell-cell-giPrj\",\"started\":\"QueuedTaskRow-started-oukkt TableRowCell-cell-giPrj\",\"ended\":\"QueuedTaskRow-ended-TBdCJ TableRowCell-cell-giPrj\",\"duration\":\"QueuedTaskRow-duration-EJQc1 TableRowCell-cell-giPrj\",\"actions\":\"QueuedTaskRow-actions-QYryf TableRowCell-cell-giPrj\"};","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { fetchCommands } from 'Store/Actions/commandActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport QueuedTaskRow from './QueuedTaskRow';\r\n\r\nconst columns = [\r\n {\r\n name: 'trigger',\r\n label: '',\r\n isVisible: true,\r\n },\r\n {\r\n name: 'commandName',\r\n label: () => translate('Name'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'queued',\r\n label: () => translate('Queued'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'started',\r\n label: () => translate('Started'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'ended',\r\n label: () => translate('Ended'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'duration',\r\n label: () => translate('Duration'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'actions',\r\n isVisible: true,\r\n },\r\n];\r\n\r\nexport default function QueuedTasks() {\r\n const dispatch = useDispatch();\r\n const { isFetching, isPopulated, items } = useSelector(\r\n (state: AppState) => state.commands\r\n );\r\n\r\n useEffect(() => {\r\n dispatch(fetchCommands());\r\n }, [dispatch]);\r\n\r\n return (\r\n
\r\n {isFetching && !isPopulated && }\r\n\r\n {isPopulated && (\r\n \r\n \r\n {items.map((item) => {\r\n return ;\r\n })}\r\n \r\n
\r\n )}\r\n
\r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"interval\":\"ScheduledTaskRow-interval-pe_BC TableRowCell-cell-giPrj\",\"lastExecution\":\"ScheduledTaskRow-lastExecution-Xf4fD TableRowCell-cell-giPrj\",\"lastDuration\":\"ScheduledTaskRow-lastDuration-MKdDv TableRowCell-cell-giPrj\",\"nextExecution\":\"ScheduledTaskRow-nextExecution-dSCD3 TableRowCell-cell-giPrj\",\"actions\":\"ScheduledTaskRow-actions-t2m8V TableRowCell-cell-giPrj\"};","import moment from 'moment';\r\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport usePrevious from 'Helpers/Hooks/usePrevious';\r\nimport { icons } from 'Helpers/Props';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { fetchTask } from 'Store/Actions/systemActions';\r\nimport createCommandSelector from 'Store/Selectors/createCommandSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport { isCommandExecuting } from 'Utilities/Command';\r\nimport formatDate from 'Utilities/Date/formatDate';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport formatTimeSpan from 'Utilities/Date/formatTimeSpan';\r\nimport styles from './ScheduledTaskRow.css';\r\n\r\ninterface ScheduledTaskRowProps {\r\n id: number;\r\n taskName: string;\r\n name: string;\r\n interval: number;\r\n lastExecution: string;\r\n lastStartTime: string;\r\n lastDuration: string;\r\n nextExecution: string;\r\n}\r\n\r\nfunction ScheduledTaskRow(props: ScheduledTaskRowProps) {\r\n const {\r\n id,\r\n taskName,\r\n name,\r\n interval,\r\n lastExecution,\r\n lastStartTime,\r\n lastDuration,\r\n nextExecution,\r\n } = props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const { showRelativeDates, longDateFormat, shortDateFormat, timeFormat } =\r\n useSelector(createUISettingsSelector());\r\n const command = useSelector(createCommandSelector(taskName));\r\n\r\n const [time, setTime] = useState(Date.now());\r\n\r\n const isQueued = !!(command && command.status === 'queued');\r\n const isExecuting = isCommandExecuting(command);\r\n const wasExecuting = usePrevious(isExecuting);\r\n const isDisabled = interval === 0;\r\n const executeNow = !isDisabled && moment().isAfter(nextExecution);\r\n const hasNextExecutionTime = !isDisabled && !executeNow;\r\n const hasLastStartTime = moment(lastStartTime).isAfter('2010-01-01');\r\n\r\n const duration = useMemo(() => {\r\n return moment\r\n .duration(interval, 'minutes')\r\n .humanize()\r\n .replace(/an?(?=\\s)/, '1');\r\n }, [interval]);\r\n\r\n const { lastExecutionTime, nextExecutionTime } = useMemo(() => {\r\n const isDisabled = interval === 0;\r\n\r\n if (showRelativeDates && time) {\r\n return {\r\n lastExecutionTime: moment(lastExecution).fromNow(),\r\n nextExecutionTime: isDisabled ? '-' : moment(nextExecution).fromNow(),\r\n };\r\n }\r\n\r\n return {\r\n lastExecutionTime: formatDate(lastExecution, shortDateFormat),\r\n nextExecutionTime: isDisabled\r\n ? '-'\r\n : formatDate(nextExecution, shortDateFormat),\r\n };\r\n }, [\r\n time,\r\n interval,\r\n lastExecution,\r\n nextExecution,\r\n showRelativeDates,\r\n shortDateFormat,\r\n ]);\r\n\r\n const handleExecutePress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: taskName,\r\n })\r\n );\r\n }, [taskName, dispatch]);\r\n\r\n useEffect(() => {\r\n if (!isExecuting && wasExecuting) {\r\n setTimeout(() => {\r\n dispatch(fetchTask({ id }));\r\n }, 1000);\r\n }\r\n }, [id, isExecuting, wasExecuting, dispatch]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => setTime(Date.now()), 1000);\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, [setTime]);\r\n\r\n return (\r\n \r\n {name}\r\n \r\n {isDisabled ? 'disabled' : duration}\r\n \r\n\r\n \r\n {lastExecutionTime}\r\n \r\n\r\n {hasLastStartTime ? (\r\n \r\n {formatTimeSpan(lastDuration)}\r\n \r\n ) : (\r\n -\r\n )}\r\n\r\n {isDisabled ? (\r\n -\r\n ) : null}\r\n\r\n {executeNow && isQueued ? (\r\n queued\r\n ) : null}\r\n\r\n {executeNow && !isQueued ? (\r\n now\r\n ) : null}\r\n\r\n {hasNextExecutionTime ? (\r\n \r\n {nextExecutionTime}\r\n \r\n ) : null}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ScheduledTaskRow;\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport FieldSet from 'Components/FieldSet';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport Column from 'Components/Table/Column';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { fetchTasks } from 'Store/Actions/systemActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport ScheduledTaskRow from './ScheduledTaskRow';\r\n\r\nconst columns: Column[] = [\r\n {\r\n name: 'name',\r\n label: () => translate('Name'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'interval',\r\n label: () => translate('Interval'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'lastExecution',\r\n label: () => translate('LastExecution'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'lastDuration',\r\n label: () => translate('LastDuration'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'nextExecution',\r\n label: () => translate('NextExecution'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'actions',\r\n label: '',\r\n isVisible: true,\r\n },\r\n];\r\n\r\nfunction ScheduledTasks() {\r\n const dispatch = useDispatch();\r\n const { isFetching, isPopulated, items } = useSelector(\r\n (state: AppState) => state.system.tasks\r\n );\r\n\r\n useEffect(() => {\r\n dispatch(fetchTasks());\r\n }, [dispatch]);\r\n\r\n return (\r\n
\r\n {isFetching && !isPopulated && }\r\n\r\n {isPopulated && (\r\n \r\n \r\n {items.map((item) => {\r\n return ;\r\n })}\r\n \r\n
\r\n )}\r\n
\r\n );\r\n}\r\n\r\nexport default ScheduledTasks;\r\n","import React from 'react';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport translate from 'Utilities/String/translate';\r\nimport QueuedTasks from './Queued/QueuedTasks';\r\nimport ScheduledTasks from './Scheduled/ScheduledTasks';\r\n\r\nfunction Tasks() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Tasks;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"messageContainer\":\"Updates-messageContainer-nvvHm\",\"upToDateIcon\":\"Updates-upToDateIcon-jwFdy\",\"message\":\"Updates-message-zg2_G\",\"loading\":\"Updates-loading-bdWcM LoadingIndicator-loading-DWfav\",\"update\":\"Updates-update-m07_m\",\"info\":\"Updates-info-KSvcv\",\"version\":\"Updates-version-RDMv4\",\"space\":\"Updates-space-lc7tw\",\"date\":\"Updates-date-NpIbP\",\"label\":\"Updates-label-hat6K Label-label-DYldh\"};","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport Alert from 'Components/Alert';\r\nimport Icon from 'Components/Icon';\r\nimport Label from 'Components/Label';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport InlineMarkdown from 'Components/Markdown/InlineMarkdown';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { fetchGeneralSettings } from 'Store/Actions/settingsActions';\r\nimport { fetchUpdates } from 'Store/Actions/systemActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport { UpdateMechanism } from 'typings/Settings/General';\r\nimport formatDate from 'Utilities/Date/formatDate';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport translate from 'Utilities/String/translate';\r\nimport UpdateChanges from './UpdateChanges';\r\nimport styles from './Updates.css';\r\n\r\nconst VERSION_REGEX = /\\d+\\.\\d+\\.\\d+\\.\\d+/i;\r\n\r\nfunction createUpdatesSelector() {\r\n return createSelector(\r\n (state: AppState) => state.system.updates,\r\n (state: AppState) => state.settings.general,\r\n (updates, generalSettings) => {\r\n const { error: updatesError, items } = updates;\r\n\r\n const isFetching = updates.isFetching || generalSettings.isFetching;\r\n const isPopulated = updates.isPopulated && generalSettings.isPopulated;\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n updatesError,\r\n generalSettingsError: generalSettings.error,\r\n items,\r\n updateMechanism: generalSettings.item.updateMechanism,\r\n };\r\n }\r\n );\r\n}\r\n\r\nfunction Updates() {\r\n const currentVersion = useSelector((state: AppState) => state.app.version);\r\n const { packageUpdateMechanismMessage } = useSelector(\r\n createSystemStatusSelector()\r\n );\r\n const { shortDateFormat, longDateFormat, timeFormat } = useSelector(\r\n createUISettingsSelector()\r\n );\r\n const isInstallingUpdate = useSelector(\r\n createCommandExecutingSelector(commandNames.APPLICATION_UPDATE)\r\n );\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n updatesError,\r\n generalSettingsError,\r\n items,\r\n updateMechanism,\r\n } = useSelector(createUpdatesSelector());\r\n\r\n const dispatch = useDispatch();\r\n const [isMajorUpdateModalOpen, setIsMajorUpdateModalOpen] = useState(false);\r\n const hasError = !!(updatesError || generalSettingsError);\r\n const hasUpdates = isPopulated && !hasError && items.length > 0;\r\n const noUpdates = isPopulated && !hasError && !items.length;\r\n\r\n const externalUpdaterPrefix = translate('UpdateAppDirectlyLoadError');\r\n const externalUpdaterMessages: Partial> = {\r\n external: translate('ExternalUpdater'),\r\n apt: translate('AptUpdater'),\r\n docker: translate('DockerUpdater'),\r\n };\r\n\r\n const { isMajorUpdate, hasUpdateToInstall } = useMemo(() => {\r\n const majorVersion = parseInt(\r\n currentVersion.match(VERSION_REGEX)?.[0] ?? '0'\r\n );\r\n\r\n const latestVersion = items[0]?.version;\r\n const latestMajorVersion = parseInt(\r\n latestVersion?.match(VERSION_REGEX)?.[0] ?? '0'\r\n );\r\n\r\n return {\r\n isMajorUpdate: latestMajorVersion > majorVersion,\r\n hasUpdateToInstall: items.some(\r\n (update) => update.installable && update.latest\r\n ),\r\n };\r\n }, [currentVersion, items]);\r\n\r\n const noUpdateToInstall = hasUpdates && !hasUpdateToInstall;\r\n\r\n const handleInstallLatestPress = useCallback(() => {\r\n if (isMajorUpdate) {\r\n setIsMajorUpdateModalOpen(true);\r\n } else {\r\n dispatch(executeCommand({ name: commandNames.APPLICATION_UPDATE }));\r\n }\r\n }, [isMajorUpdate, setIsMajorUpdateModalOpen, dispatch]);\r\n\r\n const handleInstallLatestMajorVersionPress = useCallback(() => {\r\n setIsMajorUpdateModalOpen(false);\r\n\r\n dispatch(\r\n executeCommand({\r\n name: commandNames.APPLICATION_UPDATE,\r\n installMajorUpdate: true,\r\n })\r\n );\r\n }, [setIsMajorUpdateModalOpen, dispatch]);\r\n\r\n const handleCancelMajorVersionPress = useCallback(() => {\r\n setIsMajorUpdateModalOpen(false);\r\n }, [setIsMajorUpdateModalOpen]);\r\n\r\n useEffect(() => {\r\n dispatch(fetchUpdates());\r\n dispatch(fetchGeneralSettings());\r\n }, [dispatch]);\r\n\r\n return (\r\n \r\n \r\n {isPopulated || hasError ? null : }\r\n\r\n {noUpdates ? (\r\n {translate('NoUpdatesAreAvailable')}\r\n ) : null}\r\n\r\n {hasUpdateToInstall ? (\r\n
\r\n {updateMechanism === 'builtIn' || updateMechanism === 'script' ? (\r\n \r\n {translate('InstallLatest')}\r\n \r\n ) : (\r\n <>\r\n \r\n\r\n
\r\n {externalUpdaterPrefix}{' '}\r\n \r\n
\r\n \r\n )}\r\n\r\n {isFetching ? (\r\n \r\n ) : null}\r\n
\r\n ) : null}\r\n\r\n {noUpdateToInstall && (\r\n
\r\n \r\n
{translate('OnLatestVersion')}
\r\n\r\n {isFetching && (\r\n \r\n )}\r\n
\r\n )}\r\n\r\n {hasUpdates && (\r\n
\r\n {items.map((update) => {\r\n return (\r\n
\r\n
\r\n
{update.version}
\r\n
\r\n \r\n {formatDate(update.releaseDate, shortDateFormat)}\r\n
\r\n\r\n {update.branch === 'master' ? null : (\r\n \r\n )}\r\n\r\n {update.version === currentVersion ? (\r\n \r\n {translate('CurrentlyInstalled')}\r\n \r\n ) : null}\r\n\r\n {update.version !== currentVersion && update.installedOn ? (\r\n \r\n {translate('PreviouslyInstalled')}\r\n \r\n ) : null}\r\n
\r\n\r\n {update.changes ? (\r\n
\r\n \r\n\r\n \r\n
\r\n ) : (\r\n
{translate('MaintenanceRelease')}
\r\n )}\r\n
\r\n );\r\n })}\r\n \r\n )}\r\n\r\n {updatesError ? (\r\n \r\n {translate('FailedToFetchUpdates')}\r\n \r\n ) : null}\r\n\r\n {generalSettingsError ? (\r\n \r\n {translate('FailedToUpdateSettings')}\r\n \r\n ) : null}\r\n\r\n \r\n
{translate('InstallMajorVersionUpdateMessage')}
\r\n
\r\n \r\n
\r\n \r\n }\r\n confirmLabel={translate('Install')}\r\n onConfirm={handleInstallLatestMajorVersionPress}\r\n onCancel={handleCancelMajorVersionPress}\r\n />\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Updates;\r\n","export default function getFilterValue(filters, filterKey, filterValueKey, defaultValue) {\r\n const filter = filters.find((f) => f.key === filterKey);\r\n\r\n if (!filter) {\r\n return defaultValue;\r\n }\r\n\r\n const filterValue = filter.filters.find((f) => f.key === filterValueKey);\r\n\r\n return filterValue ? filterValue.value : defaultValue;\r\n}\r\n","import areAllSelected from './areAllSelected';\r\n\r\nexport default function removeOldSelectedState(state, prevItems) {\r\n const selectedState = {\r\n ...state.selectedState\r\n };\r\n\r\n prevItems.forEach((item) => {\r\n delete selectedState[item.id];\r\n });\r\n\r\n return {\r\n ...areAllSelected(selectedState),\r\n selectedState\r\n };\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"movieSearchCell\":\"MovieSearchCell-movieSearchCell-fCkew TableRowCell-cell-giPrj\"};","import React, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { MOVIE_SEARCH } from 'Commands/commandNames';\r\nimport IconButton from 'Components/Link/IconButton';\r\nimport SpinnerIconButton from 'Components/Link/SpinnerIconButton';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport useModalOpenState from 'Helpers/Hooks/useModalOpenState';\r\nimport { icons } from 'Helpers/Props';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport createExecutingCommandsSelector from 'Store/Selectors/createExecutingCommandsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport MovieInteractiveSearchModal from './Search/MovieInteractiveSearchModal';\r\nimport styles from './MovieSearchCell.css';\r\n\r\ninterface MovieSearchCellProps {\r\n movieId: number;\r\n movieTitle: string;\r\n}\r\n\r\nfunction MovieSearchCell(props: MovieSearchCellProps) {\r\n const { movieId, movieTitle } = props;\r\n\r\n const executingCommands = useSelector(createExecutingCommandsSelector());\r\n const isSearching = executingCommands.some(({ name, body }) => {\r\n const { movieIds = [] } = body;\r\n return name === MOVIE_SEARCH && movieIds.indexOf(movieId) > -1;\r\n });\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [\r\n isInteractiveSearchModalOpen,\r\n setInteractiveSearchModalOpen,\r\n setInteractiveSearchModalClosed,\r\n ] = useModalOpenState(false);\r\n\r\n const handleSearchPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: MOVIE_SEARCH,\r\n movieIds: [movieId],\r\n })\r\n );\r\n }, [movieId, dispatch]);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default MovieSearchCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"center\":\"MovieStatus-center-gvFw4\"};","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport QueueDetails from 'Activity/Queue/QueueDetails';\r\nimport Icon from 'Components/Icon';\r\nimport ProgressBar from 'Components/ProgressBar';\r\nimport { icons, kinds, sizes } from 'Helpers/Props';\r\nimport Movie from 'Movie/Movie';\r\nimport useMovie, { MovieEntity } from 'Movie/useMovie';\r\nimport useMovieFile from 'MovieFile/useMovieFile';\r\nimport { createQueueItemSelectorForHook } from 'Store/Selectors/createQueueItemSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport MovieQuality from './MovieQuality';\r\nimport styles from './MovieStatus.css';\r\n\r\ninterface MovieStatusProps {\r\n movieId: number;\r\n movieEntity?: MovieEntity;\r\n movieFileId: number | undefined;\r\n}\r\n\r\nfunction MovieStatus({ movieId, movieFileId }: MovieStatusProps) {\r\n const {\r\n isAvailable,\r\n monitored,\r\n grabbed = false,\r\n } = useMovie(movieId) as Movie;\r\n\r\n const queueItem = useSelector(createQueueItemSelectorForHook(movieId));\r\n const movieFile = useMovieFile(movieFileId);\r\n\r\n const hasMovieFile = !!movieFile;\r\n const isQueued = !!queueItem;\r\n\r\n if (isQueued) {\r\n const { sizeleft, size } = queueItem;\r\n\r\n const progress = size ? 100 - (sizeleft / size) * 100 : 0;\r\n\r\n return (\r\n
\r\n \r\n }\r\n />\r\n
\r\n );\r\n }\r\n\r\n if (grabbed) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (hasMovieFile) {\r\n const quality = movieFile.quality;\r\n const isCutoffNotMet = movieFile.qualityCutoffNotMet;\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (!monitored) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n if (isAvailable) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MovieStatus;\r\n","import React from 'react';\r\nimport MovieLanguages from 'Movie/MovieLanguages';\r\nimport useMovieFile from './useMovieFile';\r\n\r\ninterface MovieFileLanguagesProps {\r\n movieFileId: number;\r\n}\r\n\r\nfunction MovieFileLanguages({ movieFileId }: MovieFileLanguagesProps) {\r\n const movieFile = useMovieFile(movieFileId);\r\n\r\n return ;\r\n}\r\n\r\nexport default MovieFileLanguages;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"languages\":\"CutoffUnmetRow-languages-GJLvA TableRowCell-cell-giPrj\",\"status\":\"CutoffUnmetRow-status-gMMPe TableRowCell-cell-giPrj\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport movieEntities from 'Movie/movieEntities';\r\nimport MovieSearchCell from 'Movie/MovieSearchCell';\r\nimport MovieStatus from 'Movie/MovieStatus';\r\nimport MovieTitleLink from 'Movie/MovieTitleLink';\r\nimport MovieFileLanguages from 'MovieFile/MovieFileLanguages';\r\nimport styles from './CutoffUnmetRow.css';\r\n\r\nfunction CutoffUnmetRow(props) {\r\n const {\r\n id,\r\n movieFileId,\r\n year,\r\n title,\r\n titleSlug,\r\n inCinemas,\r\n digitalRelease,\r\n physicalRelease,\r\n lastSearchTime,\r\n isSelected,\r\n columns,\r\n onSelectedChange\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n\r\n {\r\n columns.map((column) => {\r\n const {\r\n name,\r\n isVisible\r\n } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'movieMetadata.sortTitle') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'movieMetadata.year') {\r\n return (\r\n \r\n {year}\r\n \r\n );\r\n }\r\n\r\n if (name === 'movieMetadata.inCinemas') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'movieMetadata.digitalRelease') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'movieMetadata.physicalRelease') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'languages') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'movies.lastSearchTime') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'status') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return null;\r\n })\r\n }\r\n \r\n );\r\n}\r\n\r\nCutoffUnmetRow.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n movieFileId: PropTypes.number,\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n lastSearchTime: PropTypes.string,\r\n titleSlug: PropTypes.string.isRequired,\r\n inCinemas: PropTypes.string,\r\n digitalRelease: PropTypes.string,\r\n physicalRelease: PropTypes.string,\r\n isSelected: PropTypes.bool,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CutoffUnmetRow;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport TablePager from 'Components/Table/TablePager';\r\nimport { align, icons, kinds } from 'Helpers/Props';\r\nimport getFilterValue from 'Utilities/Filter/getFilterValue';\r\nimport hasDifferentItems from 'Utilities/Object/hasDifferentItems';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport removeOldSelectedState from 'Utilities/Table/removeOldSelectedState';\r\nimport selectAll from 'Utilities/Table/selectAll';\r\nimport toggleSelected from 'Utilities/Table/toggleSelected';\r\nimport CutoffUnmetRow from './CutoffUnmetRow';\r\n\r\nfunction getMonitoredValue(props) {\r\n const {\r\n filters,\r\n selectedFilterKey\r\n } = props;\r\n\r\n return getFilterValue(filters, selectedFilterKey, 'monitored', false);\r\n}\r\n\r\nclass CutoffUnmet extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n allSelected: false,\r\n allUnselected: false,\r\n lastToggled: null,\r\n selectedState: {},\r\n isConfirmSearchAllCutoffUnmetModalOpen: false,\r\n isInteractiveImportModalOpen: false\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (hasDifferentItems(prevProps.items, this.props.items)) {\r\n this.setState((state) => {\r\n return removeOldSelectedState(state, prevProps.items);\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n getSelectedIds = () => {\r\n return getSelectedIds(this.state.selectedState);\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onFilterMenuItemPress = (filterKey, filterValue) => {\r\n this.props.onFilterSelect(filterKey, filterValue);\r\n };\r\n\r\n onSelectAllChange = ({ value }) => {\r\n this.setState(selectAll(this.state.selectedState, value));\r\n };\r\n\r\n onSelectedChange = ({ id, value, shiftKey = false }) => {\r\n this.setState((state) => {\r\n return toggleSelected(state, this.props.items, id, value, shiftKey);\r\n });\r\n };\r\n\r\n onSearchSelectedPress = () => {\r\n const selected = this.getSelectedIds();\r\n\r\n this.props.onSearchSelectedPress(selected);\r\n };\r\n\r\n onToggleSelectedPress = () => {\r\n const movieIds = this.getSelectedIds();\r\n\r\n this.props.batchToggleCutoffUnmetMovies({\r\n movieIds,\r\n monitored: !getMonitoredValue(this.props)\r\n });\r\n };\r\n\r\n onSearchAllCutoffUnmetPress = () => {\r\n this.setState({ isConfirmSearchAllCutoffUnmetModalOpen: true });\r\n };\r\n\r\n onSearchAllCutoffUnmetConfirmed = () => {\r\n const {\r\n selectedFilterKey,\r\n onSearchAllCutoffUnmetPress\r\n } = this.props;\r\n\r\n // TODO: Custom filters will need to check whether there is a monitored\r\n // filter once implemented.\r\n\r\n onSearchAllCutoffUnmetPress(selectedFilterKey === 'monitored');\r\n this.setState({ isConfirmSearchAllCutoffUnmetModalOpen: false });\r\n };\r\n\r\n onConfirmSearchAllCutoffUnmetModalClose = () => {\r\n this.setState({ isConfirmSearchAllCutoffUnmetModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n selectedFilterKey,\r\n filters,\r\n columns,\r\n totalRecords,\r\n isSearchingForCutoffUnmetMovies,\r\n isSaving,\r\n onFilterSelect,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n allSelected,\r\n allUnselected,\r\n selectedState,\r\n isConfirmSearchAllCutoffUnmetModalOpen\r\n } = this.state;\r\n\r\n const itemsSelected = !!this.getSelectedIds().length;\r\n const isShowingMonitored = getMonitoredValue(this.props);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {\r\n isFetching && !isPopulated &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && error &&\r\n \r\n {translate('CutoffUnmetLoadError')}\r\n \r\n }\r\n\r\n {\r\n isPopulated && !error && !items.length &&\r\n \r\n {translate('CutoffUnmetNoItems')}\r\n \r\n }\r\n\r\n {\r\n isPopulated && !error && !!items.length &&\r\n
\r\n \r\n \r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n
\r\n {translate('SearchForCutoffUnmetMoviesConfirmationCount', { totalRecords })}\r\n
\r\n
\r\n {translate('MassSearchCancelWarning')}\r\n
\r\n
\r\n }\r\n confirmLabel={translate('Search')}\r\n onConfirm={this.onSearchAllCutoffUnmetConfirmed}\r\n onCancel={this.onConfirmSearchAllCutoffUnmetModalClose}\r\n />\r\n \r\n }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nCutoffUnmet.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n selectedFilterKey: PropTypes.string.isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n totalRecords: PropTypes.number,\r\n isSearchingForCutoffUnmetMovies: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired,\r\n onSearchSelectedPress: PropTypes.func.isRequired,\r\n batchToggleCutoffUnmetMovies: PropTypes.func.isRequired,\r\n onSearchAllCutoffUnmetPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default CutoffUnmet;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport withCurrentPage from 'Components/withCurrentPage';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { clearMovieFiles, fetchMovieFiles } from 'Store/Actions/movieFileActions';\r\nimport { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions';\r\nimport * as wantedActions from 'Store/Actions/wantedActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport hasDifferentItems from 'Utilities/Object/hasDifferentItems';\r\nimport selectUniqueIds from 'Utilities/Object/selectUniqueIds';\r\nimport { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';\r\nimport CutoffUnmet from './CutoffUnmet';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.wanted.cutoffUnmet,\r\n createCommandExecutingSelector(commandNames.CUTOFF_UNMET_MOVIES_SEARCH),\r\n createCommandExecutingSelector(commandNames.MOVIE_SEARCH),\r\n (cutoffUnmet, isSearchingForCutoffUnmetMovies, isSearchingForSelectedCutoffUnmetMovies) => {\r\n return {\r\n isSearchingForCutoffUnmetMovies: isSearchingForCutoffUnmetMovies || isSearchingForSelectedCutoffUnmetMovies,\r\n isSaving: cutoffUnmet.items.filter((m) => m.isSaving).length > 1,\r\n ...cutoffUnmet\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ...wantedActions,\r\n executeCommand,\r\n fetchQueueDetails,\r\n clearQueueDetails,\r\n fetchMovieFiles,\r\n clearMovieFiles\r\n};\r\n\r\nclass CutoffUnmetConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n useCurrentPage,\r\n fetchCutoffUnmet,\r\n gotoCutoffUnmetFirstPage\r\n } = this.props;\r\n\r\n registerPagePopulator(this.repopulate, ['movieUpdated', 'movieFileUpdated', 'movieFileDeleted']);\r\n\r\n if (useCurrentPage) {\r\n fetchCutoffUnmet();\r\n } else {\r\n gotoCutoffUnmetFirstPage();\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (hasDifferentItems(prevProps.items, this.props.items)) {\r\n const movieIds = selectUniqueIds(this.props.items, 'id');\r\n const movieFileIds = selectUniqueIds(this.props.items, 'movieFileId');\r\n\r\n this.props.fetchQueueDetails({ movieIds });\r\n\r\n if (movieFileIds.length) {\r\n this.props.fetchMovieFiles({ movieFileIds });\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n unregisterPagePopulator(this.repopulate);\r\n this.props.clearCutoffUnmet();\r\n this.props.clearQueueDetails();\r\n this.props.clearMovieFiles();\r\n }\r\n\r\n //\r\n // Control\r\n\r\n repopulate = () => {\r\n this.props.fetchCutoffUnmet();\r\n };\r\n //\r\n // Listeners\r\n\r\n onFirstPagePress = () => {\r\n this.props.gotoCutoffUnmetFirstPage();\r\n };\r\n\r\n onPreviousPagePress = () => {\r\n this.props.gotoCutoffUnmetPreviousPage();\r\n };\r\n\r\n onNextPagePress = () => {\r\n this.props.gotoCutoffUnmetNextPage();\r\n };\r\n\r\n onLastPagePress = () => {\r\n this.props.gotoCutoffUnmetLastPage();\r\n };\r\n\r\n onPageSelect = (page) => {\r\n this.props.gotoCutoffUnmetPage({ page });\r\n };\r\n\r\n onSortPress = (sortKey) => {\r\n this.props.setCutoffUnmetSort({ sortKey });\r\n };\r\n\r\n onFilterSelect = (selectedFilterKey) => {\r\n this.props.setCutoffUnmetFilter({ selectedFilterKey });\r\n };\r\n\r\n onTableOptionChange = (payload) => {\r\n this.props.setCutoffUnmetTableOption(payload);\r\n\r\n if (payload.pageSize) {\r\n this.props.gotoCutoffUnmetFirstPage();\r\n }\r\n };\r\n\r\n onSearchSelectedPress = (selected) => {\r\n this.props.executeCommand({\r\n name: commandNames.MOVIE_SEARCH,\r\n movieIds: selected,\r\n commandFinished: this.repopulate\r\n });\r\n };\r\n\r\n onSearchAllCutoffUnmetPress = (monitored) => {\r\n this.props.executeCommand({\r\n name: commandNames.CUTOFF_UNMET_MOVIES_SEARCH,\r\n monitored,\r\n commandFinished: this.repopulate\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCutoffUnmetConnector.propTypes = {\r\n useCurrentPage: PropTypes.bool.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n fetchCutoffUnmet: PropTypes.func.isRequired,\r\n gotoCutoffUnmetFirstPage: PropTypes.func.isRequired,\r\n gotoCutoffUnmetPreviousPage: PropTypes.func.isRequired,\r\n gotoCutoffUnmetNextPage: PropTypes.func.isRequired,\r\n gotoCutoffUnmetLastPage: PropTypes.func.isRequired,\r\n gotoCutoffUnmetPage: PropTypes.func.isRequired,\r\n setCutoffUnmetSort: PropTypes.func.isRequired,\r\n setCutoffUnmetFilter: PropTypes.func.isRequired,\r\n setCutoffUnmetTableOption: PropTypes.func.isRequired,\r\n clearCutoffUnmet: PropTypes.func.isRequired,\r\n executeCommand: PropTypes.func.isRequired,\r\n fetchQueueDetails: PropTypes.func.isRequired,\r\n clearQueueDetails: PropTypes.func.isRequired,\r\n fetchMovieFiles: PropTypes.func.isRequired,\r\n clearMovieFiles: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withCurrentPage(\r\n connect(createMapStateToProps, mapDispatchToProps)(CutoffUnmetConnector)\r\n);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"status\":\"MissingRow-status-okItJ TableRowCell-cell-giPrj\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport RelativeDateCell from 'Components/Table/Cells/RelativeDateCell';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableSelectCell from 'Components/Table/Cells/TableSelectCell';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport movieEntities from 'Movie/movieEntities';\r\nimport MovieSearchCell from 'Movie/MovieSearchCell';\r\nimport MovieStatus from 'Movie/MovieStatus';\r\nimport MovieTitleLink from 'Movie/MovieTitleLink';\r\nimport styles from './MissingRow.css';\r\n\r\nfunction MissingRow(props) {\r\n const {\r\n id,\r\n movieFileId,\r\n year,\r\n title,\r\n titleSlug,\r\n inCinemas,\r\n digitalRelease,\r\n physicalRelease,\r\n lastSearchTime,\r\n isSelected,\r\n columns,\r\n onSelectedChange\r\n } = props;\r\n\r\n if (!title) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n {\r\n columns.map((column) => {\r\n const {\r\n name,\r\n isVisible\r\n } = column;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n if (name === 'movieMetadata.sortTitle') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'movieMetadata.year') {\r\n return (\r\n \r\n {year}\r\n \r\n );\r\n }\r\n\r\n if (name === 'movieMetadata.inCinemas') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'movieMetadata.digitalRelease') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'movieMetadata.physicalRelease') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'movies.lastSearchTime') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'status') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'actions') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return null;\r\n })\r\n }\r\n \r\n );\r\n}\r\n\r\nMissingRow.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n movieFileId: PropTypes.number,\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n lastSearchTime: PropTypes.string,\r\n titleSlug: PropTypes.string.isRequired,\r\n inCinemas: PropTypes.string,\r\n digitalRelease: PropTypes.string,\r\n physicalRelease: PropTypes.string,\r\n isSelected: PropTypes.bool,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onSelectedChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default MissingRow;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport LoadingIndicator from 'Components/Loading/LoadingIndicator';\r\nimport FilterMenu from 'Components/Menu/FilterMenu';\r\nimport ConfirmModal from 'Components/Modal/ConfirmModal';\r\nimport PageContent from 'Components/Page/PageContent';\r\nimport PageContentBody from 'Components/Page/PageContentBody';\r\nimport PageToolbar from 'Components/Page/Toolbar/PageToolbar';\r\nimport PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';\r\nimport PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';\r\nimport PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';\r\nimport TablePager from 'Components/Table/TablePager';\r\nimport { align, icons, kinds } from 'Helpers/Props';\r\nimport InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';\r\nimport getFilterValue from 'Utilities/Filter/getFilterValue';\r\nimport hasDifferentItems from 'Utilities/Object/hasDifferentItems';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport removeOldSelectedState from 'Utilities/Table/removeOldSelectedState';\r\nimport selectAll from 'Utilities/Table/selectAll';\r\nimport toggleSelected from 'Utilities/Table/toggleSelected';\r\nimport MissingRow from './MissingRow';\r\n\r\nfunction getMonitoredValue(props) {\r\n const {\r\n filters,\r\n selectedFilterKey\r\n } = props;\r\n\r\n return getFilterValue(filters, selectedFilterKey, 'monitored', false);\r\n}\r\n\r\nclass Missing extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n allSelected: false,\r\n allUnselected: false,\r\n lastToggled: null,\r\n selectedState: {},\r\n isConfirmSearchAllMissingModalOpen: false,\r\n isInteractiveImportModalOpen: false\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (hasDifferentItems(prevProps.items, this.props.items)) {\r\n this.setState((state) => {\r\n return removeOldSelectedState(state, prevProps.items);\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n getSelectedIds = () => {\r\n return getSelectedIds(this.state.selectedState);\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onSelectAllChange = ({ value }) => {\r\n this.setState(selectAll(this.state.selectedState, value));\r\n };\r\n\r\n onSelectedChange = ({ id, value, shiftKey = false }) => {\r\n this.setState((state) => {\r\n return toggleSelected(state, this.props.items, id, value, shiftKey);\r\n });\r\n };\r\n\r\n onSearchSelectedPress = () => {\r\n const selected = this.getSelectedIds();\r\n\r\n this.props.onSearchSelectedPress(selected);\r\n };\r\n\r\n onToggleSelectedPress = () => {\r\n const movieIds = this.getSelectedIds();\r\n\r\n this.props.batchToggleMissingMovies({\r\n movieIds,\r\n monitored: !getMonitoredValue(this.props)\r\n });\r\n };\r\n\r\n onSearchAllMissingPress = () => {\r\n this.setState({ isConfirmSearchAllMissingModalOpen: true });\r\n };\r\n\r\n onSearchAllMissingConfirmed = () => {\r\n const {\r\n selectedFilterKey,\r\n onSearchAllMissingPress\r\n } = this.props;\r\n\r\n // TODO: Custom filters will need to check whether there is a monitored\r\n // filter once implemented.\r\n\r\n onSearchAllMissingPress(selectedFilterKey === 'monitored');\r\n this.setState({ isConfirmSearchAllMissingModalOpen: false });\r\n };\r\n\r\n onConfirmSearchAllMissingModalClose = () => {\r\n this.setState({ isConfirmSearchAllMissingModalOpen: false });\r\n };\r\n\r\n onInteractiveImportPress = () => {\r\n this.setState({ isInteractiveImportModalOpen: true });\r\n };\r\n\r\n onInteractiveImportModalClose = () => {\r\n this.setState({ isInteractiveImportModalOpen: false });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n selectedFilterKey,\r\n filters,\r\n columns,\r\n totalRecords,\r\n isSearchingForMissingMovies,\r\n isSaving,\r\n onFilterSelect,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n allSelected,\r\n allUnselected,\r\n selectedState,\r\n isConfirmSearchAllMissingModalOpen,\r\n isInteractiveImportModalOpen\r\n } = this.state;\r\n\r\n const itemsSelected = !!this.getSelectedIds().length;\r\n const isShowingMonitored = getMonitoredValue(this.props);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {\r\n isFetching && !isPopulated &&\r\n \r\n }\r\n\r\n {\r\n !isFetching && error &&\r\n \r\n {translate('MissingLoadError')}\r\n \r\n }\r\n\r\n {\r\n isPopulated && !error && !items.length &&\r\n \r\n {translate('MissingNoItems')}\r\n \r\n }\r\n\r\n {\r\n isPopulated && !error && !!items.length &&\r\n
\r\n \r\n \r\n {\r\n items.map((item) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n
\r\n {translate('SearchForAllMissingMoviesConfirmationCount', { totalRecords })}\r\n
\r\n
\r\n {translate('MassSearchCancelWarning')}\r\n
\r\n
\r\n }\r\n confirmLabel={translate('Search')}\r\n onConfirm={this.onSearchAllMissingConfirmed}\r\n onCancel={this.onConfirmSearchAllMissingModalClose}\r\n />\r\n \r\n }\r\n\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nMissing.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n selectedFilterKey: PropTypes.string.isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n totalRecords: PropTypes.number,\r\n isSearchingForMissingMovies: PropTypes.bool.isRequired,\r\n isSaving: PropTypes.bool.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired,\r\n onSearchSelectedPress: PropTypes.func.isRequired,\r\n batchToggleMissingMovies: PropTypes.func.isRequired,\r\n onSearchAllMissingPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Missing;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport * as commandNames from 'Commands/commandNames';\r\nimport withCurrentPage from 'Components/withCurrentPage';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions';\r\nimport * as wantedActions from 'Store/Actions/wantedActions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport hasDifferentItems from 'Utilities/Object/hasDifferentItems';\r\nimport selectUniqueIds from 'Utilities/Object/selectUniqueIds';\r\nimport { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';\r\nimport Missing from './Missing';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.wanted.missing,\r\n createCommandExecutingSelector(commandNames.MISSING_MOVIES_SEARCH),\r\n createCommandExecutingSelector(commandNames.MOVIE_SEARCH),\r\n (missing, isSearchingForMissingMovies, isSearchingForSelectedMissingMovies) => {\r\n return {\r\n isSearchingForMissingMovies: isSearchingForMissingMovies || isSearchingForSelectedMissingMovies,\r\n isSaving: missing.items.filter((m) => m.isSaving).length > 1,\r\n ...missing\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ...wantedActions,\r\n executeCommand,\r\n fetchQueueDetails,\r\n clearQueueDetails\r\n};\r\n\r\nclass MissingConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n useCurrentPage,\r\n fetchMissing,\r\n gotoMissingFirstPage\r\n } = this.props;\r\n\r\n registerPagePopulator(this.repopulate, ['movieFileUpdated', 'movieFileDeleted']);\r\n\r\n if (useCurrentPage) {\r\n fetchMissing();\r\n } else {\r\n gotoMissingFirstPage();\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (hasDifferentItems(prevProps.items, this.props.items)) {\r\n const movieIds = selectUniqueIds(this.props.items, 'id');\r\n this.props.fetchQueueDetails({ movieIds });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n unregisterPagePopulator(this.repopulate);\r\n this.props.clearMissing();\r\n this.props.clearQueueDetails();\r\n }\r\n\r\n //\r\n // Control\r\n\r\n repopulate = () => {\r\n this.props.fetchMissing();\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onFirstPagePress = () => {\r\n this.props.gotoMissingFirstPage();\r\n };\r\n\r\n onPreviousPagePress = () => {\r\n this.props.gotoMissingPreviousPage();\r\n };\r\n\r\n onNextPagePress = () => {\r\n this.props.gotoMissingNextPage();\r\n };\r\n\r\n onLastPagePress = () => {\r\n this.props.gotoMissingLastPage();\r\n };\r\n\r\n onPageSelect = (page) => {\r\n this.props.gotoMissingPage({ page });\r\n };\r\n\r\n onSortPress = (sortKey) => {\r\n this.props.setMissingSort({ sortKey });\r\n };\r\n\r\n onFilterSelect = (selectedFilterKey) => {\r\n this.props.setMissingFilter({ selectedFilterKey });\r\n };\r\n\r\n onTableOptionChange = (payload) => {\r\n this.props.setMissingTableOption(payload);\r\n\r\n if (payload.pageSize) {\r\n this.props.gotoMissingFirstPage();\r\n }\r\n };\r\n\r\n onSearchSelectedPress = (selected) => {\r\n this.props.executeCommand({\r\n name: commandNames.MOVIE_SEARCH,\r\n movieIds: selected,\r\n commandFinished: this.repopulate\r\n });\r\n };\r\n\r\n onSearchAllMissingPress = (monitored) => {\r\n this.props.executeCommand({\r\n name: commandNames.MISSING_MOVIES_SEARCH,\r\n monitored,\r\n commandFinished: this.repopulate\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nMissingConnector.propTypes = {\r\n useCurrentPage: PropTypes.bool.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n fetchMissing: PropTypes.func.isRequired,\r\n gotoMissingFirstPage: PropTypes.func.isRequired,\r\n gotoMissingPreviousPage: PropTypes.func.isRequired,\r\n gotoMissingNextPage: PropTypes.func.isRequired,\r\n gotoMissingLastPage: PropTypes.func.isRequired,\r\n gotoMissingPage: PropTypes.func.isRequired,\r\n setMissingSort: PropTypes.func.isRequired,\r\n setMissingFilter: PropTypes.func.isRequired,\r\n setMissingTableOption: PropTypes.func.isRequired,\r\n clearMissing: PropTypes.func.isRequired,\r\n executeCommand: PropTypes.func.isRequired,\r\n fetchQueueDetails: PropTypes.func.isRequired,\r\n clearQueueDetails: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withCurrentPage(\r\n connect(createMapStateToProps, mapDispatchToProps)(MissingConnector)\r\n);\r\n","import React from 'react';\r\nimport { Redirect, Route } from 'react-router-dom';\r\nimport Blocklist from 'Activity/Blocklist/Blocklist';\r\nimport History from 'Activity/History/History';\r\nimport Queue from 'Activity/Queue/Queue';\r\nimport AddNewMovieConnector from 'AddMovie/AddNewMovie/AddNewMovieConnector';\r\nimport ImportMovies from 'AddMovie/ImportMovie/ImportMovies';\r\nimport CalendarPageConnector from 'Calendar/CalendarPageConnector';\r\nimport CollectionConnector from 'Collection/CollectionConnector';\r\nimport NotFound from 'Components/NotFound';\r\nimport Switch from 'Components/Router/Switch';\r\nimport DiscoverMovieConnector from 'DiscoverMovie/DiscoverMovieConnector';\r\nimport MovieDetailsPage from 'Movie/Details/MovieDetailsPage';\r\nimport MovieIndex from 'Movie/Index/MovieIndex';\r\nimport CustomFormatSettingsPage from 'Settings/CustomFormats/CustomFormatSettingsPage';\r\nimport DownloadClientSettingsConnector from 'Settings/DownloadClients/DownloadClientSettingsConnector';\r\nimport GeneralSettingsConnector from 'Settings/General/GeneralSettingsConnector';\r\nimport ImportListSettingsConnector from 'Settings/ImportLists/ImportListSettingsConnector';\r\nimport IndexerSettingsConnector from 'Settings/Indexers/IndexerSettingsConnector';\r\nimport MediaManagementConnector from 'Settings/MediaManagement/MediaManagementConnector';\r\nimport MetadataSettings from 'Settings/Metadata/MetadataSettings';\r\nimport NotificationSettings from 'Settings/Notifications/NotificationSettings';\r\nimport Profiles from 'Settings/Profiles/Profiles';\r\nimport QualityConnector from 'Settings/Quality/QualityConnector';\r\nimport Settings from 'Settings/Settings';\r\nimport TagSettings from 'Settings/Tags/TagSettings';\r\nimport UISettingsConnector from 'Settings/UI/UISettingsConnector';\r\nimport BackupsConnector from 'System/Backup/BackupsConnector';\r\nimport LogsTableConnector from 'System/Events/LogsTableConnector';\r\nimport Logs from 'System/Logs/Logs';\r\nimport Status from 'System/Status/Status';\r\nimport Tasks from 'System/Tasks/Tasks';\r\nimport Updates from 'System/Updates/Updates';\r\nimport getPathWithUrlBase from 'Utilities/getPathWithUrlBase';\r\nimport CutoffUnmetConnector from 'Wanted/CutoffUnmet/CutoffUnmetConnector';\r\nimport MissingConnector from 'Wanted/Missing/MissingConnector';\r\n\r\nfunction RedirectWithUrlBase() {\r\n return ;\r\n}\r\n\r\nfunction AppRoutes() {\r\n return (\r\n \r\n {/*\r\n Movies\r\n */}\r\n\r\n \r\n\r\n {window.Radarr.urlBase && (\r\n \r\n )}\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n {/*\r\n Calendar\r\n */}\r\n\r\n \r\n\r\n {/*\r\n Activity\r\n */}\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n {/*\r\n Wanted\r\n */}\r\n\r\n \r\n\r\n \r\n\r\n {/*\r\n Settings\r\n */}\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n {/*\r\n System\r\n */}\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n {/*\r\n Not Found\r\n */}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default AppRoutes;\r\n","import { ConnectedRouter, ConnectedRouterProps } from 'connected-react-router';\r\nimport React from 'react';\r\nimport DocumentTitle from 'react-document-title';\r\nimport { Provider } from 'react-redux';\r\nimport { Store } from 'redux';\r\nimport PageConnector from 'Components/Page/PageConnector';\r\nimport ApplyTheme from './ApplyTheme';\r\nimport AppRoutes from './AppRoutes';\r\n\r\ninterface AppProps {\r\n store: Store;\r\n history: ConnectedRouterProps['history'];\r\n}\r\n\r\nfunction App({ store, history }: AppProps) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","import createAjaxRequest from 'Utilities/createAjaxRequest';\r\n\r\n// This file contains some helpers for power users in a browser console\r\n\r\nlet hasWarned = false;\r\n\r\nfunction checkActivationWarning() {\r\n if (!hasWarned) {\r\n console.log('Activated RadarrApi console helpers.');\r\n console.warn('Be warned: There will be no further confirmation checks.');\r\n hasWarned = true;\r\n }\r\n}\r\n\r\nfunction attachAsyncActions(promise) {\r\n promise.filter = function() {\r\n const args = arguments;\r\n const res = this.then((d) => d.filter(...args));\r\n attachAsyncActions(res);\r\n return res;\r\n };\r\n\r\n promise.map = function() {\r\n const args = arguments;\r\n const res = this.then((d) => d.map(...args));\r\n attachAsyncActions(res);\r\n return res;\r\n };\r\n\r\n promise.all = function() {\r\n const res = this.then((d) => Promise.all(d));\r\n attachAsyncActions(res);\r\n return res;\r\n };\r\n\r\n promise.forEach = function(action) {\r\n const res = this.then((d) => Promise.all(d.map(action)));\r\n attachAsyncActions(res);\r\n return res;\r\n };\r\n}\r\n\r\nclass ResourceApi {\r\n constructor(api, url) {\r\n this.api = api;\r\n this.url = url;\r\n }\r\n\r\n single(id) {\r\n return this.api.fetch(`${this.url}/${id}`);\r\n }\r\n\r\n all() {\r\n return this.api.fetch(this.url);\r\n }\r\n\r\n filter(pred) {\r\n return this.all().filter(pred);\r\n }\r\n\r\n update(resource) {\r\n return this.api.fetch(`${this.url}/${resource.id}`, { method: 'PUT', data: resource });\r\n }\r\n\r\n delete(resource) {\r\n if (typeof resource === 'object' && resource !== null && resource.id) {\r\n resource = resource.id;\r\n }\r\n\r\n if (!resource || !Number.isInteger(resource)) {\r\n throw Error('Invalid resource', resource);\r\n }\r\n\r\n return this.api.fetch(`${this.url}/${resource}`, { method: 'DELETE' });\r\n }\r\n\r\n fetch(url, options) {\r\n return this.api.fetch(`${this.url}${url}`, options);\r\n }\r\n}\r\n\r\nclass ConsoleApi {\r\n constructor() {\r\n this.movie = new ResourceApi(this, '/movie');\r\n }\r\n\r\n resource(url) {\r\n return new ResourceApi(this, url);\r\n }\r\n\r\n fetch(url, options) {\r\n checkActivationWarning();\r\n\r\n options = options || {};\r\n\r\n const req = {\r\n url,\r\n method: options.method || 'GET'\r\n };\r\n\r\n if (options.data) {\r\n req.dataType = 'json';\r\n req.data = JSON.stringify(options.data);\r\n }\r\n\r\n const promise = createAjaxRequest(req).request;\r\n\r\n promise.fail((xhr) => {\r\n console.error(`Failed to fetch ${url}`, xhr);\r\n });\r\n\r\n attachAsyncActions(promise);\r\n\r\n return promise;\r\n }\r\n}\r\n\r\nwindow.RadarrApi = new ConsoleApi();\r\n\r\nexport default ConsoleApi;\r\n","import { createBrowserHistory } from 'history';\r\nimport React from 'react';\r\nimport { createRoot } from 'react-dom/client';\r\nimport createAppStore from 'Store/createAppStore';\r\nimport App from './App/App';\r\n\r\nimport 'Diag/ConsoleApi';\r\n\r\nexport async function bootstrap() {\r\n const history = createBrowserHistory();\r\n const store = createAppStore(history);\r\n const container = document.getElementById('root');\r\n\r\n const root = createRoot(container!); // createRoot(container!) if you use TypeScript\r\n root.render();\r\n}\r\n","var map = {\n\t\"./af\": 25177,\n\t\"./af.js\": 25177,\n\t\"./ar\": 61509,\n\t\"./ar-dz\": 41488,\n\t\"./ar-dz.js\": 41488,\n\t\"./ar-kw\": 58676,\n\t\"./ar-kw.js\": 58676,\n\t\"./ar-ly\": 42353,\n\t\"./ar-ly.js\": 42353,\n\t\"./ar-ma\": 24496,\n\t\"./ar-ma.js\": 24496,\n\t\"./ar-ps\": 6947,\n\t\"./ar-ps.js\": 6947,\n\t\"./ar-sa\": 82682,\n\t\"./ar-sa.js\": 82682,\n\t\"./ar-tn\": 89756,\n\t\"./ar-tn.js\": 89756,\n\t\"./ar.js\": 61509,\n\t\"./az\": 95533,\n\t\"./az.js\": 95533,\n\t\"./be\": 28959,\n\t\"./be.js\": 28959,\n\t\"./bg\": 47777,\n\t\"./bg.js\": 47777,\n\t\"./bm\": 54903,\n\t\"./bm.js\": 54903,\n\t\"./bn\": 61290,\n\t\"./bn-bd\": 17357,\n\t\"./bn-bd.js\": 17357,\n\t\"./bn.js\": 61290,\n\t\"./bo\": 31545,\n\t\"./bo.js\": 31545,\n\t\"./br\": 11470,\n\t\"./br.js\": 11470,\n\t\"./bs\": 44429,\n\t\"./bs.js\": 44429,\n\t\"./ca\": 7306,\n\t\"./ca.js\": 7306,\n\t\"./cs\": 56464,\n\t\"./cs.js\": 56464,\n\t\"./cv\": 73635,\n\t\"./cv.js\": 73635,\n\t\"./cy\": 64226,\n\t\"./cy.js\": 64226,\n\t\"./da\": 93601,\n\t\"./da.js\": 93601,\n\t\"./de\": 77853,\n\t\"./de-at\": 26111,\n\t\"./de-at.js\": 26111,\n\t\"./de-ch\": 54697,\n\t\"./de-ch.js\": 54697,\n\t\"./de.js\": 77853,\n\t\"./dv\": 60708,\n\t\"./dv.js\": 60708,\n\t\"./el\": 54691,\n\t\"./el.js\": 54691,\n\t\"./en-au\": 53872,\n\t\"./en-au.js\": 53872,\n\t\"./en-ca\": 28298,\n\t\"./en-ca.js\": 28298,\n\t\"./en-gb\": 56195,\n\t\"./en-gb.js\": 56195,\n\t\"./en-ie\": 66584,\n\t\"./en-ie.js\": 66584,\n\t\"./en-il\": 65543,\n\t\"./en-il.js\": 65543,\n\t\"./en-in\": 9033,\n\t\"./en-in.js\": 9033,\n\t\"./en-nz\": 79402,\n\t\"./en-nz.js\": 79402,\n\t\"./en-sg\": 43004,\n\t\"./en-sg.js\": 43004,\n\t\"./eo\": 32934,\n\t\"./eo.js\": 32934,\n\t\"./es\": 97650,\n\t\"./es-do\": 20838,\n\t\"./es-do.js\": 20838,\n\t\"./es-mx\": 17730,\n\t\"./es-mx.js\": 17730,\n\t\"./es-us\": 56575,\n\t\"./es-us.js\": 56575,\n\t\"./es.js\": 97650,\n\t\"./et\": 3035,\n\t\"./et.js\": 3035,\n\t\"./eu\": 3508,\n\t\"./eu.js\": 3508,\n\t\"./fa\": 119,\n\t\"./fa.js\": 119,\n\t\"./fi\": 90527,\n\t\"./fi.js\": 90527,\n\t\"./fil\": 95995,\n\t\"./fil.js\": 95995,\n\t\"./fo\": 52477,\n\t\"./fo.js\": 52477,\n\t\"./fr\": 85498,\n\t\"./fr-ca\": 26435,\n\t\"./fr-ca.js\": 26435,\n\t\"./fr-ch\": 37892,\n\t\"./fr-ch.js\": 37892,\n\t\"./fr.js\": 85498,\n\t\"./fy\": 37071,\n\t\"./fy.js\": 37071,\n\t\"./ga\": 41734,\n\t\"./ga.js\": 41734,\n\t\"./gd\": 70217,\n\t\"./gd.js\": 70217,\n\t\"./gl\": 77329,\n\t\"./gl.js\": 77329,\n\t\"./gom-deva\": 32124,\n\t\"./gom-deva.js\": 32124,\n\t\"./gom-latn\": 93383,\n\t\"./gom-latn.js\": 93383,\n\t\"./gu\": 95050,\n\t\"./gu.js\": 95050,\n\t\"./he\": 11713,\n\t\"./he.js\": 11713,\n\t\"./hi\": 43861,\n\t\"./hi.js\": 43861,\n\t\"./hr\": 26308,\n\t\"./hr.js\": 26308,\n\t\"./hu\": 90609,\n\t\"./hu.js\": 90609,\n\t\"./hy-am\": 17160,\n\t\"./hy-am.js\": 17160,\n\t\"./id\": 74063,\n\t\"./id.js\": 74063,\n\t\"./is\": 89374,\n\t\"./is.js\": 89374,\n\t\"./it\": 88383,\n\t\"./it-ch\": 21827,\n\t\"./it-ch.js\": 21827,\n\t\"./it.js\": 88383,\n\t\"./ja\": 23827,\n\t\"./ja.js\": 23827,\n\t\"./jv\": 89722,\n\t\"./jv.js\": 89722,\n\t\"./ka\": 41794,\n\t\"./ka.js\": 41794,\n\t\"./kk\": 27088,\n\t\"./kk.js\": 27088,\n\t\"./km\": 96870,\n\t\"./km.js\": 96870,\n\t\"./kn\": 84451,\n\t\"./kn.js\": 84451,\n\t\"./ko\": 63164,\n\t\"./ko.js\": 63164,\n\t\"./ku\": 98174,\n\t\"./ku-kmr\": 6181,\n\t\"./ku-kmr.js\": 6181,\n\t\"./ku.js\": 98174,\n\t\"./ky\": 78474,\n\t\"./ky.js\": 78474,\n\t\"./lb\": 79680,\n\t\"./lb.js\": 79680,\n\t\"./lo\": 15867,\n\t\"./lo.js\": 15867,\n\t\"./lt\": 45766,\n\t\"./lt.js\": 45766,\n\t\"./lv\": 69532,\n\t\"./lv.js\": 69532,\n\t\"./me\": 58076,\n\t\"./me.js\": 58076,\n\t\"./mi\": 41848,\n\t\"./mi.js\": 41848,\n\t\"./mk\": 30306,\n\t\"./mk.js\": 30306,\n\t\"./ml\": 73739,\n\t\"./ml.js\": 73739,\n\t\"./mn\": 99053,\n\t\"./mn.js\": 99053,\n\t\"./mr\": 86169,\n\t\"./mr.js\": 86169,\n\t\"./ms\": 73386,\n\t\"./ms-my\": 92297,\n\t\"./ms-my.js\": 92297,\n\t\"./ms.js\": 73386,\n\t\"./mt\": 77075,\n\t\"./mt.js\": 77075,\n\t\"./my\": 72264,\n\t\"./my.js\": 72264,\n\t\"./nb\": 22274,\n\t\"./nb.js\": 22274,\n\t\"./ne\": 8235,\n\t\"./ne.js\": 8235,\n\t\"./nl\": 92572,\n\t\"./nl-be\": 43784,\n\t\"./nl-be.js\": 43784,\n\t\"./nl.js\": 92572,\n\t\"./nn\": 54566,\n\t\"./nn.js\": 54566,\n\t\"./oc-lnc\": 69330,\n\t\"./oc-lnc.js\": 69330,\n\t\"./pa-in\": 29849,\n\t\"./pa-in.js\": 29849,\n\t\"./pl\": 94418,\n\t\"./pl.js\": 94418,\n\t\"./pt\": 79834,\n\t\"./pt-br\": 48303,\n\t\"./pt-br.js\": 48303,\n\t\"./pt.js\": 79834,\n\t\"./ro\": 24457,\n\t\"./ro.js\": 24457,\n\t\"./ru\": 82271,\n\t\"./ru.js\": 82271,\n\t\"./sd\": 1221,\n\t\"./sd.js\": 1221,\n\t\"./se\": 33478,\n\t\"./se.js\": 33478,\n\t\"./si\": 17538,\n\t\"./si.js\": 17538,\n\t\"./sk\": 5784,\n\t\"./sk.js\": 5784,\n\t\"./sl\": 46637,\n\t\"./sl.js\": 46637,\n\t\"./sq\": 86794,\n\t\"./sq.js\": 86794,\n\t\"./sr\": 45719,\n\t\"./sr-cyrl\": 3322,\n\t\"./sr-cyrl.js\": 3322,\n\t\"./sr.js\": 45719,\n\t\"./ss\": 56000,\n\t\"./ss.js\": 56000,\n\t\"./sv\": 41011,\n\t\"./sv.js\": 41011,\n\t\"./sw\": 40748,\n\t\"./sw.js\": 40748,\n\t\"./ta\": 11025,\n\t\"./ta.js\": 11025,\n\t\"./te\": 11885,\n\t\"./te.js\": 11885,\n\t\"./tet\": 28861,\n\t\"./tet.js\": 28861,\n\t\"./tg\": 86571,\n\t\"./tg.js\": 86571,\n\t\"./th\": 55802,\n\t\"./th.js\": 55802,\n\t\"./tk\": 59527,\n\t\"./tk.js\": 59527,\n\t\"./tl-ph\": 29231,\n\t\"./tl-ph.js\": 29231,\n\t\"./tlh\": 31052,\n\t\"./tlh.js\": 31052,\n\t\"./tr\": 85096,\n\t\"./tr.js\": 85096,\n\t\"./tzl\": 79846,\n\t\"./tzl.js\": 79846,\n\t\"./tzm\": 81765,\n\t\"./tzm-latn\": 97711,\n\t\"./tzm-latn.js\": 97711,\n\t\"./tzm.js\": 81765,\n\t\"./ug-cn\": 48414,\n\t\"./ug-cn.js\": 48414,\n\t\"./uk\": 16618,\n\t\"./uk.js\": 16618,\n\t\"./ur\": 57777,\n\t\"./ur.js\": 57777,\n\t\"./uz\": 57609,\n\t\"./uz-latn\": 72475,\n\t\"./uz-latn.js\": 72475,\n\t\"./uz.js\": 57609,\n\t\"./vi\": 21135,\n\t\"./vi.js\": 21135,\n\t\"./x-pseudo\": 64051,\n\t\"./x-pseudo.js\": 64051,\n\t\"./yo\": 82218,\n\t\"./yo.js\": 82218,\n\t\"./zh-cn\": 52648,\n\t\"./zh-cn.js\": 52648,\n\t\"./zh-hk\": 1632,\n\t\"./zh-hk.js\": 1632,\n\t\"./zh-mo\": 31541,\n\t\"./zh-mo.js\": 31541,\n\t\"./zh-tw\": 50304,\n\t\"./zh-tw.js\": 50304\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 35358;"],"names":["radarrYellow","white","module","exports","textColor","defaultColor","disabledColor","dimColor","black","offWhite","primaryColor","selectedColor","successColor","dangerColor","warningColor","infoColor","queueColor","purple","pink","helpTextColor","darkGray","gray","lightGray","mediumGray","themeBlue","themeAlternateYellow","themeRed","themeDarkColor","themeLightColor","pageBackground","pageFooterBackgroud","torrentColor","usenetColor","inverseLabelColor","inverseLabelTextColor","disabledLabelColor","infoTextColor","defaultLinkHoverColor","linkColor","linkHoverColor","pageHeaderBackgroundColor","sidebarColor","sidebarBackgroundColor","sidebarActiveBackgroundColor","toolbarColor","toolbarBackgroundColor","toolbarMenuItemBackgroundColor","toolbarMenuItemHoverBackgroundColor","toolbarLabelColor","borderColor","inputBorderColor","inputBoxShadowColor","inputFocusBorderColor","inputFocusBoxShadowColor","inputErrorBorderColor","inputErrorBoxShadowColor","inputWarningBorderColor","inputWarningBoxShadowColor","colorImpairedGradient","colorImpairedGradientDark","colorImpairedDangerGradient","colorImpairedWarningGradient","colorImpairedPrimaryGradient","colorImpairedGrayGradient","defaultButtonTextColor","defaultBackgroundColor","defaultBorderColor","defaultHoverBackgroundColor","defaultHoverBorderColor","primaryBackgroundColor","primaryBorderColor","primaryHoverBackgroundColor","primaryHoverBorderColor","successBackgroundColor","successBorderColor","successHoverBackgroundColor","successHoverBorderColor","warningBackgroundColor","warningBorderColor","warningHoverBackgroundColor","warningHoverBorderColor","dangerBackgroundColor","dangerBorderColor","dangerHoverBackgroundColor","dangerHoverBorderColor","iconButtonDisabledColor","iconButtonHoverColor","iconButtonHoverLightColor","modalBackdropBackgroundColor","modalBackgroundColor","modalCloseButtonHoverColor","menuItemColor","menuItemHoverColor","menuItemHoverBackgroundColor","toobarButtonHoverColor","toobarButtonSelectedColor","scrollbarBackgroundColor","scrollbarHoverBackgroundColor","cardBackgroundColor","cardShadowColor","cardAlternateBackgroundColor","cardCenterBackgroundColor","alertDangerBorderColor","alertDangerBackgroundColor","alertDangerColor","alertInfoBorderColor","alertInfoBackgroundColor","alertInfoColor","alertSuccessBorderColor","alertSuccessBackgroundColor","alertSuccessColor","alertWarningBorderColor","alertWarningBackgroundColor","alertWarningColor","sliderAccentColor","inputBackgroundColor","inputReadOnlyBackgroundColor","inputHoverBackgroundColor","inputSelectedBackgroundColor","advancedFormLabelColor","disabledCheckInputColor","disabledInputColor","popoverTitleBackgroundColor","popoverTitleBorderColor","popoverBodyBackgroundColor","popoverShadowColor","popoverArrowBorderColor","popoverTitleBackgroundInverseColor","popoverTitleBorderInverseColor","popoverShadowInverseColor","popoverArrowBorderInverseColor","calendarTodayBackgroundColor","calendarBackgroundColor","calendarBorderColor","calendarTextDim","calendarTextDimAlternate","calendarFullColorFilter","tableRowHoverBackgroundColor","addMovieBackgroundColor","movieBackgroundColor","searchIconContainerBackgroundColor","progressBarFrontTextColor","progressBarBackTextColor","progressBarBackgroundColor","logEventsBackgroundColor","pageContentBodyPadding","pageContentBodyPaddingSmallScreen","headerHeight","sidebarWidth","toolbarHeight","toolbarButtonWidth","toolbarSeparatorMargin","breakpointExtraSmall","breakpointSmall","breakpointMedium","breakpointLarge","breakpointExtraLarge","formGroupExtraSmallWidth","formGroupSmallWidth","formGroupMediumWidth","formGroupLargeWidth","formLabelSmallWidth","formLabelLargeWidth","formLabelRightMarginWidth","dragHandleWidth","qualityProfileItemHeight","qualityProfileItemDragSourcePadding","progressBarSmallHeight","progressBarMediumHeight","progressBarLargeHeight","jumpBarItemHeight","modalBodyPadding","movieIndexColumnPadding","movieIndexColumnPaddingSmallScreen","movieIndexOverviewInfoRowHeight","defaultFontFamily","monoSpaceFontFamily","extraSmallFontSize","smallFontSize","defaultFontSize","intermediateFontSize","largeFontSize","lineHeight","thunks","identity","payload","createThunk","type","identityFunction","dispatch","getState","thunk","Error","handleThunks","handlers","Object","keys","forEach","absUrlRegex","apiRoot","window","Radarr","createAjaxRequest","originalAjaxOptions","requestXHR","XMLHttpRequest","aborted","complete","ajaxOptions","test","url","isRelative","addRootUrl","headers","apiKey","addApiKey","contentType","dataType","method","addContentType","request","$","xhr","then","textStatus","errorThrown","reject","promise","always","abortRequest","abort","movie","rootFolderPath","monitor","qualityProfileId","minimumAvailability","tags","searchForMovie","addOptions","monitored","state","section","isFullStateTree","_","subSection","split","assign","hasOwnProperty","newState","SET","UPDATE","UPDATE_ITEM","UPDATE_SERVER_SIDE_COLLECTION","CLEAR_PENDING_CHANGES","REMOVE_ITEM","set","createAction","update","updateItem","updateServerSideCollection","clearPendingChanges","removeItem","omittedProperties","createItemMap","data","reduce","acc","d","index","id","createHandleActions","defaultState","handleActions","_ref","payloadSection","baseSection","getSectionState","updateSectionState","_ref2","items","itemMap","item","_ref3","updateOnly","otherProps","_newState$itemMap","newItem","splice","newIndex","push","_ref4","pendingChanges","saveError","_ref5","_ref6","serverState","calculatedState","totalPages","Math","max","ceil","totalRecords","pageSize","records","name","value","currentValue","pendingState","parsedValue","parseInt","abortCurrentRequest","isFetching","isPopulated","error","isAdding","isAdded","addError","defaults","persistState","LOOKUP_MOVIE","ADD_MOVIE","SET_ADD_MOVIE_VALUE","CLEAR_ADD_MOVIE","SET_ADD_MOVIE_DEFAULT","lookupMovie","addMovie","clearAddMovie","setAddMovieDefault","setAddMovieValue","actionHandlers","term","done","map","internalId","tmdbId","batchActions","fail","newMovie","getNewMovie","JSON","stringify","updatedItem","images","actions","collection","collectionToUpdate","movieCollections","find","collectionData","missingMovies","reducers","createSetSettingValueReducer","view","otherDefaultState","translations","translate","key","tokens","isProduction","console","warn","translation","appName","values","replace","match","tokenMatch","_tokens$tokenMatch","String","getDimensions","width","height","isExtraSmallScreen","isSmallScreen","isMediumScreen","isLargeScreen","messagesSection","abortPingServer","pingTimeout","dimensions","innerWidth","innerHeight","messages","version","isUpdated","isConnected","isReconnecting","isDisconnected","isRestarting","isSidebarVisible","SHOW_MESSAGE","HIDE_MESSAGE","SAVE_DIMENSIONS","SET_VERSION","SET_APP_VALUE","SET_IS_SIDEBAR_VISIBLE","FETCH_TRANSLATIONS","PING_SERVER","saveDimensions","setVersion","setIsSidebarVisible","setAppValue","showMessage","hideMessage","pingServer","fetchTranslations","pingServerAfterTimeout","clearTimeout","setTimeout","status","async","isFetchingComplete","Promise","global","Strings","resolve","fetchAppTranslations","prevVersion","LEFT","CENTER","RIGHT","CONTAINS","EQUAL","GREATER_THAN","GREATER_THAN_OR_EQUAL","IN_LAST","NOT_IN_LAST","IN_NEXT","NOT_IN_NEXT","LESS_THAN","LESS_THAN_OR_EQUAL","NOT_CONTAINS","NOT_EQUAL","STARTS_WITH","NOT_STARTS_WITH","ENDS_WITH","NOT_ENDS_WITH","ARRAY","DATE","EXACT","NUMBER","STRING","possibleFilterTypes","filterTypes","BOOL","BYTES","HISTORY_EVENT_TYPE","INDEXER","LANGUAGE","PROTOCOL","QUALITY","QUALITY_PROFILE","QUEUE_STATUS","MOVIE","RELEASE_STATUS","MINIMUM_AVAILABILITY","TAG","IMPORTLIST","itemValue","filterValue","Array","isArray","some","v","toLowerCase","contains","startsWith","endsWith","ACTIVITY","farClock","ADD","fasPlus","ADVANCED_SETTINGS","fasCog","ANNOUNCED","fasBullhorn","ARROW_LEFT","fasArrowCircleLeft","ARROW_RIGHT","fasArrowCircleRight","BACKUP","farFileArchive","BUG","fasBug","CALENDAR","fasCalendarAlt","CALENDAR_O","farCalendar","CARET_DOWN","fasCaretDown","CHECK","fasCheck","CHECK_INDETERMINATE","fasMinus","CHECK_CIRCLE","fasCheckCircle","CHECK_SQUARE","fasSquareCheck","CIRCLE","fasCircle","CIRCLE_DOWN","fasCircleDown","CIRCLE_OUTLINE","farCircle","CLEAR","fasTrashAlt","CLIPBOARD","fasCopy","CLOSE","fasTimes","CLONE","farClone","COMPUTER","fasDesktop","DANGER","fasExclamationCircle","DELETE","DISC","fasCompactDisc","DOWNLOAD","fasDownload","DOWNLOADED","DOWNLOADING","fasCloudDownloadAlt","DRIVE","farHdd","EDIT","fasWrench","MOVIE_FILE","farFileVideo","EXPORT","fasFileExport","EXTERNAL_LINK","fasExternalLinkAlt","FATAL","fasTimesCircle","FILE","farFile","FILE_MISSING","fasFileCircleQuestion","FILM","fasFilm","FILTER","fasFilter","FLAG","fasFlag","FOLDER","farFolder","FOLDER_OPEN","fasFolderOpen","GENRE","fasTheaterMasks","GROUP","farObjectGroup","HEALTH","fasMedkit","HEART","fasHeart","HEART_OUTLINE","farHeart","HISTORY","fasHistory","HOUSEKEEPING","fasHome","IGNORE","IMDB","fabImdb","IN_CINEMAS","fasTicketAlt","INFO","fasInfoCircle","INTERACTIVE","fasUser","KEYBOARD","farKeyboard","fasLanguage","LOGOUT","fasSignOutAlt","MANAGE","fasListCheck","MEDIA_INFO","farFileInvoice","MISSING","fasExclamationTriangle","MONITORED","fasBookmark","NAVBAR_COLLAPSE","fasBars","NOT_AIRED","ORGANIZE","fasSitemap","OVERFLOW","fasEllipsisH","OVERVIEW","fasThList","PAGE_FIRST","fasFastBackward","PAGE_PREVIOUS","fasBackward","PAGE_NEXT","fasForward","PAGE_LAST","fasFastForward","PARENT","fasLevelUpAlt","PARSE","fasCalculator","PAUSED","fasPause","PENDING","PROFILE","POPULAR","fasFire","POSTER","fasTh","QUEUED","fasCloud","QUICK","fasRocket","RECOMMENDED","fasThumbsUp","REFRESH","fasSync","REMOVE","RESTART","fasRedoAlt","RESTORE","REORDER","RSS","fasRss","SAVE","fasSave","SCHEDULED","SCORE","fasUserPlus","SEARCH","fasSearch","MOVIE_CONTINUING","fasPlay","SERIES_ENDED","fasStop","MOVIE_DELETED","SETTINGS","fasCogs","SHUTDOWN","fasPowerOff","SORT","fasSort","SORT_ASCENDING","fasSortUp","SORT_DESCENDING","fasSortDown","SPINNER","fasSpinner","SQUARE","farSquare","SQUARE_MINUS","fasSquareMinus","STUDIO","fasBuilding","SUBTRACT","SYSTEM","fasLaptop","TABLE","fasTable","TAGS","fasTags","TEST","fasVial","TRANSLATE","TRENDING","fasArrowTrendUp","UNGROUP","farObjectUngroup","UNKNOWN","fasQuestion","UNMONITORED","farBookmark","fasRetweet","VIEW","fasEye","WARNING","WIKI","fasBookReader","BLOCKLIST","fasBan","AUTO_COMPLETE","AVAILABILITY_SELECT","CAPTCHA","DEVICE","KEY_VALUE_LIST","MOVIE_MONITORED_SELECT","OAUTH","PASSWORD","PATH","QUALITY_PROFILE_SELECT","INDEXER_SELECT","ROOT_FOLDER_SELECT","INDEXER_FLAGS_SELECT","LANGUAGE_SELECT","DOWNLOAD_CLIENT_SELECT","SELECT","MOVIE_TAG","DYNAMIC_SELECT","TEXT","TEXT_AREA","TEXT_TAG","TAG_SELECT","UMASK","DEFAULT","DISABLED","INVERSE","PRIMARY","PURPLE","SUCCESS","NONE","BOTH","HORIZONTAL","EXTRA_SMALL","SMALL","MEDIUM","LARGE","EXTRA_LARGE","EXTRA_EXTRA_LARGE","ASCENDING","DESCENDING","TOP","BOTTOM","queryParams","isDeleting","deleteError","findSelectedFilters","selectedFilterKey","filters","customFilters","selectedFilter","f","page","fetchHandler","sectionState","currentPage","nextPage","pages","fetchThunk","fetchDataAugmenter","fetchHandlerType","serverSideCollectionHandlers","filter","customFilter","traditional","response","createFetchServerSideCollectionHandler","createSetServerSideCollectionPageHandler","sortKey","sortDirection","sortDirections","createSetServerSideCollectionSortHandler","createSetServerSideCollectionFilterHandler","whitelistedProperties","isRemoving","columns","label","isSortable","isVisible","columnLabel","isModifiable","filterBuilderProps","filterBuilderTypes","valueType","filterBuilderValueTypes","FETCH_BLOCKLIST","GOTO_BLOCKLIST_PAGE","SET_BLOCKLIST_SORT","SET_BLOCKLIST_FILTER","SET_BLOCKLIST_TABLE_OPTION","REMOVE_BLOCKLIST_ITEM","REMOVE_BLOCKLIST_ITEMS","CLEAR_BLOCKLIST","fetchBlocklist","gotoBlocklistPage","setBlocklistSort","setBlocklistFilter","setBlocklistTableOption","removeBlocklistItem","removeBlocklistItems","clearBlocklist","createServerSideCollectionHandlers","createRemoveItemHandler","ids","createSetTableOptionReducer","createClearReducer","DAY","WEEK","MONTH","FORECAST","AGENDA","APPLICATION_UPDATE","REFRESH_MONITORED_DOWNLOADS","CLEAR_LOGS","CUTOFF_UNMET_MOVIES_SEARCH","DELETE_LOG_FILES","DELETE_UPDATE_LOG_FILES","MISSING_MOVIES_SEARCH","REFRESH_COLLECTIONS","REFRESH_MOVIE","RENAME_FILES","RENAME_MOVIE","RESET_API_KEY","RESET_QUALITY_DEFINITIONS","RSS_SYNC","MOVIE_SEARCH","IMPORT_LIST_SYNC","commandA","commandB","toLocaleLowerCase","length","commands","options","command","isSameCommand","body","createFetchHandler","otherPayload","lastCommand","lastCommandTimeout","removeCommandTimeoutIds","commandFinishedCallbacks","FETCH_COMMANDS","EXECUTE_COMMAND","CANCEL_COMMAND","ADD_COMMAND","UPDATE_COMMAND","FINISH_COMMAND","REMOVE_COMMAND","fetchCommands","executeCommand","cancelCommand","addCommand","updateCommand","finishCommand","removeCommand","showCommandMessage","trigger","message","sendUpdatesToClient","suppressMessages","hideAfter","scheduleRemoveCommand","timeoutId","executeCommandHelper","commandFinished","requestPayload","handler","viewRanges","calendarViews","start","end","dates","dayCount","searchMissingCommandId","showMovieInformation","showCutoffUnmetIcon","fullColorEvents","FETCH_CALENDAR","SET_CALENDAR_DAYS_COUNT","SET_CALENDAR_FILTER","SET_CALENDAR_VIEW","GOTO_CALENDAR_TODAY","GOTO_CALENDAR_NEXT_RANGE","CLEAR_CALENDAR","SET_CALENDAR_OPTION","SEARCH_MISSING","GOTO_CALENDAR_PREVIOUS_RANGE","getDays","startTime","moment","difference","diff","i","clone","add","toISOString","getPopulatableRange","startDate","endDate","subtract","fetchCalendar","setCalendarDaysCount","setCalendarFilter","setCalendarView","gotoCalendarToday","gotoCalendarPreviousRange","gotoCalendarNextRange","clearCalendar","setCalendarOption","searchMissing","_requestParams$unmoni","calendar","getCustomFilters","selectedFilters","time","firstDayOfWeek","weekName","startOf","endOf","getDates","settings","ui","isPrePopulated","currentStart","currentEnd","currentView","currentPopulatedStart","currentPopulatedEnd","isAfter","isBefore","isRangePopulated","basesAttrs","attrs","requestParams","unmonitored","includes","join","amount","movieIds","commandNames","flattenProviderData","providerData","result","property","provider","action","refreshing","token","siteKey","secretToken","ray","stoken","responseUrl","REFRESH_CAPTCHA","GET_CAPTCHA_COOKIE","SET_CAPTCHA_VALUE","RESET_CAPTCHA","refreshCaptcha","getCaptchaCookie","setCaptchaValue","resetCaptcha","actionPayload","requestAction","captchaRequest","captcha","captchaResponse","captchaToken","keyValueOnly","pendingFields","fields","selectedSchema","schema","field","presets","abortCurrentRequests","lastSaveData","createCancelSaveProviderHandler","isSaving","saveData","getProviderState","requestUrl","params","forceSave","FETCH_CUSTOM_FILTERS","SAVE_CUSTOM_FILTER","DELETE_CUSTOM_FILTER","fetchCustomFilters","saveCustomFilter","deleteCustomFilter","createSaveProviderHandler","a","b","localeCompare","undefined","numeric","date","offsets","offsetTime","input","paddingCharacter","filterPredicates","added","dateFilterPredicate","predicate","filterTypePredicates","title","originalLanguage","releaseGroups","statistics","sizeOnDisk","inCinemas","physicalRelease","digitalRelease","releaseDate","tmdbRating","ratings","tmdb","tmdbVotes","votes","imdbRating","imdb","imdbVotes","rottenTomatoesRating","rottenTomatoes","traktRating","trakt","traktVotes","_ref7","qualityCutoffNotMet","movieFile","sortPredicates","movieStatus","qualityName","hasMovieFile","isAvailable","quality","padNumber","toString","year","direction","unix","Number","MAX_VALUE","deleteOptions","addImportExclusion","FETCH_MOVIES","SET_MOVIE_VALUE","SAVE_MOVIE","DELETE_MOVIE","SAVE_MOVIE_EDITOR","BULK_DELETE_MOVIE","SET_DELETE_OPTION","TOGGLE_MOVIE_MONITORED","fetchMovies","saveMovie","newPayload","moveFiles","deleteMovie","deleteFiles","toggleMovieMonitored","saveMovieEditor","bulkDeleteMovie","setMovieValue","setDeleteOption","getAjaxOptions","_ref8","moveFolder","collectionTmdbId","movies","movieId","_ref9","secondarySortKey","secondarySortDirection","includeRecommendations","includeTrending","includePopular","posterOptions","size","showTitle","showTmdbRating","showImdbRating","showRottenTomatoesRating","showTraktRating","overviewOptions","showYear","showStudio","showGenres","showCertification","tableOptions","isExcluded","studio","optionsSelector","sort","sortByProp","genres","genre","ADD_MOVIES","FETCH_DISCOVER_MOVIES","SET_LIST_MOVIE_SORT","SET_LIST_MOVIE_FILTER","SET_LIST_MOVIE_VIEW","SET_LIST_MOVIE_OPTION","SET_LIST_MOVIE_TABLE_OPTION","SET_LIST_MOVIE_POSTER_OPTION","SET_LIST_MOVIE_OVERVIEW_OPTION","ADD_IMPORT_LIST_EXCLUSIONS","addMovies","fetchDiscoverMovies","setListMovieSort","setListMovieFilter","setListMovieView","setListMovieOption","setListMovieTableOption","setListMoviePosterOption","setListMovieOverviewOption","addImportListExclusions","discoverMovie","itemToUpdate","lists","isExisting","addedIds","allNewMovies","selectedMovie","exclusions","newExclusion","movieTitle","movieYear","createSetClientSideCollectionSortReducer","createSetClientSideCollectionFilterReducer","discoveryMovieOptions","FETCH_EXTRA_FILES","CLEAR_EXTRA_FILES","fetchExtraFiles","clearExtraFiles","Icon","containerClassName","className","kind","kinds","isSpinning","fixedWidth","icon","React","FontAwesomeIcon","_extends","classNames","styles","spin","style","fontSize","icons","FETCH_HISTORY","GOTO_FIRST_HISTORY_PAGE","GOTO_PREVIOUS_HISTORY_PAGE","GOTO_NEXT_HISTORY_PAGE","GOTO_LAST_HISTORY_PAGE","GOTO_HISTORY_PAGE","SET_HISTORY_SORT","SET_HISTORY_FILTER","SET_HISTORY_TABLE_OPTION","CLEAR_HISTORY","MARK_AS_FAILED","fetchHistory","gotoHistoryFirstPage","gotoHistoryPreviousPage","gotoHistoryNextPage","gotoHistoryLastPage","gotoHistoryPage","setHistorySort","setHistoryFilter","setHistoryTableOption","clearHistory","markAsFailed","isMarkingAsFailed","markAsFailedError","FETCH_ROOT_FOLDERS","ADD_ROOT_FOLDER","DELETE_ROOT_FOLDER","fetchRootFolders","addRootFolder","deleteRootFolder","path","concurrentLookups","abortCurrentLookup","queue","isLookingUpMovie","isImporting","isImported","importError","QUEUE_LOOKUP_MOVIE","START_LOOKUP_MOVIE","CANCEL_LOOKUP_MOVIE","LOOKUP_UNSEARCHED_MOVIES","CLEAR_IMPORT_MOVIE","SET_IMPORT_MOVIE_VALUE","IMPORT_MOVIE","queueLookupMovie","startLookupMovie","importMovie","lookupUnsearchedMovies","clearImportMovie","cancelLookupMovie","setImportMovieValue","relativePath","topOfQueue","isQueued","itemIndex","indexOf","unshift","queueId","queued","findIndex","regex","currentIds","isReprocessing","originalItems","favoriteFolders","recentFolders","importMode","n","padStart","sortTitle","qualityWeight","customFormats","customFormatScore","FETCH_INTERACTIVE_IMPORT_ITEMS","REPROCESS_INTERACTIVE_IMPORT_ITEMS","SET_INTERACTIVE_IMPORT_SORT","UPDATE_INTERACTIVE_IMPORT_ITEM","UPDATE_INTERACTIVE_IMPORT_ITEMS","CLEAR_INTERACTIVE_IMPORT","ADD_RECENT_FOLDER","REMOVE_RECENT_FOLDER","ADD_FAVORITE_FOLDER","REMOVE_FAVORITE_FOLDER","SET_INTERACTIVE_IMPORT_MODE","fetchInteractiveImportItems","reprocessInteractiveImportItems","setInteractiveImportSort","updateInteractiveImportItem","updateInteractiveImportItems","clearInteractiveImport","addRecentFolder","removeRecentFolder","addFavoriteFolder","removeFavoriteFolder","setInteractiveImportMode","downloadId","folder","languages","releaseGroup","indexerFlags","recentFolder","lastUsed","r","sliceIndex","slice","favoriteFolder","FETCH_MOVIE_BLOCKLIST","CLEAR_MOVIE_BLOCKLIST","fetchMovieBlocklist","clearMovieBlocklist","detailedProgressBar","showDetails","showOverview","showPosters","allGenres","flatMap","from","Set","totalMovies","collectionGenres","FETCH_MOVIE_COLLECTIONS","CLEAR_MOVIE_COLLECTIONS","SAVE_MOVIE_COLLECTION","SAVE_MOVIE_COLLECTIONS","SET_MOVIE_COLLECTION_VALUE","TOGGLE_COLLECTION_MONITORED","SET_MOVIE_COLLECTIONS_SORT","SET_MOVIE_COLLECTIONS_FILTER","SET_MOVIE_COLLECTIONS_OPTION","SET_MOVIE_COLLECTIONS_OVERVIEW_OPTION","fetchMovieCollections","clearMovieCollections","saveMovieCollection","saveMovieCollections","toggleCollectionMonitored","setMovieCollectionsSort","setMovieCollectionsFilter","setMovieCollectionsOption","setMovieCollectionsOverviewOption","setMovieCollectionValue","collectionId","collectionIds","searchOnAdd","monitorMovies","movieCollectionsOptions","FETCH_MOVIE_CREDITS","CLEAR_MOVIE_CREDITS","fetchMovieCredits","clearMovieCredits","Link","component","to","target","isDisabled","noRouter","onPress","Component","onClick","useCallback","event","linkClass","toLink","href","rel","RouterLink","urlBase","disabled","IconButton","button","iconClassName","MOVIES","INTERACTIVE_IMPORT","WANTED_CUTOFF_UNMET","WANTED_MISSING","FETCH_MOVIE_FILES","DELETE_MOVIE_FILE","DELETE_MOVIE_FILES","UPDATE_MOVIE_FILES","CLEAR_MOVIE_FILES","SET_MOVIE_FILES_SORT","SET_MOVIE_FILES_TABLE_OPTION","fetchMovieFiles","deleteMovieFile","deleteMovieFiles","updateMovieFiles","clearMovieFiles","setMovieFilesSort","setMovieFilesTableOption","deleteMovieFileHelper","movieFileId","movieEntity","movieEntities","movieSection","moviesWithRemovedFiles","hasFile","movieFileIds","files","requestData","file","props","edition","FETCH_MOVIE_HISTORY","CLEAR_MOVIE_HISTORY","MOVIE_HISTORY_MARK_AS_FAILED","fetchMovieHistory","clearMovieHistory","movieHistoryMarkAsFailed","historyId","showMonitored","showQualityProfile","showCinemaRelease","showDigitalRelease","showPhysicalRelease","showReleaseDate","showTags","showSearchAction","showAdded","showPath","showSizeOnDisk","isHidden","group","numberFractionDigits","certification","SET_MOVIE_SORT","SET_MOVIE_FILTER","SET_MOVIE_VIEW","SET_MOVIE_TABLE_OPTION","SET_MOVIE_POSTER_OPTION","SET_MOVIE_OVERVIEW_OPTION","setMovieSort","setMovieFilter","setMovieView","setMovieTableOption","setMoviePosterOption","setMovieOverviewOption","callbackUrl","location","origin","authorizing","START_OAUTH","SET_OAUTH_VALUE","RESET_OAUTH","startOAuth","setOAuthValue","resetOAuth","showOAuthWindow","deferred","selfWindow","newWindow","open","closed","responseJSON","propertyName","errorMessage","onCompleteOauth","query","onComplete","substring","param","paramSplit","actionSection","startResponse","oauthUrl","executeIntermediateRequest","intermediateResponse","FETCH_ORGANIZE_PREVIEW","CLEAR_ORGANIZE_PREVIEW","fetchOrganizePreview","clearOrganizePreview","parseTimeout","FETCH","fetch","clear","_getState","currentPath","directories","parent","FETCH_PATHS","UPDATE_PATHS","CLEAR_PATHS","fetchPaths","updatePaths","clearPaths","allowFoldersWithoutTrailingSlashes","includeFiles","lastActions","lastActionId","FETCH_OPTIONS","CLEAR_OPTIONS","fetchOptions","clearOptions","subsection","actionId","details","paged","includeUnknownMovieItems","isGrabbing","estimatedCompletionTime","timeleft","asMilliseconds","FETCH_QUEUE_STATUS","FETCH_QUEUE_DETAILS","CLEAR_QUEUE_DETAILS","FETCH_QUEUE","GOTO_FIRST_QUEUE_PAGE","GOTO_PREVIOUS_QUEUE_PAGE","GOTO_NEXT_QUEUE_PAGE","GOTO_LAST_QUEUE_PAGE","GOTO_QUEUE_PAGE","SET_QUEUE_SORT","SET_QUEUE_FILTER","SET_QUEUE_TABLE_OPTION","SET_QUEUE_OPTION","CLEAR_QUEUE","GRAB_QUEUE_ITEM","GRAB_QUEUE_ITEMS","REMOVE_QUEUE_ITEM","REMOVE_QUEUE_ITEMS","fetchQueueStatus","fetchQueueDetails","clearQueueDetails","fetchQueue","gotoQueueFirstPage","gotoQueuePreviousPage","gotoQueueNextPage","gotoQueueLastPage","gotoQueuePage","setQueueSort","setQueueFilter","setQueueTableOption","setQueueOption","clearQueue","grabQueueItem","grabQueueItems","removeQueueItem","removeQueueItems","fetchQueueDetailsHelper","grabError","remove","blocklist","skipRedownload","changeCategory","queueOptions","age","ageMinutes","peers","seeders","leechers","_item$languages$0$id","_item$languages$","releaseWeight","rejections","qualityId","language","rejectionCount","release","FETCH_RELEASES","CANCEL_FETCH_RELEASES","SET_RELEASES_SORT","CLEAR_RELEASES","GRAB_RELEASE","UPDATE_RELEASE","SET_RELEASES_FILTER","fetchReleases","cancelFetchReleases","setReleasesSort","clearReleases","grabRelease","updateRelease","setReleasesFilter","fetchReleasesHelper","guid","isGrabbed","FETCH_AUTO_TAGGINGS","SAVE_AUTO_TAGGING","DELETE_AUTO_TAGGING","SET_AUTO_TAGGING_VALUE","CLONE_AUTO_TAGGING","fetchAutoTaggings","saveAutoTagging","deleteAutoTagging","setAutoTaggingValue","cloneAutoTagging","isSchemaFetching","isSchemaPopulated","removeTagsAutomatically","autoTaggings","specifications","autoTaggingSpecifications","schemaError","x","schemaDefaults","implementation","presetName","selectedImplementation","applySchemaDefaults","FETCH_AUTO_TAGGING_SPECIFICATIONS","FETCH_AUTO_TAGGING_SPECIFICATION_SCHEMA","SELECT_AUTO_TAGGING_SPECIFICATION_SCHEMA","SET_AUTO_TAGGING_SPECIFICATION_VALUE","SET_AUTO_TAGGING_SPECIFICATION_FIELD_VALUE","SAVE_AUTO_TAGGING_SPECIFICATION","DELETE_AUTO_TAGGING_SPECIFICATION","DELETE_ALL_AUTO_TAGGING_SPECIFICATION","CLONE_AUTO_TAGGING_SPECIFICATION","CLEAR_AUTO_TAGGING_SPECIFICATIONS","CLEAR_AUTO_TAGGING_SPECIFICATION_PENDING","fetchAutoTaggingSpecifications","fetchAutoTaggingSpecificationSchema","selectAutoTaggingSpecificationSchema","saveAutoTaggingSpecification","deleteAutoTaggingSpecification","deleteAllAutoTaggingSpecification","setAutoTaggingSpecificationValue","setAutoTaggingSpecificationFieldValue","cloneAutoTaggingSpecification","clearAutoTaggingSpecification","clearAutoTaggingSpecificationPending","createFetchSchemaHandler","cfState","tag","getNextId","createSetProviderFieldValueReducer","selectProviderSchema","newId","propsToUpdate","FETCH_CUSTOM_FORMATS","SAVE_CUSTOM_FORMAT","DELETE_CUSTOM_FORMAT","SET_CUSTOM_FORMAT_VALUE","CLONE_CUSTOM_FORMAT","BULK_EDIT_CUSTOM_FORMATS","BULK_DELETE_CUSTOM_FORMATS","SET_MANAGE_CUSTOM_FORMATS_SORT","fetchCustomFormats","saveCustomFormat","deleteCustomFormat","bulkEditCustomFormats","bulkDeleteCustomFormats","setManageCustomFormatsSort","setCustomFormatValue","cloneCustomFormat","includeCustomFormatWhenRenaming","customFormatSpecifications","createBulkEditItemHandler","createBulkRemoveItemHandler","FETCH_CUSTOM_FORMAT_SPECIFICATIONS","FETCH_CUSTOM_FORMAT_SPECIFICATION_SCHEMA","SELECT_CUSTOM_FORMAT_SPECIFICATION_SCHEMA","SET_CUSTOM_FORMAT_SPECIFICATION_VALUE","SET_CUSTOM_FORMAT_SPECIFICATION_FIELD_VALUE","SAVE_CUSTOM_FORMAT_SPECIFICATION","DELETE_CUSTOM_FORMAT_SPECIFICATION","DELETE_ALL_CUSTOM_FORMAT_SPECIFICATION","CLONE_CUSTOM_FORMAT_SPECIFICATION","CLEAR_CUSTOM_FORMAT_SPECIFICATIONS","CLEAR_CUSTOM_FORMAT_SPECIFICATION_PENDING","fetchCustomFormatSpecifications","fetchCustomFormatSpecificationSchema","selectCustomFormatSpecificationSchema","saveCustomFormatSpecification","deleteCustomFormatSpecification","deleteAllCustomFormatSpecification","setCustomFormatSpecificationValue","setCustomFormatSpecificationFieldValue","cloneCustomFormatSpecification","clearCustomFormatSpecification","clearCustomFormatSpecificationPending","FETCH_DELAY_PROFILES","FETCH_DELAY_PROFILE_SCHEMA","SAVE_DELAY_PROFILE","DELETE_DELAY_PROFILE","REORDER_DELAY_PROFILE","SET_DELAY_PROFILE_VALUE","fetchDelayProfiles","fetchDelayProfileSchema","saveDelayProfile","deleteDelayProfile","reorderDelayProfile","setDelayProfileValue","moveIndex","moveOrder","delayProfiles","order","after","FETCH_DOWNLOAD_CLIENT_OPTIONS","SET_DOWNLOAD_CLIENT_OPTIONS_VALUE","SAVE_DOWNLOAD_CLIENT_OPTIONS","fetchDownloadClientOptions","saveDownloadClientOptions","setDownloadClientOptionsValue","createSaveHandler","isTestingAll","lastTestData","createCancelTestProviderHandler","isTesting","testData","forceTest","FETCH_DOWNLOAD_CLIENTS","FETCH_DOWNLOAD_CLIENT_SCHEMA","SELECT_DOWNLOAD_CLIENT_SCHEMA","SET_DOWNLOAD_CLIENT_VALUE","SET_DOWNLOAD_CLIENT_FIELD_VALUE","SAVE_DOWNLOAD_CLIENT","CANCEL_SAVE_DOWNLOAD_CLIENT","DELETE_DOWNLOAD_CLIENT","TEST_DOWNLOAD_CLIENT","CANCEL_TEST_DOWNLOAD_CLIENT","TEST_ALL_DOWNLOAD_CLIENTS","BULK_EDIT_DOWNLOAD_CLIENTS","BULK_DELETE_DOWNLOAD_CLIENTS","SET_MANAGE_DOWNLOAD_CLIENTS_SORT","fetchDownloadClients","fetchDownloadClientSchema","selectDownloadClientSchema","saveDownloadClient","cancelSaveDownloadClient","deleteDownloadClient","testDownloadClient","cancelTestDownloadClient","testAllDownloadClients","bulkEditDownloadClients","bulkDeleteDownloadClients","setManageDownloadClientsSort","setDownloadClientValue","setDownloadClientFieldValue","createTestProviderHandler","createTestAllProvidersHandler","implementationName","enable","FETCH_GENERAL_SETTINGS","SET_GENERAL_SETTINGS_VALUE","SAVE_GENERAL_SETTINGS","fetchGeneralSettings","saveGeneralSettings","setGeneralSettingsValue","FETCH_IMPORT_LIST_EXCLUSIONS","GOTO_IMPORT_LIST_EXCLUSION_PAGE","SET_IMPORT_LIST_EXCLUSION_SORT","SAVE_IMPORT_LIST_EXCLUSION","DELETE_IMPORT_LIST_EXCLUSION","BULK_DELETE_IMPORT_LIST_EXCLUSIONS","CLEAR_IMPORT_LIST_EXCLUSIONS","SET_IMPORT_LIST_EXCLUSION_TABLE_OPTION","SET_IMPORT_LIST_EXCLUSION_VALUE","fetchImportListExclusions","gotoImportListExclusionPage","setImportListExclusionSort","saveImportListExclusion","deleteImportListExclusion","bulkDeleteImportListExclusions","clearImportListExclusions","setImportListExclusionTableOption","setImportListExclusionValue","FETCH_IMPORT_LIST_OPTIONS","SAVE_IMPORT_LIST_OPTIONS","SET_IMPORT_LIST_OPTIONS_VALUE","fetchImportListOptions","saveImportListOptions","setImportListOptionsValue","FETCH_IMPORT_LISTS","FETCH_IMPORT_LIST_SCHEMA","SELECT_IMPORT_LIST_SCHEMA","SET_IMPORT_LIST_VALUE","SET_IMPORT_LIST_FIELD_VALUE","SAVE_IMPORT_LIST","CANCEL_SAVE_IMPORT_LIST","DELETE_IMPORT_LIST","TEST_IMPORT_LIST","CANCEL_TEST_IMPORT_LIST","TEST_ALL_IMPORT_LISTS","BULK_DELETE_IMPORT_LISTS","BULK_EDIT_IMPORT_LISTS","fetchImportLists","fetchImportListSchema","selectImportListSchema","saveImportList","cancelSaveImportList","deleteImportList","testImportList","cancelTestImportList","testAllImportLists","bulkDeleteImportLists","bulkEditImportLists","setImportListValue","setImportListFieldValue","_payload$presetName","_selectedSchema$minRe","minRefreshInterval","FETCH_INDEXER_FLAGS","fetchIndexerFlags","FETCH_INDEXER_OPTIONS","SAVE_INDEXER_OPTIONS","SET_INDEXER_OPTIONS_VALUE","fetchIndexerOptions","saveIndexerOptions","setIndexerOptionsValue","FETCH_INDEXERS","FETCH_INDEXER_SCHEMA","SELECT_INDEXER_SCHEMA","CLONE_INDEXER","SET_INDEXER_VALUE","SET_INDEXER_FIELD_VALUE","SAVE_INDEXER","CANCEL_SAVE_INDEXER","DELETE_INDEXER","TEST_INDEXER","CANCEL_TEST_INDEXER","TEST_ALL_INDEXERS","BULK_EDIT_INDEXERS","BULK_DELETE_INDEXERS","SET_MANAGE_INDEXERS_SORT","fetchIndexers","fetchIndexerSchema","selectIndexerSchema","cloneIndexer","saveIndexer","cancelSaveIndexer","deleteIndexer","testIndexer","cancelTestIndexer","testAllIndexers","bulkEditIndexers","bulkDeleteIndexers","setManageIndexersSort","setIndexerValue","setIndexerFieldValue","enableRss","supportsRss","enableAutomaticSearch","supportsSearch","enableInteractiveSearch","newField","privacy","FETCH_LANGUAGES","fetchLanguages","FETCH_MEDIA_MANAGEMENT_SETTINGS","SAVE_MEDIA_MANAGEMENT_SETTINGS","SET_MEDIA_MANAGEMENT_SETTINGS_VALUE","fetchMediaManagementSettings","saveMediaManagementSettings","setMediaManagementSettingsValue","FETCH_METADATA","SET_METADATA_VALUE","SET_METADATA_FIELD_VALUE","SAVE_METADATA","fetchMetadata","saveMetadata","setMetadataValue","setMetadataFieldValue","FETCH_METADATA_OPTIONS","SAVE_METADATA_OPTIONS","SET_METADATA_OPTIONS_VALUE","fetchMetadataOptions","saveMetadataOptions","setMetadataOptionsValue","FETCH_NAMING_SETTINGS","SAVE_NAMING_SETTINGS","SET_NAMING_SETTINGS_VALUE","fetchNamingSettings","saveNamingSettings","setNamingSettingsValue","FETCH_NAMING_EXAMPLES","fetchNamingExamples","naming","FETCH_NOTIFICATIONS","FETCH_NOTIFICATION_SCHEMA","SELECT_NOTIFICATION_SCHEMA","SET_NOTIFICATION_VALUE","SET_NOTIFICATION_FIELD_VALUE","SET_NOTIFICATION_FIELD_VALUES","SAVE_NOTIFICATION","CANCEL_SAVE_NOTIFICATION","DELETE_NOTIFICATION","TEST_NOTIFICATION","CANCEL_TEST_NOTIFICATION","fetchNotifications","fetchNotificationSchema","selectNotificationSchema","saveNotification","cancelSaveNotification","deleteNotification","testNotification","cancelTestNotification","setNotificationValue","setNotificationFieldValue","setNotificationFieldValues","properties","createSetProviderFieldValuesReducer","onGrab","supportsOnGrab","onDownload","supportsOnDownload","onUpgrade","supportsOnUpgrade","onRename","supportsOnRename","onMovieAdded","supportsOnMovieAdded","onMovieDelete","supportsOnMovieDelete","onMovieFileDelete","supportsOnMovieFileDelete","onMovieFileDeleteForUpgrade","supportsOnMovieFileDeleteForUpgrade","onApplicationUpdate","supportsOnApplicationUpdate","onManualInteractionRequired","supportsOnManualInteractionRequired","FETCH_QUALITY_DEFINITIONS","SAVE_QUALITY_DEFINITIONS","SET_QUALITY_DEFINITION_VALUE","fetchQualityDefinitions","saveQualityDefinitions","setQualityDefinitionValue","qualityDefinitions","upatedDefinitions","FETCH_QUALITY_PROFILES","FETCH_QUALITY_PROFILE_SCHEMA","SAVE_QUALITY_PROFILE","DELETE_QUALITY_PROFILE","SET_QUALITY_PROFILE_VALUE","CLONE_QUALITY_PROFILE","fetchQualityProfiles","fetchQualityProfileSchema","saveQualityProfile","deleteQualityProfile","setQualityProfileValue","cloneQualityProfile","FETCH_RELEASE_PROFILES","SAVE_RELEASE_PROFILE","DELETE_RELEASE_PROFILE","SET_RELEASE_PROFILE_VALUE","fetchReleaseProfiles","saveReleaseProfile","deleteReleaseProfile","setReleaseProfileValue","FETCH_REMOTE_PATH_MAPPINGS","SAVE_REMOTE_PATH_MAPPING","DELETE_REMOTE_PATH_MAPPING","SET_REMOTE_PATH_MAPPING_VALUE","fetchRemotePathMappings","saveRemotePathMapping","deleteRemotePathMapping","setRemotePathMappingValue","FETCH_UI_SETTINGS","SET_UI_SETTINGS_VALUE","SAVE_UI_SETTINGS","fetchUISettings","saveUISettings","setUISettingsValue","advancedSettings","downloadClients","downloadClientOptions","general","importLists","importListExclusions","importListOptions","indexerOptions","indexers","mediaManagement","metadata","metadataOptions","namingExamples","notifications","qualityProfiles","releaseProfiles","remotePathMappings","TOGGLE_ADVANCED_SETTINGS","toggleAdvancedSettings","backupsSection","health","diskSpace","tasks","backups","isRestoring","restoreError","updates","logs","logFiles","updateLogFiles","FETCH_STATUS","FETCH_HEALTH","FETCH_DISK_SPACE","FETCH_TASK","FETCH_TASKS","FETCH_BACKUPS","RESTORE_BACKUP","CLEAR_RESTORE_BACKUP","DELETE_BACKUP","FETCH_UPDATES","FETCH_LOGS","GOTO_FIRST_LOGS_PAGE","GOTO_PREVIOUS_LOGS_PAGE","GOTO_NEXT_LOGS_PAGE","GOTO_LAST_LOGS_PAGE","GOTO_LOGS_PAGE","SET_LOGS_SORT","SET_LOGS_FILTER","SET_LOGS_TABLE_OPTION","CLEAR_LOGS_TABLE","FETCH_LOG_FILES","FETCH_UPDATE_LOG_FILES","fetchStatus","fetchHealth","fetchDiskSpace","fetchTask","fetchTasks","fetchBackups","restoreBackup","clearRestoreBackup","deleteBackup","fetchUpdates","fetchLogs","gotoLogsFirstPage","gotoLogsPreviousPage","gotoLogsNextPage","gotoLogsLastPage","gotoLogsPage","setLogsSort","setLogsFilter","setLogsTableOption","clearLogsTable","fetchLogFiles","fetchUpdateLogFiles","restart","shutdown","formData","FormData","append","processData","FETCH_TAGS","ADD_TAG","DELETE_TAG","FETCH_TAG_DETAILS","fetchTags","addTag","deleteTag","fetchTagDetails","onTagCreated","updateMovies","missing","cutoffUnmet","FETCH_MISSING","GOTO_FIRST_MISSING_PAGE","GOTO_PREVIOUS_MISSING_PAGE","GOTO_NEXT_MISSING_PAGE","GOTO_LAST_MISSING_PAGE","GOTO_MISSING_PAGE","SET_MISSING_SORT","SET_MISSING_FILTER","SET_MISSING_TABLE_OPTION","CLEAR_MISSING","BATCH_TOGGLE_MISSING_MOVIES","FETCH_CUTOFF_UNMET","GOTO_FIRST_CUTOFF_UNMET_PAGE","GOTO_PREVIOUS_CUTOFF_UNMET_PAGE","GOTO_NEXT_CUTOFF_UNMET_PAGE","GOTO_LAST_CUTOFF_UNMET_PAGE","GOTO_CUTOFF_UNMET_PAGE","SET_CUTOFF_UNMET_SORT","SET_CUTOFF_UNMET_FILTER","SET_CUTOFF_UNMET_TABLE_OPTION","CLEAR_CUTOFF_UNMET","BATCH_TOGGLE_CUTOFF_UNMET_MOVIES","fetchMissing","gotoMissingFirstPage","gotoMissingPreviousPage","gotoMissingNextPage","gotoMissingLastPage","gotoMissingPage","setMissingSort","setMissingFilter","setMissingTableOption","clearMissing","batchToggleMissingMovies","fetchCutoffUnmet","gotoCutoffUnmetFirstPage","gotoCutoffUnmetPreviousPage","gotoCutoffUnmetNextPage","gotoCutoffUnmetLastPage","gotoCutoffUnmetPage","setCutoffUnmetSort","setCutoffUnmetFilter","setCutoffUnmetTableOption","clearCutoffUnmet","batchToggleCutoffUnmetMovies","createBatchToggleMovieMonitoredHandler","app","movieFiles","extraFiles","history","interactiveImportActions","oAuth","organizePreview","parse","paths","providerOptions","releases","rootFolders","movieBlocklist","movieHistory","movieIndex","movieCredits","system","wanted","columnPaths","serialize","obj","config","slicer","paths_","subset","merge","initialState","persistedState","computedState","columnPath","initialColumns","persistedColumns","persistedColumn","column","newColumn","prop","defineProperty","getOwnPropertyDescriptor","initialColumn","persistedColumnIndex","mergeColumns","anchor","document","createElement","parseUrl","hash","host","hostname","pathname","port","protocol","search","isAbsolute","qs","IgnoreErrors","cleanseUrl","cleanseData","hint","originalException","transaction","exception","stacktrace","frames","frame","filename","s","pattern","stripUrlBase","middlewares","sentryMiddleware","analytics","branch","userHash","dsn","sentry","environment","sendDefaultPii","beforeSend","integrations","Integrations","iteratee","scope","setUser","username","setTag","store","next","category","err","extra","createSentryMiddleware","routerMiddleware","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","applyMiddleware","localStorage","getItem","get","migrateBlacklistToBlocklist","migratePreDbToReleased","migrateMonitorToEnum","migrate","setItem","createPersistState","createStore","enableBatching","combineReducers","router","connectRouter","createReducers","createSelector","fallbackErrorMessage","isLocalStorageSupported","translationsError","moviesError","customFiltersError","tagsError","qualityProfilesError","languagesError","uiSettingsError","systemStatusError","getErrorMessage","loading","rippleClassName","ripple","sizeInPx","rippleContainer","floor","random","src","LoadingMessage","LoadingIndicator","ErrorBoundary","constructor","super","this","info","componentDidCatch","setState","render","children","errorComponent","ErrorComponent","mobileDetect","MobileDetect","navigator","userAgent","isMobile","mobile","isIOS","is","getUniqueElementId","scrollLock","setScrollLock","locked","container","messageClassName","detailsClassName","detailedError","setDetailedError","useState","useEffect","StackTrace","de","imageContainer","image","functionName","fileName","lineNumber","columnNumber","componentStack","Button","buttonGroupPosition","sizes","forwardRef","ref","autoFocus","autoScroll","scrollDirection","scrollTop","initialScrollTop","onScroll","internalRef","useRef","currentRef","current","focus","preventScroll","div","handleScroll","throttle","scrollLeft","addEventListener","removeEventListener","scroller","tabIndex","ModalBody","innerClassName","hasScroller","scrollDirections","Scroller","defaultProps","ModalContent","showCloseButton","onModalClose","ModalFooter","ModalHeader","ErrorBoundaryError","openModals","Modal","context","_setBackgroundRef","_backgroundRef","onBackdropBeginPress","_isBackdropPressed","_isBackdropTarget","onBackdropEndPress","closeOnBackgroundClick","onKeyDown","keyCode","_modalId","preventDefault","stopPropagation","_node","getElementById","getUniqueElememtId","_bodyScrollTop","componentDidMount","isOpen","_openModal","componentDidUpdate","prevProps","_closeModal","componentWillUnmount","elementClass","modalOpenIOS","modalOpen","removeFromOpenModals","targetElement","_findEventTarget","ReactDOM","isEqualNode","changedTouches","touch","elementFromPoint","clientX","clientY","backdropClassName","FocusLock","modalContainer","onMouseDown","onMouseUp","ModalError","modal","modalBackdrop","blockClassName","markdownBlocks","linkRegex","RegExp","endIndex","exec","substr","codeRegex","matchedCode","usePrevious","changes","uniqueChanges","change","checkChange","InlineMarkdown","useDispatch","useSelector","previousVersion","installedIndex","u","installedPreviouslyIndex","appliedUpdates","appliedChanges","new","fixed","mergedUpdate","mergeUpdates","handleSeeChangesPress","UpdateChanges","handleModalClose","reload","AppUpdatedModalContent","ColorImpairedContext","ColorImpairedConsumer","Consumer","currentPopulator","currentReasons","registerPagePopulator","populator","reasons","unregisterPagePopulator","repopulatePage","reason","charAt","toUpperCase","mapDispatchToProps","dispatchFetchCommands","dispatchUpdateCommand","dispatchFinishCommand","dispatchSetAppValue","dispatchSetVersion","dispatchUpdate","dispatchUpdateItem","dispatchRemoveItem","dispatchFetchHealth","dispatchFetchQualityDefinitions","dispatchFetchQueue","dispatchFetchQueueDetails","dispatchFetchRootFolders","dispatchFetchMovies","dispatchFetchTags","dispatchFetchTagDetails","Logger","minimumLogLevel","prototype","cleanse","apikey","encodeURIComponent","log","logLevel","signalR","Critical","Warning","Information","SignalRConnector","handleMessage","titleCase","getHandlerName","handleCalendar","resource","handleCommand","handleMoviefile","handleDownloadclient","handleHealth","handleImportlist","handleIndexer","handleMetadata","handleNotification","handleMovie","handleCollection","handleQualitydefinition","handleQueue","isQueuePopulated","handleQueueDetails","handleQueueStatus","handleVersion","handleWantedCutoff","handleWantedMissing","handleSystemTask","handleRootfolder","handleTag","onStartFail","onStart","debug","onReconnecting","onReconnected","onClose","onReceiveMessage","connection","configureLogging","withUrl","withAutomaticReconnect","nextRetryDelayInMilliseconds","retryContext","elapsedMilliseconds","min","previousRetryCount","build","onreconnecting","onreconnected","onclose","on","stop","connect","alert","func","child","call","FormGroup","isAdvanced","childProps","defaultTarget","AutoSuggestInput","renderInputComponent","inputProps","Reference","renderSuggestionsContainer","containerProps","Portal","Popper","placement","modifiers","computeMaxHeight","enabled","fn","onComputeMaxHeight","flip","padding","minHeight","popperRef","scheduleUpdate","_scheduleUpdate","maxHeight","top","bottom","reference","windowHeight","onInputChange","newValue","onChange","onInputKeyDown","suggestions","forwardedRef","inputContainerClassName","placeholder","hasError","hasWarning","getSuggestionValue","renderSuggestion","onInputFocus","onInputBlur","onSuggestionsFetchRequested","onSuggestionsClearRequested","onSuggestionSelected","autoComplete","spellCheck","onFocus","onBlur","theme","containerOpen","suggestionsContainer","suggestionsList","suggestion","suggestionHighlighted","Manager","Autosuggest","enforceMaxHeight","AutoCompleteInput","lowerCaseValue","jdu","filteredValues","Measure","arguments","onMeasure","leading","trailing","cancel","ReactMeasure","FormInputHelpText","text","link","tooltip","isError","isWarning","isCheckInput","CheckInput","toggleChecked","checked","shiftKey","checkedValue","uncheckedValue","setRef","_checkbox","nativeEvent","setIndeterminate","indeterminate","helpText","helpTextWarning","isChecked","isIndeterminate","isCheckClass","checkbox","isNotChecked","EnhancedSelectInputOption","e","onSelect","onCheckPress","depth","isSelected","isMultiSelect","HintedSelectInputOption","dividerAfter","Label","outline","EnhancedSelectInputSelectedValue","HintedSelectInputSelectedValue","includeHint","valuesMap","TextInput","setInputRef","_input","selectionChange","onKeyUp","_isMouseTarget","onDocumentMouseUp","onWheel","blur","_selectionStart","_selectionEnd","_selectionTimeout","selectionStart","selectionEnd","selectionChanged","onSelectionChange","readOnly","hasButton","step","onCopy","onCut","getSelectedOption","selectedIndex","startingIndex","indexToTest","previousIndex","nextIndex","getSelectedIndex","isSelectedItem","getKey","EnhancedSelectInput","onWindowClick","_buttonId","_optionsId","_removeListener","isEditable","origIndex","isArrowKey","_addListener","onOpen","_values$find","additionalProperties","arrayValue","onOptionsModalClose","isMobileUtil","disabledClassName","valueOptions","selectedValueOptions","selectedValueComponent","SelectedValueComponent","optionComponent","OptionComponent","selectedOption","selectedValue","whitelist","editableContainer","dropdownArrowContainerEditable","dropdownArrowContainerDisabled","dropdownArrowContainer","preventOverflow","boundariesElement","optionsContainer","minWidth","hasParent","parentKey","parentSelected","optionsModal","optionsModalBody","optionsInnerModalBody","optionsModalScroller","mobileCloseButtonContainer","mobileCloseButton","enhancedSelect","movieAvailabilityOptions","includeNoChange","includeNoChangeDisabled","includeMixed","SpinnerButton","spinnerIcon","canSpin","isLastButton","middleButton","CaptchaInput","onRefreshPress","onCaptchaChange","FormInputButton","ReCAPTCHA","sitekey","CaptchaInputConnector","PropTypes","isRequired","TagInputInput","isFocused","onInputContainerPress","canEdit","tagComponent","TagComponent","onTagDelete","onTagEdit","isLastTag","onDelete","onEdit","TagInputTag","getTag","allowNew","existingTag","TagInput","_setAutosuggestRef","_autosuggestRef","shouldRenderSuggestions","minQueryLength","onTagAdd","onTagReplace","delimiters","highlightedSuggestionIndex","tagList","t","focusInputOnSuggestionClick","DeviceInput","device","selectedDevices","inputClassName","dispatchFetchOptions","dispatchClearOptions","DeviceInputConnector","_populate","devices","valueDevice","dispatchFetchDownloadClients","DownloadClientSelectInputConnector","includeAny","protocolFilter","filteredItems","downloadClient","importantFieldNames","getProviderDataKey","EnhancedSelectInputConnector","prevKey","nextKey","refetchRequired","_cleanup","selectOptionsProviderAction","option","parentValue","selectedFlags","onChangeWrapper","flagId","dispatchFetchIndexers","IndexerSelectInputConnector","indexer","keyValue","keyPlaceholder","valuePlaceholder","isNew","onRemove","handleKeyChange","handleValueChange","handleRemovePress","inputContainer","setIsFocused","handleItemChange","handleRemoveItem","KeyValueListInputItem","LanguageSelectInputConnector","minId","MovieMonitoredSelectInput","monitorOptions","validTagRegex","TagInputConnector","allTags","tagName","isValidTag","createTagsSelector","sortedTags","filteredTagList","matchingTag","MovieTagInput","handleChange","finalValue","parseValue","isFloat","parseFloat","NumberInput","stringValue","prevState","isNaN","SpinnerErrorButton","resetState","wasSuccessful","_testResultTimeout","testResult","failures","failure","getTestResult","showIcon","iconName","iconKind","OAuthInput","OAuthInputConnector","stopImmediatePropagation","Form","validationErrors","validationWarnings","Alert","warning","FormLabel","errorClassName","htmlFor","isDragging","connectDragSource","onVisibleChange","dragLayer","QUALITY_PROFILE_ITEM","DELAY_PROFILE","TABLE_COLUMN","TableOptionsColumnDragPreview","itemType","currentOffset","y","transform","position","WebkitTransform","msTransform","DragPreviewLayer","TableOptionsColumn","DragLayer","getItemType","getSourceClientOffset","columnDragSource","beginDrag","endDrag","onColumnDragEnd","didDrop","columnDropTarget","hover","dragIndex","hoverIndex","hoverBoundingRect","findDOMNode","getBoundingClientRect","hoverMiddleY","hoverClientY","getClientOffset","onColumnDragMove","TableOptionsColumnDragSource","isDraggingUp","isDraggingDown","isOver","connectDropTarget","columnPlaceholder","columnPlaceholderBefore","columnPlaceholderAfter","DropTarget","dropTarget","DragSource","dragSource","TableOptionsModal","onPageSizeChange","_this$props$maxPageSi","pageSizeError","maxPageSize","minimumValue","maximumValue","onTableOptionChange","dropIndex","hasPageSize","canModifyColumns","optionsComponent","OptionsComponent","DndProvider","HTML5toTouch","FormInputGroup","inputTypes","errors","TableOptionsModalWrapper","onTableOptionsPress","isTableOptionsModalOpen","onTableOptionsModalClose","Fragment","TableHeader","TableHeaderCell","fixedSortDirection","onSortPress","isSorting","sortIcon","allSelected","allUnselected","onSelectAllChange","getValue","VirtualTableHeaderCell","tableHeaderCellProps","Table","horizontalScroll","selectAll","tableContainer","TableSelectAllHeaderCell","otherColumnProps","getTableHeaderCellProps","table","TableBody","TableRowCell","cell","tdProps","TableRow","overlayContent","getIconName","handlePress","TableRowButton","handleClearPaths","isWindows","mode","createSystemStatusSelector","filteredPaths","setCurrentPath","scrollerRef","previousValue","emptyParent","isWindowsService","handlePathInputChange","handleRowPress","handleOkPress","handleFetchPaths","PathInput","hasFileBrowser","onFetchPaths","onClearPaths","FileBrowserRow","directory","FileBrowserModalContent","suggestionValue","onFileBrowserOpenPress","isFileBrowserModalOpen","onFileBrowserModalClose","lastSeparatorIndex","lastIndexOf","FileBrowserModal","dispatchFetchPaths","dispatchClearPaths","PathInputConnector","comparer","QualityProfileSelectInputConnector","firstValue","createSortedSectionSelector","qualityProfile","createRootFoldersSelector","filesize","base","round","freeSpace","isMissing","movieFolder","slashCharacter","formatBytes","RootFolderSelectInputSelectedValue","includeFreeSpace","RootFolderSelectInput","isAddNewRootFolderModalOpen","onNewRootFolderSelect","newRootFolderPath","onAddRootFolderModalClose","RootFolderSelectInputOption","ADD_NEW_KEY","RootFolderSelectInputConnector","dispatchAddRootFolder","UNSAFE_componentWillMount","defaultValue","includeMissingValue","rootFolder","TagSelectInputConnector","TextArea","separator","TextTagInputConnector","valueArray","newTag","newTagValue","trim","tagToReplace","tagsArray","umaskOptions","octal","formatPermissions","permissions","hasSticky","hasSetGID","hasSetUID","bit","digit","UMaskInput","umaskNum","umask","folderNum","fileNum","unit","buttons","helpTexts","helpLink","pending","warnings","InputComponent","AvailabilitySelectInput","KeyValueListInput","PasswordInput","IndexerFlagsSelectInput","getComponent","checkInput","buttonsArray","toArray","lastButtonIndex","detailedMessage","legend","ClipboardButton","handleClick","clipboard","writeText","copy","showStateIcon","stateIconContainer","clipboardIconContainer","shortcuts","OPEN_KEYBOARD_SHORTCUTS_MODAL","CLOSE_MODAL","ACCEPT_CONFIRM_MODAL","MOVIE_SEARCH_INPUT","SAVE_SETTINGS","SCROLL_TOP","SCROLL_BOTTOM","DETAILS_NEXT","DETAILS_PREVIOUS","WrappedComponent","KeyboardShortcuts","_this","bindShortcut","callback","_mousetrap","bind","_mousetrapBindings","unbindShortcut","unbind","unbindAllShortcuts","binding","stopCallback","element","combo","isGlobal","contentEditable","Mousetrap","displayName","ConfirmModal","confirmLabel","cancelLabel","hideCancelButton","onConfirm","onCancel","keyboardShortcuts","authenticationMethodOptions","authenticationRequiredOptions","certificateValidationOptions","SecuritySettings","onApikeyFocus","select","onResetApiKeyPress","isConfirmApiKeyResetModalOpen","onConfirmResetApiKey","onCloseResetApiKeyModal","isResettingApiKey","authenticationMethod","authenticationRequired","password","passwordConfirmation","certificateValidation","authenticationEnabled","FieldSet","getFailures","infoLink","detailedDescription","cloneDeep","getValidationFailures","allSettings","setting","_reduce","pendingChangesFields","hasPendingChanges","isEmpty","hasSettings","sectionSettings","other","selectedPendingChanges","rest","selectSettings","selector","createSettingsSectionSelector","AuthenticationRequiredModalContent","wasSaving","args","AuthenticationRequiredModal","systemStatus","isOsx","allShortcuts","getShortcuts","shortcut","comboMatch","modifier","osModifier","getShortcutKey","KeyboardShortcutsModalContentConnector","createSelectorCreator","defaultMemoize","isEqual","Worker_fn","pixelRatio","devicePixelRatio","coverType","lazy","overflow","onError","onLoad","setUrl","setHasError","isLoaded","setIsLoaded","handleLoad","handleError","nextImage","findImage","_image$url","imageUrl","remoteUrl","getUrl","LazyLoad","offset","MovieImage","alternateTitles","imdbId","alternateTitle","refIndex","MoviePoster","ADD_NEW_TYPE","MovieSearchInput","setAutosuggestRef","_autosuggest","focusInput","altKey","ctrlKey","reset","highlightedSectionIndex","onGoToAddNewMovie","goToMovie","requestSuggestions","requestLoading","requestValue","getWorker","postMessage","onSuggestionsReceived","_worker","terminate","FuseWorker","getSectionSuggestions","renderSectionTitle","MovieSearchResult","matches","onGoToMovie","titleSlug","suggestionGroups","multiSection","createDeepEqualSelector","createAllMoviesSelector","allMovies","firstCharacter","sharedPopperOptions","popperOptions","align","Menu","menuButton","_menuButtonId","isMenuOpen","onTouchStart","menuContent","_menuContentId","targetTouches","onWindowResize","setMaxHeight","onWindowScroll","onMenuButtonPress","getMaxHeight","capture","alignMenu","childrenArray","MenuButton","MenuContent","MenuItem","onKeyboardShortcutsPress","authentication","isDocker","formsAuth","handleRestartPress","handleShutdownPress","MenuItemSeparator","PageHeader","onOpenKeyboardShortcutsModal","isKeyboardShortcutsModalOpen","onKeyboardShortcutsModalClose","onSidebarToggle","header","logoContainer","logoLink","logo","logoFull","alt","sidebarToggleContainer","MovieSearchInputConnector","right","donate","PageHeaderActionsMenu","KeyboardShortcutsModal","count","unknownErrors","unknownWarnings","totalCount","autoHide","trackClassName","thumb","scrollBarRef","isScrolling","handleScrollStart","handleScrollStop","getValues","renderThumb","renderTrackHorizontal","trackProps","finalStyle","left","borderRadius","track","renderTrackVertical","renderView","Scrollbars","hideTracksWhenNotNeeded","renderThumbHorizontal","renderThumbVertical","onScrollStart","onScrollStop","iconContainer","MessageConnector","scheduleHideMessage","_hideTimeoutId","Message","reverse","PageSidebarItem","isChildItem","isParentItem","isActive","isActiveParent","statusComponent","StatusComponent","HEADER_HEIGHT","SIDEBAR_WIDTH","links","alias","createQueueStatusSelector","wasReconnecting","PageSidebarStatus","createHealthSelector","useMemo","PageSidebar","_setSidebarRef","_sidebarRef","sidebar","toggleButton","onSidebarVisibleChange","windowScroll","scrollY","documentElement","getPositioning","touches","touchStartX","pageX","touchStartY","pageY","_touchStartX","_touchStartY","onTouchMove","currentTouchX","abs","transition","onTouchEnd","currentTouch","_setSidebarTransform","onTouchCancel","onItemPress","activeParent","childLink","getActiveParent","containerStyle","sidebarStyle","ScrollerComponent","OverlayScroller","childWithStatusComponent","childStatusComponent","hasActiveChild","hasActiveChildLink","MessagesConnector","Page","onResize","onUpdatedModalClose","isUpdatedModalOpen","onConnectionLostModalClose","isConnectionLostModalOpen","enableColorImpairedMode","Provider","AppUpdatedModal","ConnectionLostModal","testLocalStorage","selectAppProps","selectIsPopulated","moviesIsPopulated","customFiltersIsPopulated","tagsIsPopulated","uiSettingsIsPopulated","qualityProfilesIsPopulated","languagesIsPopulated","indexerFlagsIsPopulated","importListsIsPopulated","systemStatusIsPopulated","movieCollectionsIsPopulated","translationsIsPopulated","selectErrors","indexerFlagsError","importListsError","movieCollectionsError","PageConnector","dispatchFetchMovieCollections","dispatchFetchCustomFilters","dispatchFetchQualityProfiles","dispatchFetchLanguages","dispatchFetchIndexerFlags","dispatchFetchImportLists","dispatchFetchUISettings","dispatchFetchStatus","dispatchFetchTranslations","ErrorPage","LoadingPage","withRouter","createDimensionsSelector","auto","matchMedia","dark","light","updateCSSVariables","entries","themes","setProperty","areAllSelected","selectedState","selected","newSelectedState","lastToggled","nextSelectedState","lower","upper","lastToggledIndex","changedIndex","getToggledRange","getSelectedState","existingState","_existingState$id","selectReducer","toggleSelected","useSelectState","useReducer","SelectContext","SelectProvider","useSelect","SelectedMenuItem","selectedIconName","FilterMenuItem","filterKey","FilterMenuContent","showCustomFilters","onFilterSelect","onCustomFiltersPress","ToolbarMenuButton","showIndicator","FilterMenu","isFilterModalOpen","onFiltersModalClose","buttonComponent","ButtonComponent","filterModalConnectorComponent","FilterModalConnectorComponent","filterModalConnectorComponentProps","contentBody","innerContentBody","onScrollWrapper","PageContentBody","PageContent","PageContentError","DocumentTitle","instanceName","PageToolbar","spinningName","overflowComponent","SpinnerIcon","BUTTON_WIDTH","SEPARATOR_WIDTH","PageToolbarSection","isMeasured","overflowItems","alignContent","collapseButtons","buttonCount","separatorCount","validChildren","separatorsWidth","maxButtons","actualButtons","isSeparator","calculateOverflowItems","sectionContainer","flexGrow","overflowMenuButton","OverflowComponent","PageToolbarOverflowMenuItem","SelectInput","optionValue","optionIsDisabled","otherOptionProps","TablePager","onOpenPageSelectClick","isShowingPageSelect","onPageSelect","onPageSelectBlur","onFirstPagePress","onPreviousPagePress","onNextPagePress","onLastPagePress","pageNumber","isFirstPage","isLastPage","gotoPage","handleFirstPagePress","handlePreviousPagePress","handleNextPagePress","handleLastPagePress","handlePageSelect","useHistory","getSortClause","createCustomFiltersSelector","alternateType","uiSection","uiSectionState","filtered","accepted","every","sorted","clauses","orders","totalItems","contraints","createCommandsSelector","findCommand","createCommandSelector","isCommandExecuting","power","binaryPrefix","prefix","pow","NAME","getTagDisplayValue","selectedFilterBuilderProp","FilterBuilderRowValue","convertToBytes","toFixed","hasItems","maxSuggestionsLength","FilterBuilderRowValueTag","protocols","isString","possibleString","timeOptions","isInFilter","filterType","DateFilterBuilderRowValue","onValueChange","onTimeChange","sectionItems","EVENT_TYPE_OPTIONS","createImportListSelector","importList","IndexerFilterBuilderRowValueConnector","filterItems","lang","createLanguagesSelector","getQualities","qualities","groupQualities","dispatchFetchQualityProfileSchema","QualityFilterBuilderRowValueConnector","statusTagList","getselectedFilterBuilderProp","getFilterTypeOptions","getDefaultFilterType","getDefaultFilterValue","FilterBuilderRow","onFilterKeyChange","onFilterChange","onAddPress","onRemovePress","filterCount","keyOptions","availablePropFilter","ValueComponent","FilterBuilderRowValueConnector","BoolFilterBuilderRowValue","HistoryEventTypeFilterBuilderRowValue","LanguageFilterBuilderRowValue","ProtocolFilterBuilderRowValue","QualityProfileFilterBuilderRowValue","QueueStatusFilterBuilderRowValue","MovieFilterBuilderRowValue","ReleaseStatusFilterBuilderRowValue","MinimumAvailabilityFilterBuilderRowValue","TagFilterBuilderRowValueConnector","ImportListFilterBuilderRowValueConnector","getRowValueConnector","FilterBuilderModalContent","onLabelChange","onAddFilterPress","onRemoveFilterPress","onSaveFilterPress","customFilterType","onSaveCustomFilterPress","labelErrors","dispatchSetFilter","maxBy","onCancelPress","dispatchDeleteCustomFilter","c","SpinnerIconButton","CustomFilter","onEditPress","onAddCustomFilter","onEditCustomFilter","FilterModal","filterBuilder","FilterBuilderModalContentConnector","CustomFiltersModalContentConnector","BlocklistFilterModal","blocklistItems","timeFormat","_temp","includeMinuteZero","includeSeconds","minute","format","dateObj","Date","today","getDate","getMonth","getFullYear","tomorrow","setDate","yesterday","dateFormat","includeRelativeDay","relativeDay","includeRelativeDate","isYesterday","isToday","isTomorrow","getRelativeDay","formattedDate","formattedTime","formatTime","shortDateFormat","showRelativeDates","timeForToday","includeTime","isTodayDate","now","isBetween","isInNextWeek","day","formatDateTime","longDateFormat","createUISettingsSelector","getRelativeDate","TableSelectCell","onSelectedChange","formats","bodyClassName","tooltipPositions","canFlip","closeTimeout","updater","setIsOpen","handleMouseEnterAnchor","handleMouseEnterTooltip","handleMouseLeave","maxWidth","windowWidth","computeMaxSize","onMouseEnter","onMouseLeave","eventsEnabled","escapeWithReference","arrowProps","popperPlacement","vertical","tooltipContainer","verticalContainer","horizontalContainer","arrow","arrowDisabled","Tooltip","isCutoffNotMet","Popover","getTooltip","revision","real","showRevision","isRepack","revisionLabel","createMovieSelector","descriptionList","description","titleClassName","descriptionClassName","DescriptionListItemTitle","DescriptionListItemDescription","sourceTitle","DescriptionList","DescriptionListItem","useMovie","isDetailsModalOpen","setIsDetailsModalOpen","handleDetailsPress","handleDetailsModalClose","MovieTitleLink","MovieLanguages","MovieQuality","MovieFormats","RelativeDateCell","BlocklistDetailsModal","requestCurrentPage","useCurrentPage","isClearingBlocklistExecuting","createCommandExecutingSelector","isConfirmRemoveModalOpen","setIsConfirmRemoveModalOpen","isConfirmClearModalOpen","setIsConfirmClearModalOpen","selectState","setSelectState","selectedIds","getSelectedIds","wasClearingBlocklistExecuting","handleSelectAllChange","handleSelectedChange","handleRemoveSelectedPress","handleRemoveSelectedConfirmed","handleConfirmRemoveModalClose","handleClearBlocklistPress","handleClearBlocklistConfirmed","handleConfirmClearModalClose","usePaging","handleFilterSelect","handleSortPress","handleTableOptionChange","repopulate","PageToolbarButton","BlocklistRow","isMoviesFetching","isMoviesPopulated","HistoryFilterModal","queueItems","customFormatsLength","score","ageHours","eventType","movieMatchType","releaseSource","nzbInfoUrl","downloadClientName","publishedDate","downloadClientNameInfo","releaseSourceMessage","formatCustomFormatScore","formatAge","droppedPath","importedPath","reasonMessage","sourcePath","sourceRelativePath","onMarkAsFailedPress","getHeaderTitle","HistoryDetails","getIconKind","wasMarkingAsFailed","handleMarkAsFailedPress","HistoryEventTypeCell","HistoryDetailsModal","createMoviesFetchingSelector","isFetchingAny","isAllPopulated","HistoryRow","PageToolbarSeparator","QueueFilterModal","handleOptionChange","protocolName","progressBar","progress","precision","showText","progressPercent","progressText","actualWidth","backTextContainer","backText","role","frontTextContainer","frontText","handleRemoveFavoritePress","isFavorite","handleFavoritePress","favoriteFoldersColumns","recentFoldersColumns","modalTitle","onFolderSelect","setFolder","interactiveImport","favoriteFolderMap","Map","onPathChange","onRecentPathPress","onQuickImportPress","onInteractiveImportPress","FavoriteFolderRow","RecentFolderRow","has","onIndexerFlagsSelect","setIndexerFlags","onIndexerFlagsChange","onIndexerFlagsSelectWrapper","SelectIndexerFlagsModalContent","onLanguagesSelect","languageIds","setLanguageIds","onLanguageChange","changedId","newLanguages","onLanguagesSelectWrapper","SelectLanguageModalContent","VirtualTableRow","VirtualTableHeader","VirtualTableRowCell","bodyPadding","Row","onMovieSelect","VirtualTableRowButton","display","justifyContent","SelectMovieRow","listRef","setFilter","setSize","clientWidth","clientHeight","currentScrollerRef","currentScrollListener","_listRef$current","offsetTop","scrollTo","onMovieSelectWrapper","sortedMovies","_item$imdbId","SelectMovieModalTableHeader","List","itemCount","itemSize","itemData","SelectMovieModalContent","onQualitySelect","setQualityId","proper","setProper","setReal","qualityOptions","onQualityChange","onProperChange","onRealChange","onQualitySelectWrapper","SelectQualityModalContent","onReleaseGroupSelect","setReleaseGroup","onReleaseGroupChange","onReleaseGroupSelectWrapper","SelectReleaseGroupModalContent","createIndexerFlagsSelector","flags","flag","isOptional","allowMovieChange","onValidRowChange","isMovieColumnVisible","_columns$find$isVisib","_columns$find","isIndexerFlagsColumnVisible","_columns$find$isVisib2","_columns$find2","selectModalOpen","setSelectModalOpen","hasMovieFileId","onSelectedChangeWrapper","selectRowAfterChange","onSelectModalClose","onSelectMoviePress","onSelectReleaseGroupPress","onSelectQualityPress","onSelectLanguagePress","onSelectIndexerFlagsPress","showMoviePlaceholder","showReleaseGroupPlaceholder","showQualityPlaceholder","showLanguagePlaceholder","showIndexerFlagsPlaceholder","TableRowCellButton","InteractiveImportRowCellPlaceholder","IndexerFlags","rejection","SelectMovieModal","SelectReleaseGroupModal","SelectQualityModal","SelectLanguageModal","l","SelectIndexerFlagsModal","COLUMNS","importModeOptions","movieFilesInfoSelector","importModeSelector","showMovie","showFilterExistingFiles","showDelete","showImportMode","initialSortKey","initialSortDirection","createClientSideCollectionSelector","invalidRowsSelected","setInvalidRowsSelected","withoutMovieFileIdRowsSelected","setWithoutMovieFileIdRowsSelected","isConfirmDeleteModalOpen","setIsConfirmDeleteModalOpen","filterExistingFiles","setFilterExistingFiles","interactiveImportErrorMessage","setInteractiveImportErrorMessage","previousIsDeleting","movieColumn","indexerFlagsColumn","bulkSelectOptions","sortProps","without","isValid","onDeleteSelectedPress","onConfirmDelete","onConfirmDeleteModalClose","onImportSelectedPress","finalImportMode","existingFiles","originalItem","originalFile","isSameMovieFile","folderName","shouldClose","onFilterExistingFilesChange","onImportModeChange","onSelectModalSelect","InteractiveImportRow","folderPath","setFolderPath","previousIsOpen","InteractiveImportModalContent","InteractiveImportSelectFolderModalContent","getDetailedPopoverBody","statusMessages","trackedDownloadStatus","trackedDownloadState","warningMessage","QueueStatus","canIgnore","canChangeCategory","isPending","selectedCount","multipleSelected","removalMethod","setRemovalMethod","blocklistMethod","setBlocklistMethod","removalMethodOptions","blocklistMethodOptions","handleRemovalMethodChange","handleBlocklistMethodChange","handleConfirmRemove","timeSpan","duration","days","asDays","sizeleft","totalSize","remainingSize","formatTimeSpan","outputPath","downloadClientHasPostImportCategory","onQueueRowModalOpenOrClose","isRemoveQueueItemModalOpen","setIsRemoveQueueItemModalOpen","isInteractiveImportModalOpen","setIsInteractiveImportModalOpen","handleGrabPress","handleInteractiveImportPress","handleInteractiveImportModalClose","handleRemoveQueueItemPress","handleRemoveQueueItemModalConfirmed","handleRemoveQueueItemModalClose","showInteractiveImport","QueueStatusCell","ProtocolLabel","TimeleftCell","ProgressBar","InteractiveImportModal","RemoveQueueItemModal","isRefreshMonitoredDownloadsExecuting","shouldBlockRefresh","currentQueue","isPendingSelected","isRefreshing","m","disableSelectedActions","handleRefreshPress","handleQueueRowModalOpenOrClose","handleGrabSelectedPress","QueueOptions","QueueRow","prevItems","currentItems","idProp","currentItemIds","currentItem","prevItem","iconSize","hideIcon","imdbRatings","youTubeTrailerId","createQueueItemSelectorForHook","char","hasMovieFiles","useLabel","queueItem","isMonitored","hasFiles","queueStatusText","queueStatus","queueState","getQueueStatusText","getMovieStatus","statusClass","firstCharToUpper","isDownloading","bottomRadius","isStandAlone","queueDetails","createMovieQueueItemsDetailsSelector","_movieFile$quality$qu","_movieFile$quality","getProgressBarKind","firstGenres","otherGenres","runtime","hours","minutes","AddNewMovieModalContent","onQualityProfileIdChange","onAddMoviePress","overview","MovieMinimumAvailabilityPopoverContent","AddNewMovieModalContentConnector","addMovieState","AddNewMovieSearchResult","isNewAddMovieModalOpen","onAddMovieModalClose","onExternalLinkPress","isExistingMovie","existingMovieId","movieRuntimeFormat","linkProps","MovieIndexProgressBar","formatRuntime","TmdbRating","ImdbRating","MovieGenres","MovieDetailsLinks","MovieStatusLabel","AddNewMovieModal","createExistingMovieSelector","AddNewMovie","onSearchInputChange","hasValue","onMovieLookupChange","onClearMovieLookup","onClearMovieLookupPress","hasExistingMovies","AddNewMovieSearchResultConnector","AddNewMovieConnector","_movieLookupTimeout","hasDifferentItems","selectUniqueIds","existingMoviesCount","PageContentFooter","MIXED","ImportMovieFooter","defaultMonitor","defaultQualityProfileId","defaultMinimumAvailability","isMonitorMixed","isQualityProfileIdMixed","isMinimumAvailabilityMixed","hasUnsearchedItems","onImportPress","onLookupPress","onCancelLookupPress","isMixed","len","overscanIndicesGetter","cellCount","overscanCellsCount","startIndex","stopIndex","overscanStartIndex","overscanStopIndex","VirtualTable","setGridRef","_grid","scrollRestored","scrollIndex","hasDifferentItemsOrOrder","recomputeGridSize","scrollToPosition","scrollToCell","rowIndex","columnIndex","rowHeight","rowRenderer","gridStyle","boxSizing","willChange","WindowScroller","scrollElement","registerChild","onChildScroll","Grid","autoContainerWidth","autoHeight","autoWidth","rowCount","columnCount","columnWidth","overscanRowCount","cellRenderer","scrollToAlignment","isScrollingOptout","VirtualTableSelectAllHeaderCell","VirtualTableSelectCell","ImportMovieSearchResult","ImportMovieTitle","network","ImportMovieSelectMovie","content","_contentId","warningIcon","noMatches","contentContainer","searchContainer","searchIconContainer","searchInput","results","ImportMovieSearchResultConnector","ImportMovieSelectMovieConnector","ImportMovieRow","defaultsProps","ImportMovieRowConnector","ImportMovieTable","rootFolderId","unmappedFolders","onMovieLookup","onSetImportMovieValue","unmappedFolder","onRemoveSelectedStateItem","ImportMovieHeader","ImportMovie","rootFoldersFetching","rootFoldersError","rootFoldersPopulated","ImportMovieTableConnector","ImportMovieFooterConnector","dispatchSetImportMovieValue","dispatchImportMovie","dispatchClearImportMovie","dispatchSetAddMovieDefault","ImportMovieConnector","timeout","setDefaults","setDefaultPayload","p","importMovieState","ImportMovieRootFolderRow","onDeletePress","unmappedFoldersCount","ImportMovieRootFolderRowConnector","rootFolderColumns","ImportMovieSelectFolder","onAddNewRootFolderPress","hasRootFolders","dangerouslySetInnerHTML","__html","ImportMovieSelectFolderConnector","onDeleteRootFolderPress","newRootFolders","getPathWithUrlBase","RouterSwitch","Children","elementChild","childPath","addUrlBase","ImportMovies","Switch","Route","exact","createMovieSelectorForHook","isPaused","circularProgressBar","circularProgressBarContainer","strokeWidth","strokeColor","showProgressText","currentProgress","setCurrentProgress","raf","center","radius","circumference","PI","sizeInPixels","strokeDashoffset","handleAnimation","prevProgress","cancelAnimationFrame","requestAnimationFrame","xmlns","fill","cx","cy","strokeDasharray","stroke","circularProgressBarText","QueueDetails","CircularProgressBar","downloading","AgendaEvent","onDetailsModalClose","grabbed","showDate","colorImpairedMode","cinemaDateParsed","digitalDateParsed","physicalDateParsed","sortDate","releaseIcon","statusStyle","getStatusStyle","joinedGenres","underlay","overlay","eventWrapper","statusIcon","CalendarEventQueueDetails","createMovieFileSelector","createQueueItemSelector","calendarOptions","uiSettings","startDateParsed","endDateParsed","momentDate","isSame","AgendaEventConnector","CalendarEvent","statusContainer","movieInfo","isTodaysDate","events","onEventModalOpenToggle","scrollIntoView","CalendarEventConnector","CalendarDayConnector","CalendarDay","isGroup","CalendarDays","clearUpdateTimeout","todaysDate","updateTimeoutId","isEventModalOpen","touchStart","_touchStart","onNavigatePrevious","onNavigateNext","DayOfWeek","calendarWeekColumnHeader","highlightToday","formatedDate","DaysOfWeek","UiSettings","selectedView","CalendarHeaderViewButton","CalendarHeader","onViewChange","collapseViewButtons","onTodayPress","onPreviousPress","onNextPress","timeMoment","startMoment","endMoment","startFormat","endFormat","getTitle","titleMobile","navigationButtons","todayButton","titleDesktop","viewButtonsContainer","viewMenu","ViewMenuItem","viewButtons","CalendarHeaderConnector","Calendar","AgendaConnector","DaysOfWeekConnector","CalendarDaysConnector","calendarActions","CalendarConnector","updateCalendar","onCalendarViewChange","isRefreshingMovie","CalendarFilterModal","getUrls","asAllDay","icalUrl","iCalHttpUrl","iCalWebCalUrl","CalendarLinkModalContent","urls","onLinkFocus","CalendarLinkModalContentConnector","isAgendaView","legendItem","iconsToShow","LegendIconItem","LegendItem","AdvancedSettingsButton","onAdvancedSettingsPress","showLabel","PendingChangesModal","SettingsToolbar","saveSettings","onSavePress","showSave","hasPendingLocation","additionalButtons","onConfirmNavigation","onCancelNavigation","SettingsToolbarConnector","routerWillLeave","nextLocation","nextLocationAction","confirmed","goBack","_unblock","block","firstDayOfWeekOptions","weekColumnOptions","shortDateFormatOptions","longDateFormatOptions","timeFormatOptions","movieRuntimeFormatOptions","UISettings","themeOptions","uiLanguages","movieInfoLanguage","uiLanguage","CalendarOptionsModalContent","onOptionInputChange","dispatchSetCalendarOption","onGlobalInputChange","dispatchSaveUISettings","CalendarOptionsModalContentConnector","CalendarPage","onDaysCountChange","onGetCalendarLinkPress","isCalendarLinkModalOpen","onGetCalendarLinkModalClose","onOptionsPress","isOptionsModalOpen","onSearchMissingPress","missingMovieIds","hasMovie","movieError","movieIsFetching","movieIsPopulated","isRssSyncExecuting","isSearchingForMissing","onRssSyncPress","NoMovie","LegendConnector","CalendarLinkModal","CalendarOptionsModal","withCurrentPage","movieCount","scrollPositionKey","scrollPositions","createMovieEqualSelector","PageJumpBarItem","ITEM_HEIGHT","PageJumpBar","visibleItems","computeVisibleItems","shouldComponentUpdate","nextProps","nextState","minimumItems","characters","maximumItems","minCount","minAllowed","CollectionFooterLabel","NO_CHANGE","monitoredOptions","searchOnAddOptions","CollectionFooter","onUpdateSelectedPress","CollectionFilterMenu","CollectionFilterModalConnector","SortMenu","SortMenuItem","onSortSelect","allCollections","CollectionItemConnector","ItemComponent","createCollectionSelector","getIndexOfFirstCharacter","character","EditCollectionModalContent","dispatchSetMovieCollectionValue","dispatchSaveMovieCollection","EditCollectionModalContentConnector","onMoveMoviePress","moviesState","isPathChanging","movieSettings","originalPath","EditCollectionModalConnector","EditCollectionModal","createQualityProfileSelectorForHook","profile","_qualityProfile$name","destinationPath","destinationRootFolder","onDeleteMoviePress","isConfirmMoveModalOpen","setIsConfirmMoveModalOpen","otherSettings","handleInputChange","handleCancelPress","handleSavePress","handleMoveMoviePress","MoveMovieModal","EditMovieModalContent","AddNewCollectionMovieModalContent","AddNewCollectionMovieModalContentConnector","discoverMovieState","collectionDefaults","CollectionMovie","onEditMoviePress","isEditMovieModalOpen","onEditMovieModalClose","onPosterLoad","hasPosterError","onPosterLoadError","posterWidth","posterHeight","onMonitorTogglePress","elementStyle","posterContainer","editorSelect","MonitorToggleButton","monitorToggleButton","excluded","poster","overlayTitle","overlayStatus","AddNewCollectionMovieModal","EditMovieModal","CollectionMovieConnector","createCollectionExistingMovieSelector","existingMovie","CollectionMovieLabel","CollectionMovieLabelConnector","columnPadding","columnPaddingSmallScreen","fonts","CollectionOverview","setSliderPrevRef","_swiperPrevRef","setSliderNextRef","_swiperNextRef","onEditCollectionPress","isEditCollectionModalOpen","onEditCollectionModalClose","contentHeight","getContentHeight","overviewHeight","titleRow","titleContainer","toggleMonitoredContainer","detailsLabel","qualityProfileName","QualityProfileName","TextTruncate","line","sliderContainer","Swiper","slidesPerView","spaceBetween","slidesPerGroup","loop","loopFillGroupWithBlank","modules","Navigation","onInit","swiper","navigation","prevEl","nextEl","init","SwiperSlide","labelsContainer","CollectionOverviewConnector","calculateRowHeight","CollectionOverviews","calculateGrid","posterSize","maxiumPosterWidth","calculatePosterWidth","calculatePosterHeight","jumpToCharacter","posterSizeOptions","CollectionOverviewOptionsModalContent","onChangeOverviewOption","onChangeOption","CollectionOverviewOptionsModalContentConnector","Collection","onOverviewOptionsPress","isOverviewOptionsModalOpen","onOverviewOptionsModalClose","onJumpBarItemPress","onSelectAllPress","onRefreshMovieCollectionsPress","jumpBarItems","isPosterOptionsModalOpen","isConfirmSearchModalOpen","searchType","setJumpBarItems","setSelectedState","isItemSelected","newStateCount","isAllSelected","isAllUnselected","isRefreshingCollections","selectedMovieIds","ViewComponent","CollectionOverviewsConnector","hasNoCollection","CollectionSortMenu","pageContentBodyWrapper","contentBodyContainer","NoCollection","CollectionOverviewOptionsModal","CollectionConnector","dispatchClearQueueDetails","onViewSelect","withScrollPosition","createUnoptimizedSelector","collections","dimensionsState","DiscoverMovieFooterLabel","ExcludeMovieModalContent","onExcludeMovieConfirmed","onExcludePress","ExcludeMovieModalContentConnector","DiscoverMovieFooter","onExcludeSelectedPress","isExcludeMovieModalOpen","onExcludeMovieModalClose","onAddMoviesPress","defaultRootFolderPath","defaultSearchForMovie","isExcluding","onExcludeMoviesPress","ExcludeMovieModal","DiscoverMovieFooterConnector","DiscoverMovieFilterMenu","DiscoverMovieFilterModalConnector","ViewMenu","DiscoverMovieItemConnector","ImportListList","importListList","list","AddNewDiscoverMovieModalContentConnector","infoRowHeight","rows","showProp","valueProp","shownRows","maxRows","row","infoRowProps","getInfoRowProps","DiscoverMovieOverviewInfoRow","DiscoverMovieOverview","onExcludeMoviePress","isRecommendation","isPopular","isTrending","alreadyExistsIcon","exclusionIcon","externalLinks","ImportListListConnector","overviewContainer","DiscoverMovieOverviewInfo","AddNewDiscoverMovieModal","DiscoverMovieOverviews","DiscoverMovieOverviewConnector","DiscoverMovieOverviewOptionsModalContent","DiscoverMovieOverviewOptionsModalContentConnector","rottenTomatoesRatings","ratingImage","getMovieStatusDetails","statusDetails","inCinemasDate","digitalReleaseDate","physicalReleaseDate","RottenTomatoRating","TraktRating","DiscoverMoviePoster","controls","existing","DiscoverMoviePosterInfo","progressBarHeight","detailedProgressBarHeight","additionalColumnCount","small","medium","large","heights","DiscoverMoviePosters","maxiumColumnWidth","calculateColumnWidth","_padding","DiscoverMoviePosterConnector","_isInitialized","grid","isScrollingOptOut","DiscoverMoviePosterOptionsModalContent","onChangePosterOption","DiscoverMoviePosterOptionsModalContentConnector","DiscoverMovieTableOptions","DiscoverMovieHeader","DiscoverMovieTableOptionsConnector","popularity","ListMovieStatusCell","DiscoverMovieRow","isExclusion","MoviePopularityIndex","DiscoverMovieTable","DiscoverMovieRowConnector","DiscoverMovieHeaderConnector","DiscoverMovie","onPosterOptionsPress","onPosterOptionsModalClose","onImportListSyncPress","dispatchFetchListMovies","isSyncingLists","DiscoverMoviePostersConnector","DiscoverMovieOverviewsConnector","DiscoverMovieTableConnector","getViewComponent","hasNoMovie","DiscoverMovieViewMenu","DiscoverMovieSortMenu","NoDiscoverMovie","DiscoverMoviePosterOptionsModal","DiscoverMovieOverviewOptionsModal","DiscoverMovieConnector","dispatchSetListMovieView","dispatchAddMovies","dispatchAddImportListExclusions","dispatchClearListMovie","onSyncListsPress","Marquee","onHandleMouseEnter","hoverToStop","marqueeTimer","overflowWidth","startAnimation","onHandleMouseLeave","animatedWidth","animate","measureText","node","containerWidth","offsetWidth","componentWillReceiveProps","whiteSpace","el","ResizeObserver","ResizeObserverPolyfill","useMeasureHook","polyfill","movieFileCount","setDeleteFiles","handleDeleteFilesChange","handleDeleteMovieConfirmed","handleDeleteOptionChange","DeleteMovieModalContent","isMarkAsFailedModalOpen","setIsMarkAsFailedModalOpen","handleConfirmMarkAsFailed","handleMarkAsFailedModalClose","MovieHistoryRow","MovieHistoryModalContent","createCollectionSelectorForHook","handleMonitorTogglePress","PageMenuButton","InteractiveSearchFilterModal","createEnabledDownloadClientsSelector","priority","onDownloadClientSelect","onSeasonSelectWrapper","SelectDownloadClientRow","SelectDownloadClientModalContent","_downloadClients$find","_downloadClients$find2","indexerId","setMovieId","setLanguages","setQuality","downloadClientId","setDownloadClientId","setError","previousIsGrabbing","onSelectLanguagesPress","onSelectDownloadClientPress","onGrabPress","shouldOverride","OverrideMatchData","SelectDownloadClientModal","OverrideMatchModalContent","getPeersTooltipPart","peersUnit","getKind","getDownloadIcon","getDownloadKind","getDownloadTooltip","publishDate","infoUrl","mappedMovieId","downloadAllowed","searchPayload","historyGrabbedData","historyFailedData","blocklistedData","releaseHistorySelector","isConfirmGrabModalOpen","setIsConfirmGrabModalOpen","isOverrideModalOpen","setIsOverrideModalOpen","onGrabPressWrapper","onGrabConfirm","onGrabCancel","onOverridePress","onOverrideModalClose","Peers","OverrideMatchModal","InteractiveSearchRow","InteractiveSearch","MovieInteractiveSearchModalContent","FileEditModalContent","onSaveInputs","languageOptions","dispatchUpdateMovieFiles","FileEditModalContentConnector","languageId","filteredLanguages","FileEditModal","getDisplayName","code","Intl","DisplayNames","languageNames","names","identifier","formatLanguages","splitLanguages","simpleLanguage","_languageNames$of","of","getLanguageName","useMovieFile","mediaInfo","audioChannels","audioCodec","audioLanguages","subtitles","videoCodec","videoDynamicRangeType","symbol","output","str","formatBitrate","MediaInfo","MovieFileEditorRow","onFileDetailsPress","isFileDetailsModalOpen","onFileDetailsModalClose","onFileEditPress","isFileEditModalOpen","onFileEditModalClose","dateAdded","MovieFileRowCellPlaceholder","audio","video","FileDetailsModal","MovieFileEditorTableContent","MovieFileEditorTableContentConnector","languageProfiles","languageTags","ExtraFileRow","extension","ExtraFileDetailsPopover","ExtraFileTableContent","ExtraFileTableContentConnector","existingPath","newPath","isPreviewFetching","isPreviewPopulated","previewError","isNamingFetching","isNamingPopulated","namingError","renameMovies","standardMovieFormat","selectAllValue","handleOrganizePress","OrganizePreviewRow","handleOnModalClose","OrganizePreviewModalContent","movieCreditType","sortedCredits","personName","importListIds","_importList$fields$fi","personIdValue","createMovieCreditImportListSelector","handleImportListSelect","onImportListSelect","itemComponent","handleSwiperInit","credit","MovieCreditPoster","personTmdbId","job","useModalOpenState","createProviderSettingsSelector","sectionName","createProviderSettingsSelectorHook","getType","getSelectValues","selectOptions","ProviderFieldFormGroup","advanced","hidden","asHours","asMinutes","seconds","asSeconds","rootFolderError","onFieldChange","onTestPress","onDeleteImportListPress","enableAuto","refreshInterval","formatShortTimeSpan","EditImportListModalContentConnector","EditImportListModalContent","EditImportListModalConnector","dispatchClearPendingChanges","dispatchCancelTestImportList","dispatchCancelSaveImportList","EditImportListModal","_importList$id","_importList$name","importListId","setHasPosterError","isEditImportListModalOpen","setEditImportListModalOpen","setEditImportListModalClosed","isDeleteImportListModalOpen","setDeleteImportListModalOpen","setDeleteImportListModalClosed","handlePosterLoadError","handlePosterLoad","handleManageImportListPress","handleDeleteImportListConfirmed","contentStyle","MovieHeadshot","castCredits","createMovieCreditsSelector","MovieCreditPosters","MovieCastPoster","crewCredits","MovieCrewPoster","formatDate","tagId","sourceType","_items$find$alternate","_items$find","movieAlternativeTitlesSelector","sortedItems","MovieTitlesRow","isMovieFilesFetching","movieFilesError","isMovieFilesPopulated","isExtraFilesFetching","extraFilesError","isExtraFilesPopulated","isMovieCreditsFetching","movieCreditsError","isMovieCreditsPopulated","isRenaming","isSearching","_movieRefreshingComma","_movieRefreshingComma2","_isRenamingMovieComma","movieRefreshingCommand","isMovieRefreshingCommandExecuting","allMoviesRefreshing","isMovieRefreshing","isSearchingExecuting","isRenamingFiles","isRenamingMovieCommand","isRenamingMovie","nextMovie","previousMovie","_sortedMovies","_sortedMovies2","isOrganizeModalOpen","setIsOrganizeModalOpen","isManageMoviesModalOpen","setIsManageMoviesModalOpen","isInteractiveSearchModalOpen","setIsInteractiveSearchModalOpen","setIsEditMovieModalOpen","isDeleteMovieModalOpen","setIsDeleteMovieModalOpen","isMovieHistoryModalOpen","setIsMovieHistoryModalOpen","titleRef","titleWidth","useMeasure","overviewRef","wasRefreshing","wasRenaming","handleOrganizeModalClose","handleManageMoviesPress","handleManageMoviesModalClose","handleInteractiveSearchPress","handleInteractiveSearchModalClose","handleEditMoviePress","handleEditMovieModalClose","handleDeleteMoviePress","handleDeleteMovieModalClose","handleMovieHistoryPress","handleMovieHistoryModalClose","handleSearchPress","handleTouchStart","handleTouchEnd","handleTouchCancel","handleTouchMove","handleKeyUp","composedPath","populate","originalTitle","fanartUrl","getFanartUrl","marqueeWidth","titleWithYear","backgroundImage","MovieReleaseDates","MovieTags","InfoLabel","MovieCollectionLabel","MovieFileEditorTable","ExtraFileTable","MovieCastPosters","MovieCrewPosters","MovieTitlesTable","OrganizePreviewModal","MovieHistoryModal","DeleteMovieModal","MovieInteractiveSearchModal","useParams","NotFound","MovieDetails","MovieIndexFilterModal","MovieIndexFilterMenu","MovieIndexFooter","totalFileSize","createMovieClientSideCollectionItemsSelector","isSelectMode","moviesToRefresh","refreshIndexLabel","refreshSelectLabel","isConfirmModalOpen","setIsConfirmModalOpen","moviesToSearch","searchIndexLabel","searchSelectLabel","onConfirmPress","onConfirmModalClose","TagList","selectDispatch","onSelectPress","createMovieQualityProfileSelector","createExecutingCommandsSelector","executingCommands","_command$body$movieId","isSearchingMovie","_command$body$movieId2","rowInfo","_props$qualityProfile","monitoredText","_props$studio","MovieIndexOverviewInfoRow","createMovieIndexItemSelector","selectOverviewOptions","onSearchPress","onDeleteMovieModalClose","MovieIndexPosterSelect","TagListConnector","MovieIndexOverviewInfo","bodyPaddingSmallScreen","otherData","MovieIndexOverview","measureRef","bounds","_listRef$current2","_scrollerRef$current","onOverviewOptionChange","MovieIndexOverviewOptionsModalContent","addedDate","selectPosterOptions","MovieIndexPosterInfo","ADDITIONAL_COLUMN_COUNT","movieIndexSelector","Cell","layout","MovieIndexPoster","MovieIndexPosters","maximumColumnWidth","finalWidth","_ref$current","_ref$current2","onPosterOptionChange","MovieIndexPosterOptionsModalContent","onPressWrapper","selectDeleteOptions","orderBy","onDeleteFilesChange","onDeleteOptionChange","onDeleteMoviesConfirmed","totalMovieFileCount","totalSizeOnDisk","setMonitored","setQualityProfileId","setMinimumAvailability","setRootFolderPath","save","hasChanges","onSavePressWrapper","onDoNotMoveMoviePress","EditMoviesModalContent","movieTitles","onOrganizePress","OrganizeMoviesModalContent","onApplyTagsPress","setTags","applyTags","setApplyTags","movieTags","uniq","onTagsChange","onApplyTagsChange","onApplyPress","applyTagsOptions","removeTag","TagsModalContent","movieEditorSelector","isOrganizingMovies","isEditModalOpen","setIsEditModalOpen","isTagsModalOpen","setIsTagsModalOpen","isDeleteModalOpen","setIsDeleteModalOpen","isSavingMovies","setIsSavingMovies","isSavingTags","setIsSavingTags","onEditModalClose","onOrganizeModalClose","onTagsPress","onTagsModalClose","onDeleteModalClose","anySelected","EditMoviesModal","TagsModal","OrganizeMoviesModal","onMonitoredPress","selectTableOptions","MovieStatusCell","joinedReleaseGroups","truncatedReleaseGroups","onTableOptionChangeWrapper","MovieIndexTableOptions","columnsSelector","MovieIndexRow","MovieIndexTableHeader","MovieIndex","setIsOptionsModalOpen","setJumpToCharacter","setIsSelectMode","all","onSelectModePress","onInteractiveImportModalClose","MovieIndexOverviews","MovieIndexTable","MovieIndexRefreshMovieButton","MovieIndexSearchButton","MovieIndexSearchMenuItem","MovieIndexSelectModeButton","MovieIndexSelectModeMenuItem","MovieIndexSelectAllButton","MovieIndexSelectAllMenuItem","MovieIndexViewMenu","MovieIndexSortMenu","MovieIndexSelectFooter","MovieIndexPosterOptionsModal","MovieIndexOverviewOptionsModal","parsedMovieInfo","releaseTitle","releaseHash","finalLanguages","ParseResultItem","setTitle","trimmedValue","onClearPress","ParseResult","ParseModalContent","isParseModalOpen","setIsParseModalOpen","onOpenParseModalPress","onParseModalClose","ParseModal","card","overlayClassName","ImportCustomFormatModalContent","json","_importTimeout","doImport","parseError","specificationsPopulated","ImportCustomFormatModalContentConnector","clearPending","cf","parseCf","stack","spec","parseSpecification","specificationSchema","parseFields","customFormat","ImportCustomFormatModal","onContentHeightChange","AddSpecificationPresetMenuItem","AddSpecificationItem","onSpecificationSelect","hasPresets","preset","AddSpecificationModalContent","specification","AddSpecificationModalContentConnector","specificationSelected","onDeleteSpecificationPress","negate","required","EditSpecificationModalContentConnector","EditSpecificationModalContent","EditSpecificationModalConnector","EditSpecificationModal","Specification","onEditSpecificationPress","isEditSpecificationModalOpen","onEditSpecificationModalClose","isDeleteSpecificationModalOpen","onDeleteSpecificationModalClose","onCloneSpecificationPress","onConfirmDeleteSpecification","Card","EditCustomFormatModalContent","onAddSpecificationPress","isAddSpecificationModalOpen","onAddSpecificationModalClose","isImportCustomFormatModalOpen","onImportCustomFormatModalClose","onDeleteCustomFormatPress","AddSpecificationModal","EditCustomFormatModalContentConnector","tagsFromId","EditCustomFormatModal","EditCustomFormatModalConnector","ExportCustomFormatModalContent","replacer","cur","ExportCustomFormatModalContentConnector","ExportCustomFormatModal","CustomFormat","onEditCustomFormatPress","isEditCustomFormatModalOpen","onEditCustomFormatModalClose","onExportCustomFormatPress","isExportCustomFormatModalOpen","onExportCustomFormatModalClose","isDeleteCustomFormatModalOpen","onDeleteCustomFormatModalClose","onConfirmDeleteCustomFormat","onCloneCustomFormatPress","CustomFormats","isCustomFormatModalOpen","PageSectionContent","dispatchFetchCustomFormats","dispatchDeleteCustomFormat","dispatchCloneCustomFormat","CustomFormatsConnector","enableOptions","customFormatIds","setIncludeCustomFormatWhenRenaming","ManageCustomFormatsEditModalContent","setIsEditCustomFormatModalOpen","setIsDeleteCustomFormatModalOpen","handlelectedChange","handleEditCustomFormatModalOpen","handleEditCustomFormatModalClose","handleDeleteCustomFormatPress","handleDeleteCustomFormatModalClose","handleConfirmDeleteCustomFormat","ManageCustomFormatsModalRow","ManageCustomFormatsEditModal","ManageCustomFormatsModalContent","isManageModalOpen","openManageModal","closeManageModal","ManageCustomFormatsModal","ParseToolbarButton","ManageCustomFormatsToolbarButton","backend","HTML5Backend","AddDownloadClientPresetMenuItem","AddDownloadClientItem","AddDownloadClientModalContent","usenetDownloadClients","torrentDownloadClients","AddDownloadClientModalContentConnector","downloadClientSelected","EditDownloadClientModalContent","onDeleteDownloadClientPress","removeCompletedDownloads","removeFailedDownloads","EditDownloadClientModalContentConnector","EditDownloadClientModalConnector","dispatchCancelTestDownloadClient","dispatchCancelSaveDownloadClient","EditDownloadClientModal","DownloadClient","onEditDownloadClientPress","isEditDownloadClientModalOpen","onEditDownloadClientModalClose","isDeleteDownloadClientModalOpen","onDeleteDownloadClientModalClose","onConfirmDeleteDownloadClient","DownloadClients","onAddDownloadClientPress","isAddDownloadClientModalOpen","onAddDownloadClientModalClose","AddDownloadClientModal","DownloadClientsConnector","downloadClientIds","setEnable","setRemoveCompletedDownloads","setRemoveFailedDownloads","setPriority","ManageDownloadClientsEditModalContent","allDownloadClients","downloadClientsTags","ManageDownloadClientsModalRow","ManageDownloadClientsEditModal","ManageDownloadClientsModalContent","enableCompletedDownloadHandling","checkForFinishedDownloadInterval","autoRedownloadFailed","autoRedownloadFailedFromInteractiveSearch","SECTION","dispatchFetchDownloadClientOptions","dispatchSetDownloadClientOptionsValue","dispatchSaveDownloadClientOptions","DownloadClientOptionsConnector","onChildMounted","onChildStateChange","DownloadClientOptions","downloadClientHosts","onDeleteRemotePathMappingPress","remotePath","localPath","newRemotePathMapping","selectDownloadClientHosts","hosts","dispatchSetRemotePathMappingValue","dispatchSaveRemotePathMapping","EditRemotePathMappingModalContentConnector","EditRemotePathMappingModalContent","mapping","remotePathMapping","EditRemotePathMappingModalConnector","EditRemotePathMappingModal","RemotePathMapping","onEditRemotePathMappingPress","isEditRemotePathMappingModalOpen","onEditRemotePathMappingModalClose","isDeleteRemotePathMappingModalOpen","onDeleteRemotePathMappingModalClose","onConfirmDeleteRemotePathMapping","RemotePathMappings","onAddRemotePathMappingPress","isAddRemotePathMappingModalOpen","wikiLink","RemotePathMappingsConnector","DownloadClientSettings","saveCallback","_saveCallback","onManageDownloadClientsPress","isManageDownloadClientsOpen","onManageDownloadClientsModalClose","dispatchTestAllDownloadClients","ManageDownloadClientsModal","analyticsEnabled","backupFolder","backupInterval","backupRetention","bindAddress","applicationUrl","enableSsl","sslPort","sslCertPath","sslCertPassword","launchBrowser","autocomplete","logLevelOptions","logSizeLimit","proxyEnabled","proxyType","proxyHostname","proxyPort","proxyUsername","proxyPassword","proxyBypassFilter","proxyBypassLocalAddresses","proxyTypeOptions","branchValues","packageUpdateMechanism","updateAutomatically","updateMechanism","updateScriptPath","usingExternalUpdateMechanism","updateOptions","requiresRestartKeys","GeneralSettings","onConfirmRestart","isRestartRequiredModalOpen","onCloseRestartRequiredModalOpen","prevSettings","pendingRestart","prevSetting","HostSettings","ProxySettings","LoggingSettings","AnalyticSettings","UpdateSettings","BackupSettings","GeneralSettingsConnector","newImportListExclusion","onDeleteImportListExclusionPress","createImportListExclusionSelector","previousIsSaving","EditImportListExclusionModalContent","isEditImportListExclusionModalOpen","setEditImportListExclusionModalOpen","setEditImportListExclusionModalClosed","isDeleteImportListExclusionModalOpen","setDeleteImportListExclusionModalOpen","setDeleteImportListExclusionModalClosed","handleDeletePress","EditImportListExclusionModal","handleDeleteSelectedPress","handleDeleteSelectedConfirmed","handleConfirmDeleteModalClose","isAddImportListExclusionModalOpen","setAddImportListExclusionModalOpen","setAddImportListExclusionModalClosed","isFetchingForFirstTime","ImportListExclusionRow","colSpan","AddImportListPresetMenuItem","AddImportListItem","AddImportListModalContent","listGroups","typeOfList","AddImportListModalContentConnector","listSelected","sortBy","o","listOrder","groupBy","ImportList","onEditImportListPress","onEditImportListModalClose","onDeleteImportListModalClose","onConfirmDeleteImportList","ImportLists","onAddImportListPress","isAddImportListModalOpen","onAddImportListModalClose","AddImportListModal","ImportListsConnector","setEnabled","setEnableAuto","ManageImportListsEditModalContent","allImportLists","importListsTags","ManageImportListsModalRow","ManageImportListsEditModal","ManageImportListsModalContent","cleanLibraryLevelOptions","setChildSave","listSyncLevel","translatedLevelOptions","ImportListSettings","onManageImportListsPress","isManageImportListsOpen","onManageImportListsModalClose","dispatchTestAllImportLists","ImportListOptions","ImportListExclusions","ManageImportListsModal","AddIndexerPresetMenuItem","AddIndexerItem","onIndexerSelect","AddIndexerModalContent","usenetIndexers","torrentIndexers","AddIndexerModalContentConnector","indexerSelected","onDeleteIndexerPress","EditIndexerModalContentConnector","EditIndexerModalContent","EditIndexerModalConnector","dispatchCancelTestIndexer","dispatchCancelSaveIndexer","EditIndexerModal","Indexer","onEditIndexerPress","isEditIndexerModalOpen","onEditIndexerModalClose","isDeleteIndexerModalOpen","onDeleteIndexerModalClose","onConfirmDeleteIndexer","onCloneIndexerPress","showPriority","Indexers","onAddIndexerPress","isAddIndexerModalOpen","dispatchCloneIndexer","onAddIndexerModalClose","AddIndexerModal","dispatchDeleteIndexer","IndexersConnector","indexerIds","setEnableRss","setEnableAutomaticSearch","setEnableInteractiveSearch","ManageIndexersEditModalContent","allIndexers","indexersTags","ManageIndexersModalRow","ManageIndexersEditModal","ManageIndexersModalContent","onWhitelistedSubtitleChange","minimumAge","retention","maximumSize","preferIndexerFlags","availabilityDelay","rssSyncInterval","whitelistedHardcodedSubs","allowHardcodedSubs","dispatchFetchIndexerOptions","dispatchSetIndexerOptionsValue","dispatchSaveIndexerOptions","IndexerOptionsConnector","IndexerOptions","IndexerSettings","onManageIndexersPress","isManageIndexersOpen","onManageIndexersModalClose","dispatchTestAllIndexers","ManageIndexersModal","accessible","isUnavailable","RootFolderRow","tokenSeparator","example","tokenCase","isFullFilename","footNotes","tokenValue","separatorOptions","caseOptions","fileNameTokens","movieTokens","movieIdTokens","qualityTokens","mediaInfoTokens","releaseGroupTokens","editionTokens","customFormatTokens","originalTokens","additional","setTokenSeparator","setTokenCase","setSelectionStart","setSelectionEnd","handleTokenSeparatorChange","handleTokenCaseChange","handleInputSelectionChange","handleOptionPress","NamingOption","_ref10","_ref11","_ref12","examples","examplesPopulated","isNamingModalOpen","setNamingModalOpen","setNamingModalClosed","namingModalOptions","setNamingModalOptions","namingExampleTimeout","onStandardNamingModalOpenClick","onMovieFolderNamingModalOpenClick","replaceIllegalCharacters","colonReplacementOptions","standardMovieFormatHelpTexts","standardMovieFormatErrors","movieFolderFormatHelpTexts","movieFolderFormatErrors","movieExample","movieFolderExample","colonReplacementFormat","movieFolderFormat","NamingModal","setIsAddNewRootFolderModalOpen","rescanAfterRefreshOptions","downloadPropersAndRepacksOptions","fileDateOptions","MediaManagement","Naming","deleteEmptyFolders","createEmptyMovieFolders","skipFreeSpaceCheckWhenImporting","minimumFreeSpaceWhenImporting","copyUsingHardlinks","useScriptImport","scriptImportPath","importExtraFiles","extraFileExtensions","autoUnmonitorPreviouslyDownloadedMovies","downloadPropersAndRepacks","enableMediaInfo","rescanAfterRefresh","fileDate","recycleBin","recycleBinCleanupDays","setPermissionsLinux","chmodFolder","chownGroup","RootFolders","AddRootFolder","MediaManagementConnector","namingSettings","handleFieldChange","metadataType","EditMetadataModalContent","isEditMetadataModalOpen","setIsEditMetadataModalOpen","metadataFields","imageFields","handleOpenPress","EditMetadataModal","Metadata","certificationCountryOptions","certificationCountry","dispatchFetchMetadataOptions","dispatchSetMetadataOptionsValue","dispatchSaveMetadataOptions","MetadataOptionsConnector","MetadataOptions","MetadataSettings","Metadatas","AddNotificationPresetMenuItem","AddNotificationItem","onNotificationSelect","AddNotificationModalContent","notification","AddNotificationModalContentConnector","notificationSelected","onHealthIssue","onHealthRestored","supportsOnHealthIssue","supportsOnHealthRestored","includeHealthWarnings","onDeleteNotificationPress","NotificationEventItems","EditNotificationModalContentConnector","EditNotificationModalContent","EditNotificationModalConnector","dispatchCancelTestNotification","dispatchCancelSaveNotification","EditNotificationModal","Notification","onEditNotificationPress","isEditNotificationModalOpen","onEditNotificationModalClose","isDeleteNotificationModalOpen","onDeleteNotificationModalClose","onConfirmDeleteNotification","Notifications","onAddNotificationPress","isAddNotificationModalOpen","onAddNotificationModalClose","AddNotificationModal","NotificationsConnector","protocolOptions","onProtocolChange","onDeleteDelayProfilePress","enableUsenet","enableTorrent","usenetDelay","torrentDelay","bypassIfHighestQuality","bypassIfAboveCustomFormatScore","minimumCustomFormatScore","newDelayProfile","preferredProtocol","EditDelayProfileModalContentConnector","EditDelayProfileModalContent","delayProfile","EditDelayProfileModalConnector","EditDelayProfileModal","getDelay","delay","DelayProfile","onEditDelayProfilePress","isEditDelayProfileModalOpen","onEditDelayProfileModalClose","isDeleteDelayProfileModalOpen","onDeleteDelayProfileModalClose","onConfirmDeleteDelayProfile","preferred","DelayProfileDragPreview","delayProfileDragSource","onDelayProfileDragEnd","delayProfileDropTarget","onDelayProfileDragMove","DelayProfileDragSource","delayProfilePlaceholder","delayProfilePlaceholderBefore","delayProfilePlaceholderAfter","DelayProfiles","onAddDelayProfilePress","isAddDelayProfileModalOpen","defaultProfile","DelayProfilesConnector","QualityProfileFormatItem","onScoreChange","formatId","calcOrder","profileFormatItems","QualityProfileFormatItems","onQualityProfileFormatItemScoreChange","reorderItems","QualityProfileItem","onAllowedChange","onQualityProfileItemAllowedChange","onCreateGroupPress","editGroups","isPreview","groupId","allowed","isOverCurrent","qualityProfileItem","isInGroup","qualityNameContainer","createGroupButton","checkInputContainer","notAllowed","dragHandle","dragIcon","QualityProfileItemDragPreview","QualityProfileItemGroup","onItemGroupAllowedChange","onNameChange","onItemGroupNameChange","onDeleteGroupPress","qualityIndex","onQualityProfileItemDragMove","onQualityProfileItemDragEnd","QualityProfileItemDragSource","qualityProfileItemDragSource","qualityProfileItemDropTarget","dragQualityIndex","isDragGroup","dropQualityIndex","isDropGroupItem","childNodeIndex","shallow","dropPosition","qualityProfileItemPlaceholder","qualityProfileItemPlaceholderBefore","qualityProfileItemPlaceholderAfter","QualityProfileItems","qualitiesHeightEditGroups","qualitiesHeight","onToggleEditGroupsMode","qualityProfileItems","includeMargin","MODAL_BODY_PADDING","getCustomFormatRender","formatItems","EditQualityProfileModalContent","onHeaderMeasure","onBodyMeasure","bodyHeight","onFooterMeasure","footerHeight","isInUse","onCutoffChange","onDeleteQualityProfilePress","upgradeAllowed","cutoff","minFormatScore","minUpgradeFormatScore","cutoffFormatScore","parseIndex","EditQualityProfileModalContentConnector","ensureCutoff","cutoffItem","firstAllowed","cutoffId","Name","getQualityItemGroupId","dragGroupIndex","dragItemIndex","dropGroupIndex","dropItemIndex","adjustedDropQualityIndex","dropGroup","profileProp","EditQualityProfileModal","EditQualityProfileModalConnector","QualityProfile","onEditQualityProfilePress","isEditQualityProfileModalOpen","onEditQualityProfileModalClose","isDeleteQualityProfileModalOpen","onDeleteQualityProfileModalClose","onConfirmDeleteQualityProfile","onCloneQualityProfilePress","isCutoff","groupItem","QualityProfiles","isQualityProfileModalOpen","dispatchDeleteQualityProfile","dispatchCloneQualityProfile","QualityProfilesConnector","tagInputDelimiters","newReleaseProfile","ignored","onDeleteReleaseProfilePress","createReleaseProfileSelector","EditReleaseProfileModalContent","indexerList","isEditReleaseProfileModalOpen","setEditReleaseProfileModalOpen","setEditReleaseProfileModalClosed","isDeleteReleaseProfileModalOpen","setDeleteReleaseProfileModalOpen","setDeleteReleaseProfileModalClosed","EditReleaseProfileModal","isAddReleaseProfileModalOpen","setAddReleaseProfileModalOpen","setAddReleaseProfileModalClosed","ReleaseProfileRow","Profiles","ReleaseProfiles","roundNumber","decimalPlaces","multiplier","bytes","sixty","ninety","hundredTwenty","MAX","slider","inputValue","getSliderValue","QualityDefinition","onSliderChange","sliderMinSize","sliderPreferredSize","sliderMaxSize","onSizeChange","minSize","preferredSize","maxSize","onAfterSliderChange","sliderMiSize","onMinSizeChange","onPreferredSizeChange","onMaxSizeChange","onTitleChange","minBytes","minSixty","preferredBytes","preferredSixty","maxBytes","maxSixty","ReactSlider","minDistance","MIN_DISTANCE","withTracks","allowCross","snapDragDisabled","thumbClassName","onAfterChange","QualityDefinitionLimits","QualityDefinitionConnector","currentMinSize","currentMaxSize","currentPreferredSize","QualityDefinitions","dispatchSaveQualityDefinitions","QualityDefinitionsConnector","ResetQualityDefinitionsModalContent","onResetDefinitionTitlesChange","resetDefinitionTitles","onResetQualityDefinitionsConfirmed","onResetQualityDefinitions","isResettingQualityDefinitions","ResetQualityDefinitionsModalContentConnector","resetTitles","Quality","onResetQualityDefinitionsPress","isConfirmQualityDefinitionResetModalOpen","onCloseResetQualityDefinitionsModal","ResetQualityDefinitionsModal","QualityConnector","onWrappedPress","onWrappedSpecificationSelect","otherFormProps","onWrappedModalClose","onClonePress","EditAutoTaggingModalContent","onDeleteAutoTaggingPress","setIsAddSpecificationModalOpen","setIsEditSpecificationModalOpen","specId","isSavingRef","EditAutoTaggingModal","onOriginalModalClose","setHeight","h","AutoTagging","onConfirmDeleteAutoTagging","onCloneAutoTaggingPress","AutoTaggings","setTagsFromId","findMatchingItems","movieA","movieB","sortTitleA","sortTitleB","delayProfileIds","notificationIds","releaseProfileIds","autoTagIds","autoTags","isTagUsed","onDeleteTagPress","TagDetailsDelayProfile","TagDetailsModalContentConnector","TagInUse","labelPlural","Tag","onShowDetailsPress","isDeleteTagModalOpen","onDeleteTagModalClose","onConfirmDeleteTag","TagDetailsModal","mapStateToProps","tagDetails","TagConnector","dispatchFetchDelayProfiles","dispatchFetchNotifications","dispatchFetchReleaseProfiles","MetadatasConnector","Tags","TagsConnector","FILTER_LANGUAGES","UISettingsConnector","newItems","isLanguagesPopulated","getStepIconProps","isExecuting","hasExecuted","RestoreBackupModalContent","onRestorePress","isRestored","isRestarted","isReloading","dispatchRestart","isRestoreDisabled","RestoreBackupModalContentConnector","BackupRow","isRestoreModalOpen","onRestoreModalClose","onConfirmDeletePress","onDeleteBackupPress","iconTooltip","RestoreBackupModalConnector","Backups","backupExecuting","onBackupPress","hasBackups","noBackups","BackupsConnector","dispatchFetchBackups","level","LogsTableRow","logger","LogsTableDetailsModal","clearLogExecuting","onClearLogsPress","systemActions","LogsTableConnector","onCommandFinished","LogsTable","combinePath","basePath","slash","LogsNavMenu","onMenuItemPress","LogFilesTableRow","lastWriteTime","downloadUrl","LogFiles","deleteFilesExecuting","currentLogView","onDeleteFilesPress","LogFilesConnector","appData","UpdateLogFilesConnector","Logs","setTime","formattedStartTime","uptime","interval","setInterval","clearInterval","packageVersion","packageAuthor","isNetCore","runtimeVersion","databaseVersion","databaseType","migrationVersion","startupPath","StartTime","totalSpace","diskUsage","diskUsageKind","source","isTestingAllDownloadClients","isTestingAllIndexers","healthIssues","handleTestAllDownloadClientsPress","handleTestAllIndexersPress","wikiUrl","HealthItemLink","Health","DiskSpace","About","MoreInfo","Donations","QueuedTaskRowNameCell","_body$movieIds","commandName","clientUserAgent","createMultiMoviesSelector","titles","getFormattedDates","started","ended","queuedAt","fromNow","startedAt","endedAt","QueuedTaskRow","updateTimeTimeoutId","times","setTimes","isCancelConfirmModalOpen","openCancelConfirmModal","closeCancelConfirmModal","triggerIcon","getStatusIconProps","QueuedTasks","taskName","lastExecution","lastStartTime","lastDuration","nextExecution","wasExecuting","executeNow","hasNextExecutionTime","hasLastStartTime","humanize","lastExecutionTime","nextExecutionTime","handleExecutePress","ScheduledTaskRow","ScheduledTasks","VERSION_REGEX","currentVersion","packageUpdateMechanismMessage","isInstallingUpdate","updatesError","generalSettingsError","generalSettings","isMajorUpdateModalOpen","setIsMajorUpdateModalOpen","hasUpdates","noUpdates","externalUpdaterPrefix","externalUpdaterMessages","external","apt","docker","isMajorUpdate","hasUpdateToInstall","_currentVersion$match","_currentVersion$match2","_items$","_latestVersion$match$","_latestVersion$match","majorVersion","latestVersion","installable","latest","noUpdateToInstall","handleInstallLatestPress","handleInstallLatestMajorVersionPress","installMajorUpdate","handleCancelMajorVersionPress","installedOn","domain","getFilterValue","filterValueKey","removeOldSelectedState","setInteractiveSearchModalOpen","setInteractiveSearchModalClosed","_movieFile$languages","lastSearchTime","MovieFileLanguages","MovieStatus","MovieSearchCell","getMonitoredValue","CutoffUnmet","onFilterMenuItemPress","onSearchSelectedPress","onToggleSelectedPress","onSearchAllCutoffUnmetPress","isConfirmSearchAllCutoffUnmetModalOpen","onSearchAllCutoffUnmetConfirmed","onConfirmSearchAllCutoffUnmetModalClose","isSearchingForCutoffUnmetMovies","itemsSelected","isShowingMonitored","CutoffUnmetRow","wantedActions","CutoffUnmetConnector","isSearchingForSelectedCutoffUnmetMovies","Missing","onSearchAllMissingPress","isConfirmSearchAllMissingModalOpen","onSearchAllMissingConfirmed","onConfirmSearchAllMissingModalClose","isSearchingForMissingMovies","MissingRow","MissingConnector","isSearchingForSelectedMissingMovies","RedirectWithUrlBase","Redirect","MovieDetailsPage","CalendarPageConnector","History","Queue","Blocklist","Settings","CustomFormatSettingsPage","IndexerSettingsConnector","DownloadClientSettingsConnector","ImportListSettingsConnector","NotificationSettings","TagSettings","Status","Tasks","Updates","ConnectedRouter","ApplyTheme","AppRoutes","hasWarned","attachAsyncActions","res","ResourceApi","api","single","pred","delete","isInteger","bootstrap","createBrowserHistory","createAppStore","createRoot","App","RadarrApi","req","webpackContext","webpackContextResolve","__webpack_require__"],"sourceRoot":""}