import React, { useCallback, useState } from 'react'; import { useSelector } from 'react-redux'; import { createSelector } from 'reselect'; import DescriptionList from 'Components/DescriptionList/DescriptionList'; import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem'; import DescriptionListItemDescription from 'Components/DescriptionList/DescriptionListItemDescription'; import DescriptionListItemTitle from 'Components/DescriptionList/DescriptionListItemTitle'; import FieldSet from 'Components/FieldSet'; import Label from 'Components/Label'; import Button from 'Components/Link/Button'; import Link from 'Components/Link/Link'; import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import TagListConnector from 'Components/TagListConnector'; import { kinds } from 'Helpers/Props'; import DeleteIndexerModal from 'Indexer/Delete/DeleteIndexerModal'; import EditIndexerModalConnector from 'Indexer/Edit/EditIndexerModalConnector'; import Indexer from 'Indexer/Indexer'; import createIndexerSelector from 'Store/Selectors/createIndexerSelector'; import translate from 'Utilities/String/translate'; import styles from './IndexerInfoModalContent.css'; function createIndexerInfoItemSelector(indexerId: number) { return createSelector( createIndexerSelector(indexerId), (indexer: Indexer) => { return { indexer, }; } ); } interface IndexerInfoModalContentProps { indexerId: number; onModalClose(): void; } function IndexerInfoModalContent(props: IndexerInfoModalContentProps) { const { indexer } = useSelector( createIndexerInfoItemSelector(props.indexerId) ); const { id, name, description, encoding, language, indexerUrls, fields, tags, protocol, capabilities, } = indexer; const { onModalClose } = props; const baseUrl = fields.find((field) => field.name === 'baseUrl')?.value ?? (Array.isArray(indexerUrls) ? indexerUrls[0] : undefined); const vipExpiration = fields.find((field) => field.name === 'vipExpiration')?.value ?? undefined; const [isEditIndexerModalOpen, setIsEditIndexerModalOpen] = useState(false); const [isDeleteIndexerModalOpen, setIsDeleteIndexerModalOpen] = useState(false); const onEditIndexerPress = useCallback(() => { setIsEditIndexerModalOpen(true); }, [setIsEditIndexerModalOpen]); const onEditIndexerModalClose = useCallback(() => { setIsEditIndexerModalOpen(false); }, [setIsEditIndexerModalOpen]); const onDeleteIndexerPress = useCallback(() => { setIsEditIndexerModalOpen(false); setIsDeleteIndexerModalOpen(true); }, [setIsDeleteIndexerModalOpen]); const onDeleteIndexerModalClose = useCallback(() => { setIsDeleteIndexerModalOpen(false); onModalClose(); }, [setIsDeleteIndexerModalOpen, onModalClose]); return ( {`${name}`}
{vipExpiration ? ( ) : null} {translate('IndexerSite')} {baseUrl.replace(/(:\/\/)api\./, '$1')} {`${ protocol === 'usenet' ? 'Newznab' : 'Torznab' } Url`} {`${window.location.origin}${window.Prowlarr.urlBase}/${id}/api`} {tags.length > 0 ? ( <> {translate('Tags')} ) : null}
{capabilities.searchParams[0]} ) } /> { return ( ); }) } /> { return ( ); }) } /> { return ( ); }) } /> { return ( ); }) } />
); } export default IndexerInfoModalContent;