{"version":3,"file":"286-90e74a161453d0aafd17.js","mappings":"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","sources":["webpack://prowlarr/./frontend/src/Styles/Themes/dark.js","webpack://prowlarr/./frontend/src/Styles/Themes/light.js","webpack://prowlarr/./frontend/src/Styles/Variables/dimensions.js","webpack://prowlarr/./frontend/src/Styles/Variables/fonts.js","webpack://prowlarr/./frontend/src/Store/thunks.ts","webpack://prowlarr/./frontend/src/Utilities/createAjaxRequest.js","webpack://prowlarr/./frontend/src/Utilities/State/getSectionState.js","webpack://prowlarr/./frontend/src/Utilities/State/updateSectionState.js","webpack://prowlarr/./frontend/src/Utilities/String/translate.ts","webpack://prowlarr/./frontend/src/Store/Actions/baseActions.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createHandleActions.js","webpack://prowlarr/./frontend/src/Store/Actions/appActions.js","webpack://prowlarr/./frontend/src/Utilities/requestAction.js","webpack://prowlarr/./frontend/src/Store/Actions/captchaActions.js","webpack://prowlarr/./frontend/src/Helpers/Props/align.ts","webpack://prowlarr/./frontend/src/Helpers/Props/filterTypes.js","webpack://prowlarr/./frontend/src/Helpers/Props/filterBuilderTypes.js","webpack://prowlarr/./frontend/src/Helpers/Props/filterBuilderValueTypes.js","webpack://prowlarr/./frontend/src/Helpers/Props/filterTypePredicates.js","webpack://prowlarr/./frontend/src/Helpers/Props/icons.js","webpack://prowlarr/./frontend/src/Helpers/Props/inputTypes.js","webpack://prowlarr/./frontend/src/Helpers/Props/kinds.ts","webpack://prowlarr/./frontend/src/Helpers/Props/scrollDirections.js","webpack://prowlarr/./frontend/src/Helpers/Props/sizes.ts","webpack://prowlarr/./frontend/src/Helpers/Props/sortDirections.js","webpack://prowlarr/./frontend/src/Helpers/Props/tooltipPositions.js","webpack://prowlarr/./frontend/src/Utilities/Command/isSameCommand.js","webpack://prowlarr/./frontend/src/Utilities/Command/isCommandExecuting.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createFetchHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createRemoveItemHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/commandActions.js","webpack://prowlarr/./frontend/src/Helpers/Props/messageTypes.js","webpack://prowlarr/./frontend/src/Utilities/State/getProviderState.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createSaveProviderHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/customFilterActions.js","webpack://prowlarr/./frontend/src/Utilities/serverSideCollectionHandlers.js","webpack://prowlarr/./frontend/src/Utilities/pages.js","webpack://prowlarr/./frontend/src/Utilities/Filter/findSelectedFilters.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createFetchServerSideCollectionHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createSetServerSideCollectionPageHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createServerSideCollectionHandlers.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createSetServerSideCollectionSortHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createSetServerSideCollectionFilterHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/Reducers/createClearReducer.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/Reducers/createSetTableOptionReducer.js","webpack://prowlarr/./frontend/src/Store/Actions/historyActions.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createTestAllProvidersHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createTestProviderHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/Reducers/createSetSettingValueReducer.js","webpack://prowlarr/./frontend/src/Utilities/Date/isAfter.js","webpack://prowlarr/./frontend/src/Utilities/Date/isBefore.js","webpack://prowlarr/./frontend/src/Utilities/Date/dateFilterPredicate.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createBulkEditItemHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createBulkRemoveItemHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer.js","webpack://prowlarr/./frontend/src/Store/Actions/indexerActions.js","webpack://prowlarr/./frontend/src/Store/Actions/indexerHistoryActions.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/Reducers/createSetClientSideCollectionFilterReducer.js","webpack://prowlarr/./frontend/src/Store/Actions/indexerIndexActions.js","webpack://prowlarr/./frontend/src/Store/Actions/indexerStatsActions.js","webpack://prowlarr/./frontend/src/Store/Actions/indexerStatusActions.js","webpack://prowlarr/./frontend/src/Store/Actions/localizationActions.js","webpack://prowlarr/./frontend/src/Store/Actions/oAuthActions.js","webpack://prowlarr/./frontend/src/Store/Actions/pathActions.js","webpack://prowlarr/./frontend/src/Store/Actions/providerOptionActions.js","webpack://prowlarr/./frontend/src/Components/Icon.css?5cc4","webpack://prowlarr/./frontend/src/Components/Icon.js","webpack://prowlarr/./frontend/src/Store/Actions/releaseActions.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createFetchSchemaHandler.js","webpack://prowlarr/./frontend/src/Utilities/State/selectProviderSchema.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/applications.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/appProfiles.js","webpack://prowlarr/./frontend/src/Store/Actions/Creators/createSaveHandler.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/development.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/downloadClientCategories.js","webpack://prowlarr/./frontend/src/Utilities/State/getNextId.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/downloadClients.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/general.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/indexerCategories.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/indexerProxies.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/notifications.js","webpack://prowlarr/./frontend/src/Store/Actions/Settings/ui.js","webpack://prowlarr/./frontend/src/Store/Actions/settingsActions.js","webpack://prowlarr/./frontend/src/Store/Actions/systemActions.js","webpack://prowlarr/./frontend/src/Store/Actions/tagActions.js","webpack://prowlarr/./frontend/src/Store/Actions/index.js","webpack://prowlarr/./frontend/src/Store/Actions/createReducers.js","webpack://prowlarr/./frontend/src/Store/Middleware/createPersistState.js","webpack://prowlarr/./frontend/src/Utilities/String/parseUrl.js","webpack://prowlarr/./frontend/src/Store/Middleware/createSentryMiddleware.js","webpack://prowlarr/./frontend/src/Store/Middleware/middlewares.js","webpack://prowlarr/./frontend/src/Store/createAppStore.js","webpack://prowlarr/./frontend/src/Store/Selectors/createDimensionsSelector.ts","webpack://prowlarr/./frontend/src/Store/Selectors/createSystemStatusSelector.ts","webpack://prowlarr/./frontend/src/Utilities/Object/getErrorMessage.js","webpack://prowlarr/./frontend/src/Components/Page/ErrorPage.css?8f10","webpack://prowlarr/./frontend/src/Components/Page/ErrorPage.js","webpack://prowlarr/./frontend/src/Components/Loading/LoadingIndicator.js","webpack://prowlarr/./frontend/src/Components/Loading/LoadingIndicator.css?5c79","webpack://prowlarr/./frontend/src/Components/Loading/LoadingMessage.js","webpack://prowlarr/./frontend/src/Components/Loading/LoadingMessage.css?f5a2","webpack://prowlarr/./frontend/src/Components/Page/LoadingPage.js","webpack://prowlarr/./frontend/src/Components/Page/LoadingPage.css?45af","webpack://prowlarr/./frontend/src/Components/Error/ErrorBoundary.js","webpack://prowlarr/./frontend/src/Utilities/browser.js","webpack://prowlarr/./frontend/src/Utilities/getUniqueElementId.js","webpack://prowlarr/./frontend/src/Utilities/scrollLock.js","webpack://prowlarr/./frontend/src/Components/Error/ErrorBoundaryError.css?3f08","webpack://prowlarr/./frontend/src/Components/Error/ErrorBoundaryError.tsx","webpack://prowlarr/./frontend/src/Components/Link/Link.tsx","webpack://prowlarr/./frontend/src/Components/Link/Link.css?ff0e","webpack://prowlarr/./frontend/src/Components/Link/Button.css?d65a","webpack://prowlarr/./frontend/src/Components/Link/Button.tsx","webpack://prowlarr/./frontend/src/Helpers/Props/ScrollDirection.ts","webpack://prowlarr/./frontend/src/Components/Scroller/Scroller.css?1320","webpack://prowlarr/./frontend/src/Components/Scroller/Scroller.tsx","webpack://prowlarr/./frontend/src/Components/Modal/ModalBody.js","webpack://prowlarr/./frontend/src/Components/Modal/ModalBody.css?f2e2","webpack://prowlarr/./frontend/src/Components/Modal/ModalContent.js","webpack://prowlarr/./frontend/src/Components/Modal/ModalContent.css?4f22","webpack://prowlarr/./frontend/src/Components/Modal/ModalFooter.js","webpack://prowlarr/./frontend/src/Components/Modal/ModalFooter.css?a929","webpack://prowlarr/./frontend/src/Components/Modal/ModalHeader.js","webpack://prowlarr/./frontend/src/Components/Modal/ModalHeader.css?e1c1","webpack://prowlarr/./frontend/src/Components/Modal/ModalError.js","webpack://prowlarr/./frontend/src/Components/Modal/ModalError.css?412d","webpack://prowlarr/./frontend/src/Components/Modal/Modal.css?3c62","webpack://prowlarr/./frontend/src/Components/Modal/Modal.js","webpack://prowlarr/./frontend/src/Utilities/Constants/keyCodes.js","webpack://prowlarr/./frontend/src/Components/Markdown/InlineMarkdown.js","webpack://prowlarr/./frontend/src/Helpers/Hooks/usePrevious.tsx","webpack://prowlarr/./frontend/src/System/Updates/UpdateChanges.css?75f8","webpack://prowlarr/./frontend/src/System/Updates/UpdateChanges.tsx","webpack://prowlarr/./frontend/src/App/AppUpdatedModalContent.tsx","webpack://prowlarr/./frontend/src/App/AppUpdatedModalContent.css?8a82","webpack://prowlarr/./frontend/src/App/AppUpdatedModal.tsx","webpack://prowlarr/./frontend/src/App/ColorImpairedContext.ts","webpack://prowlarr/./frontend/src/App/ConnectionLostModal.tsx","webpack://prowlarr/./frontend/src/App/ConnectionLostModal.css?cbb7","webpack://prowlarr/./frontend/src/Utilities/pagePopulator.js","webpack://prowlarr/./frontend/src/Utilities/String/titleCase.js","webpack://prowlarr/./frontend/src/Components/SignalRConnector.js","webpack://prowlarr/./frontend/src/Store/Selectors/selectSettings.js","webpack://prowlarr/./frontend/src/Store/Selectors/createSettingsSectionSelector.js","webpack://prowlarr/./frontend/src/Components/Alert.css?5313","webpack://prowlarr/./frontend/src/Components/Alert.js","webpack://prowlarr/./frontend/src/Helpers/elementChildren.js","webpack://prowlarr/./frontend/src/Components/Form/FormGroup.css?2927","webpack://prowlarr/./frontend/src/Components/Form/FormGroup.js","webpack://prowlarr/./frontend/src/Store/Selectors/createSortedSectionSelector.ts","webpack://prowlarr/./frontend/src/Utilities/Array/sortByProp.ts","webpack://prowlarr/./frontend/src/Components/Form/SelectInput.js","webpack://prowlarr/./frontend/src/Components/Form/SelectInput.css?e48d","webpack://prowlarr/./frontend/src/Components/Form/AppProfileSelectInputConnector.js","webpack://prowlarr/./frontend/src/Components/Portal.js","webpack://prowlarr/./frontend/src/Components/Form/AutoSuggestInput.css?203d","webpack://prowlarr/./frontend/src/Components/Form/AutoSuggestInput.js","webpack://prowlarr/./frontend/src/Components/Form/AutoCompleteInput.js","webpack://prowlarr/./frontend/src/Components/Link/SpinnerButton.css?1215","webpack://prowlarr/./frontend/src/Components/Link/SpinnerButton.js","webpack://prowlarr/./frontend/src/Components/Form/FormInputButton.css?af61","webpack://prowlarr/./frontend/src/Components/Form/FormInputButton.tsx","webpack://prowlarr/./frontend/src/Components/Form/TextInput.js","webpack://prowlarr/./frontend/src/Components/Form/TextInput.css?9a18","webpack://prowlarr/./frontend/src/Components/Form/CaptchaInput.css?be19","webpack://prowlarr/./frontend/src/Components/Form/CaptchaInput.js","webpack://prowlarr/./frontend/src/Components/Form/CaptchaInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/CardigannCaptchaInput.js","webpack://prowlarr/./frontend/src/Components/Form/CardigannCaptchaInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/FormInputHelpText.js","webpack://prowlarr/./frontend/src/Components/Form/FormInputHelpText.css?81d1","webpack://prowlarr/./frontend/src/Components/Form/CheckInput.css?c298","webpack://prowlarr/./frontend/src/Components/Form/CheckInput.js","webpack://prowlarr/./frontend/src/Helpers/Props/Shapes/tagShape.js","webpack://prowlarr/./frontend/src/Components/Form/TagInputInput.js","webpack://prowlarr/./frontend/src/Components/Form/TagInputInput.css?2507","webpack://prowlarr/./frontend/src/Components/Label.css?3bf7","webpack://prowlarr/./frontend/src/Components/Label.tsx","webpack://prowlarr/./frontend/src/Components/Form/TagInputTag.js","webpack://prowlarr/./frontend/src/Components/Form/TagInputTag.css?fb47","webpack://prowlarr/./frontend/src/Components/Form/TagInput.css?ad05","webpack://prowlarr/./frontend/src/Components/Form/TagInput.js","webpack://prowlarr/./frontend/src/Components/Form/DeviceInput.css?19fe","webpack://prowlarr/./frontend/src/Components/Form/DeviceInput.js","webpack://prowlarr/./frontend/src/Components/Form/DeviceInputConnector.js","webpack://prowlarr/./frontend/src/Components/Measure.js","webpack://prowlarr/./frontend/src/Components/Form/EnhancedSelectInputOption.js","webpack://prowlarr/./frontend/src/Components/Form/EnhancedSelectInputOption.css?16ae","webpack://prowlarr/./frontend/src/Components/Form/HintedSelectInputOption.js","webpack://prowlarr/./frontend/src/Components/Form/HintedSelectInputOption.css?3ebe","webpack://prowlarr/./frontend/src/Components/Form/EnhancedSelectInputSelectedValue.js","webpack://prowlarr/./frontend/src/Components/Form/EnhancedSelectInputSelectedValue.css?fbb5","webpack://prowlarr/./frontend/src/Components/Form/HintedSelectInputSelectedValue.js","webpack://prowlarr/./frontend/src/Components/Form/HintedSelectInputSelectedValue.css?47ff","webpack://prowlarr/./frontend/src/Components/Form/EnhancedSelectInput.css?e7b1","webpack://prowlarr/./frontend/src/Components/Form/EnhancedSelectInput.js","webpack://prowlarr/./frontend/src/Components/Form/DownloadClientSelectInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/EnhancedSelectInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/IndexerFlagsSelectInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/InfoInput.js","webpack://prowlarr/./frontend/src/Components/Form/InfoInput.css?ec6e","webpack://prowlarr/./frontend/src/Components/Link/IconButton.js","webpack://prowlarr/./frontend/src/Components/Link/IconButton.css?7c5a","webpack://prowlarr/./frontend/src/Components/Form/KeyValueListInputItem.css?ee61","webpack://prowlarr/./frontend/src/Components/Form/KeyValueListInputItem.js","webpack://prowlarr/./frontend/src/Components/Form/KeyValueListInput.js","webpack://prowlarr/./frontend/src/Components/Form/KeyValueListInput.css?6bb4","webpack://prowlarr/./frontend/src/Components/Form/NewznabCategorySelectInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/NumberInput.js","webpack://prowlarr/./frontend/src/Components/Link/SpinnerErrorButton.js","webpack://prowlarr/./frontend/src/Components/Link/SpinnerErrorButton.css?a79f","webpack://prowlarr/./frontend/src/Components/Form/OAuthInput.js","webpack://prowlarr/./frontend/src/Components/Form/OAuthInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/PasswordInput.js","webpack://prowlarr/./frontend/src/Components/Tooltip/Tooltip.css?0478","webpack://prowlarr/./frontend/src/Components/Tooltip/Tooltip.js","webpack://prowlarr/./frontend/src/Components/Form/Form.css?7666","webpack://prowlarr/./frontend/src/Components/Form/Form.js","webpack://prowlarr/./frontend/src/Components/Form/FormLabel.css?69e8","webpack://prowlarr/./frontend/src/Components/Form/FormLabel.js","webpack://prowlarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumn.js","webpack://prowlarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumn.css?e25f","webpack://prowlarr/./frontend/src/Components/DragPreviewLayer.js","webpack://prowlarr/./frontend/src/Components/DragPreviewLayer.css?3b68","webpack://prowlarr/./frontend/src/Helpers/dragTypes.js","webpack://prowlarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumnDragPreview.js","webpack://prowlarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumnDragPreview.css?0401","webpack://prowlarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumnDragSource.css?834c","webpack://prowlarr/./frontend/src/Components/Table/TableOptions/TableOptionsColumnDragSource.js","webpack://prowlarr/./frontend/src/Components/Table/TableOptions/TableOptionsModal.js","webpack://prowlarr/./frontend/src/Components/Table/TableOptions/TableOptionsModal.css?c5cf","webpack://prowlarr/./frontend/src/Components/Table/TableOptions/TableOptionsModalWrapper.js","webpack://prowlarr/./frontend/src/Components/Table/TableHeader.js","webpack://prowlarr/./frontend/src/Components/Table/TableHeaderCell.js","webpack://prowlarr/./frontend/src/Components/Table/TableHeaderCell.css?02b0","webpack://prowlarr/./frontend/src/Components/Table/TableSelectAllHeaderCell.js","webpack://prowlarr/./frontend/src/Components/Table/TableSelectAllHeaderCell.css?cbd1","webpack://prowlarr/./frontend/src/Components/Table/Table.css?930f","webpack://prowlarr/./frontend/src/Components/Table/Table.js","webpack://prowlarr/./frontend/src/Components/Table/TableBody.js","webpack://prowlarr/./frontend/src/Components/Table/Cells/TableRowCell.js","webpack://prowlarr/./frontend/src/Components/Table/Cells/TableRowCell.css?4c08","webpack://prowlarr/./frontend/src/Components/Table/TableRow.js","webpack://prowlarr/./frontend/src/Components/Table/TableRow.css?acf4","webpack://prowlarr/./frontend/src/Components/Table/TableRowButton.js","webpack://prowlarr/./frontend/src/Components/Table/TableRowButton.css?e06d","webpack://prowlarr/./frontend/src/Components/FileBrowser/FileBrowserRow.js","webpack://prowlarr/./frontend/src/Components/FileBrowser/FileBrowserRow.css?721e","webpack://prowlarr/./frontend/src/Components/FileBrowser/FileBrowserModalContent.js","webpack://prowlarr/./frontend/src/Components/FileBrowser/FileBrowserModalContent.css?7e6b","webpack://prowlarr/./frontend/src/Components/FileBrowser/FileBrowserModalContentConnector.js","webpack://prowlarr/./frontend/src/Components/FileBrowser/FileBrowserModal.js","webpack://prowlarr/./frontend/src/Components/FileBrowser/FileBrowserModal.css?5e8a","webpack://prowlarr/./frontend/src/Components/Form/PathInput.js","webpack://prowlarr/./frontend/src/Components/Form/PathInput.css?0091","webpack://prowlarr/./frontend/src/Components/Form/PathInputConnector.js","webpack://prowlarr/./frontend/src/Store/Selectors/createTagsSelector.ts","webpack://prowlarr/./frontend/src/Components/Form/TagInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/TagSelectInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/TextArea.js","webpack://prowlarr/./frontend/src/Components/Form/TextArea.css?c77c","webpack://prowlarr/./frontend/src/Utilities/String/split.js","webpack://prowlarr/./frontend/src/Components/Form/TextTagInputConnector.js","webpack://prowlarr/./frontend/src/Components/Form/FormInputGroup.js","webpack://prowlarr/./frontend/src/Components/Form/FormInputGroup.css?25f0","webpack://prowlarr/./frontend/src/Components/FieldSet.js","webpack://prowlarr/./frontend/src/Components/FieldSet.css?a02e","webpack://prowlarr/./frontend/src/Components/Link/ClipboardButton.css?1b8d","webpack://prowlarr/./frontend/src/Components/Link/ClipboardButton.tsx","webpack://prowlarr/./frontend/src/Components/keyboardShortcuts.js","webpack://prowlarr/./frontend/src/Helpers/getDisplayName.js","webpack://prowlarr/./frontend/src/Components/Modal/ConfirmModal.js","webpack://prowlarr/./frontend/src/Settings/General/SecuritySettings.js","webpack://prowlarr/./frontend/src/FirstRun/AuthenticationRequiredModalContent.js","webpack://prowlarr/./frontend/src/FirstRun/AuthenticationRequiredModalContent.css?4c84","webpack://prowlarr/./frontend/src/FirstRun/AuthenticationRequiredModalContentConnector.js","webpack://prowlarr/./frontend/src/FirstRun/AuthenticationRequiredModal.js","webpack://prowlarr/./frontend/src/Helpers/Props/Shapes/locationShape.js","webpack://prowlarr/./frontend/src/Store/Selectors/createAllIndexersSelector.ts","webpack://prowlarr/./frontend/src/Store/Selectors/createDeepEqualSelector.ts","webpack://prowlarr/./frontend/src/Components/Page/Header/IndexerSearchResult.js","webpack://prowlarr/./frontend/src/Components/Page/Header/IndexerSearchResult.css?98e8","webpack://prowlarr/./frontend/src/Components/Page/Header/IndexerSearchInput.js","webpack://prowlarr/./frontend/src/Components/Page/Header/IndexerSearchInput.css?b1f8","webpack://prowlarr/./frontend/src/Components/Page/Header/IndexerSearchInputConnector.js","webpack://prowlarr/./frontend/src/Components/Page/Header/KeyboardShortcutsModalContentConnector.js","webpack://prowlarr/./frontend/src/Components/Page/Header/KeyboardShortcutsModalContent.js","webpack://prowlarr/./frontend/src/Components/Page/Header/KeyboardShortcutsModalContent.css?2381","webpack://prowlarr/./frontend/src/Components/Page/Header/KeyboardShortcutsModal.js","webpack://prowlarr/./frontend/src/Components/Menu/Menu.js","webpack://prowlarr/./frontend/src/Components/Menu/Menu.css?746f","webpack://prowlarr/./frontend/src/Components/Menu/MenuButton.js","webpack://prowlarr/./frontend/src/Components/Menu/MenuButton.css?ba1e","webpack://prowlarr/./frontend/src/Components/Menu/MenuContent.js","webpack://prowlarr/./frontend/src/Components/Menu/MenuContent.css?9231","webpack://prowlarr/./frontend/src/Components/Menu/MenuItem.js","webpack://prowlarr/./frontend/src/Components/Menu/MenuItem.css?4af2","webpack://prowlarr/./frontend/src/Components/Menu/MenuItemSeparator.js","webpack://prowlarr/./frontend/src/Components/Menu/MenuItemSeparator.css?35de","webpack://prowlarr/./frontend/src/Components/Page/Header/PageHeaderActionsMenu.css?168d","webpack://prowlarr/./frontend/src/Components/Page/Header/PageHeaderActionsMenu.tsx","webpack://prowlarr/./frontend/src/Components/Page/Header/PageHeader.js","webpack://prowlarr/./frontend/src/Components/Page/Header/PageHeader.css?94db","webpack://prowlarr/./frontend/src/Components/Scroller/OverlayScroller.css?f56f","webpack://prowlarr/./frontend/src/Components/Scroller/OverlayScroller.js","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/PageSidebarStatus.js","webpack://prowlarr/./frontend/src/System/Status/Health/createHealthSelector.ts","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/Messages/Message.css?4a3f","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/Messages/Message.js","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/Messages/MessageConnector.js","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/Messages/Messages.js","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/Messages/MessagesConnector.js","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/Messages/Messages.css?0f92","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/PageSidebarItem.js","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/PageSidebarItem.css?ef51","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/PageSidebar.js","webpack://prowlarr/./frontend/src/System/Status/Health/HealthStatus.tsx","webpack://prowlarr/./frontend/src/Components/Page/Sidebar/PageSidebar.css?71f8","webpack://prowlarr/./frontend/src/Components/Page/Page.js","webpack://prowlarr/./frontend/src/Components/Page/Page.css?56e1","webpack://prowlarr/./frontend/src/Components/Page/PageConnector.js","webpack://prowlarr/./frontend/src/Styles/Themes/index.js","webpack://prowlarr/./frontend/src/App/ApplyTheme.tsx","webpack://prowlarr/./frontend/src/Components/Page/PageContentBody.css?c046","webpack://prowlarr/./frontend/src/Components/Page/PageContentBody.tsx","webpack://prowlarr/./frontend/src/Components/Page/PageContentError.js","webpack://prowlarr/./frontend/src/Components/Page/PageContentError.css?13b5","webpack://prowlarr/./frontend/src/Components/Page/PageContent.js","webpack://prowlarr/./frontend/src/Components/Page/PageContent.css?3a37","webpack://prowlarr/./frontend/src/Components/NotFound.js","webpack://prowlarr/./frontend/src/Components/NotFound.css?3de2","webpack://prowlarr/./frontend/src/Utilities/getPathWithUrlBase.ts","webpack://prowlarr/./frontend/src/Components/Router/Switch.js","webpack://prowlarr/./frontend/src/Commands/commandNames.js","webpack://prowlarr/./frontend/src/Components/withCurrentPage.js","webpack://prowlarr/./frontend/src/Store/Selectors/createClientSideCollectionSelector.js","webpack://prowlarr/./frontend/src/Store/Selectors/createCommandSelector.ts","webpack://prowlarr/./frontend/src/Store/Selectors/createCommandsSelector.ts","webpack://prowlarr/./frontend/src/Utilities/Command/findCommand.js","webpack://prowlarr/./frontend/src/Store/Selectors/createCommandExecutingSelector.ts","webpack://prowlarr/./frontend/src/Components/Menu/SelectedMenuItem.js","webpack://prowlarr/./frontend/src/Components/Menu/SelectedMenuItem.css?422f","webpack://prowlarr/./frontend/src/Components/Menu/FilterMenuItem.js","webpack://prowlarr/./frontend/src/Components/Menu/FilterMenuContent.js","webpack://prowlarr/./frontend/src/Components/Menu/ToolbarMenuButton.js","webpack://prowlarr/./frontend/src/Components/Menu/ToolbarMenuButton.css?a2b7","webpack://prowlarr/./frontend/src/Components/Menu/FilterMenu.js","webpack://prowlarr/./frontend/src/Components/Menu/FilterMenu.css?32ac","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbar.js","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbar.css?17eb","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbarButton.js","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbarButton.css?5ad0","webpack://prowlarr/./frontend/src/Components/SpinnerIcon.js","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbarOverflowMenuItem.tsx","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbarOverflowMenuItem.css?8f2d","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbarSection.css?5e36","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbarSection.js","webpack://prowlarr/./frontend/src/Components/Table/TablePager.css?0121","webpack://prowlarr/./frontend/src/Components/Table/TablePager.js","webpack://prowlarr/./frontend/src/Utilities/Number/convertToBytes.js","webpack://prowlarr/./frontend/src/Utilities/Number/formatBytes.ts","webpack://prowlarr/./frontend/src/Components/Filter/Builder/FilterBuilderRowValueTag.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/FilterBuilderRowValueTag.css?c732","webpack://prowlarr/./frontend/src/Components/Filter/Builder/FilterBuilderRowValue.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/AppProfileFilterBuilderRowValueConnector.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/BoolFilterBuilderRowValue.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/CategoryFilterBuilderRowValue.tsx","webpack://prowlarr/./frontend/src/Utilities/String/isString.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/DateFilterBuilderRowValue.css?767f","webpack://prowlarr/./frontend/src/Components/Filter/Builder/DateFilterBuilderRowValue.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/FilterBuilderRowValueConnector.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/HistoryEventTypeFilterBuilderRowValue.tsx","webpack://prowlarr/./frontend/src/Components/Filter/Builder/IndexerFilterBuilderRowValueConnector.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/PrivacyFilterBuilderRowValue.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/ProtocolFilterBuilderRowValue.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/TagFilterBuilderRowValueConnector.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/FilterBuilderRow.css?81ae","webpack://prowlarr/./frontend/src/Components/Filter/Builder/FilterBuilderRow.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/FilterBuilderModalContent.css?2312","webpack://prowlarr/./frontend/src/Components/Filter/Builder/FilterBuilderModalContent.js","webpack://prowlarr/./frontend/src/Components/Filter/Builder/FilterBuilderModalContentConnector.js","webpack://prowlarr/./frontend/src/Components/Link/SpinnerIconButton.js","webpack://prowlarr/./frontend/src/Components/Filter/CustomFilters/CustomFilter.js","webpack://prowlarr/./frontend/src/Components/Filter/CustomFilters/CustomFilter.css?3a27","webpack://prowlarr/./frontend/src/Components/Filter/CustomFilters/CustomFiltersModalContentConnector.js","webpack://prowlarr/./frontend/src/Components/Filter/CustomFilters/CustomFiltersModalContent.js","webpack://prowlarr/./frontend/src/Components/Filter/CustomFilters/CustomFiltersModalContent.css?feba","webpack://prowlarr/./frontend/src/Components/Filter/FilterModal.js","webpack://prowlarr/./frontend/src/History/HistoryFilterModal.tsx","webpack://prowlarr/./frontend/src/History/HistoryOptions.js","webpack://prowlarr/./frontend/src/History/HistoryOptionsConnector.js","webpack://prowlarr/./frontend/src/Store/Selectors/createIndexerSelector.ts","webpack://prowlarr/./frontend/src/Store/Selectors/createUISettingsSelector.ts","webpack://prowlarr/./frontend/src/Utilities/Date/formatTime.js","webpack://prowlarr/./frontend/src/Utilities/Date/isToday.js","webpack://prowlarr/./frontend/src/Utilities/Date/isTomorrow.js","webpack://prowlarr/./frontend/src/Utilities/Date/isYesterday.js","webpack://prowlarr/./frontend/src/Utilities/Date/formatDateTime.js","webpack://prowlarr/./frontend/src/Utilities/Date/getRelativeDate.js","webpack://prowlarr/./frontend/src/Utilities/Date/isInNextWeek.js","webpack://prowlarr/./frontend/src/Components/Table/Cells/RelativeDateCell.js","webpack://prowlarr/./frontend/src/Components/Table/Cells/RelativeDateCell.css?459d","webpack://prowlarr/./frontend/src/Indexer/Index/Table/CapabilitiesLabel.tsx","webpack://prowlarr/./frontend/src/Components/DescriptionList/DescriptionList.js","webpack://prowlarr/./frontend/src/Components/DescriptionList/DescriptionList.css?44ad","webpack://prowlarr/./frontend/src/Components/DescriptionList/DescriptionListItemDescription.js","webpack://prowlarr/./frontend/src/Components/DescriptionList/DescriptionListItemDescription.css?c3aa","webpack://prowlarr/./frontend/src/Components/DescriptionList/DescriptionListItemTitle.js","webpack://prowlarr/./frontend/src/Components/DescriptionList/DescriptionListItemTitle.css?83e5","webpack://prowlarr/./frontend/src/Components/DescriptionList/DescriptionListItem.js","webpack://prowlarr/./frontend/src/History/Details/HistoryDetails.css?6f83","webpack://prowlarr/./frontend/src/History/Details/HistoryDetails.js","webpack://prowlarr/./frontend/src/History/Details/HistoryDetailsModal.js","webpack://prowlarr/./frontend/src/History/historyDataTypes.js","webpack://prowlarr/./frontend/src/History/HistoryEventTypeCell.js","webpack://prowlarr/./frontend/src/History/HistoryEventTypeCell.css?c763","webpack://prowlarr/./frontend/src/History/HistoryRowParameter.tsx","webpack://prowlarr/./frontend/src/History/HistoryRowParameter.css?10cb","webpack://prowlarr/./frontend/src/History/HistoryRow.css?8e1a","webpack://prowlarr/./frontend/src/History/HistoryRow.js","webpack://prowlarr/./frontend/src/History/HistoryRowConnector.js","webpack://prowlarr/./frontend/src/History/History.js","webpack://prowlarr/./frontend/src/History/HistoryConnector.js","webpack://prowlarr/./frontend/src/Utilities/Table/areAllSelected.js","webpack://prowlarr/./frontend/src/Utilities/Table/selectAll.js","webpack://prowlarr/./frontend/src/Utilities/Table/toggleSelected.js","webpack://prowlarr/./frontend/src/Utilities/Table/getToggledRange.js","webpack://prowlarr/./frontend/src/Helpers/Hooks/useSelectState.tsx","webpack://prowlarr/./frontend/src/App/SelectContext.tsx","webpack://prowlarr/./frontend/src/Components/Page/PageJumpBarItem.js","webpack://prowlarr/./frontend/src/Components/Page/PageJumpBarItem.css?a3b2","webpack://prowlarr/./frontend/src/Components/Page/PageJumpBar.js","webpack://prowlarr/./frontend/src/Components/Page/PageJumpBar.css?a967","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js","webpack://prowlarr/./frontend/src/Components/Page/Toolbar/PageToolbarSeparator.css?c319","webpack://prowlarr/./frontend/src/Store/scrollPositions.ts","webpack://prowlarr/./frontend/src/Components/withScrollPosition.tsx","webpack://prowlarr/./frontend/src/Helpers/Props/SortDirection.ts","webpack://prowlarr/./frontend/src/Indexer/Index/Table/PrivacyLabel.css?5c9e","webpack://prowlarr/./frontend/src/Indexer/Index/Table/PrivacyLabel.tsx","webpack://prowlarr/./frontend/src/Utilities/String/firstCharToUpper.js","webpack://prowlarr/./frontend/src/Indexer/Index/Table/ProtocolLabel.css?5793","webpack://prowlarr/./frontend/src/Indexer/Index/Table/ProtocolLabel.tsx","webpack://prowlarr/./frontend/src/Indexer/Add/SelectIndexerRow.tsx","webpack://prowlarr/./frontend/src/Indexer/Add/SelectIndexerRow.css?d88f","webpack://prowlarr/./frontend/src/Indexer/Add/AddIndexerModalContent.css?ceca","webpack://prowlarr/./frontend/src/Indexer/Add/AddIndexerModalContent.tsx","webpack://prowlarr/./frontend/src/Indexer/Add/AddIndexerModal.tsx","webpack://prowlarr/./frontend/src/Indexer/Add/AddIndexerModal.css?3ada","webpack://prowlarr/./frontend/src/Components/Form/ProviderFieldFormGroup.js","webpack://prowlarr/./frontend/src/Settings/AdvancedSettingsButton.js","webpack://prowlarr/./frontend/src/Settings/AdvancedSettingsButton.css?af2d","webpack://prowlarr/./frontend/src/Indexer/Edit/EditIndexerModalContent.js","webpack://prowlarr/./frontend/src/Indexer/Edit/EditIndexerModalContent.css?b7da","webpack://prowlarr/./frontend/src/Indexer/Edit/EditIndexerModalContentConnector.js","webpack://prowlarr/./frontend/src/Store/Selectors/createIndexerSchemaSelector.js","webpack://prowlarr/./frontend/src/Indexer/Edit/EditIndexerModal.js","webpack://prowlarr/./frontend/src/Indexer/Edit/EditIndexerModalConnector.js","webpack://prowlarr/./frontend/src/Indexer/NoIndexer.css?12a1","webpack://prowlarr/./frontend/src/Indexer/NoIndexer.tsx","webpack://prowlarr/./frontend/src/Utilities/Object/hasDifferentItemsOrOrder.js","webpack://prowlarr/./frontend/src/Store/Selectors/createIndexerClientSideCollectionItemsSelector.js","webpack://prowlarr/./frontend/src/Indexer/Index/IndexerIndexFooter.css?2c31","webpack://prowlarr/./frontend/src/Indexer/Index/IndexerIndexFooter.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/IndexerIndexFilterModal.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Menus/IndexerIndexFilterMenu.tsx","webpack://prowlarr/./frontend/src/Components/Menu/SortMenu.js","webpack://prowlarr/./frontend/src/Components/Menu/SortMenuItem.js","webpack://prowlarr/./frontend/src/Indexer/Index/Menus/IndexerIndexSortMenu.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/IndexerIndexSelectAllButton.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/IndexerIndexSelectAllMenuItem.tsx","webpack://prowlarr/./frontend/src/Components/Page/PageContentFooter.js","webpack://prowlarr/./frontend/src/Components/Page/PageContentFooter.css?b44a","webpack://prowlarr/./frontend/src/Utilities/Table/getSelectedIds.ts","webpack://prowlarr/./frontend/src/Indexer/Index/Select/Delete/DeleteIndexerModalContent.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/Delete/DeleteIndexerModalContent.css?c408","webpack://prowlarr/./frontend/src/Indexer/Index/Select/Delete/DeleteIndexerModal.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/Edit/EditIndexerModalContent.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/Edit/EditIndexerModalContent.css?ad65","webpack://prowlarr/./frontend/src/Indexer/Index/Select/Edit/EditIndexerModal.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/Tags/TagsModalContent.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/Tags/TagsModalContent.css?1cca","webpack://prowlarr/./frontend/src/Indexer/Index/Select/Tags/TagsModal.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/IndexerIndexSelectFooter.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/IndexerIndexSelectFooter.css?97e4","webpack://prowlarr/./frontend/src/Indexer/Index/Select/IndexerIndexSelectModeButton.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Select/IndexerIndexSelectModeMenuItem.tsx","webpack://prowlarr/./frontend/src/Helpers/Hooks/useMeasure.ts","webpack://prowlarr/./frontend/src/Utilities/Array/getIndexOfFirstCharacter.js","webpack://prowlarr/./frontend/src/Components/Table/Cells/VirtualTableRowCell.js","webpack://prowlarr/./frontend/src/Components/Table/Cells/VirtualTableRowCell.css?0f5b","webpack://prowlarr/./frontend/src/Components/Table/Cells/VirtualTableSelectCell.js","webpack://prowlarr/./frontend/src/Components/Table/Cells/VirtualTableSelectCell.css?5ab4","webpack://prowlarr/./frontend/src/Components/TagList.js","webpack://prowlarr/./frontend/src/Components/TagList.css?c972","webpack://prowlarr/./frontend/src/Components/TagListConnector.js","webpack://prowlarr/./frontend/src/Indexer/Delete/DeleteIndexerModalContent.tsx","webpack://prowlarr/./frontend/src/Indexer/Delete/DeleteIndexerModal.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/createIndexerIndexItemSelector.ts","webpack://prowlarr/./frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts","webpack://prowlarr/./frontend/src/Store/Selectors/createIndexerStatusSelector.ts","webpack://prowlarr/./frontend/src/Indexer/useIndexer.ts","webpack://prowlarr/./frontend/src/Indexer/Info/History/IndexerHistoryRow.tsx","webpack://prowlarr/./frontend/src/Indexer/Info/History/IndexerHistoryRow.css?8f55","webpack://prowlarr/./frontend/src/Indexer/Info/History/IndexerHistory.tsx","webpack://prowlarr/./frontend/src/Indexer/Info/IndexerInfoModalContent.css?1a09","webpack://prowlarr/./frontend/src/Indexer/Info/IndexerInfoModalContent.tsx","webpack://prowlarr/./frontend/src/Indexer/Info/IndexerInfoModal.tsx","webpack://prowlarr/./frontend/src/Indexer/IndexerTitleLink.tsx","webpack://prowlarr/./frontend/src/Indexer/IndexerTitleLink.css?bf6f","webpack://prowlarr/./frontend/src/Components/Tooltip/Popover.js","webpack://prowlarr/./frontend/src/Components/Tooltip/Popover.css?7a30","webpack://prowlarr/./frontend/src/Indexer/Index/Table/DisabledIndexerInfo.css?aa12","webpack://prowlarr/./frontend/src/Indexer/Index/Table/DisabledIndexerInfo.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Table/IndexerStatusCell.css?89f9","webpack://prowlarr/./frontend/src/Indexer/Index/Table/IndexerStatusCell.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Table/IndexerIndexRow.css?bf69","webpack://prowlarr/./frontend/src/Indexer/Index/Table/IndexerIndexRow.tsx","webpack://prowlarr/./frontend/src/Components/Table/VirtualTableHeader.js","webpack://prowlarr/./frontend/src/Components/Table/VirtualTableHeader.css?a4be","webpack://prowlarr/./frontend/src/Components/Table/VirtualTableHeaderCell.js","webpack://prowlarr/./frontend/src/Components/Table/VirtualTableHeaderCell.css?89eb","webpack://prowlarr/./frontend/src/Components/Table/VirtualTableSelectAllHeaderCell.js","webpack://prowlarr/./frontend/src/Components/Table/VirtualTableSelectAllHeaderCell.css?190b","webpack://prowlarr/./frontend/src/Indexer/Index/Table/selectTableOptions.ts","webpack://prowlarr/./frontend/src/Indexer/Index/Table/IndexerIndexTableOptions.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Table/IndexerIndexTableHeader.css?20fe","webpack://prowlarr/./frontend/src/Indexer/Index/Table/IndexerIndexTableHeader.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Table/IndexerIndexTable.tsx","webpack://prowlarr/./frontend/src/Indexer/Index/Table/IndexerIndexTable.css?3559","webpack://prowlarr/./frontend/src/Indexer/Index/IndexerIndex.css?af9a","webpack://prowlarr/./frontend/src/Indexer/Index/IndexerIndex.tsx","webpack://prowlarr/./frontend/src/Components/Chart/BarChart.js","webpack://prowlarr/./frontend/src/Components/Chart/DoughnutChart.js","webpack://prowlarr/./frontend/src/Components/Chart/StackedBarChart.js","webpack://prowlarr/./frontend/src/Utilities/Number/abbreviateNumber.js","webpack://prowlarr/./frontend/src/Indexer/Stats/IndexerStatsFilterModal.tsx","webpack://prowlarr/./frontend/src/Indexer/Stats/IndexerStats.css?8018","webpack://prowlarr/./frontend/src/Indexer/Stats/IndexerStats.tsx","webpack://prowlarr/./frontend/src/Store/Selectors/createReleaseClientSideCollectionItemsSelector.js","webpack://prowlarr/./frontend/src/Search/SearchIndexFilterModalConnector.js","webpack://prowlarr/./frontend/src/Search/Menus/SearchIndexFilterMenu.tsx","webpack://prowlarr/./frontend/src/Search/Menus/SearchIndexSortMenu.tsx","webpack://prowlarr/./frontend/src/Search/Table/SearchIndexItemConnector.js","webpack://prowlarr/./frontend/src/Store/Selectors/createEnabledDownloadClientsSelector.ts","webpack://prowlarr/./frontend/src/Search/OverrideMatch/DownloadClient/SelectDownloadClientRow.css?94d8","webpack://prowlarr/./frontend/src/Search/OverrideMatch/DownloadClient/SelectDownloadClientRow.tsx","webpack://prowlarr/./frontend/src/Search/OverrideMatch/DownloadClient/SelectDownloadClientModalContent.tsx","webpack://prowlarr/./frontend/src/Search/OverrideMatch/DownloadClient/SelectDownloadClientModal.tsx","webpack://prowlarr/./frontend/src/Search/OverrideMatch/OverrideMatchData.tsx","webpack://prowlarr/./frontend/src/Search/OverrideMatch/OverrideMatchData.css?3d3d","webpack://prowlarr/./frontend/src/Search/OverrideMatch/OverrideMatchModalContent.tsx","webpack://prowlarr/./frontend/src/Search/OverrideMatch/OverrideMatchModalContent.css?84f1","webpack://prowlarr/./frontend/src/Search/OverrideMatch/OverrideMatchModal.tsx","webpack://prowlarr/./frontend/src/Search/Table/CategoryLabel.tsx","webpack://prowlarr/./frontend/src/Search/Table/Peers.js","webpack://prowlarr/./frontend/src/Utilities/Number/formatAge.js","webpack://prowlarr/./frontend/src/Search/Mobile/SearchIndexOverview.css?bb69","webpack://prowlarr/./frontend/src/Search/Mobile/SearchIndexOverview.tsx","webpack://prowlarr/./frontend/src/Search/Mobile/SearchIndexOverviews.js","webpack://prowlarr/./frontend/src/Search/Mobile/SearchIndexOverviews.css?66a7","webpack://prowlarr/./frontend/src/Search/Mobile/SearchIndexOverviewsConnector.js","webpack://prowlarr/./frontend/src/Search/NoSearchResults.css?9f3b","webpack://prowlarr/./frontend/src/Search/NoSearchResults.tsx","webpack://prowlarr/./frontend/src/Components/Form/IndexersSelectInputConnector.js","webpack://prowlarr/./frontend/src/Search/QueryParameterOption.css?be5e","webpack://prowlarr/./frontend/src/Search/QueryParameterOption.js","webpack://prowlarr/./frontend/src/Search/QueryParameterModal.css?81aa","webpack://prowlarr/./frontend/src/Search/QueryParameterModal.js","webpack://prowlarr/./frontend/src/Search/SearchFooterLabel.js","webpack://prowlarr/./frontend/src/Search/SearchFooterLabel.css?a6bf","webpack://prowlarr/./frontend/src/Search/SearchFooter.css?740c","webpack://prowlarr/./frontend/src/Search/SearchFooter.js","webpack://prowlarr/./frontend/src/Search/SearchFooterConnector.js","webpack://prowlarr/./frontend/src/Components/Table/VirtualTable.js","webpack://prowlarr/./frontend/src/Components/Table/VirtualTable.css?5c6a","webpack://prowlarr/./frontend/src/Components/Table/VirtualTableRow.js","webpack://prowlarr/./frontend/src/Components/Table/VirtualTableRow.css?6531","webpack://prowlarr/./frontend/src/Search/Table/SearchIndexHeader.css?1f02","webpack://prowlarr/./frontend/src/Search/Table/SearchIndexHeader.js","webpack://prowlarr/./frontend/src/Search/Table/SearchIndexHeaderConnector.js","webpack://prowlarr/./frontend/src/Search/Table/ReleaseLinks.css?e8fc","webpack://prowlarr/./frontend/src/Search/Table/ReleaseLinks.tsx","webpack://prowlarr/./frontend/src/Search/Table/SearchIndexRow.css?6173","webpack://prowlarr/./frontend/src/Search/Table/SearchIndexRow.tsx","webpack://prowlarr/./frontend/src/Search/Table/SearchIndexTable.js","webpack://prowlarr/./frontend/src/Search/Table/SearchIndexTable.css?2217","webpack://prowlarr/./frontend/src/Search/Table/SearchIndexTableConnector.js","webpack://prowlarr/./frontend/src/Search/SearchIndex.js","webpack://prowlarr/./frontend/src/Search/SearchIndex.css?9fa5","webpack://prowlarr/./frontend/src/Search/SearchIndexConnector.js","webpack://prowlarr/./frontend/src/Components/Card.js","webpack://prowlarr/./frontend/src/Components/Card.css?dd0e","webpack://prowlarr/./frontend/src/Components/Page/PageSectionContent.js","webpack://prowlarr/./frontend/src/Store/Selectors/createProviderSettingsSelector.js","webpack://prowlarr/./frontend/src/Settings/Profiles/App/EditAppProfileModalContent.js","webpack://prowlarr/./frontend/src/Settings/Profiles/App/EditAppProfileModalContent.css?c0bd","webpack://prowlarr/./frontend/src/Settings/Profiles/App/EditAppProfileModalContentConnector.js","webpack://prowlarr/./frontend/src/Store/Selectors/createProfileInUseSelector.ts","webpack://prowlarr/./frontend/src/Settings/Profiles/App/EditAppProfileModal.js","webpack://prowlarr/./frontend/src/Settings/Profiles/App/EditAppProfileModalConnector.js","webpack://prowlarr/./frontend/src/Settings/Profiles/App/AppProfile.css?6f37","webpack://prowlarr/./frontend/src/Settings/Profiles/App/AppProfile.js","webpack://prowlarr/./frontend/src/Settings/Profiles/App/AppProfiles.js","webpack://prowlarr/./frontend/src/Settings/Profiles/App/AppProfiles.css?5a55","webpack://prowlarr/./frontend/src/Settings/Profiles/App/AppProfilesConnector.js","webpack://prowlarr/./frontend/src/Settings/PendingChangesModal.js","webpack://prowlarr/./frontend/src/Settings/SettingsToolbar.js","webpack://prowlarr/./frontend/src/Settings/SettingsToolbarConnector.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/AddApplicationPresetMenuItem.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/AddApplicationItem.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/AddApplicationItem.css?232e","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/AddApplicationModalContent.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/AddApplicationModalContent.css?a1a5","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/AddApplicationModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/AddApplicationModal.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/EditApplicationModalContent.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/EditApplicationModalContent.css?a59d","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/EditApplicationModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/EditApplicationModal.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/EditApplicationModalConnector.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Application.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Application.css?c7be","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Applications.js","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Applications.css?8c2e","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/ApplicationsConnector.js","webpack://prowlarr/./frontend/src/typings/Application.ts","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/Edit/ManageApplicationsEditModalContent.css?0403","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/Edit/ManageApplicationsEditModalContent.tsx","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/Edit/ManageApplicationsEditModal.tsx","webpack://prowlarr/./frontend/src/Components/Table/Cells/TableSelectCell.js","webpack://prowlarr/./frontend/src/Components/Table/Cells/TableSelectCell.css?d89a","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/ManageApplicationsModalRow.tsx","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/ManageApplicationsModalRow.css?b56e","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/Tags/TagsModalContent.tsx","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/Tags/TagsModalContent.css?5e74","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/Tags/TagsModal.tsx","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/ManageApplicationsModalContent.tsx","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/ManageApplicationsModalContent.css?3f13","webpack://prowlarr/./frontend/src/Settings/Applications/Applications/Manage/ManageApplicationsModal.tsx","webpack://prowlarr/./frontend/src/Settings/Applications/ApplicationSettings.tsx","webpack://prowlarr/./frontend/src/Settings/Development/DevelopmentSettings.js","webpack://prowlarr/./frontend/src/Settings/Development/DevelopmentSettingsConnector.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientPresetMenuItem.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientItem.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientItem.css?eec5","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.css?39b0","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModal.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Categories/AddCategoryModalContent.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Categories/AddCategoryModalContent.css?1c45","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Categories/AddCategoryModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Categories/AddCategoryModal.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Categories/AddCategoryModalConnector.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Categories/Category.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Categories/Category.css?cb1f","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContent.css?cc3c","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContent.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModal.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalConnector.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClient.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClient.css?25ec","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClients.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClients.css?8903","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/DownloadClientsConnector.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/Edit/ManageDownloadClientsEditModalContent.tsx","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/Edit/ManageDownloadClientsEditModalContent.css?e8e1","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/Edit/ManageDownloadClientsEditModal.tsx","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalRow.tsx","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalRow.css?ef5e","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.tsx","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModalContent.css?5527","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClients/Manage/ManageDownloadClientsModal.tsx","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClientSettings.js","webpack://prowlarr/./frontend/src/Settings/DownloadClients/DownloadClientSettingsConnector.js","webpack://prowlarr/./frontend/src/Settings/General/AnalyticSettings.js","webpack://prowlarr/./frontend/src/Settings/General/BackupSettings.js","webpack://prowlarr/./frontend/src/Settings/General/HostSettings.js","webpack://prowlarr/./frontend/src/Settings/General/LoggingSettings.js","webpack://prowlarr/./frontend/src/Settings/General/ProxySettings.js","webpack://prowlarr/./frontend/src/Settings/General/UpdateSettings.js","webpack://prowlarr/./frontend/src/Settings/General/GeneralSettings.js","webpack://prowlarr/./frontend/src/Settings/General/GeneralSettingsConnector.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/AddIndexerProxyPresetMenuItem.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/AddIndexerProxyItem.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/AddIndexerProxyItem.css?3880","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/AddIndexerProxyModalContent.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/AddIndexerProxyModalContent.css?c051","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/AddIndexerProxyModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/AddIndexerProxyModal.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/EditIndexerProxyModalContent.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/EditIndexerProxyModalContent.css?2f4a","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/EditIndexerProxyModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/EditIndexerProxyModal.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/EditIndexerProxyModalConnector.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/IndexerProxy.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/IndexerProxy.css?db4e","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/IndexerProxies.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/IndexerProxies.css?28e6","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerProxies/IndexerProxiesConnector.js","webpack://prowlarr/./frontend/src/Settings/Indexers/IndexerSettings.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationPresetMenuItem.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationItem.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationItem.css?3835","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.css?ede0","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/AddNotificationModal.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/NotificationEventItems.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/NotificationEventItems.css?c538","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.css?b4e3","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModal.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/EditNotificationModalConnector.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/Notification.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/Notification.css?c2eb","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/Notifications.js","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/Notifications.css?6c09","webpack://prowlarr/./frontend/src/Settings/Notifications/Notifications/NotificationsConnector.js","webpack://prowlarr/./frontend/src/Settings/Notifications/NotificationSettings.js","webpack://prowlarr/./frontend/src/Settings/Settings.css?9b0d","webpack://prowlarr/./frontend/src/Settings/Settings.js","webpack://prowlarr/./frontend/src/Settings/Tags/Details/TagDetailsModalContentConnector.js","webpack://prowlarr/./frontend/src/Settings/Tags/Details/TagDetailsModalContent.js","webpack://prowlarr/./frontend/src/Settings/Tags/Details/TagDetailsModalContent.css?a833","webpack://prowlarr/./frontend/src/Settings/Tags/Details/TagDetailsModal.js","webpack://prowlarr/./frontend/src/Settings/Tags/Tag.js","webpack://prowlarr/./frontend/src/Settings/Tags/Tag.css?cf52","webpack://prowlarr/./frontend/src/Settings/Tags/TagConnector.js","webpack://prowlarr/./frontend/src/Store/Selectors/createTagDetailsSelector.ts","webpack://prowlarr/./frontend/src/Settings/Tags/Tags.js","webpack://prowlarr/./frontend/src/Settings/Tags/Tags.css?916d","webpack://prowlarr/./frontend/src/Settings/Tags/TagsConnector.js","webpack://prowlarr/./frontend/src/Settings/Tags/TagSettings.js","webpack://prowlarr/./frontend/src/Settings/UI/UISettings.js","webpack://prowlarr/./frontend/src/Settings/UI/UISettingsConnector.js","webpack://prowlarr/./frontend/src/System/Backup/RestoreBackupModalContent.css?8f36","webpack://prowlarr/./frontend/src/System/Backup/RestoreBackupModalContent.js","webpack://prowlarr/./frontend/src/System/Backup/RestoreBackupModalContentConnector.js","webpack://prowlarr/./frontend/src/System/Backup/RestoreBackupModal.js","webpack://prowlarr/./frontend/src/System/Backup/RestoreBackupModalConnector.js","webpack://prowlarr/./frontend/src/System/Backup/BackupRow.js","webpack://prowlarr/./frontend/src/System/Backup/BackupRow.css?009d","webpack://prowlarr/./frontend/src/System/Backup/Backups.js","webpack://prowlarr/./frontend/src/System/Backup/BackupsConnector.js","webpack://prowlarr/./frontend/src/System/Events/LogsTableDetailsModal.css?8d08","webpack://prowlarr/./frontend/src/System/Events/LogsTableDetailsModal.js","webpack://prowlarr/./frontend/src/System/Events/LogsTableRow.css?ce1e","webpack://prowlarr/./frontend/src/System/Events/LogsTableRow.js","webpack://prowlarr/./frontend/src/System/Events/LogsTable.js","webpack://prowlarr/./frontend/src/System/Events/LogsTableConnector.js","webpack://prowlarr/./frontend/src/Utilities/String/combinePath.js","webpack://prowlarr/./frontend/src/System/Logs/LogsNavMenu.js","webpack://prowlarr/./frontend/src/System/Logs/Files/LogFilesTableRow.js","webpack://prowlarr/./frontend/src/System/Logs/Files/LogFilesTableRow.css?f950","webpack://prowlarr/./frontend/src/System/Logs/Files/LogFiles.js","webpack://prowlarr/./frontend/src/System/Logs/Files/LogFilesConnector.js","webpack://prowlarr/./frontend/src/System/Logs/Updates/UpdateLogFilesConnector.js","webpack://prowlarr/./frontend/src/System/Logs/Logs.js","webpack://prowlarr/./frontend/src/Utilities/Number/padNumber.js","webpack://prowlarr/./frontend/src/Utilities/Date/formatTimeSpan.js","webpack://prowlarr/./frontend/src/System/Status/About/StartTime.tsx","webpack://prowlarr/./frontend/src/System/Status/About/About.tsx","webpack://prowlarr/./frontend/src/System/Status/About/About.css?804d","webpack://prowlarr/./frontend/src/System/Status/styles.css?32cd","webpack://prowlarr/./frontend/src/System/Status/Donations/Donations.tsx","webpack://prowlarr/./frontend/src/System/Status/Health/HealthItemLink.tsx","webpack://prowlarr/./frontend/src/System/Status/Health/Health.tsx","webpack://prowlarr/./frontend/src/System/Status/Health/Health.css?3581","webpack://prowlarr/./frontend/src/System/Status/MoreInfo/MoreInfo.tsx","webpack://prowlarr/./frontend/src/System/Status/Status.tsx","webpack://prowlarr/./frontend/src/Utilities/Date/formatDate.js","webpack://prowlarr/./frontend/src/System/Tasks/Queued/QueuedTaskRowNameCell.tsx","webpack://prowlarr/./frontend/src/System/Tasks/Queued/QueuedTaskRowNameCell.css?fd62","webpack://prowlarr/./frontend/src/System/Tasks/Queued/QueuedTaskRow.tsx","webpack://prowlarr/./frontend/src/Helpers/Hooks/useModalOpenState.ts","webpack://prowlarr/./frontend/src/System/Tasks/Queued/QueuedTaskRow.css?c1d2","webpack://prowlarr/./frontend/src/System/Tasks/Queued/QueuedTasks.tsx","webpack://prowlarr/./frontend/src/System/Tasks/Scheduled/ScheduledTaskRow.css?c655","webpack://prowlarr/./frontend/src/System/Tasks/Scheduled/ScheduledTaskRow.tsx","webpack://prowlarr/./frontend/src/System/Tasks/Scheduled/ScheduledTasks.tsx","webpack://prowlarr/./frontend/src/System/Tasks/Tasks.tsx","webpack://prowlarr/./frontend/src/System/Updates/Updates.css?0076","webpack://prowlarr/./frontend/src/System/Updates/Updates.tsx","webpack://prowlarr/./frontend/src/App/AppRoutes.tsx","webpack://prowlarr/./frontend/src/App/App.tsx","webpack://prowlarr/./frontend/src/bootstrap.tsx","webpack://prowlarr/./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["const prowlarrOrange = '#e66000';\r\n\r\nmodule.exports = {\r\n textColor: '#ccc',\r\n defaultColor: '#ccc',\r\n disabledColor: '#999',\r\n dimColor: '#555',\r\n black: '#000',\r\n white: '#fff',\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 purple: '#7a43b6',\r\n prowlarrOrange,\r\n helpTextColor: '#909293',\r\n darkGray: '#888',\r\n gray: '#adadad',\r\n\r\n // Theme Colors\r\n\r\n themeBlue: prowlarrOrange,\r\n themeRed: '#c4273c',\r\n themeDarkColor: '#595959',\r\n themeLightColor: prowlarrOrange,\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: prowlarrOrange,\r\n\r\n // Links\r\n defaultLinkHoverColor: '#fff',\r\n linkColor: '#5d9cec',\r\n linkHoverColor: '#5d9cec',\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: '#333',\r\n toolbarMenuItemHoverBackgroundColor: '#414141',\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\r\n //\r\n // Buttons\r\n\r\n defaultButtonTextColor: '#eee',\r\n defaultButtonBackgroundColor: '#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: '#e66000',\r\n menuItemHoverBackgroundColor: '#606060',\r\n\r\n //\r\n // Toolbar\r\n\r\n toobarButtonHoverColor: '#e66000',\r\n toobarButtonSelectedColor: '#e66000',\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 // 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: '#999',\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 // Table\r\n\r\n tableRowHoverBackgroundColor: 'rgba(255, 255, 255, 0.08)',\r\n\r\n //\r\n // Charts\r\n\r\n chartBackgroundColor: '#262626',\r\n failedColors: ['#ffbeb2', '#feb4a6', '#fdab9b', '#fca290', '#fb9984', '#fa8f79', '#f9856e', '#f77b66', '#f5715d', '#f36754', '#f05c4d', '#ec5049', '#e74545', '#e13b42', '#da323f', '#d3293d', '#ca223c', '#c11a3b', '#b8163a', '#ae123a'].join(','),\r\n chartColorsDiversified: ['#90caf9', '#f4d166', '#ff8a65', '#ce93d8', '#80cba9', '#ffab91', '#8097ea', '#bcaaa4', '#a57583', '#e4e498', '#9e96af', '#c6ab81', '#6972c6', '#619fc6', '#81ad81', '#f48fb1', '#82afca', '#b5b071', '#8b959b', '#7ec0b4'].join(','),\r\n chartColors: ['#f4d166', '#f6c760', '#f8bc58', '#f8b252', '#f7a84a', '#f69e41', '#f49538', '#f38b2f', '#f28026', '#f0751e', '#eb6c1c', '#e4641e', '#de5d1f', '#d75521', '#cf4f22', '#c64a22', '#bc4623', '#b24223', '#a83e24', '#9e3a26'].join(',')\r\n};\r\n","const prowlarrOrange = '#e66000';\r\n\r\nmodule.exports = {\r\n textColor: '#515253',\r\n defaultColor: '#333',\r\n disabledColor: '#999',\r\n dimColor: '#555',\r\n black: '#000',\r\n white: '#fff',\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 purple: '#7a43b6',\r\n prowlarrOrange,\r\n helpTextColor: '#909293',\r\n darkGray: '#888',\r\n gray: '#adadad',\r\n\r\n // Theme Colors\r\n\r\n themeBlue: prowlarrOrange,\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: '#333',\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: prowlarrOrange,\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\r\n //\r\n // Buttons\r\n\r\n defaultButtonTextColor: '#333',\r\n defaultButtonBackgroundColor: '#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: '#e66000',\r\n toobarButtonSelectedColor: '#e66000',\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 // 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: '#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 // Table\r\n\r\n tableRowHoverBackgroundColor: '#fafbfc',\r\n\r\n //\r\n // Charts\r\n\r\n chartBackgroundColor: '#fff',\r\n failedColors: ['#ffbeb2', '#feb4a6', '#fdab9b', '#fca290', '#fb9984', '#fa8f79', '#f9856e', '#f77b66', '#f5715d', '#f36754', '#f05c4d', '#ec5049', '#e74545', '#e13b42', '#da323f', '#d3293d', '#ca223c', '#c11a3b', '#b8163a', '#ae123a'].join(','),\r\n chartColorsDiversified: ['#90caf9', '#f4d166', '#ff8a65', '#ce93d8', '#80cba9', '#ffab91', '#8097ea', '#bcaaa4', '#a57583', '#e4e498', '#9e96af', '#c6ab81', '#6972c6', '#619fc6', '#81ad81', '#f48fb1', '#82afca', '#b5b071', '#8b959b', '#7ec0b4'].join(','),\r\n chartColors: ['#f4d166', '#f6c760', '#f8bc58', '#f8b252', '#f7a84a', '#f69e41', '#f49538', '#f38b2f', '#f28026', '#f0751e', '#eb6c1c', '#e4641e', '#de5d1f', '#d75521', '#cf4f22', '#c64a22', '#bc4623', '#b24223', '#a83e24', '#9e3a26'].join(',')\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 appProfileItemHeight: '30px',\r\n appProfileItemDragSourcePadding: '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.Prowlarr.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.Prowlarr.apiKey;\r\n}\r\n\r\nfunction addUIHeader(ajaxOptions) {\r\n ajaxOptions.headers = ajaxOptions.headers || {};\r\n ajaxOptions.headers['X-Prowlarr-Client'] = true;\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 = { dataType: 'json', ...originalAjaxOptions };\r\n\r\n if (isRelative(ajaxOptions)) {\r\n addRootUrl(ajaxOptions);\r\n addApiKey(ajaxOptions);\r\n addUIHeader(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","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 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 translation = translations[key] || key;\r\n\r\n tokens.appName = 'Prowlarr';\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 { 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 { 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.Prowlarr.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","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 type: null,\r\n contentType: null,\r\n imageData: 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","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","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 * 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 { key: filterTypes.CONTAINS, value: 'contains' },\r\n { key: filterTypes.NOT_CONTAINS, value: 'does not contain' }\r\n ],\r\n\r\n [CONTAINS]: [\r\n { key: filterTypes.CONTAINS, value: 'contains' }\r\n ],\r\n\r\n [DATE]: [\r\n { key: filterTypes.LESS_THAN, value: 'is before' },\r\n { key: filterTypes.GREATER_THAN, value: 'is after' },\r\n { key: filterTypes.IN_LAST, value: 'in the last' },\r\n { key: filterTypes.NOT_IN_LAST, value: 'not in the last' },\r\n { key: filterTypes.IN_NEXT, value: 'in the next' },\r\n { key: filterTypes.NOT_IN_NEXT, value: 'not in the next' }\r\n ],\r\n\r\n [EQUAL]: [\r\n { key: filterTypes.EQUAL, value: 'is' }\r\n ],\r\n\r\n [EXACT]: [\r\n { key: filterTypes.EQUAL, value: 'is' },\r\n { key: filterTypes.NOT_EQUAL, value: 'is not' }\r\n ],\r\n\r\n [NUMBER]: [\r\n { key: filterTypes.EQUAL, value: 'equal' },\r\n { key: filterTypes.GREATER_THAN, value: 'greater than' },\r\n { key: filterTypes.GREATER_THAN_OR_EQUAL, value: 'greater than or equal' },\r\n { key: filterTypes.LESS_THAN, value: 'less than' },\r\n { key: filterTypes.LESS_THAN_OR_EQUAL, value: 'less than or equal' },\r\n { key: filterTypes.NOT_EQUAL, value: 'not equal' }\r\n ],\r\n\r\n [STRING]: [\r\n { key: filterTypes.CONTAINS, value: 'contains' },\r\n { key: filterTypes.NOT_CONTAINS, value: 'does not contain' },\r\n { key: filterTypes.EQUAL, value: 'equal' },\r\n { key: filterTypes.NOT_EQUAL, value: 'not equal' },\r\n { key: filterTypes.STARTS_WITH, value: 'starts with' },\r\n { key: filterTypes.NOT_STARTS_WITH, value: 'does not start with' },\r\n { key: filterTypes.ENDS_WITH, value: 'ends with' },\r\n { key: filterTypes.NOT_ENDS_WITH, value: 'does not end with' }\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 PROTOCOL = 'protocol';\r\nexport const PRIVACY = 'privacy';\r\nexport const APP_PROFILE = 'appProfile';\r\nexport const CATEGORY = 'category';\r\nexport const TAG = 'tag';\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// Regular\r\n\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 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 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 faBook as fasBook,\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 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 faFileExport as fasFileExport,\r\n faFileInvoice as farFileInvoice,\r\n faFilm as fasFilm,\r\n faFilter as fasFilter,\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 faLocationArrow as fasLocationArrow,\r\n faLock as fasLock,\r\n faMagnet as fasMagnet,\r\n faMedkit as fasMedkit,\r\n faMinus as fasMinus,\r\n faMusic as fasMusic,\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 faTv as fasTv,\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 AUDIO = fasMusic;\r\nexport const BACKUP = farFileArchive;\r\nexport const BOOK = fasBook;\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 FILM = fasFilm;\r\nexport const FILTER = fasFilter;\r\nexport const FLAG = fasFlag;\r\nexport const FOLDER = farFolder;\r\nexport const FOLDER_OPEN = fasFolderOpen;\r\nexport const FOOTNOTE = fasAsterisk;\r\nexport const GENRE = fasTheaterMasks;\r\nexport const GROUP = farObjectGroup;\r\nexport const HEALTH = fasMedkit;\r\nexport const HEART = fasHeart;\r\nexport const HISTORY = fasHistory;\r\nexport const HOUSEKEEPING = fasHome;\r\nexport const IGNORE = fasTimesCircle;\r\nexport const IN_CINEMAS = fasTicketAlt;\r\nexport const INFO = fasInfoCircle;\r\nexport const INTERACTIVE = fasUser;\r\nexport const KEYBOARD = farKeyboard;\r\nexport const LOCK = fasLock;\r\nexport const LOGOUT = fasSignOutAlt;\r\nexport const MAGNET = fasMagnet;\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 PAUSED = fasPause;\r\nexport const PENDING = farClock;\r\nexport const PROFILE = fasUser;\r\nexport const POSTER = fasTh;\r\nexport const QUEUED = fasCloud;\r\nexport const QUICK = fasRocket;\r\nexport const RECOMMENDED = fasThumbsUp;\r\nexport const REDIRECT = fasLocationArrow;\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 STUDIO = fasBuilding;\r\nexport const SQUARE = farSquare;\r\nexport const SQUARE_MINUS = fasSquareMinus;\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 TV = fasTv;\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 APP_PROFILE_SELECT = 'appProfileSelect';\r\nexport const CAPTCHA = 'captcha';\r\nexport const CARDIGANNCAPTCHA = 'cardigannCaptcha';\r\nexport const CHECK = 'check';\r\nexport const DEVICE = 'device';\r\nexport const KEY_VALUE_LIST = 'keyValueList';\r\nexport const INFO = 'info';\r\nexport const MOVIE_MONITORED_SELECT = 'movieMonitoredSelect';\r\nexport const CATEGORY_SELECT = 'newznabCategorySelect';\r\nexport const DOWNLOAD_CLIENT_SELECT = 'downloadClientSelect';\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 INDEXER_FLAGS_SELECT = 'indexerFlagsSelect';\r\nexport const SELECT = 'select';\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\n\r\nexport const all = [\r\n AUTO_COMPLETE,\r\n APP_PROFILE_SELECT,\r\n CAPTCHA,\r\n CARDIGANNCAPTCHA,\r\n CHECK,\r\n DEVICE,\r\n KEY_VALUE_LIST,\r\n INFO,\r\n MOVIE_MONITORED_SELECT,\r\n CATEGORY_SELECT,\r\n FLOAT,\r\n NUMBER,\r\n OAUTH,\r\n PASSWORD,\r\n PATH,\r\n INDEXER_FLAGS_SELECT,\r\n SELECT,\r\n DYNAMIC_SELECT,\r\n TAG,\r\n TEXT,\r\n TEXT_AREA,\r\n TEXT_TAG,\r\n TAG_SELECT\r\n];\r\n","export const DANGER = 'danger';\r\nexport const DEFAULT = 'default';\r\nexport const DISABLED = 'disabled';\r\nexport const INFO = 'info';\r\nexport const INVERSE = 'inverse';\r\nexport const PRIMARY = 'primary';\r\nexport const PURPLE = 'purple';\r\nexport const SUCCESS = 'success';\r\nexport const WARNING = 'warning';\r\n\r\nexport const all = [\r\n DANGER,\r\n DEFAULT,\r\n DISABLED,\r\n INFO,\r\n INVERSE,\r\n PRIMARY,\r\n PURPLE,\r\n SUCCESS,\r\n WARNING,\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 | 'primary'\r\n | 'purple'\r\n | 'success'\r\n | 'warning';\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","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\n\r\nexport const all = [EXTRA_SMALL, SMALL, MEDIUM, LARGE, EXTRA_LARGE] as const;\r\n\r\nexport type Size = 'extraSmall' | 'small' | 'medium' | 'large' | 'extraLarge';\r\n","export const ASCENDING = 'ascending';\r\nexport const DESCENDING = 'descending';\r\n\r\nexport const all = [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 = [\r\n TOP,\r\n RIGHT,\r\n BOTTOM,\r\n LEFT\r\n];\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","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 $ 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","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 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 || state.schema && state.schema.items || {};\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","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","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 { filterBuilderTypes, filterBuilderValueTypes, filterTypes, 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: 'indexer',\r\n label: () => translate('Indexer'),\r\n isSortable: false,\r\n isVisible: true\r\n },\r\n {\r\n name: 'query',\r\n label: () => translate('Query'),\r\n isSortable: false,\r\n isVisible: true\r\n },\r\n {\r\n name: 'parameters',\r\n label: () => translate('Parameters'),\r\n isSortable: false,\r\n isVisible: true\r\n },\r\n {\r\n name: 'grabTitle',\r\n label: () => translate('GrabTitle'),\r\n isSortable: false,\r\n isVisible: false\r\n },\r\n {\r\n name: 'queryType',\r\n label: () => translate('QueryType'),\r\n isSortable: false,\r\n isVisible: false\r\n },\r\n {\r\n name: 'categories',\r\n label: () => translate('Categories'),\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: 'source',\r\n label: () => translate('Source'),\r\n isSortable: false,\r\n isVisible: false\r\n },\r\n {\r\n name: 'host',\r\n label: () => translate('Host'),\r\n isSortable: false,\r\n isVisible: false\r\n },\r\n {\r\n name: 'elapsedTime',\r\n label: () => translate('ElapsedTime'),\r\n isSortable: false,\r\n isVisible: true\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: 'releaseGrabbed',\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: 'indexerRss',\r\n label: () => translate('IndexerRss'),\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: 'indexerQuery',\r\n label: () => translate('IndexerQuery'),\r\n filters: [\r\n {\r\n key: 'eventType',\r\n value: '2',\r\n type: filterTypes.EQUAL\r\n }\r\n ]\r\n },\r\n {\r\n key: 'indexerAuth',\r\n label: () => translate('IndexerAuth'),\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: 'failed',\r\n label: () => translate('Failed'),\r\n filters: [\r\n {\r\n key: 'successful',\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: '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: 'indexerIds',\r\n label: () => translate('Indexer'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.INDEXER\r\n },\r\n {\r\n name: 'successful',\r\n label: () => translate('Successful'),\r\n type: filterBuilderTypes.EQUAL,\r\n valueType: filterBuilderValueTypes.BOOL\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',\r\n method: 'POST',\r\n data: {\r\n id\r\n }\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 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 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","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 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","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 { 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 _ from 'lodash';\r\nimport { createAction } from 'redux-actions';\r\nimport { filterTypePredicates, sortDirections } from 'Helpers/Props';\r\nimport createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';\r\nimport createSaveProviderHandler, {\r\n createCancelSaveProviderHandler\r\n} from 'Store/Actions/Creators/createSaveProviderHandler';\r\nimport createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';\r\nimport createTestProviderHandler, {\r\n createCancelTestProviderHandler\r\n} 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, handleThunks } from 'Store/thunks';\r\nimport dateFilterPredicate from 'Utilities/Date/dateFilterPredicate';\r\nimport getSectionState from 'Utilities/State/getSectionState';\r\nimport updateSectionState from 'Utilities/State/updateSectionState';\r\nimport translate from 'Utilities/String/translate';\r\nimport createBulkEditItemHandler from './Creators/createBulkEditItemHandler';\r\nimport createBulkRemoveItemHandler from './Creators/createBulkRemoveItemHandler';\r\nimport createHandleActions from './Creators/createHandleActions';\r\nimport createClearReducer from './Creators/Reducers/createClearReducer';\r\nimport createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'indexers';\r\nconst schemaSection = `${section}.schema`;\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 selectedSchema: {},\r\n isSaving: false,\r\n saveError: null,\r\n isTesting: false,\r\n isTestingAll: false,\r\n items: [],\r\n pendingChanges: {},\r\n\r\n schema: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n sortKey: 'sortName',\r\n sortDirection: sortDirections.ASCENDING,\r\n items: []\r\n }\r\n};\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\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 vipExpiration: function(item, filterValue, type) {\r\n const vipExpiration =\r\n item.fields.find((field) => field.name === 'vipExpiration')?.value ?? null;\r\n\r\n return dateFilterPredicate(vipExpiration, filterValue, type);\r\n },\r\n\r\n categories: function(item, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const { categories = [] } = item.capabilities || {};\r\n\r\n const categoryList = categories\r\n .filter((category) => category.id < 100000)\r\n .reduce((acc, element) => {\r\n acc.push(element.id);\r\n\r\n if (element.subCategories && element.subCategories.length > 0) {\r\n element.subCategories.forEach((subCat) => {\r\n acc.push(subCat.id);\r\n });\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n return predicate(categoryList, filterValue);\r\n }\r\n};\r\n\r\nexport const sortPredicates = {\r\n status: function({ enable, redirect }) {\r\n let result = 0;\r\n\r\n if (redirect) {\r\n result++;\r\n }\r\n\r\n if (enable) {\r\n result += 2;\r\n }\r\n\r\n return result;\r\n },\r\n\r\n vipExpiration: function({ fields = [] }) {\r\n return fields.find((field) => field.name === 'vipExpiration')?.value ?? '';\r\n },\r\n\r\n minimumSeeders: function({ fields = [] }) {\r\n return fields.find((field) => field.name === 'torrentBaseSettings.appMinimumSeeders')?.value ?? undefined;\r\n },\r\n\r\n seedRatio: function({ fields = [] }) {\r\n return fields.find((field) => field.name === 'torrentBaseSettings.seedRatio')?.value ?? undefined;\r\n },\r\n\r\n seedTime: function({ fields = [] }) {\r\n return fields.find((field) => field.name === 'torrentBaseSettings.seedTime')?.value ?? undefined;\r\n },\r\n\r\n packSeedTime: function({ fields = [] }) {\r\n return fields.find((field) => field.name === 'torrentBaseSettings.packSeedTime')?.value ?? undefined;\r\n },\r\n\r\n preferMagnetUrl: function({ fields = [] }) {\r\n return fields.find((field) => field.name === 'torrentBaseSettings.preferMagnetUrl')?.value ?? undefined;\r\n }\r\n};\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_INDEXERS = 'indexers/fetchIndexers';\r\nexport const FETCH_INDEXER_SCHEMA = 'indexers/fetchIndexerSchema';\r\nexport const SELECT_INDEXER_SCHEMA = 'indexers/selectIndexerSchema';\r\nexport const SET_INDEXER_SCHEMA_SORT = 'indexers/setIndexerSchemaSort';\r\nexport const CLEAR_INDEXER_SCHEMA = 'indexers/clearIndexerSchema';\r\nexport const CLONE_INDEXER = 'indexers/cloneIndexer';\r\nexport const SET_INDEXER_VALUE = 'indexers/setIndexerValue';\r\nexport const SET_INDEXER_FIELD_VALUE = 'indexers/setIndexerFieldValue';\r\nexport const SAVE_INDEXER = 'indexers/saveIndexer';\r\nexport const CANCEL_SAVE_INDEXER = 'indexers/cancelSaveIndexer';\r\nexport const DELETE_INDEXER = 'indexers/deleteIndexer';\r\nexport const TEST_INDEXER = 'indexers/testIndexer';\r\nexport const CANCEL_TEST_INDEXER = 'indexers/cancelTestIndexer';\r\nexport const TEST_ALL_INDEXERS = 'indexers/testAllIndexers';\r\nexport const BULK_EDIT_INDEXERS = 'indexers/bulkEditIndexers';\r\nexport const BULK_DELETE_INDEXERS = 'indexers/bulkDeleteIndexers';\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 setIndexerSchemaSort = createAction(SET_INDEXER_SCHEMA_SORT);\r\nexport const clearIndexerSchema = createAction(CLEAR_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\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// Action Handlers\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 selectSchema(state, payload, schemaDefaults) {\r\n const newState = getSectionState(state, section);\r\n\r\n const {\r\n implementation,\r\n name\r\n } = payload;\r\n\r\n const selectedImplementation = _.find(newState.schema.items, { implementation, name });\r\n\r\n newState.selectedSchema = applySchemaDefaults(_.cloneDeep(selectedImplementation), schemaDefaults);\r\n\r\n return updateSectionState(state, section, newState);\r\n}\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_INDEXERS]: createFetchHandler(section, '/indexer'),\r\n [FETCH_INDEXER_SCHEMA]: createFetchHandler(schemaSection, '/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 [BULK_EDIT_INDEXERS]: createBulkEditItemHandler(section, '/indexer/bulk'),\r\n [BULK_DELETE_INDEXERS]: createBulkRemoveItemHandler(section, '/indexer/bulk')\r\n});\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n [SET_INDEXER_VALUE]: createSetSettingValueReducer(section),\r\n [SET_INDEXER_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n [SET_INDEXER_SCHEMA_SORT]: createSetClientSideCollectionSortReducer(schemaSection),\r\n\r\n [SELECT_INDEXER_SCHEMA]: (state, { payload }) => {\r\n return selectSchema(state, payload, (selectedSchema) => {\r\n selectedSchema.name = payload.name ?? payload.implementationName;\r\n selectedSchema.implementationName = payload.implementationName;\r\n selectedSchema.enable = selectedSchema.supportsRss;\r\n\r\n return selectedSchema;\r\n });\r\n },\r\n\r\n [CLEAR_INDEXER_SCHEMA]: createClearReducer(schemaSection, defaultState),\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}, 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 = 'indexerHistory';\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_INDEXER_HISTORY = 'indexerHistory/fetchIndexerHistory';\r\nexport const CLEAR_INDEXER_HISTORY = 'indexerHistory/clearIndexerHistory';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchIndexerHistory = createThunk(FETCH_INDEXER_HISTORY);\r\nexport const clearIndexerHistory = createAction(CLEAR_INDEXER_HISTORY);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_INDEXER_HISTORY]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, isFetching: true }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/history/indexer',\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_INDEXER_HISTORY]: (state) => {\r\n return Object.assign({}, state, defaultState);\r\n }\r\n\r\n}, defaultState, section);\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 { createAction } from 'redux-actions';\r\nimport { filterBuilderTypes, filterBuilderValueTypes, sortDirections } from 'Helpers/Props';\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 './indexerActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'indexerIndex';\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: 'sortName',\r\n sortDirection: sortDirections.ASCENDING,\r\n secondarySortKey: 'sortName',\r\n secondarySortDirection: sortDirections.ASCENDING,\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('IndexerStatus'),\r\n isSortable: true,\r\n isVisible: true,\r\n isModifiable: false\r\n },\r\n {\r\n name: 'id',\r\n columnLabel: () => translate('IndexerId'),\r\n label: () => translate('Id'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'sortName',\r\n label: () => translate('IndexerName'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'protocol',\r\n label: () => translate('Protocol'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'privacy',\r\n label: () => translate('Privacy'),\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: 'appProfileId',\r\n label: () => translate('SyncProfile'),\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: true\r\n },\r\n {\r\n name: 'vipExpiration',\r\n label: () => translate('VipExpiration'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'capabilities',\r\n label: () => translate('Categories'),\r\n isSortable: false,\r\n isVisible: true\r\n },\r\n {\r\n name: 'minimumSeeders',\r\n label: () => translate('MinimumSeeders'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'seedRatio',\r\n label: () => translate('SeedRatio'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'seedTime',\r\n label: () => translate('SeedTime'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'packSeedTime',\r\n label: () => translate('PackSeedTime'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'preferMagnetUrl',\r\n label: () => translate('PreferMagnetUrl'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'tags',\r\n label: () => translate('Tags'),\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 ...sortPredicates\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: 'name',\r\n label: () => translate('IndexerName'),\r\n type: filterBuilderTypes.STRING\r\n },\r\n {\r\n name: 'enable',\r\n label: () => translate('Enabled'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.BOOL\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: 'vipExpiration',\r\n label: () => translate('VipExpiration'),\r\n type: filterBuilderTypes.DATE,\r\n valueType: filterBuilderValueTypes.DATE\r\n },\r\n {\r\n name: 'priority',\r\n label: () => translate('Priority'),\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: 'privacy',\r\n label: () => translate('Privacy'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.PRIVACY\r\n },\r\n {\r\n name: 'appProfileId',\r\n label: () => translate('SyncProfile'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.APP_PROFILE\r\n },\r\n {\r\n name: 'categories',\r\n label: () => translate('Categories'),\r\n type: filterBuilderTypes.ARRAY,\r\n valueType: filterBuilderValueTypes.CATEGORY\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 'indexerIndex.sortKey',\r\n 'indexerIndex.sortDirection',\r\n 'indexerIndex.selectedFilterKey',\r\n 'indexerIndex.customFilters',\r\n 'indexerIndex.view',\r\n 'indexerIndex.columns',\r\n 'indexerIndex.tableOptions'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const SET_INDEXER_SORT = 'indexerIndex/setIndexerSort';\r\nexport const SET_INDEXER_FILTER = 'indexerIndex/setIndexerFilter';\r\nexport const SET_INDEXER_VIEW = 'indexerIndex/setIndexerView';\r\nexport const SET_INDEXER_TABLE_OPTION = 'indexerIndex/setIndexerTableOption';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const setIndexerSort = createAction(SET_INDEXER_SORT);\r\nexport const setIndexerFilter = createAction(SET_INDEXER_FILTER);\r\nexport const setIndexerView = createAction(SET_INDEXER_VIEW);\r\nexport const setIndexerTableOption = createAction(SET_INDEXER_TABLE_OPTION);\r\n\r\n//\r\n// Reducers\r\n\r\nexport const reducers = createHandleActions({\r\n\r\n [SET_INDEXER_SORT]: createSetClientSideCollectionSortReducer(section),\r\n [SET_INDEXER_FILTER]: createSetClientSideCollectionFilterReducer(section),\r\n\r\n [SET_INDEXER_VIEW]: function(state, { payload }) {\r\n return Object.assign({}, state, { view: payload.view });\r\n },\r\n\r\n [SET_INDEXER_TABLE_OPTION]: createSetTableOptionReducer(section)\r\n\r\n}, defaultState, section);\r\n","import moment from 'moment';\r\nimport { batchActions } from 'redux-batched-actions';\r\nimport { filterBuilderTypes, filterBuilderValueTypes } 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 createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'indexerStats';\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 start: null,\r\n end: null,\r\n\r\n details: {\r\n isFetching: false,\r\n isPopulated: false,\r\n error: null,\r\n item: []\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 key: 'lastSeven',\r\n label: 'Last 7 Days',\r\n filters: []\r\n },\r\n {\r\n key: 'lastThirty',\r\n label: 'Last 30 Days',\r\n filters: []\r\n },\r\n {\r\n key: 'lastNinety',\r\n label: 'Last 90 Days',\r\n filters: []\r\n }\r\n ],\r\n\r\n filterBuilderProps: [\r\n {\r\n name: 'indexers',\r\n label: () => translate('Indexers'),\r\n type: filterBuilderTypes.CONTAINS,\r\n valueType: filterBuilderValueTypes.INDEXER\r\n },\r\n {\r\n name: 'protocols',\r\n label: () => translate('Protocols'),\r\n type: filterBuilderTypes.EXACT,\r\n valueType: filterBuilderValueTypes.PROTOCOL\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 selectedFilterKey: 'all'\r\n\r\n};\r\n\r\nexport const persistState = [\r\n 'indexerStats.customFilters',\r\n 'indexerStats.selectedFilterKey'\r\n];\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_INDEXER_STATS = 'indexerStats/fetchIndexerStats';\r\nexport const SET_INDEXER_STATS_FILTER = 'indexerStats/setIndexerStatsFilter';\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 fetchIndexerStats = createThunk(FETCH_INDEXER_STATS);\r\nexport const setIndexerStatsFilter = createThunk(SET_INDEXER_STATS_FILTER);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_INDEXER_STATS]: function(getState, payload, dispatch) {\r\n const state = getState();\r\n const indexerStats = state.indexerStats;\r\n const customFilters = getCustomFilters(state, section);\r\n const selectedFilters = findSelectedFilters(indexerStats.selectedFilterKey, indexerStats.filters, customFilters);\r\n\r\n const requestParams = {\r\n endDate: moment().toISOString()\r\n };\r\n\r\n selectedFilters.forEach((selectedFilter) => {\r\n if (selectedFilter.key === 'indexers') {\r\n requestParams.indexers = selectedFilter.value.join(',');\r\n }\r\n\r\n if (selectedFilter.key === 'protocols') {\r\n requestParams.protocols = selectedFilter.value.join(',');\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 if (indexerStats.selectedFilterKey !== 'all') {\r\n if (indexerStats.selectedFilterKey === 'lastSeven') {\r\n requestParams.startDate = moment().add(-7, 'days').endOf('day').toISOString();\r\n }\r\n\r\n if (indexerStats.selectedFilterKey === 'lastThirty') {\r\n requestParams.startDate = moment().add(-30, 'days').endOf('day').toISOString();\r\n }\r\n\r\n if (indexerStats.selectedFilterKey === 'lastNinety') {\r\n requestParams.startDate = moment().add(-90, 'days').endOf('day').toISOString();\r\n }\r\n }\r\n\r\n const basesAttrs = {\r\n section,\r\n isFetching: true\r\n };\r\n\r\n const attrs = basesAttrs;\r\n\r\n dispatch(set(attrs));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/indexerStats',\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 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_INDEXER_STATS_FILTER]: function(getState, payload, dispatch) {\r\n dispatch(set({ section, ...payload }));\r\n dispatch(fetchIndexerStats());\r\n }\r\n});\r\n\r\n//\r\n// Reducers\r\nexport const reducers = createHandleActions({}, defaultState, section);\r\n","import { 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 = 'indexerStatus';\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_INDEXER_STATUS = 'indexerStatus/fetchIndexerStatus';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchIndexerStatus = createThunk(FETCH_INDEXER_STATUS);\r\n\r\n//\r\n// Action Handlers\r\n\r\nexport const actionHandlers = handleThunks({\r\n [FETCH_INDEXER_STATUS]: createFetchHandler(section, '/indexerStatus')\r\n});\r\n\r\n//\r\n// Reducers\r\nexport const reducers = createHandleActions({}, defaultState, section);\r\n","import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';\r\nimport { createThunk, handleThunks } from 'Store/thunks';\r\nimport createHandleActions from './Creators/createHandleActions';\r\n\r\n//\r\n// Variables\r\n\r\nexport const section = 'localization';\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_LOCALIZATION_OPTIONS = 'localization/fetchLocalizationOptions';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchLocalizationOptions = createThunk(FETCH_LOCALIZATION_OPTIONS);\r\n\r\n//\r\n// Action Handlers\r\nexport const actionHandlers = handleThunks({\r\n\r\n [FETCH_LOCALIZATION_OPTIONS]: createFetchHandler(section, '/localization/options')\r\n});\r\n\r\n//\r\n// Reducers\r\nexport const reducers = createHandleActions({}, 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.Prowlarr.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 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","// extracted by mini-css-extract-plugin\nexport default {\"danger\":\"Icon-danger-epvdL\",\"default\":\"Icon-default-ZpHc_\",\"disabled\":\"Icon-disabled-cwrUJ\",\"info\":\"Icon-info-GEXUJ\",\"success\":\"Icon-success-J799D\",\"warning\":\"Icon-warning-wE4s6\",\"purple\":\"Icon-purple-roI8D\"};","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { PureComponent } from 'react';\r\nimport { kinds } from 'Helpers/Props';\r\nimport styles from './Icon.css';\r\n\r\nclass Icon extends PureComponent {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n containerClassName,\r\n className,\r\n name,\r\n kind,\r\n size,\r\n title,\r\n isSpinning,\r\n ...otherProps\r\n } = this.props;\r\n\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}\r\n\r\nIcon.propTypes = {\r\n containerClassName: PropTypes.string,\r\n className: PropTypes.string,\r\n name: PropTypes.object.isRequired,\r\n kind: PropTypes.string.isRequired,\r\n size: PropTypes.number.isRequired,\r\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\r\n isSpinning: PropTypes.bool.isRequired,\r\n fixedWidth: PropTypes.bool.isRequired\r\n};\r\n\r\nIcon.defaultProps = {\r\n kind: kinds.DEFAULT,\r\n size: 14,\r\n isSpinning: false,\r\n fixedWidth: false\r\n};\r\n\r\nexport default Icon;\r\n","import $ from 'jquery';\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, filterTypePredicates, icons, sortDirections } from 'Helpers/Props';\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 translate from 'Utilities/String/translate';\r\nimport { set } from './baseActions';\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\nimport createSetTableOptionReducer from './Creators/Reducers/createSetTableOptionReducer';\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 isGrabbing: false,\r\n error: null,\r\n grabError: null,\r\n items: [],\r\n sortKey: 'age',\r\n sortDirection: sortDirections.ASCENDING,\r\n secondarySortKey: 'sortTitle',\r\n secondarySortDirection: sortDirections.ASCENDING,\r\n\r\n defaults: {\r\n searchType: 'search',\r\n searchQuery: '',\r\n searchIndexerIds: [],\r\n searchCategories: [],\r\n searchLimit: 100,\r\n searchOffset: 0\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: 'protocol',\r\n label: () => translate('Protocol'),\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: 'sortTitle',\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: 'size',\r\n label: () => translate('Size'),\r\n isSortable: true,\r\n isVisible: true\r\n },\r\n {\r\n name: 'files',\r\n label: () => translate('Files'),\r\n isSortable: true,\r\n isVisible: false\r\n },\r\n {\r\n name: 'grabs',\r\n label: () => translate('Grabs'),\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: 'category',\r\n label: () => translate('Category'),\r\n isSortable: true,\r\n isVisible: 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 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 sortPredicates: {\r\n age: function(item) {\r\n return item.ageMinutes;\r\n },\r\n\r\n peers: function(item) {\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 indexerFlags: function(item) {\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 category: function(item) {\r\n if (item.categories !== undefined && item.categories.length > 0) {\r\n const sortedCats = item.categories.filter((cat) => cat.name !== undefined).sort((c) => c.id);\r\n const firstCat = sortedCats[0];\r\n\r\n return firstCat.name;\r\n }\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 peers: function(item, filterValue, type) {\r\n const predicate = filterTypePredicates[type];\r\n\r\n const seeders = item.seeders || 0;\r\n const leechers = item.leechers || 0;\r\n const peers = seeders + leechers;\r\n\r\n return predicate(peers, 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: '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: 'files',\r\n label: () => translate('Files'),\r\n type: filterBuilderTypes.NUMBER\r\n },\r\n {\r\n name: 'grabs',\r\n label: () => translate('Grabs'),\r\n type: filterBuilderTypes.NUMBER\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 selectedFilterKey: 'all'\r\n\r\n};\r\n\r\nexport const persistState = [\r\n 'releases.sortKey',\r\n 'releases.sortDirection',\r\n 'releases.customFilters',\r\n 'releases.selectedFilterKey',\r\n 'releases.columns'\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 SAVE_RELEASE = 'releases/saveRelease';\r\nexport const BULK_GRAB_RELEASES = 'release/bulkGrabReleases';\r\nexport const UPDATE_RELEASE = 'releases/updateRelease';\r\nexport const SET_RELEASES_FILTER = 'releases/setReleasesFilter';\r\nexport const SET_RELEASES_TABLE_OPTION = 'releases/setReleasesTableOption';\r\nexport const SET_SEARCH_DEFAULT = 'releases/setSearchDefault';\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 saveRelease = createThunk(SAVE_RELEASE);\r\nexport const bulkGrabReleases = createThunk(BULK_GRAB_RELEASES);\r\nexport const updateRelease = createAction(UPDATE_RELEASE);\r\nexport const setReleasesFilter = createAction(SET_RELEASES_FILTER);\r\nexport const setReleasesTableOption = createAction(SET_RELEASES_TABLE_OPTION);\r\nexport const setSearchDefault = createAction(SET_SEARCH_DEFAULT);\r\n\r\n//\r\n// Helpers\r\n\r\nconst fetchReleasesHelper = createFetchHandler(section, '/search');\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: '/search',\r\n method: 'POST',\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 [SAVE_RELEASE]: function(getState, payload, dispatch) {\r\n const link = payload.downloadUrl;\r\n const file = payload.fileName;\r\n\r\n $.ajax({\r\n url: link,\r\n method: 'GET',\r\n headers: {\r\n 'X-Prowlarr-Client': true\r\n },\r\n xhrFields: {\r\n responseType: 'blob'\r\n },\r\n success: function(data) {\r\n const a = document.createElement('a');\r\n const url = window.URL.createObjectURL(data);\r\n a.href = url;\r\n a.download = file;\r\n document.body.append(a);\r\n a.click();\r\n a.remove();\r\n window.URL.revokeObjectURL(url);\r\n }\r\n });\r\n },\r\n\r\n [BULK_GRAB_RELEASES]: function(getState, payload, dispatch) {\r\n dispatch(set({\r\n section,\r\n isGrabbing: true\r\n }));\r\n\r\n const promise = createAjaxRequest({\r\n url: '/search/bulk',\r\n method: 'POST',\r\n contentType: 'application/json',\r\n data: JSON.stringify(payload)\r\n }).request;\r\n\r\n promise.done((data) => {\r\n dispatch(batchActions([\r\n ...data.map(({ guid }) => {\r\n return updateRelease({\r\n guid,\r\n isGrabbing: false,\r\n isGrabbed: true,\r\n grabError: null\r\n });\r\n }),\r\n\r\n set({\r\n section,\r\n isGrabbing: false\r\n })\r\n ]));\r\n });\r\n\r\n promise.fail((xhr) => {\r\n dispatch(set({\r\n section,\r\n isGrabbing: false,\r\n grabError: 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_RELEASES]: (state) => {\r\n const {\r\n sortKey,\r\n sortDirection,\r\n customFilters,\r\n selectedFilterKey,\r\n columns,\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_SEARCH_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_RELEASES_FILTER]: createSetClientSideCollectionFilterReducer(section),\r\n [SET_RELEASES_SORT]: createSetClientSideCollectionSortReducer(section),\r\n\r\n [SET_RELEASES_TABLE_OPTION]: createSetTableOptionReducer(section)\r\n\r\n}, defaultState, section);\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 _ 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 { 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.applications';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_APPLICATIONS = 'settings/applications/fetchApplications';\r\nexport const FETCH_APPLICATION_SCHEMA = 'settings/applications/fetchApplicationSchema';\r\nexport const SELECT_APPLICATION_SCHEMA = 'settings/applications/selectApplicationSchema';\r\nexport const SET_APPLICATION_VALUE = 'settings/applications/setApplicationValue';\r\nexport const SET_APPLICATION_FIELD_VALUE = 'settings/applications/setApplicationFieldValue';\r\nexport const SAVE_APPLICATION = 'settings/applications/saveApplication';\r\nexport const CANCEL_SAVE_APPLICATION = 'settings/applications/cancelSaveApplication';\r\nexport const DELETE_APPLICATION = 'settings/applications/deleteApplication';\r\nexport const TEST_APPLICATION = 'settings/applications/testApplication';\r\nexport const CANCEL_TEST_APPLICATION = 'settings/applications/cancelTestApplication';\r\nexport const TEST_ALL_APPLICATIONS = 'settings/applications/testAllApplications';\r\nexport const BULK_EDIT_APPLICATIONS = 'settings/applications/bulkEditApplications';\r\nexport const BULK_DELETE_APPLICATIONS = 'settings/applications/bulkDeleteApplications';\r\nexport const SET_MANAGE_APPLICATIONS_SORT = 'settings/applications/setManageApplicationsSort';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchApplications = createThunk(FETCH_APPLICATIONS);\r\nexport const fetchApplicationSchema = createThunk(FETCH_APPLICATION_SCHEMA);\r\nexport const selectApplicationSchema = createAction(SELECT_APPLICATION_SCHEMA);\r\n\r\nexport const saveApplication = createThunk(SAVE_APPLICATION);\r\nexport const cancelSaveApplication = createThunk(CANCEL_SAVE_APPLICATION);\r\nexport const deleteApplication = createThunk(DELETE_APPLICATION);\r\nexport const testApplication = createThunk(TEST_APPLICATION);\r\nexport const cancelTestApplication = createThunk(CANCEL_TEST_APPLICATION);\r\nexport const testAllApplications = createThunk(TEST_ALL_APPLICATIONS);\r\nexport const bulkEditApplications = createThunk(BULK_EDIT_APPLICATIONS);\r\nexport const bulkDeleteApplications = createThunk(BULK_DELETE_APPLICATIONS);\r\nexport const setManageApplicationsSort = createAction(SET_MANAGE_APPLICATIONS_SORT);\r\n\r\nexport const setApplicationValue = createAction(SET_APPLICATION_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setApplicationFieldValue = createAction(SET_APPLICATION_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: function(item) {\r\n return item.name.toLowerCase();\r\n }\r\n }\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_APPLICATIONS]: createFetchHandler(section, '/applications'),\r\n [FETCH_APPLICATION_SCHEMA]: createFetchSchemaHandler(section, '/applications/schema'),\r\n\r\n [SAVE_APPLICATION]: createSaveProviderHandler(section, '/applications'),\r\n [CANCEL_SAVE_APPLICATION]: createCancelSaveProviderHandler(section),\r\n [DELETE_APPLICATION]: createRemoveItemHandler(section, '/applications'),\r\n [TEST_APPLICATION]: createTestProviderHandler(section, '/applications'),\r\n [CANCEL_TEST_APPLICATION]: createCancelTestProviderHandler(section),\r\n [TEST_ALL_APPLICATIONS]: createTestAllProvidersHandler(section, '/applications'),\r\n [BULK_EDIT_APPLICATIONS]: createBulkEditItemHandler(section, '/applications/bulk'),\r\n [BULK_DELETE_APPLICATIONS]: createBulkRemoveItemHandler(section, '/applications/bulk')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_APPLICATION_VALUE]: createSetSettingValueReducer(section),\r\n [SET_APPLICATION_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n\r\n [SELECT_APPLICATION_SCHEMA]: (state, { payload }) => {\r\n return selectProviderSchema(state, section, payload, (selectedSchema) => {\r\n selectedSchema.name = selectedSchema.implementationName;\r\n\r\n return selectedSchema;\r\n });\r\n },\r\n\r\n [SET_MANAGE_APPLICATIONS_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 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.appProfiles';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_APP_PROFILES = 'settings/appProfiles/fetchAppProfiles';\r\nexport const FETCH_APP_PROFILE_SCHEMA = 'settings/appProfiles/fetchAppProfileSchema';\r\nexport const SAVE_APP_PROFILE = 'settings/appProfiles/saveAppProfile';\r\nexport const DELETE_APP_PROFILE = 'settings/appProfiles/deleteAppProfile';\r\nexport const SET_APP_PROFILE_VALUE = 'settings/appProfiles/setAppProfileValue';\r\nexport const CLONE_APP_PROFILE = 'settings/appProfiles/cloneAppProfile';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchAppProfiles = createThunk(FETCH_APP_PROFILES);\r\nexport const fetchAppProfileSchema = createThunk(FETCH_APP_PROFILE_SCHEMA);\r\nexport const saveAppProfile = createThunk(SAVE_APP_PROFILE);\r\nexport const deleteAppProfile = createThunk(DELETE_APP_PROFILE);\r\n\r\nexport const setAppProfileValue = createAction(SET_APP_PROFILE_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const cloneAppProfile = createAction(CLONE_APP_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 isSchemaFetching: false,\r\n isSchemaPopulated: false,\r\n schemaError: null,\r\n schema: {},\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 // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_APP_PROFILES]: createFetchHandler(section, '/appprofile'),\r\n [FETCH_APP_PROFILE_SCHEMA]: createFetchSchemaHandler(section, '/appprofile/schema'),\r\n [SAVE_APP_PROFILE]: createSaveProviderHandler(section, '/appprofile'),\r\n [DELETE_APP_PROFILE]: createRemoveItemHandler(section, '/appprofile')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_APP_PROFILE_VALUE]: createSetSettingValueReducer(section),\r\n\r\n [CLONE_APP_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 { 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.development';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_DEVELOPMENT_SETTINGS = 'settings/development/fetchDevelopmentSettings';\r\nexport const SET_DEVELOPMENT_SETTINGS_VALUE = 'settings/development/setDevelopmentSettingsValue';\r\nexport const SAVE_DEVELOPMENT_SETTINGS = 'settings/development/saveDevelopmentSettings';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchDevelopmentSettings = createThunk(FETCH_DEVELOPMENT_SETTINGS);\r\nexport const saveDevelopmentSettings = createThunk(SAVE_DEVELOPMENT_SETTINGS);\r\nexport const setDevelopmentSettingsValue = createAction(SET_DEVELOPMENT_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_DEVELOPMENT_SETTINGS]: createFetchHandler(section, '/config/development'),\r\n [SAVE_DEVELOPMENT_SETTINGS]: createSaveHandler(section, '/config/development')\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_DEVELOPMENT_SETTINGS_VALUE]: createSetSettingValueReducer(section)\r\n }\r\n\r\n};\r\n","import { createAction } from 'redux-actions';\r\nimport { batchActions } from 'redux-batched-actions';\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 { removeItem, set, update, updateItem } from '../baseActions';\r\n\r\n//\r\n// Variables\r\n\r\nconst section = 'settings.downloadClientCategories';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_DOWNLOAD_CLIENT_CATEGORIES = 'settings/downloadClientCategories/fetchDownloadClientCategories';\r\nexport const FETCH_DOWNLOAD_CLIENT_CATEGORY_SCHEMA = 'settings/downloadClientCategories/fetchDownloadClientCategorySchema';\r\nexport const SELECT_DOWNLOAD_CLIENT_CATEGORY_SCHEMA = 'settings/downloadClientCategories/selectDownloadClientCategorySchema';\r\nexport const SET_DOWNLOAD_CLIENT_CATEGORY_VALUE = 'settings/downloadClientCategories/setDownloadClientCategoryValue';\r\nexport const SET_DOWNLOAD_CLIENT_CATEGORY_FIELD_VALUE = 'settings/downloadClientCategories/setDownloadClientCategoryFieldValue';\r\nexport const SAVE_DOWNLOAD_CLIENT_CATEGORY = 'settings/downloadClientCategories/saveDownloadClientCategory';\r\nexport const DELETE_DOWNLOAD_CLIENT_CATEGORY = 'settings/downloadClientCategories/deleteDownloadClientCategory';\r\nexport const DELETE_ALL_DOWNLOAD_CLIENT_CATEGORY = 'settings/downloadClientCategories/deleteAllDownloadClientCategory';\r\nexport const CLEAR_DOWNLOAD_CLIENT_CATEGORIES = 'settings/downloadClientCategories/clearDownloadClientCategories';\r\nexport const CLEAR_DOWNLOAD_CLIENT_CATEGORY_PENDING = 'settings/downloadClientCategories/clearDownloadClientCategoryPending';\r\n//\r\n// Action Creators\r\n\r\nexport const fetchDownloadClientCategories = createThunk(FETCH_DOWNLOAD_CLIENT_CATEGORIES);\r\nexport const fetchDownloadClientCategorySchema = createThunk(FETCH_DOWNLOAD_CLIENT_CATEGORY_SCHEMA);\r\nexport const selectDownloadClientCategorySchema = createAction(SELECT_DOWNLOAD_CLIENT_CATEGORY_SCHEMA);\r\n\r\nexport const saveDownloadClientCategory = createThunk(SAVE_DOWNLOAD_CLIENT_CATEGORY);\r\nexport const deleteDownloadClientCategory = createThunk(DELETE_DOWNLOAD_CLIENT_CATEGORY);\r\nexport const deleteAllDownloadClientCategory = createThunk(DELETE_ALL_DOWNLOAD_CLIENT_CATEGORY);\r\n\r\nexport const setDownloadClientCategoryValue = createAction(SET_DOWNLOAD_CLIENT_CATEGORY_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setDownloadClientCategoryFieldValue = createAction(SET_DOWNLOAD_CLIENT_CATEGORY_FIELD_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const clearDownloadClientCategory = createAction(CLEAR_DOWNLOAD_CLIENT_CATEGORIES);\r\n\r\nexport const clearDownloadClientCategoryPending = createThunk(CLEAR_DOWNLOAD_CLIENT_CATEGORY_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 isDeleting: false,\r\n deleteError: 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_DOWNLOAD_CLIENT_CATEGORIES]: (getState, payload, dispatch) => {\r\n let tags = [];\r\n if (payload.id) {\r\n const cfState = getSectionState(getState(), 'settings.downloadClients', true);\r\n const cf = cfState.items[cfState.itemMap[payload.id]];\r\n tags = cf.categories.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_DOWNLOAD_CLIENT_CATEGORY]: (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.downloadClientCategories.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_DOWNLOAD_CLIENT_CATEGORY]: (getState, payload, dispatch) => {\r\n const id = payload.id;\r\n return dispatch(removeItem({ section, id }));\r\n },\r\n\r\n [DELETE_ALL_DOWNLOAD_CLIENT_CATEGORY]: (getState, payload, dispatch) => {\r\n return dispatch(set({\r\n section,\r\n items: []\r\n }));\r\n },\r\n\r\n [CLEAR_DOWNLOAD_CLIENT_CATEGORY_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_DOWNLOAD_CLIENT_CATEGORY_VALUE]: createSetSettingValueReducer(section),\r\n [SET_DOWNLOAD_CLIENT_CATEGORY_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n\r\n [SELECT_DOWNLOAD_CLIENT_CATEGORY_SCHEMA]: (state, { payload }) => {\r\n return selectProviderSchema(state, section, payload, (selectedSchema) => {\r\n return selectedSchema;\r\n });\r\n },\r\n\r\n [CLEAR_DOWNLOAD_CLIENT_CATEGORIES]: createClearReducer(section, {\r\n isPopulated: false,\r\n error: null,\r\n items: []\r\n })\r\n }\r\n};\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 { 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\nimport { set } from '../baseActions';\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: function(item) {\r\n return item.name.toLowerCase();\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]: (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.downloadClients.pendingChanges;\r\n pendingChanges.categories = state.settings.downloadClientCategories.items;\r\n dispatch(set({\r\n section,\r\n pendingChanges\r\n }));\r\n\r\n createSaveProviderHandler(section, '/downloadclient')(getState, payload, dispatch);\r\n },\r\n\r\n [CANCEL_SAVE_DOWNLOAD_CLIENT]: createCancelSaveProviderHandler(section),\r\n [DELETE_DOWNLOAD_CLIENT]: createRemoveItemHandler(section, '/downloadclient'),\r\n\r\n [TEST_DOWNLOAD_CLIENT]: (getState, payload, dispatch) => {\r\n const state = getState();\r\n const pendingChanges = state.settings.downloadClients.pendingChanges;\r\n pendingChanges.categories = state.settings.downloadClientCategories.items;\r\n dispatch(set({\r\n section,\r\n pendingChanges\r\n }));\r\n\r\n createTestProviderHandler(section, '/downloadclient')(getState, payload, dispatch);\r\n },\r\n\r\n [CANCEL_TEST_DOWNLOAD_CLIENT]: createCancelTestProviderHandler(section),\r\n [TEST_ALL_DOWNLOAD_CLIENTS]: createTestAllProvidersHandler(section, '/downloadclient'),\r\n [BULK_EDIT_DOWNLOAD_CLIENTS]: createBulkEditItemHandler(section, '/downloadclient/bulk'),\r\n [BULK_DELETE_DOWNLOAD_CLIENTS]: createBulkRemoveItemHandler(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 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.indexerCategories';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_INDEXER_CATEGORIES = 'settings/indexerFlags/fetchIndexerCategories';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchIndexerCategories = createThunk(FETCH_INDEXER_CATEGORIES);\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_CATEGORIES]: createFetchHandler(section, '/indexer/categories')\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 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 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.indexerProxies';\r\n\r\n//\r\n// Actions Types\r\n\r\nexport const FETCH_INDEXER_PROXYS = 'settings/indexerProxies/fetchIndexerProxies';\r\nexport const FETCH_INDEXER_PROXY_SCHEMA = 'settings/indexerProxies/fetchIndexerProxySchema';\r\nexport const SELECT_INDEXER_PROXY_SCHEMA = 'settings/indexerProxies/selectIndexerProxySchema';\r\nexport const SET_INDEXER_PROXY_VALUE = 'settings/indexerProxies/setIndexerProxyValue';\r\nexport const SET_INDEXER_PROXY_FIELD_VALUE = 'settings/indexerProxies/setIndexerProxyFieldValue';\r\nexport const SAVE_INDEXER_PROXY = 'settings/indexerProxies/saveIndexerProxy';\r\nexport const CANCEL_SAVE_INDEXER_PROXY = 'settings/indexerProxies/cancelSaveIndexerProxy';\r\nexport const DELETE_INDEXER_PROXY = 'settings/indexerProxies/deleteIndexerProxy';\r\nexport const TEST_INDEXER_PROXY = 'settings/indexerProxies/testIndexerProxy';\r\nexport const CANCEL_TEST_INDEXER_PROXY = 'settings/indexerProxies/cancelTestIndexerProxy';\r\n\r\n//\r\n// Action Creators\r\n\r\nexport const fetchIndexerProxies = createThunk(FETCH_INDEXER_PROXYS);\r\nexport const fetchIndexerProxySchema = createThunk(FETCH_INDEXER_PROXY_SCHEMA);\r\nexport const selectIndexerProxySchema = createAction(SELECT_INDEXER_PROXY_SCHEMA);\r\n\r\nexport const saveIndexerProxy = createThunk(SAVE_INDEXER_PROXY);\r\nexport const cancelSaveIndexerProxy = createThunk(CANCEL_SAVE_INDEXER_PROXY);\r\nexport const deleteIndexerProxy = createThunk(DELETE_INDEXER_PROXY);\r\nexport const testIndexerProxy = createThunk(TEST_INDEXER_PROXY);\r\nexport const cancelTestIndexerProxy = createThunk(CANCEL_TEST_INDEXER_PROXY);\r\n\r\nexport const setIndexerProxyValue = createAction(SET_INDEXER_PROXY_VALUE, (payload) => {\r\n return {\r\n section,\r\n ...payload\r\n };\r\n});\r\n\r\nexport const setIndexerProxyFieldValue = createAction(SET_INDEXER_PROXY_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 items: [],\r\n pendingChanges: {}\r\n },\r\n\r\n //\r\n // Action Handlers\r\n\r\n actionHandlers: {\r\n [FETCH_INDEXER_PROXYS]: createFetchHandler(section, '/indexerProxy'),\r\n [FETCH_INDEXER_PROXY_SCHEMA]: createFetchSchemaHandler(section, '/indexerProxy/schema'),\r\n\r\n [SAVE_INDEXER_PROXY]: createSaveProviderHandler(section, '/indexerProxy'),\r\n [CANCEL_SAVE_INDEXER_PROXY]: createCancelSaveProviderHandler(section),\r\n [DELETE_INDEXER_PROXY]: createRemoveItemHandler(section, '/indexerProxy'),\r\n [TEST_INDEXER_PROXY]: createTestProviderHandler(section, '/indexerProxy'),\r\n [CANCEL_TEST_INDEXER_PROXY]: createCancelTestProviderHandler(section)\r\n },\r\n\r\n //\r\n // Reducers\r\n\r\n reducers: {\r\n [SET_INDEXER_PROXY_VALUE]: createSetSettingValueReducer(section),\r\n [SET_INDEXER_PROXY_FIELD_VALUE]: createSetProviderFieldValueReducer(section),\r\n\r\n [SELECT_INDEXER_PROXY_SCHEMA]: (state, { payload }) => {\r\n return selectProviderSchema(state, section, payload, (selectedSchema) => {\r\n selectedSchema.name = selectedSchema.implementationName;\r\n\r\n return selectedSchema;\r\n });\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, { 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 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 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\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 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\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.onApplicationUpdate = selectedSchema.supportsOnApplicationUpdate;\r\n\r\n return selectedSchema;\r\n });\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.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 applications from './Settings/applications';\r\nimport appProfiles from './Settings/appProfiles';\r\nimport development from './Settings/development';\r\nimport downloadClientCategories from './Settings/downloadClientCategories';\r\nimport downloadClients from './Settings/downloadClients';\r\nimport general from './Settings/general';\r\nimport indexerCategories from './Settings/indexerCategories';\r\nimport indexerProxies from './Settings/indexerProxies';\r\nimport notifications from './Settings/notifications';\r\nimport ui from './Settings/ui';\r\n\r\nexport * from './Settings/downloadClientCategories';\r\nexport * from './Settings/downloadClients';\r\nexport * from './Settings/general';\r\nexport * from './Settings/indexerCategories';\r\nexport * from './Settings/indexerProxies';\r\nexport * from './Settings/notifications';\r\nexport * from './Settings/applications';\r\nexport * from './Settings/appProfiles';\r\nexport * from './Settings/development';\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\r\n downloadClientCategories: downloadClientCategories.defaultState,\r\n downloadClients: downloadClients.defaultState,\r\n general: general.defaultState,\r\n indexerCategories: indexerCategories.defaultState,\r\n indexerProxies: indexerProxies.defaultState,\r\n notifications: notifications.defaultState,\r\n applications: applications.defaultState,\r\n appProfiles: appProfiles.defaultState,\r\n development: development.defaultState,\r\n ui: ui.defaultState\r\n};\r\n\r\nexport const persistState = [\r\n 'settings.advancedSettings'\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 ...downloadClientCategories.actionHandlers,\r\n ...downloadClients.actionHandlers,\r\n ...general.actionHandlers,\r\n ...indexerCategories.actionHandlers,\r\n ...indexerProxies.actionHandlers,\r\n ...notifications.actionHandlers,\r\n ...applications.actionHandlers,\r\n ...appProfiles.actionHandlers,\r\n ...development.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 ...downloadClientCategories.reducers,\r\n ...downloadClients.reducers,\r\n ...general.reducers,\r\n ...indexerCategories.reducers,\r\n ...indexerProxies.reducers,\r\n ...notifications.reducers,\r\n ...applications.reducers,\r\n ...appProfiles.reducers,\r\n ...development.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 * as app from './appActions';\r\nimport * as captcha from './captchaActions';\r\nimport * as commands from './commandActions';\r\nimport * as customFilters from './customFilterActions';\r\nimport * as history from './historyActions';\r\nimport * as indexers from './indexerActions';\r\nimport * as indexerHistory from './indexerHistoryActions';\r\nimport * as indexerIndex from './indexerIndexActions';\r\nimport * as indexerStats from './indexerStatsActions';\r\nimport * as indexerStatus from './indexerStatusActions';\r\nimport * as localization from './localizationActions';\r\nimport * as oAuth from './oAuthActions';\r\nimport * as paths from './pathActions';\r\nimport * as providerOptions from './providerOptionActions';\r\nimport * as releases from './releaseActions';\r\nimport * as settings from './settingsActions';\r\nimport * as system from './systemActions';\r\nimport * as tags from './tagActions';\r\n\r\nexport default [\r\n app,\r\n captcha,\r\n commands,\r\n customFilters,\r\n history,\r\n oAuth,\r\n paths,\r\n providerOptions,\r\n releases,\r\n localization,\r\n indexers,\r\n indexerHistory,\r\n indexerIndex,\r\n indexerStats,\r\n indexerStatus,\r\n settings,\r\n system,\r\n tags\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: 'prowlarr'\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\nfunction cleanseUrl(url) {\r\n const properties = parseUrl(url);\r\n\r\n return `${properties.pathname}${properties.search}`;\r\n}\r\n\r\nfunction cleanseData(data) {\r\n const result = _.cloneDeep(data);\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 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.Prowlarr.urlBase) {\r\n frame.filename = frame.filename.replace(window.Prowlarr.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.Prowlarr;\r\n\r\n if (!analytics) {\r\n return;\r\n }\r\n\r\n const dsn = isProduction ? 'https://b233094711fe4430a0b0c5da2e01df93@sentry.servarr.com/28' :\r\n 'https://116efebd253a4dff9df9475a31510001@sentry.servarr.com/37';\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 { 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","function getErrorMessage(xhr, fallbackErrorMessage) {\r\n if (!xhr || !xhr.responseJSON || !xhr.responseJSON.message) {\r\n return fallbackErrorMessage;\r\n }\r\n\r\n const message = xhr.responseJSON.message;\r\n\r\n return message || 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 indexersError,\r\n indexerStatusError,\r\n indexerCategoriesError,\r\n customFiltersError,\r\n tagsError,\r\n languagesError,\r\n uiSettingsError,\r\n systemStatusError\r\n } = props;\r\n\r\n let errorMessage = 'Failed to load Prowlarr';\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 (indexersError) {\r\n errorMessage = getErrorMessage(indexersError, 'Failed to load indexers from API');\r\n } else if (indexerStatusError) {\r\n errorMessage = getErrorMessage(indexerStatusError, 'Failed to load indexers from API');\r\n } else if (indexersError) {\r\n errorMessage = getErrorMessage(indexerCategoriesError, 'Failed to load indexers 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 (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 indexersError: PropTypes.object,\r\n indexerStatusError: PropTypes.object,\r\n indexerCategoriesError: PropTypes.object,\r\n customFiltersError: PropTypes.object,\r\n tagsError: 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","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './LoadingIndicator.css';\r\n\r\nfunction LoadingIndicator({ className, rippleClassName, size }) {\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\nLoadingIndicator.propTypes = {\r\n className: PropTypes.string,\r\n rippleClassName: PropTypes.string,\r\n size: PropTypes.number\r\n};\r\n\r\nLoadingIndicator.defaultProps = {\r\n className: styles.loading,\r\n rippleClassName: styles.ripple,\r\n size: 50\r\n};\r\n\r\nexport default LoadingIndicator;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"loading\":\"LoadingIndicator-loading-DWfav\",\"rippleContainer\":\"LoadingIndicator-rippleContainer-b3h1D\",\"ripple\":\"LoadingIndicator-ripple-Dn9J1\"};","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 Prowlarr...',\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 tracks',\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 = 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 (\r\n
\r\n {message}\r\n
\r\n );\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 prowlarrLogo = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMTAiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHdpZHRoPSIxMDI0IgogICBoZWlnaHQ9IjEwMjQiCiAgIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiCiAgIHNvZGlwb2RpOmRvY25hbWU9InByb3dsYXJyICgxKS5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMiAoNWMzZTgwZCwgMjAxNy0wOC0wNikiCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iQzpcVXNlcnNccXN0aWNcc291cmNlXHJlcG9zXFByb3dsYXJyXExvZ29cMTYucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMS41IgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMS41Ij48bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExNiI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczE0Ij48Y2xpcFBhdGgKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImNsaXBQYXRoNTEwIj48cGF0aAogICAgICAgICBkPSJtIDEyNzEuMDYsOTA1Ljc3IGMgMCwwIDAsMCAtMC4wMSwwIDAuMDEsMCAwLjAxLDAgMC4wMSwwIHYgMCIKICAgICAgICAgaWQ9InBhdGg1MDgiIC8+PC9jbGlwUGF0aD48L2RlZnM+PHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxNjgwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijk5NyIKICAgICBpZD0ibmFtZWR2aWV3MTIiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGZpdC1tYXJnaW4tdG9wPSIwIgogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCIKICAgICBmaXQtbWFyZ2luLXJpZ2h0PSIwIgogICAgIGZpdC1tYXJnaW4tYm90dG9tPSIwIgogICAgIGlua3NjYXBlOnpvb209IjAuNjA5NzE4NDQiCiAgICAgaW5rc2NhcGU6Y3g9IjM0MS41Njc3NSIKICAgICBpbmtzY2FwZTpjeT0iNDc0LjYwMzY5IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImcxOCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC1yb3RhdGlvbj0iMCIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSJmYWxzZSIgLz48ZwogICAgIGlkPSJnMTgiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpbmtzY2FwZTpsYWJlbD0iaW5rX2V4dF9YWFhYWFgiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4zMzMzMzMzLDAsMCwtMS4zMzMzMzMzLDE5OC42Mjc2Niw1MTUuODM2OCkiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj48ZwogICAgICAgaWQ9ImcyMjQ4IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoNC4wOTYwMDAxLDAsMCw0LjA5NjAwMDEsNDI1LjA5NzMxLC0xMTIzLjM0ODUpIj48Y2lyY2xlCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmU2ZDU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLXdpZHRoOjEuNjgxNzc5OTgiCiAgICAgICAgIGlkPSJwYXRoMjE4OCIKICAgICAgICAgY3g9Ii00Ni40MDMzMiIKICAgICAgICAgY3k9Ii0yNzQuOTU3NTUiCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMSwtMSkiCiAgICAgICAgIHI9IjkwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTEwOC4xMDE1NiwyNTguNTA2ODEgMTYuMTc3LDE5LjAwMSAxMjEuNDgzLDAuNDAzIC0xNS43NjcsLTE5LjQwNCBoIC0xMjEuODkzIgogICAgICAgICBzdHlsZT0iZmlsbDojODMzMzFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNTY4IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGlkPSJwYXRoNTcwIgogICAgICAgICBzdHlsZT0iZmlsbDojZjhhMzdiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEzMzMzMyIKICAgICAgICAgZD0ibSAtMTQ0LjEzNDc3LDMyMS45OTAyMyB2IDY4LjA4Mzk5IGEgMjQuMDM2MjgyLDEwLjg4NDM1MyAwIDAgMSAyMS42ODU1NSwxMC44MjAzMSBIIDMuMzIyMjY1NiBBIDE4LjE0MDU5LDExLjMzNzg2OSAwIDAgMSAxLjgxNDQ1MzEsMzk2LjM3MTA5IDE4LjE0MDU5LDExLjMzNzg2OSAwIDAgMSAxOC4zODg2NzIsMzg1LjA3ODEyIHYgLTYzLjA4Nzg5IHoiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwMDAwMDIsMCwwLC0wLjc1MDAwMDAyLDAsNTAwLjAwMDAyKSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC0zOC4zMjM1NiwyNDkuODk1ODEgYyAxLjk2MiwxLjA2IDQuOTkxLDQuMjQ0IDMuMTIyLDcuNDI4IC0wLjM0NiwwLjU4OSAtMC42ODQsMC45NjggLTEuMDA4LDEuMTgzIGggOC4xNDUgYyAtMS4wNiwtMi4zMzMgLTQuODksLTUuMTU1IC00Ljg5LC01LjE1NSAwLDAgLTAuMzEzLC0wLjYwNiAtMi4wMTEsLTEuOTQxIC0wLjk2MSwtMC43NTQgLTIuMzQxLC0xLjIzNyAtMy4zNTgsLTEuNTE1IG0gLTI0LjA0MSwwLjEzMSBjIC0xLjAwMSwwLjQ2NSAtMi40NTUsMS4yNjIgLTMuNDc4LDIuMzQ4IC0xLjcwOCwxLjgxMyAtMi4wNTIsNC4xOTEgLTIuMDUyLDQuMTkxIGwgLTEuMjA4LDEuOTQxIGggNC44NTMgYyAtMC4zMjQsLTAuMjE1IC0wLjY2MSwtMC41OTQgLTEuMDA3LC0xLjE4MyAtMS43OTcsLTMuMDYyIDAuOTM1LC02LjEyNCAyLjg5MiwtNy4yOTcgbSAyMi4yODcsMC45NjEgYyAtMS4wNjUsMC4xMDQgLTMuMDQsMC4zNzIgLTUuMDE1LDEuMDMgLTIuOTExLDAuOTcgLTQuNjA5LDMuMTUzIC00LjYwOSwzLjE1MyAwLDAgLTMuMjc1LC0yLjAwMSAtNy42NDEsLTIuNzk2IC0xLjQ1OCwtMC4yNjUgLTIuNDA4LC0wLjM1NCAtMy4wMjgsLTAuMzU0IC0wLjAxLDAgLTAuMDE5LDAgLTAuMDI5LDAgLTAuMDg3LDEuNDY0IC0wLjM4NywzLjAyOSAtMC4zODcsMy4wMjkgMCwwIC0wLjgyNywyLjY1MyAtMi4wNjgsMy40NTcgaCA1LjE2OCAyMC4wODMgYyAtMS4yNDEsLTAuODA0IC0yLjA2OSwtMy40NTcgLTIuMDY5LC0zLjQ1NyAwLDAgLTAuNDY0LC0yLjQyNSAtMC40MDUsLTQuMDYyIgogICAgICAgICBzdHlsZT0iZmlsbDojZGE4NDVkO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNTcyIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTYwLjc4NjU2LDI1NS4wNDk4MSBjIDAsMCAwLjkyMywtNC44MjEgMCwtNS40NTggLTAuOTIyLC0wLjYzNyAtNi45MjYsMy41NDggLTQuNDcsNy43MzIgMi40NTYsNC4xODQgNC40NywtMi4yNzQgNC40NywtMi4yNzQiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNkZWU2ZTM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg1NzQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtMzkuNjcyNTYsMjU1LjA0OTgxIGMgMCwwIC0wLjkyMiwtNC44MjEgMCwtNS40NTggMC45MjMsLTAuNjM3IDYuOTI3LDMuNTQ4IDQuNDcxLDcuNzMyIC0yLjQ1Niw0LjE4NCAtNC40NzEsLTIuMjc0IC00LjQ3MSwtMi4yNzQiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNkZWU2ZTM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg1NzYiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtNzUuMjczNTYsMjk1LjQ1OTgxIGMgMS4xMTcsLTUuMzM1IC0yLjMwMiwtMTAuNTY2IC03LjYzNywtMTEuNjgzIC01LjMzNSwtMS4xMTcgLTEwLjU2NSwyLjMwMiAtMTEuNjgyLDcuNjM3IC0xLjExNyw1LjMzNSAyLjMwMiwxMC41NjYgNy42MzcsMTEuNjgzIDUuMzM1LDEuMTE3IDEwLjU2NSwtMi4zMDIgMTEuNjgyLC03LjYzNyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2Q0NTQxZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDU3OCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC03OS4xMzY1NiwzMDEuNDEwODEgYyAtMi4xNzYsMS41ODEgLTQuOTc5LDIuMjgxIC03LjgxOSwxLjY4NiAtNS4zMzUsLTEuMTE3IC04Ljc1NCwtNi4zNDggLTcuNjM3LC0xMS42ODMgMC4yNDMsLTEuMTYxIDAuNjksLTIuMjI0IDEuMjgyLC0zLjE3NyA0LjM0OSwxLjQ3OSAxMC45MzMsNS4wMDcgMTQuMTc0LDEzLjE3NCIKICAgICAgICAgc3R5bGU9ImZpbGw6Izg1MmUxYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDU4MCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC03OS41NTU1NiwyOTQuNTYyODEgYyAwLjYyMSwtMi45NyAtMS4yODIsLTUuODgxIC00LjI1MiwtNi41MDMgLTIuOTY5LC0wLjYyMiAtNS44ODEsMS4yODEgLTYuNTAzLDQuMjUxIC0wLjYyMiwyLjk3IDEuMjgyLDUuODgxIDQuMjUxLDYuNTAzIDIuOTcsMC42MjIgNS44ODIsLTEuMjgxIDYuNTA0LC00LjI1MSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDU4MiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC0xMS45NzA1NiwyOTcuMjk0ODEgYyAtMi4yOTIsMCAtNC40MjcsMS40NTYgLTUuMTg1LDMuNzUyIC0wLjk0MSwyLjg1NCAwLjYwMiw1LjkzMiAzLjQ0OSw2Ljg4NyAxLjU3OCwwLjU0NSA5LjI1OCwzLjYgNi45NiwxMC43NjUgLTEuNjYsNS4xOCAtNC44LDUuOTM0IC0xNC4wOCw2LjkxOSAtMS43MDIsMC4xOCAtMy40NjEsMC4zNjggLTUuMjg5LDAuNjI5IC02LjU2NywwLjkzOCAtMTEuMzk2LDMuNjU0IC0xNC4zNTEsOC4wNzIgLTQuMzEyLDYuNDQ1IC0yLjYyMiwxMy43NTEgLTIuNDE1LDE0LjU2MiAwLjc0NCwyLjkyMiAzLjcxNyw0LjY4MyA2LjY0LDMuOTQzIDIuOTIyLC0wLjc0NSA0LjY4NywtMy43MTggMy45NDIsLTYuNjQgMC4wMDIsMCAtMC43NCwtMy4zOTEgMC45NDYsLTUuODQ1IDEuMTY4LC0xLjcwMSAzLjQ1LC0yLjgwNCA2Ljc4MywtMy4yODEgMS42MzIsLTAuMjMzIDMuMjkyLC0wLjQwOSA0Ljg5NywtMC41OCA4LjYyMywtMC45MTUgMTkuMzU1LC0yLjA1NiAyMy4zMjcsLTE0LjQ0MyA0LjIyOCwtMTMuMTg3IC02LjAwNCwtMjEuODU1IC0xMy45MTIsLTI0LjQ2NCAtMC41NjgsLTAuMTg3IC0xLjE0NSwtMC4yNzYgLTEuNzEyLC0wLjI3NiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2UyNTkxZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDU4NCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC0zMS4zNTM1NiwzNDAuMzM4ODEgLTAuMTYyLDAuMjYyIGMgLTMuNiwtMi4zIC04LjE0NiwtMi43OTEgLTEwLjY5MSwtMi44NjggMC40MjYsLTEuMTM4IDAuOTg3LC0yLjI4OSAxLjc0LC0zLjQxNCAwLjk2NiwtMS40NDUgMi4xNTMsLTIuNjg4IDMuNTE2LC0zLjc2NiA0Ljc4NCwwLjc5MyA4LjYzNiw0LjM4IDEwLjc1Nyw2LjgxNSAtMi40NTUsMC41NzMgLTQuMTk0LDEuNTY0IC01LjE2LDIuOTcxIgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNTg4IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTE5Ljc1ODU2LDMyNS41MDA4MSBjIDMuOTEzLC0wLjQzMyA2LjY1NSwtMC44NjIgOC42MjIsLTEuNjg4IDEuMzQ5LDIuMjQgMy4yMzIsNS45NTcgMy45MywxMC4xNDcgLTIuODk3LDEuMTY3IC02LjAxNiwxLjczOSAtOS4wMywyLjEyNiAwLjI2MywtMi43MTYgMC4wNzgsLTcuMzk4IC0zLjUyMiwtMTAuNTg1IgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNTkwIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gNC4xNTY0NCwzMTEuOTkwODEgYyAwLjYxMywyLjQ4OCAwLjY3Myw1LjI1NiAtMC4wMjUsOC4yNzggLTEuMDc1LC0wLjg2OSAtMi40NTcsLTEuNjU3IC00LjIwMiwtMi4xMSAtMi45NTQsLTAuNzY4IC01LjA2NiwtMC43MjEgLTYuNDA4LC0wLjUwOSAwLjU4MSwtMi45NDcgLTAuNTc3LC01LjEyOCAtMi4xNSwtNi42NzQgNC44NTIsLTIuMTE5IDkuNTkzLC0wLjY1MyAxMi43ODUsMS4wMTUiCiAgICAgICAgIHN0eWxlPSJmaWxsOiM4NTJlMWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg1OTIiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtNi40NDY1NiwzMTQuODU2ODEgYyAtMC4wMDMsMTBlLTQgLTAuMDA2LDAuMDAzIC0wLjAwOSwwLjAwNCAwLjAxMiwwLjA2NCAwLjAyNCwwLjEyOCAwLjAzNCwwLjE5MyBsIDAuMDAxLDAuMDAyIDAuMDI4LDAuMjM4IGMgMC4wMzEsMC4yNTEgMC4wNTIsMC41MDYgMC4wNTYsMC43NyBsIDAuMDAxLDAuMTYgYyAtMC4wMDQsMC4zMzggLTAuMDI3LDAuNjg1IC0wLjA4MSwxLjA0NyBsIDEwZS00LC0xMGUtNCBjIC0wLjA2NiwwLjQ1IC0wLjE2NywwLjkxNiAtMC4zMjIsMS40MDQgMC4xMTEsLTAuMzUyIDAuMTk5LC0wLjY5MyAwLjI2NSwtMS4wMjUgLTAuMDAyLDAgLTAuMDA0LDAgLTAuMDA2LDEwZS00IDAuMjAxLC0xLjAyMSAwLjE5NCwtMS45NSAwLjAzMiwtMi43OTMgbSAtMC4yOTIsMy44MiBjIC0wLjAwMywwLjAwNyAtMC4wMDUsMC4wMTUgLTAuMDA4LDAuMDIyIC0wLjg1NiwyLjY3MSAtMi4xMDUsNC4xNjUgLTQuMzg2LDUuMTIxIHYgMCBjIDIuMjgxLC0wLjk1NiAzLjUzLC0yLjQ1IDQuMzg2LC01LjEyMSAwLjAwMywtMC4wMDcgMC4wMDUsLTAuMDE1IDAuMDA4LC0wLjAyMiBtIC0xMy4wMTgsNi44MjUgYyAtMC4zNDcsMC4wMzkgLTAuNzA0LDAuMDc3IC0xLjA3LDAuMTE2IC0xLjcwMiwwLjE4IC0zLjQ2MSwwLjM2OCAtNS4yOSwwLjYyOSAtMC4wNDgsMC4wMDcgLTAuMDk3LDAuMDE0IC0wLjE0NiwwLjAyMiAwLjA0OSwtMC4wMDggMC4wOTgsLTAuMDE1IDAuMTQ3LC0wLjAyMiAxLjgyOCwtMC4yNjEgMy41ODcsLTAuNDQ5IDUuMjg5LC0wLjYyOSAwLjM2NiwtMC4wMzkgMC43MjMsLTAuMDc3IDEuMDcsLTAuMTE2IHYgMCBtIC02LjU0LDAuNzcyIGMgLTAuMDA3LDEwZS00IC0wLjAxNSwwLjAwMiAtMC4wMjMsMC4wMDMgMC4wMDgsLTAuMDAxIDAuMDE1LC0wLjAwMiAwLjAyMywtMC4wMDMgbSAtMC4wNzUsMC4wMTEgYyAtMC4wMDEsMCAtMC4wMDIsMCAtMC4wMDMsMCAwLDAgMC4wMDIsMCAwLjAwMywwIgogICAgICAgICBzdHlsZT0iZmlsbDojODNiYWQyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNTk0IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gMy4zMjM0NCwzMDkuNTA2ODEgYyAtMC42MDgsMC40NTMgLTEuMjI5LDAuODkgLTEuODY1LDEuMzExIDAuOTYyLDAuMzM0IDEuODUxLDAuNzMzIDIuNjQ2LDEuMTQ2IDAuMDEzLC0wLjAwOCAwLjAyNSwtMC4wMTcgMC4wMzcsLTAuMDI2IC0wLjIxMSwtMC44NDQgLTAuNDg4LC0xLjY1MyAtMC44MTgsLTIuNDMxIG0gLTcuOTg4LDguMDA4IGMgLTAuNzEsMCAtMS4zMTIsMC4wNTYgLTEuODA4LDAuMTM0IC0wLjA2NiwwLjMzMiAtMC4xNTQsMC42NzMgLTAuMjY1LDEuMDI1IC0xMGUtNCwxMGUtNCAtMTBlLTQsMC4wMDIgLTEwZS00LDAuMDAzIC0wLjAwMywwLjAwNyAtMC4wMDUsMC4wMTUgLTAuMDA4LDAuMDIyIC0wLjg1NiwyLjY3MSAtMi4xMDUsNC4xNjUgLTQuMzg2LDUuMTIxIDAuNDk0LDAuODIgMS4wNTksMS44MzkgMS42MTIsMy4wMDYgMi43NDksLTEuMTA4IDQuNjI1LC0yLjgyMSA2LjAxNiwtNS42MDMgMC41NjYsLTEuMTMxIDAuNzU3LC0yLjM1MSAwLjY5NSwtMy41OTIgLTAuNjg1LC0wLjA4MiAtMS4zMDMsLTAuMTE2IC0xLjg1NSwtMC4xMTYgbSAtMTUuMDkyLDcuOTg3IGMgLTAuMzQ3LDAuMDM5IC0wLjcwNCwwLjA3NyAtMS4wNywwLjExNiAtMS43MDIsMC4xOCAtMy40NjEsMC4zNjggLTUuMjg5LDAuNjI5IC0wLjA0OSwwLjAwNyAtMC4wOTgsMC4wMTQgLTAuMTQ3LDAuMDIyIC0wLjAxMSwwLjAwMSAtMC4wMjMsMC4wMDMgLTAuMDM0LDAuMDA1IC0wLjAwOCwxMGUtNCAtMC4wMTUsMC4wMDIgLTAuMDIzLDAuMDAzIC0wLjAxOCwwLjAwMyAtMC4wMzUsMC4wMDUgLTAuMDUyLDAuMDA4IC0wLjAwMSwwIC0wLjAwMywwIC0wLjAwMywwIC00Ljg3OCwwLjczNyAtOC43NjksMi40ODEgLTExLjY0LDUuMTc4IDAuMzQxLC0wLjMxNiAwLjY5NiwtMC42MTkgMS4wNjQsLTAuOTEgMC41NjgsMC4wOTQgMS4xMjMsMC4yMjggMS42NjQsMC4zOTQgMi43NTIsLTAuODkzIDYuMjIxLC0xLjY0NSAxMC40MzcsLTEuODg3IDIuNzk1LC0wLjE2IDUuMjQ2LC0wLjMyNiA3LjQwMywtMC41NTYgLTAuNTQsLTEuMDY4IC0xLjI4NywtMi4wOTUgLTIuMzEsLTMuMDAyIgogICAgICAgICBzdHlsZT0iZmlsbDojYmE0YTFmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNTk2IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTM2Ljk1MDU2LDMzMC41NTI4MSBjIC0wLjM2OCwwLjI5MSAtMC43MjMsMC41OTQgLTEuMDY0LDAuOTEgLTAuMzA2LDAuMjg3IC0wLjYsMC41ODUgLTAuODgzLDAuODkzIDEuMDI0LC0wLjQ3NCAyLjIyNywtMC45NTkgMy42MTEsLTEuNDA5IC0wLjU0MSwtMC4xNjYgLTEuMDk2LC0wLjMgLTEuNjY0LC0wLjM5NCIKICAgICAgICAgc3R5bGU9ImZpbGw6IzZmMjcxNztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDU5OCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC0xMS4xMzI1NiwzMjMuODE5ODEgYyAtMS45NywwLjgyNSAtNC43MDcsMS4yNDkgLTguNjI0LDEuNjgyIHYgMCBjIDEuMDIzLDAuOTA3IDEuNzcsMS45MzQgMi4zMSwzLjAwMiAzLjI1NSwtMC4zNDYgNS44NDIsLTAuODM4IDcuOTI2LC0xLjY3OCAtMC41NTMsLTEuMTY3IC0xLjExOCwtMi4xODYgLTEuNjEyLC0zLjAwNiB2IDAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZjI3MTc7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2MDAiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAxLjQ1ODQ0LDMxMC44MTc4MSBjIC0yLjQzMSwxLjYxMiAtNS4wNjMsMi45OSAtNy45MDUsNC4wMzkgMC4xNjIsMC44NDMgMC4xNjksMS43NzIgLTAuMDMyLDIuNzkzIDAuMDAyLC0xMGUtNCAwLjAwNCwtMTBlLTQgMC4wMDYsLTEwZS00IDAuNDk2LC0wLjA3OCAxLjA5OCwtMC4xMzQgMS44MDgsLTAuMTM0IDAuNTUyLDAgMS4xNywwLjAzNCAxLjg1NSwwLjExNiAtMC4wMjcsLTAuNTQ5IC0wLjEwNCwtMS4xMDEgLTAuMjE5LC0xLjY1MiAyLjU1MSwtMS4xMDMgNC45MzQsLTIuNDU0IDcuMTMzLC00LjAxNSAtMC43OTUsLTAuNDEzIC0xLjY4NCwtMC44MTIgLTIuNjQ2LC0xLjE0NiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzZmMjcxNztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDYwMiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIDEuOTU2NDQsMzIxLjEzOTgxIGMgMCwwIC00LjQyOCw2LjE5NSAtMTAuMDQ0LDkuMjY2IDAuMjMzLDAuNzE1IDAuNDQyLDEuNDU2IDAuNjE3LDIuMjE3IDAuOTI3LC0wLjQzNiAxLjc3MSwtMC45MzUgMi40NzcsLTEuNTA3IDQuOTY0LC00LjAxOSA2Ljk1LC05Ljk3NiA2Ljk1LC05Ljk3NiBtIC0xOC4xMjcsMTIuNTcyIGMgLTMuMjQ4LDEuMTczIC01LjUzNSwxLjg2NSAtNS41MzUsMS44NjUgMCwwIDIuNDI3LC0wLjA5MSA1LjU0LC0wLjU2OCAwLjAxNCwtMC40MDkgMC4wMTUsLTAuODQ0IC0wLjAwNSwtMS4yOTciCiAgICAgICAgIHN0eWxlPSJmaWxsOiNlNjY3MzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2MDQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtOC4wODc1NiwzMzAuNDA1ODEgYyAtMC40NzgsMC4yNjEgLTAuOTY0LDAuNSAtMS40NTYsMC43MSAtMi4zNjQsMS4wMDkgLTQuNjcsMS44OSAtNi42MjcsMi41OTYgMC4wMiwwLjQ1MyAwLjAxOSwwLjg4OCAwLjAwNSwxLjI5NyAyLjc2MywtMC40MjMgNi4wNjYsLTEuMTUgOC42OTUsLTIuMzg2IC0wLjE3NSwtMC43NjEgLTAuMzg0LC0xLjUwMiAtMC42MTcsLTIuMjE3IgogICAgICAgICBzdHlsZT0iZmlsbDojOTQ0MDFkO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjA2IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTU3LjY4NjU2LDMwMy43ODM4MSBjIDAsMCAxNC40NzQsMTcuMDY0IDQzLjgyNSwxMi45NCAyOS4zNTEsLTQuMTI0IDQwLjI2NywtNDIuNDUgNDAuMjY3LC00Mi40NSBsIC0xMi42MTQsLTE1Ljc2NyBoIC03MS40NzggdiA0NS4yNzciCiAgICAgICAgIHN0eWxlPSJmaWxsOiNlZjVkMjI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2MDgiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtNTMuMDY0NTYsMzA3Ljg4OTgxIGMgMy4xMTgsMC44NTQgOC4wNzQsMS41MzYgMTUuNzE1LDEuMDExIDE4LjUzMiwtMS4yNzMgNDIuNTkxLC0zMC45OSA0Mi41OTEsLTMwLjk5IDAsMCAtMTAuNjY4LDMzLjg5MyAtNDQuNjE5LDM2Ljk0MiAtNi4wODUsLTEuOTUxIC0xMC42NDIsLTQuNjkzIC0xMy42ODcsLTYuOTYzIgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjEwIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gNS4wMjg0NCwyNjMuMjk4ODEgaCAtNC4xODQgYyAtMS4xNSwzLjIxNSAtNi45MjMsMTguMzc2IC0xNi4xNjEsMjYuMzE4IC03LjYxMyw2LjU0NCAtMTguNjU0LDE0LjE2NiAtMzIuNDEsMTQuODc5IDAuNzA0LDAuMDM2IDEuNDAxLDAuMDU0IDIuMDkyLDAuMDU0IDkuOTE5LDAgMTguNTAxLC0zLjY1NyAyNS40OSwtOC4xNDQgMC4wMjEsMC4xMjkgMC4wMzQsMC4yNTggMC4wNjEsMC4zODggMC4yOTMsMS40MDMgMC44NzQsMi42NyAxLjY2NSwzLjc1OCA1LjUzNCwtMy45ODMgMTAuNzEzLC04Ljc2NCAxNC44MDgsLTEyLjkwNiAtMC45OTksLTAuOTU0IC0yLjE5MSwtMS42OTIgLTMuNDk3LC0yLjE1OSA2Ljg4MywtOC4yMTUgMTEuMTYzLC0xOS40NzEgMTIuMTM2LC0yMi4xODggbSAtNi4zMzgsMjcuNzA2IGMgLTIuODM3LDQuMzM0IC02LjcwOSw5LjEwNyAtMTEuODE5LDEzLjI1IDAuMTQ5LDAuMDQyIDAuMywwLjA4IDAuNDUxLDAuMTE2IGwgMC4xNjcsMC4wNDEgYyAwLjI1OSwwLjA1NiAwLjUyMSwwLjA5OSAwLjc4NiwwLjEzNCBsIDAuMjI3LDAuMDMzIGMgMC4yNDksMC4wMjcgMC41MDEsMC4wNCAwLjc1NCwwLjA0OCAwLjA5MSwwLjAwMyAwLjE4MSwwLjAxMiAwLjI3MywwLjAxMiAwLjAwOCwwIDAuMDE1LDAgMC4wMjMsMCAwLjI0NSwwIDAuNDkyLC0wLjAxNiAwLjc0LC0wLjAzNCAwLjA5LC0wLjAwNiAwLjE4LC0wLjAwNiAwLjI3MSwtMC4wMTUgMC4zNDQsLTAuMDM1IDAuNjg5LC0wLjA4NiAxLjAzNSwtMC4xNTkgNS4zMzUsLTEuMTE3IDguNzU0LC02LjM0NyA3LjYzNywtMTEuNjgyIC0wLjExNywtMC41NiAtMC4yODksLTEuMDkyIC0wLjQ5MiwtMS42MDYgbCAtMC4wMzQsLTAuMDkxIGMgLTAuMDA2LC0wLjAxNiAtMC4wMTIsLTAuMDMxIC0wLjAxOSwtMC4wNDciCiAgICAgICAgIHN0eWxlPSJmaWxsOiNjNzRkMWY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2MTIiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtMy42MTA1NiwyODcuNjQ1ODEgYyAtNC4wOTUsNC4xNDIgLTkuMjc0LDguOTIzIC0xNC44MDgsMTIuOTA2IDAuNjE2LDAuODQ3IDEuMzYxLDEuNTg1IDIuMTk4LDIuMTkzIHYgMCBjIDAuMjY5LDAuMTk2IDAuNTQ4LDAuMzc4IDAuODM1LDAuNTQ1IGwgMC4wMTcsMC4wMSBjIDAuMjc4LDAuMTYxIDAuNTY0LDAuMzA5IDAuODU3LDAuNDQzIGwgMC4wNTMsMC4wMjUgYyAwLjI3OCwwLjEyNSAwLjU2MiwwLjIzNiAwLjg1MiwwLjMzNSBsIDAuMTA1LDAuMDM4IGMgMC4xMjQsMC4wNCAwLjI0OCwwLjA3OCAwLjM3MywwLjExNCA1LjExLC00LjE0MyA4Ljk4MiwtOC45MTYgMTEuODE5LC0xMy4yNSAtMC4yMDcsLTAuNTAzIC0wLjQ1NiwtMC45OCAtMC43MzcsLTEuNDMzIHYgLTAuMDAxIGMgLTAuNDQyLC0wLjcxMSAtMC45NjksLTEuMzU3IC0xLjU2NCwtMS45MjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZjI3MTc7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2MTQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtMjQuMjY4NTYsMjk2Ljc5MzgxIGMgLTEuMTE3LC01LjMzNSAyLjMwMywtMTAuNTY1IDcuNjM3LC0xMS42ODIgNS4zMzUsLTEuMTE3IDEwLjU2NiwyLjMwMiAxMS42ODMsNy42MzcgMS4xMTcsNS4zMzUgLTIuMzAyLDEwLjU2NSAtNy42MzcsMTEuNjgyIC01LjMzNSwxLjExNyAtMTAuNTY1LC0yLjMwMiAtMTEuNjgzLC03LjYzNyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2Q0NTQxZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDYxNiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC0yMC40MDU1NiwzMDIuNzQ0ODEgYyAyLjE3NiwxLjU4MSA0Ljk4LDIuMjgxIDcuODIsMS42ODYgNS4zMzUsLTEuMTE3IDguNzU0LC02LjM0NyA3LjYzNywtMTEuNjgyIC0wLjI0MywtMS4xNjIgLTAuNjkxLC0yLjIyNSAtMS4yODIsLTMuMTc4IC00LjM1LDEuNDggLTEwLjkzNCw1LjAwNyAtMTQuMTc1LDEzLjE3NCIKICAgICAgICAgc3R5bGU9ImZpbGw6Izg1MmUxYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDYxOCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC0xOS45ODU1NiwyOTUuODk2ODEgYyAtMC42MjIsLTIuOTY5IDEuMjgyLC01Ljg4MSA0LjI1MSwtNi41MDMgMi45NywtMC42MjIgNS44ODEsMS4yODIgNi41MDMsNC4yNTEgMC42MjIsMi45NyAtMS4yODEsNS44ODIgLTQuMjUxLDYuNTA0IC0yLjk3LDAuNjIxIC01Ljg4MSwtMS4yODIgLTYuNTAzLC00LjI1MiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDYyMCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC05NS42MDg1NiwyNTguNTA2ODEgLTQuODUyLDQuOTQgYyAwLDAgMTUuNDY1LDMxLjQ0OSAzNi43NSwzOC43MjQgMjEuMjg2LDcuMjc2IDM4LjAyNCwtMy42NCA0OC4zOTQsLTEyLjU1NCAxMC4zNywtOC45MTUgMTYuMzczLC0yNi45MjYgMTYuMzczLC0yNi45MjYgbCAtMy44MiwtNC4xODQgaCAtOTIuODQ1IgogICAgICAgICBzdHlsZT0iZmlsbDojZjQ2YTJmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjIyIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTcxLjEyMzU2LDI4OS41NzA4MSBjIDAsMCAxNy40MzUsMTMuNzM3IDIwLjg1MywxMy43MzcgMy40MTksMCAyMC4wNzgsLTEyLjA1NCAyMC4wNzgsLTEyLjA1NCBsIC0yLjc2MiwtMy4zMTcgYyAwLDAgLTE0LjU0OCwxMS44MDcgLTE3LjMxNiwxMS44MDcgLTIuNzY4LDAgLTE2LjQ1OSwtMTEuODA3IC0xNi40NTksLTExLjgwNyBsIC00LjM5NCwxLjYzNCIKICAgICAgICAgc3R5bGU9ImZpbGw6Izg1MmUxYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDYyNCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC02Mi40ODQ1NiwyODQuMjkyODEgYyAwLDAgMTAuMDE2LDguNDkxIDEyLjg4NSw4LjQ5MSAyLjg2OSwwIDEyLjQwMSwtNy4zOTkgMTIuNDAxLC03LjM5OSBsIC0yLjU5NywtNS4wNjcgYyAwLDAgLTcuNTc5LDguMjIgLTkuODA0LDguMjIgLTIuMjI1LDAgLTEwLjc3NywtNy42NDEgLTEwLjc3NywtNy42NDEgbCAtMi4xMDgsMy4zOTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiM4NTJlMWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2MjYiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtMTAwLjQ2MDU2LDI2My40NDY4MSAxMy40OSw0LjUyIGMgMCwwIC00LjMwMiwxNC4wMDkgOC4yNTEsMjAuNzQgMTIuNTUzLDYuNzMxIDE4LjEwMiwtMC4xODIgMTkuODMsLTQuMTg0IDEuNzI5LC00LjAwMyAxLjcyOSwtMTQuNTU1IDEuNzI5LC0xNC41NTUgaCAxNC45NTQgYyAwLDAgLTAuMTU3LDE1LjcwNyA2LjI3MSwyMC4xOTQgNi40MjgsNC40ODggMTYuMDk1LDUuMDk0IDE5Ljg3MywtMy4yNzQgMy43NzgsLTguMzY5IDAsLTE1LjY0NiAwLC0xNS42NDYgbCAxNy4xMTksLTguNTUxIC0zLjgyLC00LjE4NCBoIC05Mi44NDUgbCAtNC44NTIsNC45NCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDYyOCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC02MC43ODY1NiwyNzcuOTEwODEgYyAwLC0zLjI4MiAtMi42NiwtNS45NDMgLTUuOTQzLC01Ljk0MyAtMy4yODIsMCAtNS45NDMsMi42NjEgLTUuOTQzLDUuOTQzIDAsMy4yODIgMi42NjEsNS45NDMgNS45NDMsNS45NDMgMy4yODMsMCA1Ljk0MywtMi42NjEgNS45NDMsLTUuOTQzIgogICAgICAgICBzdHlsZT0iZmlsbDojZmRkZDA0O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjMwIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTYyLjQ4NDU2LDI3Ny45MTA4MSBjIDAsLTIuMzQ0IC0xLjkwMSwtNC4yNDUgLTQuMjQ1LC00LjI0NSAtMi4zNDQsMCAtNC4yNDQsMS45MDEgLTQuMjQ0LDQuMjQ1IDAsMi4zNDQgMS45LDQuMjQ0IDQuMjQ0LDQuMjQ0IDIuMzQ0LDAgNC4yNDUsLTEuOSA0LjI0NSwtNC4yNDQiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMzOTE5MTM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2MzIiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtNjcuNjIxNTYsMjgwLjU1MzgxIGMgMCwtMC45NjcgLTAuNzg0LC0xLjc1MSAtMS43NTEsLTEuNzUxIC0wLjk2NywwIC0xLjc1MSwwLjc4NCAtMS43NTEsMS43NTEgMCwwLjk2NyAwLjc4NCwxLjc1MSAxLjc1MSwxLjc1MSAwLjk2NywwIDEuNzUxLC0wLjc4NCAxLjc1MSwtMS43NTEiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2MzQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtMjcuMDExNTYsMjc3LjkxMDgxIGMgMCwtMy4yODIgLTIuNjYxLC01Ljk0MyAtNS45NDMsLTUuOTQzIC0zLjI4MiwwIC01Ljk0MywyLjY2MSAtNS45NDMsNS45NDMgMCwzLjI4MiAyLjY2MSw1Ljk0MyA1Ljk0Myw1Ljk0MyAzLjI4MiwwIDUuOTQzLC0yLjY2MSA1Ljk0MywtNS45NDMiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZGRkMDQ7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2MzYiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtMjguNzA5NTYsMjc3LjkxMDgxIGMgMCwtMi4zNDQgLTEuOTAxLC00LjI0NSAtNC4yNDUsLTQuMjQ1IC0yLjM0NCwwIC00LjI0NCwxLjkwMSAtNC4yNDQsNC4yNDUgMCwyLjM0NCAxLjksNC4yNDQgNC4yNDQsNC4yNDQgMi4zNDQsMCA0LjI0NSwtMS45IDQuMjQ1LC00LjI0NCIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM5MTkxMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDYzOCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC0zMy44NDY1NiwyODAuNTUzODEgYyAwLC0wLjk2NyAtMC43ODQsLTEuNzUxIC0xLjc1MiwtMS43NTEgLTAuOTY3LDAgLTEuNzUxLDAuNzg0IC0xLjc1MSwxLjc1MSAwLDAuOTY3IDAuNzg0LDEuNzUxIDEuNzUxLDEuNzUxIDAuOTY4LDAgMS43NTIsLTAuNzg0IDEuNzUyLC0xLjc1MSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDY0MCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIDEzLjc5MTQ0LDI1OC41MDY4MSBoIC0xMi4zNzEgbCAzLjgyMSw0LjE4NCBjIDAsMCAtMC4wNzIsMC4yMTQgLTAuMjEzLDAuNjA4IGggOC43NjMgbCAxMS41MzYsMTQuMTk3IGMgMC43MjMsLTEuOTg5IDEuMDczLC0zLjIwNiAxLjA3OCwtMy4yMjIgdiAwIDAgbCAtMTIuNjE0LC0xNS43NjciCiAgICAgICAgIHN0eWxlPSJmaWxsOiNjNzRkMWY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2NDIiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAxLjQyMDQ0LDI1OC41MDY4MSBoIC00LjE4NCBsIDMuODIsNC4xODQgYyAwLDAgLTAuMDcxLDAuMjE0IC0wLjIxMiwwLjYwOCBoIDQuMTg0IGMgMC4xNDEsLTAuMzk0IDAuMjEzLC0wLjYwOCAwLjIxMywtMC42MDggbCAtMy44MjEsLTQuMTg0IgogICAgICAgICBzdHlsZT0iZmlsbDojYTMzZjFlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjQ0IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gMS4wNTY0NCwyNjIuNjkwODEgLTEuMjE3LDAuNjA4IGggMS4wMDUgYyAwLjE0MSwtMC4zOTQgMC4yMTIsLTAuNjA4IDAuMjEyLC0wLjYwOCB2IDAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNkZTU4MWQ7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2NDYiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtMi43NjM1NiwyNTguNTA2ODEgaCAtOTIuODQ1IGwgLTQuNzA2LDQuNzkyIGggMTAwLjE1NCBsIDEuMjE3LC0wLjYwOCAtMy44MiwtNC4xODQiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNkNWQwY2Q7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2NDgiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtNTguOTc0NTYsMjcxLjQ4MjgxIGMgMCwwIC01LjY4LC0xLjQ2MiAtNy43NTUsLTYuODU1IC0yLjA3NSwtNS4zOTQgMC43NDUsLTkuMzA1IDUuNDc1LC0xMC4zOTcgNC43MzEsLTEuMDkxIDExLjU1MywyLjQ1NiAxMS41NTMsMi40NTYgMCwwIDUuNjAyLC01LjQ1OCAxMi4zNTIsLTQuMDkzIDYuNzUsMS4zNjQgOC45MzQsOS4wOTYgNS42NTksMTMuNzM2IC0zLjI3NSw0LjYzOSAtMTEuMjgsNS4xNTMgLTExLjI4LDUuMTUzIDAsMCAtMTIuMTc5LC0zLjQ4OCAtMTYuMDA0LDAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2NTAiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtNDkuNzAxNTYsMjU2LjY4NjgxIGMgMCwwIDAuMjgyLC0wLjI3IDAuNzczLC0wLjY2NCB2IDguNjA1IGMgMCwwLjM3IC0wLjMwMSwwLjY3MSAtMC42NzEsMC42NzEgLTAuMzY5LDAgLTAuNjcxLC0wLjMwMSAtMC42NzEsLTAuNjcxIHYgLTguMjE3IGMgMC4zNTYsMC4xNjcgMC41NjksMC4yNzYgMC41NjksMC4yNzYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNhNmI5YjU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2NTIiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtNDIuMzA1NTYsMjY1LjU2MzgxIGMgMCwwIDQuMzk0LDUuMTc2IDEuNTU0LDcuNDAzIC0yLjg0MSwyLjIyOCAtNS41MzUsLTEuNjExIC05LjEwMSwtMS4yNjcgLTMuNTY2LDAuMzQ0IC03LjMwMSwzLjA5NSAtOC44MjUsMC41NzIgLTEuNTIzLC0yLjUyMiAyLjMwMywtNS41NjIgMi4zMDMsLTUuNTYyIDAsMCAwLjkwOCwyLjY1OSAzLjE5NiwxLjM3OSAyLjI4OSwtMS4yOCAwLjM2MSwtMy45OSAwLjM2MSwtMy45OSAwLDAgMS42ODUsLTEuMTA0IDMuMDU5LC0xLjMzMSAxLjM3NCwtMC4yMjggMy41MDksMS41NDkgMy41MDksMS41NDkgMCwwIC0xLjEwOSwzLjA3NCAxLjI0Niw0LjI2MiAyLjM1NiwxLjE4OSAyLjY5OCwtMy4wMTUgMi42OTgsLTMuMDE1IgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjU0IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTg1LjkwNDU2LDI4MS41Mjc4MSBjIDAsMCAtMy4zNjcsLTQuMzc0IC0zLjA5NCwtMTAuODMyIDAuMjczLC02LjQ1OSA5LjU2LC0xMi4xODkgOS41NiwtMTIuMTg5IGwgLTMuNjU2LDUuNjg4IGMgLTAuOTEzLDEuNDIgLTAuNjAzLDMuMyAwLjcxNyw0LjM1MyBsIDUuNjU5LDQuNTEzIGMgMCwwIC03LjY0MSwtMi40NTYgLTguOTE0LC0wLjYzNyAtMS4yNzQsMS44MiAtMC4yNzIsOS4xMDQgLTAuMjcyLDkuMTA0IgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjU2IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTE1LjQ1NzU2LDI4NS4zNzk4MSBjIDAsMCAtMC41MjUsLTUuNjc5IC0xLjkyLC04LjQ5OCAtMS4zOTYsLTIuODIgLTYuMjE3LC0xLjU0NyAtNi4yMTcsLTEuNTQ3IDAsMCA1LjM2NywtMi43MjkgNS4zNjcsLTQuNDU3IDAsLTEuNzI5IC0zLjYzOSwtNy4xODYgLTMuNjM5LC03LjE4NiAwLDAgMTEuODE3LDcuNDQ2IDYuNDA5LDIxLjY4OCIKICAgICAgICAgc3R5bGU9ImZpbGw6Izg1MmUxYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDY1OCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC04Ni4wMjY1NiwyNTguNTA2ODEgYyAwLDAgLTIuMzY1LDEuNzU4IC0zLjg4Miw0LjI0NSAtMS41MTYsMi40ODYgLTIuMDAxLDQuMDAyIC0yLjAwMSw0LjAwMiAwLDAgLTAuMTgyLC0zLjI3NSAwLjcyOCwtNS40NTggMC45MSwtMi4xODMgMS42MzcsLTIuNzg5IDEuNjM3LC0yLjc4OSBoIDMuNTE4IgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjYwIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTEzLjc0MDU2LDI1OC41MDY4MSBjIDAsMCAyLjIwOSwxLjgxIDQuMTI0LDUuMTg1IDEuOTE1LDMuMzc0IDIuNjA4LDcuNzkxIDIuNjA4LDcuNzkxIDAsMCAwLjkwOSwtNi4zNjYgMC4zMDMsLTkuMDk1IC0wLjYwNywtMi43MjkgLTEuNTc3LC0zLjg4MSAtMS41NzcsLTMuODgxIGggLTUuNDU4IgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjYyIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gLTQuNzg3NTYsMzE0LjE3MzgxIGMgLTIuODA5LDEuMTk4IC01LjgyMiwyLjA5MyAtOS4wNzQsMi41NSAtMi43MDcsMC4zOCAtNS4yODUsMC41NzggLTcuNzM5LDAuNjI4IDQuODM1LC0xLjE1IDE0Ljg0MSwtNC4yNjQgMjIuNzkzLC0xMS41ODEgMTAuOTAxLC0xMC4wMjkgMTUuMTQ2LC0xOS4yMiAxNS4xNDYsLTE5LjIyIDAsMCAtNi41NTcsMTguMDk4IC0yMS4xMjYsMjcuNjIzIgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjY0IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gMS45NTY0NCwzMDEuOTUwODEgYyAwLDAgNy4xMDUsLTUuNTg2IDExLjM1LC0xNi41NzEgNC4yNDUsLTEwLjk4NSA0LjEyNCwtMTMuODk3IDQuMTI0LC0xMy44OTcgbCAtMTguMDcyLDIyLjY4MiAxMi4wMDgsLTExLjAzNyBjIDAsMCAtMC40ODYsNi40NDMgLTkuNDEsMTguODIzIgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjY2IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGlkPSJwYXRoNjY4IgogICAgICAgICBzdHlsZT0iZmlsbDojZjY4NTRmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEzMzMzMyIKICAgICAgICAgZD0ibSAzOS40MTIxMDksMjk2LjExOTE0IC0yMS4wMjM0MzcsMjUuODcxMDkgdiA1OS45MjU3OSBhIDkuMjk3MDUyMiwxNy4yMzM1NjEgMCAwIDEgNS40MTk5MjIsLTMuMjMwNDcgOS4yOTcwNTIyLDE3LjIzMzU2MSAwIDAgMSA1LjE5NzI2NSwyLjk0MzM2IGwgMTAuNDA2MjUsLTE4Ljg4NDc3IHoiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwMDAwMDIsMCwwLC0wLjc1MDAwMDAyLDAsNTAwLjAwMDAyKSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC0zLjMwOTU2LDI0MC40MzQ4MSBoIDcuMDM0IHYgNS45NyBoIDMuMTg4IGwgLTYuNzA1LDcuNjI2IC02LjcwNSwtNy42MjYgaCAzLjE4OCB2IC01Ljk3IgogICAgICAgICBzdHlsZT0iZmlsbDojODUyZTFiO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjcwIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gMC4yMDc0NCwyMzguNjE5ODEgaCAtNi43MDUgdiAtMi4zMDkgaCAxMy40MSB2IDIuMzA5IGggLTYuNzA1IHYgMCIKICAgICAgICAgc3R5bGU9ImZpbGw6Izg1MmUxYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xIgogICAgICAgICBpZD0icGF0aDY3MiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48cGF0aAogICAgICAgICBkPSJtIC00LjI4NjU2LDMxMC4wMTk4MSBjIC0zLjMyMSwxLjIxNCAtNy45MzMsMi40NTkgLTEzLjA5MSwyLjU4IC0wLjY2NSwwLjAxNiAtMS4zMzksMC4wMjMgLTIuMDE1LDAuMDIzIC0yLjczNiwwIC01LjUzNSwtMC4xMiAtOC4xNDcsLTAuMjkyIC0xLjM2NSwwLjQ3NSAtMi43ODIsMC44OTkgLTQuMjUsMS4yNjEgMy4yNTQsMC43NDkgNy4yNzUsMS4zNzQgMTEuNjI3LDEuMzc0IDEuMTUxLDAgMi4zMjMsLTAuMDQ0IDMuNTExLC0wLjE0IDEuNjYzLC0wLjEzNSAzLjE5OCwtMC4zNjQgNC42MSwtMC42NTggMi40ODksLTEuMDc2IDUuMTQ0LC0yLjQzNyA3Ljc1NSwtNC4xNDgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmMDZjMzQ7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMSIKICAgICAgICAgaWQ9InBhdGg2NzQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtMzkuNzk1NTYsMzExLjA4MzgxIGMgMCwwIDMuMTUxLDEuMzkyIDguMDA2LDIuNTA4IDEuNDY4LC0wLjM2MiAyLjg4NSwtMC43ODYgNC4yNSwtMS4yNjEgLTYuNzUsLTAuNDQ3IC0xMi4yNTYsLTEuMjQ3IC0xMi4yNTYsLTEuMjQ3IgogICAgICAgICBzdHlsZT0iZmlsbDojOTQ0MDFkO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjc2IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGQ9Im0gMS4wNTY0NCwzMDcuNjI3ODEgYyAwLDAgLTIuMDI4LDEuMTggLTUuMzQzLDIuMzkyIC0yLjYxMSwxLjcxMSAtNS4yNjYsMy4wNzIgLTcuNzU1LDQuMTQ4IDkuMTE2LC0xLjg5OSAxMy4wOTgsLTYuNTQgMTMuMDk4LC02LjU0IgogICAgICAgICBzdHlsZT0iZmlsbDojOTQ0MDFkO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNjc4IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjxwYXRoCiAgICAgICAgIGlkPSJwYXRoMTEzMSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2ZpbGw6I2U2NjAwMTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2Utd2lkdGg6MC42OTEzNjY5NyIKICAgICAgICAgZD0ibSAtNDYuNDAzMzIyLDM2OC43MDc1NCBhIDkzLjc1MDAwMiw5My43NTAwMDIgMCAwIDEgLTkzLjc0OTk5OCwtOTMuNzUwMDEgOTMuNzUwMDAyLDkzLjc1MDAwMiAwIDAgMSA5My43NDk5OTgsLTkzLjc1IDkzLjc1MDAwMiw5My43NTAwMDIgMCAwIDEgOTMuNzUwMDAzLDkzLjc1IDkzLjc1MDAwMiw5My43NTAwMDIgMCAwIDEgLTkzLjc1MDAwMyw5My43NTAwMSB6IG0gMCwtMTguNzUgYSA3NSw3NSAwIDAgMCA3NS4wMDAwMDIsLTc1LjAwMDAxIDc1LDc1IDAgMCAwIC03NS4wMDAwMDIsLTc1IDc1LDc1IDAgMCAwIC03NC45OTk5OTgsNzUgNzUsNzUgMCAwIDAgNzQuOTk5OTk4LDc1LjAwMDAxIHoiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PHBhdGgKICAgICAgICAgZD0ibSAtMzEuMzUzNTYsMzQwLjMzODgxIGMgLTEuNjg2LDIuNDU0IC0wLjk0NCw1Ljg0NSAtMC45NDYsNS44NDUgMC43NDUsMi45MjIgLTEuMDIsNS44OTUgLTMuOTQyLDYuNjQgLTIuOTIzLDAuNzQgLTUuODk2LC0xLjAyMSAtNi42NCwtMy45NDMgLTAuMiwtMC43ODEgLTEuNzU3LC03LjU3OCAxLjk3MiwtMTMuODM0IDIuOTA3LDAuNTQ1IDcuMTYzLDEuNzc5IDEwLjIwNCw0LjUzNCAtMC4yNCwwLjIzOSAtMC40NjMsMC40ODggLTAuNjQ4LDAuNzU4IgogICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjEiCiAgICAgICAgIGlkPSJwYXRoNTg2IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48L2c+PC9zdmc+';\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 PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\n\r\nclass ErrorBoundary 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 error: null,\r\n info: null\r\n };\r\n }\r\n\r\n componentDidCatch(error, info) {\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 //\r\n // Render\r\n\r\n render() {\r\n const {\r\n children,\r\n errorComponent: ErrorComponent,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n error,\r\n info\r\n } = this.state;\r\n\r\n if (error) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return children;\r\n }\r\n}\r\n\r\nErrorBoundary.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n errorComponent: PropTypes.elementType.isRequired\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 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 = 'There was an error loading this content',\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.Prowlarr.version}
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ErrorBoundaryError;\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\":\"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","enum ScrollDirection {\r\n Horizontal = 'horizontal',\r\n Vertical = 'vertical',\r\n None = 'none',\r\n Both = 'both',\r\n}\r\n\r\nexport default ScrollDirection;\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/ScrollDirection';\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 = 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 !== 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 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\"};","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 PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Link from 'Components/Link/Link';\r\n\r\nclass InlineMarkdown extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n data,\r\n blockClassName\r\n } = this.props;\r\n\r\n // For now only replace links or code blocks (not both)\r\n const markdownBlocks = [];\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({match[1]});\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({match[0].substring(1, match[0].length - 1)});\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\n\r\nInlineMarkdown.propTypes = {\r\n className: PropTypes.string,\r\n data: PropTypes.string,\r\n blockClassName: PropTypes.string\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{3,5}\\b/g,\r\n (match) =>\r\n `[${match}](https://github.com/Prowlarr/Prowlarr/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.Prowlarr.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","function titleCase(input) {\r\n if (!input) {\r\n return '';\r\n }\r\n\r\n return input.replace(/\\b\\w+/g, (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 { fetchIndexers } from 'Store/Actions/indexerActions';\r\nimport { fetchIndexerStatus } from 'Store/Actions/indexerStatusActions';\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 (isReconnecting, isDisconnected) => {\r\n return {\r\n isReconnecting,\r\n isDisconnected\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 dispatchFetchIndexers: fetchIndexers,\r\n dispatchFetchIndexerStatus: fetchIndexerStatus,\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.Prowlarr.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.Prowlarr.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.Prowlarr.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 handleApplications = ({ action, resource }) => {\r\n const section = 'settings.applications';\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 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 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 handleIndexerstatus = () => {\r\n this.props.dispatchFetchIndexerStatus();\r\n };\r\n\r\n handleIndexer = ({ action, resource }) => {\r\n const section = '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 handleIndexerproxy = ({ action, resource }) => {\r\n const section = 'settings.indexerProxies';\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 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 handleVersion = (body) => {\r\n const version = body.version;\r\n\r\n this.props.dispatchSetVersion({ version });\r\n };\r\n\r\n handleSystemTask = () => {\r\n this.props.dispatchFetchCommands();\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 dispatchFetchIndexers,\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 dispatchFetchIndexers();\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 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 dispatchFetchIndexers: PropTypes.func.isRequired,\r\n dispatchFetchIndexerStatus: 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","import _ from 'lodash';\r\n\r\nfunction getValidationFailures(saveError) {\r\n if (!saveError || saveError.status !== 400) {\r\n return [];\r\n }\r\n\r\n return _.cloneDeep(saveError.responseJSON);\r\n}\r\n\r\nfunction mapFailure(failure) {\r\n return {\r\n message: failure.errorMessage,\r\n link: failure.infoLink,\r\n detailedMessage: failure.detailedDescription\r\n };\r\n}\r\n\r\nfunction selectSettings(item, pendingChanges, saveError) {\r\n const validationFailures = 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 = _.reduce(allSettings, (result, value, key) => {\r\n if (key === 'fields') {\r\n return result;\r\n }\r\n\r\n // Return a flattened value\r\n if (key === 'implementationName') {\r\n result.implementationName = item[key];\r\n\r\n return result;\r\n }\r\n\r\n if (key === 'definitionName') {\r\n result.definitionName = item[key];\r\n\r\n return result;\r\n }\r\n\r\n const setting = {\r\n value: item[key],\r\n errors: _.map(_.remove(validationFailures, (failure) => {\r\n return failure.propertyName.toLowerCase() === key.toLowerCase() && !failure.isWarning;\r\n }), mapFailure),\r\n\r\n warnings: _.map(_.remove(validationFailures, (failure) => {\r\n return failure.propertyName.toLowerCase() === key.toLowerCase() && failure.isWarning;\r\n }), mapFailure)\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 result[key] = setting;\r\n return result;\r\n }, {});\r\n\r\n const fields = _.reduce(item.fields, (result, f) => {\r\n const field = Object.assign({ pending: false }, f);\r\n const hasPendingFieldChange = pendingChanges.fields && pendingChanges.fields.hasOwnProperty(field.name);\r\n\r\n if (hasPendingFieldChange) {\r\n field.previousValue = field.value;\r\n field.value = pendingChanges.fields[field.name];\r\n field.pending = true;\r\n }\r\n\r\n field.errors = _.map(_.remove(validationFailures, (failure) => {\r\n return failure.propertyName.toLowerCase() === field.name.toLowerCase() && !failure.isWarning;\r\n }), mapFailure);\r\n\r\n field.warnings = _.map(_.remove(validationFailures, (failure) => {\r\n return failure.propertyName.toLowerCase() === field.name.toLowerCase() && failure.isWarning;\r\n }), mapFailure);\r\n\r\n result.push(field);\r\n return result;\r\n }, []);\r\n\r\n if (fields.length) {\r\n settings.fields = fields;\r\n }\r\n\r\n const validationErrors = _.filter(validationFailures, (failure) => {\r\n return !failure.isWarning;\r\n });\r\n\r\n const validationWarnings = _.filter(validationFailures, (failure) => {\r\n return failure.isWarning;\r\n });\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 selectSettings from 'Store/Selectors/selectSettings';\r\n\r\nfunction createSettingsSectionSelector(section) {\r\n return createSelector(\r\n (state) => state.settings[section],\r\n (sectionSettings) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n item,\r\n pendingChanges,\r\n isSaving,\r\n saveError\r\n } = sectionSettings;\r\n\r\n const settings = selectSettings(item, pendingChanges, saveError);\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n isSaving,\r\n saveError,\r\n ...settings\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createSettingsSectionSelector;\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 PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { kinds } from 'Helpers/Props';\r\nimport styles from './Alert.css';\r\n\r\nfunction Alert(props) {\r\n const { className, kind, children, ...otherProps } = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nAlert.propTypes = {\r\n className: PropTypes.string,\r\n kind: PropTypes.oneOf(kinds.all),\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nAlert.defaultProps = {\r\n className: styles.alert,\r\n kind: kinds.INFO\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 { 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 { 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 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 ...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\"};","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 SelectInput from './SelectInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.appProfiles', sortByProp('name')),\r\n (state, { includeNoChange }) => includeNoChange,\r\n (state, { includeMixed }) => includeMixed,\r\n (appProfiles, includeNoChange, includeMixed) => {\r\n const values = _.map(appProfiles.items, (appProfile) => {\r\n return {\r\n key: appProfile.id,\r\n value: appProfile.name\r\n };\r\n });\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 values\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass AppProfileSelectInputConnector 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((v) => v.key === value) ) {\r\n const firstValue = _.find(values, (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: 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\nAppProfileSelectInputConnector.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\nAppProfileSelectInputConnector.defaultProps = {\r\n includeNoChange: false\r\n};\r\n\r\nexport default connect(createMapStateToProps)(AppProfileSelectInputConnector);\r\n","import PropTypes from 'prop-types';\r\nimport ReactDOM from 'react-dom';\r\n\r\nfunction Portal(props) {\r\n const { children, target } = props;\r\n return ReactDOM.createPortal(children, target);\r\n}\r\n\r\nPortal.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n target: PropTypes.object.isRequired\r\n};\r\n\r\nPortal.defaultProps = {\r\n target: document.getElementById('portal-root')\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","// 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, { 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 {\"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 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","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 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 FormInputButton from './FormInputButton';\r\nimport TextInput from './TextInput';\r\nimport styles from './CaptchaInput.css';\r\n\r\nfunction CardigannCaptchaInput(props) {\r\n const {\r\n className,\r\n name,\r\n value,\r\n hasError,\r\n hasWarning,\r\n type,\r\n refreshing,\r\n contentType,\r\n imageData,\r\n onChange,\r\n onRefreshPress\r\n } = props;\r\n\r\n const img = `data:${contentType};base64,${imageData}`;\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 type === 'image' &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nCardigannCaptchaInput.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 type: PropTypes.string,\r\n refreshing: PropTypes.bool.isRequired,\r\n contentType: PropTypes.string.isRequired,\r\n imageData: 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\nCardigannCaptchaInput.defaultProps = {\r\n className: styles.input,\r\n value: ''\r\n};\r\n\r\nexport default CardigannCaptchaInput;\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 { getCaptchaCookie, refreshCaptcha, resetCaptcha } from 'Store/Actions/captchaActions';\r\nimport CardigannCaptchaInput from './CardigannCaptchaInput';\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 CardigannCaptchaInputConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.onRefreshPress();\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 name,\r\n onChange\r\n } = this.props;\r\n\r\n onChange({ name, value: '' });\r\n this.props.resetCaptcha();\r\n this.props.refreshCaptcha({ provider, providerData });\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\nCardigannCaptchaInputConnector.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)(CardigannCaptchaInputConnector);\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 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 tagComponent: TagComponent,\r\n onTagDelete\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 tagComponent: PropTypes.elementType.isRequired,\r\n onTagDelete: 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\"};","// 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\",\"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 PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Label from 'Components/Label';\r\nimport Link from 'Components/Link/Link';\r\nimport { 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 //\r\n // Render\r\n\r\n render() {\r\n const {\r\n tag,\r\n kind\r\n } = this.props;\r\n return (\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 onDelete: 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-link-RInnp\"};","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"TagInput-input-WFs2s AutoSuggestInput-input-Irz_T Input-input-KWeec\",\"isFocused\":\"TagInput-isFocused-r5YrC\",\"internalInput\":\"TagInput-internalInput-bbdd_\"};","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 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 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 ...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 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};\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 tagComponent: TagInputTag\r\n};\r\n\r\nexport default TagInput;\r\n","// 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 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, { 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 isMultiSelect,\r\n isMobile,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n
\r\n
{typeof value === 'function' ? value() : 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\r\nHintedSelectInputOption.propTypes = {\r\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\r\n hint: PropTypes.node,\r\n depth: PropTypes.number,\r\n isSelected: PropTypes.bool.isRequired,\r\n isDisabled: 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 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\"};","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\"};","// 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\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 });\r\n } else {\r\n this.setState({ isOpen: false });\r\n\r\n onChange({\r\n name,\r\n value: newValue\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 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 values = items\r\n .filter((downloadClient) => downloadClient.protocol === protocolFilter)\r\n .sort(sortByProp('name'))\r\n .map((downloadClient) => ({\r\n key: downloadClient.id,\r\n value: downloadClient.name,\r\n hint: `(${downloadClient.id})`\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];\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 };\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 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, { indexerFlags }) => indexerFlags,\r\n (state) => state.settings.indexerFlags,\r\n (selectedFlags, indexerFlags) => {\r\n const value = [];\r\n\r\n indexerFlags.items.forEach((item) => {\r\n // eslint-disable-next-line no-bitwise\r\n if ((selectedFlags & item.id) === item.id) {\r\n value.push(item.id);\r\n }\r\n });\r\n\r\n const values = indexerFlags.items.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 value,\r\n values\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass IndexerFlagsSelectInputConnector extends Component {\r\n\r\n onChange = ({ name, value }) => {\r\n let indexerFlags = 0;\r\n\r\n value.forEach((flagId) => {\r\n indexerFlags += flagId;\r\n });\r\n\r\n this.props.onChange({ name, value: indexerFlags });\r\n };\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\nIndexerFlagsSelectInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n indexerFlags: PropTypes.number.isRequired,\r\n value: PropTypes.arrayOf(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)(IndexerFlagsSelectInputConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport { kinds } from 'Helpers/Props';\r\nimport styles from './InfoInput.css';\r\n\r\nclass InfoInput extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const { value } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nInfoInput.propTypes = {\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 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\nInfoInput.defaultProps = {\r\n value: ''\r\n};\r\n\r\nexport default InfoInput;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"InfoInput-message-CkEuk Alert-alert-_KgnQ\"};","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 './Link';\r\nimport styles from './IconButton.css';\r\n\r\nfunction IconButton(props) {\r\n const {\r\n className,\r\n iconClassName,\r\n name,\r\n kind,\r\n size,\r\n isSpinning,\r\n isDisabled,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nIconButton.propTypes = {\r\n ...Link.propTypes,\r\n className: PropTypes.string.isRequired,\r\n iconClassName: PropTypes.string,\r\n kind: PropTypes.string,\r\n name: PropTypes.object.isRequired,\r\n size: PropTypes.number,\r\n title: PropTypes.string,\r\n isSpinning: PropTypes.bool,\r\n isDisabled: PropTypes.bool\r\n};\r\n\r\nIconButton.defaultProps = {\r\n className: styles.button,\r\n size: 12\r\n};\r\n\r\nexport default IconButton;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"IconButton-button-t4C5V Link-link-RInnp\",\"isDisabled\":\"IconButton-isDisabled-qx70J\"};","// extracted by mini-css-extract-plugin\nexport default {\"itemContainer\":\"KeyValueListInputItem-itemContainer-ZADcc\",\"inputWrapper\":\"KeyValueListInputItem-inputWrapper-zIEtx\",\"buttonWrapper\":\"KeyValueListInputItem-buttonWrapper-URTxg\",\"keyInput\":\"KeyValueListInputItem-keyInput-Fwwg9\",\"valueInput\":\"KeyValueListInputItem-valueInput-jTI0x\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } 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\nclass KeyValueListInputItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onKeyChange = ({ value: keyValue }) => {\r\n const {\r\n index,\r\n value,\r\n onChange\r\n } = this.props;\r\n\r\n onChange(index, { key: keyValue, value });\r\n };\r\n\r\n onValueChange = ({ value }) => {\r\n // TODO: Validate here or validate at a lower level component\r\n\r\n const {\r\n index,\r\n keyValue,\r\n onChange\r\n } = this.props;\r\n\r\n onChange(index, { key: keyValue, value });\r\n };\r\n\r\n onRemovePress = () => {\r\n const {\r\n index,\r\n onRemove\r\n } = this.props;\r\n\r\n onRemove(index);\r\n };\r\n\r\n onFocus = () => {\r\n this.props.onFocus();\r\n };\r\n\r\n onBlur = () => {\r\n this.props.onBlur();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n keyValue,\r\n value,\r\n keyPlaceholder,\r\n valuePlaceholder,\r\n isNew\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 isNew ?\r\n null :\r\n \r\n }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nKeyValueListInputItem.propTypes = {\r\n index: PropTypes.number,\r\n keyValue: PropTypes.string.isRequired,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n keyPlaceholder: PropTypes.string.isRequired,\r\n valuePlaceholder: PropTypes.string.isRequired,\r\n isNew: PropTypes.bool.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n onRemove: PropTypes.func.isRequired,\r\n onFocus: PropTypes.func.isRequired,\r\n onBlur: PropTypes.func.isRequired\r\n};\r\n\r\nKeyValueListInputItem.defaultProps = {\r\n keyPlaceholder: 'Key',\r\n valuePlaceholder: 'Value'\r\n};\r\n\r\nexport default KeyValueListInputItem;\r\n","import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport KeyValueListInputItem from './KeyValueListInputItem';\r\nimport styles from './KeyValueListInput.css';\r\n\r\nclass KeyValueListInput 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 isFocused: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onItemChange = (index, itemValue) => {\r\n const {\r\n name,\r\n value,\r\n onChange\r\n } = this.props;\r\n\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({\r\n name,\r\n value: newValue\r\n });\r\n };\r\n\r\n onRemoveItem = (index) => {\r\n const {\r\n name,\r\n value,\r\n onChange\r\n } = this.props;\r\n\r\n const newValue = [...value];\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 onFocus = () => {\r\n this.setState({\r\n isFocused: true\r\n });\r\n };\r\n\r\n onBlur = () => {\r\n this.setState({\r\n isFocused: false\r\n });\r\n\r\n const {\r\n name,\r\n value,\r\n onChange\r\n } = this.props;\r\n\r\n const newValue = value.reduce((acc, v) => {\r\n if (v.key || v.value) {\r\n acc.push(v);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n\r\n if (newValue.length !== value.length) {\r\n onChange({\r\n name,\r\n value: newValue\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 value,\r\n keyPlaceholder,\r\n valuePlaceholder\r\n } = this.props;\r\n\r\n const { isFocused } = this.state;\r\n\r\n return (\r\n
\r\n {\r\n [...value, { key: '', value: '' }].map((v, index) => {\r\n return (\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nKeyValueListInput.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n hasError: PropTypes.bool,\r\n hasWarning: PropTypes.bool,\r\n keyPlaceholder: PropTypes.string,\r\n valuePlaceholder: PropTypes.string,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nKeyValueListInput.defaultProps = {\r\n className: styles.inputContainer,\r\n value: []\r\n};\r\n\r\nexport default KeyValueListInput;\r\n","// 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 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, { value }) => value,\r\n (state) => state.settings.indexerCategories,\r\n (value, categories) => {\r\n const values = [];\r\n\r\n categories.items.forEach((element) => {\r\n values.push({\r\n key: element.id,\r\n value: element.name,\r\n hint: `(${element.id})`\r\n });\r\n\r\n if (element.subCategories && element.subCategories.length > 0) {\r\n element.subCategories.forEach((subCat) => {\r\n values.push({\r\n key: subCat.id,\r\n value: subCat.name,\r\n hint: `(${subCat.id})`,\r\n parentKey: element.id\r\n });\r\n });\r\n }\r\n });\r\n\r\n return {\r\n value: value || [],\r\n values\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass IndexersSelectInputConnector extends Component {\r\n\r\n onChange = ({ name, value }) => {\r\n this.props.onChange({ name, value });\r\n };\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\nIndexersSelectInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n indexerIds: PropTypes.number,\r\n value: PropTypes.arrayOf(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)(IndexersSelectInputConnector);\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","// 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 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 { kinds, tooltipPositions } from 'Helpers/Props';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport { isMobile as isMobileUtil } from 'Utilities/browser';\r\nimport styles from './Tooltip.css';\r\n\r\nlet maxWidth = null;\r\n\r\nfunction getMaxWidth() {\r\n const windowWidth = window.innerWidth;\r\n\r\n if (windowWidth >= parseInt(dimensions.breakpointLarge)) {\r\n maxWidth = 800;\r\n } else if (windowWidth >= parseInt(dimensions.breakpointMedium)) {\r\n maxWidth = 650;\r\n } else if (windowWidth >= parseInt(dimensions.breakpointSmall)) {\r\n maxWidth = 500;\r\n } else {\r\n maxWidth = 450;\r\n }\r\n\r\n return maxWidth;\r\n}\r\n\r\nclass Tooltip 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._closeTimeout = null;\r\n this._maxWidth = maxWidth || getMaxWidth();\r\n\r\n this.state = {\r\n isOpen: false\r\n };\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this._scheduleUpdate && this.state.isOpen) {\r\n this._scheduleUpdate();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._closeTimeout) {\r\n this._closeTimeout = clearTimeout(this._closeTimeout);\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n computeMaxSize = (data) => {\r\n const {\r\n top,\r\n right,\r\n bottom,\r\n left\r\n } = 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(this._maxWidth, windowWidth - right - 20);\r\n data.styles.maxHeight = top - 20;\r\n } else {\r\n data.styles.maxWidth = Math.min(this._maxWidth, left - 20);\r\n data.styles.maxHeight = top - 20;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onMeasure = ({ width }) => {\r\n this.setState({ width });\r\n };\r\n\r\n onClick = () => {\r\n if (isMobileUtil()) {\r\n this.setState({ isOpen: !this.state.isOpen });\r\n }\r\n };\r\n\r\n onMouseEnter = () => {\r\n if (this._closeTimeout) {\r\n this._closeTimeout = clearTimeout(this._closeTimeout);\r\n }\r\n\r\n this.setState({ isOpen: true });\r\n };\r\n\r\n onMouseLeave = () => {\r\n this._closeTimeout = setTimeout(() => {\r\n this.setState({ isOpen: false });\r\n }, 100);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n bodyClassName,\r\n anchor,\r\n tooltip,\r\n kind,\r\n position,\r\n canFlip\r\n } = this.props;\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 this._scheduleUpdate = scheduleUpdate;\r\n\r\n const popperPlacement = placement ? placement.split('-')[0] : position;\r\n const vertical = popperPlacement === 'top' || popperPlacement === 'bottom';\r\n\r\n return (\r\n \r\n \r\n {\r\n this.state.isOpen ?\r\n \r\n \r\n {tooltip}\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\nTooltip.propTypes = {\r\n className: PropTypes.string,\r\n bodyClassName: PropTypes.string.isRequired,\r\n anchor: PropTypes.node.isRequired,\r\n tooltip: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired,\r\n kind: PropTypes.oneOf([kinds.DEFAULT, kinds.INVERSE]),\r\n position: PropTypes.oneOf(tooltipPositions.all),\r\n canFlip: PropTypes.bool.isRequired\r\n};\r\n\r\nTooltip.defaultProps = {\r\n bodyClassName: styles.body,\r\n kind: kinds.DEFAULT,\r\n position: tooltipPositions.TOP,\r\n canFlip: false\r\n};\r\n\r\nexport default Tooltip;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"validationFailures\":\"Form-validationFailures-wVc3a\",\"details\":\"Form-details-x0L98\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Icon from 'Components/Icon';\r\nimport Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { icons, kinds, tooltipPositions } 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 error.detailedDescription ?\r\n }\r\n tooltip={error.detailedDescription}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n /> :\r\n null\r\n }\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 warning.detailedDescription ?\r\n }\r\n tooltip={warning.detailedDescription}\r\n kind={kinds.INVERSE}\r\n position={tooltipPositions.TOP}\r\n /> :\r\n null\r\n }\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 {\"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\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './DragPreviewLayer.css';\r\n\r\nfunction DragPreviewLayer({ children, ...otherProps }) {\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nDragPreviewLayer.propTypes = {\r\n children: PropTypes.node,\r\n className: PropTypes.string\r\n};\r\n\r\nDragPreviewLayer.defaultProps = {\r\n className: styles.dragLayer\r\n};\r\n\r\nexport default DragPreviewLayer;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"dragLayer\":\"DragPreviewLayer-dragLayer-lJxaW\"};","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\r\n if (value < 5) {\r\n pageSizeError = 'Page size must be at least 5';\r\n } else if (value > 250) {\r\n pageSizeError = 'Page size must not exceed 250';\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('PageSize')}\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('Columns')}\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 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 } = 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","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './TableRowCell.css';\r\n\r\nclass TableRowCell 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 ...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\nTableRowCell.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n children: PropTypes.oneOfType([PropTypes.string, PropTypes.node])\r\n};\r\n\r\nTableRowCell.defaultProps = {\r\n className: styles.cell\r\n};\r\n\r\nexport default TableRowCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"TableRowCell-cell-giPrj\"};","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 PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\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) {\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\nclass FileBrowserRow extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n this.props.onPress(this.props.path);\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n type,\r\n name\r\n } = this.props;\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\n}\r\n\r\nFileBrowserRow.propTypes = {\r\n type: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n path: PropTypes.string.isRequired,\r\n onPress: PropTypes.func.isRequired\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 PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport PathInput from 'Components/Form/PathInput';\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 Scroller from 'Components/Scroller/Scroller';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { kinds, scrollDirections } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport FileBrowserRow from './FileBrowserRow';\r\nimport styles from './FileBrowserModalContent.css';\r\n\r\nconst columns = [\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\nclass FileBrowserModalContent 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 isFileBrowserModalOpen: false,\r\n currentPath: props.value\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const {\r\n currentPath\r\n } = this.props;\r\n\r\n if (\r\n currentPath !== this.state.currentPath &&\r\n currentPath !== prevState.currentPath\r\n ) {\r\n this.setState({ currentPath });\r\n this._scrollerRef.current.scrollTop = 0;\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onPathInputChange = ({ value }) => {\r\n this.setState({ currentPath: value });\r\n };\r\n\r\n onRowPress = (path) => {\r\n this.props.onFetchPaths(path);\r\n };\r\n\r\n onOkPress = () => {\r\n this.props.onChange({\r\n name: this.props.name,\r\n value: this.state.currentPath\r\n });\r\n\r\n this.props.onClearPaths();\r\n this.props.onModalClose();\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 parent,\r\n directories,\r\n files,\r\n isWindowsService,\r\n onModalClose,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const emptyParent = parent === '';\r\n\r\n return (\r\n \r\n \r\n File Browser\r\n \r\n\r\n \r\n {\r\n isWindowsService &&\r\n \r\n \r\n {translate('MappedDrivesRunningAsService')}\r\n \r\n \r\n }\r\n\r\n \r\n\r\n \r\n {\r\n !!error &&\r\n
\r\n {translate('ErrorLoadingContents')}\r\n
\r\n }\r\n\r\n {\r\n isPopulated && !error &&\r\n \r\n \r\n {\r\n emptyParent &&\r\n \r\n }\r\n\r\n {\r\n !emptyParent && parent &&\r\n \r\n }\r\n\r\n {\r\n directories.map((directory) => {\r\n return (\r\n \r\n );\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 \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 {translate('Cancel')}\r\n \r\n\r\n \r\n {translate('Ok')}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nFileBrowserModalContent.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n parent: PropTypes.string,\r\n currentPath: PropTypes.string.isRequired,\r\n directories: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n files: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n isWindowsService: PropTypes.bool.isRequired,\r\n onFetchPaths: PropTypes.func.isRequired,\r\n onClearPaths: PropTypes.func.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default FileBrowserModalContent;\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 _ 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 createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';\r\nimport FileBrowserModalContent from './FileBrowserModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.paths,\r\n createSystemStatusSelector(),\r\n (paths, systemStatus) => {\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 = _.filter([...directories, ...files], ({ 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 isWindowsService: systemStatus.isWindows && systemStatus.mode === 'service'\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 FileBrowserModalContentConnector extends Component {\r\n\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n value,\r\n includeFiles,\r\n dispatchFetchPaths\r\n } = this.props;\r\n\r\n dispatchFetchPaths({\r\n path: value,\r\n allowFoldersWithoutTrailingSlashes: true,\r\n includeFiles\r\n });\r\n }\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 allowFoldersWithoutTrailingSlashes: true,\r\n includeFiles\r\n });\r\n };\r\n\r\n onClearPaths = () => {\r\n // this.props.dispatchClearPaths();\r\n };\r\n\r\n onModalClose = () => {\r\n this.props.dispatchClearPaths();\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\nFileBrowserModalContentConnector.propTypes = {\r\n value: PropTypes.string,\r\n includeFiles: PropTypes.bool.isRequired,\r\n dispatchFetchPaths: PropTypes.func.isRequired,\r\n dispatchClearPaths: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nFileBrowserModalContentConnector.defaultProps = {\r\n includeFiles: false\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(FileBrowserModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport FileBrowserModalContentConnector from './FileBrowserModalContentConnector';\r\nimport styles from './FileBrowserModal.css';\r\n\r\nclass FileBrowserModal 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\nFileBrowserModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\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 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 _ 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 = split(tag.name);\r\n\r\n newTags.forEach((newTag) => {\r\n newValue.push(newTag.trim());\r\n });\r\n\r\n onChange({ name, value: newValue.join(',') });\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.join(',')\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\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","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 AppProfileSelectInputConnector from './AppProfileSelectInputConnector';\r\nimport AutoCompleteInput from './AutoCompleteInput';\r\nimport CaptchaInputConnector from './CaptchaInputConnector';\r\nimport CardigannCaptchaInputConnector from './CardigannCaptchaInputConnector';\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 IndexerFlagsSelectInputConnector from './IndexerFlagsSelectInputConnector';\r\nimport InfoInput from './InfoInput';\r\nimport KeyValueListInput from './KeyValueListInput';\r\nimport NewznabCategorySelectInputConnector from './NewznabCategorySelectInputConnector';\r\nimport NumberInput from './NumberInput';\r\nimport OAuthInputConnector from './OAuthInputConnector';\r\nimport PasswordInput from './PasswordInput';\r\nimport PathInputConnector from './PathInputConnector';\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 styles from './FormInputGroup.css';\r\n\r\nfunction getComponent(type) {\r\n switch (type) {\r\n case inputTypes.APP_PROFILE_SELECT:\r\n return AppProfileSelectInputConnector;\r\n\r\n case inputTypes.AUTO_COMPLETE:\r\n return AutoCompleteInput;\r\n\r\n case inputTypes.CAPTCHA:\r\n return CaptchaInputConnector;\r\n\r\n case inputTypes.CARDIGANNCAPTCHA:\r\n return CardigannCaptchaInputConnector;\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.INFO:\r\n return InfoInput;\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.CATEGORY_SELECT:\r\n return NewznabCategorySelectInputConnector;\r\n\r\n case inputTypes.DOWNLOAD_CLIENT_SELECT:\r\n return DownloadClientSelectInputConnector;\r\n\r\n case inputTypes.INDEXER_FLAGS_SELECT:\r\n return IndexerFlagsSelectInputConnector;\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.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 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 && 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 isFloat: 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 includeNoChange: PropTypes.bool,\r\n includeNoChangeDisabled: PropTypes.bool,\r\n selectedValueOptions: PropTypes.object,\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 PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './FieldSet.css';\r\n\r\nclass FieldSet extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n legend,\r\n children\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n {legend}\r\n \r\n {children}\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nFieldSet.propTypes = {\r\n legend: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\r\n children: PropTypes.node\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\"};","// 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('OpenThisModal');\r\n }\r\n },\r\n\r\n CLOSE_MODAL: {\r\n key: 'Esc',\r\n get name() {\r\n return translate('CloseCurrentModal');\r\n }\r\n },\r\n\r\n ACCEPT_CONFIRM_MODAL: {\r\n key: 'Enter',\r\n get name() {\r\n return translate('AcceptConfirmationModal');\r\n }\r\n },\r\n\r\n MOVIE_SEARCH_INPUT: {\r\n key: 's',\r\n get name() {\r\n return translate('FocusSearchBox');\r\n }\r\n },\r\n\r\n SAVE_SETTINGS: {\r\n key: 'mod+s',\r\n get name() {\r\n return translate('SaveSettings');\r\n }\r\n },\r\n\r\n SCROLL_TOP: {\r\n key: 'mod+home',\r\n get name() {\r\n return translate('MovieIndexScrollTop');\r\n }\r\n },\r\n\r\n SCROLL_BOTTOM: {\r\n key: 'mod+end',\r\n get name() {\r\n return translate('MovieIndexScrollBottom');\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 PropTypes from 'prop-types';\r\nimport React, { useEffect, useRef } from 'react';\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 { inputTypes, kinds } from 'Helpers/Props';\r\nimport { authenticationMethodOptions, authenticationRequiredOptions } from 'Settings/General/SecuritySettings';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './AuthenticationRequiredModalContent.css';\r\n\r\nfunction onModalClose() {\r\n // No-op\r\n}\r\n\r\nfunction AuthenticationRequiredModalContent(props) {\r\n const {\r\n isPopulated,\r\n error,\r\n isSaving,\r\n settings,\r\n onInputChange,\r\n onSavePress,\r\n dispatchFetchStatus\r\n } = props;\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 authenticationEnabled = authenticationMethod && authenticationMethod.value !== 'none';\r\n\r\n const didMount = useRef(false);\r\n\r\n useEffect(() => {\r\n if (!isSaving && didMount.current) {\r\n dispatchFetchStatus();\r\n }\r\n\r\n didMount.current = true;\r\n }, [isSaving, dispatchFetchStatus]);\r\n\r\n return (\r\n \r\n \r\n {translate('AuthenticationRequired')}\r\n \r\n\r\n \r\n \r\n {translate('AuthenticationRequiredWarning')}\r\n \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\r\n {\r\n !isPopulated && !error ? : null\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\nAuthenticationRequiredModalContent.propTypes = {\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 onInputChange: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n dispatchFetchStatus: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AuthenticationRequiredModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"authRequiredAlert\":\"AuthenticationRequiredModalContent-authRequiredAlert-E7Mqx 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 { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { fetchGeneralSettings, saveGeneralSettings, setGeneralSettingsValue } from 'Store/Actions/settingsActions';\r\nimport { fetchStatus } from 'Store/Actions/systemActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport AuthenticationRequiredModalContent from './AuthenticationRequiredModalContent';\r\n\r\nconst SECTION = 'general';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSettingsSectionSelector(SECTION),\r\n (sectionSettings) => {\r\n return {\r\n ...sectionSettings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchClearPendingChanges: clearPendingChanges,\r\n dispatchSetGeneralSettingsValue: setGeneralSettingsValue,\r\n dispatchSaveGeneralSettings: saveGeneralSettings,\r\n dispatchFetchGeneralSettings: fetchGeneralSettings,\r\n dispatchFetchStatus: fetchStatus\r\n};\r\n\r\nclass AuthenticationRequiredModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.dispatchFetchGeneralSettings();\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.dispatchSetGeneralSettingsValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.dispatchSaveGeneralSettings();\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n dispatchClearPendingChanges,\r\n dispatchFetchGeneralSettings,\r\n dispatchSetGeneralSettingsValue,\r\n dispatchSaveGeneralSettings,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAuthenticationRequiredModalContentConnector.propTypes = {\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n dispatchFetchGeneralSettings: PropTypes.func.isRequired,\r\n dispatchSetGeneralSettingsValue: PropTypes.func.isRequired,\r\n dispatchSaveGeneralSettings: PropTypes.func.isRequired,\r\n dispatchFetchStatus: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AuthenticationRequiredModalContentConnector);\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 AuthenticationRequiredModalContentConnector from './AuthenticationRequiredModalContentConnector';\r\n\r\nfunction onModalClose() {\r\n // No-op\r\n}\r\n\r\nfunction AuthenticationRequiredModal(props) {\r\n const {\r\n isOpen\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAuthenticationRequiredModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default AuthenticationRequiredModal;\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 { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nfunction createAllIndexersSelector() {\r\n return createSelector(\r\n (state: AppState) => state.indexers,\r\n (indexers) => {\r\n return indexers.items;\r\n }\r\n );\r\n}\r\n\r\nexport default createAllIndexersSelector;\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","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { kinds } from 'Helpers/Props';\r\nimport styles from './IndexerSearchResult.css';\r\n\r\nfunction IndexerSearchResult(props) {\r\n const {\r\n match,\r\n title,\r\n year,\r\n alternateTitles,\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 {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 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\nIndexerSearchResult.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n year: PropTypes.number.isRequired,\r\n alternateTitles: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n match: PropTypes.object.isRequired\r\n};\r\n\r\nexport default IndexerSearchResult;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"result\":\"IndexerSearchResult-result-h0fvv\",\"poster\":\"IndexerSearchResult-poster-_OKy8\",\"titles\":\"IndexerSearchResult-titles-lu3eZ\",\"title\":\"IndexerSearchResult-title-vJyLT\",\"alternateTitle\":\"IndexerSearchResult-alternateTitle-NjhK_ IndexerSearchResult-title-vJyLT\",\"tagContainer\":\"IndexerSearchResult-tagContainer-FOvcz IndexerSearchResult-title-vJyLT\"};","import 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 IndexerSearchResult from './IndexerSearchResult';\r\nimport styles from './IndexerSearchInput.css';\r\n\r\nconst ADD_NEW_TYPE = 'addNew';\r\n\r\nclass IndexerSearchInput 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\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 //\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 Search for {query}\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n );\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 } = 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 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 onSuggestionsClearRequested = () => {\r\n this.setState({\r\n suggestions: [],\r\n loading: false\r\n });\r\n };\r\n\r\n onSuggestionsFetchRequested = () => {\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 }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n value\r\n } = this.state;\r\n\r\n const suggestionGroups = [];\r\n\r\n suggestionGroups.push({\r\n title: translate('SearchIndexers'),\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\nIndexerSearchInput.propTypes = {\r\n onGoToAddNewMovie: PropTypes.func.isRequired,\r\n bindShortcut: PropTypes.func.isRequired\r\n};\r\n\r\nexport default keyboardShortcuts(IndexerSearchInput);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"IndexerSearchInput-wrapper-Omh8X\",\"loading\":\"IndexerSearchInput-loading-phf1G\",\"ripple\":\"IndexerSearchInput-ripple-sEzwk LoadingIndicator-ripple-Dn9J1\",\"input\":\"IndexerSearchInput-input-fFNzJ\",\"container\":\"IndexerSearchInput-container-YeNgV\",\"movieContainer\":\"IndexerSearchInput-movieContainer-bColl\",\"containerOpen\":\"IndexerSearchInput-containerOpen-Bdq4B\",\"list\":\"IndexerSearchInput-list-KPYWq\",\"listItem\":\"IndexerSearchInput-listItem-VcDDR\",\"highlighted\":\"IndexerSearchInput-highlighted-_AaJG\",\"sectionTitle\":\"IndexerSearchInput-sectionTitle-pnU6l\",\"addNewMovieSuggestion\":\"IndexerSearchInput-addNewMovieSuggestion-GSz_0\"};","import { push } from 'connected-react-router';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { setSearchDefault } from 'Store/Actions/releaseActions';\r\nimport createAllIndexersSelector from 'Store/Selectors/createAllIndexersSelector';\r\nimport createDeepEqualSelector from 'Store/Selectors/createDeepEqualSelector';\r\nimport createTagsSelector from 'Store/Selectors/createTagsSelector';\r\nimport IndexerSearchInput from './IndexerSearchInput';\r\n\r\nfunction createCleanMovieSelector() {\r\n return createSelector(\r\n createAllIndexersSelector(),\r\n createTagsSelector(),\r\n (allIndexers, allTags) => {\r\n return allIndexers.map((movie) => {\r\n const {\r\n name,\r\n titleSlug,\r\n sortTitle,\r\n year,\r\n images,\r\n alternateTitles = [],\r\n tags = []\r\n } = movie;\r\n\r\n return {\r\n name,\r\n titleSlug,\r\n sortTitle,\r\n year,\r\n images,\r\n alternateTitles,\r\n firstCharacter: name.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 onGoToAddNewMovie(query) {\r\n dispatch(setSearchDefault({ searchQuery: query }));\r\n dispatch(push(`${window.Prowlarr.urlBase}/search`));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(IndexerSearchInput);\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 Keyboard Shortcuts\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 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 getUniqueElememtId 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 = getUniqueElememtId();\r\n this._menuContentId = getUniqueElememtId();\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","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 IndexerSearchInputConnector from './IndexerSearchInputConnector';\r\nimport KeyboardShortcutsModal from './KeyboardShortcutsModal';\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 } = 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\nPageHeader.propTypes = {\r\n onSidebarToggle: PropTypes.func.isRequired,\r\n bindShortcut: PropTypes.func.isRequired\r\n};\r\n\r\nexport default keyboardShortcuts(PageHeader);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"PageHeader-header-yG8lh\",\"logoContainer\":\"PageHeader-logoContainer-w6Bht\",\"appTitle\":\"PageHeader-appTitle-jjydq\",\"logoFull\":\"PageHeader-logoFull-XjP3T\",\"logo\":\"PageHeader-logo-WW_El\",\"sidebarToggleContainer\":\"PageHeader-sidebarToggleContainer-s7QPv\",\"right\":\"PageHeader-right-e8LU4\",\"actionMenu\":\"PageHeader-actionMenu-YWvka\",\"translate\":\"PageHeader-translate-otp7Q Link-link-RInnp\",\"donate\":\"PageHeader-donate-FT1Kz Link-link-RInnp\"};","// extracted by mini-css-extract-plugin\nexport default {\"scroller\":\"OverlayScroller-scroller-Qv2oP\",\"track\":\"OverlayScroller-track-NpAah\",\"thumb\":\"OverlayScroller-thumb-IKMmD\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { Scrollbars } from 'react-custom-scrollbars-2';\r\nimport { scrollDirections } from 'Helpers/Props';\r\nimport styles from './OverlayScroller.css';\r\n\r\nconst SCROLLBAR_SIZE = 10;\r\n\r\nclass OverlayScroller 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._scroller = null;\r\n this._isScrolling = false;\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n scrollTop\r\n } = this.props;\r\n\r\n if (\r\n !this._isScrolling &&\r\n scrollTop != null &&\r\n scrollTop !== prevProps.scrollTop\r\n ) {\r\n this._scroller.scrollTop(scrollTop);\r\n }\r\n }\r\n\r\n //\r\n // Control\r\n\r\n _setScrollRef = (ref) => {\r\n this._scroller = ref;\r\n\r\n if (ref) {\r\n this.props.registerScroller(ref.view);\r\n }\r\n };\r\n\r\n _renderThumb = (props) => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n _renderTrackHorizontal = ({ style, props }) => {\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 _renderTrackVertical = ({ style, props }) => {\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 _renderView = (props) => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n //\r\n // Listers\r\n\r\n onScrollStart = () => {\r\n this._isScrolling = true;\r\n };\r\n\r\n onScrollStop = () => {\r\n this._isScrolling = false;\r\n };\r\n\r\n onScroll = (event) => {\r\n const {\r\n scrollTop,\r\n scrollLeft\r\n } = event.currentTarget;\r\n\r\n this._isScrolling = true;\r\n const onScroll = this.props.onScroll;\r\n\r\n if (onScroll) {\r\n onScroll({ scrollTop, scrollLeft });\r\n }\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n autoHide,\r\n autoScroll,\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\n\r\nOverlayScroller.propTypes = {\r\n className: PropTypes.string,\r\n trackClassName: PropTypes.string,\r\n scrollTop: PropTypes.number,\r\n scrollDirection: PropTypes.oneOf([scrollDirections.NONE, scrollDirections.HORIZONTAL, scrollDirections.VERTICAL]).isRequired,\r\n autoHide: PropTypes.bool.isRequired,\r\n autoScroll: PropTypes.bool.isRequired,\r\n children: PropTypes.node,\r\n onScroll: PropTypes.func,\r\n registerScroller: PropTypes.func\r\n};\r\n\r\nOverlayScroller.defaultProps = {\r\n className: styles.scroller,\r\n trackClassName: styles.thumb,\r\n scrollDirection: scrollDirections.VERTICAL,\r\n autoHide: false,\r\n autoScroll: true,\r\n registerScroller: () => { /* no-op */ }\r\n};\r\n\r\nexport default OverlayScroller;\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 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 'Housekeeping':\r\n return icons.HOUSEKEEPING;\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 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('Indexers'),\r\n to: '/',\r\n alias: '/indexers',\r\n children: [\r\n {\r\n title: () => translate('Stats'),\r\n to: '/indexers/stats'\r\n }\r\n ]\r\n },\r\n\r\n {\r\n iconName: icons.SEARCH,\r\n title: () => translate('Search'),\r\n to: '/search'\r\n },\r\n\r\n {\r\n iconName: icons.ACTIVITY,\r\n title: () => translate('History'),\r\n to: '/history'\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('Indexers'),\r\n to: '/settings/indexers'\r\n },\r\n {\r\n title: () => translate('Apps'),\r\n to: '/settings/applications'\r\n },\r\n {\r\n title: () => translate('DownloadClients'),\r\n to: '/settings/downloadclients'\r\n },\r\n {\r\n title: () => translate('Connect'),\r\n to: '/settings/connect'\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.Prowlarr.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, 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 { fetchIndexers } from 'Store/Actions/indexerActions';\r\nimport { fetchIndexerStatus } from 'Store/Actions/indexerStatusActions';\r\nimport { fetchAppProfiles, fetchGeneralSettings, fetchIndexerCategories, 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 = 'prowlarrTest';\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.customFilters.isPopulated,\r\n (state) => state.tags.isPopulated,\r\n (state) => state.settings.ui.isPopulated,\r\n (state) => state.settings.general.isPopulated,\r\n (state) => state.settings.appProfiles.isPopulated,\r\n (state) => state.indexers.isPopulated,\r\n (state) => state.indexerStatus.isPopulated,\r\n (state) => state.settings.indexerCategories.isPopulated,\r\n (state) => state.system.status.isPopulated,\r\n (state) => state.app.translations.isPopulated,\r\n (\r\n customFiltersIsPopulated,\r\n tagsIsPopulated,\r\n uiSettingsIsPopulated,\r\n generalSettingsIsPopulated,\r\n appProfilesIsPopulated,\r\n indexersIsPopulated,\r\n indexerStatusIsPopulated,\r\n indexerCategoriesIsPopulated,\r\n systemStatusIsPopulated,\r\n translationsIsPopulated\r\n ) => {\r\n return (\r\n customFiltersIsPopulated &&\r\n tagsIsPopulated &&\r\n uiSettingsIsPopulated &&\r\n generalSettingsIsPopulated &&\r\n appProfilesIsPopulated &&\r\n indexersIsPopulated &&\r\n indexerStatusIsPopulated &&\r\n indexerCategoriesIsPopulated &&\r\n systemStatusIsPopulated &&\r\n translationsIsPopulated\r\n );\r\n }\r\n);\r\n\r\nconst selectErrors = createSelector(\r\n (state) => state.customFilters.error,\r\n (state) => state.tags.error,\r\n (state) => state.settings.ui.error,\r\n (state) => state.settings.general.error,\r\n (state) => state.settings.appProfiles.error,\r\n (state) => state.indexers.error,\r\n (state) => state.indexerStatus.error,\r\n (state) => state.settings.indexerCategories.error,\r\n (state) => state.system.status.error,\r\n (state) => state.app.translations.error,\r\n (\r\n customFiltersError,\r\n tagsError,\r\n uiSettingsError,\r\n generalSettingsError,\r\n appProfilesError,\r\n indexersError,\r\n indexerStatusError,\r\n indexerCategoriesError,\r\n systemStatusError,\r\n translationsError\r\n ) => {\r\n const hasError = !!(\r\n customFiltersError ||\r\n tagsError ||\r\n uiSettingsError ||\r\n generalSettingsError ||\r\n appProfilesError ||\r\n indexersError ||\r\n indexerStatusError ||\r\n indexerCategoriesError ||\r\n systemStatusError ||\r\n translationsError\r\n );\r\n\r\n return {\r\n hasError,\r\n customFiltersError,\r\n tagsError,\r\n uiSettingsError,\r\n generalSettingsError,\r\n appProfilesError,\r\n indexersError,\r\n indexerStatusError,\r\n indexerCategoriesError,\r\n systemStatusError,\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 dispatchFetchCustomFilters() {\r\n dispatch(fetchCustomFilters());\r\n },\r\n dispatchFetchTags() {\r\n dispatch(fetchTags());\r\n },\r\n dispatchFetchIndexers() {\r\n dispatch(fetchIndexers());\r\n },\r\n dispatchFetchIndexerStatus() {\r\n dispatch(fetchIndexerStatus());\r\n },\r\n dispatchFetchIndexerCategories() {\r\n dispatch(fetchIndexerCategories());\r\n },\r\n dispatchFetchUISettings() {\r\n dispatch(fetchUISettings());\r\n },\r\n dispatchFetchAppProfiles() {\r\n dispatch(fetchAppProfiles());\r\n },\r\n dispatchFetchGeneralSettings() {\r\n dispatch(fetchGeneralSettings());\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.dispatchFetchCustomFilters();\r\n this.props.dispatchFetchTags();\r\n this.props.dispatchFetchAppProfiles();\r\n this.props.dispatchFetchIndexers();\r\n this.props.dispatchFetchIndexerStatus();\r\n this.props.dispatchFetchIndexerCategories();\r\n this.props.dispatchFetchUISettings();\r\n this.props.dispatchFetchGeneralSettings();\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 dispatchFetchTags,\r\n dispatchFetchAppProfiles,\r\n dispatchFetchIndexers,\r\n dispatchFetchIndexerStatus,\r\n dispatchFetchIndexerCategories,\r\n dispatchFetchUISettings,\r\n dispatchFetchGeneralSettings,\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 dispatchFetchCustomFilters: PropTypes.func.isRequired,\r\n dispatchFetchTags: PropTypes.func.isRequired,\r\n dispatchFetchAppProfiles: PropTypes.func.isRequired,\r\n dispatchFetchIndexers: PropTypes.func.isRequired,\r\n dispatchFetchIndexerStatus: PropTypes.func.isRequired,\r\n dispatchFetchIndexerCategories: PropTypes.func.isRequired,\r\n dispatchFetchUISettings: PropTypes.func.isRequired,\r\n dispatchFetchGeneralSettings: 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.Prowlarr.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","// 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 ScrollDirection from 'Helpers/Props/ScrollDirection';\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 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 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\nfunction NotFound({ message }) {\r\n return (\r\n \r\n
\r\n
\r\n {message}\r\n
\r\n\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nNotFound.propTypes = {\r\n message: PropTypes.string.isRequired\r\n};\r\n\r\nNotFound.defaultProps = {\r\n message: 'You must be lost, nothing to see here.'\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\"};","export default function getPathWithUrlBase(path: string) {\r\n return `${window.Prowlarr.urlBase}${path}`;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { Switch as RouterSwitch } from 'react-router-dom';\r\nimport { map } from 'Helpers/elementChildren';\r\nimport getPathWithUrlBase from 'Utilities/getPathWithUrlBase';\r\n\r\nclass Switch 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 map(children, (child) => {\r\n const {\r\n path: childPath,\r\n addUrlBase = true\r\n } = child.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\n}\r\n\r\nSwitch.propTypes = {\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nexport default Switch;\r\n","export const APPLICATION_UPDATE = 'ApplicationUpdate';\r\nexport const BACKUP = 'Backup';\r\nexport const CLEAR_HISTORY = 'ClearHistory';\r\nexport const CLEAR_LOGS = 'ClearLog';\r\nexport const DELETE_LOG_FILES = 'DeleteLogFiles';\r\nexport const DELETE_UPDATE_LOG_FILES = 'DeleteUpdateLogFiles';\r\nexport const RESET_API_KEY = 'ResetApiKey';\r\nexport const APP_INDEXER_SYNC = 'ApplicationIndexerSync';\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","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 { 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 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 _ 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","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 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 indicator,\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 indicator &&\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 indicator: PropTypes.bool.isRequired\r\n};\r\n\r\nToolbarMenuButton.defaultProps = {\r\n indicator: 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\"};","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 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 './PageToolbarButton.css';\r\n\r\nfunction PageToolbarButton(props) {\r\n const {\r\n label,\r\n iconName,\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\n
\r\n {label}\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nPageToolbarButton.propTypes = {\r\n label: PropTypes.string.isRequired,\r\n iconName: PropTypes.object.isRequired,\r\n spinningName: PropTypes.object,\r\n isSpinning: PropTypes.bool,\r\n isDisabled: PropTypes.bool,\r\n onPress: PropTypes.func\r\n};\r\n\r\nPageToolbarButton.defaultProps = {\r\n spinningName: icons.SPINNER,\r\n isDisabled: false,\r\n isSpinning: false\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 PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { icons } from 'Helpers/Props';\r\nimport Icon from './Icon';\r\n\r\nfunction SpinnerIcon(props) {\r\n const {\r\n name,\r\n spinningName,\r\n isSpinning,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nSpinnerIcon.propTypes = {\r\n className: PropTypes.string,\r\n name: PropTypes.object.isRequired,\r\n spinningName: PropTypes.object.isRequired,\r\n isSpinning: PropTypes.bool.isRequired\r\n};\r\n\r\nSpinnerIcon.defaultProps = {\r\n spinningName: icons.SPINNER\r\n};\r\n\r\nexport default SpinnerIcon;\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 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","// 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 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 Total records: {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","\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 { 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 PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport TagInputTag from 'Components/Form/TagInputTag';\r\nimport { kinds } from 'Helpers/Props';\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 \r\n 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 return parseInt(input);\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 { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.appProfiles,\r\n (appProfiles) => {\r\n const tagList = appProfiles.items.map((appProfile) => {\r\n const {\r\n id,\r\n name\r\n } = appProfile;\r\n\r\n return {\r\n id,\r\n name\r\n };\r\n });\r\n\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 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","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport { IndexerCategory } from 'Indexer/Indexer';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\nimport FilterBuilderRowValueProps from './FilterBuilderRowValueProps';\r\n\r\nconst indexerCategoriesSelector = createSelector(\r\n (state: AppState) => state.settings.indexerCategories,\r\n (categories) => categories.items\r\n);\r\n\r\nfunction CategoryFilterBuilderRowValue(props: FilterBuilderRowValueProps) {\r\n const categories: IndexerCategory[] = useSelector(indexerCategoriesSelector);\r\n\r\n const tagList = categories.reduce(\r\n (acc: { id: number; name: string }[], element) => {\r\n acc.push({\r\n id: element.id,\r\n name: `${element.name} (${element.id})`,\r\n });\r\n\r\n if (element.subCategories && element.subCategories.length > 0) {\r\n element.subCategories.forEach((subCat) => {\r\n acc.push({\r\n id: subCat.id,\r\n name: `${subCat.name} (${subCat.id})`,\r\n });\r\n });\r\n }\r\n\r\n return acc;\r\n },\r\n []\r\n );\r\n\r\n return ;\r\n}\r\n\r\nexport default CategoryFilterBuilderRowValue;\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 { NAME } from './FilterBuilderRowValue';\r\nimport styles from './DateFilterBuilderRowValue.css';\r\n\r\nconst timeOptions = [\r\n { key: 'seconds', value: 'seconds' },\r\n { key: 'minutes', value: 'minutes' },\r\n { key: 'hours', value: 'hours' },\r\n { key: 'days', value: 'days' },\r\n { key: 'weeks', value: 'weeks' },\r\n { key: 'months', value: 'months' }\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('IndexerRss');\r\n },\r\n },\r\n {\r\n id: 2,\r\n get name() {\r\n return translate('IndexerQuery');\r\n },\r\n },\r\n {\r\n id: 4,\r\n get name() {\r\n return translate('IndexerAuth');\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 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/indexerActions';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.indexers,\r\n (indexers) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items\r\n } = indexers;\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 React from 'react';\r\nimport translate from 'Utilities/String/translate';\r\nimport FilterBuilderRowValue from './FilterBuilderRowValue';\r\n\r\nconst privacyTypes = [\r\n {\r\n id: 'public',\r\n get name() {\r\n return translate('Public');\r\n }\r\n },\r\n {\r\n id: 'private',\r\n get name() {\r\n return translate('Private');\r\n }\r\n },\r\n {\r\n id: 'semiPrivate',\r\n get name() {\r\n return translate('SemiPrivate');\r\n }\r\n }\r\n];\r\n\r\nfunction PrivacyFilterBuilderRowValue(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default PrivacyFilterBuilderRowValue;\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","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 AppProfileFilterBuilderRowValueConnector from './AppProfileFilterBuilderRowValueConnector';\r\nimport BoolFilterBuilderRowValue from './BoolFilterBuilderRowValue';\r\nimport CategoryFilterBuilderRowValue from './CategoryFilterBuilderRowValue';\r\nimport DateFilterBuilderRowValue from './DateFilterBuilderRowValue';\r\nimport FilterBuilderRowValueConnector from './FilterBuilderRowValueConnector';\r\nimport HistoryEventTypeFilterBuilderRowValue from './HistoryEventTypeFilterBuilderRowValue';\r\nimport IndexerFilterBuilderRowValueConnector from './IndexerFilterBuilderRowValueConnector';\r\nimport PrivacyFilterBuilderRowValue from './PrivacyFilterBuilderRowValue';\r\nimport ProtocolFilterBuilderRowValue from './ProtocolFilterBuilderRowValue';\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.APP_PROFILE:\r\n return AppProfileFilterBuilderRowValueConnector;\r\n\r\n case filterBuilderValueTypes.BOOL:\r\n return BoolFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.CATEGORY:\r\n return CategoryFilterBuilderRowValue;\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.PROTOCOL:\r\n return ProtocolFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.PRIVACY:\r\n return PrivacyFilterBuilderRowValue;\r\n\r\n case filterBuilderValueTypes.TAG:\r\n return TagFilterBuilderRowValueConnector;\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
\r\n {translate('Filters')}\r\n
\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 { 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","import PropTypes from 'prop-types';\r\nimport React, { Component, Fragment } 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 HistoryOptions 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 historyCleanupDays: props.historyCleanupDays\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n historyCleanupDays\r\n } = this.props;\r\n\r\n if (historyCleanupDays !== prevProps.historyCleanupDays) {\r\n this.setState({\r\n historyCleanupDays\r\n });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onGlobalInputChange = ({ name, value }) => {\r\n const {\r\n dispatchSaveGeneralSettings\r\n } = this.props;\r\n\r\n const setting = { [name]: value };\r\n\r\n this.setState(setting, () => {\r\n dispatchSaveGeneralSettings(setting);\r\n });\r\n };\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n historyCleanupDays\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n {translate('HistoryCleanup')}\r\n\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nHistoryOptions.propTypes = {\r\n historyCleanupDays: PropTypes.number.isRequired,\r\n dispatchSaveGeneralSettings: PropTypes.func.isRequired\r\n};\r\n\r\nexport default HistoryOptions;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { saveGeneralSettings } from 'Store/Actions/settingsActions';\r\nimport HistoryOptions from './HistoryOptions';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.general.item,\r\n (generalSettings) => {\r\n return {\r\n ...generalSettings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSaveGeneralSettings: saveGeneralSettings\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(HistoryOptions);\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nexport function createIndexerSelectorForHook(indexerId: number) {\r\n return createSelector(\r\n (state: AppState) => state.indexers.itemMap,\r\n (state: AppState) => state.indexers.items,\r\n (itemMap, allIndexers) => {\r\n return indexerId ? allIndexers[itemMap[indexerId]] : undefined;\r\n }\r\n );\r\n}\r\n\r\nfunction createIndexerSelector() {\r\n return createSelector(\r\n (_: AppState, { indexerId }: { indexerId: number }) => indexerId,\r\n (state: AppState) => state.indexers.itemMap,\r\n (state: AppState) => state.indexers.items,\r\n (indexerId, itemMap, allIndexers) => {\r\n return allIndexers[itemMap[indexerId]];\r\n }\r\n );\r\n}\r\n\r\nexport default createIndexerSelector;\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 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 'Yesterday, ';\r\n }\r\n\r\n if (isToday(date)) {\r\n return 'Today, ';\r\n }\r\n\r\n if (isTomorrow(date)) {\r\n return '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 return `${relativeDay}${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\n\r\nfunction getRelativeDate(date, shortDateFormat, showRelativeDates, { timeFormat, includeSeconds = false, timeForToday = false } = {}) {\r\n if (!date) {\r\n return null;\r\n }\r\n\r\n const isTodayDate = isToday(date);\r\n\r\n if (isTodayDate && timeForToday && timeFormat) {\r\n return formatTime(date, timeFormat, { includeMinuteZero: true, includeSeconds });\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 translate('Yesterday');\r\n }\r\n\r\n if (isTodayDate) {\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 if (isInNextWeek(date)) {\r\n return moment(date).format('dddd');\r\n }\r\n\r\n return 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","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\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\nfunction createRelativeDateCellSelector() {\r\n return createSelector(createUISettingsSelector(), (uiSettings) => {\r\n return {\r\n showRelativeDates: uiSettings.showRelativeDates,\r\n shortDateFormat: uiSettings.shortDateFormat,\r\n longDateFormat: uiSettings.longDateFormat,\r\n timeFormat: uiSettings.timeFormat\r\n };\r\n });\r\n}\r\n\r\nfunction RelativeDateCell(props) {\r\n //\r\n // Render\r\n\r\n const {\r\n className,\r\n date,\r\n includeSeconds,\r\n component: Component,\r\n dispatch,\r\n ...otherProps\r\n } = props;\r\n\r\n const { showRelativeDates, shortDateFormat, longDateFormat, timeFormat } =\r\n useSelector(createRelativeDateCellSelector());\r\n\r\n if (!date) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n {getRelativeDate(date, shortDateFormat, showRelativeDates, {\r\n timeFormat,\r\n includeSeconds,\r\n timeForToday: true\r\n })}\r\n \r\n );\r\n}\r\n\r\nRelativeDateCell.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n date: PropTypes.string,\r\n includeSeconds: PropTypes.bool.isRequired,\r\n component: PropTypes.elementType,\r\n dispatch: PropTypes.func\r\n};\r\n\r\nRelativeDateCell.defaultProps = {\r\n className: styles.cell,\r\n includeSeconds: false,\r\n component: TableRowCell\r\n};\r\n\r\nexport default RelativeDateCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"RelativeDateCell-cell-_hShQ TableRowCell-cell-giPrj\"};","import { uniqBy } from 'lodash';\r\nimport React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { IndexerCapabilities } from 'Indexer/Indexer';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface CapabilitiesLabelProps {\r\n capabilities: IndexerCapabilities;\r\n categoryFilter?: number[];\r\n}\r\n\r\nfunction CapabilitiesLabel(props: CapabilitiesLabelProps) {\r\n const { categoryFilter = [] } = props;\r\n\r\n const { categories = [] } = props.capabilities || ({} as IndexerCapabilities);\r\n\r\n let filteredList = categories.filter((item) => item.id < 100000);\r\n\r\n if (categoryFilter.length > 0) {\r\n filteredList = filteredList.filter(\r\n (item) =>\r\n categoryFilter.includes(item.id) ||\r\n (item.subCategories &&\r\n item.subCategories.some((r) => categoryFilter.includes(r.id)))\r\n );\r\n }\r\n\r\n const indexerCategories = uniqBy(filteredList, 'id').sort(\r\n (a, b) => a.id - b.id\r\n );\r\n\r\n return (\r\n \r\n {indexerCategories.map((category) => {\r\n return (\r\n \r\n );\r\n })}\r\n\r\n {filteredList.length === 0 ? : null}\r\n \r\n );\r\n}\r\n\r\nexport default CapabilitiesLabel;\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport styles from './DescriptionList.css';\r\n\r\nclass DescriptionList 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\nDescriptionList.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n children: PropTypes.node\r\n};\r\n\r\nDescriptionList.defaultProps = {\r\n className: styles.descriptionList\r\n};\r\n\r\nexport default DescriptionList;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"descriptionList\":\"DescriptionList-descriptionList-o7bt3\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './DescriptionListItemDescription.css';\r\n\r\nfunction DescriptionListItemDescription(props) {\r\n const {\r\n className,\r\n children\r\n } = props;\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nDescriptionListItemDescription.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n children: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.node])\r\n};\r\n\r\nDescriptionListItemDescription.defaultProps = {\r\n className: styles.description\r\n};\r\n\r\nexport default DescriptionListItemDescription;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"description\":\"DescriptionListItemDescription-description-IZlGY\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styles from './DescriptionListItemTitle.css';\r\n\r\nfunction DescriptionListItemTitle(props) {\r\n const {\r\n className,\r\n children\r\n } = props;\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nDescriptionListItemTitle.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n children: PropTypes.string\r\n};\r\n\r\nDescriptionListItemTitle.defaultProps = {\r\n className: styles.title\r\n};\r\n\r\nexport default DescriptionListItemTitle;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"DescriptionListItemTitle-title-br1UE\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport DescriptionListItemDescription from './DescriptionListItemDescription';\r\nimport DescriptionListItemTitle from './DescriptionListItemTitle';\r\n\r\nclass DescriptionListItem extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n titleClassName,\r\n descriptionClassName,\r\n title,\r\n data\r\n } = this.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\n\r\nDescriptionListItem.propTypes = {\r\n className: PropTypes.string,\r\n titleClassName: PropTypes.string,\r\n descriptionClassName: PropTypes.string,\r\n title: PropTypes.string,\r\n data: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.node])\r\n};\r\n\r\nexport default DescriptionListItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"description\":\"HistoryDetails-description-vyeNV DescriptionListItemDescription-description-IZlGY\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';\r\nimport Link from 'Components/Link/Link';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './HistoryDetails.css';\r\n\r\nfunction HistoryDetails(props) {\r\n const {\r\n indexer,\r\n eventType,\r\n date,\r\n data,\r\n shortDateFormat,\r\n timeFormat\r\n } = props;\r\n\r\n if (eventType === 'indexerQuery' || eventType === 'indexerRss') {\r\n const {\r\n query,\r\n queryResults,\r\n categories,\r\n limit,\r\n offset,\r\n source,\r\n host,\r\n url,\r\n elapsedTime,\r\n cached\r\n } = data;\r\n\r\n return (\r\n \r\n \r\n\r\n {\r\n indexer ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n data ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n data ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n limit ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n offset ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n data ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n data ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n data ?\r\n {translate('Link')} : '-'}\r\n /> :\r\n null\r\n }\r\n\r\n {\r\n elapsedTime ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n date ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (eventType === 'releaseGrabbed') {\r\n const {\r\n source,\r\n host,\r\n grabTitle,\r\n url,\r\n publishedDate,\r\n infoUrl,\r\n downloadClient,\r\n downloadClientName,\r\n elapsedTime,\r\n grabMethod\r\n } = data;\r\n\r\n const downloadClientNameInfo = downloadClientName ?? downloadClient;\r\n\r\n return (\r\n \r\n {\r\n indexer ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n data ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n data ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n data ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n infoUrl ?\r\n {infoUrl}}\r\n /> :\r\n null\r\n }\r\n\r\n {\r\n publishedDate ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n downloadClientNameInfo ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n data ?\r\n {translate('Link')} : '-'}\r\n /> :\r\n null\r\n }\r\n\r\n {\r\n elapsedTime ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n grabMethod ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n date ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (eventType === 'indexerAuth') {\r\n const { elapsedTime } = data;\r\n\r\n return (\r\n \r\n {\r\n indexer ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n elapsedTime ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n date ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n {\r\n date ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n}\r\n\r\nHistoryDetails.propTypes = {\r\n indexer: PropTypes.object.isRequired,\r\n eventType: PropTypes.string.isRequired,\r\n date: PropTypes.string.isRequired,\r\n data: PropTypes.object.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n timeFormat: PropTypes.string.isRequired\r\n};\r\n\r\nexport default HistoryDetails;\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 translate from 'Utilities/String/translate';\r\nimport HistoryDetails from './HistoryDetails';\r\n\r\nfunction getHeaderTitle(eventType) {\r\n switch (eventType) {\r\n case 'indexerQuery':\r\n return 'Indexer Query';\r\n case 'releaseGrabbed':\r\n return 'Release Grabbed';\r\n case 'indexerAuth':\r\n return 'Indexer Auth Attempt';\r\n case 'indexerRss':\r\n return 'Indexer Rss Query';\r\n default:\r\n return 'Unknown';\r\n }\r\n}\r\n\r\nfunction HistoryDetailsModal(props) {\r\n const {\r\n isOpen,\r\n eventType,\r\n indexer,\r\n date,\r\n data,\r\n shortDateFormat,\r\n timeFormat,\r\n onModalClose\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {getHeaderTitle(eventType)}\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\nHistoryDetailsModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n eventType: PropTypes.string.isRequired,\r\n indexer: PropTypes.object.isRequired,\r\n date: PropTypes.string.isRequired,\r\n data: PropTypes.object.isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nHistoryDetailsModal.defaultProps = {\r\n isMarkingAsFailed: false\r\n};\r\n\r\nexport default HistoryDetailsModal;\r\n","export const IMDB_ID = 'imdbId';\r\nexport const TMDB_ID = 'tmdbId';\r\nexport const TVDB_ID = 'tvdbId';\r\nexport const TRAKT_ID = 'traktId';\r\nexport const R_ID = 'rId';\r\nexport const TVMAZE_ID = 'tvMazeId';\r\nexport const SEASON = 'season';\r\nexport const EPISODE = 'episode';\r\nexport const ARTIST = 'artist';\r\nexport const ALBUM = 'album';\r\nexport const LABEL = 'label';\r\nexport const TRACK = 'track';\r\nexport const YEAR = 'year';\r\nexport const GENRE = 'genre';\r\nexport const AUTHOR = 'author';\r\nexport const TITLE = 'title';\r\nexport const PUBLISHER = 'publisher';\r\n","import PropTypes from 'prop-types';\r\nimport 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 styles from './HistoryEventTypeCell.css';\r\n\r\nfunction getIconName(eventType) {\r\n switch (eventType) {\r\n case 'indexerQuery':\r\n return icons.SEARCH;\r\n case 'releaseGrabbed':\r\n return icons.DOWNLOAD;\r\n case 'indexerAuth':\r\n return icons.LOCK;\r\n case 'indexerRss':\r\n return icons.RSS;\r\n default:\r\n return icons.UNKNOWN;\r\n }\r\n}\r\n\r\nfunction getIconKind(successful, redirect) {\r\n if (redirect) {\r\n return kinds.INFO;\r\n } else if (!successful) {\r\n return kinds.DANGER;\r\n }\r\n\r\n return kinds.DEFAULT;\r\n}\r\n\r\nfunction getTooltip(eventType, data, indexer, redirect) {\r\n switch (eventType) {\r\n case 'indexerQuery':\r\n return `Query \"${data.query}\" sent to ${indexer.name}`;\r\n case 'releaseGrabbed':\r\n return redirect ? `Release grabbed via redirect from ${indexer.name}` : `Release grabbed from ${indexer.name}`;\r\n case 'indexerAuth':\r\n return `Auth attempted for ${indexer.name}`;\r\n case 'indexerRss':\r\n return `RSS query for ${indexer.name}`;\r\n default:\r\n return 'Unknown event';\r\n }\r\n}\r\n\r\nfunction HistoryEventTypeCell({ eventType, successful, data, indexer }) {\r\n const { grabMethod } = data;\r\n const redirect = grabMethod && grabMethod.toLowerCase() === 'redirect';\r\n\r\n const iconName = getIconName(eventType);\r\n const iconKind = getIconKind(successful, redirect);\r\n const tooltip = getTooltip(eventType, data, indexer, redirect);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nHistoryEventTypeCell.propTypes = {\r\n eventType: PropTypes.string.isRequired,\r\n successful: PropTypes.bool.isRequired,\r\n data: PropTypes.object,\r\n indexer: PropTypes.object\r\n};\r\n\r\nHistoryEventTypeCell.defaultProps = {\r\n data: {}\r\n};\r\n\r\nexport default HistoryEventTypeCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"HistoryEventTypeCell-cell-ERD4g TableRowCell-cell-giPrj\"};","import React from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport { HistoryQueryType } from 'typings/History';\r\nimport styles from './HistoryRowParameter.css';\r\n\r\ninterface HistoryRowParameterProps {\r\n title: string;\r\n value: string;\r\n queryType: HistoryQueryType;\r\n}\r\n\r\nfunction HistoryRowParameter(props: HistoryRowParameterProps) {\r\n const { title, value, queryType } = props;\r\n\r\n const type = title.toLowerCase();\r\n\r\n let link = null;\r\n\r\n if (type === 'imdb') {\r\n link = {value};\r\n } else if (type === 'tmdb') {\r\n link = (\r\n \r\n {value}\r\n \r\n );\r\n } else if (type === 'tvdb') {\r\n link = (\r\n \r\n {value}\r\n \r\n );\r\n } else if (type === 'tvmaze') {\r\n link = {value};\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {title}\r\n
\r\n\r\n
{link ? link : value}
\r\n
\r\n );\r\n}\r\n\r\nexport default HistoryRowParameter;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"parameter\":\"HistoryRowParameter-parameter-INOeN\",\"info\":\"HistoryRowParameter-info-av4Js\",\"value\":\"HistoryRowParameter-value-pnSDQ\"};","// extracted by mini-css-extract-plugin\nexport default {\"query\":\"HistoryRow-query-EZU_F TableRowCell-cell-giPrj\",\"elapsedTime\":\"HistoryRow-elapsedTime-Ruq4Y TableRowCell-cell-giPrj\",\"indexer\":\"HistoryRow-indexer-Opqjj TableRowCell-cell-giPrj\",\"categories\":\"HistoryRow-categories-r3_oe TableRowCell-cell-giPrj\",\"source\":\"HistoryRow-source-fpVmc TableRowCell-cell-giPrj\",\"date\":\"HistoryRow-date-KZmFx TableRowCell-cell-giPrj\",\"releaseGroup\":\"HistoryRow-releaseGroup-xWht_ TableRowCell-cell-giPrj\",\"details\":\"HistoryRow-details-XZyhR TableRowCell-cell-giPrj\",\"parametersContent\":\"HistoryRow-parametersContent-mZQTl\"};","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 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 CapabilitiesLabel from 'Indexer/Index/Table/CapabilitiesLabel';\r\nimport translate from 'Utilities/String/translate';\r\nimport HistoryDetailsModal from './Details/HistoryDetailsModal';\r\nimport * as historyDataTypes from './historyDataTypes';\r\nimport HistoryEventTypeCell from './HistoryEventTypeCell';\r\nimport HistoryRowParameter from './HistoryRowParameter';\r\nimport styles from './HistoryRow.css';\r\n\r\nexport const historyParameters = [\r\n { key: historyDataTypes.IMDB_ID, title: 'IMDb' },\r\n { key: historyDataTypes.TMDB_ID, title: 'TMDb' },\r\n { key: historyDataTypes.TVDB_ID, title: 'TVDb' },\r\n { key: historyDataTypes.TRAKT_ID, title: 'Trakt' },\r\n { key: historyDataTypes.R_ID, title: 'TvRage' },\r\n { key: historyDataTypes.TVMAZE_ID, title: 'TvMaze' },\r\n {\r\n key: historyDataTypes.SEASON,\r\n get title() {\r\n return translate('Season');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.EPISODE,\r\n get title() {\r\n return translate('Episode');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.ARTIST,\r\n get title() {\r\n return translate('Artist');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.ALBUM,\r\n get title() {\r\n return translate('Album');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.LABEL,\r\n get title() {\r\n return translate('Label');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.TRACK,\r\n get title() {\r\n return translate('Track');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.YEAR,\r\n get title() {\r\n return translate('Year');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.GENRE,\r\n get title() {\r\n return translate('Genre');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.AUTHOR,\r\n get title() {\r\n return translate('Author');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.TITLE,\r\n get title() {\r\n return translate('Title');\r\n }\r\n },\r\n {\r\n key: historyDataTypes.PUBLISHER,\r\n get title() {\r\n return translate('Publisher');\r\n }\r\n }\r\n];\r\n\r\nclass HistoryRow 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 componentDidUpdate(prevProps) {\r\n if (\r\n prevProps.isMarkingAsFailed &&\r\n !this.props.isMarkingAsFailed &&\r\n !this.props.markAsFailedError\r\n ) {\r\n this.setState({ isDetailsModalOpen: false });\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onSearchPress = () => {\r\n const {\r\n indexer,\r\n data\r\n } = this.props;\r\n\r\n const { query, queryType, limit, offset } = data;\r\n\r\n let searchQuery = query;\r\n let categories = [];\r\n\r\n if (data.categories) {\r\n categories = data.categories.split(',').map((item) => parseInt(item));\r\n }\r\n\r\n const searchParams = [\r\n historyDataTypes.IMDB_ID,\r\n historyDataTypes.TMDB_ID,\r\n historyDataTypes.TVDB_ID,\r\n historyDataTypes.TRAKT_ID,\r\n historyDataTypes.R_ID,\r\n historyDataTypes.TVMAZE_ID,\r\n historyDataTypes.SEASON,\r\n historyDataTypes.EPISODE,\r\n historyDataTypes.ARTIST,\r\n historyDataTypes.ALBUM,\r\n historyDataTypes.LABEL,\r\n historyDataTypes.TRACK,\r\n historyDataTypes.YEAR,\r\n historyDataTypes.GENRE,\r\n historyDataTypes.AUTHOR,\r\n historyDataTypes.TITLE,\r\n historyDataTypes.PUBLISHER\r\n ]\r\n .reduce((acc, key) => {\r\n if (key in data && data[key].length > 0) {\r\n const value = data[key];\r\n\r\n acc.push({ key, value });\r\n }\r\n\r\n return acc;\r\n }, [])\r\n .map((item) => `{${item.key}:${item.value}}`)\r\n .join('')\r\n ;\r\n\r\n if (searchParams.length > 0) {\r\n searchQuery += `${searchParams}`;\r\n }\r\n\r\n this.props.onSearchPress(searchQuery, indexer.id, categories, queryType, parseInt(limit), parseInt(offset));\r\n };\r\n\r\n onDetailsPress = () => {\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 indexer,\r\n eventType,\r\n date,\r\n data,\r\n successful,\r\n isMarkingAsFailed,\r\n columns,\r\n shortDateFormat,\r\n timeFormat,\r\n onMarkAsFailedPress\r\n } = this.props;\r\n\r\n if (!indexer) {\r\n return null;\r\n }\r\n\r\n const parameters = historyParameters.filter((parameter) => parameter.key in data && data[parameter.key]);\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 === 'eventType') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'indexer') {\r\n return (\r\n \r\n {indexer.name}\r\n \r\n );\r\n }\r\n\r\n if (name === 'query') {\r\n return (\r\n \r\n {data.query}\r\n \r\n );\r\n }\r\n\r\n if (name === 'parameters') {\r\n return (\r\n \r\n
\r\n {parameters.map((parameter) => {\r\n return (\r\n \r\n );\r\n }\r\n )}\r\n
\r\n
\r\n );\r\n }\r\n\r\n if (name === 'grabTitle') {\r\n return (\r\n \r\n {\r\n data.grabTitle ?\r\n data.grabTitle :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'queryType') {\r\n return (\r\n \r\n {\r\n data.queryType ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'categories') {\r\n return (\r\n \r\n {\r\n data.categories ?\r\n :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'source') {\r\n return (\r\n \r\n {\r\n data.source ?\r\n data.source :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'host') {\r\n return (\r\n \r\n {\r\n data.host ?\r\n data.host :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'elapsedTime') {\r\n return (\r\n \r\n {\r\n data.elapsedTime ?\r\n `${data.elapsedTime}ms` :\r\n null\r\n }\r\n {\r\n data.cached === '1' ?\r\n ' (cached)' :\r\n null\r\n }\r\n \r\n );\r\n }\r\n\r\n if (name === 'date') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (name === 'details') {\r\n return (\r\n \r\n \r\n\r\n {\r\n eventType === 'indexerQuery' ?\r\n :\r\n null\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\nHistoryRow.propTypes = {\r\n indexerId: PropTypes.number,\r\n indexer: PropTypes.object.isRequired,\r\n eventType: PropTypes.string.isRequired,\r\n successful: PropTypes.bool.isRequired,\r\n date: PropTypes.string.isRequired,\r\n data: PropTypes.object.isRequired,\r\n isMarkingAsFailed: PropTypes.bool,\r\n markAsFailedError: PropTypes.object,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n shortDateFormat: PropTypes.string.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n onMarkAsFailedPress: PropTypes.func.isRequired,\r\n onSearchPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default HistoryRow;\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 { fetchHistory, markAsFailed } from 'Store/Actions/historyActions';\r\nimport { setSearchDefault } from 'Store/Actions/releaseActions';\r\nimport createIndexerSelector from 'Store/Selectors/createIndexerSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport HistoryRow from './HistoryRow';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createIndexerSelector(),\r\n createUISettingsSelector(),\r\n (indexer, uiSettings) => {\r\n return {\r\n indexer,\r\n shortDateFormat: uiSettings.shortDateFormat,\r\n timeFormat: uiSettings.timeFormat\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchHistory,\r\n markAsFailed,\r\n setSearchDefault,\r\n push\r\n};\r\n\r\nclass HistoryRowConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidUpdate(prevProps) {\r\n if (\r\n prevProps.isMarkingAsFailed &&\r\n !this.props.isMarkingAsFailed &&\r\n !this.props.markAsFailedError\r\n ) {\r\n this.props.fetchHistory();\r\n }\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onSearchPress = (query, indexerId, categories, type, limit, offset) => {\r\n this.props.setSearchDefault(_.pickBy({\r\n searchQuery: query,\r\n searchIndexerIds: [indexerId],\r\n searchCategories: categories,\r\n searchType: type,\r\n searchLimit: limit,\r\n searchOffset: offset\r\n }));\r\n this.props.push(`${window.Prowlarr.urlBase}/search`);\r\n };\r\n\r\n onMarkAsFailedPress = () => {\r\n this.props.markAsFailed({ 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\n\r\nHistoryRowConnector.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n isMarkingAsFailed: PropTypes.bool,\r\n markAsFailedError: PropTypes.object,\r\n fetchHistory: PropTypes.func.isRequired,\r\n markAsFailed: PropTypes.func.isRequired,\r\n setSearchDefault: PropTypes.func.isRequired,\r\n push: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(HistoryRowConnector);\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 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 HistoryFilterModal from './HistoryFilterModal';\r\nimport HistoryOptionsConnector from './HistoryOptionsConnector';\r\nimport HistoryRowConnector from './HistoryRowConnector';\r\n\r\nclass History 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 isClearHistoryModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onClearHistoryPress = () => {\r\n this.setState({ isClearHistoryModalOpen: true });\r\n };\r\n\r\n onClearHistoryModalClose = () => {\r\n this.setState({ isClearHistoryModalOpen: false });\r\n };\r\n\r\n onConfirmClearHistory = () => {\r\n this.setState({ isClearHistoryModalOpen: false });\r\n this.props.onClearHistoryPress();\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 isHistoryClearing,\r\n error,\r\n isIndexersFetching,\r\n isIndexersPopulated,\r\n indexersError,\r\n items,\r\n columns,\r\n selectedFilterKey,\r\n filters,\r\n customFilters,\r\n totalRecords,\r\n onFilterSelect,\r\n onFirstPagePress,\r\n onClearHistoryPress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const isFetchingAny = isFetching || isIndexersFetching;\r\n const isAllPopulated = isPopulated && (isIndexersPopulated || !items.length);\r\n const hasError = error || indexersError;\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 isFetchingAny && !isAllPopulated &&\r\n \r\n }\r\n\r\n {\r\n !isFetchingAny && hasError &&\r\n \r\n {translate('UnableToLoadHistory')}\r\n \r\n }\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 episodes to populate because they are never coming.\r\n\r\n isPopulated && !hasError && !items.length &&\r\n \r\n {translate('NoHistoryFound')}\r\n \r\n }\r\n\r\n {\r\n isAllPopulated && !hasError && !!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\n }\r\n}\r\n\r\nHistory.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n isHistoryClearing: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n isIndexersFetching: PropTypes.bool.isRequired,\r\n isIndexersPopulated: PropTypes.bool.isRequired,\r\n indexersError: PropTypes.object,\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 totalRecords: PropTypes.number,\r\n onFilterSelect: PropTypes.func.isRequired,\r\n onFirstPagePress: PropTypes.func.isRequired,\r\n onClearHistoryPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default History;\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 historyActions from 'Store/Actions/historyActions';\r\nimport { createCustomFiltersSelector } from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';\r\nimport History from './History';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.history,\r\n (state) => state.indexers,\r\n createCustomFiltersSelector('history'),\r\n createCommandExecutingSelector(commandNames.CLEAR_HISTORY),\r\n (history, indexers, customFilters, isHistoryClearing) => {\r\n return {\r\n isIndexersFetching: indexers.isFetching,\r\n isIndexersPopulated: indexers.isPopulated,\r\n indexersError: indexers.error,\r\n isHistoryClearing,\r\n customFilters,\r\n ...history\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n executeCommand,\r\n ...historyActions\r\n};\r\n\r\nclass HistoryConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n const {\r\n useCurrentPage,\r\n fetchHistory,\r\n gotoHistoryFirstPage\r\n } = this.props;\r\n\r\n registerPagePopulator(this.repopulate);\r\n\r\n if (useCurrentPage) {\r\n fetchHistory();\r\n } else {\r\n gotoHistoryFirstPage();\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.isHistoryClearing && !this.props.isHistoryClearing) {\r\n this.props.gotoHistoryFirstPage();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n unregisterPagePopulator(this.repopulate);\r\n this.props.clearHistory();\r\n }\r\n\r\n //\r\n // Control\r\n\r\n repopulate = () => {\r\n this.props.fetchHistory();\r\n };\r\n\r\n //\r\n // Listeners\r\n\r\n onFirstPagePress = () => {\r\n this.props.gotoHistoryFirstPage();\r\n };\r\n\r\n onPreviousPagePress = () => {\r\n this.props.gotoHistoryPreviousPage();\r\n };\r\n\r\n onNextPagePress = () => {\r\n this.props.gotoHistoryNextPage();\r\n };\r\n\r\n onLastPagePress = () => {\r\n this.props.gotoHistoryLastPage();\r\n };\r\n\r\n onPageSelect = (page) => {\r\n this.props.gotoHistoryPage({ page });\r\n };\r\n\r\n onSortPress = (sortKey) => {\r\n this.props.setHistorySort({ sortKey });\r\n };\r\n\r\n onFilterSelect = (selectedFilterKey) => {\r\n this.props.setHistoryFilter({ selectedFilterKey });\r\n };\r\n\r\n onClearHistoryPress = () => {\r\n this.props.executeCommand({ name: commandNames.CLEAR_HISTORY });\r\n };\r\n\r\n onTableOptionChange = (payload) => {\r\n this.props.setHistoryTableOption(payload);\r\n\r\n if (payload.pageSize) {\r\n this.props.gotoHistoryFirstPage();\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\nHistoryConnector.propTypes = {\r\n useCurrentPage: PropTypes.bool.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n fetchHistory: PropTypes.func.isRequired,\r\n clearHistory: PropTypes.func.isRequired,\r\n isHistoryClearing: PropTypes.bool.isRequired,\r\n gotoHistoryFirstPage: PropTypes.func.isRequired,\r\n gotoHistoryPreviousPage: PropTypes.func.isRequired,\r\n gotoHistoryNextPage: PropTypes.func.isRequired,\r\n gotoHistoryLastPage: PropTypes.func.isRequired,\r\n gotoHistoryPage: PropTypes.func.isRequired,\r\n setHistorySort: PropTypes.func.isRequired,\r\n setHistoryFilter: PropTypes.func.isRequired,\r\n setHistoryTableOption: PropTypes.func.isRequired,\r\n executeCommand: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withCurrentPage(\r\n connect(createMapStateToProps, mapDispatchToProps)(HistoryConnector)\r\n);\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, idProp = 'id') {\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][idProp]] = 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 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 this.setState({ height });\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\"};","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\"};","const scrollPositions: Record = {\r\n indexerIndex: 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","enum SortDirection {\r\n Ascending = 'ascending',\r\n Descending = 'descending',\r\n}\r\n\r\nexport default SortDirection;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"publicLabel\":\"PrivacyLabel-publicLabel-CIadh Label-label-DYldh\",\"semiPrivateLabel\":\"PrivacyLabel-semiPrivateLabel-kHujT Label-label-DYldh\",\"privateLabel\":\"PrivacyLabel-privateLabel-bRwnb Label-label-DYldh\"};","import React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { IndexerPrivacy } from 'Indexer/Indexer';\r\nimport firstCharToUpper from 'Utilities/String/firstCharToUpper';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './PrivacyLabel.css';\r\n\r\ninterface PrivacyLabelProps {\r\n privacy: IndexerPrivacy;\r\n}\r\n\r\nfunction PrivacyLabel({ privacy }: PrivacyLabelProps) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default PrivacyLabel;\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 {\"torrent\":\"ProtocolLabel-torrent-TS4HY Label-label-DYldh\",\"usenet\":\"ProtocolLabel-usenet-t1eky Label-label-DYldh\",\"unknown\":\"ProtocolLabel-unknown-Efv0d 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","import React, { useCallback } from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport TableRowButton from 'Components/Table/TableRowButton';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport { icons } from 'Helpers/Props';\r\nimport CapabilitiesLabel from 'Indexer/Index/Table/CapabilitiesLabel';\r\nimport PrivacyLabel from 'Indexer/Index/Table/PrivacyLabel';\r\nimport ProtocolLabel from 'Indexer/Index/Table/ProtocolLabel';\r\nimport { IndexerCapabilities, IndexerPrivacy } from 'Indexer/Indexer';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './SelectIndexerRow.css';\r\n\r\ninterface SelectIndexerRowProps {\r\n name: string;\r\n protocol: DownloadProtocol;\r\n privacy: IndexerPrivacy;\r\n language: string;\r\n description: string;\r\n capabilities: IndexerCapabilities;\r\n implementation: string;\r\n implementationName: string;\r\n isExistingIndexer: boolean;\r\n onIndexerSelect(...args: unknown[]): void;\r\n}\r\n\r\nfunction SelectIndexerRow(props: SelectIndexerRowProps) {\r\n const {\r\n name,\r\n protocol,\r\n privacy,\r\n language,\r\n description,\r\n capabilities,\r\n implementation,\r\n implementationName,\r\n isExistingIndexer,\r\n onIndexerSelect,\r\n } = props;\r\n\r\n const onPress = useCallback(() => {\r\n onIndexerSelect({ implementation, implementationName, name });\r\n }, [implementation, implementationName, name, onIndexerSelect]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n {name}\r\n {isExistingIndexer ? (\r\n \r\n ) : null}\r\n \r\n\r\n {language}\r\n\r\n {description}\r\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 SelectIndexerRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"protocol\":\"SelectIndexerRow-protocol-pjBkz TableRowCell-cell-giPrj\",\"alreadyExistsIcon\":\"SelectIndexerRow-alreadyExistsIcon-SWUCw\"};","// extracted by mini-css-extract-plugin\nexport default {\"indexers\":\"AddIndexerModalContent-indexers-UEwYW\",\"modalBody\":\"AddIndexerModalContent-modalBody-bbnc3 ModalBody-modalBody-RVK6D\",\"filterInput\":\"AddIndexerModalContent-filterInput-w5LZg TextInput-input-svfXu Input-input-KWeec\",\"notice\":\"AddIndexerModalContent-notice-eBkhm Alert-alert-_KgnQ\",\"alert\":\"AddIndexerModalContent-alert-HyA6X Alert-alert-_KgnQ\",\"scroller\":\"AddIndexerModalContent-scroller-CJ7Mn\",\"filterRow\":\"AddIndexerModalContent-filterRow-O3EmC\",\"filterContainer\":\"AddIndexerModalContent-filterContainer-_iWzk\",\"filterLabel\":\"AddIndexerModalContent-filterLabel-tH1ub\",\"modalFooter\":\"AddIndexerModalContent-modalFooter-SONrb ModalFooter-modalFooter-wjkx5\",\"available\":\"AddIndexerModalContent-available-s5F8I\"};","import { some } 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 IndexerAppState from 'App/State/IndexerAppState';\r\nimport Alert from 'Components/Alert';\r\nimport EnhancedSelectInput from 'Components/Form/EnhancedSelectInput';\r\nimport NewznabCategorySelectInputConnector from 'Components/Form/NewznabCategorySelectInputConnector';\r\nimport TextInput from 'Components/Form/TextInput';\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 Scroller from 'Components/Scroller/Scroller';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport { kinds, scrollDirections } from 'Helpers/Props';\r\nimport Indexer, { IndexerCategory } from 'Indexer/Indexer';\r\nimport {\r\n fetchIndexerSchema,\r\n selectIndexerSchema,\r\n setIndexerSchemaSort,\r\n} from 'Store/Actions/indexerActions';\r\nimport createAllIndexersSelector from 'Store/Selectors/createAllIndexersSelector';\r\nimport createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport { SortCallback } from 'typings/callbacks';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport SelectIndexerRow from './SelectIndexerRow';\r\nimport styles from './AddIndexerModalContent.css';\r\n\r\nconst COLUMNS = [\r\n {\r\n name: 'protocol',\r\n label: () => translate('Protocol'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'sortName',\r\n label: () => translate('Name'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'language',\r\n label: () => translate('Language'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'description',\r\n label: () => translate('Description'),\r\n isSortable: false,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'privacy',\r\n label: () => translate('Privacy'),\r\n isSortable: true,\r\n isVisible: true,\r\n },\r\n {\r\n name: 'categories',\r\n label: () => translate('Categories'),\r\n isSortable: false,\r\n isVisible: true,\r\n },\r\n];\r\n\r\nconst PROTOCOLS = [\r\n {\r\n key: 'torrent',\r\n value: 'torrent',\r\n },\r\n {\r\n key: 'usenet',\r\n value: 'nzb',\r\n },\r\n];\r\n\r\nconst PRIVACY_LEVELS = [\r\n {\r\n key: 'private',\r\n get value() {\r\n return translate('Private');\r\n },\r\n },\r\n {\r\n key: 'semiPrivate',\r\n get value() {\r\n return translate('SemiPrivate');\r\n },\r\n },\r\n {\r\n key: 'public',\r\n get value() {\r\n return translate('Public');\r\n },\r\n },\r\n];\r\n\r\ninterface IndexerSchema extends Indexer {\r\n isExistingIndexer: boolean;\r\n}\r\n\r\nfunction createAddIndexersSelector() {\r\n return createSelector(\r\n createClientSideCollectionSelector('indexers.schema'),\r\n createAllIndexersSelector(),\r\n (indexers: IndexerAppState, allIndexers) => {\r\n const { isFetching, isPopulated, error, items, sortDirection, sortKey } =\r\n indexers;\r\n\r\n const indexerList: IndexerSchema[] = items.map((item) => {\r\n const { definitionName } = item;\r\n return {\r\n ...item,\r\n isExistingIndexer: some(allIndexers, { definitionName }),\r\n };\r\n });\r\n\r\n return {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n indexers: indexerList,\r\n sortKey,\r\n sortDirection,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface AddIndexerModalContentProps {\r\n onSelectIndexer(): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction AddIndexerModalContent(props: AddIndexerModalContentProps) {\r\n const { onSelectIndexer, onModalClose } = props;\r\n\r\n const { isFetching, isPopulated, error, indexers, sortKey, sortDirection } =\r\n useSelector(createAddIndexersSelector());\r\n const dispatch = useDispatch();\r\n\r\n const [filter, setFilter] = useState('');\r\n const [filterProtocols, setFilterProtocols] = useState([]);\r\n const [filterLanguages, setFilterLanguages] = useState([]);\r\n const [filterPrivacyLevels, setFilterPrivacyLevels] = useState([]);\r\n const [filterCategories, setFilterCategories] = useState([]);\r\n\r\n useEffect(\r\n () => {\r\n dispatch(fetchIndexerSchema());\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\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 onFilterProtocolsChange = useCallback(\r\n ({ value }: { value: string[] }) => {\r\n setFilterProtocols(value);\r\n },\r\n [setFilterProtocols]\r\n );\r\n\r\n const onFilterLanguagesChange = useCallback(\r\n ({ value }: { value: string[] }) => {\r\n setFilterLanguages(value);\r\n },\r\n [setFilterLanguages]\r\n );\r\n\r\n const onFilterPrivacyLevelsChange = useCallback(\r\n ({ value }: { value: string[] }) => {\r\n setFilterPrivacyLevels(value);\r\n },\r\n [setFilterPrivacyLevels]\r\n );\r\n\r\n const onFilterCategoriesChange = useCallback(\r\n ({ value }: { value: number[] }) => {\r\n setFilterCategories(value);\r\n },\r\n [setFilterCategories]\r\n );\r\n\r\n const onIndexerSelect = useCallback(\r\n ({\r\n implementation,\r\n implementationName,\r\n name,\r\n }: {\r\n implementation: string;\r\n implementationName: string;\r\n name: string;\r\n }) => {\r\n dispatch(\r\n selectIndexerSchema({\r\n implementation,\r\n implementationName,\r\n name,\r\n })\r\n );\r\n\r\n onSelectIndexer();\r\n },\r\n [dispatch, onSelectIndexer]\r\n );\r\n\r\n const onSortPress = useCallback(\r\n (sortKey, sortDirection) => {\r\n dispatch(setIndexerSchemaSort({ sortKey, sortDirection }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const languages = useMemo(\r\n () =>\r\n Array.from(new Set(indexers.map(({ language }) => language)))\r\n .map((language) => ({ key: language, value: language }))\r\n .sort(sortByProp('value')),\r\n [indexers]\r\n );\r\n\r\n const filteredIndexers = useMemo(() => {\r\n const flat = ({\r\n id,\r\n subCategories = [],\r\n }: {\r\n id: number;\r\n subCategories: IndexerCategory[];\r\n }): number[] => [id, ...subCategories.flatMap(flat)];\r\n\r\n return indexers.filter((indexer) => {\r\n if (\r\n filter.length &&\r\n !indexer.name.toLowerCase().includes(filter.toLocaleLowerCase()) &&\r\n !indexer.description.toLowerCase().includes(filter.toLocaleLowerCase())\r\n ) {\r\n return false;\r\n }\r\n\r\n if (\r\n filterProtocols.length &&\r\n !filterProtocols.includes(indexer.protocol)\r\n ) {\r\n return false;\r\n }\r\n\r\n if (\r\n filterLanguages.length &&\r\n !filterLanguages.includes(indexer.language)\r\n ) {\r\n return false;\r\n }\r\n\r\n if (\r\n filterPrivacyLevels.length &&\r\n !filterPrivacyLevels.includes(indexer.privacy)\r\n ) {\r\n return false;\r\n }\r\n\r\n if (filterCategories.length) {\r\n const { categories = [] } = indexer.capabilities || {};\r\n\r\n const flatCategories = categories\r\n .filter((item) => item.id < 100000)\r\n .flatMap(flat);\r\n\r\n if (\r\n !filterCategories.every((categoryId) =>\r\n flatCategories.includes(categoryId)\r\n )\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n }, [\r\n indexers,\r\n filter,\r\n filterProtocols,\r\n filterLanguages,\r\n filterPrivacyLevels,\r\n filterCategories,\r\n ]);\r\n\r\n const errorMessage = getErrorMessage(\r\n error,\r\n translate('UnableToLoadIndexers')\r\n );\r\n\r\n return (\r\n \r\n {translate('AddIndexer')}\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \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('ProwlarrSupportsAnyIndexer')}
\r\n
\r\n\r\n \r\n {isFetching ? : null}\r\n\r\n {error ? (\r\n \r\n {errorMessage}\r\n \r\n ) : null}\r\n\r\n {isPopulated && !!indexers.length ? (\r\n \r\n \r\n {filteredIndexers.map((indexer) => (\r\n \r\n ))}\r\n \r\n \r\n ) : null}\r\n\r\n {isPopulated && !!indexers.length && !filteredIndexers.length ? (\r\n \r\n {translate('NoIndexersFound')}\r\n \r\n ) : null}\r\n \r\n \r\n\r\n \r\n
\r\n {isPopulated\r\n ? translate('CountIndexersAvailable', {\r\n count: filteredIndexers.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\n\r\nexport default AddIndexerModalContent;\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 { clearIndexerSchema } from 'Store/Actions/indexerActions';\r\nimport AddIndexerModalContent from './AddIndexerModalContent';\r\nimport styles from './AddIndexerModal.css';\r\n\r\ninterface AddIndexerModalProps {\r\n isOpen: boolean;\r\n onSelectIndexer(): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction AddIndexerModal({\r\n isOpen,\r\n onSelectIndexer,\r\n onModalClose,\r\n ...otherProps\r\n}: AddIndexerModalProps) {\r\n const dispatch = useDispatch();\r\n\r\n const onModalClosePress = useCallback(() => {\r\n dispatch(clearIndexerSchema());\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 AddIndexerModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modal\":\"AddIndexerModal-modal-wy9Nh undefined\"};","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 'cardigannCaptcha':\r\n return inputTypes.CARDIGANNCAPTCHA;\r\n case 'checkbox':\r\n return inputTypes.CHECK;\r\n case 'device':\r\n return inputTypes.DEVICE;\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 '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 'info':\r\n return inputTypes.INFO;\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 hint: option.hint,\r\n parentKey: option.parentValue\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,\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 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 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 }\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 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 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 hasUsenetDownloadClients,\r\n hasTorrentDownloadClients,\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 definitionName,\r\n name,\r\n enable,\r\n redirect,\r\n supportsRss,\r\n supportsRedirect,\r\n appProfileId,\r\n tags,\r\n fields,\r\n priority,\r\n protocol,\r\n downloadClientId\r\n } = item;\r\n\r\n const indexerDisplayName = implementationName === definitionName ? implementationName : `${implementationName} (${definitionName})`;\r\n const showDownloadClientInput = downloadClientId.value > 0 || protocol.value === 'usenet' && hasUsenetDownloadClients || protocol.value === 'torrent' && hasTorrentDownloadClients;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditIndexerImplementation', { implementationName: indexerDisplayName }) : translate('AddIndexerImplementation', { implementationName: indexerDisplayName })}\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('UnableToAddANewIndexerPleaseTryAgain')}\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('Enable')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('Redirect')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SyncProfile')}\r\n\r\n \r\n \r\n\r\n {\r\n fields ?\r\n fields.map((field) => {\r\n return (\r\n \r\n );\r\n }) :\r\n null\r\n }\r\n\r\n \r\n {translate('IndexerPriority')}\r\n\r\n \r\n \r\n\r\n {showDownloadClientInput ?\r\n \r\n {translate('DownloadClient')}\r\n\r\n \r\n : null\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 hasUsenetDownloadClients: PropTypes.bool.isRequired,\r\n hasTorrentDownloadClients: PropTypes.bool.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-RgJar 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 } from 'Store/Actions/indexerActions';\r\nimport { fetchDownloadClients, toggleAdvancedSettings } from 'Store/Actions/settingsActions';\r\nimport createIndexerSchemaSelector from 'Store/Selectors/createIndexerSchemaSelector';\r\nimport EditIndexerModalContent from './EditIndexerModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n (state) => state.settings.downloadClients,\r\n createIndexerSchemaSelector(),\r\n (advancedSettings, downloadClients, indexer) => {\r\n const usenetDownloadClients = downloadClients.items.filter((downloadClient) => downloadClient.protocol === 'usenet');\r\n const torrentDownloadClients = downloadClients.items.filter((downloadClient) => downloadClient.protocol === 'torrent');\r\n\r\n return {\r\n advancedSettings,\r\n hasUsenetDownloadClients: usenetDownloadClients.length > 0,\r\n hasTorrentDownloadClients: torrentDownloadClients.length > 0,\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 dispatchFetchDownloadClients: fetchDownloadClients\r\n};\r\n\r\nclass EditIndexerModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.dispatchFetchDownloadClients();\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.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 dispatchFetchDownloadClients: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditIndexerModalContentConnector);\r\n","import _ from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\n\r\nfunction createIndexerSchemaSelector() {\r\n return createSelector(\r\n (state, { id }) => id,\r\n (state) => state.indexers,\r\n (id, section) => {\r\n if (!id) {\r\n const item = _.isArray(section.schema.items) ? section.selectedSchema : section.schema.items;\r\n const settings = selectSettings(Object.assign({ name: '' }, item), section.pendingChanges, section.saveError);\r\n\r\n const {\r\n isSaving,\r\n saveError,\r\n isTesting,\r\n pendingChanges\r\n } = section;\r\n\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error\r\n } = section.schema;\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\n}\r\n\r\nexport default createIndexerSchemaSelector;\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 ...EditIndexerModalContentConnector.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/indexerActions';\r\nimport EditIndexerModal from './EditIndexerModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n const section = '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 ...EditIndexerModal.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","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"NoIndexer-message-ru2P8 Alert-alert-_KgnQ\",\"buttonContainer\":\"NoIndexer-buttonContainer-IYXRj\"};","import React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport Button from 'Components/Link/Button';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './NoIndexer.css';\r\n\r\ninterface NoIndexerProps {\r\n totalItems: number;\r\n onAddIndexerPress(): void;\r\n}\r\n\r\nfunction NoIndexer(props: NoIndexerProps) {\r\n const { totalItems, onAddIndexerPress } = props;\r\n\r\n if (totalItems > 0) {\r\n return (\r\n \r\n {translate('AllIndexersHiddenDueToFilter')}\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n No indexers found, to get started you'll want to add a new indexer.\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default NoIndexer;\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 { 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('indexers', uiSection),\r\n (indexers) => {\r\n const items = indexers.items.map((s) => {\r\n const {\r\n id,\r\n sortName\r\n } = s;\r\n\r\n return {\r\n id,\r\n sortName\r\n };\r\n });\r\n\r\n return {\r\n ...indexers,\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 createIndexerClientSideCollectionItemsSelector(uiSection) {\r\n return createMovieEqualSelector(\r\n createUnoptimizedSelector(uiSection),\r\n (indexers) => indexers\r\n );\r\n}\r\n\r\nexport default createIndexerClientSideCollectionItemsSelector;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"footer\":\"IndexerIndexFooter-footer-iUSJy\",\"legendItem\":\"IndexerIndexFooter-legendItem-HLXLn\",\"legendItemColor\":\"IndexerIndexFooter-legendItemColor-VTrnJ\",\"disabled\":\"IndexerIndexFooter-disabled-pDQ9L IndexerIndexFooter-legendItemColor-VTrnJ\",\"enabled\":\"IndexerIndexFooter-enabled-e5T0D IndexerIndexFooter-legendItemColor-VTrnJ\",\"redirected\":\"IndexerIndexFooter-redirected-2eFpH IndexerIndexFooter-legendItemColor-VTrnJ\",\"error\":\"IndexerIndexFooter-error-chulA IndexerIndexFooter-legendItemColor-VTrnJ\",\"statistics\":\"IndexerIndexFooter-statistics-uuZ04\"};","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 IndexerAppState from 'App/State/IndexerAppState';\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 translate from 'Utilities/String/translate';\r\nimport styles from './IndexerIndexFooter.css';\r\n\r\nfunction createUnoptimizedSelector() {\r\n return createSelector(\r\n createClientSideCollectionSelector('indexers', 'indexerIndex'),\r\n (indexers: IndexerAppState) => {\r\n return indexers.items.map((s) => {\r\n const { protocol, privacy, enable } = s;\r\n\r\n return {\r\n protocol,\r\n privacy,\r\n enable,\r\n };\r\n });\r\n }\r\n );\r\n}\r\n\r\nfunction createIndexersSelector() {\r\n return createDeepEqualSelector(\r\n createUnoptimizedSelector(),\r\n (indexers) => indexers\r\n );\r\n}\r\n\r\nexport default function IndexerIndexFooter() {\r\n const indexers = useSelector(createIndexersSelector());\r\n const count = indexers.length;\r\n let enabled = 0;\r\n let torrent = 0;\r\n\r\n indexers.forEach((s) => {\r\n if (s.enable) {\r\n enabled += 1;\r\n }\r\n\r\n if (s.protocol === 'torrent') {\r\n torrent++;\r\n }\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('Enabled')}
\r\n
\r\n\r\n
\r\n
\r\n
{translate('EnabledRedirected')}
\r\n
\r\n\r\n
\r\n
\r\n
{translate('Disabled')}
\r\n
\r\n\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 \r\n\r\n \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 } 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 { setIndexerFilter } from 'Store/Actions/indexerIndexActions';\r\n\r\nfunction createIndexerSelector() {\r\n return createSelector(\r\n (state: AppState) => state.indexers.items,\r\n (indexers) => {\r\n return indexers;\r\n }\r\n );\r\n}\r\n\r\nfunction createFilterBuilderPropsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.indexerIndex.filterBuilderProps,\r\n (filterBuilderProps) => {\r\n return filterBuilderProps;\r\n }\r\n );\r\n}\r\n\r\ninterface IndexerIndexFilterModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nexport default function IndexerIndexFilterModal(\r\n props: IndexerIndexFilterModalProps\r\n) {\r\n const sectionItems = useSelector(createIndexerSelector());\r\n const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());\r\n const customFilterType = 'indexerIndex';\r\n\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSetFilter = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setIndexerFilter(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 IndexerIndexFilterModal from 'Indexer/Index/IndexerIndexFilterModal';\r\n\r\ninterface IndexerIndexFilterMenuProps {\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 IndexerIndexFilterMenu(props: IndexerIndexFilterMenuProps) {\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\nIndexerIndexFilterMenu.defaultProps = {\r\n showCustomFilters: false,\r\n};\r\n\r\nexport default IndexerIndexFilterMenu;\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 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/SortDirection';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface IndexerIndexSortMenuProps {\r\n sortKey?: string;\r\n sortDirection?: SortDirection;\r\n isDisabled: boolean;\r\n onSortSelect(sortKey: string): unknown;\r\n}\r\n\r\nfunction IndexerIndexSortMenu(props: IndexerIndexSortMenuProps) {\r\n const { sortKey, sortDirection, isDisabled, onSortSelect } = 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('Name')}\r\n \r\n\r\n \r\n {translate('Added')}\r\n \r\n\r\n \r\n {translate('SyncProfile')}\r\n \r\n\r\n \r\n {translate('Priority')}\r\n \r\n\r\n \r\n {translate('Protocol')}\r\n \r\n\r\n \r\n {translate('Privacy')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default IndexerIndexSortMenu;\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 IndexerIndexSelectAllButtonProps {\r\n label: string;\r\n isSelectMode: boolean;\r\n overflowComponent: React.FunctionComponent;\r\n}\r\n\r\nfunction IndexerIndexSelectAllButton(props: IndexerIndexSelectAllButtonProps) {\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 IndexerIndexSelectAllButton;\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\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface IndexerIndexSelectAllMenuItemProps {\r\n label: string;\r\n isSelectMode: boolean;\r\n}\r\n\r\nfunction IndexerIndexSelectAllMenuItem(\r\n props: IndexerIndexSelectAllMenuItemProps\r\n) {\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 IndexerIndexSelectAllMenuItem;\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\"};","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","import { orderBy } from 'lodash';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport { useDispatch, useSelector } 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 { kinds } from 'Helpers/Props';\r\nimport Indexer from 'Indexer/Indexer';\r\nimport { bulkDeleteIndexers } from 'Store/Actions/indexerActions';\r\nimport createAllIndexersSelector from 'Store/Selectors/createAllIndexersSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './DeleteIndexerModalContent.css';\r\n\r\ninterface DeleteIndexerModalContentProps {\r\n indexerIds: number[];\r\n onModalClose(): void;\r\n}\r\n\r\nfunction DeleteIndexerModalContent(props: DeleteIndexerModalContentProps) {\r\n const { indexerIds, onModalClose } = props;\r\n\r\n const allIndexers: Indexer[] = useSelector(createAllIndexersSelector());\r\n const dispatch = useDispatch();\r\n\r\n const indexers = useMemo((): Indexer[] => {\r\n const indexerList = indexerIds.map((id) => {\r\n return allIndexers.find((s) => s.id === id);\r\n }) as Indexer[];\r\n\r\n return orderBy(indexerList, ['sortName']);\r\n }, [indexerIds, allIndexers]);\r\n\r\n const onDeleteIndexerConfirmed = useCallback(() => {\r\n dispatch(\r\n bulkDeleteIndexers({\r\n ids: indexerIds,\r\n })\r\n );\r\n\r\n onModalClose();\r\n }, [indexerIds, dispatch, onModalClose]);\r\n\r\n return (\r\n \r\n {translate('DeleteSelectedIndexers')}\r\n\r\n \r\n
\r\n {translate('DeleteSelectedIndexersMessageText', {\r\n count: indexers.length,\r\n })}\r\n
\r\n\r\n
    \r\n {indexers.map((s) => {\r\n return (\r\n
  • \r\n {s.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\nexport default DeleteIndexerModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"DeleteIndexerModalContent-message-Cqi_H\",\"pathContainer\":\"DeleteIndexerModalContent-pathContainer-Y7sm2\",\"path\":\"DeleteIndexerModalContent-path-zHWvE\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport DeleteIndexerModalContent from './DeleteIndexerModalContent';\r\n\r\ninterface DeleteIndexerModalProps {\r\n isOpen: boolean;\r\n indexerIds: number[];\r\n onModalClose(): void;\r\n}\r\n\r\nfunction DeleteIndexerModal(props: DeleteIndexerModalProps) {\r\n const { isOpen, indexerIds, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default DeleteIndexerModal;\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, sizes } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './EditIndexerModalContent.css';\r\n\r\ninterface SavePayload {\r\n enable?: boolean;\r\n appProfileId?: number;\r\n priority?: number;\r\n minimumSeeders?: number;\r\n seedRatio?: number;\r\n seedTime?: number;\r\n packSeedTime?: number;\r\n preferMagnetUrl?: boolean;\r\n}\r\n\r\ninterface EditIndexerModalContentProps {\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: 'true',\r\n get value() {\r\n return translate('Enabled');\r\n },\r\n },\r\n {\r\n key: 'false',\r\n get value() {\r\n return translate('Disabled');\r\n },\r\n },\r\n];\r\n\r\nfunction EditIndexerModalContent(props: EditIndexerModalContentProps) {\r\n const { indexerIds, onSavePress, onModalClose } = props;\r\n\r\n const [enable, setEnable] = useState(NO_CHANGE);\r\n const [appProfileId, setAppProfileId] = useState(NO_CHANGE);\r\n const [priority, setPriority] = useState(null);\r\n const [minimumSeeders, setMinimumSeeders] = useState(\r\n null\r\n );\r\n const [seedRatio, setSeedRatio] = useState(null);\r\n const [seedTime, setSeedTime] = useState(null);\r\n const [packSeedTime, setPackSeedTime] = useState(\r\n null\r\n );\r\n const [preferMagnetUrl, setPreferMagnetUrl] = useState<\r\n null | string | boolean\r\n >(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 === 'true';\r\n }\r\n\r\n if (appProfileId !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.appProfileId = appProfileId as number;\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 (minimumSeeders !== null) {\r\n hasChanges = true;\r\n payload.minimumSeeders = minimumSeeders as number;\r\n }\r\n\r\n if (seedRatio !== null) {\r\n hasChanges = true;\r\n payload.seedRatio = seedRatio as number;\r\n }\r\n\r\n if (seedTime !== null) {\r\n hasChanges = true;\r\n payload.seedTime = seedTime as number;\r\n }\r\n\r\n if (packSeedTime !== null) {\r\n hasChanges = true;\r\n payload.packSeedTime = packSeedTime as number;\r\n }\r\n\r\n if (preferMagnetUrl !== null) {\r\n hasChanges = true;\r\n payload.preferMagnetUrl = preferMagnetUrl === 'true';\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 appProfileId,\r\n priority,\r\n minimumSeeders,\r\n seedRatio,\r\n seedTime,\r\n packSeedTime,\r\n preferMagnetUrl,\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 'appProfileId':\r\n setAppProfileId(value);\r\n break;\r\n case 'priority':\r\n setPriority(value);\r\n break;\r\n case 'minimumSeeders':\r\n setMinimumSeeders(value);\r\n break;\r\n case 'seedRatio':\r\n setSeedRatio(value);\r\n break;\r\n case 'seedTime':\r\n setSeedTime(value);\r\n break;\r\n case 'packSeedTime':\r\n setPackSeedTime(value);\r\n break;\r\n case 'preferMagnetUrl':\r\n setPreferMagnetUrl(value);\r\n break;\r\n default:\r\n console.warn(`EditIndexersModalContent Unknown Input: '${name}'`);\r\n }\r\n },\r\n [setEnable]\r\n );\r\n\r\n const onSavePressWrapper = useCallback(() => {\r\n save();\r\n }, [save]);\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('Enable')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SyncProfile')}\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('AppsMinimumSeeders')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SeedRatio')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SeedTime')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('PackSeedTime')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('PreferMagnetUrl')}\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 EditIndexerModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalFooter\":\"EditIndexerModalContent-modalFooter-z1bKA ModalFooter-modalFooter-wjkx5\",\"selected\":\"EditIndexerModalContent-selected-ocPpc\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport EditIndexerModalContent from './EditIndexerModalContent';\r\n\r\ninterface EditIndexerModalProps {\r\n isOpen: boolean;\r\n indexerIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction EditIndexerModal(props: EditIndexerModalProps) {\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 EditIndexerModal;\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 Indexer from 'Indexer/Indexer';\r\nimport createAllIndexersSelector from 'Store/Selectors/createAllIndexersSelector';\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 indexerIds: 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 { indexerIds, onModalClose, onApplyTagsPress } = props;\r\n\r\n const allIndexers: Indexer[] = useSelector(createAllIndexersSelector());\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 indexerTags = useMemo(() => {\r\n const tags = indexerIds.reduce((acc: number[], id) => {\r\n const s = allIndexers.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 }, [indexerIds, 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 { 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 {indexerTags.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 (indexerTags.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-qufMH\",\"message\":\"TagsModalContent-message-ePts3\",\"result\":\"TagsModalContent-result-uk8D0\"};","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 indexerIds: 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 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 { bulkEditIndexers } from 'Store/Actions/indexerActions';\r\nimport translate from 'Utilities/String/translate';\r\nimport getSelectedIds from 'Utilities/Table/getSelectedIds';\r\nimport DeleteIndexerModal from './Delete/DeleteIndexerModal';\r\nimport EditIndexerModal from './Edit/EditIndexerModal';\r\nimport TagsModal from './Tags/TagsModal';\r\nimport styles from './IndexerIndexSelectFooter.css';\r\n\r\ninterface SavePayload {\r\n enable?: boolean;\r\n appProfileId?: number;\r\n priority?: number;\r\n minimumSeeders?: number;\r\n seedRatio?: number;\r\n seedTime?: number;\r\n packSeedTime?: number;\r\n}\r\n\r\nconst indexersEditorSelector = createSelector(\r\n (state: AppState) => state.indexers,\r\n (indexers) => {\r\n const { isSaving, isDeleting, deleteError } = indexers;\r\n\r\n return {\r\n isSaving,\r\n isDeleting,\r\n deleteError,\r\n };\r\n }\r\n);\r\n\r\nfunction IndexerIndexSelectFooter() {\r\n const { isSaving, isDeleting, deleteError } = useSelector(\r\n indexersEditorSelector\r\n );\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\r\n const [isTagsModalOpen, setIsTagsModalOpen] = useState(false);\r\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\r\n const [isSavingIndexer, setIsSavingIndexer] = 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 indexerIds = useMemo(() => {\r\n return getSelectedIds(selectedState);\r\n }, [selectedState]);\r\n\r\n const selectedCount = indexerIds.length;\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 setIsSavingIndexer(true);\r\n setIsEditModalOpen(false);\r\n\r\n dispatch(\r\n bulkEditIndexers({\r\n ...payload,\r\n ids: indexerIds,\r\n })\r\n );\r\n },\r\n [indexerIds, 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: indexerIds,\r\n tags,\r\n applyTags,\r\n })\r\n );\r\n },\r\n [indexerIds, 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 setIsSavingIndexer(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 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('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('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\nexport default IndexerIndexSelectFooter;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"footer\":\"IndexerIndexSelectFooter-footer-DRR7G PageContentFooter-contentFooter-RHpBL\",\"buttons\":\"IndexerIndexSelectFooter-buttons-UwEGs\",\"actionButtons\":\"IndexerIndexSelectFooter-actionButtons-MmpkU\",\"deleteButtons\":\"IndexerIndexSelectFooter-deleteButtons-QBtaU\",\"selected\":\"IndexerIndexSelectFooter-selected-bDWOC\"};","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 IndexerIndexSelectModeButtonProps {\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 IndexerIndexSelectModeButton(\r\n props: IndexerIndexSelectModeButtonProps\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 IndexerIndexSelectModeButton;\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 IndexerIndexSelectModeMenuItemProps {\r\n label: string;\r\n iconName: IconDefinition;\r\n isSelectMode: boolean;\r\n onPress: () => void;\r\n}\r\n\r\nfunction IndexerIndexSelectModeMenuItem(\r\n props: IndexerIndexSelectModeMenuItemProps\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 IndexerIndexSelectModeMenuItem;\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","export default function getIndexOfFirstCharacter(items, character) {\r\n return items.findIndex((item) => {\r\n const firstCharacter = 'sortName' in item ? item.sortName.charAt(0) : item.sortTitle.charAt(0);\r\n\r\n if (character === '#') {\r\n return !isNaN(Number(firstCharacter));\r\n }\r\n\r\n return firstCharacter === character;\r\n });\r\n}\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 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 { 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, { useCallback } from 'react';\r\nimport { useDispatch, useSelector } 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 { kinds } from 'Helpers/Props';\r\nimport Indexer from 'Indexer/Indexer';\r\nimport { deleteIndexer } from 'Store/Actions/indexerActions';\r\nimport { createIndexerSelectorForHook } from 'Store/Selectors/createIndexerSelector';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface DeleteIndexerModalContentProps {\r\n indexerId: number;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction DeleteIndexerModalContent(props: DeleteIndexerModalContentProps) {\r\n const { indexerId, onModalClose } = props;\r\n\r\n const { name } = useSelector(\r\n createIndexerSelectorForHook(indexerId)\r\n ) as Indexer;\r\n const dispatch = useDispatch();\r\n\r\n const onConfirmDelete = useCallback(() => {\r\n dispatch(deleteIndexer({ id: indexerId }));\r\n\r\n onModalClose();\r\n }, [indexerId, dispatch, onModalClose]);\r\n\r\n return (\r\n \r\n \r\n {translate('Delete')} - {name}\r\n \r\n\r\n \r\n {translate('AreYouSureYouWantToDeleteIndexer', { name })}\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 DeleteIndexerModalContent;\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport DeleteIndexerModalContent from './DeleteIndexerModalContent';\r\n\r\ninterface DeleteIndexerModalProps {\r\n isOpen: boolean;\r\n indexerId: number;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction DeleteIndexerModal(props: DeleteIndexerModalProps) {\r\n const { isOpen, indexerId, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default DeleteIndexerModal;\r\n","import { createSelector } from 'reselect';\r\nimport createIndexerAppProfileSelector from 'Store/Selectors/createIndexerAppProfileSelector';\r\nimport { createIndexerSelectorForHook } from 'Store/Selectors/createIndexerSelector';\r\nimport createIndexerStatusSelector from 'Store/Selectors/createIndexerStatusSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\n\r\nfunction createIndexerIndexItemSelector(indexerId: number) {\r\n return createSelector(\r\n createIndexerSelectorForHook(indexerId),\r\n createIndexerAppProfileSelector(indexerId),\r\n createIndexerStatusSelector(indexerId),\r\n createUISettingsSelector(),\r\n (indexer, appProfile, status, uiSettings) => {\r\n return {\r\n indexer,\r\n appProfile,\r\n status,\r\n longDateFormat: uiSettings.longDateFormat,\r\n timeFormat: uiSettings.timeFormat,\r\n };\r\n }\r\n );\r\n}\r\n\r\nexport default createIndexerIndexItemSelector;\r\n","import { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport Indexer from 'Indexer/Indexer';\r\nimport { createIndexerSelectorForHook } from './createIndexerSelector';\r\n\r\nfunction createIndexerAppProfileSelector(indexerId: number) {\r\n return createSelector(\r\n (state: AppState) => state.settings.appProfiles.items,\r\n createIndexerSelectorForHook(indexerId),\r\n (appProfiles, indexer = {} as Indexer) => {\r\n return appProfiles.find((profile) => profile.id === indexer.appProfileId);\r\n }\r\n );\r\n}\r\n\r\nexport default createIndexerAppProfileSelector;\r\n","import { find } from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport { IndexerStatus } from 'Indexer/Indexer';\r\n\r\nfunction createIndexerStatusSelector(indexerId: number) {\r\n return createSelector(\r\n (state: AppState) => state.indexerStatus.items,\r\n (indexerStatus) => {\r\n return find(indexerStatus, { indexerId }) as IndexerStatus | undefined;\r\n }\r\n );\r\n}\r\n\r\nexport default createIndexerStatusSelector;\r\n","import { useSelector } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nexport function createIndexerSelector(indexerId?: number) {\r\n return createSelector(\r\n (state: AppState) => state.indexers.itemMap,\r\n (state: AppState) => state.indexers.items,\r\n (itemMap, allIndexers) => {\r\n return indexerId ? allIndexers[itemMap[indexerId]] : undefined;\r\n }\r\n );\r\n}\r\n\r\nfunction useIndexer(indexerId?: number) {\r\n return useSelector(createIndexerSelector(indexerId));\r\n}\r\n\r\nexport default useIndexer;\r\n","import React, { useCallback, useState } from 'react';\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 TableRow from 'Components/Table/TableRow';\r\nimport { icons } from 'Helpers/Props';\r\nimport HistoryDetailsModal from 'History/Details/HistoryDetailsModal';\r\nimport HistoryEventTypeCell from 'History/HistoryEventTypeCell';\r\nimport { historyParameters } from 'History/HistoryRow';\r\nimport HistoryRowParameter from 'History/HistoryRowParameter';\r\nimport Indexer from 'Indexer/Indexer';\r\nimport { HistoryData } from 'typings/History';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './IndexerHistoryRow.css';\r\n\r\ninterface IndexerHistoryRowProps {\r\n data: HistoryData;\r\n date: string;\r\n eventType: string;\r\n successful: boolean;\r\n indexer: Indexer;\r\n shortDateFormat: string;\r\n timeFormat: string;\r\n}\r\n\r\nfunction IndexerHistoryRow(props: IndexerHistoryRowProps) {\r\n const {\r\n data,\r\n date,\r\n eventType,\r\n successful,\r\n indexer,\r\n shortDateFormat,\r\n timeFormat,\r\n } = props;\r\n\r\n const [isDetailsModalOpen, setIsDetailsModalOpen] = useState(false);\r\n\r\n const onDetailsModalPress = useCallback(() => {\r\n setIsDetailsModalOpen(true);\r\n }, [setIsDetailsModalOpen]);\r\n\r\n const onDetailsModalClose = useCallback(() => {\r\n setIsDetailsModalOpen(false);\r\n }, [setIsDetailsModalOpen]);\r\n\r\n const parameters = historyParameters.filter(\r\n (parameter) =>\r\n parameter.key in data && data[parameter.key as keyof HistoryData]\r\n );\r\n\r\n return (\r\n \r\n \r\n\r\n {data.query}\r\n\r\n \r\n
\r\n {parameters.map((parameter) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n {data.source ? data.source : 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 IndexerHistoryRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"query\":\"IndexerHistoryRow-query-JSKpn TableRowCell-cell-giPrj\",\"elapsedTime\":\"IndexerHistoryRow-elapsedTime-ZtuDn TableRowCell-cell-giPrj\",\"source\":\"IndexerHistoryRow-source-_wlgT TableRowCell-cell-giPrj\",\"details\":\"IndexerHistoryRow-details-DxN16 TableRowCell-cell-giPrj\",\"parametersContent\":\"IndexerHistoryRow-parametersContent-Bj1gQ\"};","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 { IndexerHistoryAppState } from 'App/State/IndexerAppState';\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 Indexer from 'Indexer/Indexer';\r\nimport {\r\n clearIndexerHistory,\r\n fetchIndexerHistory,\r\n} from 'Store/Actions/indexerHistoryActions';\r\nimport { createIndexerSelectorForHook } from 'Store/Selectors/createIndexerSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport IndexerHistoryRow from './IndexerHistoryRow';\r\n\r\nconst columns = [\r\n {\r\n name: 'eventType',\r\n isVisible: true,\r\n },\r\n {\r\n name: 'query',\r\n label: () => translate('Query'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'parameters',\r\n label: () => translate('Parameters'),\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: 'source',\r\n label: () => translate('Source'),\r\n isVisible: true,\r\n },\r\n {\r\n name: 'details',\r\n label: () => translate('Details'),\r\n isVisible: true,\r\n },\r\n];\r\n\r\nfunction createIndexerHistorySelector() {\r\n return createSelector(\r\n (state: AppState) => state.indexerHistory,\r\n createUISettingsSelector(),\r\n (state: AppState) => state.history.pageSize,\r\n (indexerHistory: IndexerHistoryAppState, uiSettings, pageSize) => {\r\n return {\r\n ...indexerHistory,\r\n shortDateFormat: uiSettings.shortDateFormat,\r\n timeFormat: uiSettings.timeFormat,\r\n pageSize,\r\n };\r\n }\r\n );\r\n}\r\n\r\ninterface IndexerHistoryProps {\r\n indexerId: number;\r\n}\r\n\r\nfunction IndexerHistory(props: IndexerHistoryProps) {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n error,\r\n items,\r\n shortDateFormat,\r\n timeFormat,\r\n pageSize,\r\n } = useSelector(createIndexerHistorySelector());\r\n\r\n const indexer = useSelector(\r\n createIndexerSelectorForHook(props.indexerId)\r\n ) as Indexer;\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(\r\n fetchIndexerHistory({ indexerId: props.indexerId, limit: pageSize })\r\n );\r\n\r\n return () => {\r\n dispatch(clearIndexerHistory());\r\n };\r\n }, [props, pageSize, dispatch]);\r\n\r\n const hasItems = !!items.length;\r\n\r\n if (isFetching) {\r\n return ;\r\n }\r\n\r\n if (!isFetching && !!error) {\r\n return (\r\n {translate('IndexerHistoryLoadError')}\r\n );\r\n }\r\n\r\n if (isPopulated && !hasItems && !error) {\r\n return {translate('NoIndexerHistory')};\r\n }\r\n\r\n if (isPopulated && hasItems && !error) {\r\n return (\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 return null;\r\n}\r\n\r\nexport default IndexerHistory;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"description\":\"IndexerInfoModalContent-description-GJSAd DescriptionListItemDescription-description-IZlGY\",\"deleteButton\":\"IndexerInfoModalContent-deleteButton-xyKN4 Button-button-paJ9a Link-link-RInnp\",\"tabs\":\"IndexerInfoModalContent-tabs-FqRPr\",\"tabList\":\"IndexerInfoModalContent-tabList-W8CTy\",\"tab\":\"IndexerInfoModalContent-tab-nnxxt\",\"selectedTab\":\"IndexerInfoModalContent-selectedTab-UQsvr\",\"tabContent\":\"IndexerInfoModalContent-tabContent-Y4Xwu\",\"modalFooter\":\"IndexerInfoModalContent-modalFooter-QD2Ct ModalFooter-modalFooter-wjkx5\"};","import { uniqBy } from 'lodash';\r\nimport React, { useCallback, useState } from 'react';\r\nimport { Tab, TabList, TabPanel, Tabs } from 'react-tabs';\r\nimport Alert from 'Components/Alert';\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 FieldSet from 'Components/FieldSet';\r\nimport Label from 'Components/Label';\r\nimport Button from 'Components/Link/Button';\r\nimport Link from 'Components/Link/Link';\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 TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport Table from 'Components/Table/Table';\r\nimport TableBody from 'Components/Table/TableBody';\r\nimport TableRow from 'Components/Table/TableRow';\r\nimport TagListConnector from 'Components/TagListConnector';\r\nimport { kinds } from 'Helpers/Props';\r\nimport DeleteIndexerModal from 'Indexer/Delete/DeleteIndexerModal';\r\nimport EditIndexerModalConnector from 'Indexer/Edit/EditIndexerModalConnector';\r\nimport PrivacyLabel from 'Indexer/Index/Table/PrivacyLabel';\r\nimport Indexer, { IndexerCapabilities } from 'Indexer/Indexer';\r\nimport useIndexer from 'Indexer/useIndexer';\r\nimport translate from 'Utilities/String/translate';\r\nimport IndexerHistory from './History/IndexerHistory';\r\nimport styles from './IndexerInfoModalContent.css';\r\n\r\nconst TABS = ['details', 'categories', 'history', 'stats'];\r\n\r\ninterface IndexerInfoModalContentProps {\r\n indexerId: number;\r\n onModalClose(): void;\r\n onCloneIndexerPress(id: number): void;\r\n}\r\n\r\nfunction IndexerInfoModalContent(props: IndexerInfoModalContentProps) {\r\n const { indexerId, onModalClose, onCloneIndexerPress } = props;\r\n\r\n const {\r\n id,\r\n name,\r\n description,\r\n encoding,\r\n language,\r\n indexerUrls,\r\n fields,\r\n tags,\r\n protocol,\r\n privacy,\r\n capabilities = {} as IndexerCapabilities,\r\n } = useIndexer(indexerId) as Indexer;\r\n\r\n const [selectedTab, setSelectedTab] = useState(TABS[0]);\r\n const [isEditIndexerModalOpen, setIsEditIndexerModalOpen] = useState(false);\r\n const [isDeleteIndexerModalOpen, setIsDeleteIndexerModalOpen] =\r\n useState(false);\r\n\r\n const handleTabSelect = useCallback(\r\n (selectedIndex: number) => {\r\n const selectedTab = TABS[selectedIndex];\r\n setSelectedTab(selectedTab);\r\n },\r\n [setSelectedTab]\r\n );\r\n\r\n const handleEditIndexerPress = useCallback(() => {\r\n setIsEditIndexerModalOpen(true);\r\n }, [setIsEditIndexerModalOpen]);\r\n\r\n const handleEditIndexerModalClose = useCallback(() => {\r\n setIsEditIndexerModalOpen(false);\r\n }, [setIsEditIndexerModalOpen]);\r\n\r\n const handleDeleteIndexerPress = useCallback(() => {\r\n setIsEditIndexerModalOpen(false);\r\n setIsDeleteIndexerModalOpen(true);\r\n }, [setIsDeleteIndexerModalOpen]);\r\n\r\n const handleDeleteIndexerModalClose = useCallback(() => {\r\n setIsDeleteIndexerModalOpen(false);\r\n onModalClose();\r\n }, [setIsDeleteIndexerModalOpen, onModalClose]);\r\n\r\n const handleCloneIndexerPressWrapper = useCallback(() => {\r\n onCloneIndexerPress(id);\r\n onModalClose();\r\n }, [id, onCloneIndexerPress, onModalClose]);\r\n\r\n const baseUrl =\r\n fields.find((field) => field.name === 'baseUrl')?.value ??\r\n (Array.isArray(indexerUrls) ? indexerUrls[0] : undefined);\r\n\r\n const indexerUrl = baseUrl?.replace(/(:\\/\\/)api\\./, '$1');\r\n\r\n const vipExpiration =\r\n fields.find((field) => field.name === 'vipExpiration')?.value ?? undefined;\r\n\r\n return (\r\n \r\n {`${name}`}\r\n\r\n \r\n \r\n \r\n \r\n {translate('Details')}\r\n \r\n\r\n \r\n {translate('Categories')}\r\n \r\n\r\n \r\n {translate('History')}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n : '-'}\r\n />\r\n {vipExpiration ? (\r\n \r\n ) : null}\r\n \r\n {translate('IndexerSite')}\r\n \r\n \r\n {indexerUrl ? (\r\n {indexerUrl}\r\n ) : (\r\n '-'\r\n )}\r\n \r\n \r\n {protocol === 'usenet'\r\n ? translate('NewznabUrl')\r\n : translate('TorznabUrl')}\r\n \r\n \r\n {`${window.location.origin}${window.Prowlarr.urlBase}/${id}/api`}\r\n \r\n {tags.length > 0 ? (\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
\r\n
\r\n \r\n \r\n 0 ? (\r\n \r\n ) : (\r\n translate('NotSupported')\r\n )\r\n }\r\n />\r\n 0\r\n ? capabilities.tvSearchParams.map((p) => {\r\n return (\r\n \r\n );\r\n })\r\n : translate('NotSupported')\r\n }\r\n />\r\n 0\r\n ? capabilities.movieSearchParams.map((p) => {\r\n return (\r\n \r\n );\r\n })\r\n : translate('NotSupported')\r\n }\r\n />\r\n 0\r\n ? capabilities.bookSearchParams.map((p) => {\r\n return (\r\n \r\n );\r\n })\r\n : translate('NotSupported')\r\n }\r\n />\r\n 0\r\n ? capabilities.musicSearchParams.map((p) => {\r\n return (\r\n \r\n );\r\n })\r\n : translate('NotSupported')\r\n }\r\n />\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {capabilities?.categories?.length > 0 ? (\r\n
\r\n \r\n {uniqBy(capabilities.categories, 'id')\r\n .sort((a, b) => a.id - b.id)\r\n .map((category) => {\r\n return (\r\n \r\n \r\n {category.id}\r\n {category.name}\r\n \r\n {category?.subCategories?.length > 0\r\n ? uniqBy(category.subCategories, 'id')\r\n .sort((a, b) => a.id - b.id)\r\n .map((subCategory) => {\r\n return (\r\n \r\n \r\n {subCategory.id}\r\n \r\n \r\n {subCategory.name}\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 {translate('NoIndexerCategories')}\r\n \r\n )}\r\n
\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('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\nexport default IndexerInfoModalContent;\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport { sizes } from 'Helpers/Props';\r\nimport IndexerInfoModalContent from './IndexerInfoModalContent';\r\n\r\ninterface IndexerInfoModalProps {\r\n isOpen: boolean;\r\n indexerId: number;\r\n onModalClose(): void;\r\n onCloneIndexerPress(id: number): void;\r\n}\r\n\r\nfunction IndexerInfoModal(props: IndexerInfoModalProps) {\r\n const { isOpen, indexerId, onModalClose, onCloneIndexerPress } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default IndexerInfoModal;\r\n","import React, { useCallback, useState } from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport IndexerInfoModal from './Info/IndexerInfoModal';\r\nimport styles from './IndexerTitleLink.css';\r\n\r\ninterface IndexerTitleLinkProps {\r\n indexerId: number;\r\n title: string;\r\n onCloneIndexerPress(id: number): void;\r\n}\r\n\r\nfunction IndexerTitleLink(props: IndexerTitleLinkProps) {\r\n const { title, indexerId, onCloneIndexerPress } = props;\r\n\r\n const [isIndexerInfoModalOpen, setIsIndexerInfoModalOpen] = useState(false);\r\n\r\n const onIndexerInfoPress = useCallback(() => {\r\n setIsIndexerInfoModalOpen(true);\r\n }, [setIsIndexerInfoModalOpen]);\r\n\r\n const onIndexerInfoModalClose = useCallback(() => {\r\n setIsIndexerInfoModalOpen(false);\r\n }, [setIsIndexerInfoModalOpen]);\r\n\r\n return (\r\n
\r\n \r\n {title}\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default IndexerTitleLink;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"IndexerTitleLink-link-UCxkx Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { tooltipPositions } from 'Helpers/Props';\r\nimport Tooltip from './Tooltip';\r\nimport styles from './Popover.css';\r\n\r\nfunction Popover(props) {\r\n const {\r\n title,\r\n body,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n
\r\n {title}\r\n
\r\n\r\n
\r\n {body}\r\n
\r\n
\r\n }\r\n />\r\n );\r\n}\r\n\r\nPopover.propTypes = {\r\n className: PropTypes.string,\r\n bodyClassName: PropTypes.string,\r\n anchor: PropTypes.node.isRequired,\r\n title: PropTypes.string.isRequired,\r\n body: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired,\r\n position: PropTypes.oneOf(tooltipPositions.all),\r\n canFlip: PropTypes.bool\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\"};","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"DisabledIndexerInfo-title-P4SvH DescriptionListItemTitle-title-br1UE\",\"description\":\"DisabledIndexerInfo-description-thKG5 undefined\"};","import React from 'react';\r\nimport DescriptionList from 'Components/DescriptionList/DescriptionList';\r\nimport DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './DisabledIndexerInfo.css';\r\n\r\ninterface DisabledIndexerInfoProps {\r\n mostRecentFailure: Date;\r\n disabledTill: Date;\r\n initialFailure: Date;\r\n longDateFormat: string;\r\n timeFormat: string;\r\n}\r\n\r\nfunction DisabledIndexerInfo(props: DisabledIndexerInfoProps) {\r\n const {\r\n mostRecentFailure,\r\n disabledTill,\r\n initialFailure,\r\n longDateFormat,\r\n timeFormat,\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\nexport default DisabledIndexerInfo;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"status\":\"IndexerStatusCell-status-k0UJj TableRowCell-cell-giPrj\",\"statusIcon\":\"IndexerStatusCell-statusIcon-lPEpn\",\"indexerStatusTooltip\":\"IndexerStatusCell-indexerStatusTooltip-GeBxv\"};","import React from 'react';\r\nimport Icon from 'Components/Icon';\r\nimport VirtualTableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport { icons, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport { IndexerStatus } from 'Indexer/Indexer';\r\nimport translate from 'Utilities/String/translate';\r\nimport DisabledIndexerInfo from './DisabledIndexerInfo';\r\nimport styles from './IndexerStatusCell.css';\r\n\r\nfunction getIconKind(enabled: boolean, redirect: boolean) {\r\n if (enabled) {\r\n return redirect ? kinds.INFO : kinds.SUCCESS;\r\n }\r\n\r\n return kinds.DEFAULT;\r\n}\r\n\r\nfunction getIconName(enabled: boolean, redirect: boolean) {\r\n if (enabled) {\r\n return redirect ? icons.REDIRECT : icons.CHECK;\r\n }\r\n\r\n return icons.BLOCKLIST;\r\n}\r\n\r\nfunction getIconTooltip(enabled: boolean, redirect: boolean) {\r\n if (enabled) {\r\n return redirect ? translate('EnabledRedirected') : translate('Enabled');\r\n }\r\n\r\n return translate('Disabled');\r\n}\r\n\r\ninterface IndexerStatusCellProps {\r\n className: string;\r\n enabled: boolean;\r\n redirect: boolean;\r\n status?: IndexerStatus;\r\n longDateFormat: string;\r\n timeFormat: string;\r\n component?: React.ElementType;\r\n}\r\n\r\nfunction IndexerStatusCell(props: IndexerStatusCellProps) {\r\n const {\r\n className,\r\n enabled,\r\n redirect,\r\n status,\r\n longDateFormat,\r\n timeFormat,\r\n component: Component = VirtualTableRowCell,\r\n ...otherProps\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {status ? (\r\n \r\n }\r\n title={translate('IndexerDisabled')}\r\n body={\r\n
\r\n \r\n
\r\n }\r\n position={tooltipPositions.BOTTOM}\r\n />\r\n ) : null}\r\n
\r\n );\r\n}\r\n\r\nexport default IndexerStatusCell;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"status\":\"IndexerIndexRow-status-TkCbL IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"id\":\"IndexerIndexRow-id-s_oAn IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"sortName\":\"IndexerIndexRow-sortName-nzAek IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"priority\":\"IndexerIndexRow-priority-kjgsE IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"protocol\":\"IndexerIndexRow-protocol-BxFhc IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"privacy\":\"IndexerIndexRow-privacy-imv_6 IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"minimumSeeders\":\"IndexerIndexRow-minimumSeeders-ovM9F IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"seedRatio\":\"IndexerIndexRow-seedRatio-uZxrP IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"seedTime\":\"IndexerIndexRow-seedTime-WB99N IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"packSeedTime\":\"IndexerIndexRow-packSeedTime-RfAqe IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"preferMagnetUrl\":\"IndexerIndexRow-preferMagnetUrl-nax_Y IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"appProfileId\":\"IndexerIndexRow-appProfileId-SA_I5 IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"capabilities\":\"IndexerIndexRow-capabilities-zq6Rn IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"added\":\"IndexerIndexRow-added-GlXyY IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"vipExpiration\":\"IndexerIndexRow-vipExpiration-lmq61 IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"tags\":\"IndexerIndexRow-tags-j_lUd IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"actions\":\"IndexerIndexRow-actions-o1XKR IndexerIndexRow-cell-zjk9R VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"checkInput\":\"IndexerIndexRow-checkInput-bki_5 CheckInput-input-VAM1T\",\"externalLink\":\"IndexerIndexRow-externalLink-__A_O IconButton-button-t4C5V Link-link-RInnp\"};","import React, { useCallback, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { useSelect } from 'App/SelectContext';\r\nimport CheckInput from 'Components/Form/CheckInput';\r\nimport IconButton from 'Components/Link/IconButton';\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 { icons } from 'Helpers/Props';\r\nimport DeleteIndexerModal from 'Indexer/Delete/DeleteIndexerModal';\r\nimport EditIndexerModalConnector from 'Indexer/Edit/EditIndexerModalConnector';\r\nimport createIndexerIndexItemSelector from 'Indexer/Index/createIndexerIndexItemSelector';\r\nimport Indexer from 'Indexer/Indexer';\r\nimport IndexerTitleLink from 'Indexer/IndexerTitleLink';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport translate from 'Utilities/String/translate';\r\nimport CapabilitiesLabel from './CapabilitiesLabel';\r\nimport IndexerStatusCell from './IndexerStatusCell';\r\nimport PrivacyLabel from './PrivacyLabel';\r\nimport ProtocolLabel from './ProtocolLabel';\r\nimport styles from './IndexerIndexRow.css';\r\n\r\ninterface IndexerIndexRowProps {\r\n indexerId: number;\r\n sortKey: string;\r\n columns: Column[];\r\n isSelectMode: boolean;\r\n onCloneIndexerPress(id: number): void;\r\n}\r\n\r\nfunction IndexerIndexRow(props: IndexerIndexRowProps) {\r\n const { indexerId, columns, isSelectMode, onCloneIndexerPress } = props;\r\n\r\n const { indexer, appProfile, status, longDateFormat, timeFormat } =\r\n useSelector(createIndexerIndexItemSelector(indexerId));\r\n\r\n const {\r\n id,\r\n name: indexerName,\r\n indexerUrls,\r\n enable,\r\n redirect,\r\n tags,\r\n protocol,\r\n privacy,\r\n priority,\r\n fields,\r\n added,\r\n capabilities,\r\n } = indexer as Indexer;\r\n\r\n const baseUrl =\r\n fields.find((field) => field.name === 'baseUrl')?.value ??\r\n (Array.isArray(indexerUrls) ? indexerUrls[0] : undefined);\r\n\r\n const vipExpiration =\r\n fields.find((field) => field.name === 'vipExpiration')?.value ?? '';\r\n\r\n const minimumSeeders =\r\n fields.find(\r\n (field) => field.name === 'torrentBaseSettings.appMinimumSeeders'\r\n )?.value ?? undefined;\r\n\r\n const seedRatio =\r\n fields.find((field) => field.name === 'torrentBaseSettings.seedRatio')\r\n ?.value ?? undefined;\r\n\r\n const seedTime =\r\n fields.find((field) => field.name === 'torrentBaseSettings.seedTime')\r\n ?.value ?? undefined;\r\n\r\n const packSeedTime =\r\n fields.find((field) => field.name === 'torrentBaseSettings.packSeedTime')\r\n ?.value ?? undefined;\r\n\r\n const preferMagnetUrl =\r\n fields.find((field) => field.name === 'torrentBaseSettings.preferMagnetUrl')\r\n ?.value ?? undefined;\r\n\r\n const rssUrl = `${window.location.origin}${\r\n window.Prowlarr.urlBase\r\n }/${id}/api?apikey=${encodeURIComponent(\r\n window.Prowlarr.apiKey\r\n )}&extended=1&t=search`;\r\n\r\n const [isEditIndexerModalOpen, setIsEditIndexerModalOpen] = useState(false);\r\n const [isDeleteIndexerModalOpen, setIsDeleteIndexerModalOpen] =\r\n useState(false);\r\n const [selectState, selectDispatch] = useSelect();\r\n\r\n const onEditIndexerPress = useCallback(() => {\r\n setIsEditIndexerModalOpen(true);\r\n }, [setIsEditIndexerModalOpen]);\r\n\r\n const onEditIndexerModalClose = useCallback(() => {\r\n setIsEditIndexerModalOpen(false);\r\n }, [setIsEditIndexerModalOpen]);\r\n\r\n const onDeleteIndexerPress = useCallback(() => {\r\n setIsEditIndexerModalOpen(false);\r\n setIsDeleteIndexerModalOpen(true);\r\n }, [setIsDeleteIndexerModalOpen]);\r\n\r\n const onDeleteIndexerModalClose = useCallback(() => {\r\n setIsDeleteIndexerModalOpen(false);\r\n }, [setIsDeleteIndexerModalOpen]);\r\n\r\n const checkInputCallback = useCallback(() => {\r\n // Mock handler to satisfy `onChange` being required for `CheckInput`.\r\n }, []);\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 === 'id') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'sortName') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'privacy') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'priority') {\r\n return (\r\n \r\n {priority}\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 === 'appProfileId') {\r\n return (\r\n \r\n {appProfile?.name || ''}\r\n \r\n );\r\n }\r\n\r\n if (name === 'capabilities') {\r\n return (\r\n \r\n \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 === 'vipExpiration') {\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 === 'tags') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'minimumSeeders') {\r\n return (\r\n \r\n {minimumSeeders}\r\n \r\n );\r\n }\r\n\r\n if (name === 'seedRatio') {\r\n return (\r\n \r\n {seedRatio}\r\n \r\n );\r\n }\r\n\r\n if (name === 'seedTime') {\r\n return (\r\n \r\n {seedTime}\r\n \r\n );\r\n }\r\n\r\n if (name === 'packSeedTime') {\r\n return (\r\n \r\n {packSeedTime}\r\n \r\n );\r\n }\r\n\r\n if (name === 'preferMagnetUrl') {\r\n return (\r\n \r\n {preferMagnetUrl === undefined ? null : (\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 {baseUrl ? (\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 IndexerIndexRow;\r\n","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\"};","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 { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\n\r\nconst selectTableOptions = createSelector(\r\n (state: AppState) => state.indexerIndex.tableOptions,\r\n (tableOptions) => tableOptions\r\n);\r\n\r\nexport default selectTableOptions;\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 IndexerIndexTableOptionsProps {\r\n onTableOptionChange(...args: unknown[]): unknown;\r\n}\r\n\r\nfunction IndexerIndexTableOptions(props: IndexerIndexTableOptionsProps) {\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 IndexerIndexTableOptions;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"status\":\"IndexerIndexTableHeader-status-giDCH VirtualTableHeaderCell-headerCell-oq_lz\",\"id\":\"IndexerIndexTableHeader-id-SP8Jo VirtualTableHeaderCell-headerCell-oq_lz\",\"sortName\":\"IndexerIndexTableHeader-sortName-USJFL VirtualTableHeaderCell-headerCell-oq_lz\",\"priority\":\"IndexerIndexTableHeader-priority-hDUC4 VirtualTableHeaderCell-headerCell-oq_lz\",\"privacy\":\"IndexerIndexTableHeader-privacy-hlF21 VirtualTableHeaderCell-headerCell-oq_lz\",\"protocol\":\"IndexerIndexTableHeader-protocol-bxEQO VirtualTableHeaderCell-headerCell-oq_lz\",\"minimumSeeders\":\"IndexerIndexTableHeader-minimumSeeders-tlySR VirtualTableHeaderCell-headerCell-oq_lz\",\"seedRatio\":\"IndexerIndexTableHeader-seedRatio-bmX3V VirtualTableHeaderCell-headerCell-oq_lz\",\"seedTime\":\"IndexerIndexTableHeader-seedTime-FkzMB VirtualTableHeaderCell-headerCell-oq_lz\",\"packSeedTime\":\"IndexerIndexTableHeader-packSeedTime-bvr0V VirtualTableHeaderCell-headerCell-oq_lz\",\"preferMagnetUrl\":\"IndexerIndexTableHeader-preferMagnetUrl-tBJ6V VirtualTableHeaderCell-headerCell-oq_lz\",\"appProfileId\":\"IndexerIndexTableHeader-appProfileId-LZH47 VirtualTableHeaderCell-headerCell-oq_lz\",\"capabilities\":\"IndexerIndexTableHeader-capabilities-f6s77 VirtualTableHeaderCell-headerCell-oq_lz\",\"added\":\"IndexerIndexTableHeader-added-l0Irl VirtualTableHeaderCell-headerCell-oq_lz\",\"vipExpiration\":\"IndexerIndexTableHeader-vipExpiration-dLB6x VirtualTableHeaderCell-headerCell-oq_lz\",\"tags\":\"IndexerIndexTableHeader-tags-sHHKd VirtualTableHeaderCell-headerCell-oq_lz\",\"actions\":\"IndexerIndexTableHeader-actions-Nk_Xz 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/SortDirection';\r\nimport {\r\n setIndexerSort,\r\n setIndexerTableOption,\r\n} from 'Store/Actions/indexerIndexActions';\r\nimport { CheckInputChanged } from 'typings/inputs';\r\nimport IndexerIndexTableOptions from './IndexerIndexTableOptions';\r\nimport styles from './IndexerIndexTableHeader.css';\r\n\r\ninterface IndexerIndexTableHeaderProps {\r\n columns: Column[];\r\n sortKey?: string;\r\n sortDirection?: SortDirection;\r\n isSelectMode: boolean;\r\n}\r\n\r\nfunction IndexerIndexTableHeader(props: IndexerIndexTableHeaderProps) {\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(setIndexerSort({ sortKey: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onTableOptionChange = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setIndexerTableOption(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 IndexerIndexTableHeader;\r\n","import { throttle } from 'lodash';\r\nimport React, { RefObject, useEffect, 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 ScrollDirection from 'Helpers/Props/ScrollDirection';\r\nimport SortDirection from 'Helpers/Props/SortDirection';\r\nimport Indexer from 'Indexer/Indexer';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\nimport IndexerIndexRow from './IndexerIndexRow';\r\nimport IndexerIndexTableHeader from './IndexerIndexTableHeader';\r\nimport styles from './IndexerIndexTable.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: Indexer[];\r\n sortKey: string;\r\n columns: Column[];\r\n isSelectMode: boolean;\r\n onCloneIndexerPress(id: number): void;\r\n}\r\n\r\ninterface IndexerIndexTableProps {\r\n items: Indexer[];\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 onCloneIndexerPress(id: number): void;\r\n}\r\n\r\nconst columnsSelector = createSelector(\r\n (state: AppState) => state.indexerIndex.columns,\r\n (columns) => columns\r\n);\r\n\r\nfunction Row({ index, style, data }: ListChildComponentProps) {\r\n const { items, sortKey, columns, isSelectMode, onCloneIndexerPress } = data;\r\n\r\n if (index >= items.length) {\r\n return null;\r\n }\r\n\r\n const indexer = 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 IndexerIndexTable(props: IndexerIndexTableProps) {\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 onCloneIndexerPress,\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 = 38;\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 onCloneIndexerPress,\r\n }}\r\n >\r\n {Row}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default IndexerIndexTable;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tableScroller\":\"IndexerIndexTable-tableScroller-lCuLi\",\"row\":\"IndexerIndexTable-row-FwdwU\"};","// extracted by mini-css-extract-plugin\nexport default {\"pageContentBodyWrapper\":\"IndexerIndex-pageContentBodyWrapper-sOaAE\",\"errorMessage\":\"IndexerIndex-errorMessage-ihT3A\",\"contentBody\":\"IndexerIndex-contentBody-VcQOW PageContentBody-contentBody-Hetrs\",\"postersInnerContentBody\":\"IndexerIndex-postersInnerContentBody-pNc3_ PageContentBody-innerContentBody-PtigL\",\"tableInnerContentBody\":\"IndexerIndex-tableInnerContentBody-DG3EF PageContentBody-innerContentBody-PtigL\",\"contentBodyContainer\":\"IndexerIndex-contentBodyContainer-XhSeF\"};","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 IndexerAppState, {\r\n IndexerIndexAppState,\r\n} from 'App/State/IndexerAppState';\r\nimport { APP_INDEXER_SYNC } from 'Commands/commandNames';\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 } from 'Helpers/Props';\r\nimport SortDirection from 'Helpers/Props/SortDirection';\r\nimport AddIndexerModal from 'Indexer/Add/AddIndexerModal';\r\nimport EditIndexerModalConnector from 'Indexer/Edit/EditIndexerModalConnector';\r\nimport NoIndexer from 'Indexer/NoIndexer';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport {\r\n cloneIndexer,\r\n fetchIndexers,\r\n testAllIndexers,\r\n} from 'Store/Actions/indexerActions';\r\nimport {\r\n setIndexerFilter,\r\n setIndexerSort,\r\n setIndexerTableOption,\r\n} from 'Store/Actions/indexerIndexActions';\r\nimport { fetchIndexerStatus } from 'Store/Actions/indexerStatusActions';\r\nimport scrollPositions from 'Store/scrollPositions';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createIndexerClientSideCollectionItemsSelector from 'Store/Selectors/createIndexerClientSideCollectionItemsSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport IndexerIndexFooter from './IndexerIndexFooter';\r\nimport IndexerIndexFilterMenu from './Menus/IndexerIndexFilterMenu';\r\nimport IndexerIndexSortMenu from './Menus/IndexerIndexSortMenu';\r\nimport IndexerIndexSelectAllButton from './Select/IndexerIndexSelectAllButton';\r\nimport IndexerIndexSelectAllMenuItem from './Select/IndexerIndexSelectAllMenuItem';\r\nimport IndexerIndexSelectFooter from './Select/IndexerIndexSelectFooter';\r\nimport IndexerIndexSelectModeButton from './Select/IndexerIndexSelectModeButton';\r\nimport IndexerIndexSelectModeMenuItem from './Select/IndexerIndexSelectModeMenuItem';\r\nimport IndexerIndexTable from './Table/IndexerIndexTable';\r\nimport IndexerIndexTableOptions from './Table/IndexerIndexTableOptions';\r\nimport styles from './IndexerIndex.css';\r\n\r\nconst getViewComponent = () => IndexerIndexTable;\r\n\r\ninterface IndexerIndexProps {\r\n initialScrollTop?: number;\r\n}\r\n\r\nconst IndexerIndex = withScrollPosition((props: IndexerIndexProps) => {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n isTestingAll,\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 }: IndexerAppState & IndexerIndexAppState & ClientSideCollectionAppState =\r\n useSelector(createIndexerClientSideCollectionItemsSelector('indexerIndex'));\r\n\r\n const isSyncingIndexers = useSelector(\r\n createCommandExecutingSelector(APP_INDEXER_SYNC)\r\n );\r\n const { isSmallScreen } = useSelector(createDimensionsSelector());\r\n const dispatch = useDispatch();\r\n const scrollerRef = useRef(null);\r\n const [isAddIndexerModalOpen, setIsAddIndexerModalOpen] = useState(false);\r\n const [isEditIndexerModalOpen, setIsEditIndexerModalOpen] = 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(fetchIndexers());\r\n dispatch(fetchIndexerStatus());\r\n }, [dispatch]);\r\n\r\n const onAddIndexerPress = useCallback(() => {\r\n setIsAddIndexerModalOpen(true);\r\n }, [setIsAddIndexerModalOpen]);\r\n\r\n const onAddIndexerModalClose = useCallback(() => {\r\n setIsAddIndexerModalOpen(false);\r\n }, [setIsAddIndexerModalOpen]);\r\n\r\n const onEditIndexerPress = useCallback(() => {\r\n setIsEditIndexerModalOpen(true);\r\n }, [setIsEditIndexerModalOpen]);\r\n\r\n const onEditIndexerModalClose = useCallback(() => {\r\n setIsEditIndexerModalOpen(false);\r\n }, [setIsEditIndexerModalOpen]);\r\n\r\n const onCloneIndexerPress = useCallback(\r\n (id: number) => {\r\n dispatch(cloneIndexer({ id }));\r\n\r\n setIsEditIndexerModalOpen(true);\r\n },\r\n [dispatch, setIsEditIndexerModalOpen]\r\n );\r\n\r\n const onAppIndexerSyncPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: APP_INDEXER_SYNC,\r\n forceSync: true,\r\n })\r\n );\r\n }, [dispatch]);\r\n\r\n const onTestAllPress = useCallback(() => {\r\n dispatch(testAllIndexers());\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(setIndexerTableOption(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onSortSelect = useCallback(\r\n (value: string) => {\r\n dispatch(setIndexerSort({ sortKey: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const onFilterSelect = useCallback(\r\n (value: string) => {\r\n dispatch(setIndexerFilter({ selectedFilterKey: value }));\r\n },\r\n [dispatch]\r\n );\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.indexerIndex = scrollTop;\r\n },\r\n [setJumpToCharacter]\r\n );\r\n\r\n const jumpBarItems = useMemo(() => {\r\n // Reset if not sorting by sortName\r\n if (sortKey !== 'sortName') {\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.sortName.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 === 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(), []);\r\n\r\n const isLoaded = !!(!error && isPopulated && items.length);\r\n const hasNoIndexer = !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 \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('UnableToLoadIndexers')}
\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 {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 \r\n
\r\n
\r\n );\r\n}, 'indexerIndex');\r\n\r\nexport default IndexerIndex;\r\n","import Chart from 'chart.js/auto';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { kinds } from 'Helpers/Props';\r\nimport { defaultFontFamily } from 'Styles/Variables/fonts';\r\n\r\nfunction getColors(kind) {\r\n\r\n const style = getComputedStyle(document.body);\r\n\r\n if (kind === kinds.WARNING) {\r\n return style.getPropertyValue('--failedColors').split(',');\r\n }\r\n\r\n return style.getPropertyValue('--chartColors').split(',');\r\n}\r\n\r\nclass BarChart extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.canvasRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.myChart = new Chart(this.canvasRef.current, {\r\n type: 'bar',\r\n options: {\r\n x: {\r\n ticks: {\r\n stepSize: this.props.stepSize\r\n }\r\n },\r\n y: {\r\n ticks: {\r\n stepSize: this.props.stepSize\r\n }\r\n },\r\n indexAxis: this.props.horizontal ? 'y' : 'x',\r\n maintainAspectRatio: false,\r\n plugins: {\r\n title: {\r\n display: true,\r\n align: 'start',\r\n text: this.props.title,\r\n padding: {\r\n bottom: 30\r\n },\r\n font: {\r\n size: 14,\r\n family: defaultFontFamily\r\n }\r\n },\r\n legend: {\r\n display: this.props.legend\r\n }\r\n }\r\n },\r\n data: {\r\n labels: this.props.data.map((d) => d.label),\r\n datasets: [{\r\n label: this.props.title,\r\n data: this.props.data.map((d) => d.value),\r\n backgroundColor: getColors(this.props.kind)\r\n }]\r\n }\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.myChart.data.labels = this.props.data.map((d) => d.label);\r\n this.myChart.data.datasets[0].data = this.props.data.map((d) => d.value);\r\n this.myChart.update();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nBarChart.propTypes = {\r\n data: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n horizontal: PropTypes.bool,\r\n legend: PropTypes.bool,\r\n title: PropTypes.string.isRequired,\r\n kind: PropTypes.oneOf(kinds.all).isRequired,\r\n stepSize: PropTypes.number\r\n};\r\n\r\nBarChart.defaultProps = {\r\n data: [],\r\n horizontal: false,\r\n legend: false,\r\n title: '',\r\n kind: kinds.INFO,\r\n stepSize: 1\r\n};\r\n\r\nexport default BarChart;\r\n","import Chart from 'chart.js/auto';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { defaultFontFamily } from 'Styles/Variables/fonts';\r\n\r\nfunction getColors(kind) {\r\n\r\n const style = getComputedStyle(document.body);\r\n return style.getPropertyValue('--chartColorsDiversified').split(',');\r\n}\r\n\r\nclass DoughnutChart extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.canvasRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.myChart = new Chart(this.canvasRef.current, {\r\n type: 'doughnut',\r\n options: {\r\n maintainAspectRatio: false,\r\n plugins: {\r\n title: {\r\n display: true,\r\n align: 'start',\r\n text: this.props.title,\r\n padding: {\r\n bottom: 30\r\n },\r\n font: {\r\n size: 14,\r\n family: defaultFontFamily\r\n }\r\n },\r\n legend: {\r\n position: 'bottom'\r\n }\r\n }\r\n },\r\n data: {\r\n labels: this.props.data.map((d) => d.label),\r\n datasets: [{\r\n label: this.props.title,\r\n data: this.props.data.map((d) => d.value),\r\n backgroundColor: getColors()\r\n }]\r\n }\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.myChart.data.labels = this.props.data.map((d) => d.label);\r\n this.myChart.data.datasets[0].data = this.props.data.map((d) => d.value);\r\n this.myChart.update();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nDoughnutChart.propTypes = {\r\n data: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n title: PropTypes.string.isRequired\r\n};\r\n\r\nDoughnutChart.defaultProps = {\r\n data: [],\r\n title: ''\r\n};\r\n\r\nexport default DoughnutChart;\r\n","import Chart from 'chart.js/auto';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { defaultFontFamily } from 'Styles/Variables/fonts';\r\n\r\nfunction getColors(index) {\r\n\r\n const style = getComputedStyle(document.body);\r\n return style.getPropertyValue('--chartColorsDiversified').split(',')[index];\r\n}\r\n\r\nclass StackedBarChart extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.canvasRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.myChart = new Chart(this.canvasRef.current, {\r\n type: 'bar',\r\n options: {\r\n maintainAspectRatio: false,\r\n scales: {\r\n x: {\r\n stacked: true,\r\n ticks: {\r\n stepSize: this.props.stepSize\r\n }\r\n },\r\n y: {\r\n stacked: true,\r\n ticks: {\r\n stepSize: this.props.stepSize\r\n }\r\n }\r\n },\r\n plugins: {\r\n title: {\r\n display: true,\r\n align: 'start',\r\n text: this.props.title,\r\n padding: {\r\n bottom: 30\r\n },\r\n font: {\r\n size: 14,\r\n family: defaultFontFamily\r\n }\r\n },\r\n tooltip: {\r\n mode: 'index',\r\n position: 'average'\r\n }\r\n }\r\n },\r\n data: {\r\n labels: this.props.data.labels,\r\n datasets: this.props.data.datasets.map((d, index) => {\r\n return {\r\n label: d.label,\r\n data: d.data,\r\n backgroundColor: getColors(index)\r\n };\r\n })\r\n }\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.myChart.data.labels = this.props.data.labels;\r\n this.myChart.data.datasets = this.props.data.datasets.map((d, index) => {\r\n return {\r\n label: d.label,\r\n data: d.data,\r\n backgroundColor: getColors(index)\r\n };\r\n });\r\n this.myChart.update();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nStackedBarChart.propTypes = {\r\n data: PropTypes.object.isRequired,\r\n title: PropTypes.string.isRequired,\r\n stepSize: PropTypes.number\r\n};\r\n\r\nStackedBarChart.defaultProps = {\r\n title: '',\r\n stepSize: 1\r\n};\r\n\r\nexport default StackedBarChart;\r\n","export default function abbreviateNumber(num, decimalPlaces) {\r\n if (num === null) {\r\n return null;\r\n }\r\n\r\n if (num === 0) {\r\n return '0';\r\n }\r\n\r\n decimalPlaces = (!decimalPlaces || decimalPlaces < 0) ? 0 : decimalPlaces;\r\n\r\n const b = (num).toPrecision(2).split('e');\r\n const k = b.length === 1 ? 0 : Math.floor(Math.min(b[1].slice(1), 14) / 3);\r\n const c = k < 1 ? num.toFixed(0 + decimalPlaces) : (num / Math.pow(10, k * 3) ).toFixed(1 + decimalPlaces);\r\n const d = c < 0 ? c : Math.abs(c);\r\n const e = d + ['', 'K', 'M', 'B', 'T'][k];\r\n\r\n return e;\r\n}\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 { setIndexerStatsFilter } from 'Store/Actions/indexerStatsActions';\r\n\r\nfunction createIndexerStatsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.indexerStats.item,\r\n (indexerStats) => {\r\n return indexerStats;\r\n }\r\n );\r\n}\r\n\r\nfunction createFilterBuilderPropsSelector() {\r\n return createSelector(\r\n (state: AppState) => state.indexerStats.filterBuilderProps,\r\n (filterBuilderProps) => {\r\n return filterBuilderProps;\r\n }\r\n );\r\n}\r\n\r\ninterface IndexerStatsFilterModalProps {\r\n isOpen: boolean;\r\n}\r\n\r\nexport default function IndexerStatsFilterModal(\r\n props: IndexerStatsFilterModalProps\r\n) {\r\n const sectionItems = [useSelector(createIndexerStatsSelector())];\r\n const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());\r\n const customFilterType = 'indexerStats';\r\n\r\n const dispatch = useDispatch();\r\n\r\n const dispatchSetFilter = useCallback(\r\n (payload: unknown) => {\r\n dispatch(setIndexerStatsFilter(payload));\r\n },\r\n [dispatch]\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"fullWidthChart\":\"IndexerStats-fullWidthChart-iVWon\",\"halfWidthChart\":\"IndexerStats-halfWidthChart-U75Xf\",\"quarterWidthChart\":\"IndexerStats-quarterWidthChart-dsPST\",\"chartContainer\":\"IndexerStats-chartContainer-Ndazo\",\"statContainer\":\"IndexerStats-statContainer-Kt2EA\",\"statTitle\":\"IndexerStats-statTitle-dYMsB\",\"stat\":\"IndexerStats-stat-Xu86d\"};","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 IndexerStatsAppState from 'App/State/IndexerStatsAppState';\r\nimport Alert from 'Components/Alert';\r\nimport BarChart from 'Components/Chart/BarChart';\r\nimport DoughnutChart from 'Components/Chart/DoughnutChart';\r\nimport StackedBarChart from 'Components/Chart/StackedBarChart';\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 { align, icons, kinds } from 'Helpers/Props';\r\nimport {\r\n fetchIndexerStats,\r\n setIndexerStatsFilter,\r\n} from 'Store/Actions/indexerStatsActions';\r\nimport { createCustomFiltersSelector } from 'Store/Selectors/createClientSideCollectionSelector';\r\nimport {\r\n IndexerStatsHost,\r\n IndexerStatsIndexer,\r\n IndexerStatsUserAgent,\r\n} from 'typings/IndexerStats';\r\nimport abbreviateNumber from 'Utilities/Number/abbreviateNumber';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\r\nimport translate from 'Utilities/String/translate';\r\nimport IndexerStatsFilterModal from './IndexerStatsFilterModal';\r\nimport styles from './IndexerStats.css';\r\n\r\nfunction getAverageResponseTimeData(indexerStats: IndexerStatsIndexer[]) {\r\n const statistics = [...indexerStats].sort((a, b) =>\r\n a.averageResponseTime === b.averageResponseTime\r\n ? b.averageGrabResponseTime - a.averageGrabResponseTime\r\n : b.averageResponseTime - a.averageResponseTime\r\n );\r\n\r\n return {\r\n labels: statistics.map((indexer) => indexer.indexerName),\r\n datasets: [\r\n {\r\n label: translate('AverageQueries'),\r\n data: statistics.map((indexer) => indexer.averageResponseTime),\r\n },\r\n {\r\n label: translate('AverageGrabs'),\r\n data: statistics.map((indexer) => indexer.averageGrabResponseTime),\r\n },\r\n ],\r\n };\r\n}\r\n\r\nfunction getFailureRateData(indexerStats: IndexerStatsIndexer[]) {\r\n const data = [...indexerStats]\r\n .map((indexer) => ({\r\n label: indexer.indexerName,\r\n value:\r\n (indexer.numberOfFailedQueries +\r\n indexer.numberOfFailedRssQueries +\r\n indexer.numberOfFailedAuthQueries +\r\n indexer.numberOfFailedGrabs) /\r\n (indexer.numberOfQueries +\r\n indexer.numberOfRssQueries +\r\n indexer.numberOfAuthQueries +\r\n indexer.numberOfGrabs),\r\n }))\r\n .filter((s) => s.value > 0);\r\n\r\n data.sort((a, b) => b.value - a.value);\r\n\r\n return data;\r\n}\r\n\r\nfunction getTotalRequestsData(indexerStats: IndexerStatsIndexer[]) {\r\n const statistics = [...indexerStats]\r\n .filter(\r\n (s) =>\r\n s.numberOfQueries > 0 ||\r\n s.numberOfRssQueries > 0 ||\r\n s.numberOfAuthQueries > 0\r\n )\r\n .sort(\r\n (a, b) =>\r\n b.numberOfQueries +\r\n b.numberOfRssQueries +\r\n b.numberOfAuthQueries -\r\n (a.numberOfQueries + a.numberOfRssQueries + a.numberOfAuthQueries)\r\n );\r\n\r\n return {\r\n labels: statistics.map((indexer) => indexer.indexerName),\r\n datasets: [\r\n {\r\n label: translate('SearchQueries'),\r\n data: statistics.map((indexer) => indexer.numberOfQueries),\r\n },\r\n {\r\n label: translate('RssQueries'),\r\n data: statistics.map((indexer) => indexer.numberOfRssQueries),\r\n },\r\n {\r\n label: translate('AuthQueries'),\r\n data: statistics.map((indexer) => indexer.numberOfAuthQueries),\r\n },\r\n ],\r\n };\r\n}\r\n\r\nfunction getNumberGrabsData(indexerStats: IndexerStatsIndexer[]) {\r\n const data = [...indexerStats]\r\n .map((indexer) => ({\r\n label: indexer.indexerName,\r\n value: indexer.numberOfGrabs - indexer.numberOfFailedGrabs,\r\n }))\r\n .filter((s) => s.value > 0);\r\n\r\n data.sort((a, b) => b.value - a.value);\r\n\r\n return data;\r\n}\r\n\r\nfunction getUserAgentGrabsData(indexerStats: IndexerStatsUserAgent[]) {\r\n const data = indexerStats.map((indexer) => ({\r\n label: indexer.userAgent ? indexer.userAgent : 'Other',\r\n value: indexer.numberOfGrabs,\r\n }));\r\n\r\n data.sort((a, b) => b.value - a.value);\r\n\r\n return data;\r\n}\r\n\r\nfunction getUserAgentQueryData(indexerStats: IndexerStatsUserAgent[]) {\r\n const data = indexerStats.map((indexer) => ({\r\n label: indexer.userAgent ? indexer.userAgent : 'Other',\r\n value: indexer.numberOfQueries,\r\n }));\r\n\r\n data.sort((a, b) => b.value - a.value);\r\n\r\n return data;\r\n}\r\n\r\nfunction getHostGrabsData(indexerStats: IndexerStatsHost[]) {\r\n const data = indexerStats.map((indexer) => ({\r\n label: indexer.host ? indexer.host : 'Other',\r\n value: indexer.numberOfGrabs,\r\n }));\r\n\r\n data.sort((a, b) => b.value - a.value);\r\n\r\n return data;\r\n}\r\n\r\nfunction getHostQueryData(indexerStats: IndexerStatsHost[]) {\r\n const data = indexerStats.map((indexer) => ({\r\n label: indexer.host ? indexer.host : 'Other',\r\n value: indexer.numberOfQueries,\r\n }));\r\n\r\n data.sort((a, b) => b.value - a.value);\r\n\r\n return data;\r\n}\r\n\r\nconst indexerStatsSelector = () => {\r\n return createSelector(\r\n (state: AppState) => state.indexerStats,\r\n createCustomFiltersSelector('indexerStats'),\r\n (indexerStats: IndexerStatsAppState, customFilters) => {\r\n return {\r\n ...indexerStats,\r\n customFilters,\r\n };\r\n }\r\n );\r\n};\r\n\r\nfunction IndexerStats() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n item,\r\n error,\r\n filters,\r\n customFilters,\r\n selectedFilterKey,\r\n } = useSelector(indexerStatsSelector());\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(fetchIndexerStats());\r\n }, [dispatch]);\r\n\r\n const onRefreshPress = useCallback(() => {\r\n dispatch(fetchIndexerStats());\r\n }, [dispatch]);\r\n\r\n const onFilterSelect = useCallback(\r\n (value: string) => {\r\n dispatch(setIndexerStatsFilter({ selectedFilterKey: value }));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const isLoaded = !error && isPopulated;\r\n const indexerCount = item.indexers?.length ?? 0;\r\n const userAgentCount = item.userAgents?.length ?? 0;\r\n const queryCount =\r\n item.indexers?.reduce((total, indexer) => {\r\n return (\r\n total +\r\n indexer.numberOfQueries +\r\n indexer.numberOfRssQueries +\r\n indexer.numberOfAuthQueries\r\n );\r\n }, 0) ?? 0;\r\n const grabCount =\r\n item.indexers?.reduce((total, indexer) => {\r\n return total + indexer.numberOfGrabs;\r\n }, 0) ?? 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 {isFetching && !isPopulated && }\r\n\r\n {!isFetching && !!error && (\r\n \r\n {getErrorMessage(error, 'Failed to load indexer stats from API')}\r\n \r\n )}\r\n\r\n {isLoaded && (\r\n
\r\n
\r\n
\r\n
\r\n {translate('ActiveIndexers')}\r\n
\r\n
{indexerCount}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {translate('TotalQueries')}\r\n
\r\n
\r\n {abbreviateNumber(queryCount)}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {translate('TotalGrabs')}\r\n
\r\n
{abbreviateNumber(grabCount)}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {translate('ActiveApps')}\r\n
\r\n
{userAgentCount}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\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 IndexerStats;\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('releases', uiSection),\r\n (releases) => {\r\n const items = releases.items.map((s) => {\r\n const {\r\n guid,\r\n sortTitle,\r\n indexerId\r\n } = s;\r\n\r\n return {\r\n guid,\r\n sortTitle,\r\n indexerId\r\n };\r\n });\r\n\r\n return {\r\n ...releases,\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 createReleaseClientSideCollectionItemsSelector(uiSection) {\r\n return createMovieEqualSelector(\r\n createUnoptimizedSelector(uiSection),\r\n (releases) => releases\r\n );\r\n}\r\n\r\nexport default createReleaseClientSideCollectionItemsSelector;\r\n","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport FilterModal from 'Components/Filter/FilterModal';\r\nimport { setReleasesFilter } from 'Store/Actions/releaseActions';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.releases.items,\r\n (state) => state.releases.filterBuilderProps,\r\n (sectionItems, filterBuilderProps) => {\r\n return {\r\n sectionItems,\r\n filterBuilderProps,\r\n customFilterType: 'releases'\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchSetFilter: setReleasesFilter\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(FilterModal);\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 SearchIndexFilterModalConnector from 'Search/SearchIndexFilterModalConnector';\r\n\r\ninterface SearchIndexFilterMenuProps {\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 SearchIndexFilterMenu(props: SearchIndexFilterMenuProps) {\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\nSearchIndexFilterMenu.defaultProps = {\r\n showCustomFilters: false,\r\n};\r\n\r\nexport default SearchIndexFilterMenu;\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/SortDirection';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface SearchIndexSortMenuProps {\r\n sortKey?: string;\r\n sortDirection?: SortDirection;\r\n isDisabled: boolean;\r\n onSortSelect(sortKey: string): unknown;\r\n}\r\n\r\nfunction SearchIndexSortMenu(props: SearchIndexSortMenuProps) {\r\n const { sortKey, sortDirection, isDisabled, onSortSelect } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {translate('Protocol')}\r\n \r\n\r\n \r\n {translate('Age')}\r\n \r\n\r\n \r\n {translate('Title')}\r\n \r\n\r\n \r\n {translate('Indexer')}\r\n \r\n\r\n \r\n {translate('Size')}\r\n \r\n\r\n \r\n {translate('Files')}\r\n \r\n\r\n \r\n {translate('Grabs')}\r\n \r\n\r\n \r\n {translate('Peers')}\r\n \r\n\r\n \r\n {translate('Category')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SearchIndexSortMenu;\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\n\r\nfunction createReleaseSelector() {\r\n return createSelector(\r\n (state, { guid }) => guid,\r\n (state) => state.releases.items,\r\n (guid, releases) => {\r\n return releases.find((t) => t.guid === guid);\r\n }\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createReleaseSelector(),\r\n (\r\n release\r\n ) => {\r\n\r\n // If a release is deleted this selector may fire before the parent\r\n // selecors, which will result in an undefined release, 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 release that has no information available.\r\n\r\n if (!release) {\r\n return {};\r\n }\r\n\r\n return {\r\n ...release\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass SearchIndexItemConnector extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n guid,\r\n component: ItemComponent,\r\n ...otherProps\r\n } = this.props;\r\n\r\n if (!guid) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nSearchIndexItemConnector.propTypes = {\r\n guid: PropTypes.string,\r\n component: PropTypes.elementType.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, null)(SearchIndexItemConnector);\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-ujMcy\"};","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-IKAIL Link-link-RInnp\",\"placeholder\":\"OverrideMatchData-placeholder-wNtrO\",\"optional\":\"OverrideMatchData-optional-zc_vn\"};","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 { grabRelease } from 'Store/Actions/releaseActions';\r\nimport { fetchDownloadClients } from 'Store/Actions/settingsActions';\r\nimport createEnabledDownloadClientsSelector from 'Store/Selectors/createEnabledDownloadClientsSelector';\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 = 'select' | 'downloadClient';\r\n\r\ninterface OverrideMatchModalContentProps {\r\n indexerId: number;\r\n title: string;\r\n guid: string;\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 [downloadClientId, setDownloadClientId] = 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 { 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 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 dispatch(\r\n grabRelease({\r\n indexerId,\r\n guid,\r\n downloadClientId,\r\n })\r\n );\r\n }, [indexerId, guid, downloadClientId, dispatch]);\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 {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
{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 );\r\n}\r\n\r\nexport default OverrideMatchModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"label\":\"OverrideMatchModalContent-label-UBnXv Label-label-DYldh\",\"item\":\"OverrideMatchModalContent-item-FOaSL\",\"footer\":\"OverrideMatchModalContent-footer-l89Ud ModalFooter-modalFooter-wjkx5\",\"error\":\"OverrideMatchModalContent-error-o35W9\",\"buttons\":\"OverrideMatchModalContent-buttons-cQwnN\"};","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 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 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 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 Tooltip from 'Components/Tooltip/Tooltip';\r\nimport { kinds, tooltipPositions } from 'Helpers/Props';\r\nimport { IndexerCategory } from 'Indexer/Indexer';\r\nimport translate from 'Utilities/String/translate';\r\n\r\ninterface CategoryLabelProps {\r\n categories: IndexerCategory[];\r\n}\r\n\r\nfunction CategoryLabel({ categories = [] }: CategoryLabelProps) {\r\n if (categories?.length === 0) {\r\n return (\r\n {translate('Unknown')}}\r\n tooltip=\"Please report this issue to the GitHub as this shouldn't be happening\"\r\n position={tooltipPositions.LEFT}\r\n />\r\n );\r\n }\r\n\r\n const sortedCategories = categories\r\n .filter((cat) => cat.name !== undefined)\r\n .sort((a, b) => a.id - b.id);\r\n\r\n return (\r\n \r\n {sortedCategories.map((category) => {\r\n return ;\r\n })}\r\n \r\n );\r\n}\r\n\r\nexport default CategoryLabel;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Label from 'Components/Label';\r\nimport { kinds } from 'Helpers/Props';\r\n\r\nfunction getKind(seeders) {\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, peersUnit) {\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\nfunction Peers(props) {\r\n const {\r\n seeders,\r\n leechers\r\n } = 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\nPeers.propTypes = {\r\n seeders: PropTypes.number,\r\n leechers: PropTypes.number\r\n};\r\n\r\nexport default Peers;\r\n","function 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 ? 'minute' : 'minutes'}`;\r\n }\r\n\r\n return `${ageHours.toFixed(1)} ${ageHours === 1 ? 'hour' : 'hours'}`;\r\n }\r\n\r\n return `${age} ${age === 1 ? 'day' : 'days'}`;\r\n}\r\n\r\nexport default formatAge;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"content\":\"SearchIndexOverview-content-QpGHe\",\"container\":\"SearchIndexOverview-container-IsFIk\",\"info\":\"SearchIndexOverview-info-TrKJj\",\"titleRow\":\"SearchIndexOverview-titleRow-jwf0a\",\"indexerRow\":\"SearchIndexOverview-indexerRow-jTxmv\",\"infoRow\":\"SearchIndexOverview-infoRow-KlIE0\",\"title\":\"SearchIndexOverview-title-RgrE9\",\"actions\":\"SearchIndexOverview-actions-A7tX_\",\"downloadLink\":\"SearchIndexOverview-downloadLink-Gyrgi Link-link-RInnp\",\"manualDownloadContent\":\"SearchIndexOverview-manualDownloadContent-o6zaT\",\"interactiveIcon\":\"SearchIndexOverview-interactiveIcon-gjLW_\",\"downloadIcon\":\"SearchIndexOverview-downloadIcon-T467V\"};","import React, { useCallback, useMemo, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport TextTruncate from 'react-text-truncate';\r\nimport Icon from 'Components/Icon';\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 DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport { icons, kinds } from 'Helpers/Props';\r\nimport ProtocolLabel from 'Indexer/Index/Table/ProtocolLabel';\r\nimport { IndexerCategory } from 'Indexer/Indexer';\r\nimport OverrideMatchModal from 'Search/OverrideMatch/OverrideMatchModal';\r\nimport CategoryLabel from 'Search/Table/CategoryLabel';\r\nimport Peers from 'Search/Table/Peers';\r\nimport createEnabledDownloadClientsSelector from 'Store/Selectors/createEnabledDownloadClientsSelector';\r\nimport dimensions from 'Styles/Variables/dimensions';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport formatAge from 'Utilities/Number/formatAge';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './SearchIndexOverview.css';\r\n\r\nconst columnPadding = parseInt(dimensions.movieIndexColumnPadding);\r\nconst columnPaddingSmallScreen = parseInt(\r\n dimensions.movieIndexColumnPaddingSmallScreen\r\n);\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('AddedToDownloadClient');\r\n } else if (grabError) {\r\n return grabError;\r\n }\r\n\r\n return translate('AddToDownloadClient');\r\n}\r\n\r\ninterface SearchIndexOverviewProps {\r\n guid: string;\r\n protocol: DownloadProtocol;\r\n age: number;\r\n ageHours: number;\r\n ageMinutes: number;\r\n publishDate: string;\r\n title: string;\r\n infoUrl: string;\r\n downloadUrl?: string;\r\n magnetUrl?: string;\r\n indexerId: number;\r\n indexer: string;\r\n categories: IndexerCategory[];\r\n size: number;\r\n seeders?: number;\r\n leechers?: number;\r\n indexerFlags: string[];\r\n isGrabbing: boolean;\r\n isGrabbed: boolean;\r\n grabError?: string;\r\n longDateFormat: string;\r\n timeFormat: string;\r\n rowHeight: number;\r\n isSmallScreen: boolean;\r\n onGrabPress(...args: unknown[]): void;\r\n}\r\n\r\nfunction SearchIndexOverview(props: SearchIndexOverviewProps) {\r\n const {\r\n guid,\r\n indexerId,\r\n protocol,\r\n categories,\r\n age,\r\n ageHours,\r\n ageMinutes,\r\n publishDate,\r\n title,\r\n infoUrl,\r\n downloadUrl,\r\n magnetUrl,\r\n indexer,\r\n size,\r\n seeders,\r\n leechers,\r\n indexerFlags = [],\r\n isGrabbing = false,\r\n isGrabbed = false,\r\n grabError,\r\n longDateFormat,\r\n timeFormat,\r\n rowHeight,\r\n isSmallScreen,\r\n onGrabPress,\r\n } = props;\r\n\r\n const [isOverrideModalOpen, setIsOverrideModalOpen] = useState(false);\r\n\r\n const { items: downloadClients } = useSelector(\r\n createEnabledDownloadClientsSelector(protocol)\r\n );\r\n\r\n const onGrabPressWrapper = useCallback(() => {\r\n onGrabPress({\r\n guid,\r\n indexerId,\r\n });\r\n }, [guid, indexerId, onGrabPress]);\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 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 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 {downloadClients.length > 1 ? (\r\n \r\n
\r\n \r\n\r\n \r\n
\r\n \r\n ) : null}\r\n\r\n {downloadUrl || magnetUrl ? (\r\n \r\n ) : null}\r\n
\r\n
\r\n
{indexer}
\r\n
\r\n \r\n\r\n {protocol === 'torrent' && (\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 {indexerFlags.length\r\n ? indexerFlags\r\n .sort((a, b) =>\r\n a.localeCompare(b, undefined, { numeric: true })\r\n )\r\n .map((flag, index) => {\r\n return (\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 SearchIndexOverview;\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 SearchIndexItemConnector from 'Search/Table/SearchIndexItemConnector';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\nimport hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';\r\nimport SearchIndexOverview from './SearchIndexOverview';\r\nimport styles from './SearchIndexOverviews.css';\r\n\r\nclass SearchIndexOverviews 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 rowHeight: 100,\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 sortKey,\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 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, 'guid')\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 (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 rowHeight = 100;\r\n\r\n this.setState({\r\n width,\r\n rowHeight\r\n });\r\n };\r\n\r\n cellRenderer = ({ key, rowIndex, style }) => {\r\n const {\r\n items,\r\n showRelativeDates,\r\n shortDateFormat,\r\n longDateFormat,\r\n timeFormat,\r\n isSmallScreen,\r\n onGrabPress\r\n } = this.props;\r\n\r\n const {\r\n rowHeight\r\n } = this.state;\r\n\r\n const release = items[rowIndex];\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 items\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\nSearchIndexOverviews.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n sortKey: PropTypes.string,\r\n scrollTop: PropTypes.number,\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 onGrabPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default SearchIndexOverviews;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"SearchIndexOverviews-grid-GlMr5\",\"container\":\"SearchIndexOverviews-container-MFNAP\",\"content\":\"SearchIndexOverviews-content-agiDd\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { grabRelease } from 'Store/Actions/releaseActions';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport SearchIndexOverviews from './SearchIndexOverviews';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createUISettingsSelector(),\r\n createDimensionsSelector(),\r\n (uiSettings, dimensions) => {\r\n return {\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\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onGrabPress(payload) {\r\n dispatch(grabRelease(payload));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(SearchIndexOverviews);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"message\":\"NoSearchResults-message-dniHH Alert-alert-_KgnQ\"};","import React from 'react';\r\nimport Alert from 'Components/Alert';\r\nimport { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './NoSearchResults.css';\r\n\r\ninterface NoSearchResultsProps {\r\n totalItems: number;\r\n}\r\n\r\nfunction NoSearchResults(props: NoSearchResultsProps) {\r\n const { totalItems } = props;\r\n\r\n if (totalItems > 0) {\r\n return (\r\n \r\n {translate('AllSearchResultsHiddenByFilter')}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {translate('NoSearchResultsFound')}\r\n \r\n );\r\n}\r\n\r\nexport default NoSearchResults;\r\n","import { groupBy, map } 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 titleCase from 'Utilities/String/titleCase';\r\nimport EnhancedSelectInput from './EnhancedSelectInput';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state, { value }) => value,\r\n createSortedSectionSelector('indexers', sortByProp('name')),\r\n (value, indexers) => {\r\n const values = [];\r\n const groupedIndexers = map(groupBy(indexers.items, 'protocol'), (val, key) => ({ protocol: key, indexers: val }));\r\n\r\n groupedIndexers.forEach((element) => {\r\n values.push({\r\n key: element.protocol === 'usenet' ? -1 : -2,\r\n value: titleCase(element.protocol)\r\n });\r\n\r\n if (element.indexers && element.indexers.length > 0) {\r\n element.indexers.forEach((indexer) => {\r\n values.push({\r\n key: indexer.id,\r\n value: indexer.name,\r\n hint: `(${indexer.id})`,\r\n isDisabled: !indexer.enable,\r\n parentKey: element.protocol === 'usenet' ? -1 : -2\r\n });\r\n });\r\n }\r\n });\r\n\r\n return {\r\n value,\r\n values\r\n };\r\n }\r\n );\r\n}\r\n\r\nclass IndexersSelectInputConnector extends Component {\r\n\r\n onChange = ({ name, value }) => {\r\n this.props.onChange({ 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\nIndexersSelectInputConnector.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n indexerIds: PropTypes.number,\r\n value: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, 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)(IndexersSelectInputConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"option\":\"QueryParameterOption-option-OoL2Q\",\"token\":\"QueryParameterOption-token-Rqupl\",\"example\":\"QueryParameterOption-example-qJTo2\",\"small\":\"QueryParameterOption-small-HmzQY\",\"large\":\"QueryParameterOption-large-Jnurz\",\"footNote\":\"QueryParameterOption-footNote-UgsRs\",\"isFullFilename\":\"QueryParameterOption-isFullFilename-pEtxE\"};","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, sizes } from 'Helpers/Props';\r\nimport styles from './QueryParameterOption.css';\r\n\r\nclass QueryParameterOption extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onPress = () => {\r\n const {\r\n token,\r\n tokenSeparator,\r\n isFullFilename,\r\n onPress\r\n } = this.props;\r\n\r\n let tokenValue = token;\r\n\r\n tokenValue = tokenValue.replace(/ /g, tokenSeparator);\r\n\r\n onPress({ isFullFilename, tokenValue });\r\n };\r\n\r\n //\r\n // Render\r\n render() {\r\n const {\r\n token,\r\n tokenSeparator,\r\n example,\r\n footNote,\r\n isFullFilename,\r\n size\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n {token.replace(/ /g, tokenSeparator)}\r\n
\r\n\r\n
\r\n {example.replace(/ /g, tokenSeparator)}\r\n\r\n {\r\n footNote !== 0 &&\r\n \r\n }\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nQueryParameterOption.propTypes = {\r\n token: PropTypes.string.isRequired,\r\n example: PropTypes.string.isRequired,\r\n footNote: PropTypes.number.isRequired,\r\n tokenSeparator: PropTypes.string.isRequired,\r\n isFullFilename: PropTypes.bool.isRequired,\r\n size: PropTypes.oneOf([sizes.SMALL, sizes.LARGE]),\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nQueryParameterOption.defaultProps = {\r\n footNote: 0,\r\n size: sizes.SMALL,\r\n isFullFilename: false\r\n};\r\n\r\nexport default QueryParameterOption;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"groups\":\"QueryParameterModal-groups-y2KGk\",\"namingSelectContainer\":\"QueryParameterModal-namingSelectContainer-jWCbz\",\"namingSelect\":\"QueryParameterModal-namingSelect-qQUsb SelectInput-select-M6gsU Input-input-KWeec\",\"footNote\":\"QueryParameterModal-footNote-PjEDc\",\"icon\":\"QueryParameterModal-icon-bzyST\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } 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 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 translate from 'Utilities/String/translate';\r\nimport QueryParameterOption from './QueryParameterOption';\r\nimport styles from './QueryParameterModal.css';\r\n\r\nconst searchOptions = [\r\n { key: 'search', value: () => translate('BasicSearch') },\r\n { key: 'tvsearch', value: () => translate('TvSearch') },\r\n { key: 'movie', value: () => translate('MovieSearch') },\r\n { key: 'music', value: () => translate( 'AudioSearch') },\r\n { key: 'book', value: () => translate('BookSearch') }\r\n];\r\n\r\nconst seriesTokens = [\r\n { token: '{ImdbId:tt1234567}', example: 'tt12345' },\r\n { token: '{TvdbId:12345}', example: '12345' },\r\n { token: '{TmdbId:12345}', example: '12345' },\r\n { token: '{TvMazeId:12345}', example: '54321' },\r\n { token: '{Season:00}', example: '01' },\r\n { token: '{Episode:00}', example: '01' }\r\n];\r\n\r\nconst movieTokens = [\r\n { token: '{ImdbId:tt1234567}', example: 'tt12345' },\r\n { token: '{TmdbId:12345}', example: '12345' },\r\n { token: '{Year:2000}', example: '2005' }\r\n];\r\n\r\nconst audioTokens = [\r\n { token: '{Artist:Some Body}', example: 'Nirvana' },\r\n { token: '{Album:Some Album}', example: 'Nevermind' },\r\n { token: '{Label:Some Label}', example: 'Geffen' }\r\n];\r\n\r\nconst bookTokens = [\r\n { token: '{Author:Some Author}', example: 'J. R. R. Tolkien' },\r\n { token: '{Title:Some Book}', example: 'Lord of the Rings' }\r\n];\r\n\r\nclass QueryParameterModal 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._selectionStart = null;\r\n this._selectionEnd = null;\r\n\r\n this.state = {\r\n separator: ' '\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputSelectionChange = (selectionStart, selectionEnd) => {\r\n this._selectionStart = selectionStart;\r\n this._selectionEnd = selectionEnd;\r\n };\r\n\r\n onOptionPress = ({ isFullFilename, tokenValue }) => {\r\n const {\r\n name,\r\n value,\r\n onSearchInputChange\r\n } = this.props;\r\n\r\n const selectionStart = this._selectionStart;\r\n const selectionEnd = this._selectionEnd;\r\n\r\n if (isFullFilename) {\r\n onSearchInputChange({ name, value: tokenValue });\r\n } else if (selectionStart == null) {\r\n onSearchInputChange({\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 onSearchInputChange({ name, value: newValue });\r\n this._selectionStart = newValue.length;\r\n this._selectionEnd = newValue.length;\r\n }\r\n };\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.onSearchInputChange({ 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 name,\r\n value,\r\n searchType,\r\n isOpen,\r\n onSearchInputChange,\r\n onModalClose\r\n } = this.props;\r\n\r\n const {\r\n separator: tokenSeparator\r\n } = this.state;\r\n\r\n return (\r\n \r\n \r\n \r\n {translate('QueryOptions')}\r\n \r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n {\r\n searchType === 'tvsearch' &&\r\n
\r\n
\r\n {\r\n seriesTokens.map(({ token, example }) => {\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 searchType === 'movie' &&\r\n
\r\n
\r\n {\r\n movieTokens.map(({ token, example }) => {\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 searchType === 'music' &&\r\n
\r\n
\r\n {\r\n audioTokens.map(({ token, example }) => {\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 searchType === 'book' &&\r\n
\r\n
\r\n {\r\n bookTokens.map(({ token, example }) => {\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\nQueryParameterModal.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n searchType: PropTypes.string.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n onSearchInputChange: PropTypes.func.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default QueryParameterModal;\r\n","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 './SearchFooterLabel.css';\r\n\r\nfunction SearchFooterLabel(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\nSearchFooterLabel.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n isSaving: PropTypes.bool.isRequired\r\n};\r\n\r\nSearchFooterLabel.defaultProps = {\r\n className: styles.label\r\n};\r\n\r\nexport default SearchFooterLabel;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"label\":\"SearchFooterLabel-label-wleNS\",\"savingIcon\":\"SearchFooterLabel-savingIcon-Z_AGl\"};","// extracted by mini-css-extract-plugin\nexport default {\"inputContainer\":\"SearchFooter-inputContainer-Lr80u\",\"indexerContainer\":\"SearchFooter-indexerContainer-BM5oB\",\"buttonContainer\":\"SearchFooter-buttonContainer-Pfxmi\",\"buttonContainerContent\":\"SearchFooter-buttonContainerContent-fJ66T\",\"buttons\":\"SearchFooter-buttons-ts4_y\",\"searchButton\":\"SearchFooter-searchButton-OeYlV SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\",\"grabReleasesButton\":\"SearchFooter-grabReleasesButton-_WC7O SpinnerButton-button-uE9hL Button-button-paJ9a Link-link-RInnp\",\"selectedReleasesLabel\":\"SearchFooter-selectedReleasesLabel-DwBkB\"};","import _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport FormInputButton from 'Components/Form/FormInputButton';\r\nimport FormInputGroup from 'Components/Form/FormInputGroup';\r\nimport IndexersSelectInputConnector from 'Components/Form/IndexersSelectInputConnector';\r\nimport NewznabCategorySelectInputConnector from 'Components/Form/NewznabCategorySelectInputConnector';\r\nimport Icon from 'Components/Icon';\r\nimport keyboardShortcuts from 'Components/keyboardShortcuts';\r\nimport SpinnerButton from 'Components/Link/SpinnerButton';\r\nimport PageContentFooter from 'Components/Page/PageContentFooter';\r\nimport { icons, inputTypes, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport QueryParameterModal from './QueryParameterModal';\r\nimport SearchFooterLabel from './SearchFooterLabel';\r\nimport styles from './SearchFooter.css';\r\n\r\nclass SearchFooter 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 defaultSearchQueryParams,\r\n defaultIndexerIds,\r\n defaultCategories,\r\n defaultSearchQuery,\r\n defaultSearchType,\r\n defaultSearchLimit,\r\n defaultSearchOffset\r\n } = props;\r\n\r\n this.state = {\r\n searchIndexerIds: defaultSearchQueryParams.searchIndexerIds ?? defaultIndexerIds,\r\n searchCategories: defaultSearchQueryParams.searchCategories ?? defaultCategories,\r\n searchQuery: (defaultSearchQueryParams.searchQuery ?? defaultSearchQuery) || '',\r\n searchType: defaultSearchQueryParams.searchType ?? defaultSearchType,\r\n searchLimit: defaultSearchQueryParams.searchLimit ?? defaultSearchLimit,\r\n searchOffset: defaultSearchQueryParams.searchOffset ?? defaultSearchOffset,\r\n newSearch: true,\r\n searchingReleases: false,\r\n isQueryParameterModalOpen: false,\r\n queryModalOptions: null\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const {\r\n searchIndexerIds,\r\n searchCategories,\r\n searchQuery\r\n } = this.state;\r\n\r\n if (searchQuery !== '' || searchCategories.length > 0 || searchIndexerIds.length > 0) {\r\n this.onSearchPress();\r\n }\r\n\r\n setTimeout(() => {\r\n this.props.bindShortcut('enter', this.onSearchPress, { isGlobal: true });\r\n });\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n isFetching,\r\n defaultIndexerIds,\r\n defaultCategories,\r\n defaultSearchQuery,\r\n defaultSearchType,\r\n searchError\r\n } = this.props;\r\n\r\n const {\r\n searchIndexerIds,\r\n searchCategories,\r\n searchType\r\n } = this.state;\r\n\r\n const newState = {};\r\n\r\n if (defaultSearchQuery && defaultSearchQuery !== prevProps.defaultSearchQuery) {\r\n newState.searchQuery = defaultSearchQuery;\r\n newState.searchOffset = 0;\r\n newState.newSearch = true;\r\n }\r\n\r\n if (searchType !== defaultSearchType) {\r\n newState.searchType = defaultSearchType;\r\n }\r\n\r\n if (searchIndexerIds !== defaultIndexerIds) {\r\n newState.searchIndexerIds = defaultIndexerIds;\r\n }\r\n\r\n if (searchCategories !== defaultCategories) {\r\n newState.searchCategories = defaultCategories;\r\n }\r\n\r\n if (prevProps.isFetching && !isFetching && !searchError) {\r\n newState.searchingReleases = false;\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 onQueryParameterModalOpenClick = () => {\r\n this.setState({\r\n queryModalOptions: {\r\n name: 'queryParameters'\r\n },\r\n isQueryParameterModalOpen: true\r\n });\r\n };\r\n\r\n onQueryParameterModalClose = () => {\r\n this.setState({ isQueryParameterModalOpen: false });\r\n };\r\n\r\n onSearchPress = () => {\r\n const {\r\n searchLimit,\r\n searchOffset,\r\n searchQuery,\r\n searchIndexerIds,\r\n searchCategories,\r\n searchType\r\n } = this.state;\r\n\r\n this.props.onSearchPress(searchQuery, searchIndexerIds, searchCategories, searchType, searchLimit, searchOffset);\r\n\r\n this.setState({ searchOffset: searchOffset + 100, newSearch: false });\r\n };\r\n\r\n onSearchInputChange = ({ value }) => {\r\n this.setState({ searchQuery: value, newSearch: true, searchOffset: 0 });\r\n };\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.onInputChange({ name, value });\r\n this.setState({ newSearch: true, searchOffset: 0 });\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 isGrabbing,\r\n hasIndexers,\r\n onInputChange,\r\n onBulkGrabPress,\r\n itemCount,\r\n selectedCount\r\n } = this.props;\r\n\r\n const {\r\n searchQuery,\r\n searchIndexerIds,\r\n searchCategories,\r\n newSearch,\r\n isQueryParameterModalOpen,\r\n queryModalOptions,\r\n searchType\r\n } = this.state;\r\n\r\n let icon = icons.SEARCH;\r\n\r\n switch (searchType) {\r\n case 'book':\r\n icon = icons.BOOK;\r\n break;\r\n case 'tvsearch':\r\n icon = icons.TV;\r\n break;\r\n case 'movie':\r\n icon = icons.FILM;\r\n break;\r\n case 'music':\r\n icon = icons.AUDIO;\r\n break;\r\n default:\r\n icon = icons.SEARCH;\r\n break;\r\n }\r\n\r\n let footerLabel = searchIndexerIds.length === 0 ? translate('SearchAllIndexers') : translate('SearchCountIndexers', { count: searchIndexerIds.length });\r\n\r\n if (isPopulated) {\r\n footerLabel = selectedCount === 0 ? translate('FoundCountReleases', { itemCount }) : translate('SelectedCountOfCountReleases', { selectedCount, itemCount });\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n\r\n \r\n \r\n }\r\n onChange={this.onSearchInputChange}\r\n onFocus={this.onApikeyFocus}\r\n isDisabled={isFetching}\r\n {...searchQuery}\r\n />\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n\r\n
\r\n {\r\n isPopulated &&\r\n \r\n {translate('GrabReleases')}\r\n \r\n }\r\n\r\n \r\n {newSearch ? translate('Search') : translate('More')}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nSearchFooter.propTypes = {\r\n defaultSearchQueryParams: PropTypes.object.isRequired,\r\n defaultIndexerIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n defaultCategories: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n defaultSearchQuery: PropTypes.string.isRequired,\r\n defaultSearchType: PropTypes.string.isRequired,\r\n defaultSearchLimit: PropTypes.number.isRequired,\r\n defaultSearchOffset: PropTypes.number.isRequired,\r\n selectedCount: PropTypes.number.isRequired,\r\n itemCount: PropTypes.number.isRequired,\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n isGrabbing: PropTypes.bool.isRequired,\r\n onSearchPress: PropTypes.func.isRequired,\r\n onBulkGrabPress: PropTypes.func.isRequired,\r\n hasIndexers: PropTypes.bool.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n searchError: PropTypes.object,\r\n bindShortcut: PropTypes.func.isRequired\r\n};\r\n\r\nexport default keyboardShortcuts(SearchFooter);\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 { setSearchDefault } from 'Store/Actions/releaseActions';\r\nimport parseUrl from 'Utilities/String/parseUrl';\r\nimport SearchFooter from './SearchFooter';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.releases,\r\n (state) => state.router.location,\r\n (releases, location) => {\r\n const {\r\n searchQuery: defaultSearchQuery,\r\n searchIndexerIds: defaultIndexerIds,\r\n searchCategories: defaultCategories,\r\n searchType: defaultSearchType,\r\n searchLimit: defaultSearchLimit,\r\n searchOffset: defaultSearchOffset\r\n } = releases.defaults;\r\n\r\n const { params } = parseUrl(location.search);\r\n const defaultSearchQueryParams = {};\r\n\r\n if (params.query && !defaultSearchQuery) {\r\n defaultSearchQueryParams.searchQuery = params.query;\r\n }\r\n\r\n if (params.indexerIds && !defaultIndexerIds.length) {\r\n defaultSearchQueryParams.searchIndexerIds = params.indexerIds.split(',').map((id) => Number(id)).filter(Boolean);\r\n }\r\n\r\n if (params.categories && !defaultCategories.length) {\r\n defaultSearchQueryParams.searchCategories = params.categories.split(',').map((id) => Number(id)).filter(Boolean);\r\n }\r\n\r\n if (params.type && defaultSearchType === 'search') {\r\n defaultSearchQueryParams.searchType = params.type;\r\n }\r\n\r\n if (params.limit && defaultSearchLimit === 100 && !isNaN(params.limit)) {\r\n defaultSearchQueryParams.searchLimit = Number(params.limit);\r\n }\r\n\r\n if (params.offset && !defaultSearchOffset && !isNaN(params.offset)) {\r\n defaultSearchQueryParams.searchOffset = Number(params.offset);\r\n }\r\n\r\n return {\r\n defaultSearchQueryParams,\r\n defaultSearchQuery,\r\n defaultIndexerIds,\r\n defaultCategories,\r\n defaultSearchType,\r\n defaultSearchLimit,\r\n defaultSearchOffset\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setSearchDefault\r\n};\r\n\r\nclass SearchFooterConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n // Set defaults from query parameters\r\n Object.entries(this.props.defaultSearchQueryParams).forEach(([name, value]) => {\r\n this.onInputChange({ name, value });\r\n });\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setSearchDefault({ [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\nSearchFooterConnector.propTypes = {\r\n defaultSearchQueryParams: PropTypes.object.isRequired,\r\n setSearchDefault: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(SearchFooterConnector);\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 focusScroller,\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 focusScroller: PropTypes.bool.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 focusScroller: true\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 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\"};","// extracted by mini-css-extract-plugin\nexport default {\"protocol\":\"SearchIndexHeader-protocol-EnOQW VirtualTableHeaderCell-headerCell-oq_lz\",\"sortTitle\":\"SearchIndexHeader-sortTitle-uu7r4 VirtualTableHeaderCell-headerCell-oq_lz\",\"indexer\":\"SearchIndexHeader-indexer-f50zQ VirtualTableHeaderCell-headerCell-oq_lz\",\"category\":\"SearchIndexHeader-category-nZI7O VirtualTableHeaderCell-headerCell-oq_lz\",\"age\":\"SearchIndexHeader-age-vstR7 VirtualTableHeaderCell-headerCell-oq_lz\",\"size\":\"SearchIndexHeader-size-_LQbC VirtualTableHeaderCell-headerCell-oq_lz\",\"files\":\"SearchIndexHeader-files-qP_Bt VirtualTableHeaderCell-headerCell-oq_lz\",\"grabs\":\"SearchIndexHeader-grabs-XuLVC VirtualTableHeaderCell-headerCell-oq_lz\",\"peers\":\"SearchIndexHeader-peers-uyGTS VirtualTableHeaderCell-headerCell-oq_lz\",\"indexerFlags\":\"SearchIndexHeader-indexerFlags-ckqc8 VirtualTableHeaderCell-headerCell-oq_lz\",\"actions\":\"SearchIndexHeader-actions-nbIH3 VirtualTableHeaderCell-headerCell-oq_lz\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\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 styles from './SearchIndexHeader.css';\r\n\r\nclass SearchIndexHeader 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 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 === 'select') {\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 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\nSearchIndexHeader.propTypes = {\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n allSelected: PropTypes.bool.isRequired,\r\n allUnselected: PropTypes.bool.isRequired,\r\n onSelectAllChange: PropTypes.func.isRequired,\r\n onTableOptionChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default SearchIndexHeader;\r\n","import { connect } from 'react-redux';\r\nimport { setReleasesTableOption } from 'Store/Actions/releaseActions';\r\nimport SearchIndexHeader from './SearchIndexHeader';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n return {\r\n onTableOptionChange(payload) {\r\n dispatch(setReleasesTableOption(payload));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(undefined, createMapDispatchToProps)(SearchIndexHeader);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"links\":\"ReleaseLinks-links-oLgcP\",\"link\":\"ReleaseLinks-link-KO1pq\",\"linkLabel\":\"ReleaseLinks-linkLabel-sblQ0 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 { IndexerCategory } from 'Indexer/Indexer';\r\nimport styles from './ReleaseLinks.css';\r\n\r\ninterface ReleaseLinksProps {\r\n categories: IndexerCategory[];\r\n imdbId?: string;\r\n tmdbId?: number;\r\n tvdbId?: number;\r\n tvMazeId?: number;\r\n}\r\n\r\nfunction ReleaseLinks(props: ReleaseLinksProps) {\r\n const { categories = [], imdbId, tmdbId, tvdbId, tvMazeId } = props;\r\n\r\n const categoryNames = categories\r\n .filter((item) => item.id < 100000)\r\n .map((c) => c.name);\r\n\r\n return (\r\n
\r\n {imdbId ? (\r\n \r\n \r\n IMDb\r\n \r\n \r\n ) : null}\r\n\r\n {tmdbId ? (\r\n \r\n \r\n TMDb\r\n \r\n \r\n ) : null}\r\n\r\n {tvdbId ? (\r\n \r\n \r\n TVDb\r\n \r\n \r\n ) : null}\r\n\r\n {tvMazeId ? (\r\n \r\n \r\n TV Maze\r\n \r\n \r\n ) : null}\r\n
\r\n );\r\n}\r\n\r\nexport default ReleaseLinks;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"protocol\":\"SearchIndexRow-protocol-ni7Mp SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"sortTitle\":\"SearchIndexRow-sortTitle-sQqo7 SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"indexer\":\"SearchIndexRow-indexer-vK32F SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"category\":\"SearchIndexRow-category-WGMX_ SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"age\":\"SearchIndexRow-age-mTjyP SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"size\":\"SearchIndexRow-size-V9kGS SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"files\":\"SearchIndexRow-files-LKpTX SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"grabs\":\"SearchIndexRow-grabs-zjo0m SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"peers\":\"SearchIndexRow-peers-eNctg SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"indexerFlags\":\"SearchIndexRow-indexerFlags-fMoVz SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"actions\":\"SearchIndexRow-actions-CT9jJ SearchIndexRow-cell-PeDn7 VirtualTableRowCell-cell-_Qpcm TableRowCell-cell-giPrj\",\"checkInput\":\"SearchIndexRow-checkInput-fMdsV CheckInput-input-VAM1T\",\"downloadLink\":\"SearchIndexRow-downloadLink-ALh8B Link-link-RInnp\",\"externalLinks\":\"SearchIndexRow-externalLinks-mU1S2 IconButton-button-t4C5V Link-link-RInnp\",\"manualDownloadContent\":\"SearchIndexRow-manualDownloadContent-tnaRd\",\"interactiveIcon\":\"SearchIndexRow-interactiveIcon-esmxI\",\"downloadIcon\":\"SearchIndexRow-downloadIcon-u1kK_\"};","import React, { useCallback, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\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 VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';\r\nimport VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell';\r\nimport Column from 'Components/Table/Column';\r\nimport Popover from 'Components/Tooltip/Popover';\r\nimport DownloadProtocol from 'DownloadClient/DownloadProtocol';\r\nimport { icons, kinds, tooltipPositions } from 'Helpers/Props';\r\nimport ProtocolLabel from 'Indexer/Index/Table/ProtocolLabel';\r\nimport { IndexerCategory } from 'Indexer/Indexer';\r\nimport OverrideMatchModal from 'Search/OverrideMatch/OverrideMatchModal';\r\nimport createEnabledDownloadClientsSelector from 'Store/Selectors/createEnabledDownloadClientsSelector';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport formatDateTime from 'Utilities/Date/formatDateTime';\r\nimport formatAge from 'Utilities/Number/formatAge';\r\nimport formatBytes from 'Utilities/Number/formatBytes';\r\nimport titleCase from 'Utilities/String/titleCase';\r\nimport translate from 'Utilities/String/translate';\r\nimport CategoryLabel from './CategoryLabel';\r\nimport Peers from './Peers';\r\nimport ReleaseLinks from './ReleaseLinks';\r\nimport styles from './SearchIndexRow.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('AddedToDownloadClient');\r\n } else if (grabError) {\r\n return grabError;\r\n }\r\n\r\n return translate('AddToDownloadClient');\r\n}\r\n\r\ninterface SearchIndexRowProps {\r\n guid: string;\r\n protocol: DownloadProtocol;\r\n age: number;\r\n ageHours: number;\r\n ageMinutes: number;\r\n publishDate: string;\r\n title: string;\r\n fileName: string;\r\n infoUrl: string;\r\n downloadUrl?: string;\r\n magnetUrl?: string;\r\n indexerId: number;\r\n indexer: string;\r\n categories: IndexerCategory[];\r\n size: number;\r\n files?: number;\r\n grabs?: number;\r\n seeders?: number;\r\n leechers?: number;\r\n imdbId?: string;\r\n tmdbId?: number;\r\n tvdbId?: number;\r\n tvMazeId?: number;\r\n indexerFlags: string[];\r\n isGrabbing: boolean;\r\n isGrabbed: boolean;\r\n grabError?: string;\r\n longDateFormat: string;\r\n timeFormat: string;\r\n columns: Column[];\r\n isSelected?: boolean;\r\n onSelectedChange(result: SelectStateInputProps): void;\r\n onGrabPress(...args: unknown[]): void;\r\n onSavePress(...args: unknown[]): void;\r\n}\r\n\r\nfunction SearchIndexRow(props: SearchIndexRowProps) {\r\n const {\r\n guid,\r\n indexerId,\r\n protocol,\r\n categories,\r\n age,\r\n ageHours,\r\n ageMinutes,\r\n publishDate,\r\n title,\r\n fileName,\r\n infoUrl,\r\n downloadUrl,\r\n magnetUrl,\r\n indexer,\r\n size,\r\n files,\r\n grabs,\r\n seeders,\r\n leechers,\r\n imdbId,\r\n tmdbId,\r\n tvdbId,\r\n tvMazeId,\r\n indexerFlags = [],\r\n isGrabbing = false,\r\n isGrabbed = false,\r\n grabError,\r\n longDateFormat,\r\n timeFormat,\r\n columns,\r\n isSelected,\r\n onSelectedChange,\r\n onGrabPress,\r\n onSavePress,\r\n } = props;\r\n\r\n const [isOverrideModalOpen, setIsOverrideModalOpen] = useState(false);\r\n\r\n const { items: downloadClients } = useSelector(\r\n createEnabledDownloadClientsSelector(protocol)\r\n );\r\n\r\n const onGrabPressWrapper = useCallback(() => {\r\n onGrabPress({\r\n guid,\r\n indexerId,\r\n });\r\n }, [guid, indexerId, onGrabPress]);\r\n\r\n const onSavePressWrapper = useCallback(() => {\r\n onSavePress({\r\n downloadUrl,\r\n fileName,\r\n });\r\n }, [downloadUrl, fileName, onSavePress]);\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 {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 === 'select') {\r\n return (\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 === 'age') {\r\n return (\r\n \r\n {formatAge(age, ageHours, ageMinutes)}\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 }\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 === 'size') {\r\n return (\r\n \r\n {formatBytes(size)}\r\n \r\n );\r\n }\r\n\r\n if (name === 'files') {\r\n return (\r\n \r\n {files}\r\n \r\n );\r\n }\r\n\r\n if (name === 'grabs') {\r\n return (\r\n \r\n {grabs}\r\n \r\n );\r\n }\r\n\r\n if (name === 'peers') {\r\n return (\r\n \r\n {protocol === 'torrent' && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n if (name === 'category') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (name === 'indexerFlags') {\r\n return (\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
  • {titleCase(flag)}
  • ;\r\n })}\r\n
\r\n }\r\n position={tooltipPositions.LEFT}\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 {downloadClients.length > 1 ? (\r\n \r\n
\r\n \r\n\r\n \r\n
\r\n \r\n ) : null}\r\n\r\n {downloadUrl ? (\r\n \r\n ) : null}\r\n\r\n {magnetUrl ? (\r\n \r\n ) : null}\r\n\r\n {imdbId || tmdbId || tvdbId || tvMazeId ? (\r\n \r\n }\r\n title={translate('Links')}\r\n body={\r\n \r\n }\r\n position={tooltipPositions.TOP}\r\n />\r\n ) : null}\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 SearchIndexRow;\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 { sortDirections } from 'Helpers/Props';\r\nimport getIndexOfFirstCharacter from 'Utilities/Array/getIndexOfFirstCharacter';\r\nimport SearchIndexHeaderConnector from './SearchIndexHeaderConnector';\r\nimport SearchIndexItemConnector from './SearchIndexItemConnector';\r\nimport SearchIndexRow from './SearchIndexRow';\r\nimport styles from './SearchIndexTable.css';\r\n\r\nclass SearchIndexTable 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 longDateFormat,\r\n timeFormat,\r\n selectedState,\r\n onSelectedChange,\r\n onGrabPress,\r\n onSavePress\r\n } = this.props;\r\n\r\n const release = 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\nSearchIndexTable.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 longDateFormat: PropTypes.string.isRequired,\r\n timeFormat: PropTypes.string.isRequired,\r\n onSortPress: PropTypes.func.isRequired,\r\n onGrabPress: PropTypes.func.isRequired,\r\n onSavePress: 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 SearchIndexTable;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"tableContainer\":\"SearchIndexTable-tableContainer-yugsf VirtualTable-tableContainer-MHSuC\"};","import { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { grabRelease, saveRelease, setReleasesSort } from 'Store/Actions/releaseActions';\r\nimport createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';\r\nimport SearchIndexTable from './SearchIndexTable';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.app.dimensions,\r\n createUISettingsSelector(),\r\n (dimensions, uiSettings) => {\r\n return {\r\n isSmallScreen: dimensions.isSmallScreen,\r\n longDateFormat: uiSettings.longDateFormat,\r\n timeFormat: uiSettings.timeFormat\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(setReleasesSort({ sortKey }));\r\n },\r\n onGrabPress(payload) {\r\n dispatch(grabRelease(payload));\r\n },\r\n onSavePress(payload) {\r\n dispatch(saveRelease(payload));\r\n }\r\n };\r\n}\r\n\r\nexport default connect(createMapStateToProps, createMapDispatchToProps)(SearchIndexTable);\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 AddIndexerModal from 'Indexer/Add/AddIndexerModal';\r\nimport EditIndexerModalConnector from 'Indexer/Edit/EditIndexerModalConnector';\r\nimport NoIndexer from 'Indexer/NoIndexer';\r\nimport * as keyCodes from 'Utilities/Constants/keyCodes';\r\nimport getErrorMessage from 'Utilities/Object/getErrorMessage';\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 SearchIndexFilterMenu from './Menus/SearchIndexFilterMenu';\r\nimport SearchIndexSortMenu from './Menus/SearchIndexSortMenu';\r\nimport SearchIndexOverviewsConnector from './Mobile/SearchIndexOverviewsConnector';\r\nimport NoSearchResults from './NoSearchResults';\r\nimport SearchFooterConnector from './SearchFooterConnector';\r\nimport SearchIndexTableConnector from './Table/SearchIndexTableConnector';\r\nimport styles from './SearchIndex.css';\r\n\r\nconst getViewComponent = (isSmallScreen) => (isSmallScreen ? SearchIndexOverviewsConnector : SearchIndexTableConnector);\r\n\r\nclass SearchIndex 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 scroller: null,\r\n jumpBarItems: { order: [] },\r\n jumpToCharacter: null,\r\n searchType: null,\r\n lastToggled: null,\r\n allSelected: false,\r\n allUnselected: false,\r\n selectedState: {},\r\n isAddIndexerModalOpen: false,\r\n isEditIndexerModalOpen: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setJumpBarItems();\r\n this.setSelectedState();\r\n\r\n window.addEventListener('keyup', this.onKeyUp);\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, 'guid')\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 componentWillUnmount() {\r\n window.removeEventListener('keyup', this.onKeyUp);\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\r\n return _.reduce(this.state.selectedState, (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 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((release) => {\r\n const isItemSelected = selectedState[release.guid];\r\n\r\n if (isItemSelected) {\r\n newSelectedState[release.guid] = isItemSelected;\r\n } else {\r\n newSelectedState[release.guid] = 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(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 === 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 onAddIndexerPress = () => {\r\n this.setState({ isAddIndexerModalOpen: true });\r\n };\r\n\r\n onAddIndexerModalClose = () => {\r\n this.setState({ isAddIndexerModalOpen: false });\r\n };\r\n\r\n onAddIndexerSelectIndexer = () => {\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 onJumpBarItemPress = (jumpToCharacter) => {\r\n this.setState({ jumpToCharacter });\r\n };\r\n\r\n onSearchPress = (query, indexerIds, categories, type, limit, offset) => {\r\n this.props.onSearchPress({ query, indexerIds, categories, type, limit, offset });\r\n };\r\n\r\n onBulkGrabPress = () => {\r\n const selectedIds = this.getSelectedIds();\r\n const result = _.filter(this.props.items, (release) => _.indexOf(selectedIds, release.guid) !== -1);\r\n this.props.onBulkGrabPress(result);\r\n };\r\n\r\n onKeyUp = (event) => {\r\n const jumpBarItems = this.state.jumpBarItems.order;\r\n\r\n if (event.composedPath && event.composedPath().length === 4) {\r\n if (event.keyCode === keyCodes.HOME && event.ctrlKey) {\r\n this.setState({ jumpToCharacter: jumpBarItems[0] });\r\n }\r\n if (event.keyCode === keyCodes.END && event.ctrlKey) {\r\n this.setState({ jumpToCharacter: jumpBarItems[jumpBarItems.length - 1] });\r\n }\r\n }\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 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 //\r\n // Render\r\n\r\n render() {\r\n const {\r\n isFetching,\r\n isPopulated,\r\n isGrabbing,\r\n error,\r\n grabError,\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 onSortSelect,\r\n onFilterSelect,\r\n isSmallScreen,\r\n hasIndexers,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n jumpBarItems,\r\n jumpToCharacter,\r\n selectedState,\r\n allSelected,\r\n allUnselected,\r\n isAddIndexerModalOpen,\r\n isEditIndexerModalOpen\r\n } = this.state;\r\n\r\n const selectedIndexerIds = this.getSelectedIds();\r\n\r\n const ViewComponent = getViewComponent(isSmallScreen);\r\n const isLoaded = !!(!error && isPopulated && items.length && this.scrollerRef.current);\r\n const hasNoSearchResults = !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 isFetching && !isPopulated ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n !isFetching && !!error ?\r\n \r\n {getErrorMessage(error, 'Failed to load search results from API')}\r\n :\r\n null\r\n }\r\n\r\n {\r\n isLoaded &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {\r\n !error && !isFetching && !hasIndexers ?\r\n :\r\n null\r\n }\r\n\r\n {\r\n !error && !isFetching && isPopulated && hasIndexers && !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 isLoaded && !!jumpBarItems.order.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\nSearchIndex.propTypes = {\r\n isFetching: PropTypes.bool.isRequired,\r\n isPopulated: PropTypes.bool.isRequired,\r\n isGrabbing: PropTypes.bool.isRequired,\r\n error: PropTypes.object,\r\n grabError: 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 isSmallScreen: PropTypes.bool.isRequired,\r\n onSortSelect: PropTypes.func.isRequired,\r\n onFilterSelect: PropTypes.func.isRequired,\r\n onSearchPress: PropTypes.func.isRequired,\r\n onBulkGrabPress: PropTypes.func.isRequired,\r\n hasIndexers: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default SearchIndex;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"pageContentBodyWrapper\":\"SearchIndex-pageContentBodyWrapper-WBncq\",\"errorMessage\":\"SearchIndex-errorMessage-BHeVn\",\"contentBody\":\"SearchIndex-contentBody-kJ0gV PageContentBody-contentBody-Hetrs\",\"postersInnerContentBody\":\"SearchIndex-postersInnerContentBody-JgWZz PageContentBody-innerContentBody-PtigL\",\"tableInnerContentBody\":\"SearchIndex-tableInnerContentBody-M1vSj PageContentBody-innerContentBody-PtigL\",\"contentBodyContainer\":\"SearchIndex-contentBodyContainer-vt9z5\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport withScrollPosition from 'Components/withScrollPosition';\r\nimport { bulkGrabReleases, cancelFetchReleases, clearReleases, fetchReleases, setReleasesFilter, setReleasesSort, setReleasesTableOption } from 'Store/Actions/releaseActions';\r\nimport { fetchDownloadClients } from 'Store/Actions/Settings/downloadClients';\r\nimport createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';\r\nimport createReleaseClientSideCollectionItemsSelector from 'Store/Selectors/createReleaseClientSideCollectionItemsSelector';\r\nimport SearchIndex from './SearchIndex';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.indexers,\r\n createReleaseClientSideCollectionItemsSelector('releases'),\r\n createDimensionsSelector(),\r\n (\r\n indexers,\r\n releases,\r\n dimensionsState\r\n ) => {\r\n return {\r\n ...releases,\r\n hasIndexers: indexers.items.length > 0,\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 onTableOptionChange(payload) {\r\n dispatch(setReleasesTableOption(payload));\r\n },\r\n\r\n onSortSelect(sortKey) {\r\n dispatch(setReleasesSort({ sortKey }));\r\n },\r\n\r\n onFilterSelect(selectedFilterKey) {\r\n dispatch(setReleasesFilter({ selectedFilterKey }));\r\n },\r\n\r\n onSearchPress(payload) {\r\n dispatch(fetchReleases(payload));\r\n },\r\n\r\n onBulkGrabPress(payload) {\r\n dispatch(bulkGrabReleases(payload));\r\n },\r\n\r\n dispatchCancelFetchReleases() {\r\n dispatch(cancelFetchReleases());\r\n },\r\n\r\n dispatchClearReleases() {\r\n dispatch(clearReleases());\r\n },\r\n\r\n dispatchFetchDownloadClients() {\r\n dispatch(fetchDownloadClients());\r\n }\r\n };\r\n}\r\n\r\nclass SearchIndexConnector extends Component {\r\n\r\n componentDidMount() {\r\n this.props.dispatchFetchDownloadClients();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.dispatchCancelFetchReleases();\r\n this.props.dispatchClearReleases();\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\nSearchIndexConnector.propTypes = {\r\n isSmallScreen: PropTypes.bool.isRequired,\r\n onSearchPress: PropTypes.func.isRequired,\r\n onBulkGrabPress: PropTypes.func.isRequired,\r\n dispatchCancelFetchReleases: PropTypes.func.isRequired,\r\n dispatchClearReleases: PropTypes.func.isRequired,\r\n dispatchFetchDownloadClients: PropTypes.func.isRequired,\r\n items: PropTypes.arrayOf(PropTypes.object)\r\n};\r\n\r\nexport default withScrollPosition(\r\n connect(createMapStateToProps, createMapDispatchToProps)(SearchIndexConnector),\r\n 'releases'\r\n);\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport Link from 'Components/Link/Link';\r\nimport styles from './Card.css';\r\n\r\nclass Card extends Component {\r\n\r\n //\r\n // Render\r\n\r\n render() {\r\n const {\r\n className,\r\n overlayClassName,\r\n overlayContent,\r\n children,\r\n onPress\r\n } = this.props;\r\n\r\n if (overlayContent) {\r\n return (\r\n
\r\n \r\n\r\n
\r\n {children}\r\n
\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\n\r\nCard.propTypes = {\r\n className: PropTypes.string.isRequired,\r\n overlayClassName: PropTypes.string.isRequired,\r\n overlayContent: PropTypes.bool.isRequired,\r\n children: PropTypes.node.isRequired,\r\n onPress: PropTypes.func.isRequired\r\n};\r\n\r\nCard.defaultProps = {\r\n className: styles.card,\r\n overlayClassName: styles.overlay,\r\n overlayContent: false\r\n};\r\n\r\nexport default Card;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"Card-card-aoesq\",\"underlay\":\"Card-underlay-bObAW\",\"overlay\":\"Card-overlay-WuJz0\"};","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 _ from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport selectSettings from 'Store/Selectors/selectSettings';\r\n\r\nfunction createProviderSettingsSelector(sectionName) {\r\n return createSelector(\r\n (state, { id }) => id,\r\n (state) => state.settings[sectionName],\r\n (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\n}\r\n\r\nexport default createProviderSettingsSelector;\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 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 translate from 'Utilities/String/translate';\r\nimport styles from './EditAppProfileModalContent.css';\r\n\r\nclass EditAppProfileModalContent 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 isSaving,\r\n saveError,\r\n item,\r\n isInUse,\r\n onInputChange,\r\n onSavePress,\r\n onModalClose,\r\n onDeleteAppProfilePress,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n id,\r\n name,\r\n enableRss,\r\n enableInteractiveSearch,\r\n enableAutomaticSearch,\r\n minimumSeeders\r\n } = item;\r\n\r\n return (\r\n \r\n\r\n \r\n {id ? translate('EditSyncProfile') : translate('AddSyncProfile')}\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('UnableToAddANewAppProfilePleaseTryAgain')}\r\n
\r\n }\r\n\r\n {\r\n !isFetching && !error &&\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('EnableRss')}\r\n \r\n\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 \r\n \r\n {translate('EnableInteractiveSearch')}\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('MinimumSeeders')}\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\nEditAppProfileModalContent.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 isInUse: PropTypes.bool.isRequired,\r\n onInputChange: PropTypes.func.isRequired,\r\n onSavePress: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired,\r\n onDeleteAppProfilePress: PropTypes.func\r\n};\r\n\r\nexport default EditAppProfileModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButtonContainer\":\"EditAppProfileModalContent-deleteButtonContainer-Dj_1N\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchAppProfileSchema, saveAppProfile, setAppProfileValue } from 'Store/Actions/settingsActions';\r\nimport createProfileInUseSelector from 'Store/Selectors/createProfileInUseSelector';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditAppProfileModalContent from './EditAppProfileModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createProviderSettingsSelector('appProfiles'),\r\n createProfileInUseSelector('appProfileId'),\r\n (appProfile, isInUse) => {\r\n return {\r\n ...appProfile,\r\n isInUse\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchAppProfileSchema,\r\n setAppProfileValue,\r\n saveAppProfile\r\n};\r\n\r\nclass EditAppProfileModalContentConnector extends Component {\r\n\r\n componentDidMount() {\r\n if (!this.props.id && !this.props.isPopulated) {\r\n this.props.fetchAppProfileSchema();\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.setAppProfileValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveAppProfile({ 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\nEditAppProfileModalContentConnector.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 setAppProfileValue: PropTypes.func.isRequired,\r\n fetchAppProfileSchema: PropTypes.func.isRequired,\r\n saveAppProfile: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditAppProfileModalContentConnector);\r\n","import { some } from 'lodash';\r\nimport { createSelector } from 'reselect';\r\nimport AppState from 'App/State/AppState';\r\nimport createAllIndexersSelector from './createAllIndexersSelector';\r\n\r\nfunction createProfileInUseSelector(profileProp: string) {\r\n return createSelector(\r\n (_: AppState, { id }: { id: number }) => id,\r\n (state: AppState) => state.settings.appProfiles.items,\r\n createAllIndexersSelector(),\r\n (id, profiles, indexers) => {\r\n if (!id) {\r\n return false;\r\n }\r\n\r\n return some(indexers, { [profileProp]: id }) || profiles.length <= 1;\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 EditAppProfileModalContentConnector from './EditAppProfileModalContentConnector';\r\n\r\nclass EditAppProfileModal 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\nEditAppProfileModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditAppProfileModal;\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 EditAppProfileModal from './EditAppProfileModal';\r\n\r\nfunction mapStateToProps() {\r\n return {};\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n clearPendingChanges\r\n};\r\n\r\nclass EditAppProfileModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.clearPendingChanges({ section: 'settings.appProfiles' });\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\nEditAppProfileModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(EditAppProfileModalConnector);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"appProfile\":\"AppProfile-appProfile-TILxr Card-card-aoesq\",\"nameContainer\":\"AppProfile-nameContainer-YIRlr\",\"name\":\"AppProfile-name-oqcN9\",\"cloneButton\":\"AppProfile-cloneButton-ZqeBv IconButton-button-t4C5V Link-link-RInnp\",\"tooltipLabel\":\"AppProfile-tooltipLabel-Dj3gh 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 EditAppProfileModalConnector from './EditAppProfileModalConnector';\r\nimport styles from './AppProfile.css';\r\n\r\nclass AppProfile 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 isEditAppProfileModalOpen: false,\r\n isDeleteAppProfileModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditAppProfilePress = () => {\r\n this.setState({ isEditAppProfileModalOpen: true });\r\n };\r\n\r\n onEditAppProfileModalClose = () => {\r\n this.setState({ isEditAppProfileModalOpen: false });\r\n };\r\n\r\n onDeleteAppProfilePress = () => {\r\n this.setState({\r\n isEditAppProfileModalOpen: false,\r\n isDeleteAppProfileModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteAppProfileModalClose = () => {\r\n this.setState({ isDeleteAppProfileModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteAppProfile = () => {\r\n this.props.onConfirmDeleteAppProfile(this.props.id);\r\n };\r\n\r\n onCloneAppProfilePress = () => {\r\n const {\r\n id,\r\n onCloneAppProfilePress\r\n } = this.props;\r\n\r\n onCloneAppProfilePress(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 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 {translate('Rss')}\r\n \r\n }\r\n\r\n {\r\n \r\n {translate('AutomaticSearch')}\r\n \r\n }\r\n\r\n {\r\n \r\n {translate('InteractiveSearch')}\r\n \r\n }\r\n
\r\n\r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nAppProfile.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 isDeleting: PropTypes.bool.isRequired,\r\n onConfirmDeleteAppProfile: PropTypes.func.isRequired,\r\n onCloneAppProfilePress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AppProfile;\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 AppProfile from './AppProfile';\r\nimport EditAppProfileModalConnector from './EditAppProfileModalConnector';\r\nimport styles from './AppProfiles.css';\r\n\r\nclass AppProfiles 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 isAppProfileModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onCloneAppProfilePress = (id) => {\r\n this.props.onCloneAppProfilePress(id);\r\n this.setState({ isAppProfileModalOpen: true });\r\n };\r\n\r\n onEditAppProfilePress = () => {\r\n this.setState({ isAppProfileModalOpen: true });\r\n };\r\n\r\n onModalClose = () => {\r\n this.setState({ isAppProfileModalOpen: 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 onConfirmDeleteAppProfile,\r\n onCloneAppProfilePress,\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\nAppProfiles.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 onConfirmDeleteAppProfile: PropTypes.func.isRequired,\r\n onCloneAppProfilePress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AppProfiles;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"appProfiles\":\"AppProfiles-appProfiles-E_GfM\",\"addAppProfile\":\"AppProfiles-addAppProfile-b46iI AppProfile-appProfile-TILxr Card-card-aoesq\",\"center\":\"AppProfiles-center-ISLYI\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { cloneAppProfile, deleteAppProfile, fetchAppProfiles } from 'Store/Actions/settingsActions';\r\nimport createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';\r\nimport sortByProp from 'Utilities/Array/sortByProp';\r\nimport AppProfiles from './AppProfiles';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.appProfiles', sortByProp('name')),\r\n (appProfiles) => appProfiles\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n dispatchFetchAppProfiles: fetchAppProfiles,\r\n dispatchDeleteAppProfile: deleteAppProfile,\r\n dispatchCloneAppProfile: cloneAppProfile\r\n};\r\n\r\nclass AppProfilesConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.dispatchFetchAppProfiles();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteAppProfile = (id) => {\r\n this.props.dispatchDeleteAppProfile({ id });\r\n };\r\n\r\n onCloneAppProfilePress = (id) => {\r\n this.props.dispatchCloneAppProfile({ 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\nAppProfilesConnector.propTypes = {\r\n dispatchFetchAppProfiles: PropTypes.func.isRequired,\r\n dispatchDeleteAppProfile: PropTypes.func.isRequired,\r\n dispatchCloneAppProfile: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AppProfilesConnector);\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 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 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 MenuItem from 'Components/Menu/MenuItem';\r\n\r\nclass AddApplicationPresetMenuItem 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\nAddApplicationPresetMenuItem.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 AddApplicationPresetMenuItem;\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 AddApplicationPresetMenuItem from './AddApplicationPresetMenuItem';\r\nimport styles from './AddApplicationItem.css';\r\n\r\nclass AddApplicationItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onApplicationSelect = () => {\r\n const {\r\n implementation,\r\n implementationName\r\n } = this.props;\r\n\r\n this.props.onApplicationSelect({ 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 onApplicationSelect\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 Custom\r\n \r\n\r\n \r\n \r\n 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\nAddApplicationItem.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 onApplicationSelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddApplicationItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"application\":\"AddApplicationItem-application-zGypj Card-card-aoesq\",\"underlay\":\"AddApplicationItem-underlay-ZG6Td\",\"overlay\":\"AddApplicationItem-overlay-Qs_RF\",\"name\":\"AddApplicationItem-name-d4Jis\",\"actions\":\"AddApplicationItem-actions-jjtDS\",\"presetsMenu\":\"AddApplicationItem-presetsMenu-tNDcX Menu-menu-Uz3_0\",\"presetsMenuButton\":\"AddApplicationItem-presetsMenuButton-Zp8ux Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\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 translate from 'Utilities/String/translate';\r\nimport AddApplicationItem from './AddApplicationItem';\r\nimport styles from './AddApplicationModalContent.css';\r\n\r\nclass AddApplicationModalContent 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 onApplicationSelect,\r\n onModalClose\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {translate('AddApplication')}\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('UnableToAddANewApplicationPleaseTryAgain')}\r\n
\r\n }\r\n\r\n {\r\n isSchemaPopulated && !schemaError &&\r\n
\r\n
\r\n {\r\n schema.map((application) => {\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\nAddApplicationModalContent.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 onApplicationSelect: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddApplicationModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"applications\":\"AddApplicationModalContent-applications-erSOZ\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchApplicationSchema, selectApplicationSchema } from 'Store/Actions/settingsActions';\r\nimport AddApplicationModalContent from './AddApplicationModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.applications,\r\n (applications) => {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n } = applications;\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 fetchApplicationSchema,\r\n selectApplicationSchema\r\n};\r\n\r\nclass AddApplicationModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchApplicationSchema();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onApplicationSelect = ({ implementation, name }) => {\r\n this.props.selectApplicationSchema({ implementation, presetName: name });\r\n this.props.onModalClose({ applicationSelected: 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\nAddApplicationModalContentConnector.propTypes = {\r\n fetchApplicationSchema: PropTypes.func.isRequired,\r\n selectApplicationSchema: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddApplicationModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddApplicationModalContentConnector from './AddApplicationModalContentConnector';\r\n\r\nfunction AddApplicationModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddApplicationModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddApplicationModal;\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 './EditApplicationModalContent.css';\r\n\r\nconst syncLevelOptions = [\r\n {\r\n key: 'disabled',\r\n get value() {\r\n return translate('Disabled');\r\n }\r\n },\r\n {\r\n key: 'addOnly',\r\n get value() {\r\n return translate('AddRemoveOnly');\r\n }\r\n },\r\n {\r\n key: 'fullSync',\r\n get value() {\r\n return translate('FullSync');\r\n }\r\n }\r\n];\r\n\r\nfunction EditApplicationModalContent(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 onDeleteApplicationPress,\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 syncLevel,\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('EditApplicationImplementation', { implementationName }) : translate('AddApplicationImplementation', { 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('UnableToAddANewApplicationPleaseTryAgain')}\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('SyncLevel')}\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\nEditApplicationModalContent.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 onDeleteApplicationPress: PropTypes.func,\r\n onAdvancedSettingsPress: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditApplicationModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditApplicationModalContent-deleteButton-WKmFs Button-button-paJ9a Link-link-RInnp\",\"message\":\"EditApplicationModalContent-message-FpF9M 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 saveApplication,\r\n setApplicationFieldValue,\r\n setApplicationValue,\r\n testApplication,\r\n toggleAdvancedSettings\r\n} from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditApplicationModalContent from './EditApplicationModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('applications'),\r\n (advancedSettings, application) => {\r\n return {\r\n advancedSettings,\r\n ...application\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setApplicationValue,\r\n setApplicationFieldValue,\r\n saveApplication,\r\n testApplication,\r\n toggleAdvancedSettings\r\n};\r\n\r\nclass EditApplicationModalContentConnector 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.setApplicationValue({ name, value });\r\n };\r\n\r\n onFieldChange = ({ name, value }) => {\r\n this.props.setApplicationFieldValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveApplication({ id: this.props.id });\r\n };\r\n\r\n onTestPress = () => {\r\n this.props.testApplication({ 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\nEditApplicationModalContentConnector.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 setApplicationValue: PropTypes.func,\r\n setApplicationFieldValue: PropTypes.func,\r\n saveApplication: PropTypes.func,\r\n testApplication: PropTypes.func,\r\n onModalClose: PropTypes.func.isRequired,\r\n toggleAdvancedSettings: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(EditApplicationModalContentConnector);\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 EditApplicationModalContentConnector from './EditApplicationModalContentConnector';\r\n\r\nfunction EditApplicationModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditApplicationModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditApplicationModal;\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 { cancelSaveApplication, cancelTestApplication } from 'Store/Actions/settingsActions';\r\nimport EditApplicationModal from './EditApplicationModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n const section = 'settings.applications';\r\n\r\n return {\r\n dispatchClearPendingChanges() {\r\n dispatch(clearPendingChanges({ section }));\r\n },\r\n\r\n dispatchCancelTestApplication() {\r\n dispatch(cancelTestApplication({ section }));\r\n },\r\n\r\n dispatchCancelSaveApplication() {\r\n dispatch(cancelSaveApplication({ section }));\r\n }\r\n };\r\n}\r\n\r\nclass EditApplicationModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.dispatchClearPendingChanges();\r\n this.props.dispatchCancelTestApplication();\r\n this.props.dispatchCancelSaveApplication();\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 dispatchCancelTestApplication,\r\n dispatchCancelSaveApplication,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditApplicationModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n dispatchCancelTestApplication: PropTypes.func.isRequired,\r\n dispatchCancelSaveApplication: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(null, createMapDispatchToProps)(EditApplicationModalConnector);\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 EditApplicationModalConnector from './EditApplicationModalConnector';\r\nimport styles from './Application.css';\r\n\r\nclass Application 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 isEditApplicationModalOpen: false,\r\n isDeleteApplicationModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditApplicationPress = () => {\r\n this.setState({ isEditApplicationModalOpen: true });\r\n };\r\n\r\n onEditApplicationModalClose = () => {\r\n this.setState({ isEditApplicationModalOpen: false });\r\n };\r\n\r\n onDeleteApplicationPress = () => {\r\n this.setState({\r\n isEditApplicationModalOpen: false,\r\n isDeleteApplicationModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteApplicationModalClose= () => {\r\n this.setState({ isDeleteApplicationModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteApplication = () => {\r\n this.props.onConfirmDeleteApplication(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 syncLevel,\r\n fields,\r\n tags,\r\n tagList\r\n } = this.props;\r\n\r\n const applicationUrl = fields.find((field) => field.name === 'baseUrl')?.value;\r\n\r\n return (\r\n \r\n
\r\n
\r\n {name}\r\n
\r\n\r\n {\r\n enable && applicationUrl ?\r\n : null\r\n }\r\n
\r\n\r\n {\r\n syncLevel === 'addOnly' &&\r\n \r\n }\r\n\r\n {\r\n syncLevel === 'fullSync' &&\r\n \r\n }\r\n\r\n {\r\n syncLevel === 'disabled' &&\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\nApplication.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n enable: PropTypes.bool.isRequired,\r\n syncLevel: PropTypes.string.isRequired,\r\n fields: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteApplication: PropTypes.func\r\n};\r\n\r\nexport default Application;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"application\":\"Application-application-y0c0m Card-card-aoesq\",\"nameContainer\":\"Application-nameContainer-h27Cq\",\"name\":\"Application-name-Mor3f\",\"externalLink\":\"Application-externalLink-s_9qM IconButton-button-t4C5V Link-link-RInnp\",\"enabled\":\"Application-enabled-ZKvSl\"};","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 AddApplicationModal from './AddApplicationModal';\r\nimport Application from './Application';\r\nimport EditApplicationModalConnector from './EditApplicationModalConnector';\r\nimport styles from './Applications.css';\r\n\r\nclass Applications 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 isAddApplicationModalOpen: false,\r\n isEditApplicationModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddApplicationPress = () => {\r\n this.setState({ isAddApplicationModalOpen: true });\r\n };\r\n\r\n onAddApplicationModalClose = ({ applicationSelected = false } = {}) => {\r\n this.setState({\r\n isAddApplicationModalOpen: false,\r\n isEditApplicationModalOpen: applicationSelected\r\n });\r\n };\r\n\r\n onEditApplicationModalClose = () => {\r\n this.setState({ isEditApplicationModalOpen: 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 onConfirmDeleteApplication,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isAddApplicationModalOpen,\r\n isEditApplicationModalOpen\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\nApplications.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 onConfirmDeleteApplication: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Applications;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"applications\":\"Applications-applications-bDfdV\",\"addApplication\":\"Applications-addApplication-SWn86 Application-application-y0c0m Card-card-aoesq\",\"center\":\"Applications-center-KzU3_\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteApplication, fetchApplications } 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 Applications from './Applications';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.applications', sortByProp('name')),\r\n createTagsSelector(),\r\n (applications, tagList) => {\r\n return {\r\n ...applications,\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchApplications,\r\n deleteApplication\r\n};\r\n\r\nclass ApplicationsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchApplications();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteApplication = (id) => {\r\n this.props.deleteApplication({ 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\nApplicationsConnector.propTypes = {\r\n fetchApplications: PropTypes.func.isRequired,\r\n deleteApplication: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(ApplicationsConnector);\r\n","import ModelBase from 'App/ModelBase';\r\n\r\nexport enum ApplicationSyncLevel {\r\n Disabled = 'disabled',\r\n AddOnly = 'addOnly',\r\n FullSync = 'fullSync',\r\n}\r\n\r\ninterface Application extends ModelBase {\r\n name: string;\r\n syncLevel: ApplicationSyncLevel;\r\n implementationName: string;\r\n implementation: string;\r\n configContract: string;\r\n infoLink: string;\r\n tags: number[];\r\n}\r\n\r\nexport default Application;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"modalFooter\":\"ManageApplicationsEditModalContent-modalFooter-icAd8 ModalFooter-modalFooter-wjkx5\",\"selected\":\"ManageApplicationsEditModalContent-selected-CcPeP\"};","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 { ApplicationSyncLevel } from 'typings/Application';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ManageApplicationsEditModalContent.css';\r\n\r\ninterface SavePayload {\r\n syncLevel?: ApplicationSyncLevel;\r\n}\r\n\r\ninterface ManageApplicationsEditModalContentProps {\r\n applicationIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nconst NO_CHANGE = 'noChange';\r\n\r\nconst syncLevelOptions = [\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: ApplicationSyncLevel.Disabled,\r\n get value() {\r\n return translate('Disabled');\r\n },\r\n },\r\n {\r\n key: ApplicationSyncLevel.AddOnly,\r\n get value() {\r\n return translate('AddRemoveOnly');\r\n },\r\n },\r\n {\r\n key: ApplicationSyncLevel.FullSync,\r\n get value() {\r\n return translate('FullSync');\r\n },\r\n },\r\n];\r\n\r\nfunction ManageApplicationsEditModalContent(\r\n props: ManageApplicationsEditModalContentProps\r\n) {\r\n const { applicationIds, onSavePress, onModalClose } = props;\r\n\r\n const [syncLevel, setSyncLevel] = 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 (syncLevel !== NO_CHANGE) {\r\n hasChanges = true;\r\n payload.syncLevel = syncLevel as ApplicationSyncLevel;\r\n }\r\n\r\n if (hasChanges) {\r\n onSavePress(payload);\r\n }\r\n\r\n onModalClose();\r\n }, [syncLevel, onSavePress, onModalClose]);\r\n\r\n const onInputChange = useCallback(\r\n ({ name, value }: { name: string; value: string }) => {\r\n switch (name) {\r\n case 'syncLevel':\r\n setSyncLevel(value);\r\n break;\r\n default:\r\n console.warn(`EditApplicationsModalContent Unknown Input: '${name}'`);\r\n }\r\n },\r\n []\r\n );\r\n\r\n const selectedCount = applicationIds.length;\r\n\r\n return (\r\n \r\n {translate('EditSelectedApplications')}\r\n\r\n \r\n \r\n {translate('SyncLevel')}\r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n {translate('CountApplicationsSelected', { 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 ManageApplicationsEditModalContent;\r\n","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ManageApplicationsEditModalContent from './ManageApplicationsEditModalContent';\r\n\r\ninterface ManageApplicationsEditModalProps {\r\n isOpen: boolean;\r\n applicationIds: number[];\r\n onSavePress(payload: object): void;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageApplicationsEditModal(props: ManageApplicationsEditModalProps) {\r\n const { isOpen, applicationIds, onSavePress, onModalClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ManageApplicationsEditModal;\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, { 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 { ApplicationSyncLevel } from 'typings/Application';\r\nimport { SelectStateInputProps } from 'typings/props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './ManageApplicationsModalRow.css';\r\n\r\ninterface ManageApplicationsModalRowProps {\r\n id: number;\r\n name: string;\r\n syncLevel: string;\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 ManageApplicationsModalRow(props: ManageApplicationsModalRowProps) {\r\n const {\r\n id,\r\n isSelected,\r\n name,\r\n syncLevel,\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 {syncLevel === ApplicationSyncLevel.AddOnly && (\r\n \r\n )}\r\n\r\n {syncLevel === ApplicationSyncLevel.FullSync && (\r\n \r\n )}\r\n\r\n {syncLevel === ApplicationSyncLevel.Disabled && (\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 ManageApplicationsModalRow;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"name\":\"ManageApplicationsModalRow-name-ZTk7b TableRowCell-cell-giPrj\",\"syncLevel\":\"ManageApplicationsModalRow-syncLevel-VuZMA TableRowCell-cell-giPrj\",\"tags\":\"ManageApplicationsModalRow-tags-Mi99q TableRowCell-cell-giPrj\",\"implementation\":\"ManageApplicationsModalRow-implementation-aEJS_ 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 { ApplicationAppState } 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 Application from 'typings/Application';\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 allApplications: ApplicationAppState = useSelector(\r\n (state: AppState) => state.settings.applications\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 applicationsTags = useMemo(() => {\r\n const tags = ids.reduce((acc: number[], id) => {\r\n const s = allApplications.items.find((s: Application) => 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, allApplications]);\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 {applicationsTags.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 (applicationsTags.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-ztO40\",\"message\":\"TagsModalContent-message-ra9tG\",\"result\":\"TagsModalContent-result-IB9O0\"};","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 { ApplicationAppState } 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/SortDirection';\r\nimport {\r\n bulkDeleteApplications,\r\n bulkEditApplications,\r\n setManageApplicationsSort,\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 ManageApplicationsEditModal from './Edit/ManageApplicationsEditModal';\r\nimport ManageApplicationsModalRow from './ManageApplicationsModalRow';\r\nimport TagsModal from './Tags/TagsModal';\r\nimport styles from './ManageApplicationsModalContent.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 ManageApplicationsModalRow\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: 'syncLevel',\r\n label: () => translate('SyncLevel'),\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 ManageApplicationsModalContentProps {\r\n onModalClose(): void;\r\n sortKey?: string;\r\n sortDirection?: SortDirection;\r\n}\r\n\r\nfunction ManageApplicationsModalContent(\r\n props: ManageApplicationsModalContentProps\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 }: ApplicationAppState = useSelector(\r\n createClientSideCollectionSelector('settings.applications')\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(setManageApplicationsSort({ 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(bulkDeleteApplications({ 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 bulkEditApplications({\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 bulkEditApplications({\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('ManageApplications')}\r\n \r\n {isFetching ? : null}\r\n\r\n {error ?
{errorMessage}
: null}\r\n\r\n {isPopulated && !error && !items.length && (\r\n {translate('NoApplicationsFound')}\r\n )}\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 ManageApplicationsModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"leftButtons\":\"ManageApplicationsModalContent-leftButtons-Ck16A\",\"rightButtons\":\"ManageApplicationsModalContent-rightButtons-MNVuH\",\"deleteButton\":\"ManageApplicationsModalContent-deleteButton-oqCso Button-button-paJ9a Link-link-RInnp\"};","import React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport ManageApplicationsModalContent from './ManageApplicationsModalContent';\r\n\r\ninterface ManageApplicationsModalProps {\r\n isOpen: boolean;\r\n onModalClose(): void;\r\n}\r\n\r\nfunction ManageApplicationsModal(props: ManageApplicationsModalProps) {\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 ManageApplicationsModal;\r\n","import React, { useCallback, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport AppState from 'App/State/AppState';\r\nimport { APP_INDEXER_SYNC } from 'Commands/commandNames';\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 AppProfilesConnector from 'Settings/Profiles/App/AppProfilesConnector';\r\nimport SettingsToolbarConnector from 'Settings/SettingsToolbarConnector';\r\nimport { executeCommand } from 'Store/Actions/commandActions';\r\nimport { testAllApplications } from 'Store/Actions/Settings/applications';\r\nimport createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';\r\nimport translate from 'Utilities/String/translate';\r\nimport ApplicationsConnector from './Applications/ApplicationsConnector';\r\nimport ManageApplicationsModal from './Applications/Manage/ManageApplicationsModal';\r\n\r\nfunction ApplicationSettings() {\r\n const isSyncingIndexers = useSelector(\r\n createCommandExecutingSelector(APP_INDEXER_SYNC)\r\n );\r\n const isTestingAll = useSelector(\r\n (state: AppState) => state.settings.applications.isTestingAll\r\n );\r\n const dispatch = useDispatch();\r\n\r\n const [isManageApplicationsOpen, setIsManageApplicationsOpen] =\r\n useState(false);\r\n\r\n const onManageApplicationsPress = useCallback(() => {\r\n setIsManageApplicationsOpen(true);\r\n }, [setIsManageApplicationsOpen]);\r\n\r\n const onManageApplicationsModalClose = useCallback(() => {\r\n setIsManageApplicationsOpen(false);\r\n }, [setIsManageApplicationsOpen]);\r\n\r\n const onAppIndexerSyncPress = useCallback(() => {\r\n dispatch(\r\n executeCommand({\r\n name: APP_INDEXER_SYNC,\r\n forceSync: true,\r\n })\r\n );\r\n }, [dispatch]);\r\n\r\n const onTestAllPress = useCallback(() => {\r\n dispatch(testAllApplications());\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 {/* 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\n\r\nexport default ApplicationSettings;\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 translate from 'Utilities/String/translate';\r\n\r\nconst logLevelOptions = [\r\n { key: 'info', value: 'Info' },\r\n { key: 'debug', value: 'Debug' },\r\n { key: 'trace', value: 'Trace' }\r\n];\r\n\r\nclass DevelopmentSettings 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 ...otherProps\r\n } = this.props;\r\n\r\n return (\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('UnableToLoadDevelopmentSettings')}\r\n \r\n }\r\n\r\n {\r\n hasSettings && !isFetching && !error &&\r\n \r\n
\r\n \r\n {translate('SettingsLogRotate')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SettingsConsoleLogLevel')}\r\n \r\n \r\n\r\n \r\n {translate('SettingsLogSql')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SettingsIndexerLogging')}\r\n\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n {translate('SettingsFilterSentryEvents')}\r\n\r\n \r\n \r\n
\r\n \r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nDevelopmentSettings.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 onSavePress: PropTypes.func.isRequired,\r\n onInputChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default DevelopmentSettings;\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 { fetchDevelopmentSettings, saveDevelopmentSettings, setDevelopmentSettingsValue } from 'Store/Actions/settingsActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport DevelopmentSettings from './DevelopmentSettings';\r\n\r\nconst SECTION = 'development';\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 setDevelopmentSettingsValue,\r\n saveDevelopmentSettings,\r\n fetchDevelopmentSettings,\r\n clearPendingChanges\r\n};\r\n\r\nclass DevelopmentSettingsConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchDevelopmentSettings();\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.setDevelopmentSettingsValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveDevelopmentSettings();\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\nDevelopmentSettingsConnector.propTypes = {\r\n setDevelopmentSettingsValue: PropTypes.func.isRequired,\r\n saveDevelopmentSettings: PropTypes.func.isRequired,\r\n fetchDevelopmentSettings: PropTypes.func.isRequired,\r\n clearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(DevelopmentSettingsConnector);\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('UnableToAddANewDownloadClientPleaseTryAgain')}\r\n
\r\n }\r\n\r\n {\r\n isSchemaPopulated && !schemaError &&\r\n
\r\n\r\n \r\n
\r\n {translate('AddDownloadClientToProwlarr')}\r\n
\r\n
\r\n {translate('ProwlarrSupportsAnyDownloadClient')}\r\n
\r\n
\r\n {translate('ForMoreInformationOnTheIndividualDownloadClients')}\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 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 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, kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './AddCategoryModalContent.css';\r\n\r\nfunction AddCategoryModalContent(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 clientCategory,\r\n categories\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n {id ? translate('EditCategory') : translate('AddCategory')}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {translate('DownloadClientCategory')}\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n {translate('MappedCategories')}\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\nAddCategoryModalContent.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 AddCategoryModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"AddCategoryModalContent-deleteButton-VzYQE 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 { clearDownloadClientCategoryPending, saveDownloadClientCategory, setDownloadClientCategoryFieldValue, setDownloadClientCategoryValue } from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport AddCategoryModalContent from './AddCategoryModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('downloadClientCategories'),\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 setDownloadClientCategoryValue,\r\n setDownloadClientCategoryFieldValue,\r\n saveDownloadClientCategory,\r\n clearDownloadClientCategoryPending\r\n};\r\n\r\nclass AddCategoryModalContentConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onInputChange = ({ name, value }) => {\r\n this.props.setDownloadClientCategoryValue({ name, value });\r\n };\r\n\r\n onFieldChange = ({ name, value }) => {\r\n this.props.setDownloadClientCategoryFieldValue({ name, value });\r\n };\r\n\r\n onCancelPress = () => {\r\n this.props.clearDownloadClientCategoryPending();\r\n this.props.onModalClose();\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveDownloadClientCategory({ 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\nAddCategoryModalContentConnector.propTypes = {\r\n id: PropTypes.number,\r\n item: PropTypes.object.isRequired,\r\n setDownloadClientCategoryValue: PropTypes.func.isRequired,\r\n setDownloadClientCategoryFieldValue: PropTypes.func.isRequired,\r\n clearDownloadClientCategoryPending: PropTypes.func.isRequired,\r\n saveDownloadClientCategory: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddCategoryModalContentConnector);\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 AddCategoryModalContentConnector from './AddCategoryModalContentConnector';\r\n\r\nfunction AddCategoryModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddCategoryModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddCategoryModal;\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 AddCategoryModal from './AddCategoryModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n const section = 'settings.downloadClientCategories';\r\n\r\n return {\r\n dispatchClearPendingChanges() {\r\n dispatch(clearPendingChanges({ section }));\r\n }\r\n };\r\n}\r\n\r\nclass AddCategoryModalConnector 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\nAddCategoryModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(null, createMapDispatchToProps)(AddCategoryModalConnector);\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 { kinds } from 'Helpers/Props';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddCategoryModalConnector from './AddCategoryModalConnector';\r\nimport styles from './Category.css';\r\n\r\nclass Category 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 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 clientCategory,\r\n categories\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n
\r\n {clientCategory}\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n {translate('AreYouSureYouWantToDeleteCategory')}\r\n
\r\n \r\n }\r\n confirmLabel={translate('Delete')}\r\n onConfirm={this.onConfirmDeleteSpecification}\r\n onCancel={this.onDeleteSpecificationModalClose}\r\n />\r\n \r\n );\r\n }\r\n}\r\n\r\nCategory.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n categories: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n clientCategory: PropTypes.string.isRequired,\r\n onConfirmDeleteSpecification: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Category;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"customFormat\":\"Category-customFormat-sEgGn Card-card-aoesq\",\"nameContainer\":\"Category-nameContainer-d_NRi\",\"name\":\"Category-name-ez1kH\",\"labels\":\"Category-labels-str_f\",\"tooltipLabel\":\"Category-tooltipLabel-JnehC Label-label-DYldh\"};","// 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 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 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 { icons, inputTypes, kinds } from 'Helpers/Props';\r\nimport AdvancedSettingsButton from 'Settings/AdvancedSettingsButton';\r\nimport translate from 'Utilities/String/translate';\r\nimport AddCategoryModalConnector from './Categories/AddCategoryModalConnector';\r\nimport Category from './Categories/Category';\r\nimport styles from './EditDownloadClientModalContent.css';\r\n\r\nclass EditDownloadClientModalContent 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 isAddCategoryModalOpen: false\r\n };\r\n }\r\n\r\n onAddCategoryPress = () => {\r\n this.setState({ isAddCategoryModalOpen: true });\r\n };\r\n\r\n onAddCategoryModalClose = () => {\r\n this.setState({ isAddCategoryModalOpen: 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 error,\r\n categories,\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 onConfirmDeleteCategory,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isAddCategoryModalOpen\r\n } = this.state;\r\n\r\n const {\r\n id,\r\n implementationName,\r\n name,\r\n enable,\r\n priority,\r\n supportsCategories,\r\n fields,\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('UnableToAddANewDownloadClientPleaseTryAgain')}\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 supportsCategories.value ?\r\n
\r\n
\r\n {\r\n categories.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 null\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 categories: PropTypes.arrayOf(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 onDeleteDownloadClientPress: PropTypes.func,\r\n onConfirmDeleteCategory: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditDownloadClientModalContent;\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 deleteDownloadClientCategory,\r\n fetchDownloadClientCategories,\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 (state) => state.settings.downloadClientCategories,\r\n (advancedSettings, downloadClient, categories) => {\r\n return {\r\n advancedSettings,\r\n ...downloadClient,\r\n categories: categories.items\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 fetchDownloadClientCategories,\r\n deleteDownloadClientCategory,\r\n toggleAdvancedSettings\r\n};\r\n\r\nclass EditDownloadClientModalContentConnector 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.fetchDownloadClientCategories({ 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.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 onConfirmDeleteCategory = (id) => {\r\n this.props.deleteDownloadClientCategory({ 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\nEditDownloadClientModalContentConnector.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 fetchDownloadClientCategories: PropTypes.func.isRequired,\r\n deleteDownloadClientCategory: PropTypes.func.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 { 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 } = 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('Priority')}: {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\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 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 Alert from 'Components/Alert';\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, kinds } 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 ...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 {translate('ProwlarrDownloadClientsAlert')}\r\n
\r\n
\r\n {translate('ProwlarrDownloadClientsInAppOnlyAlert')}\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\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 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 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 (downloadClients) => downloadClients\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 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 [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 (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 }, [enable, priority, onSavePress, onModalClose]);\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 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('ClientPriority')}\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 { 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 implementation: string;\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 implementation,\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}\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\",\"priority\":\"ManageDownloadClientsModalRow-priority-kDQJC TableRowCell-cell-giPrj\",\"implementation\":\"ManageDownloadClientsModalRow-implementation-P7X40 TableRowCell-cell-giPrj\"};","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/SortDirection';\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 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('ClientPriority'),\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\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 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 )}\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 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, { 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\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\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 }\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 { key: 'info', value: 'Info' },\r\n { key: 'debug', value: 'Debug' },\r\n { key: 'trace', value: 'Trace' }\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 { key: 'http', value: 'HTTP(S)' },\r\n { key: 'socks4', value: 'Socks4' },\r\n { key: 'socks5', value: 'Socks5 (Support TOR)' }\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\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 '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('UnableToLoadGeneralSettings')}\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 PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport MenuItem from 'Components/Menu/MenuItem';\r\n\r\nclass AddIndexerProxyPresetMenuItem 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\nAddIndexerProxyPresetMenuItem.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 AddIndexerProxyPresetMenuItem;\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 AddIndexerProxyPresetMenuItem from './AddIndexerProxyPresetMenuItem';\r\nimport styles from './AddIndexerProxyItem.css';\r\n\r\nclass AddIndexerProxyItem extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onIndexerProxySelect = () => {\r\n const {\r\n implementation,\r\n implementationName\r\n } = this.props;\r\n\r\n this.props.onIndexerProxySelect({ 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 onIndexerProxySelect\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 Custom\r\n \r\n\r\n \r\n \r\n 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\nAddIndexerProxyItem.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 onIndexerProxySelect: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddIndexerProxyItem;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"indexerProxy\":\"AddIndexerProxyItem-indexerProxy-WqfRz Card-card-aoesq\",\"underlay\":\"AddIndexerProxyItem-underlay-zQHdp\",\"overlay\":\"AddIndexerProxyItem-overlay-Bf6Wv\",\"name\":\"AddIndexerProxyItem-name-d60TC\",\"actions\":\"AddIndexerProxyItem-actions-A4UhX\",\"presetsMenu\":\"AddIndexerProxyItem-presetsMenu-VKppD Menu-menu-Uz3_0\",\"presetsMenuButton\":\"AddIndexerProxyItem-presetsMenuButton-w4Ue6 Button-button-paJ9a Link-link-RInnp\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\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 translate from 'Utilities/String/translate';\r\nimport AddIndexerProxyItem from './AddIndexerProxyItem';\r\nimport styles from './AddIndexerProxyModalContent.css';\r\n\r\nclass AddIndexerProxyModalContent 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 onIndexerProxySelect,\r\n onModalClose\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n {translate('AddIndexerProxy')}\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('UnableToAddANewIndexerProxyPleaseTryAgain')}\r\n
\r\n }\r\n\r\n {\r\n isSchemaPopulated && !schemaError &&\r\n
\r\n
\r\n {\r\n schema.map((indexerProxy) => {\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\nAddIndexerProxyModalContent.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 onIndexerProxySelect: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddIndexerProxyModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"indexerProxies\":\"AddIndexerProxyModalContent-indexerProxies-u7zKe\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { fetchIndexerProxySchema, selectIndexerProxySchema } from 'Store/Actions/settingsActions';\r\nimport AddIndexerProxyModalContent from './AddIndexerProxyModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.indexerProxies,\r\n (indexerProxies) => {\r\n const {\r\n isSchemaFetching,\r\n isSchemaPopulated,\r\n schemaError,\r\n schema\r\n } = indexerProxies;\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 fetchIndexerProxySchema,\r\n selectIndexerProxySchema\r\n};\r\n\r\nclass AddIndexerProxyModalContentConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchIndexerProxySchema();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onIndexerProxySelect = ({ implementation, name }) => {\r\n this.props.selectIndexerProxySchema({ implementation, presetName: name });\r\n this.props.onModalClose({ indexerProxySelected: 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\nAddIndexerProxyModalContentConnector.propTypes = {\r\n fetchIndexerProxySchema: PropTypes.func.isRequired,\r\n selectIndexerProxySchema: PropTypes.func.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(AddIndexerProxyModalContentConnector);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'Components/Modal/Modal';\r\nimport AddIndexerProxyModalContentConnector from './AddIndexerProxyModalContentConnector';\r\n\r\nfunction AddIndexerProxyModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nAddIndexerProxyModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default AddIndexerProxyModal;\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 './EditIndexerProxyModalContent.css';\r\n\r\nfunction EditIndexerProxyModalContent(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 onDeleteIndexerProxyPress,\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('EditIndexerProxyImplementation', { implementationName }) : translate('AddIndexerProxyImplementation', { 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('UnableToAddANewIndexerProxyPleaseTryAgain')}\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('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\nEditIndexerProxyModalContent.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 onDeleteIndexerProxyPress: PropTypes.func\r\n};\r\n\r\nexport default EditIndexerProxyModalContent;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"deleteButton\":\"EditIndexerProxyModalContent-deleteButton-fHs88 Button-button-paJ9a Link-link-RInnp\",\"message\":\"EditIndexerProxyModalContent-message-yM7l9 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 saveIndexerProxy,\r\n setIndexerProxyFieldValue,\r\n setIndexerProxyValue,\r\n testIndexerProxy,\r\n toggleAdvancedSettings\r\n} from 'Store/Actions/settingsActions';\r\nimport createProviderSettingsSelector from 'Store/Selectors/createProviderSettingsSelector';\r\nimport EditIndexerProxyModalContent from './EditIndexerProxyModalContent';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n (state) => state.settings.advancedSettings,\r\n createProviderSettingsSelector('indexerProxies'),\r\n (advancedSettings, indexerProxy) => {\r\n return {\r\n advancedSettings,\r\n ...indexerProxy\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setIndexerProxyValue,\r\n setIndexerProxyFieldValue,\r\n saveIndexerProxy,\r\n testIndexerProxy,\r\n toggleAdvancedSettings\r\n};\r\n\r\nclass EditIndexerProxyModalContentConnector 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.setIndexerProxyValue({ name, value });\r\n };\r\n\r\n onFieldChange = ({ name, value }) => {\r\n this.props.setIndexerProxyFieldValue({ name, value });\r\n };\r\n\r\n onSavePress = () => {\r\n this.props.saveIndexerProxy({ id: this.props.id });\r\n };\r\n\r\n onTestPress = () => {\r\n this.props.testIndexerProxy({ 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\nEditIndexerProxyModalContentConnector.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 setIndexerProxyValue: PropTypes.func.isRequired,\r\n setIndexerProxyFieldValue: PropTypes.func.isRequired,\r\n saveIndexerProxy: PropTypes.func.isRequired,\r\n testIndexerProxy: 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)(EditIndexerProxyModalContentConnector);\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 EditIndexerProxyModalContentConnector from './EditIndexerProxyModalContentConnector';\r\n\r\nfunction EditIndexerProxyModal({ isOpen, onModalClose, ...otherProps }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nEditIndexerProxyModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onModalClose: PropTypes.func.isRequired\r\n};\r\n\r\nexport default EditIndexerProxyModal;\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 { cancelSaveIndexerProxy, cancelTestIndexerProxy } from 'Store/Actions/settingsActions';\r\nimport EditIndexerProxyModal from './EditIndexerProxyModal';\r\n\r\nfunction createMapDispatchToProps(dispatch, props) {\r\n const section = 'settings.indexerProxies';\r\n\r\n return {\r\n dispatchClearPendingChanges() {\r\n dispatch(clearPendingChanges({ section }));\r\n },\r\n\r\n dispatchCancelTestIndexerProxy() {\r\n dispatch(cancelTestIndexerProxy({ section }));\r\n },\r\n\r\n dispatchCancelSaveIndexerProxy() {\r\n dispatch(cancelSaveIndexerProxy({ section }));\r\n }\r\n };\r\n}\r\n\r\nclass EditIndexerProxyModalConnector extends Component {\r\n\r\n //\r\n // Listeners\r\n\r\n onModalClose = () => {\r\n this.props.dispatchClearPendingChanges();\r\n this.props.dispatchCancelTestIndexerProxy();\r\n this.props.dispatchCancelSaveIndexerProxy();\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 dispatchCancelTestIndexerProxy,\r\n dispatchCancelSaveIndexerProxy,\r\n ...otherProps\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nEditIndexerProxyModalConnector.propTypes = {\r\n onModalClose: PropTypes.func.isRequired,\r\n dispatchClearPendingChanges: PropTypes.func.isRequired,\r\n dispatchCancelTestIndexerProxy: PropTypes.func.isRequired,\r\n dispatchCancelSaveIndexerProxy: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(null, createMapDispatchToProps)(EditIndexerProxyModalConnector);\r\n","import _ from 'lodash';\r\nimport 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 EditIndexerProxyModalConnector from './EditIndexerProxyModalConnector';\r\nimport styles from './IndexerProxy.css';\r\n\r\nclass IndexerProxy 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 isEditIndexerProxyModalOpen: false,\r\n isDeleteIndexerProxyModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onEditIndexerProxyPress = () => {\r\n this.setState({ isEditIndexerProxyModalOpen: true });\r\n };\r\n\r\n onEditIndexerProxyModalClose = () => {\r\n this.setState({ isEditIndexerProxyModalOpen: false });\r\n };\r\n\r\n onDeleteIndexerProxyPress = () => {\r\n this.setState({\r\n isEditIndexerProxyModalOpen: false,\r\n isDeleteIndexerProxyModalOpen: true\r\n });\r\n };\r\n\r\n onDeleteIndexerProxyModalClose= () => {\r\n this.setState({ isDeleteIndexerProxyModalOpen: false });\r\n };\r\n\r\n onConfirmDeleteIndexerProxy = () => {\r\n this.props.onConfirmDeleteIndexerProxy(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 tags,\r\n tagList,\r\n indexerList\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
\r\n {\r\n tags.map((t) => {\r\n const indexers = _.filter(indexerList, { tags: [t] });\r\n\r\n if (!indexers || indexers.length === 0) {\r\n return null;\r\n }\r\n\r\n return indexers.map((i) => {\r\n return (\r\n \r\n {i.name}\r\n \r\n );\r\n });\r\n })\r\n }\r\n
\r\n\r\n {\r\n !tags || tags.length === 0 ?\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\nIndexerProxy.propTypes = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n tags: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n tagList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n indexerList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteIndexerProxy: PropTypes.func.isRequired\r\n};\r\n\r\nexport default IndexerProxy;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"indexerProxy\":\"IndexerProxy-indexerProxy-ZUOui Card-card-aoesq\",\"name\":\"IndexerProxy-name-yuUOh\",\"indexers\":\"IndexerProxy-indexers-b7FSI\",\"enabled\":\"IndexerProxy-enabled-tPtuS\"};","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 AddIndexerProxyModal from './AddIndexerProxyModal';\r\nimport EditIndexerProxyModalConnector from './EditIndexerProxyModalConnector';\r\nimport IndexerProxy from './IndexerProxy';\r\nimport styles from './IndexerProxies.css';\r\n\r\nclass IndexerProxies 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 isAddIndexerProxyModalOpen: false,\r\n isEditIndexerProxyModalOpen: false\r\n };\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onAddIndexerProxyPress = () => {\r\n this.setState({ isAddIndexerProxyModalOpen: true });\r\n };\r\n\r\n onAddIndexerProxyModalClose = ({ indexerProxySelected = false } = {}) => {\r\n this.setState({\r\n isAddIndexerProxyModalOpen: false,\r\n isEditIndexerProxyModalOpen: indexerProxySelected\r\n });\r\n };\r\n\r\n onEditIndexerProxyModalClose = () => {\r\n this.setState({ isEditIndexerProxyModalOpen: 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 indexerList,\r\n onConfirmDeleteIndexerProxy,\r\n ...otherProps\r\n } = this.props;\r\n\r\n const {\r\n isAddIndexerProxyModalOpen,\r\n isEditIndexerProxyModalOpen\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\nIndexerProxies.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 indexerList: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n onConfirmDeleteIndexerProxy: PropTypes.func.isRequired\r\n};\r\n\r\nexport default IndexerProxies;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"indexerProxies\":\"IndexerProxies-indexerProxies-WoWME\",\"addIndexerProxy\":\"IndexerProxies-addIndexerProxy-dxnG8 IndexerProxy-indexerProxy-ZUOui Card-card-aoesq\",\"center\":\"IndexerProxies-center-SmiZ3\"};","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { deleteIndexerProxy, fetchIndexerProxies } 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 IndexerProxies from './IndexerProxies';\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createSortedSectionSelector('settings.indexerProxies', sortByProp('name')),\r\n createSortedSectionSelector('indexers', sortByProp('name')),\r\n createTagsSelector(),\r\n (indexerProxies, indexers, tagList) => {\r\n return {\r\n ...indexerProxies,\r\n indexerList: indexers.items,\r\n tagList\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n fetchIndexerProxies,\r\n deleteIndexerProxy\r\n};\r\n\r\nclass IndexerProxiesConnector extends Component {\r\n\r\n //\r\n // Lifecycle\r\n\r\n componentDidMount() {\r\n this.props.fetchIndexerProxies();\r\n }\r\n\r\n //\r\n // Listeners\r\n\r\n onConfirmDeleteIndexerProxy = (id) => {\r\n this.props.deleteIndexerProxy({ 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\nIndexerProxiesConnector.propTypes = {\r\n fetchIndexerProxies: PropTypes.func.isRequired,\r\n deleteIndexerProxy: PropTypes.func.isRequired\r\n};\r\n\r\nexport default connect(createMapStateToProps, mapDispatchToProps)(IndexerProxiesConnector);\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 IndexerProxiesConnector from './IndexerProxies/IndexerProxiesConnector';\r\n\r\nfunction IndexerSettings() {\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 IndexerSettings;\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 Custom\r\n \r\n\r\n \r\n \r\n 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 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 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('UnableToAddANewNotificationPleaseTryAgain')}\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 onHealthIssue,\r\n onHealthRestored,\r\n onApplicationUpdate,\r\n supportsOnGrab,\r\n includeManualGrabs,\r\n supportsOnHealthIssue,\r\n supportsOnHealthRestored,\r\n includeHealthWarnings,\r\n supportsOnApplicationUpdate\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 onGrab.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\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('UnableToAddANewNotificationPleaseTryAgain')}\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 setNotificationFieldValue,\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 setNotificationFieldValue,\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 }) => {\r\n this.props.setNotificationFieldValue({ 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 setNotificationFieldValue: 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 onHealthIssue,\r\n onHealthRestored,\r\n onApplicationUpdate,\r\n supportsOnGrab,\r\n supportsOnHealthIssue,\r\n supportsOnHealthRestored,\r\n supportsOnApplicationUpdate,\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 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 !onGrab && !onHealthIssue && !onHealthRestored && !onApplicationUpdate ?\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 onHealthIssue: PropTypes.bool.isRequired,\r\n onHealthRestored: PropTypes.bool.isRequired,\r\n onApplicationUpdate: PropTypes.bool.isRequired,\r\n supportsOnGrab: PropTypes.bool.isRequired,\r\n supportsOnHealthIssue: PropTypes.bool.isRequired,\r\n supportsOnHealthRestored: PropTypes.bool.isRequired,\r\n supportsOnApplicationUpdate: 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","// 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('Indexers')}\r\n \r\n\r\n
\r\n {translate('IndexerSettingsSummary')}\r\n
\r\n\r\n \r\n {translate('Apps')}\r\n \r\n\r\n
\r\n {translate('AppSettingsSummary')}\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('Notifications')}\r\n \r\n\r\n
\r\n {translate('ConnectSettingsSummary')}\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 { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\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 createMatchingIndexersSelector() {\r\n return createSelector(\r\n (state, { indexerIds }) => indexerIds,\r\n (state) => state.indexers.items,\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMatchingIndexerProxiesSelector() {\r\n return createSelector(\r\n (state, { indexerProxyIds }) => indexerProxyIds,\r\n (state) => state.settings.indexerProxies.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 createMatchingApplicationsSelector() {\r\n return createSelector(\r\n (state, { applicationIds }) => applicationIds,\r\n (state) => state.settings.applications.items,\r\n findMatchingItems\r\n );\r\n}\r\n\r\nfunction createMapStateToProps() {\r\n return createSelector(\r\n createMatchingIndexersSelector(),\r\n createMatchingIndexerProxiesSelector(),\r\n createMatchingNotificationsSelector(),\r\n createMatchingApplicationsSelector(),\r\n (indexers, indexerProxies, notifications, applications) => {\r\n return {\r\n indexers,\r\n indexerProxies,\r\n notifications,\r\n applications\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 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 './TagDetailsModalContent.css';\r\n\r\nfunction TagDetailsModalContent(props) {\r\n const {\r\n label,\r\n isTagUsed,\r\n indexers,\r\n notifications,\r\n indexerProxies,\r\n applications,\r\n onModalClose,\r\n onDeleteTagPress\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n Tag Details - {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 !!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 }\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 }\r\n\r\n {\r\n !!indexerProxies.length &&\r\n
\r\n {\r\n indexerProxies.map((item) => {\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 !!applications.length &&\r\n
\r\n {\r\n applications.map((item) => {\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 {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 indexers: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n notifications: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n indexerProxies: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n applications: 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, { 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 styles from './Tag.css';\r\n\r\nclass Tag 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 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 notificationIds,\r\n indexerIds,\r\n indexerProxyIds,\r\n applicationIds\r\n } = this.props;\r\n\r\n const {\r\n isDetailsModalOpen,\r\n isDeleteTagModalOpen\r\n } = this.state;\r\n\r\n const isTagUsed = !!(\r\n indexerIds.length ||\r\n notificationIds.length ||\r\n indexerProxyIds.length ||\r\n applicationIds.length\r\n );\r\n\r\n return (\r\n \r\n
\r\n {label}\r\n
\r\n\r\n {\r\n isTagUsed &&\r\n
\r\n {\r\n !!indexerIds.length &&\r\n
\r\n {indexerIds.length} {indexerIds.length > 1 ? translate('Indexers') : translate('Indexer')}\r\n
\r\n }\r\n\r\n {\r\n !!notificationIds.length &&\r\n
\r\n {notificationIds.length} {notificationIds.length > 1 ? translate('Notifications') : translate('Notification')}\r\n
\r\n }\r\n\r\n {\r\n !!indexerProxyIds.length &&\r\n
\r\n {indexerProxyIds.length} {indexerProxyIds.length > 1 ? translate('IndexerProxies') : translate('IndexerProxy')}\r\n
\r\n }\r\n\r\n {\r\n !!applicationIds.length &&\r\n
\r\n {applicationIds.length} {applicationIds.length > 1 ? translate('Applications') : translate('Application')}\r\n
\r\n }\r\n
\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 notificationIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n indexerIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n indexerProxyIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n applicationIds: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n onConfirmDeleteTag: PropTypes.func.isRequired\r\n};\r\n\r\nTag.defaultProps = {\r\n indexerIds: [],\r\n notificationIds: [],\r\n indexerProxyIds: [],\r\n applicationIds: []\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 { 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 FieldSet from 'Components/FieldSet';\r\nimport PageSectionContent from 'Components/Page/PageSectionContent';\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 { fetchApplications, fetchIndexerProxies, fetchNotifications } 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 dispatchFetchNotifications: fetchNotifications,\r\n dispatchFetchIndexerProxies: fetchIndexerProxies,\r\n dispatchFetchApplications: fetchApplications\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 dispatchFetchNotifications,\r\n dispatchFetchIndexerProxies,\r\n dispatchFetchApplications\r\n } = this.props;\r\n\r\n dispatchFetchTags();\r\n dispatchFetchTagDetails();\r\n dispatchFetchNotifications();\r\n dispatchFetchIndexerProxies();\r\n dispatchFetchApplications();\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 dispatchFetchNotifications: PropTypes.func.isRequired,\r\n dispatchFetchIndexerProxies: PropTypes.func.isRequired,\r\n dispatchFetchApplications: 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 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\nexport default TagSettings;\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 { key: 0, value: 'Sunday' },\r\n { key: 1, value: 'Monday' }\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\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 return (\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('UnableToLoadUISettings')}\r\n \r\n }\r\n\r\n {\r\n hasSettings && !isFetching && !error &&\r\n \r\n
\r\n \r\n {translate('SettingsShortDateFormat')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SettingsLongDateFormat')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SettingsTimeFormat')}\r\n\r\n \r\n \r\n\r\n \r\n {translate('SettingsShowRelativeDates')}\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n {translate('Theme')}\r\n \r\n \r\n \r\n {translate('SettingsEnableColorImpairedMode')}\r\n \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 }\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 onSavePress: PropTypes.func.isRequired,\r\n languages: PropTypes.arrayOf(PropTypes.object).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 { connect } from 'react-redux';\r\nimport { createSelector } from 'reselect';\r\nimport { clearPendingChanges } from 'Store/Actions/baseActions';\r\nimport { fetchLocalizationOptions } from 'Store/Actions/localizationActions';\r\nimport { fetchUISettings, saveUISettings, setUISettingsValue } from 'Store/Actions/settingsActions';\r\nimport createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';\r\nimport UISettings from './UISettings';\r\n\r\nconst SECTION = 'ui';\r\n\r\nfunction createLanguagesSelector() {\r\n return createSelector(\r\n (state) => state.localization,\r\n (localization) => {\r\n const items = localization.items;\r\n\r\n if (!items) {\r\n return [];\r\n }\r\n\r\n const newItems = items.filter((lang) => !items.includes(lang.name)).map((item) => {\r\n return {\r\n key: item.value,\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 (state) => state.settings.advancedSettings,\r\n createSettingsSectionSelector(SECTION),\r\n createLanguagesSelector(),\r\n (advancedSettings, sectionSettings, languages) => {\r\n return {\r\n advancedSettings,\r\n languages,\r\n ...sectionSettings\r\n };\r\n }\r\n );\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setUISettingsValue,\r\n saveUISettings,\r\n fetchUISettings,\r\n fetchLocalizationOptions,\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 this.props.fetchLocalizationOptions();\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 fetchLocalizationOptions: 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","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 moment from 'moment';\r\nimport padNumber from 'Utilities/Number/padNumber';\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 `${days}d ${time}`;\r\n }\r\n\r\n return time;\r\n}\r\n\r\nexport default formatTimeSpan;\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 {\"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\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 'ApplicationStatusCheck':\r\n case 'ApplicationLongTermStatusCheck':\r\n return (\r\n \r\n );\r\n case 'DownloadClientStatusCheck':\r\n return (\r\n \r\n );\r\n case 'NotificationStatusCheck':\r\n return (\r\n \r\n );\r\n case 'IndexerProxyStatusCheck':\r\n return (\r\n \r\n );\r\n case 'IndexerRssCheck':\r\n case 'IndexerSearchCheck':\r\n case 'IndexerStatusCheck':\r\n case 'IndexerLongTermStatusCheck':\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 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 { testAllIndexers } from 'Store/Actions/indexerActions';\r\nimport {\r\n testAllApplications,\r\n testAllDownloadClients,\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 isTestingAllApplications = useSelector(\r\n (state: AppState) => state.settings.applications.isTestingAll\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.indexers.isTestingAll\r\n );\r\n\r\n const healthIssues = !!items.length;\r\n\r\n const handleTestAllApplicationsPress = useCallback(() => {\r\n dispatch(testAllApplications());\r\n }, [dispatch]);\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 = 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 === 'ApplicationStatusCheck' ||\r\n source === 'ApplicationLongTermStatusCheck' ? (\r\n \r\n ) : null}\r\n\r\n {source === 'IndexerStatusCheck' ||\r\n source === 'IndexerLongTermStatusCheck' ? (\r\n \r\n ) : null}\r\n\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 prowlarr.com\r\n \r\n\r\n {translate('Wiki')}\r\n \r\n \r\n wiki.servarr.com/prowlarr\r\n \r\n \r\n\r\n \r\n {translate('Reddit')}\r\n \r\n \r\n r/prowlarr\r\n \r\n\r\n \r\n {translate('Discord')}\r\n \r\n \r\n prowlarr.com/discord\r\n \r\n\r\n \r\n {translate('Source')}\r\n \r\n \r\n \r\n github.com/Prowlarr/Prowlarr\r\n \r\n \r\n\r\n \r\n {translate('FeatureRequests')}\r\n \r\n \r\n \r\n github.com/Prowlarr/Prowlarr/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 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\nexport default Status;\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","import React from 'react';\r\nimport { CommandBody } from 'Commands/Command';\r\nimport TableRowCell from 'Components/Table/Cells/TableRowCell';\r\nimport translate from 'Utilities/String/translate';\r\nimport styles from './QueuedTaskRowNameCell.css';\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, clientUserAgent } = props;\r\n\r\n return (\r\n \r\n {commandName}\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","// 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 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(status: string, message: string | undefined) {\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","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","// 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('FailedToFetchSettings')}\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","import React from 'react';\r\nimport { Redirect, Route } from 'react-router-dom';\r\nimport NotFound from 'Components/NotFound';\r\nimport Switch from 'Components/Router/Switch';\r\nimport HistoryConnector from 'History/HistoryConnector';\r\nimport IndexerIndex from 'Indexer/Index/IndexerIndex';\r\nimport IndexerStats from 'Indexer/Stats/IndexerStats';\r\nimport SearchIndexConnector from 'Search/SearchIndexConnector';\r\nimport ApplicationSettings from 'Settings/Applications/ApplicationSettings';\r\nimport DevelopmentSettingsConnector from 'Settings/Development/DevelopmentSettingsConnector';\r\nimport DownloadClientSettingsConnector from 'Settings/DownloadClients/DownloadClientSettingsConnector';\r\nimport GeneralSettingsConnector from 'Settings/General/GeneralSettingsConnector';\r\nimport IndexerSettings from 'Settings/Indexers/IndexerSettings';\r\nimport NotificationSettings from 'Settings/Notifications/NotificationSettings';\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\n\r\nfunction RedirectWithUrlBase() {\r\n return ;\r\n}\r\n\r\nfunction AppRoutes() {\r\n return (\r\n \r\n {/*\r\n Indexers\r\n */}\r\n\r\n \r\n\r\n {window.Prowlarr.urlBase && (\r\n \r\n )}\r\n\r\n \r\n\r\n {/*\r\n Search\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 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 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 { createBrowserHistory } from 'history';\r\nimport React from 'react';\r\nimport { render } from 'react-dom';\r\nimport createAppStore from 'Store/createAppStore';\r\nimport App from './App/App';\r\n\r\nexport async function bootstrap() {\r\n const history = createBrowserHistory();\r\n const store = createAppStore(history);\r\n\r\n render(\r\n ,\r\n document.getElementById('root')\r\n );\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":["prowlarrOrange","module","exports","textColor","defaultColor","disabledColor","dimColor","black","white","primaryColor","selectedColor","successColor","dangerColor","warningColor","infoColor","purple","helpTextColor","darkGray","gray","themeBlue","themeRed","themeDarkColor","themeLightColor","pageBackground","pageFooterBackgroud","torrentColor","usenetColor","inverseLabelColor","inverseLabelTextColor","defaultLinkHoverColor","linkColor","linkHoverColor","pageHeaderBackgroundColor","sidebarColor","sidebarBackgroundColor","sidebarActiveBackgroundColor","toolbarColor","toolbarBackgroundColor","toolbarMenuItemBackgroundColor","toolbarMenuItemHoverBackgroundColor","toolbarLabelColor","borderColor","inputBorderColor","inputBoxShadowColor","inputFocusBorderColor","inputFocusBoxShadowColor","inputErrorBorderColor","inputErrorBoxShadowColor","inputWarningBorderColor","inputWarningBoxShadowColor","colorImpairedGradient","colorImpairedGradientDark","defaultButtonTextColor","defaultButtonBackgroundColor","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","inputBackgroundColor","inputReadOnlyBackgroundColor","inputHoverBackgroundColor","inputSelectedBackgroundColor","advancedFormLabelColor","disabledCheckInputColor","disabledInputColor","popoverTitleBackgroundColor","popoverTitleBorderColor","popoverBodyBackgroundColor","popoverShadowColor","popoverArrowBorderColor","popoverTitleBackgroundInverseColor","popoverTitleBorderInverseColor","popoverShadowInverseColor","popoverArrowBorderInverseColor","tableRowHoverBackgroundColor","chartBackgroundColor","failedColors","join","chartColorsDiversified","chartColors","pageContentBodyPadding","pageContentBodyPaddingSmallScreen","headerHeight","sidebarWidth","toolbarHeight","toolbarButtonWidth","toolbarSeparatorMargin","breakpointExtraSmall","breakpointSmall","breakpointMedium","breakpointLarge","breakpointExtraLarge","formGroupExtraSmallWidth","formGroupSmallWidth","formGroupMediumWidth","formGroupLargeWidth","formLabelSmallWidth","formLabelLargeWidth","formLabelRightMarginWidth","dragHandleWidth","appProfileItemHeight","appProfileItemDragSourcePadding","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","Prowlarr","createAjaxRequest","originalAjaxOptions","requestXHR","XMLHttpRequest","aborted","complete","ajaxOptions","dataType","test","url","isRelative","addRootUrl","headers","apiKey","addApiKey","addUIHeader","contentType","method","addContentType","request","$","xhr","then","textStatus","errorThrown","reject","promise","always","abortRequest","abort","state","section","isFullStateTree","_","subSection","split","assign","hasOwnProperty","newState","translations","translate","key","tokens","translation","appName","values","value","index","replace","match","tokenMatch","_tokens$tokenMatch","String","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","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","getDimensions","width","height","isExtraSmallScreen","isSmallScreen","isMediumScreen","isLargeScreen","messagesSection","abortPingServer","pingTimeout","dimensions","innerWidth","innerHeight","messages","version","isUpdated","isConnected","isReconnecting","isDisconnected","isRestarting","isSidebarVisible","isFetching","isPopulated","error","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","done","fail","status","actionHandlers","async","isFetchingComplete","Promise","global","Strings","resolve","fetchAppTranslations","reducers","prevVersion","flattenProviderData","providerData","result","property","provider","action","queryParams","JSON","stringify","refreshing","token","siteKey","secretToken","ray","stoken","responseUrl","imageData","REFRESH_CAPTCHA","GET_CAPTCHA_COOKIE","SET_CAPTCHA_VALUE","RESET_CAPTCHA","refreshCaptcha","getCaptchaCookie","setCaptchaValue","resetCaptcha","actionPayload","requestAction","captchaRequest","captcha","captchaResponse","captchaToken","LEFT","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","PROTOCOL","PRIVACY","APP_PROFILE","CATEGORY","TAG","itemValue","filterValue","Array","isArray","some","v","toLowerCase","contains","startsWith","endsWith","ACTIVITY","farClock","ADD","fasPlus","ADVANCED_SETTINGS","fasCog","AUDIO","fasMusic","BACKUP","farFileArchive","BOOK","fasBook","BUG","fasBug","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","DOWNLOAD","fasDownload","DOWNLOADING","fasCloudDownloadAlt","DRIVE","farHdd","EDIT","fasWrench","EXTERNAL_LINK","fasExternalLinkAlt","FATAL","fasTimesCircle","FILE","farFile","FILM","fasFilm","FILTER","fasFilter","FLAG","fasFlag","FOLDER","farFolder","FOLDER_OPEN","fasFolderOpen","FOOTNOTE","fasAsterisk","HEALTH","fasMedkit","HEART","fasHeart","HOUSEKEEPING","fasHome","INFO","fasInfoCircle","INTERACTIVE","fasUser","KEYBOARD","farKeyboard","LOCK","fasLock","LOGOUT","fasSignOutAlt","MAGNET","fasMagnet","MANAGE","fasListCheck","NAVBAR_COLLAPSE","fasBars","OVERFLOW","fasEllipsisH","PAGE_FIRST","fasFastBackward","PAGE_PREVIOUS","fasBackward","PAGE_NEXT","fasForward","PAGE_LAST","fasFastForward","PARENT","fasLevelUpAlt","PENDING","QUICK","fasRocket","REDIRECT","fasLocationArrow","REFRESH","fasSync","REMOVE","RESTART","fasRedoAlt","RESTORE","fasHistory","REORDER","RSS","fasRss","SAVE","fasSave","SCHEDULED","SEARCH","fasSearch","MOVIE_CONTINUING","fasPlay","SERIES_ENDED","fasStop","SETTINGS","fasCogs","SHUTDOWN","fasPowerOff","SORT","fasSort","SORT_ASCENDING","fasSortUp","SORT_DESCENDING","fasSortDown","SPINNER","fasSpinner","SQUARE","farSquare","SQUARE_MINUS","fasSquareMinus","SUBTRACT","SYSTEM","fasLaptop","TABLE","fasTable","TEST","fasVial","TRANSLATE","fasLanguage","TV","fasTv","UNKNOWN","fasQuestion","fasRetweet","WARNING","fasExclamationTriangle","WIKI","fasBookReader","BLOCKLIST","fasBan","APP_PROFILE_SELECT","CAPTCHA","CARDIGANNCAPTCHA","DEVICE","CATEGORY_SELECT","DOWNLOAD_CLIENT_SELECT","OAUTH","PASSWORD","PATH","SELECT","DYNAMIC_SELECT","TEXT","TEXT_TAG","TAG_SELECT","DEFAULT","DISABLED","INVERSE","PRIMARY","SUCCESS","NONE","HORIZONTAL","VERTICAL","SMALL","MEDIUM","LARGE","ASCENDING","DESCENDING","TOP","commandA","commandB","name","toLocaleLowerCase","length","command","createFetchHandler","otherPayload","traditional","batchActions","isDeleting","deleteError","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","body","sendUpdatesToClient","suppressMessages","hideAfter","scheduleRemoveCommand","timeoutId","executeCommandHelper","isSameCommand","console","warn","commandFinished","requestPayload","createRemoveItemHandler","commands","handler","keyValueOnly","pendingFields","fields","selectedSchema","schema","field","presets","abortCurrentRequests","lastSaveData","createCancelSaveProviderHandler","options","isSaving","saveData","getProviderState","requestUrl","params","forceSave","FETCH_CUSTOM_FILTERS","SAVE_CUSTOM_FILTER","DELETE_CUSTOM_FILTER","fetchCustomFilters","saveCustomFilter","deleteCustomFilter","createSaveProviderHandler","findSelectedFilters","selectedFilterKey","filters","customFilters","selectedFilter","find","f","page","fetchHandler","sectionState","currentPage","nextPage","pages","fetchThunk","fetchDataAugmenter","fetchHandlerType","serverSideCollectionHandlers","filter","customFilter","response","createFetchServerSideCollectionHandler","createSetServerSideCollectionPageHandler","sortKey","sortDirection","sortDirections","createSetServerSideCollectionSortHandler","createSetServerSideCollectionFilterHandler","whitelistedProperties","columns","columnLabel","isVisible","isModifiable","label","isSortable","filterBuilderProps","filterBuilderTypes","valueType","filterBuilderValueTypes","persistState","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","createServerSideCollectionHandlers","isMarkingAsFailed","markAsFailedError","createSetTableOptionReducer","createClearReducer","isTestingAll","lastTestData","createCancelTestProviderHandler","isTesting","testData","forceTest","currentValue","pendingState","parsedValue","parseInt","date","offsets","offsetTime","moment","add","isAfter","isBefore","time","map","propsToUpdate","ids","schemaSection","filterPredicates","added","dateFilterPredicate","vipExpiration","_item$fields$find$val","_item$fields$find","categories","predicate","filterTypePredicates","capabilities","category","element","subCategories","subCat","sortPredicates","enable","redirect","_fields$find$value","_fields$find","minimumSeeders","_fields$find$value2","_fields$find2","undefined","seedRatio","_fields$find$value3","_fields$find3","seedTime","_fields$find$value4","_fields$find4","packSeedTime","_fields$find$value5","_fields$find5","preferMagnetUrl","_ref7","_fields$find$value6","_fields$find6","FETCH_INDEXERS","FETCH_INDEXER_SCHEMA","SELECT_INDEXER_SCHEMA","SET_INDEXER_SCHEMA_SORT","CLEAR_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","fetchIndexers","fetchIndexerSchema","selectIndexerSchema","setIndexerSchemaSort","clearIndexerSchema","cloneIndexer","saveIndexer","cancelSaveIndexer","deleteIndexer","testIndexer","cancelTestIndexer","testAllIndexers","bulkEditIndexers","bulkDeleteIndexers","setIndexerValue","setIndexerFieldValue","createTestProviderHandler","createTestAllProvidersHandler","createBulkEditItemHandler","createBulkRemoveItemHandler","createSetSettingValueReducer","createSetProviderFieldValueReducer","createSetClientSideCollectionSortReducer","_ref8","schemaDefaults","implementation","selectedImplementation","applySchemaDefaults","selectSchema","_payload$name","implementationName","supportsRss","_ref9","i","newField","privacy","FETCH_INDEXER_HISTORY","CLEAR_INDEXER_HISTORY","fetchIndexerHistory","clearIndexerHistory","secondarySortKey","secondarySortDirection","tableOptions","showSearchAction","SET_INDEXER_SORT","SET_INDEXER_FILTER","SET_INDEXER_VIEW","SET_INDEXER_TABLE_OPTION","setIndexerSort","setIndexerFilter","setIndexerView","setIndexerTableOption","createSetClientSideCollectionFilterReducer","view","start","end","details","FETCH_INDEXER_STATS","SET_INDEXER_STATS_FILTER","fetchIndexerStats","setIndexerStatsFilter","indexerStats","getCustomFilters","selectedFilters","requestParams","endDate","toISOString","indexers","protocols","tags","startDate","endOf","FETCH_INDEXER_STATUS","fetchIndexerStatus","FETCH_LOCALIZATION_OPTIONS","fetchLocalizationOptions","callbackUrl","location","origin","urlBase","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","actions","currentPath","directories","files","parent","FETCH_PATHS","UPDATE_PATHS","CLEAR_PATHS","fetchPaths","updatePaths","clearPaths","path","allowFoldersWithoutTrailingSlashes","includeFiles","lastActions","lastActionId","FETCH_OPTIONS","CLEAR_OPTIONS","fetchOptions","clearOptions","subsection","actionId","Icon","PureComponent","render","containerClassName","className","kind","size","title","isSpinning","this","props","icon","React","FontAwesomeIcon","_extends","classNames","styles","spin","style","fontSize","defaultProps","kinds","fixedWidth","abortCurrentRequest","isGrabbing","grabError","defaults","searchType","searchQuery","searchIndexerIds","searchCategories","searchLimit","searchOffset","isHidden","icons","age","ageMinutes","peers","seeders","leechers","indexerFlags","releaseWeight","cat","sort","c","FETCH_RELEASES","CANCEL_FETCH_RELEASES","SET_RELEASES_SORT","CLEAR_RELEASES","GRAB_RELEASE","SAVE_RELEASE","BULK_GRAB_RELEASES","UPDATE_RELEASE","SET_RELEASES_FILTER","SET_RELEASES_TABLE_OPTION","SET_SEARCH_DEFAULT","fetchReleases","cancelFetchReleases","setReleasesSort","clearReleases","grabRelease","saveRelease","bulkGrabReleases","updateRelease","setReleasesFilter","setReleasesTableOption","setSearchDefault","fetchReleasesHelper","guid","isGrabbed","link","downloadUrl","file","fileName","xhrFields","responseType","success","a","document","createElement","URL","createObjectURL","href","download","append","click","remove","revokeObjectURL","otherDefaultState","findIndex","isSchemaFetching","isSchemaPopulated","schemaError","presetName","FETCH_APPLICATIONS","FETCH_APPLICATION_SCHEMA","SELECT_APPLICATION_SCHEMA","SET_APPLICATION_VALUE","SET_APPLICATION_FIELD_VALUE","SAVE_APPLICATION","CANCEL_SAVE_APPLICATION","DELETE_APPLICATION","TEST_APPLICATION","CANCEL_TEST_APPLICATION","TEST_ALL_APPLICATIONS","BULK_EDIT_APPLICATIONS","BULK_DELETE_APPLICATIONS","SET_MANAGE_APPLICATIONS_SORT","fetchApplications","fetchApplicationSchema","selectApplicationSchema","saveApplication","cancelSaveApplication","deleteApplication","testApplication","cancelTestApplication","testAllApplications","bulkEditApplications","bulkDeleteApplications","setManageApplicationsSort","setApplicationValue","setApplicationFieldValue","createFetchSchemaHandler","selectProviderSchema","FETCH_APP_PROFILES","FETCH_APP_PROFILE_SCHEMA","SAVE_APP_PROFILE","DELETE_APP_PROFILE","SET_APP_PROFILE_VALUE","CLONE_APP_PROFILE","fetchAppProfiles","fetchAppProfileSchema","saveAppProfile","deleteAppProfile","setAppProfileValue","cloneAppProfile","FETCH_DEVELOPMENT_SETTINGS","SET_DEVELOPMENT_SETTINGS_VALUE","SAVE_DEVELOPMENT_SETTINGS","fetchDevelopmentSettings","saveDevelopmentSettings","setDevelopmentSettingsValue","createSaveHandler","FETCH_DOWNLOAD_CLIENT_CATEGORIES","FETCH_DOWNLOAD_CLIENT_CATEGORY_SCHEMA","SELECT_DOWNLOAD_CLIENT_CATEGORY_SCHEMA","SET_DOWNLOAD_CLIENT_CATEGORY_VALUE","SET_DOWNLOAD_CLIENT_CATEGORY_FIELD_VALUE","SAVE_DOWNLOAD_CLIENT_CATEGORY","DELETE_DOWNLOAD_CLIENT_CATEGORY","DELETE_ALL_DOWNLOAD_CLIENT_CATEGORY","CLEAR_DOWNLOAD_CLIENT_CATEGORIES","CLEAR_DOWNLOAD_CLIENT_CATEGORY_PENDING","fetchDownloadClientCategories","fetchDownloadClientCategorySchema","selectDownloadClientCategorySchema","saveDownloadClientCategory","deleteDownloadClientCategory","deleteAllDownloadClientCategory","setDownloadClientCategoryValue","setDownloadClientCategoryFieldValue","clearDownloadClientCategory","clearDownloadClientCategoryPending","cfState","tag","settings","downloadClientCategories","x","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","downloadClients","FETCH_GENERAL_SETTINGS","SET_GENERAL_SETTINGS_VALUE","SAVE_GENERAL_SETTINGS","fetchGeneralSettings","saveGeneralSettings","setGeneralSettingsValue","FETCH_INDEXER_CATEGORIES","fetchIndexerCategories","FETCH_INDEXER_PROXYS","FETCH_INDEXER_PROXY_SCHEMA","SELECT_INDEXER_PROXY_SCHEMA","SET_INDEXER_PROXY_VALUE","SET_INDEXER_PROXY_FIELD_VALUE","SAVE_INDEXER_PROXY","CANCEL_SAVE_INDEXER_PROXY","DELETE_INDEXER_PROXY","TEST_INDEXER_PROXY","CANCEL_TEST_INDEXER_PROXY","fetchIndexerProxies","fetchIndexerProxySchema","selectIndexerProxySchema","saveIndexerProxy","cancelSaveIndexerProxy","deleteIndexerProxy","testIndexerProxy","cancelTestIndexerProxy","setIndexerProxyValue","setIndexerProxyFieldValue","FETCH_NOTIFICATIONS","FETCH_NOTIFICATION_SCHEMA","SELECT_NOTIFICATION_SCHEMA","SET_NOTIFICATION_VALUE","SET_NOTIFICATION_FIELD_VALUE","SAVE_NOTIFICATION","CANCEL_SAVE_NOTIFICATION","DELETE_NOTIFICATION","TEST_NOTIFICATION","CANCEL_TEST_NOTIFICATION","fetchNotifications","fetchNotificationSchema","selectNotificationSchema","saveNotification","cancelSaveNotification","deleteNotification","testNotification","cancelTestNotification","setNotificationValue","setNotificationFieldValue","onGrab","supportsOnGrab","onApplicationUpdate","supportsOnApplicationUpdate","FETCH_UI_SETTINGS","SET_UI_SETTINGS_VALUE","SAVE_UI_SETTINGS","fetchUISettings","saveUISettings","setUISettingsValue","advancedSettings","general","indexerCategories","indexerProxies","notifications","applications","appProfiles","development","ui","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","processData","FETCH_TAGS","ADD_TAG","DELETE_TAG","FETCH_TAG_DETAILS","fetchTags","addTag","deleteTag","fetchTagDetails","slice","onTagCreated","app","history","oAuth","paths","providerOptions","releases","localization","indexerHistory","indexerIndex","indexerStatus","system","columnPaths","serialize","obj","config","slicer","paths_","subset","merge","initialState","persistedState","computedState","columnPath","initialColumns","persistedColumns","persistedColumn","column","newColumn","prop","defineProperty","getOwnPropertyDescriptor","initialColumn","persistedColumnIndex","mergeColumns","anchor","parseUrl","properties","hash","host","hostname","pathname","port","protocol","search","isAbsolute","qs","cleanseUrl","cleanseData","transaction","exception","stacktrace","frames","frame","filename","stripUrlBase","middlewares","sentryMiddleware","analytics","branch","release","userHash","isProduction","dsn","sentry","environment","sendDefaultPii","beforeSend","integrations","Integrations","iteratee","scope","setUser","username","setTag","store","next","err","extra","createSentryMiddleware","routerMiddleware","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","applyMiddleware","parse","localStorage","getItem","setItem","createPersistState","createStore","enableBatching","combineReducers","router","connectRouter","createReducers","createSelector","fallbackErrorMessage","isLocalStorageSupported","translationsError","indexersError","indexerStatusError","indexerCategoriesError","customFiltersError","tagsError","languagesError","uiSettingsError","systemStatusError","getErrorMessage","LoadingIndicator","rippleClassName","sizeInPx","floor","random","src","LoadingMessage","ErrorBoundary","Component","constructor","context","super","info","componentDidCatch","setState","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","lineNumber","columnNumber","componentStack","Link","component","to","target","isDisabled","noRouter","onPress","onClick","useCallback","event","linkClass","toLink","rel","RouterLink","disabled","Button","button","buttonGroupPosition","sizes","ScrollDirection","forwardRef","ref","autoFocus","autoScroll","scrollDirection","Vertical","scrollTop","initialScrollTop","onScroll","internalRef","useRef","currentRef","current","None","focus","preventScroll","div","handleScroll","throttle","scrollLeft","addEventListener","removeEventListener","scroller","tabIndex","ModalBody","innerClassName","hasScroller","scrollDirections","Scroller","ModalContent","showCloseButton","onModalClose","ModalFooter","ModalHeader","ErrorBoundaryError","openModals","Modal","_setBackgroundRef","_backgroundRef","onBackdropBeginPress","_isBackdropPressed","_isBackdropTarget","onBackdropEndPress","closeOnBackgroundClick","onKeyDown","keyCode","indexOf","_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","InlineMarkdown","blockClassName","markdownBlocks","linkRegex","RegExp","endIndex","exec","substr","codeRegex","matchedCode","usePrevious","changes","uniqueChanges","Set","change","checkChange","useDispatch","useSelector","previousVersion","installedIndex","u","installedPreviouslyIndex","appliedUpdates","appliedChanges","new","fixed","mergedUpdate","mergeUpdates","handleSeeChangesPress","UpdateChanges","handleModalClose","reload","AppUpdatedModalContent","ColorImpairedContext","ColorImpairedConsumer","Consumer","currentPopulator","currentReasons","input","charAt","toUpperCase","mapDispatchToProps","dispatchFetchCommands","dispatchUpdateCommand","dispatchFinishCommand","dispatchSetAppValue","dispatchSetVersion","dispatchUpdate","dispatchUpdateItem","dispatchRemoveItem","dispatchFetchHealth","dispatchFetchIndexers","dispatchFetchIndexerStatus","dispatchFetchTags","dispatchFetchTagDetails","Logger","minimumLogLevel","prototype","cleanse","apikey","encodeURIComponent","log","logLevel","signalR","Critical","Warning","Information","SignalRConnector","handleMessage","titleCase","getHandlerName","handleApplications","resource","handleCommand","handleDownloadclient","handleHealth","handleIndexerstatus","handleIndexer","handleIndexerproxy","handleNotification","handleVersion","handleSystemTask","handleTag","onStartFail","onStart","debug","onReconnecting","onReconnected","onClose","onReceiveMessage","connection","configureLogging","withUrl","withAutomaticReconnect","nextRetryDelayInMilliseconds","retryContext","elapsedMilliseconds","min","previousRetryCount","build","onreconnecting","onreconnected","onclose","on","stop","connect","mapFailure","failure","infoLink","detailedMessage","detailedDescription","validationFailures","getValidationFailures","allSettings","definitionName","setting","errors","isWarning","warnings","previousValue","pending","validationErrors","validationWarnings","hasPendingChanges","hasSettings","sectionSettings","selectSettings","Alert","alert","func","child","call","FormGroup","isAdvanced","childProps","group","comparer","b","localeCompare","numeric","SelectInput","arguments","onChange","disabledClassName","hasError","hasWarning","onBlur","option","optionValue","otherOptionProps","AppProfileSelectInputConnector","firstValue","isNaN","includeNoChange","createSortedSectionSelector","sortByProp","includeMixed","appProfile","unshift","Portal","propTypes","PropTypes","isRequired","AutoSuggestInput","renderInputComponent","inputProps","Reference","renderSuggestionsContainer","containerProps","Popper","placement","modifiers","computeMaxHeight","order","enabled","fn","onComputeMaxHeight","flip","padding","minHeight","popperRef","scheduleUpdate","_scheduleUpdate","maxHeight","top","bottom","reference","windowHeight","onInputChange","newValue","onInputKeyDown","suggestions","forwardedRef","inputContainerClassName","placeholder","getSuggestionValue","renderSuggestion","onInputFocus","onInputBlur","onSuggestionsFetchRequested","onSuggestionsClearRequested","onSuggestionSelected","autoComplete","spellCheck","onFocus","theme","containerOpen","suggestionsContainer","suggestionsList","suggestion","suggestionHighlighted","Manager","Autosuggest","enforceMaxHeight","AutoCompleteInput","lowerCaseValue","jdu","filteredValues","SpinnerButton","spinnerIcon","canSpin","isLastButton","middleButton","TextInput","setInputRef","_input","selectionChange","onKeyUp","_isMouseTarget","onDocumentMouseUp","onWheel","blur","_selectionStart","_selectionEnd","_selectionTimeout","selectionStart","selectionEnd","selectionChanged","onSelectionChange","readOnly","hasButton","step","onCopy","onCut","CaptchaInput","onRefreshPress","onCaptchaChange","FormInputButton","ReCAPTCHA","sitekey","CaptchaInputConnector","CardigannCaptchaInput","img","CardigannCaptchaInputConnector","FormInputHelpText","text","tooltip","isError","isCheckInput","CheckInput","toggleChecked","checked","shiftKey","checkedValue","uncheckedValue","setRef","_checkbox","nativeEvent","setIndeterminate","indeterminate","helpText","helpTextWarning","isChecked","isIndeterminate","isCheckClass","checkbox","isNotChecked","TagInputInput","isFocused","onInputContainerPress","tagComponent","TagComponent","onTagDelete","isLastTag","onDelete","Label","outline","TagInputTag","getTag","selectedIndex","allowNew","existingTag","TagInput","_setAutosuggestRef","_autosuggestRef","shouldRenderSuggestions","minQueryLength","onTagAdd","leading","trailing","delimiters","includes","highlightedSuggestionIndex","tagList","t","cancel","focusInputOnSuggestionClick","DeviceInput","device","selectedDevices","inputClassName","dispatchFetchOptions","dispatchClearOptions","DeviceInputConnector","_populate","devices","valueDevice","Measure","onMeasure","ReactMeasure","EnhancedSelectInputOption","e","onSelect","onCheckPress","depth","isSelected","isMultiSelect","HintedSelectInputOption","hint","EnhancedSelectInputSelectedValue","HintedSelectInputSelectedValue","includeHint","valuesMap","getSelectedOption","startingIndex","direction","indexToTest","previousIndex","nextIndex","getSelectedIndex","isSelectedItem","getKey","EnhancedSelectInput","onWindowClick","_buttonId","_optionsId","_removeListener","isEditable","origIndex","isArrowKey","_addListener","onOpen","arrayValue","onOptionsModalClose","isMobileUtil","valueOptions","selectedValueOptions","selectedValueComponent","SelectedValueComponent","optionComponent","OptionComponent","selectedOption","selectedValue","whitelist","editableContainer","dropdownArrowContainerEditable","dropdownArrowContainerDisabled","dropdownArrowContainer","loading","preventOverflow","boundariesElement","optionsContainer","minWidth","hasParent","parentKey","parentSelected","optionsModal","optionsModalBody","optionsInnerModalBody","optionsModalScroller","mobileCloseButtonContainer","mobileCloseButton","enhancedSelect","dispatchFetchDownloadClients","DownloadClientSelectInputConnector","includeAny","protocolFilter","downloadClient","importantFieldNames","getProviderDataKey","EnhancedSelectInputConnector","prevKey","nextKey","refetchRequired","_cleanup","selectOptionsProviderAction","parentValue","IndexerFlagsSelectInputConnector","flagId","selectedFlags","InfoInput","dangerouslySetInnerHTML","__html","IconButton","iconClassName","KeyValueListInputItem","onKeyChange","keyValue","onValueChange","onRemovePress","onRemove","keyPlaceholder","valuePlaceholder","isNew","KeyValueListInput","onItemChange","onRemoveItem","IndexersSelectInputConnector","parseValue","isFloat","parseFloat","NumberInput","stringValue","toString","prevState","SpinnerErrorButton","resetState","wasSuccessful","_testResultTimeout","testResult","failures","getTestResult","showIcon","iconName","iconKind","OAuthInput","OAuthInputConnector","stopImmediatePropagation","maxWidth","Tooltip","computeMaxSize","right","left","windowWidth","_maxWidth","onMouseEnter","_closeTimeout","onMouseLeave","getMaxWidth","bodyClassName","position","canFlip","eventsEnabled","escapeWithReference","arrowProps","popperPlacement","vertical","tooltipContainer","verticalContainer","horizontalContainer","arrow","arrowDisabled","tooltipPositions","Form","warning","FormLabel","errorClassName","htmlFor","isDragging","connectDragSource","onVisibleChange","DragPreviewLayer","TABLE_COLUMN","TableOptionsColumnDragPreview","itemType","currentOffset","y","transform","WebkitTransform","msTransform","TableOptionsColumn","DragLayer","monitor","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","pageSizeError","onTableOptionChange","dropIndex","hasPageSize","canModifyColumns","optionsComponent","OptionsComponent","DndProvider","HTML5toTouch","FormInputGroup","inputTypes","TableOptionsModalWrapper","onTableOptionsPress","isTableOptionsModalOpen","onTableOptionsModalClose","Fragment","TableHeader","TableHeaderCell","fixedSortDirection","onSortPress","isSorting","sortIcon","allSelected","allUnselected","onSelectAllChange","getValue","VirtualTableHeaderCell","tableHeaderCellProps","Table","horizontalScroll","selectAll","tableContainer","TableSelectAllHeaderCell","getTableHeaderCellProps","table","TableBody","TableRowCell","TableRow","overlayContent","getIconName","FileBrowserRow","TableRowButton","FileBrowserModalContent","onPathInputChange","onRowPress","onFetchPaths","onOkPress","onClearPaths","_scrollerRef","isFileBrowserModalOpen","isWindowsService","emptyParent","PathInput","hasFileBrowser","directory","dispatchFetchPaths","dispatchClearPaths","FileBrowserModalContentConnector","createSystemStatusSelector","systemStatus","filteredPaths","isWindows","mode","FileBrowserModal","suggestionValue","onFileBrowserOpenPress","onFileBrowserModalClose","lastSeparatorIndex","lastIndexOf","PathInputConnector","validTagRegex","TagInputConnector","allTags","tagName","isValidTag","createTagsSelector","sortedTags","filteredTagList","matchingTag","TagSelectInputConnector","TextArea","separator","s","TextTagInputConnector","valueArray","newTag","trim","tagsArray","unit","buttons","helpTexts","helpLink","InputComponent","PasswordInput","NewznabCategorySelectInputConnector","getComponent","checkInput","buttonsArray","toArray","lastButtonIndex","FieldSet","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","WrappedComponent","KeyboardShortcuts","_this","bindShortcut","callback","_mousetrap","bind","_mousetrapBindings","unbindShortcut","unbind","unbindAllShortcuts","binding","stopCallback","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","onSavePress","dispatchFetchStatus","didMount","SECTION","dispatchClearPendingChanges","dispatchSetGeneralSettingsValue","dispatchSaveGeneralSettings","dispatchFetchGeneralSettings","AuthenticationRequiredModalContentConnector","AuthenticationRequiredModalContent","createSettingsSectionSelector","createSelectorCreator","defaultMemoize","isEqual","year","alternateTitles","alternateTitle","refIndex","ADD_NEW_TYPE","IndexerSearchInput","setAutosuggestRef","_autosuggest","focusInput","altKey","ctrlKey","reset","highlightedSectionIndex","onGoToAddNewMovie","getSectionSuggestions","renderSectionTitle","IndexerSearchResult","matches","suggestionGroups","multiSection","createDeepEqualSelector","createAllIndexersSelector","allIndexers","movie","titleSlug","sortTitle","images","firstCharacter","movies","isOsx","allShortcuts","getShortcuts","shortcut","comboMatch","modifier","osModifier","getShortcutKey","KeyboardShortcutsModalContentConnector","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","alt","IndexerSearchInputConnector","PageHeaderActionsMenu","KeyboardShortcutsModal","OverlayScroller","_setScrollRef","_scroller","registerScroller","_renderThumb","trackClassName","_renderTrackHorizontal","finalStyle","borderRadius","_renderTrackVertical","_renderView","onScrollStart","_isScrolling","onScrollStop","currentTarget","autoHide","Scrollbars","hideTracksWhenNotNeeded","renderTrackHorizontal","renderTrackVertical","renderThumbHorizontal","renderThumbVertical","renderView","count","iconContainer","MessageConnector","scheduleHideMessage","_hideTimeoutId","Message","reverse","PageSidebarItem","isChildItem","isParentItem","isActive","isActiveParent","statusComponent","StatusComponent","HEADER_HEIGHT","SIDEBAR_WIDTH","links","alias","createHealthSelector","wasReconnecting","useMemo","PageSidebarStatus","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","childWithStatusComponent","childStatusComponent","hasActiveChild","hasActiveChildLink","MessagesConnector","Page","onResize","onUpdatedModalClose","isUpdatedModalOpen","onConnectionLostModalClose","isConnectionLostModalOpen","enableColorImpairedMode","Provider","AppUpdatedModal","ConnectionLostModal","AuthenticationRequiredModal","testLocalStorage","selectAppProps","selectIsPopulated","customFiltersIsPopulated","tagsIsPopulated","uiSettingsIsPopulated","generalSettingsIsPopulated","appProfilesIsPopulated","indexersIsPopulated","indexerStatusIsPopulated","indexerCategoriesIsPopulated","systemStatusIsPopulated","translationsIsPopulated","selectErrors","generalSettingsError","appProfilesError","PageConnector","dispatchFetchCustomFilters","dispatchFetchAppProfiles","dispatchFetchIndexerCategories","dispatchFetchUISettings","dispatchFetchTranslations","ErrorPage","LoadingPage","withRouter","createDimensionsSelector","auto","matchMedia","dark","light","updateCSSVariables","entries","themes","setProperty","contentBody","innerContentBody","onScrollWrapper","PageContentBody","PageContent","PageContentError","DocumentTitle","instanceName","NotFound","getPathWithUrlBase","Switch","RouterSwitch","childPath","addUrlBase","APPLICATION_UPDATE","CLEAR_LOGS","DELETE_LOG_FILES","DELETE_UPDATE_LOG_FILES","RESET_API_KEY","APP_INDEXER_SYNC","useCurrentPage","getSortClause","createCustomFiltersSelector","alternateType","uiSection","uiSectionState","filtered","accepted","every","sorted","clauses","orders","totalItems","contraints","findCommand","createCommandSelector","isCommandExecuting","SelectedMenuItem","selectedIconName","FilterMenuItem","filterKey","FilterMenuContent","showCustomFilters","onFilterSelect","onCustomFiltersPress","ToolbarMenuButton","indicator","FilterMenu","isFilterModalOpen","onFiltersModalClose","buttonComponent","ButtonComponent","filterModalConnectorComponent","FilterModalConnectorComponent","filterModalConnectorComponentProps","PageToolbar","PageToolbarButton","spinningName","SpinnerIcon","BUTTON_WIDTH","SEPARATOR_WIDTH","PageToolbarSection","isMeasured","overflowItems","alignContent","collapseButtons","buttonCount","separatorCount","validChildren","separatorsWidth","maxButtons","actualButtons","isSeparator","calculateOverflowItems","sectionContainer","flexGrow","overflowMenuButton","overflowComponent","OverflowComponent","PageToolbarOverflowMenuItem","TablePager","onOpenPageSelectClick","isShowingPageSelect","onPageSelect","onPageSelectBlur","onFirstPagePress","onPreviousPagePress","onNextPagePress","onLastPagePress","from","pageNumber","isFirstPage","isLastPage","power","binaryPrefix","Number","prefix","pow","round","filesize","base","NAME","getTagDisplayValue","selectedFilterBuilderProp","formatBytes","FilterBuilderRowValue","convertToBytes","hasItems","maxSuggestionsLength","FilterBuilderRowValueTag","indexerCategoriesSelector","isString","possibleString","timeOptions","isInFilter","filterType","DateFilterBuilderRowValue","onTimeChange","sectionItems","optionsSelector","EVENT_TYPE_OPTIONS","IndexerFilterBuilderRowValueConnector","privacyTypes","getselectedFilterBuilderProp","getFilterTypeOptions","getDefaultFilterType","getDefaultFilterValue","FilterBuilderRow","onFilterKeyChange","onFilterChange","onAddPress","filterCount","keyOptions","availablePropFilter","ValueComponent","FilterBuilderRowValueConnector","AppProfileFilterBuilderRowValueConnector","BoolFilterBuilderRowValue","CategoryFilterBuilderRowValue","HistoryEventTypeFilterBuilderRowValue","ProtocolFilterBuilderRowValue","PrivacyFilterBuilderRowValue","TagFilterBuilderRowValueConnector","getRowValueConnector","FilterBuilderModalContent","onLabelChange","onAddFilterPress","onRemoveFilterPress","onSaveFilterPress","customFilterType","onSaveCustomFilterPress","labelErrors","dispatchSetFilter","maxBy","onCancelPress","dispatchDeleteCustomFilter","SpinnerIconButton","CustomFilter","onEditPress","onAddCustomFilter","onEditCustomFilter","FilterModal","filterBuilder","FilterBuilderModalContentConnector","CustomFiltersModalContentConnector","HistoryFilterModal","queueItems","HistoryOptions","onGlobalInputChange","historyCleanupDays","generalSettings","createIndexerSelectorForHook","indexerId","timeFormat","_temp","includeMinuteZero","includeSeconds","minute","format","dateObj","Date","today","getDate","getMonth","getFullYear","tomorrow","setDate","yesterday","dateFormat","includeRelativeDay","includeRelativeDate","isYesterday","isToday","isTomorrow","getRelativeDay","formatTime","shortDateFormat","showRelativeDates","timeForToday","isTodayDate","now","isBetween","clone","isInNextWeek","RelativeDateCell","longDateFormat","createUISettingsSelector","uiSettings","formatDateTime","getRelativeDate","categoryFilter","filteredList","r","uniqBy","DescriptionList","DescriptionListItemDescription","DescriptionListItemTitle","DescriptionListItem","titleClassName","descriptionClassName","indexer","eventType","queryResults","limit","offset","source","elapsedTime","cached","grabTitle","publishedDate","infoUrl","downloadClientName","grabMethod","downloadClientNameInfo","HistoryDetailsModal","getHeaderTitle","HistoryDetails","IMDB_ID","TMDB_ID","TVDB_ID","TRAKT_ID","R_ID","TVMAZE_ID","SEASON","EPISODE","ARTIST","ALBUM","LABEL","TRACK","YEAR","GENRE","AUTHOR","TITLE","PUBLISHER","HistoryEventTypeCell","successful","getIconKind","getTooltip","queryType","historyParameters","historyDataTypes","HistoryRow","onSearchPress","searchParams","onDetailsPress","isDetailsModalOpen","onDetailsModalClose","onMarkAsFailedPress","parameters","parameter","HistoryRowParameter","CapabilitiesLabel","HistoryRowConnector","History","onClearHistoryPress","isClearHistoryModalOpen","onClearHistoryModalClose","onConfirmClearHistory","isHistoryClearing","isIndexersFetching","isIndexersPopulated","isFetchingAny","isAllPopulated","HistoryOptionsConnector","historyActions","HistoryConnector","repopulate","commandNames","populator","reasons","withCurrentPage","createCommandExecutingSelector","areAllSelected","selectedState","selected","newSelectedState","lastToggled","idProp","nextSelectedState","lower","upper","lastToggledIndex","changedIndex","getToggledRange","getSelectedState","existingState","_existingState$id","selectReducer","cloneDeep","toggleSelected","useSelectState","useReducer","SelectContext","SelectProvider","useSelect","PageJumpBarItem","ITEM_HEIGHT","PageJumpBar","visibleItems","computeVisibleItems","shouldComponentUpdate","nextProps","nextState","minimumItems","characters","maximumItems","minCount","minAllowed","PageToolbarSeparator","scrollPositionKey","scrollPositions","SortDirection","char","protocolName","language","description","isExistingIndexer","onIndexerSelect","ProtocolLabel","PrivacyLabel","COLUMNS","PROTOCOLS","PRIVACY_LEVELS","onSelectIndexer","createClientSideCollectionSelector","setFilter","filterProtocols","setFilterProtocols","filterLanguages","setFilterLanguages","filterPrivacyLevels","setFilterPrivacyLevels","filterCategories","setFilterCategories","onFilterProtocolsChange","onFilterLanguagesChange","onFilterPrivacyLevelsChange","onFilterCategoriesChange","languages","filteredIndexers","flat","flatMap","flatCategories","categoryId","SelectIndexerRow","onModalClosePress","AddIndexerModalContent","getType","getSelectValues","selectOptions","ProviderFieldFormGroup","advanced","hidden","AdvancedSettingsButton","onAdvancedSettingsPress","showLabel","hasUsenetDownloadClients","hasTorrentDownloadClients","onFieldChange","onTestPress","onDeleteIndexerPress","supportsRedirect","appProfileId","priority","downloadClientId","indexerDisplayName","showDownloadClientInput","EditIndexerModalContentConnector","EditIndexerModalContent","usenetDownloadClients","torrentDownloadClients","EditIndexerModalConnector","dispatchCancelTestIndexer","dispatchCancelSaveIndexer","EditIndexerModal","onAddIndexerPress","prevItems","currentItems","len","createMovieEqualSelector","hasDifferentItemsOrOrder","IndexerIndexFooter","torrent","IndexerIndexFilterModal","IndexerIndexFilterMenu","SortMenu","SortMenuItem","onSortSelect","isSelectMode","selectState","selectDispatch","onPressWrapper","PageContentFooter","indexerIds","indexerList","orderBy","onDeleteIndexerConfirmed","DeleteIndexerModalContent","NO_CHANGE","enableOptions","setEnable","setAppProfileId","setPriority","setMinimumSeeders","setSeedRatio","setSeedTime","setPackSeedTime","setPreferMagnetUrl","save","hasChanges","onSavePressWrapper","selectedCount","includeNoChangeDisabled","onApplyTagsPress","setTags","applyTags","setApplyTags","indexerTags","uniq","onTagsChange","onApplyTagsChange","onApplyPress","applyTagsOptions","removeTag","TagsModalContent","indexersEditorSelector","isEditModalOpen","setIsEditModalOpen","isTagsModalOpen","setIsTagsModalOpen","isDeleteModalOpen","setIsDeleteModalOpen","isSavingIndexer","setIsSavingIndexer","isSavingTags","setIsSavingTags","previousIsDeleting","getSelectedIds","onEditModalClose","onTagsPress","onTagsModalClose","onDeletePress","onDeleteModalClose","anySelected","TagsModal","DeleteIndexerModal","ResizeObserver","ResizeObserverPolyfill","getIndexOfFirstCharacter","character","sortName","VirtualTableRowCell","VirtualTableSelectCell","onSelectedChange","tagId","TagList","onConfirmDelete","profile","createIndexerAppProfileSelector","createIndexerStatusSelector","setIsDetailsModalOpen","onDetailsModalPress","IndexerHistoryRow","TABS","_capabilities$searchP","_capabilities$tvSearc","_capabilities$movieSe","_capabilities$bookSea","_capabilities$musicSe","_capabilities$categor","onCloneIndexerPress","encoding","indexerUrls","createIndexerSelector","useIndexer","selectedTab","setSelectedTab","isEditIndexerModalOpen","setIsEditIndexerModalOpen","isDeleteIndexerModalOpen","setIsDeleteIndexerModalOpen","handleTabSelect","handleEditIndexerPress","handleEditIndexerModalClose","handleDeleteIndexerPress","handleDeleteIndexerModalClose","handleCloneIndexerPressWrapper","baseUrl","indexerUrl","Tabs","TabList","Tab","selectedClassName","TabPanel","TagListConnector","supportsRawSearch","tvSearchParams","p","movieSearchParams","bookSearchParams","musicSearchParams","_category$subCategori","subCategory","IndexerHistory","IndexerInfoModalContent","isIndexerInfoModalOpen","setIsIndexerInfoModalOpen","onIndexerInfoPress","onIndexerInfoModalClose","IndexerInfoModal","mostRecentFailure","disabledTill","initialFailure","getIconTooltip","Popover","DisabledIndexerInfo","_fields$find$value7","_fields$find7","createIndexerIndexItemSelector","indexerName","rssUrl","onEditIndexerPress","onEditIndexerModalClose","onDeleteIndexerModalClose","checkInputCallback","IndexerStatusCell","IndexerTitleLink","externalLink","selectTableOptions","onTableOptionChangeWrapper","VirtualTableHeader","VirtualTableSelectAllHeaderCell","IndexerIndexTableOptions","bodyPadding","bodyPaddingSmallScreen","columnsSelector","Row","display","justifyContent","IndexerIndexRow","jumpToCharacter","scrollerRef","listRef","measureRef","bounds","useMeasureHook","polyfill","setSize","clientWidth","currentScrollerRef","currentScrollListener","_listRef$current","offsetTop","scrollTo","_listRef$current2","_scrollerRef$current","Horizontal","IndexerIndexTableHeader","List","overflow","itemCount","itemSize","itemData","IndexerIndex","withScrollPosition","createUnoptimizedSelector","isSyncingIndexers","isAddIndexerModalOpen","setIsAddIndexerModalOpen","setJumpToCharacter","setIsSelectMode","onAddIndexerModalClose","onAppIndexerSyncPress","forceSync","onTestAllPress","onSelectModePress","onJumpBarItemPress","jumpBarItems","Descending","ViewComponent","IndexerIndexTable","isLoaded","hasNoIndexer","IndexerIndexSelectModeButton","IndexerIndexSelectModeMenuItem","IndexerIndexSelectAllButton","IndexerIndexSelectAllMenuItem","IndexerIndexSortMenu","pageContentBodyWrapper","contentBodyContainer","NoIndexer","IndexerIndexSelectFooter","AddIndexerModal","getColors","getComputedStyle","getPropertyValue","BarChart","canvasRef","myChart","Chart","ticks","stepSize","indexAxis","horizontal","maintainAspectRatio","plugins","font","family","labels","datasets","backgroundColor","DoughnutChart","StackedBarChart","scales","stacked","abbreviateNumber","num","decimalPlaces","toPrecision","k","toFixed","IndexerStatsFilterModal","getAverageResponseTimeData","statistics","averageResponseTime","averageGrabResponseTime","getFailureRateData","numberOfFailedQueries","numberOfFailedRssQueries","numberOfFailedAuthQueries","numberOfFailedGrabs","numberOfQueries","numberOfRssQueries","numberOfAuthQueries","numberOfGrabs","getTotalRequestsData","getNumberGrabsData","getUserAgentGrabsData","getUserAgentQueryData","getHostGrabsData","getHostQueryData","_item$indexers$length","_item$indexers","_item$userAgents$leng","_item$userAgents","_item$indexers$reduce","_item$indexers2","_item$indexers$reduce2","_item$indexers3","indexerCount","userAgentCount","userAgents","queryCount","total","grabCount","hosts","SearchIndexFilterMenu","SearchIndexFilterModalConnector","SearchIndexItemConnector","ItemComponent","createEnabledDownloadClientsSelector","onDownloadClientSelect","onSeasonSelectWrapper","modalTitle","SelectDownloadClientRow","SelectDownloadClientModalContent","isOptional","_downloadClients$find","_downloadClients$find2","setDownloadClientId","selectModalOpen","setSelectModalOpen","previousIsGrabbing","onSelectModalClose","onSelectDownloadClientPress","onGrabPress","OverrideMatchData","SelectDownloadClientModal","OverrideMatchModalContent","sortedCategories","getPeersTooltipPart","peersUnit","getKind","ageHours","columnPadding","columnPaddingSmallScreen","getDownloadIcon","getDownloadKind","getDownloadTooltip","publishDate","magnetUrl","rowHeight","isOverrideModalOpen","setIsOverrideModalOpen","onGrabPressWrapper","onOverridePress","onOverrideModalClose","contentHeight","TextTruncate","line","Peers","formatAge","CategoryLabel","flag","OverrideMatchModal","SearchIndexOverviews","setGridRef","_grid","calculateGrid","cellRenderer","rowIndex","SearchIndexOverview","columnCount","scrollRestored","recomputeGridSize","scrollToPosition","scrollToCell","columnIndex","WindowScroller","scrollElement","registerChild","onChildScroll","Grid","autoHeight","columnWidth","rowCount","overscanRowCount","scrollToAlignment","isScrollingOptOut","groupBy","val","QueryParameterOption","tokenSeparator","isFullFilename","tokenValue","example","footNote","searchOptions","seriesTokens","movieTokens","audioTokens","bookTokens","QueryParameterModal","onInputSelectionChange","onOptionPress","onSearchInputChange","SearchFooterLabel","SearchFooter","_defaultSearchQueryPa","_defaultSearchQueryPa2","_defaultSearchQueryPa3","_defaultSearchQueryPa4","_defaultSearchQueryPa5","_defaultSearchQueryPa6","onQueryParameterModalOpenClick","queryModalOptions","isQueryParameterModalOpen","onQueryParameterModalClose","newSearch","defaultSearchQueryParams","defaultIndexerIds","defaultCategories","defaultSearchQuery","defaultSearchType","defaultSearchLimit","defaultSearchOffset","searchingReleases","searchError","hasIndexers","onBulkGrabPress","footerLabel","SearchFooterConnector","Boolean","overscanIndicesGetter","cellCount","overscanCellsCount","startIndex","stopIndex","overscanStartIndex","overscanStopIndex","VirtualTable","scrollIndex","focusScroller","header","rowRenderer","gridStyle","boxSizing","willChange","autoContainerWidth","autoWidth","isScrollingOptout","VirtualTableRow","SearchIndexHeader","imdbId","tmdbId","tvdbId","tvMazeId","categoryNames","padStart","grabs","manualDownloadContent","interactiveIcon","downloadIcon","downloadLink","externalLinks","ReleaseLinks","SearchIndexTable","SearchIndexRow","SearchIndexHeaderConnector","SearchIndex","onAddIndexerSelectIndexer","selectedIds","composedPath","onSelectAllPress","setJumpBarItems","setSelectedState","isItemSelected","newStateCount","isAllSelected","isAllUnselected","selectedIndexerIds","SearchIndexOverviewsConnector","SearchIndexTableConnector","getViewComponent","hasNoSearchResults","SearchIndexSortMenu","NoSearchResults","SearchIndexConnector","dispatchCancelFetchReleases","dispatchClearReleases","dimensionsState","Card","overlayClassName","sectionName","EditAppProfileModalContent","isInUse","onDeleteAppProfilePress","enableRss","enableInteractiveSearch","enableAutomaticSearch","EditAppProfileModalContentConnector","createProviderSettingsSelector","profileProp","profiles","EditAppProfileModal","EditAppProfileModalConnector","AppProfile","onEditAppProfilePress","isEditAppProfileModalOpen","onEditAppProfileModalClose","isDeleteAppProfileModalOpen","onDeleteAppProfileModalClose","onConfirmDeleteAppProfile","onCloneAppProfilePress","nameContainer","cloneButton","AppProfiles","isAppProfileModalOpen","PageSectionContent","dispatchDeleteAppProfile","dispatchCloneAppProfile","AppProfilesConnector","PendingChangesModal","SettingsToolbar","saveSettings","showSave","hasPendingLocation","additionalButtons","onConfirmNavigation","onCancelNavigation","SettingsToolbarConnector","routerWillLeave","nextLocation","nextLocationAction","confirmed","goBack","_unblock","block","AddApplicationPresetMenuItem","AddApplicationItem","onApplicationSelect","hasPresets","preset","AddApplicationModalContent","application","AddApplicationModalContentConnector","applicationSelected","syncLevelOptions","onDeleteApplicationPress","syncLevel","EditApplicationModalContentConnector","EditApplicationModalContent","EditApplicationModalConnector","dispatchCancelTestApplication","dispatchCancelSaveApplication","EditApplicationModal","Application","onEditApplicationPress","isEditApplicationModalOpen","onEditApplicationModalClose","isDeleteApplicationModalOpen","onDeleteApplicationModalClose","onConfirmDeleteApplication","applicationUrl","Applications","onAddApplicationPress","isAddApplicationModalOpen","onAddApplicationModalClose","AddApplicationModal","ApplicationsConnector","ApplicationSyncLevel","Disabled","AddOnly","FullSync","applicationIds","setSyncLevel","ManageApplicationsEditModalContent","TableSelectCell","onSelectedChangeWrapper","allApplications","applicationsTags","setSelectState","ManageApplicationsModalRow","ManageApplicationsEditModal","ManageApplicationsModalContent","isManageApplicationsOpen","setIsManageApplicationsOpen","onManageApplicationsPress","onManageApplicationsModalClose","ManageApplicationsModal","logLevelOptions","DevelopmentSettings","logRotate","consoleLogLevel","logSql","logIndexerResponse","filterSentryEvents","DevelopmentSettingsConnector","AddDownloadClientPresetMenuItem","AddDownloadClientItem","AddDownloadClientModalContent","AddDownloadClientModalContentConnector","downloadClientSelected","onDeleteSpecificationPress","clientCategory","AddCategoryModalContentConnector","AddCategoryModalContent","specification","AddCategoryModalConnector","AddCategoryModal","Category","onEditSpecificationPress","isEditSpecificationModalOpen","onEditSpecificationModalClose","isDeleteSpecificationModalOpen","onDeleteSpecificationModalClose","onConfirmDeleteSpecification","EditDownloadClientModalContent","onAddCategoryPress","isAddCategoryModalOpen","onAddCategoryModalClose","onDeleteDownloadClientPress","onConfirmDeleteCategory","supportsCategories","customFormats","addCategory","center","deleteButton","EditDownloadClientModalContentConnector","tagsFromId","EditDownloadClientModalConnector","dispatchCancelTestDownloadClient","dispatchCancelSaveDownloadClient","EditDownloadClientModal","DownloadClient","onEditDownloadClientPress","isEditDownloadClientModalOpen","onEditDownloadClientModalClose","isDeleteDownloadClientModalOpen","onDeleteDownloadClientModalClose","onConfirmDeleteDownloadClient","DownloadClients","onAddDownloadClientPress","isAddDownloadClientModalOpen","onAddDownloadClientModalClose","AddDownloadClientModal","DownloadClientsConnector","downloadClientIds","ManageDownloadClientsEditModalContent","ManageDownloadClientsModalRow","ManageDownloadClientsEditModal","ManageDownloadClientsModalContent","DownloadClientSettings","onChildMounted","saveCallback","_saveCallback","onChildStateChange","onManageDownloadClientsPress","isManageDownloadClientsOpen","onManageDownloadClientsModalClose","dispatchTestAllDownloadClients","ManageDownloadClientsModal","analyticsEnabled","backupFolder","backupInterval","backupRetention","bindAddress","enableSsl","sslPort","sslCertPath","sslCertPassword","launchBrowser","logSizeLimit","proxyEnabled","proxyType","proxyHostname","proxyPort","proxyUsername","proxyPassword","proxyBypassFilter","proxyBypassLocalAddresses","packageUpdateMechanism","updateAutomatically","updateMechanism","updateScriptPath","usingExternalUpdateMechanism","updateOptions","requiresRestartKeys","GeneralSettings","onConfirmRestart","isRestartRequiredModalOpen","onCloseRestartRequiredModalOpen","prevSettings","pendingRestart","prevSetting","HostSettings","ProxySettings","LoggingSettings","AnalyticSettings","UpdateSettings","BackupSettings","GeneralSettingsConnector","AddIndexerProxyPresetMenuItem","AddIndexerProxyItem","onIndexerProxySelect","AddIndexerProxyModalContent","indexerProxy","AddIndexerProxyModalContentConnector","indexerProxySelected","onDeleteIndexerProxyPress","EditIndexerProxyModalContentConnector","EditIndexerProxyModalContent","EditIndexerProxyModalConnector","dispatchCancelTestIndexerProxy","dispatchCancelSaveIndexerProxy","EditIndexerProxyModal","IndexerProxy","onEditIndexerProxyPress","isEditIndexerProxyModalOpen","onEditIndexerProxyModalClose","isDeleteIndexerProxyModalOpen","onDeleteIndexerProxyModalClose","onConfirmDeleteIndexerProxy","IndexerProxies","onAddIndexerProxyPress","isAddIndexerProxyModalOpen","onAddIndexerProxyModalClose","AddIndexerProxyModal","IndexerProxiesConnector","AddNotificationPresetMenuItem","AddNotificationItem","onNotificationSelect","AddNotificationModalContent","notification","AddNotificationModalContentConnector","notificationSelected","onHealthIssue","onHealthRestored","includeManualGrabs","supportsOnHealthIssue","supportsOnHealthRestored","includeHealthWarnings","onDeleteNotificationPress","NotificationEventItems","EditNotificationModalContentConnector","EditNotificationModalContent","EditNotificationModalConnector","dispatchCancelTestNotification","dispatchCancelSaveNotification","EditNotificationModal","Notification","onEditNotificationPress","isEditNotificationModalOpen","onEditNotificationModalClose","isDeleteNotificationModalOpen","onDeleteNotificationModalClose","onConfirmDeleteNotification","Notifications","onAddNotificationPress","isAddNotificationModalOpen","onAddNotificationModalClose","AddNotificationModal","NotificationsConnector","findMatchingItems","indexerProxyIds","notificationIds","isTagUsed","onDeleteTagPress","TagDetailsModalContentConnector","Tag","onShowDetailsPress","isDeleteTagModalOpen","onDeleteTagModalClose","onConfirmDeleteTag","TagDetailsModal","mapStateToProps","tagDetails","TagConnector","dispatchFetchNotifications","dispatchFetchIndexerProxies","dispatchFetchApplications","MetadatasConnector","Tags","TagsConnector","shortDateFormatOptions","longDateFormatOptions","timeFormatOptions","UISettings","themeOptions","inspiredBy","uiLanguage","UISettingsConnector","lang","getStepIconProps","isExecuting","hasExecuted","RestoreBackupModalContent","onPathChange","onRestorePress","isRestored","isRestarted","isReloading","dispatchRestart","isRestoreDisabled","RestoreBackupModalContentConnector","BackupRow","isRestoreModalOpen","onRestoreModalClose","isConfirmDeleteModalOpen","onConfirmDeleteModalClose","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","LogFiles","deleteFilesExecuting","currentLogView","onDeleteFilesPress","LogFilesConnector","appData","UpdateLogFilesConnector","Logs","Route","exact","paddingCharacter","timeSpan","duration","days","asDays","padNumber","get","startTime","setTime","formattedStartTime","uptime","formatTimeSpan","diff","interval","setInterval","clearInterval","packageVersion","packageAuthor","isNetCore","runtimeVersion","databaseVersion","databaseType","migrationVersion","startupPath","StartTime","isTestingAllApplications","isTestingAllDownloadClients","isTestingAllIndexers","healthIssues","handleTestAllApplicationsPress","handleTestAllDownloadClientsPress","handleTestAllIndexersPress","wikiUrl","HealthItemLink","Health","About","MoreInfo","Donations","QueuedTaskRowNameCell","commandName","clientUserAgent","getFormattedDates","queued","started","ended","queuedAt","fromNow","startedAt","endedAt","formatDate","QueuedTaskRow","updateTimeTimeoutId","times","setTimes","isCancelConfirmModalOpen","openCancelConfirmModal","closeCancelConfirmModal","setIsOpen","useModalOpenState","handleCancelPress","triggerIcon","getStatusIconProps","QueuedTasks","taskName","lastExecution","lastStartTime","lastDuration","nextExecution","isQueued","wasExecuting","executeNow","hasNextExecutionTime","hasLastStartTime","humanize","lastExecutionTime","nextExecutionTime","handleExecutePress","ScheduledTaskRow","ScheduledTasks","VERSION_REGEX","currentVersion","packageUpdateMechanismMessage","isInstallingUpdate","updatesError","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","releaseDate","installedOn","domain","RedirectWithUrlBase","Redirect","IndexerStats","Settings","IndexerSettings","ApplicationSettings","DownloadClientSettingsConnector","NotificationSettings","TagSettings","Status","Tasks","Updates","ConnectedRouter","ApplyTheme","AppRoutes","bootstrap","createBrowserHistory","createAppStore","App","webpackContext","req","webpackContextResolve","__webpack_require__","o","code"],"sourceRoot":""}