import React, { useCallback, useState } from 'react'; import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import Button from 'Components/Link/Button'; 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 { inputTypes, sizes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import styles from './EditIndexerModalContent.css'; interface SavePayload { enable?: boolean; appProfileId?: number; priority?: number; minimumSeeders?: number; seedRatio?: number; seedTime?: number; packSeedTime?: number; } interface EditIndexerModalContentProps { indexerIds: number[]; onSavePress(payload: object): void; onModalClose(): void; } const NO_CHANGE = 'noChange'; const enableOptions = [ { key: NO_CHANGE, get value() { return translate('NoChange'); }, disabled: true, }, { key: 'true', get value() { return translate('Enabled'); }, }, { key: 'false', get value() { return translate('Disabled'); }, }, ]; function EditIndexerModalContent(props: EditIndexerModalContentProps) { const { indexerIds, onSavePress, onModalClose } = props; const [enable, setEnable] = useState(NO_CHANGE); const [appProfileId, setAppProfileId] = useState(NO_CHANGE); const [priority, setPriority] = useState(null); const [minimumSeeders, setMinimumSeeders] = useState( null ); const [seedRatio, setSeedRatio] = useState(null); const [seedTime, setSeedTime] = useState(null); const [packSeedTime, setPackSeedTime] = useState( null ); const save = useCallback(() => { let hasChanges = false; const payload: SavePayload = {}; if (enable !== NO_CHANGE) { hasChanges = true; payload.enable = enable === 'true'; } if (appProfileId !== NO_CHANGE) { hasChanges = true; payload.appProfileId = appProfileId as number; } if (priority !== null) { hasChanges = true; payload.priority = priority as number; } if (minimumSeeders !== null) { hasChanges = true; payload.minimumSeeders = minimumSeeders as number; } if (seedRatio !== null) { hasChanges = true; payload.seedRatio = seedRatio as number; } if (seedTime !== null) { hasChanges = true; payload.seedTime = seedTime as number; } if (packSeedTime !== null) { hasChanges = true; payload.packSeedTime = packSeedTime as number; } if (hasChanges) { onSavePress(payload); } onModalClose(); }, [ enable, appProfileId, priority, minimumSeeders, seedRatio, seedTime, packSeedTime, onSavePress, onModalClose, ]); const onInputChange = useCallback( ({ name, value }: { name: string; value: string }) => { switch (name) { case 'enable': setEnable(value); break; case 'appProfileId': setAppProfileId(value); break; case 'priority': setPriority(value); break; case 'minimumSeeders': setMinimumSeeders(value); break; case 'seedRatio': setSeedRatio(value); break; case 'seedTime': setSeedTime(value); break; case 'packSeedTime': setPackSeedTime(value); break; default: console.warn(`EditIndexersModalContent Unknown Input: '${name}'`); } }, [setEnable] ); const onSavePressWrapper = useCallback(() => { save(); }, [save]); const selectedCount = indexerIds.length; return ( {translate('EditSelectedIndexers')} {translate('Enable')} {translate('SyncProfile')} {translate('IndexerPriority')} {translate('AppsMinimumSeeders')} {translate('SeedRatio')} {translate('SeedTime')} {translate('PackSeedTime')}
{translate('CountIndexersSelected', { count: selectedCount })}
); } export default EditIndexerModalContent;