Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 30540e46ba | |||
| b195b1f787 | |||
| 2ddd04a1a1 | |||
| 6ea26740a4 | |||
| f334ca49f0 | |||
| fa9d7f69e4 | |||
| a4db58ba97 | |||
| ddc747d9ca | |||
| ac337eb693 | |||
| f2c3415b1d | |||
| 37450925e1 | |||
| 3b20fcec68 | |||
| d87a083c3e | |||
| 3f8a7a6b3b | |||
| 91d82db40c | |||
| 2dc12d7d0a | |||
| 164195d4cc |
@@ -16,3 +16,6 @@ REACT_APP_TERMS_LINK='https://qa-www.mermsemr.com/terms'
|
||||
# Inactivity timeout/logout AT 10MINS
|
||||
REACT_APP_TIMEOUT=600000
|
||||
|
||||
# show download button
|
||||
REACT_APP_SHOW_DOWNLOAD=0
|
||||
|
||||
|
||||
@@ -17,3 +17,6 @@ REACT_APP_TERMS_LINK='https://qa-www.mermsemr.com/terms'
|
||||
# Inactivity timeout/logout AT 10MINS
|
||||
REACT_APP_TIMEOUT=600000
|
||||
|
||||
# show download button
|
||||
REACT_APP_SHOW_DOWNLOAD=0
|
||||
|
||||
|
||||
+4
-1
@@ -14,4 +14,7 @@ REACT_APP_CONTACTS_LINK='https://www.mermsemr.com/contacts'
|
||||
REACT_APP_TERMS_LINK='https://www.mermsemr.com/terms'
|
||||
|
||||
# Inactivity timeout/logout AT 10MINS
|
||||
REACT_APP_TIMEOUT=600000
|
||||
REACT_APP_TIMEOUT=600000
|
||||
|
||||
# show download button
|
||||
REACT_APP_SHOW_DOWNLOAD=0
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 78 KiB |
@@ -0,0 +1,42 @@
|
||||
import React from 'react'
|
||||
import GoogleDownload from '../../assets/img/download/andriod.jpg'
|
||||
import IOSDownload from '../../assets/img/download/apple.jpg'
|
||||
|
||||
export default function AuthFooter() {
|
||||
return (
|
||||
<div className='w-100'>
|
||||
{Number(process.env.REACT_APP_SHOW_DOWNLOAD) == 100 &&
|
||||
<>
|
||||
<div className="row" style={{margin: '5px'}}>
|
||||
<hr />
|
||||
</div>
|
||||
<div className="row" style={{marginTop: '20px'}}>
|
||||
<div className="col-6">
|
||||
<div className="app-store-icons-wrap text-center">
|
||||
<a className="icon google"
|
||||
href='#' >
|
||||
<img src={IOSDownload} className='w-80 h-auto' alt='IOS Download' />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="col-6">
|
||||
<div className="app-store-icons-wrap text-center">
|
||||
<a className="icon apple" href='#'>
|
||||
<img src={GoogleDownload} className='w-80 h-auto' alt='IOS Download' />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
|
||||
<div className="login-links">
|
||||
<a href={process.env.REACT_APP_HOME_LINK}>Home</a>
|
||||
<a href={process.env.REACT_APP_ABOUT_LINK}>About</a>
|
||||
<a href={process.env.REACT_APP_CONTACTS_LINK}>Contact</a>
|
||||
<a href={process.env.REACT_APP_TERMS_LINK}>Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -9,8 +9,7 @@ import siteLinks from '../../links/siteLinks'
|
||||
import { loginUser } from '../../services/services'
|
||||
import { updateUserDetails } from '../../store/UserDetails'
|
||||
|
||||
import GoogleDownload from '../../assets/img/download/andriod.jpg'
|
||||
import IOSDownload from '../../assets/img/download/apple.jpg'
|
||||
import AuthFooter from './AuthFooter'
|
||||
|
||||
export default function Login() {
|
||||
|
||||
@@ -133,35 +132,7 @@ export default function Login() {
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div className="row" style={{margin: '5px'}}>
|
||||
<hr />
|
||||
</div>
|
||||
<div className="row" style={{marginTop: '20px'}}>
|
||||
<div className="col-6">
|
||||
<div className="app-store-icons-wrap text-center">
|
||||
<a className="icon google"
|
||||
href='#' >
|
||||
<img src={IOSDownload} className='w-80 h-auto' alt='IOS Download' />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="col-6">
|
||||
<div className="app-store-icons-wrap text-center">
|
||||
<a className="icon apple" href='#'>
|
||||
<img src={GoogleDownload} className='w-80 h-auto' alt='IOS Download' />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="login-links">
|
||||
<a href={process.env.REACT_APP_HOME_LINK}>Home</a>
|
||||
<a href={process.env.REACT_APP_ABOUT_LINK}>About</a>
|
||||
<a href={process.env.REACT_APP_CONTACTS_LINK}>Contact</a>
|
||||
<a href={process.env.REACT_APP_TERMS_LINK}>Terms</a>
|
||||
</div>
|
||||
|
||||
<AuthFooter />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -9,6 +9,7 @@ import siteLinks from '../../links/siteLinks'
|
||||
import {useMutation} from '@tanstack/react-query';
|
||||
import {signUpUser} from '../../services/services';
|
||||
import getImage from '../../utils/getImage';
|
||||
import AuthFooter from './AuthFooter';
|
||||
|
||||
const validationSchema = Yup.object().shape({
|
||||
email: Yup.string()
|
||||
@@ -64,9 +65,9 @@ export default function Signup2() {
|
||||
<div className="col-11 col-sm-6 col-lg-5 col-xxl-4 align-self-center order-2 order-sm-1"
|
||||
style={{maxWidth: '520px'}}>
|
||||
<div className="mt-5 d-flex">
|
||||
<div className="bg-white register p-5">
|
||||
<div className="bg-white register px-5 pt-5 pb-3">
|
||||
<h1 className="mb-2">{process.env.REACT_APP_PANEL_NAME}</h1>
|
||||
<p>Welcome, Please create your account.</p>
|
||||
<p>Welcome, please create your account.</p>
|
||||
<Formik
|
||||
initialValues={initialValues}
|
||||
validationSchema={validationSchema}
|
||||
@@ -173,19 +174,23 @@ export default function Signup2() {
|
||||
}
|
||||
|
||||
<div className="col-12 mt-3">
|
||||
<p>Already have an account ?<Link
|
||||
to={siteLinks.login}>
|
||||
<button
|
||||
className="btn btn-warning text-uppercase">
|
||||
Sign In
|
||||
</button>
|
||||
</Link></p>
|
||||
<p>
|
||||
<span style={{paddingLeft: '5px' , fontWeight: 'bolder'}}>Already have an account? </span>
|
||||
<Link
|
||||
to={siteLinks.login}>
|
||||
<button
|
||||
className="btn btn-warning text-uppercase">
|
||||
Sign In
|
||||
</button>
|
||||
</Link>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</Form>
|
||||
);
|
||||
}}
|
||||
</Formik>
|
||||
<AuthFooter />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -50,7 +50,7 @@ export default function Products() {
|
||||
</div>
|
||||
<div className="report-details">
|
||||
<p><span style={{fontWeight: 'bolder', color: '#00557A'}}>{product?.status_text}</span></p>
|
||||
<h4><span style={{paddingLeft: '10px'}}>{product?.name}</span></h4>
|
||||
<h4><span className='text-truncate' style={{paddingLeft: '10px'}}>{product?.name}</span></h4>
|
||||
</div>
|
||||
</div>
|
||||
</Link>
|
||||
|
||||
@@ -31,7 +31,7 @@ export default function ProductsURL() {
|
||||
{/*<a className="btn btn-xs" href="#!">Export <i className="zmdi zmdi-download pl-1"></i> </a>*/}
|
||||
</div>
|
||||
</div>
|
||||
<div className="card-body scrollbar scroll_dark pt-0" style={{maxHeight: '350px'}}>
|
||||
<div className="overflow-y-auto card-body scrollbar scroll_dark pt-0" style={{maxHeight: '350px'}}>
|
||||
<div className="datatable-wrapper table-responsive">
|
||||
{isFetching ?
|
||||
<>
|
||||
|
||||
@@ -77,7 +77,7 @@ export default function RecentActions() {
|
||||
<h4>{dataAction?.data?.completed}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div className="table-responsive m-t-20">
|
||||
<div className="overflow-y-auto table-responsive m-t-20">
|
||||
<table id="datatable-buttons" className="table">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -94,7 +94,7 @@ export default function RecentActions() {
|
||||
let text = action?.status == '5' ? 'completed' : action?.status == '3' ? 'verifying' : action?.status == '0' ? 'processing' : 'processing'
|
||||
return (
|
||||
<tr key={index}>
|
||||
<td>{action?.id}</td>
|
||||
<td>{(action?.id).toString().slice(-4)}</td>
|
||||
<td>{action?.action_label}</td>
|
||||
<td>{new Date(action?.added).toDateString()}</td>
|
||||
<td>
|
||||
|
||||
@@ -78,6 +78,7 @@ export default function UserHeader(){
|
||||
<span className="bg-success user-status"></span>
|
||||
</a>
|
||||
<div ref={nav_menu} onClick={toggleMenu} className="dropdown-menu animated fadeIn">
|
||||
<div className="position-fixed" style={{top: '0px', left: '0px', right: '0px', bottom: '0px'}}></div>
|
||||
<div className="bg-gradient px-4 py-3">
|
||||
<div className="d-flex align-items-center justify-content-between">
|
||||
<div className="mr-1">
|
||||
|
||||
@@ -66,7 +66,7 @@ export default function ProductActive({productData}){
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div className="card-body">
|
||||
<div className="card-body" style={{minHeight: '680px'}}>
|
||||
<iframe ref={iframe} style={{borderWidth: '0px'}} src={externalUrl} width="100%" height="600" title={externalUrl}></iframe>
|
||||
</div>
|
||||
<div className="p-4 ml-auto">
|
||||
@@ -87,7 +87,7 @@ export default function ProductActive({productData}){
|
||||
<h4 className="card-title"> Site Settings </h4>
|
||||
</div>
|
||||
</div>
|
||||
<div className="card-body">
|
||||
<div className="card-body" style={{minHeight: '680px'}}>
|
||||
<Settings productData={productData} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -28,7 +28,7 @@ export default function ProductProvision(props) {
|
||||
const provisionData = provision?.data
|
||||
|
||||
useEffect(() => {
|
||||
const provision_room = "PROVISION_"+productSubUID;
|
||||
const provision_room = "PROVISION_" + productSubUID;
|
||||
console.log("JOINING ROOM ON START *** ", provision_room);
|
||||
joinRoom(provision_room); // provision subscription room
|
||||
}, [])
|
||||
|
||||
@@ -1,6 +1,179 @@
|
||||
const ColorStyleConfigure =()=>{
|
||||
import React, {memo} from 'react'
|
||||
import getImage from "../../../utils/getImage";
|
||||
import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query';
|
||||
import queryKeys from '../../../services/queryKeys';
|
||||
import {
|
||||
getProductcolorStyleCss,
|
||||
activateTemplate,
|
||||
getProductColorStyles,
|
||||
activateColorStyle
|
||||
} from '../../../services/services';
|
||||
import {Link} from "react-router-dom";
|
||||
import siteLinks from "../../../links/siteLinks";
|
||||
|
||||
return <>COLOR CONFIG</>
|
||||
}
|
||||
const ColorStyleConfigure = memo(({name = 'Full Name', data, productData}) => {
|
||||
|
||||
export default ColorStyleConfigure
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
const {data: colorStyleCss, isFetching, isError, error} = useQuery({
|
||||
queryKey: queryKeys.productcolorStyleCss,
|
||||
queryFn: () => {
|
||||
let reqData = {
|
||||
token: localStorage.getItem('token'), // USER TOKEN
|
||||
uid: localStorage.getItem('uid'), // USER UID
|
||||
product_id: productData?.product_id
|
||||
}
|
||||
return getProductColorStyles(reqData)
|
||||
},
|
||||
staleTime: 0
|
||||
})
|
||||
|
||||
const templateResponse = colorStyleCss?.data
|
||||
const currentColorUID = templateResponse?.current_colorstyle_uid
|
||||
const color_styles = templateResponse?.color_styles
|
||||
const custom_template_name = templateResponse?.custom_template_name
|
||||
|
||||
// console.log('data Template', templateResponse)
|
||||
console.log("Page data == ", data)
|
||||
|
||||
const handleActivateTemplate = useMutation({
|
||||
mutationFn: (fields) => {
|
||||
return activateColorStyle(fields)
|
||||
},
|
||||
onSuccess: (res) => {
|
||||
if (res?.data?.resultCode != '0') {
|
||||
throw new Error(res.data.resultDescription)
|
||||
}
|
||||
queryClient.refetchQueries({ // refetches productProvision API call
|
||||
queryKey: [...queryKeys.settingsData],
|
||||
})
|
||||
},
|
||||
onSettled: () => {
|
||||
setTimeout(() => {
|
||||
handleActivateTemplate.reset()
|
||||
}, 3000)
|
||||
}
|
||||
})
|
||||
|
||||
const handleSubmit = (style_uid) => {
|
||||
const reqData = {
|
||||
token: localStorage.getItem('token'), // USER TOKEN
|
||||
uid: localStorage.getItem('uid'), // USER UID
|
||||
product_id: productData?.product_id,
|
||||
color_style_uid: style_uid
|
||||
}
|
||||
// console.log(reqData)
|
||||
handleActivateTemplate.mutate(reqData)
|
||||
}
|
||||
if (custom_template_name && custom_template_name != '') {
|
||||
// This implies we have a custom template , just return here
|
||||
return <>
|
||||
<div className='col-12'>
|
||||
<div
|
||||
className="rounded-2 d-flex flex-column justify-content-between align-items-center"
|
||||
style={{backgroundColor: '#F2FAF7'}}>
|
||||
<h4 className='p-4 text-black'
|
||||
style={{marginBottom: '20px'}}>Custom Product Template.</h4>
|
||||
<img className='' style={{width: '200px'}}
|
||||
src={getImage('custom-template.png')}
|
||||
alt='mail-alert'/>
|
||||
<h4 className='p-4 text-black'
|
||||
style={{marginTop: '20px'}}>This product is using a custom template named <span
|
||||
style={{color: 'darkred'}}>“{custom_template_name}”</span> .</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</>
|
||||
}
|
||||
return (
|
||||
<div className="page-account-form">
|
||||
<div className="p-0">
|
||||
{isFetching ?
|
||||
<>
|
||||
<div className="row">
|
||||
<div className="col-12">
|
||||
<p className='text-mute'>Loading...</p>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
: isError ?
|
||||
<div className="row">
|
||||
<div className="col-12">
|
||||
<p className='text-danger'>{error?.message}</p>
|
||||
</div>
|
||||
</div>
|
||||
:
|
||||
<div className="row">
|
||||
<>
|
||||
{!color_styles?.length ?
|
||||
<p>No data Found</p>
|
||||
:
|
||||
color_styles.map(color_style => (
|
||||
<div key={color_style.color_style_uid} className="col-xl-6 col-sm-6">
|
||||
<div className="card card-statistics">
|
||||
<div className="card-body" style={{
|
||||
backgroundColor: `#${color_style.color_code}`,
|
||||
opacity: '0.85',
|
||||
borderRadius: '10px'
|
||||
}}>
|
||||
<div className="text-center p-2">
|
||||
{/*<div className="mb-2">*/}
|
||||
{/* <img src={getImage('file-icon/svg.png')}*/}
|
||||
{/* alt={template.title}/>*/}
|
||||
{/*</div>*/}
|
||||
<h4 className="mb-0">{color_style.title}</h4>
|
||||
{currentColorUID === color_style.color_style_uid ?
|
||||
<button className="btn btn-light"
|
||||
disabled={true}>Active</button>
|
||||
:
|
||||
<button
|
||||
onClick={() => handleSubmit(color_style.color_style_uid)}
|
||||
className="btn btn-primary">Select</button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))
|
||||
}
|
||||
{/* {Object.entries(data)?.map(([key, value]) => (
|
||||
<div key={key} className="col-xl-6 col-sm-6">
|
||||
<div className="card card-statistics">
|
||||
<div className="card-body">
|
||||
<div className="text-center p-2">
|
||||
<div className="mb-2">
|
||||
<img src={getImage(value.banner)} alt={value.title} />
|
||||
</div>
|
||||
<h4 className="mb-0">{value.title}</h4>
|
||||
<a href="javascript:void(0)" className="btn btn-light">Activate</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))} */}
|
||||
</>
|
||||
|
||||
<div className="col-12">
|
||||
<>
|
||||
{handleActivateTemplate.isPending ?
|
||||
<p className={'text-center '}>loading...</p>
|
||||
:
|
||||
handleActivateTemplate.isError ?
|
||||
<p className={'text-center text-danger'}>{handleActivateTemplate.error.message}</p>
|
||||
:
|
||||
handleActivateTemplate.isSuccess ?
|
||||
<p className={'text-center text-success'}>Templated activated
|
||||
successfully</p>
|
||||
:
|
||||
null
|
||||
}
|
||||
</>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
)
|
||||
export default ColorStyleConfigure
|
||||
@@ -112,9 +112,15 @@ const GeneralTab = memo(({
|
||||
<>
|
||||
{isCustom === true ?
|
||||
<>
|
||||
{(tabKey === 'template_tab') && <SiteTemplateSelector name={name} data={sortedData} isCustom={isCustom} productData={productData}/>}
|
||||
{(tabKey === 'url_config_tab') && <URLConfiguration name={name} data={sortedData} isCustom={isCustom} productData={productData}/>}
|
||||
{(tabKey === 'color_scheme_tab') && <ColorStyleConfigure name={name} data={sortedData} isCustom={isCustom} productData={productData}/>}
|
||||
{(tabKey === 'template_tab') &&
|
||||
<SiteTemplateSelector name={name} data={sortedData} isCustom={isCustom}
|
||||
productData={productData}/>}
|
||||
{(tabKey === 'url_config_tab') &&
|
||||
<URLConfiguration name={name} data={sortedData} isCustom={isCustom}
|
||||
productData={productData}/>}
|
||||
{(tabKey === 'color_scheme_tab') &&
|
||||
<ColorStyleConfigure name={name} data={sortedData} isCustom={isCustom}
|
||||
productData={productData}/>}
|
||||
</>
|
||||
:
|
||||
<div className="page-account-form">
|
||||
|
||||
@@ -214,6 +214,12 @@ export const getProductTemplateData = (reqData) => {
|
||||
return postAuxEnd(`/panel/account/products/templates`, postData, false)
|
||||
}
|
||||
|
||||
export const getProductColorStyles = (reqData) => {
|
||||
let postData = {
|
||||
...reqData,
|
||||
}
|
||||
return postAuxEnd(`/panel/account/products/color-styles`, postData, false)
|
||||
}
|
||||
// FUNCTION TO ACTIVATE TEMPLATE
|
||||
export const activateTemplate = (reqData) => {
|
||||
let postData = {
|
||||
@@ -222,6 +228,14 @@ export const activateTemplate = (reqData) => {
|
||||
return postAuxEnd(`/panel/account/template/activate`, postData, false)
|
||||
}
|
||||
|
||||
export const activateColorStyle = (reqData) => {
|
||||
let postData = {
|
||||
...reqData,
|
||||
}
|
||||
return postAuxEnd(`/panel/account/colorstyle/activate`, postData, false)
|
||||
}
|
||||
|
||||
|
||||
// FUNCTION TO GET PRODUCT SUBSCRIPTIONS
|
||||
export const completeProfile = (reqData) => {
|
||||
let postData = {
|
||||
|
||||
Reference in New Issue
Block a user