Compare commits

...

5 Commits

Author SHA1 Message Date
victorAnumudu 6f3dae4116 populated externl URL 2025-10-04 10:23:29 +01:00
CHIEFSOFT\ameye 13900793af added external URL 2025-10-03 20:34:31 -04:00
CHIEFSOFT\ameye 698c89edfc fix URL page 2025-10-03 15:46:03 -04:00
CHIEFSOFT\ameye 4f5a383c99 Url configuration 2025-10-03 15:16:16 -04:00
ameye a5b6a11880 Merge branch 'set-url-endpoint' of MERMS/MermsPanelReactJS into master 2025-10-03 18:30:58 +00:00
@@ -1,19 +1,35 @@
import { Form, Formik } from "formik"; import {Form, Formik} from "formik";
import * as Yup from "yup"; import * as Yup from "yup";
import { useMutation } from '@tanstack/react-query'; import {useMutation} from '@tanstack/react-query';
import { setExternalURL } from '../../../services/services'; import {setExternalURL} from '../../../services/services';
import { useState } from "react";
const validationSchema = Yup.object().shape({ const validationSchema = Yup.object().shape({
url: Yup.string().required("URL is required").matches(/^https?:\/\/[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+\.[a-zA-Z]+/, 'Must be like: https://example.mysite.com'), url: Yup.string().required("URL is required").matches(/^https?:\/\/[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+\.[a-zA-Z]+/, 'Must be like: https://example.mysite.com'),
}) })
const initialValues = { // const initialValues = {
url: '', // url: '',
}; // };
const URLConfiguration = ({productData}) => { const URLConfiguration = ({productData}) => {
let defaultUrl= 'https://'+productData?.internal_url const [externalURLChanged, setExternalURLChanged] = useState(true)
const initialValues = {
url: productData?.external_url || '',
};
let defaultUrl = 'https://' + productData?.internal_url
let externalUrl = productData?.external_url
const handleExternalURLChanged = (e) => {
if(e.target.value == externalUrl){
setExternalURLChanged(true)
}else{
setExternalURLChanged(false)
}
}
// API to set url // API to set url
const setURL = useMutation({ const setURL = useMutation({
@@ -21,13 +37,13 @@ const URLConfiguration = ({productData}) => {
return setExternalURL(fields) return setExternalURL(fields)
}, },
onSuccess: (res) => { onSuccess: (res) => {
if(res.data.resultCode != '0'){ if (res.data.resultCode != '0') {
// throw({message: res?.data?.resultDescription}) // throw({message: res?.data?.resultDescription})
throw({message: 'Something went wrong!'}) throw({message: 'Something went wrong!'})
} }
}, },
onSettled: () => { onSettled: () => {
setTimeout(()=>{ setTimeout(() => {
setURL.reset() setURL.reset()
}, 3000) }, 3000)
} }
@@ -50,17 +66,16 @@ const URLConfiguration = ({productData}) => {
<div className="card card-statistics"> <div className="card card-statistics">
<div className="card-header"> <div className="card-header">
<div className="card-heading"> <div className="card-heading">
<h4 className="card-title">Default URL</h4> <h4 className="card-title" style={{textTransform: 'none'}}>{defaultUrl}</h4>
</div> </div>
</div> </div>
<div className="card-body"> {/*<div className="card-body">*/}
<div className="form-group"> {/* <div className="form-group">*/}
{/*<label htmlFor="exampleInputEmail1">Email address</label>*/} {/* /!*<label htmlFor="exampleInputEmail1">Email address</label>*!/*/}
<input type="email" className="form-control" {/* <input type="email" className="form-control"*/}
aria-describedby="defaultUrlHelp" value={defaultUrl} readOnly={true} /> {/* aria-describedby="defaultUrlHelp" value={defaultUrl} readOnly={true} />*/}
</div> {/* </div>*/}
{/*<button type="submit" className="btn btn-primary">Submit</button>*/} {/*</div>*/}
</div>
</div> </div>
<Formik <Formik
@@ -69,36 +84,54 @@ const URLConfiguration = ({productData}) => {
onSubmit={handleSubmit} onSubmit={handleSubmit}
> >
{(props) => { {(props) => {
return ( return (
<Form className='w-full'> <Form className='w-full'>
<div className="card card-statistics" style={{backgroundColor:'#7affd92b'}}> <div className="card card-statistics" style={{backgroundColor: '#b6e5ef'}}>
<div className="card-header"> <div className="card-header">
<div className="card-heading"> <div className="card-heading">
<h4 className="card-title" style={{textTransform: 'none'}}>Set your own URL</h4> <h4 className="card-title" style={{textTransform: 'none'}}>Set your own URL</h4>
</div>
</div>
<div className="card-body">
<div className="form-group">
<label htmlFor="exampleInputEmail1">Enter your full URL <span
className={`${(props.errors.url && props.touched.url) && 'text-danger'}`}>{props.errors.url}</span></label>
<input value={props.values.url} onChange={(e)=>{props.handleChange(e); handleExternalURLChanged(e)}} type="text"
className="form-control" id="url" aria-describedby="url"
placeholder="https://example.mysite.com"/>
</div>
<div style={{width: '100%', textAlign: 'right'}}>
<button
type="submit"
disabled={setURL.isPending || externalURLChanged}
className="btn btn-primary"
>
{setURL.isPending ? 'Loading...' : 'Submit'}
</button>
</div>
</div>
{setURL.error &&
<div className="col-12">
<p className='text-danger'>{setURL.error.message}</p>
</div>
}
{setURL.isSuccess &&
<div className="col-12">
<p className='text-success'>{'Completed successfully'}</p>
</div>
}
<div style={{backgroundColor: '#94b8c0', borderRadius: '10px', padding: '10px'}}>
Final steps to configure your URL:<br/>
DNS:<br/>
DNS:<br/>
DNS:<br/>
</div> </div>
</div> </div>
<div className="card-body"> </Form>
<div className="form-group"> );
<label htmlFor="exampleInputEmail1">Enter your full URL <span className={`${(props.errors.url && props.touched.url) && 'text-danger'}`}>{props.errors.url}</span></label>
<input value={props.values.url} onChange={props.handleChange} type="text" className="form-control" id="url" aria-describedby="url" placeholder="https://example.mysite.com"/>
</div>
<button type="submit" disabled={setURL.isPending} className="btn btn-primary">{setURL.isPending ? 'Loading...' : 'Submit'}</button>
</div>
{setURL.error &&
<div className="col-12">
<p className='text-danger'>{setURL.error.message}</p>
</div>
}
{setURL.isSuccess &&
<div className="col-12">
<p className='text-success'>{'Completed successfully'}</p>
</div>
}
</div>
</Form>
);
}} }}
</Formik> </Formik>