import { Button, TextField, Typography } from "@mui/material"; import React, { FC } from "react"; import { Preprocessor, WhereWhatPair } from "maxun-core"; interface PairProps { index: string; id?: string; where: string | null; what: string | null; } interface PairEditFormProps { onSubmitOfPair: (value: WhereWhatPair, index: number) => void; numberOfPairs: number; index?: string; where?: string; what?: string; id?: string; } export const PairEditForm: FC = ( { onSubmitOfPair, numberOfPairs, index, where, what, id, }) => { const [pairProps, setPairProps] = React.useState({ where: where || null, what: what || null, index: index || "1", id: id || '', }); const [errors, setErrors] = React.useState({ where: null, what: null, index: '', }); const handleInputChange = (event: React.ChangeEvent) => { const { id, value } = event.target; if (id === 'index') { if (parseInt(value, 10) < 1) { setErrors({ ...errors, index: 'Index must be greater than 0' }); return; } else { setErrors({ ...errors, index: '' }); } } setPairProps({ ...pairProps, [id]: value }); }; const validateAndSubmit = (event: React.SyntheticEvent) => { event.preventDefault(); let whereFromPair, whatFromPair; // validate where whereFromPair = { where: pairProps.where && pairProps.where !== '{"url":"","selectors":[""] }' ? JSON.parse(pairProps.where) : {}, what: [], }; const validationError = Preprocessor.validateWorkflow({workflow: [whereFromPair]}); setErrors({ ...errors, where: null }); if (validationError) { setErrors({ ...errors, where: validationError.message }); return; } // validate what whatFromPair = { where: {}, what: pairProps.what && pairProps.what !== '[{"action":"","args":[""] }]' ? JSON.parse(pairProps.what): [], }; const validationErrorWhat = Preprocessor.validateWorkflow({workflow: [whatFromPair]}); setErrors({ ...errors, "what": null }); if (validationErrorWhat) { setErrors({ ...errors, what: validationErrorWhat.message }); return; } //validate index const index = parseInt(pairProps?.index, 10); if (index > (numberOfPairs + 1)) { if (numberOfPairs === 0) { setErrors(prevState => ({ ...prevState, index: 'Index of the first pair must be 1' })); return; } else { setErrors(prevState => ({ ...prevState, index: `Index must be in the range 1-${numberOfPairs + 1}` })); return; } } else { setErrors({ ...errors, index: '' }); } // submit the pair onSubmitOfPair(pairProps.id ? { id: pairProps.id, where: whereFromPair?.where || {}, what: whatFromPair?.what || [], } : { where: whereFromPair?.where || {}, what: whatFromPair?.what || [], } , index); }; return (
Raw pair edit form: ); };