Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b7aaff7adc | |||
| d606b5682c | |||
| 25d4751935 | |||
| a8d78c4c3f | |||
| 9c672d4bf2 | |||
| c744eccd15 | |||
| 302a3aa3bb | |||
| 23a295866a |
@@ -2,14 +2,14 @@ SKIP_PREFLIGHT_CHECK=true
|
|||||||
REACT_APP_NODE_ENV="development"
|
REACT_APP_NODE_ENV="development"
|
||||||
REACT_APP_SOCKET_URL="https://devsocket.mermsemr.com"
|
REACT_APP_SOCKET_URL="https://devsocket.mermsemr.com"
|
||||||
REACT_APP_MAIN_API="https://devapi.mermsemr.com"
|
REACT_APP_MAIN_API="https://devapi.mermsemr.com"
|
||||||
REACT_APP_MEDIA_SERVER="https://dev-media.mermsemr.com"
|
REACT_APP_MEDIA_SERVER="https://qa-media.mermsemr.com"
|
||||||
REACT_APP_MAIN_SOCKET="https://dev-socket.mermsemr.com"
|
REACT_APP_MAIN_SOCKET="https://devsocket.mermsemr.com"
|
||||||
|
|
||||||
# login footer links
|
# login footer links
|
||||||
REACT_APP_HOME_LINK='https://dev-www.mermsemr.com/'
|
REACT_APP_HOME_LINK='https://qa-www.mermsemr.com/'
|
||||||
REACT_APP_ABOUT_LINK='https://dev-www.mermsemr.com/about'
|
REACT_APP_ABOUT_LINK='https://qa-www.mermsemr.com/about'
|
||||||
REACT_APP_CONTACTS_LINK='https://dev-www.mermsemr.com/contacts'
|
REACT_APP_CONTACTS_LINK='https://qa-www.mermsemr.com/contacts'
|
||||||
REACT_APP_TERMS_LINK='https://dev-www.mermsemr.com/terms'
|
REACT_APP_TERMS_LINK='https://qa-www.mermsemr.com/terms'
|
||||||
|
|
||||||
# Inactivity timeout/logout AT 10MINS
|
# Inactivity timeout/logout AT 10MINS
|
||||||
REACT_APP_TIMEOUT=600000
|
REACT_APP_TIMEOUT=600000
|
||||||
|
|||||||
+7
-6
@@ -2,14 +2,15 @@ SKIP_PREFLIGHT_CHECK=true
|
|||||||
REACT_APP_NODE_ENV="development"
|
REACT_APP_NODE_ENV="development"
|
||||||
REACT_APP_SOCKET_URL="https://devsocket.mermsemr.com"
|
REACT_APP_SOCKET_URL="https://devsocket.mermsemr.com"
|
||||||
REACT_APP_MAIN_API="https://devapi.mermsemr.com"
|
REACT_APP_MAIN_API="https://devapi.mermsemr.com"
|
||||||
REACT_APP_MEDIA_SERVER="https://dev-media.mermsemr.com"
|
REACT_APP_MEDIA_SERVER="https://qa-media.mermsemr.com"
|
||||||
REACT_APP_MAIN_SOCKET="https://dev-socket.mermsemr.com"
|
REACT_APP_MAIN_SOCKET="https://devsocket.mermsemr.com"
|
||||||
|
|
||||||
# login footer links
|
# login footer links
|
||||||
REACT_APP_HOME_LINK='https://dev-www.mermsemr.com/'
|
REACT_APP_HOME_LINK='https://qa-www.mermsemr.com/'
|
||||||
REACT_APP_ABOUT_LINK='https://dev-www.mermsemr.com/about'
|
REACT_APP_ABOUT_LINK='https://qa-www.mermsemr.com/about'
|
||||||
REACT_APP_CONTACTS_LINK='https://dev-www.mermsemr.com/contacts'
|
REACT_APP_CONTACTS_LINK='https://qa-www.mermsemr.com/contacts'
|
||||||
REACT_APP_TERMS_LINK='https://dev-www.mermsemr.com/terms'
|
REACT_APP_TERMS_LINK='https://qa-www.mermsemr.com/terms'
|
||||||
|
|
||||||
# Inactivity timeout/logout AT 10MINS
|
# Inactivity timeout/logout AT 10MINS
|
||||||
REACT_APP_TIMEOUT=600000
|
REACT_APP_TIMEOUT=600000
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ REACT_APP_NODE_ENV="production"
|
|||||||
REACT_APP_SOCKET_URL="https://socket.mermsemr.com"
|
REACT_APP_SOCKET_URL="https://socket.mermsemr.com"
|
||||||
REACT_APP_MAIN_API="https://devapi.mermsemr.com"
|
REACT_APP_MAIN_API="https://devapi.mermsemr.com"
|
||||||
REACT_APP_MEDIA_SERVER="https://media.mermsemr.com"
|
REACT_APP_MEDIA_SERVER="https://media.mermsemr.com"
|
||||||
|
REACT_APP_MAIN_SOCKET="https://socket.mermsemr.com"
|
||||||
|
|
||||||
# login footer links
|
# login footer links
|
||||||
REACT_APP_HOME_LINK='https://www.mermsemr.com/'
|
REACT_APP_HOME_LINK='https://www.mermsemr.com/'
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
SKIP_PREFLIGHT_CHECK=true
|
||||||
|
REACT_APP_NODE_ENV="development"
|
||||||
|
REACT_APP_SOCKET_URL="https://devsocket.mermsemr.com"
|
||||||
|
REACT_APP_MAIN_API="https://devapi.mermsemr.com"
|
||||||
|
REACT_APP_MEDIA_SERVER="https://qa-media.mermsemr.com"
|
||||||
|
REACT_APP_MAIN_SOCKET="https://devsocket.mermsemr.com"
|
||||||
|
|
||||||
|
# login footer links
|
||||||
|
REACT_APP_HOME_LINK='https://qa-www.mermsemr.com/'
|
||||||
|
REACT_APP_ABOUT_LINK='https://qa-www.mermsemr.com/about'
|
||||||
|
REACT_APP_CONTACTS_LINK='https://qa-www.mermsemr.com/contacts'
|
||||||
|
REACT_APP_TERMS_LINK='https://qa-www.mermsemr.com/terms'
|
||||||
|
|
||||||
|
# Inactivity timeout/logout AT 10MINS
|
||||||
|
REACT_APP_TIMEOUT=600000
|
||||||
+1
-1
@@ -20,7 +20,7 @@ services:
|
|||||||
extra_hosts:
|
extra_hosts:
|
||||||
- api.mermsemr.com:10.10.33.15
|
- api.mermsemr.com:10.10.33.15
|
||||||
- devapi.mermsemr.com:10.10.33.15
|
- devapi.mermsemr.com:10.10.33.15
|
||||||
- dev-socket.mermsemr.com:10.10.33.15
|
- devsocket.mermsemr.com:10.10.33.15
|
||||||
- socket.mermsemr.com:10.10.33.15
|
- socket.mermsemr.com:10.10.33.15
|
||||||
- dev-media.mermsemr.com:10.10.33.15
|
- dev-media.mermsemr.com:10.10.33.15
|
||||||
- media.mermsemr.com:10.10.33.15
|
- media.mermsemr.com:10.10.33.15
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export default function Products() {
|
|||||||
uid: localStorage.getItem('uid') // USER UID
|
uid: localStorage.getItem('uid') // USER UID
|
||||||
}
|
}
|
||||||
const {data, isFetching, isError, error} = useQuery({
|
const {data, isFetching, isError, error} = useQuery({
|
||||||
queryKey: queryKeys.product,
|
queryKey: queryKeys.products,
|
||||||
queryFn: () => productsData(reqData)
|
queryFn: () => productsData(reqData)
|
||||||
})
|
})
|
||||||
const products = data?.data?.products_data // PRODUCTS DATA
|
const products = data?.data?.products_data // PRODUCTS DATA
|
||||||
|
|||||||
@@ -64,10 +64,13 @@ export default function ProductsURL() {
|
|||||||
return (
|
return (
|
||||||
<tr key={index}>
|
<tr key={index}>
|
||||||
<td>{Number(item?.id)}</td>
|
<td>{Number(item?.id)}</td>
|
||||||
<td>{item?.description} - <a href={productUrl} target='_blank'>{item?.external_url}</a></td>
|
<td>
|
||||||
|
{item?.description} -
|
||||||
|
{/* <a href={productUrl} target='_blank'>{item?.external_url}</a> */}
|
||||||
|
</td>
|
||||||
|
|
||||||
<td><span className={`badge ${statusColor}`}>{item?.status}</span></td>
|
<td><span className={`badge ${statusColor}`}>{item?.status}</span></td>
|
||||||
<td><a className="mr-3" href=""><i className="fe fe-edit"></i></a></td>
|
<td><a className="mr-3" href={productUrl} target='_blank'><i className="fe fe-edit"></i></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import {useEffect} from "react";
|
import { useQuery } from '@tanstack/react-query'
|
||||||
import { useMutation, useQuery } from '@tanstack/react-query'
|
|
||||||
import BreadcrumbComBS from "../breadcrumb/BreadcrumbComBS";
|
import BreadcrumbComBS from "../breadcrumb/BreadcrumbComBS";
|
||||||
// import getImage from "../../utils/getImage";
|
// import getImage from "../../utils/getImage";
|
||||||
import ProductStart from "./ProductStart";
|
import ProductStart from "./ProductStart";
|
||||||
@@ -8,6 +7,7 @@ import {MyProductData} from "../../services/services";
|
|||||||
import ProductActive from "./ProductActive";
|
import ProductActive from "./ProductActive";
|
||||||
import ProductProvision from "./ProductProvision";
|
import ProductProvision from "./ProductProvision";
|
||||||
import {productConst} from "../../constants/products";
|
import {productConst} from "../../constants/products";
|
||||||
|
import queryKeys from "../../services/queryKeys";
|
||||||
|
|
||||||
export default function ProductFactory(){
|
export default function ProductFactory(){
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
@@ -16,30 +16,18 @@ export default function ProductFactory(){
|
|||||||
// Split the pathname by '/' and get the last element
|
// Split the pathname by '/' and get the last element
|
||||||
const productID = pathname.split('/').pop();
|
const productID = pathname.split('/').pop();
|
||||||
|
|
||||||
const getProductData = useMutation({
|
|
||||||
mutationFn: (reqData) => {
|
|
||||||
return MyProductData(reqData)
|
|
||||||
},
|
|
||||||
onError: (error) => {
|
|
||||||
console.log(error)
|
|
||||||
},
|
|
||||||
onSuccess: (res) => {
|
|
||||||
if(res?.data?.resultCode != '0'){
|
|
||||||
throw({message: 'Something went wrong'})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
useEffect(()=>{
|
|
||||||
let reqData = {
|
let reqData = {
|
||||||
product_id : productID,
|
product_id : productID,
|
||||||
token: localStorage.getItem('token'), // USER TOKEN
|
token: localStorage.getItem('token'), // USER TOKEN
|
||||||
uid: localStorage.getItem('uid') // USER UID
|
uid: localStorage.getItem('uid') // USER UID
|
||||||
}
|
}
|
||||||
getProductData.mutate(reqData)
|
const {data, isFetching, isError, error} = useQuery({
|
||||||
},[])
|
queryKey: queryKeys.product_page,
|
||||||
|
queryFn: () => MyProductData(reqData),
|
||||||
const myproduct_data = getProductData?.data?.data?.myproduct?.myproudct // PRODUCT DETAILS
|
staleTime: 0
|
||||||
|
})
|
||||||
|
|
||||||
|
const myproduct_data = data?.data?.myproduct?.myproudct // PRODUCT DETAILS
|
||||||
const product_name = myproduct_data?.product_name;
|
const product_name = myproduct_data?.product_name;
|
||||||
const product_status = myproduct_data?.status;
|
const product_status = myproduct_data?.status;
|
||||||
|
|
||||||
@@ -47,7 +35,7 @@ export default function ProductFactory(){
|
|||||||
<>
|
<>
|
||||||
<BreadcrumbComBS title={product_name} paths={['Dashboard', 'Product']} />
|
<BreadcrumbComBS title={product_name} paths={['Dashboard', 'Product']} />
|
||||||
<div className="row">
|
<div className="row">
|
||||||
{getProductData?.isPending ?
|
{isFetching ?
|
||||||
<>
|
<>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
@@ -55,27 +43,26 @@ export default function ProductFactory(){
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
: getProductData?.error ?
|
: isError ?
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
<p className='text-danger'>{getProductData?.error?.message}</p>
|
<p className='text-danger'>{error?.message}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
:
|
:
|
||||||
<div>
|
<div>
|
||||||
{(product_status <= productConst.PRODUCT_AVAILABLE)?
|
{(product_status <= productConst.PRODUCT_AVAILABLE)?
|
||||||
<ProductStart productData={myproduct_data} />
|
<ProductStart productData={myproduct_data} />
|
||||||
:<></> }
|
:<></> }
|
||||||
|
|
||||||
{(product_status === productConst.PRODUCT_PROVISIONING)?
|
{(product_status === productConst.PRODUCT_PROVISIONING)?
|
||||||
<ProductProvision productData={myproduct_data} />
|
<ProductProvision productData={myproduct_data} />
|
||||||
:<></> }
|
:<></> }
|
||||||
|
|
||||||
{(product_status === productConst.PRODUCT_ACTIVE)?
|
{(product_status === productConst.PRODUCT_ACTIVE)?
|
||||||
<ProductActive productData={myproduct_data} />
|
<ProductActive productData={myproduct_data} />
|
||||||
:<></> }
|
:<></> }
|
||||||
|
</div>
|
||||||
</div>
|
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -110,9 +110,9 @@ export default function ProductProvision(props){
|
|||||||
<div className="card card-statistics ">
|
<div className="card card-statistics ">
|
||||||
<h4 className="card-title" style={{padding:'10px'}}>Started creating your selection</h4>
|
<h4 className="card-title" style={{padding:'10px'}}>Started creating your selection</h4>
|
||||||
<img className="card-img-top" src={getImage('widget/working.jpg')} alt="Card image cap" />
|
<img className="card-img-top" src={getImage('widget/working.jpg')} alt="Card image cap" />
|
||||||
<div className="card-body">
|
{/* <div className="card-body">
|
||||||
<div className="" dangerouslySetInnerHTML={{__html: productDescription}}/>
|
<div className="" dangerouslySetInnerHTML={{__html: productDescription}}/>
|
||||||
</div>
|
</div> */}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import React, { useRef, useState } from "react";
|
import React, { useRef, useState } from "react";
|
||||||
|
import {useNavigate} from 'react-router-dom'
|
||||||
import getImage from "../../utils/getImage";
|
import getImage from "../../utils/getImage";
|
||||||
// import { Modal } from "bootstrap";
|
import { Modal } from "bootstrap";
|
||||||
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
||||||
import { subscribe } from '../../services/services'
|
import { subscribe } from '../../services/services'
|
||||||
import queryKeys from "../../services/queryKeys";
|
import queryKeys from "../../services/queryKeys";
|
||||||
@@ -8,26 +9,28 @@ import queryKeys from "../../services/queryKeys";
|
|||||||
export default function ProductStart(props){
|
export default function ProductStart(props){
|
||||||
|
|
||||||
const queryClient = useQueryClient()
|
const queryClient = useQueryClient()
|
||||||
|
const navigate = useNavigate()
|
||||||
|
|
||||||
const [requestStatus, setRequestStatus] = useState({status:false, message: ''})
|
const [requestStatus, setRequestStatus] = useState({status:false, message: ''})
|
||||||
|
|
||||||
const product_uid = props?.productData?.product_uid;
|
const product_uid = props?.productData?.product_uid;
|
||||||
const product_id = props?.productData?.product_id;
|
const product_id = props?.productData?.product_id;
|
||||||
const productBanner = "product/"+props.productData?.banner;
|
const productBanner = `product/${props.productData?.banner}`;
|
||||||
const productTitle = props.productData?.title;
|
const productTitle = props?.productData?.title;
|
||||||
const productDescription = props.productData?.description;
|
const productDescription = props?.productData?.description;
|
||||||
const promotion_text = props.productData?.promotion_text;
|
const promotion_text = props?.productData?.promotion_text;
|
||||||
const product_status = props.productData?.status;
|
const product_status = props?.productData?.status;
|
||||||
const saleText = props.productData?.sale_text;
|
const saleText = props?.productData?.sale_text;
|
||||||
|
|
||||||
const modalRef = useRef()
|
|
||||||
|
|
||||||
const refetch = () => {
|
const modalRef = useRef(null)
|
||||||
queryClient.refetchQueries({
|
|
||||||
queryKey: [...queryKeys.product],
|
const invalidate = () => {
|
||||||
// type: 'active',
|
// queryClient.refetchQueries({
|
||||||
// exact: true,
|
// queryKey: [...queryKeys.product],
|
||||||
})
|
// // type: 'active',
|
||||||
|
// // exact: true,
|
||||||
|
// })
|
||||||
|
queryClient.invalidateQueries({ queryKey: [...queryKeys.product_url] })
|
||||||
|
queryClient.invalidateQueries({ queryKey: [...queryKeys.product_page] })
|
||||||
}
|
}
|
||||||
|
|
||||||
const mutation = useMutation({
|
const mutation = useMutation({
|
||||||
@@ -40,9 +43,12 @@ export default function ProductStart(props){
|
|||||||
},
|
},
|
||||||
onSuccess: (res) => {
|
onSuccess: (res) => {
|
||||||
setRequestStatus({status:true, message:'successful'})
|
setRequestStatus({status:true, message:'successful'})
|
||||||
|
navigate(`/product/${product_id}`, {replace: true}) //'/product/'+ product_id
|
||||||
|
dismissModal()
|
||||||
console.log(res)
|
console.log(res)
|
||||||
},
|
},
|
||||||
onSettled: () => {
|
onSettled: () => {
|
||||||
|
invalidate() // Invalidates selected queries
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
setRequestStatus({status:false, message:''})
|
setRequestStatus({status:false, message:''})
|
||||||
},4000)
|
},4000)
|
||||||
@@ -53,6 +59,22 @@ export default function ProductStart(props){
|
|||||||
mutation.mutate({product_id: product_id})
|
mutation.mutate({product_id: product_id})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const dismissModal = () => {
|
||||||
|
const body = document.querySelector('body')
|
||||||
|
body.removeAttribute('style')
|
||||||
|
// body.classList.toggle('modal-open')
|
||||||
|
|
||||||
|
const modalBackdrop = document.querySelectorAll('.modal-backdrop')
|
||||||
|
modalBackdrop.forEach(item => {
|
||||||
|
if (item) {
|
||||||
|
item.remove();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const modal = Modal.getInstance(modalRef.current);
|
||||||
|
modal && modal.hide();
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
@@ -113,7 +135,7 @@ export default function ProductStart(props){
|
|||||||
<div className="modal-content">
|
<div className="modal-content">
|
||||||
<div className="modal-header">
|
<div className="modal-header">
|
||||||
<h5 className="modal-title" id="verticalCenterTitle">{productTitle}</h5>
|
<h5 className="modal-title" id="verticalCenterTitle">{productTitle}</h5>
|
||||||
<button onClick={refetch} type="button" className="close" data-bs-dismiss="modal" aria-label="Close">
|
<button type="button" className="close" data-bs-dismiss="modal" aria-label="Close">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -140,7 +162,7 @@ export default function ProductStart(props){
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="modal-footer">
|
<div className="modal-footer">
|
||||||
<button onClick={refetch} type="button" className="btn btn-danger" data-bs-dismiss="modal">Close</button>
|
<button type="button" className="btn btn-danger" data-bs-dismiss="modal">Close</button>
|
||||||
<button type="button" className="btn btn-success" disabled={mutation.isSuccess} onClick={handleSubscribe}>{mutation.isPending ? 'loading...' : 'Start'}</button>
|
<button type="button" className="btn btn-success" disabled={mutation.isSuccess} onClick={handleSubscribe}>{mutation.isPending ? 'loading...' : 'Start'}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
const queryKeys = {
|
const queryKeys = {
|
||||||
user_details: ['user_details'],
|
user_details: ['user_details'],
|
||||||
|
product_url: ['product_url'],
|
||||||
|
products: ['product-data'],
|
||||||
|
myproduct_provision: ['myproduct_provision'],
|
||||||
|
product_page: ['product_page'],
|
||||||
|
|
||||||
dashboard: ['dashboard'],
|
dashboard: ['dashboard'],
|
||||||
topBar: ['top-bar'],
|
topBar: ['top-bar'],
|
||||||
recentAction: ['recent-action'],
|
recentAction: ['recent-action'],
|
||||||
product: ['product-data'],
|
|
||||||
product_url: ['product_url'],
|
|
||||||
myproduct_provision: ['myproduct_provision'],
|
|
||||||
calendar_events: ['calendar_events'],
|
calendar_events: ['calendar_events'],
|
||||||
contacts: ['contacts']
|
contacts: ['contacts']
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user