From ef1889b7f58c7b4ada36b5d77e1ee9486a92eb8f Mon Sep 17 00:00:00 2001 From: karishmas6 Date: Mon, 24 Jun 2024 22:36:03 +0530 Subject: [PATCH] feat: pair edit form --- src/components/molecules/PairEditForm.tsx | 161 ++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 src/components/molecules/PairEditForm.tsx diff --git a/src/components/molecules/PairEditForm.tsx b/src/components/molecules/PairEditForm.tsx new file mode 100644 index 00000000..815acfdd --- /dev/null +++ b/src/components/molecules/PairEditForm.tsx @@ -0,0 +1,161 @@ +import { Button, TextField, Typography } from "@mui/material"; +import React, { FC } from "react"; +import { Preprocessor, WhereWhatPair } from "@wbr-project/wbr-interpret"; + +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: + + + + + + + ); +};