Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 20c224b625 | |||
| 54a0361620 | |||
| a9721991de | |||
| e15e9f271c | |||
| c9ad818370 | |||
| 466d10c0fc | |||
| 7a7149de0c | |||
| 34ef37c905 | |||
| 52249ae3a2 | |||
| 183a6ce903 | |||
| e65371e41b |
@@ -9,6 +9,7 @@ const RouteLinks = {
|
||||
recentSignup: '/recent-signup',
|
||||
loansPage: '/loans',
|
||||
transactionsPage: '/transactions',
|
||||
countrySettings: '/country',
|
||||
products: '/products',
|
||||
usersAdmin: '/users-admin',
|
||||
productTemplates: '/products-template',
|
||||
|
||||
+3
-1
@@ -20,7 +20,8 @@ import TransactionDetailsPage from './pages/TransactionDetailsPage'
|
||||
import AccountDetailsPage from "./pages/AccountDetailsPage";
|
||||
import ProductTemplatePage from "./pages/ProductTemplatePage";
|
||||
import CustomTemplatePage from "./pages/CustomTemplatePage";
|
||||
import SubscriptionDetailsPage from "./pages/SubscriptionDetailsPage"; // TRANSACTION DETAILS PAGE
|
||||
import SubscriptionDetailsPage from "./pages/SubscriptionDetailsPage";
|
||||
import CountrySettingsPage from "./pages/CountrySettingsPage"; // TRANSACTION DETAILS PAGE
|
||||
|
||||
|
||||
// const Home = lazy(() => import('./pages/Home'));
|
||||
@@ -40,6 +41,7 @@ export default function SiteRoutes() {
|
||||
<Route path={RouteLinks.products} element={<ProductsPage/>}/> {`*/PRODUCTS PAGE*/`}
|
||||
<Route path={RouteLinks.usersAdmin} element={<UsersAdminPage/>}/> {`*/ADMIN USERS PAGE*/`}
|
||||
|
||||
<Route path={RouteLinks.countrySettings} element={<CountrySettingsPage/>}/> {`*/PRODUCTS TEMPLATE PAGE*/`}
|
||||
<Route path={RouteLinks.productTemplates} element={<ProductTemplatePage/>}/> {`*/PRODUCTS TEMPLATE PAGE*/`}
|
||||
<Route path={RouteLinks.customTemplates} element={<CustomTemplatePage/>}/> {`*/CUSTOM TEMPLATES PAGE*/`}
|
||||
|
||||
|
||||
@@ -19,13 +19,13 @@ export default function CustomerSubscriptionsView({subscriptions}) {
|
||||
#
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
Added
|
||||
Added/Updated
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
Product
|
||||
Product/Server
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
URL / Templates
|
||||
URL / EXT/ Templates
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
Status
|
||||
@@ -40,24 +40,45 @@ export default function CustomerSubscriptionsView({subscriptions}) {
|
||||
<tr key={index} className="py-2 border-t border-dashed border-slate-300">
|
||||
<td className="px-2 py-2">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">{index+1}</div>
|
||||
<div className="text-base font-semibold">{index + 1}</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-2">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">{getDateTimeFromDateString(item?.added)}</div>
|
||||
<div
|
||||
className="text-base font-semibold">{getDateTimeFromDateString(item?.added)}</div>
|
||||
<div
|
||||
className="text-base font-semibold">{getDateTimeFromDateString(item?.updated)}</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-2">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">{item?.product_id}</div>
|
||||
<div><a href={`http://${item?.primary_server}:${item?.provision_port}`}
|
||||
target='_blank'
|
||||
rel="noreferrer">{item?.primary_server}:{item?.provision_port}</a>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-2">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">{item?.internal_url}
|
||||
<br /><span>Template :</span> {item?.product_template}
|
||||
<br /><span>Custom :</span> {item?.custom_template}
|
||||
<div className="text-base">
|
||||
<span className="badge badge-pill badge-primary-inverse">
|
||||
<a href={`https://${item?.internal_url}`}
|
||||
target='_blank'
|
||||
rel="noreferrer">{item?.internal_url}</a>
|
||||
</span>
|
||||
|
||||
<br/>
|
||||
<span className="badge badge-warning">
|
||||
<a href={`https://${item?.external_url}`}
|
||||
target='_blank'
|
||||
rel="noreferrer">{item?.external_url}</a>
|
||||
</span>
|
||||
|
||||
<br/>
|
||||
<span>Template :</span> {item?.product_template}
|
||||
<br/><span>Custom :</span> {item?.custom_template}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
@@ -70,7 +91,10 @@ export default function CustomerSubscriptionsView({subscriptions}) {
|
||||
<div className='flex items-center justify-end gap-3 md:gap-4'>
|
||||
<div
|
||||
className='p-2 flex justify-center items-center text-slate-500 bg-white-body dark:text-white-body dark:bg-black-body rounded-md'>
|
||||
<Link to={`/subscription-view/${item?.subscription_uid}`} state={{customerID: item?.id, subscriptionUID: item?.subscription_uid}}>
|
||||
<Link to={`/subscription-view/${item?.subscription_uid}`} state={{
|
||||
customerID: item?.id,
|
||||
subscriptionUID: item?.subscription_uid
|
||||
}}>
|
||||
<Icons name='eye'/>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
import { useState } from "react";
|
||||
import { useQuery } from '@tanstack/react-query'
|
||||
import queryKeys from '../../services/queryKeys'
|
||||
import BreadcrumbCom from "../breadcrumb/BreadcrumbCom";
|
||||
import { getCountry } from "../../services/siteServices";
|
||||
import TablePaginatedWrapper from "../tableWrapper/TablePaginatedWrapper";
|
||||
|
||||
export default function CountrySettings(){
|
||||
|
||||
const [page, setPage] = useState(1)
|
||||
const [filter, setFilter] = useState({type: '', id: ''})
|
||||
const [willFilter, setWillFilter] = useState(false)
|
||||
|
||||
const handleFilter = ({target:{name, value}}) => {
|
||||
setFilter(prev => ({...prev, [name]:value}))
|
||||
}
|
||||
|
||||
const handleFilterByParams = () => {
|
||||
if(filter.type && !filter.id){
|
||||
return
|
||||
}else if(!filter.type){
|
||||
setPage(1)
|
||||
setWillFilter(prev => !prev)
|
||||
setFilter({type: '', id: ''})
|
||||
}else{
|
||||
setPage(1)
|
||||
setWillFilter(prev => !prev)
|
||||
}
|
||||
}
|
||||
|
||||
const {data, isFetching, isError, error} = useQuery({
|
||||
// queryKey: [...queryKeys.country_list, page, willFilter],
|
||||
queryKey: queryKeys.country_list,
|
||||
queryFn: () => {
|
||||
// const filterData = filter?.type ? {[filter?.type]: filter.id} : {}
|
||||
const reqData = {
|
||||
// page,
|
||||
// ...filterData
|
||||
}
|
||||
return getCountry(reqData)
|
||||
},
|
||||
staleTime: 0 //0 mins
|
||||
})
|
||||
const countryData = data?.data?.templates // PRODUCTS TEMPLATE LIST
|
||||
const pagination = data?.data?.pagination
|
||||
console.log('DATA', data?.data)
|
||||
|
||||
return (
|
||||
<div className='w-full flex flex-col gap-8'>
|
||||
<BreadcrumbCom title='Country Settings' paths={['Dashboard', 'Country']} />
|
||||
|
||||
<div className='box bg-white dark:bg-black-box text-black-body dark:text-white-body'>
|
||||
|
||||
<>
|
||||
{/* <table className="py-2 w-full text-sm">
|
||||
<thead className="py-2 text-sm text-slate-500 text-left">
|
||||
<tr>
|
||||
<th scope="col" className="px-2 py-2">
|
||||
Code
|
||||
</th>
|
||||
<th scope="col" className="px-8">
|
||||
Country
|
||||
</th>
|
||||
<th scope="col" className="px-2 text-right">
|
||||
Status
|
||||
</th>
|
||||
<th scope="col" className="px-2 text-right">
|
||||
Signup
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr className="py-2 border-t border-dashed border-slate-300">
|
||||
<td className="px-2 py-2">
|
||||
<div className='w-full min-w-48 flex items-center gap-2 whitespace-nowrap'>
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">US</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">United States</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">[chkbox]</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">[chkbox]</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr className="py-2 border-t border-dashed border-slate-300">
|
||||
<td className="px-2 py-2">
|
||||
<div className='w-full min-w-48 flex items-center gap-2 whitespace-nowrap'>
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">NG</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">Nigeria</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">[chkbox]</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">[chkbox]</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table> */}
|
||||
<TablePaginatedWrapper data={countryData} isFetching={isFetching} setPage={setPage} itemsPerPage={pagination?.limit} pagination={pagination}>
|
||||
{({ data }) => (
|
||||
<>
|
||||
<table className="py-2 w-full text-sm">
|
||||
<thead className="py-2 text-sm text-slate-500 text-left">
|
||||
<tr>
|
||||
<th scope="col" className="px-2 py-2">
|
||||
Code
|
||||
</th>
|
||||
<th scope="col" className="px-8">
|
||||
Country
|
||||
</th>
|
||||
<th scope="col" className="px-2 text-right">
|
||||
Status
|
||||
</th>
|
||||
<th scope="col" className="px-2 text-right">
|
||||
Signup
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{(data && data.length > 0) ? data?.map((item, index) => (
|
||||
<tr key={index} className="py-2 border-t border-dashed border-slate-300">
|
||||
<td className="px-2 py-2">
|
||||
<div className='w-full min-w-48 flex items-center gap-2 whitespace-nowrap'>
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">US</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">United States</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">[chkbox]</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">[chkbox]</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
))
|
||||
:
|
||||
<tr className="py-2 border-t border-dashed border-slate-300">
|
||||
<td className="px-3 py-2" colSpan={4}>
|
||||
<div className="flex justify-center items-center">
|
||||
No Record Found
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</>
|
||||
)}
|
||||
</TablePaginatedWrapper>
|
||||
</>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -44,9 +44,9 @@ export default function HomeCom() {
|
||||
{/* <p className='text-3xl sm:text-[39px]'><span className='text-xl sm:text-2xl'>{dashData?.loans?.currency_text}</span><CustomCounter targetNumber={dashData?.loans?.value} timeInSeconds='1' /></p> */}
|
||||
<p className='text-xl sm:text-[30px]'><span className='text-lg sm:text-xl'>
|
||||
{/*{dashData?.loans?.currency_text}*/}
|
||||
</span><CustomCounter targetNumber={formatNumber(dashData?.loans?.value)} timeInSeconds='1'/>
|
||||
</span><CustomCounter targetNumber={formatNumber(dashData?.signups?.value)} timeInSeconds='1'/>
|
||||
</p>
|
||||
<p className='sm:text-[13.9px]'>{dashData?.loans?.text}</p>
|
||||
<p className='sm:text-[13.9px]'>{dashData?.signups?.text.toString()}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
@@ -104,10 +104,10 @@ export default function HomeCom() {
|
||||
Subscription
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
Status
|
||||
URL
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
Activity
|
||||
Status
|
||||
</th>
|
||||
<th scope="col" className="px-2 text-right">
|
||||
Action
|
||||
@@ -138,17 +138,16 @@ export default function HomeCom() {
|
||||
<div className="text-base font-semibold"><a
|
||||
href={`https://${item?.internal_url}`} target='_blank'
|
||||
rel="noreferrer">{item?.internal_url}</a></div>
|
||||
<div className="font-normal text-gray-500">{item?.status}</div>
|
||||
<div className="font-normal text-gray-500">
|
||||
<a href={`http://${item?.primary_server}:${item?.provision_port}`}
|
||||
target='_blank'
|
||||
rel="noreferrer">
|
||||
{item?.primary_server}:{item?.provision_port} </a></div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-2">
|
||||
<div className="text-left">
|
||||
<div className="font-normal text-gray-500">50%</div>
|
||||
<div
|
||||
className="relative h-[6px] w-full bg-white-body dark:bg-black-body rounded-full overflow-hidden">
|
||||
<div
|
||||
className={`absolute left-0 h-full w-1/2 bg-emerald-600`}></div>
|
||||
</div>
|
||||
<div className="font-normal text-gray-500">{item?.status}</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-2 text-right">
|
||||
@@ -156,7 +155,7 @@ export default function HomeCom() {
|
||||
<div
|
||||
className='p-2 flex justify-center items-center text-slate-500 bg-white-body dark:text-white-body dark:bg-black-body rounded-md'>
|
||||
<Link to={`/subscription-view/${item?.uid}`}
|
||||
state={{subscriptionUID: item?.uid}}
|
||||
state={{subscriptionUID: item?.uid}}
|
||||
>
|
||||
<Icons name='eye'/>
|
||||
</Link>
|
||||
|
||||
@@ -157,6 +157,7 @@ const asideNavLinks = [
|
||||
{name: 'Billings', status: 1, icon: 'dot', to: RouteLinks.billings},
|
||||
{
|
||||
name: 'Configurations', status: 1, icon: 'arrow-right', subLinks: [
|
||||
{name: 'Country', status: 1, icon: 'dot', to: RouteLinks.countrySettings},
|
||||
{name: 'Product Settings', status: 1, icon: 'dot', to: RouteLinks.products},
|
||||
{name: 'Product Templates', status: 1, icon: 'dot', to: RouteLinks.productTemplates},
|
||||
{name: 'Custom Templates', status: 1, icon: 'dot', to: RouteLinks.customTemplates},
|
||||
|
||||
@@ -14,7 +14,7 @@ const initialValues = {
|
||||
// To get the validation schema
|
||||
const validationSchema = Yup.object().shape({
|
||||
custom_id: Yup.string().required("custom_id is required").min(6, 'must be upto 6 characters').max(25, 'must not exceed 25 characters'),
|
||||
provision_name: Yup.string().required("provision_name is required").min(6, 'must be upto 6 characters').max(25, 'must not exceed 25 characters'),
|
||||
provision_name: Yup.string().required("provision_name is required").min(6, 'must be upto 6 characters').max(200, 'must not exceed 200 characters'),
|
||||
});
|
||||
|
||||
export default function AddTemplate() {
|
||||
|
||||
@@ -81,10 +81,7 @@ export default function ProductTemplates() {
|
||||
<th scope="col" className="px-2 py-2">
|
||||
Product ID
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
Name
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
<th scope="col" className="px-8">
|
||||
Provision Name
|
||||
</th>
|
||||
<th scope="col" className="px-2 text-right">
|
||||
@@ -102,12 +99,7 @@ export default function ProductTemplates() {
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-2">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">{item?.name}</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-2">
|
||||
<td className="px-8">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold">{item?.provision_name}</div>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@ import { FaCaretDown } from "react-icons/fa";
|
||||
import BreadcrumbCom from '../breadcrumb/BreadcrumbCom'
|
||||
import {useEffect, useState} from 'react';
|
||||
import RouteLinks from '../../RouteLinks';
|
||||
import { getSubscriptionsView, updateTemplate } from '../../services/siteServices'
|
||||
import { getSubscriptionsView, updateTemplate, updateCustomTemplate } from '../../services/siteServices'
|
||||
import queryKeys from '../../services/queryKeys'
|
||||
import getDateTimeFromDateString from '../../helpers/getDateTimeFromDateString';
|
||||
|
||||
@@ -66,35 +66,50 @@ export default function SubscriptionViewCom() {
|
||||
|
||||
const templateUpdate = useMutation({
|
||||
mutationFn: (fields) => {
|
||||
setReqStatus(prev => ({...prev, loading: true}))
|
||||
return updateTemplate(fields)
|
||||
},
|
||||
onError: (error) => {
|
||||
setReqStatus(prev => ({...prev, loading: false, error: true}))
|
||||
},
|
||||
onSuccess: (res) => {
|
||||
setReqStatus(prev => ({...prev, loading: false, error: false, success: true}))
|
||||
},
|
||||
// onError: (error) => {
|
||||
// },
|
||||
// onSuccess: (res) => {
|
||||
// },
|
||||
onSettled: () => {
|
||||
setTimeout(()=>{
|
||||
setReqStatus({loading: false, type: '', error: false, success: false})
|
||||
templateUpdate.reset()
|
||||
}, 3000)
|
||||
}
|
||||
})
|
||||
|
||||
const handleUpdateTemplate = ({target:{name}}) => {
|
||||
setReqStatus({loading: false, type: name, error: false, success: false})
|
||||
const reqData = {Subscrtiption_uid: state?.subscriptionUID}
|
||||
if(name == 'template'){
|
||||
reqData.template_uid = values.template_uid
|
||||
}else if (name == 'custom_template'){
|
||||
reqData.custom_id = values.custom_id
|
||||
}else{
|
||||
return
|
||||
const customTemplateUpdate = useMutation({
|
||||
mutationFn: (fields) => {
|
||||
return updateCustomTemplate(fields)
|
||||
},
|
||||
// onError: (error) => {
|
||||
// },
|
||||
// onSuccess: (res) => {
|
||||
// },
|
||||
onSettled: () => {
|
||||
setTimeout(()=>{
|
||||
customTemplateUpdate.reset()
|
||||
}, 3000)
|
||||
}
|
||||
})
|
||||
|
||||
const handleUpdateTemplate = () => {
|
||||
const reqData = {
|
||||
subscrtiption_uid: state?.subscriptionUID,
|
||||
template_uid: values.template_uid
|
||||
}
|
||||
templateUpdate.mutate(reqData)
|
||||
}
|
||||
|
||||
const handleUpdateCustomTemplate = () => {
|
||||
const reqData = {
|
||||
subscrtiption_uid: state?.subscriptionUID,
|
||||
custom_id: values.custom_id
|
||||
}
|
||||
customTemplateUpdate.mutate(reqData)
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<div className='w-full flex flex-col gap-8'>
|
||||
@@ -154,11 +169,9 @@ export default function SubscriptionViewCom() {
|
||||
</select>
|
||||
<FaCaretDown className='text-base absolute top-1/2 -translate-y-1/2 right-2' />
|
||||
</div>
|
||||
<button name='template' onClick={handleUpdateTemplate} disabled={(reqStatus.loading || !values.template_uid)} className={`rounded-md p-2 bg-primary text-white text-center ${(reqStatus.loading || !values.template_uid) && 'opacity-50'}`}>Update</button>
|
||||
<button name='template' onClick={handleUpdateTemplate} disabled={(templateUpdate.isPending || !values.template_uid)} className={`rounded-md p-2 bg-primary text-white text-center ${(templateUpdate.isPending || !values.template_uid) && 'opacity-50'}`}>Update</button>
|
||||
</div>
|
||||
{(reqStatus.type == 'template' && (reqStatus.error || reqStatus.success)) &&
|
||||
<p className={`p-2 mt-4 ${reqStatus.success ? 'text-emerald-500' : 'text-red-500'}`}>{reqStatus.success ? 'Template updated' : 'Unable to complete request, try again'}</p>
|
||||
}
|
||||
<p className={`p-2 mt-4 ${templateUpdate.isSuccess ? 'text-emerald-500' : 'text-red-500'}`}>{templateUpdate.isSuccess ? 'Template updated' : templateUpdate.isSuccess ? 'Unable to complete request, try again' : ''}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -176,11 +189,9 @@ export default function SubscriptionViewCom() {
|
||||
</select>
|
||||
<FaCaretDown className='text-base absolute top-1/2 -translate-y-1/2 right-2' />
|
||||
</div>
|
||||
<button name='custom_template' onClick={handleUpdateTemplate} disabled={(reqStatus.loading || !values.custom_id)} className={`rounded-md p-2 bg-primary text-white text-center ${(reqStatus.loading || !values.custom_id) && 'opacity-50'}`}>Update</button>
|
||||
<button name='custom_template' onClick={handleUpdateCustomTemplate} disabled={(customTemplateUpdate.isPending || !values.custom_id)} className={`rounded-md p-2 bg-primary text-white text-center ${(customTemplateUpdate.isPending || !values.custom_id) && 'opacity-50'}`}>Update</button>
|
||||
</div>
|
||||
{(reqStatus.type == 'custom_template' && (reqStatus.error || reqStatus.success)) &&
|
||||
<p className={`p-2 mt-4 ${reqStatus.success ? 'text-emerald-500' : 'text-red-500'}`}>{reqStatus.success ? 'Template updated' : 'Unable to complete request, try again'}</p>
|
||||
}
|
||||
<p className={`p-2 mt-4 ${customTemplateUpdate.isSuccess ? 'text-emerald-500' : 'text-red-500'}`}>{customTemplateUpdate.isSuccess ? 'Custom Template updated' : customTemplateUpdate.isSuccess ? 'Unable to complete request, try again' : ''}</p>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
|
||||
@@ -93,7 +93,7 @@ export default function SubscriptionsCom() {
|
||||
Added/Updated
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
Product
|
||||
Product/Server
|
||||
</th>
|
||||
<th scope="col" className="px-2">
|
||||
Internal-URL/External-URL/SubscriptionUID
|
||||
@@ -116,8 +116,8 @@ export default function SubscriptionsCom() {
|
||||
<div className="text-left">
|
||||
<div
|
||||
className="text-base font-semibold">
|
||||
{getDateTimeFromDateString(item?.added)}<br />
|
||||
{getDateTimeFromDateString(item?.updated)}<br />
|
||||
{getDateTimeFromDateString(item?.added)}<br/>
|
||||
{getDateTimeFromDateString(item?.updated)}<br/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -125,14 +125,26 @@ export default function SubscriptionsCom() {
|
||||
<td className="px-2">
|
||||
<div className="text-left">
|
||||
<div
|
||||
className="text-base font-semibold">{item?.product_id}</div>
|
||||
className="text-base font-semibold">
|
||||
{item?.product_id}
|
||||
<br/>
|
||||
<a href={`http://${item?.primary_server}:${item?.provision_port}`}
|
||||
target='_blank'
|
||||
rel="noreferrer">{item?.primary_server}:{item?.provision_port}</a>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-2">
|
||||
<div className="text-left">
|
||||
<div className="text-base font-semibold ">
|
||||
<span>Int :</span> {item?.internal_url}<br/>
|
||||
<span>Ext :</span> {item?.external_url}<br/>
|
||||
<div className="text-base">
|
||||
<span>Int :</span><a href={`https://${item?.internal_url}`}
|
||||
target='_blank'
|
||||
rel="noreferrer"> {item?.internal_url}</a>
|
||||
<br/>
|
||||
<span>Ext :</span><a href={`https://${item?.external_url}`}
|
||||
target='_blank'
|
||||
rel="noreferrer"> {item?.external_url}</a>
|
||||
<br/>
|
||||
{item?.subscription_uid}</div>
|
||||
</div>
|
||||
</td>
|
||||
@@ -146,7 +158,10 @@ export default function SubscriptionsCom() {
|
||||
<div
|
||||
className='p-2 flex justify-center items-center text-slate-500 bg-white-body dark:text-white-body dark:bg-black-body rounded-md'>
|
||||
<Link to={`/subscription-view/${item?.subscription_uid}`}
|
||||
state={{customerID: item?.id, subscriptionUID: item?.subscription_uid}}
|
||||
state={{
|
||||
customerID: item?.id,
|
||||
subscriptionUID: item?.subscription_uid
|
||||
}}
|
||||
>
|
||||
<Icons name='eye'/>
|
||||
</Link>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import React from 'react'
|
||||
import CountrySettings from "../components/country/CountrySettings";
|
||||
|
||||
export default function CountrySettingsPage() {
|
||||
return (
|
||||
<CountrySettings />
|
||||
)
|
||||
}
|
||||
@@ -22,6 +22,7 @@ const queryKeys = {
|
||||
account_view: ['account_view'],
|
||||
subscriptions_view: ['subscriptions_view'],
|
||||
users_admin: ['users_admin'],
|
||||
country_list: ['country_list'],
|
||||
}
|
||||
|
||||
export default queryKeys
|
||||
@@ -62,6 +62,12 @@ export const getCustomers = (reqData) => {
|
||||
return getAuxEnd(`/customers`, postData)
|
||||
}
|
||||
|
||||
// FUNCTION TO GET COUNTRY
|
||||
export const getCountry = (reqData) => {
|
||||
const postData = { ...reqData }
|
||||
return getAuxEnd(`/country`, postData)
|
||||
}
|
||||
|
||||
// FUNCTION TO GET BILLINGS
|
||||
export const getBillings = (reqData) => {
|
||||
const postData = { ...reqData }
|
||||
@@ -112,6 +118,14 @@ export const updateTemplate = (reqData) => {
|
||||
return postAuxEnd('/template/set-template', postData, false)
|
||||
}
|
||||
|
||||
// FUNCTION TO UPDATE CUSTOM TEMPLATE
|
||||
export const updateCustomTemplate = (reqData) => {
|
||||
let postData = {
|
||||
...reqData
|
||||
}
|
||||
return postAuxEnd('/template/set-custom', postData, false)
|
||||
}
|
||||
|
||||
// FUNCTION TO ADD CUSTOM TEMPLATE
|
||||
export const addCustomTemplate = (reqData) => {
|
||||
let postData = {
|
||||
|
||||
Reference in New Issue
Block a user