Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bd1450887b | |||
| 923a2483ed | |||
| 7f0ccf35b2 | |||
| af2fdcede6 | |||
| a9f2136125 |
@@ -66,7 +66,7 @@ export default function ProductActive({productData}){
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="card-body" style={{minHeight: '680px'}}>
|
<div className="card-body" style={{minHeight: '600px', maxHeight: '600px'}}>
|
||||||
<iframe ref={iframe} style={{borderWidth: '0px'}} src={externalUrl} width="100%" height="600" title={externalUrl}></iframe>
|
<iframe ref={iframe} style={{borderWidth: '0px'}} src={externalUrl} width="100%" height="600" title={externalUrl}></iframe>
|
||||||
</div>
|
</div>
|
||||||
<div className="p-4 ml-auto">
|
<div className="p-4 ml-auto">
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import queryKeys from '../../../services/queryKeys';
|
|||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import sortObjectByListOrder from '../../../helpers/sortObjectByListOrder'
|
import sortObjectByListOrder from '../../../helpers/sortObjectByListOrder'
|
||||||
|
import TemplateConfigure from './TemplateConfigure';
|
||||||
|
|
||||||
const Settings = memo(({productData}) => {
|
const Settings = memo(({productData}) => {
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ const Settings = memo(({productData}) => {
|
|||||||
})
|
})
|
||||||
const settingsConfig = configData?.data?.settings_items
|
const settingsConfig = configData?.data?.settings_items
|
||||||
// console.log('CONFIG DATA...', settingsConfig)
|
// console.log('CONFIG DATA...', settingsConfig)
|
||||||
|
// console.log('configData', configData?.data?.subscription_template)
|
||||||
|
|
||||||
const [fieldsChanged, setFieldsChanged] = useState(false)
|
const [fieldsChanged, setFieldsChanged] = useState(false)
|
||||||
|
|
||||||
@@ -81,12 +82,12 @@ const Settings = memo(({productData}) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
:
|
:
|
||||||
<div className="tab tab-vertical">
|
<div className="d-flex">
|
||||||
<ul className="nav nav-tabs" role="tablist">
|
<ul className="bg-body-secondary flex-column nav" role="tablist" style={{width: '25%', minHeight: '670px', maxHeight: '670px'}}>
|
||||||
<>
|
<>
|
||||||
{Object.entries(sortedSettingsConfig).map(([key, value], index) => (
|
{Object.entries(sortedSettingsConfig).map(([key, value], index) => (
|
||||||
<li key={key} className="nav-item">
|
<li key={key} className="nav-item">
|
||||||
<a className={`nav-link ${(activeTab == value.controls || (index == 0 & !activeTab)) && 'active show'}`}
|
<p className={`text-black nav-link ${(activeTab == value.controls || (index == 0 & !activeTab)) && 'active show bg-primary text-white'}`}
|
||||||
id={key}
|
id={key}
|
||||||
// data-bs-toggle="pill"
|
// data-bs-toggle="pill"
|
||||||
// data-bs-target={`#${value.controls}`}
|
// data-bs-target={`#${value.controls}`}
|
||||||
@@ -97,12 +98,27 @@ const Settings = memo(({productData}) => {
|
|||||||
onClick={()=>handleChangeTab(value.controls)}
|
onClick={()=>handleChangeTab(value.controls)}
|
||||||
>
|
>
|
||||||
{value.title}
|
{value.title}
|
||||||
</a>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
|
{configData?.data?.subscription_template &&
|
||||||
|
<li className="mt-auto nav-item">
|
||||||
|
<p className={`text-black nav-link ${(activeTab == 'config_temp') && 'active show bg-primary text-white'}`}
|
||||||
|
// data-bs-toggle="pill"
|
||||||
|
// data-bs-target={`#${value.controls}`}
|
||||||
|
type="button"
|
||||||
|
// role="tab"
|
||||||
|
// aria-controls={value.controls}
|
||||||
|
// aria-selected="true"
|
||||||
|
onClick={()=>handleChangeTab('config_temp')}
|
||||||
|
>
|
||||||
|
Configure Template
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
}
|
||||||
</>
|
</>
|
||||||
</ul>
|
</ul>
|
||||||
<div className="tab-content">
|
<div className="p-3 tab-content" style={{width: '75%'}}>
|
||||||
<>
|
<>
|
||||||
{Object.entries(sortedSettingsConfig).map(([key, value], index) => (
|
{Object.entries(sortedSettingsConfig).map(([key, value], index) => (
|
||||||
<div key={key} className={`tab-pane fade ${(activeTab == value.controls || (index == 0 & !activeTab)) && 'active show'}`}
|
<div key={key} className={`tab-pane fade ${(activeTab == value.controls || (index == 0 & !activeTab)) && 'active show'}`}
|
||||||
@@ -112,6 +128,10 @@ const Settings = memo(({productData}) => {
|
|||||||
<GeneralTab tabKey={key} name={value.title} data={value.data} isCustom={value.custom} productData={productData} backendValues={settingsData} setFieldsChanged={setFieldsChanged} />
|
<GeneralTab tabKey={key} name={value.title} data={value.data} isCustom={value.custom} productData={productData} backendValues={settingsData} setFieldsChanged={setFieldsChanged} />
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
<div className={`tab-pane fade ${(activeTab == 'config_temp') && 'active show'}`}
|
||||||
|
>
|
||||||
|
<TemplateConfigure />
|
||||||
|
</div>
|
||||||
</>
|
</>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
|
||||||
|
const TemplateConfigure = ({productData}) => {
|
||||||
|
|
||||||
|
return <>
|
||||||
|
<div className="card card-statistics">
|
||||||
|
<div className="card-header">
|
||||||
|
<div className="card-heading">
|
||||||
|
<h4 className="card-title" style={{textTransform: 'none'}}>Some headings</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/*<div className="card-body">*/}
|
||||||
|
{/* <div className="form-group">*/}
|
||||||
|
{/* /!*<label htmlFor="exampleInputEmail1">Email address</label>*!/*/}
|
||||||
|
{/* <input type="email" className="form-control"*/}
|
||||||
|
{/* aria-describedby="defaultUrlHelp" value={defaultUrl} readOnly={true} />*/}
|
||||||
|
{/* </div>*/}
|
||||||
|
{/*</div>*/}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
|
||||||
|
export default TemplateConfigure
|
||||||
@@ -1,7 +1,27 @@
|
|||||||
import React from "react";
|
import React, { useState } from "react";
|
||||||
|
import { useQuery } from "@tanstack/react-query";
|
||||||
|
import { getPaymentReports } from "../../services/services";
|
||||||
|
import queryKeys from "../../services/queryKeys";
|
||||||
|
|
||||||
export default function PaymentReportTable() {
|
export default function PaymentReportTable() {
|
||||||
return (<>
|
|
||||||
|
const [page, setPage] = useState(0)
|
||||||
|
|
||||||
|
const {data, isFetching, isError, error} = useQuery({
|
||||||
|
queryKey: [...queryKeys.payment_report, page],
|
||||||
|
queryFn: () => {
|
||||||
|
let reqData = {
|
||||||
|
token: localStorage.getItem('token'), // USER TOKEN
|
||||||
|
uid: localStorage.getItem('uid'), // USER UID
|
||||||
|
page
|
||||||
|
}
|
||||||
|
return getPaymentReports(reqData)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('DATA', data?.data)
|
||||||
|
return (
|
||||||
|
<>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-md-12 m-b-30">
|
<div className="col-md-12 m-b-30">
|
||||||
<div className="d-block d-sm-flex flex-nowrap align-items-center">
|
<div className="d-block d-sm-flex flex-nowrap align-items-center">
|
||||||
@@ -12,6 +32,17 @@ export default function PaymentReportTable() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
|
{isFetching ?
|
||||||
|
<>
|
||||||
|
<div className="col-12">
|
||||||
|
<p className='text-mute'>Loading...</p>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
: isError ?
|
||||||
|
<div className="col-12">
|
||||||
|
<p className='text-danger'>{error?.message}</p>
|
||||||
|
</div>
|
||||||
|
:
|
||||||
<div className="col-lg-12">
|
<div className="col-lg-12">
|
||||||
<div className="card card-statistics">
|
<div className="card card-statistics">
|
||||||
<div className="card-body">
|
<div className="card-body">
|
||||||
@@ -164,7 +195,8 @@ export default function PaymentReportTable() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
</>
|
||||||
</>)
|
)
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,28 @@
|
|||||||
import React from "react";
|
import React, { useState } from "react";
|
||||||
|
import { useQuery } from "@tanstack/react-query";
|
||||||
|
import { getProductReports } from "../../services/services";
|
||||||
|
import queryKeys from "../../services/queryKeys";
|
||||||
|
|
||||||
export default function ProductReportTable() {
|
export default function ProductReportTable() {
|
||||||
return (<>
|
|
||||||
|
const [page, setPage] = useState(0)
|
||||||
|
|
||||||
|
const {data, isFetching, isError, error} = useQuery({
|
||||||
|
queryKey: [...queryKeys.product_report, page],
|
||||||
|
queryFn: () => {
|
||||||
|
let reqData = {
|
||||||
|
token: localStorage.getItem('token'), // USER TOKEN
|
||||||
|
uid: localStorage.getItem('uid'), // USER UID
|
||||||
|
page
|
||||||
|
}
|
||||||
|
return getProductReports(reqData)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('DATA', data?.data)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-md-12 m-b-30">
|
<div className="col-md-12 m-b-30">
|
||||||
@@ -14,159 +35,171 @@ export default function ProductReportTable() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-lg-12">
|
{isFetching ?
|
||||||
<div className="card card-statistics">
|
<>
|
||||||
<div className="card-body">
|
<div className="col-12">
|
||||||
<div className="export-table-wrapper table-responsive">
|
<p className='text-mute'>Loading...</p>
|
||||||
<table id="export-table" className="table table-bordered">
|
</div>
|
||||||
<thead className="thead-light">
|
</>
|
||||||
<tr>
|
: isError ?
|
||||||
<th>Name</th>
|
<div className="col-12">
|
||||||
<th>Position</th>
|
<p className='text-danger'>{error?.message}</p>
|
||||||
<th>Office</th>
|
</div>
|
||||||
<th>Age</th>
|
:
|
||||||
<th>Start date</th>
|
<div className="col-lg-12">
|
||||||
<th>Salary</th>
|
<div className="card card-statistics">
|
||||||
</tr>
|
<div className="card-body">
|
||||||
</thead>
|
<div className="export-table-wrapper table-responsive">
|
||||||
<tbody>
|
<table id="export-table" className="table table-bordered">
|
||||||
<tr>
|
<thead className="thead-light">
|
||||||
<td>Tiger Nixon</td>
|
<tr>
|
||||||
<td>System Architect</td>
|
<th>Name</th>
|
||||||
<td>Edinburgh</td>
|
<th>Position</th>
|
||||||
<td>61</td>
|
<th>Office</th>
|
||||||
<td>2011/04/25</td>
|
<th>Age</th>
|
||||||
<td>$320,800</td>
|
<th>Start date</th>
|
||||||
</tr>
|
<th>Salary</th>
|
||||||
<tr>
|
</tr>
|
||||||
<td>Garrett Winters</td>
|
</thead>
|
||||||
<td>Accountant</td>
|
<tbody>
|
||||||
<td>Tokyo</td>
|
<tr>
|
||||||
<td>63</td>
|
<td>Tiger Nixon</td>
|
||||||
<td>2011/07/25</td>
|
<td>System Architect</td>
|
||||||
<td>$170,750</td>
|
<td>Edinburgh</td>
|
||||||
</tr>
|
<td>61</td>
|
||||||
<tr>
|
<td>2011/04/25</td>
|
||||||
<td>Ashton Cox</td>
|
<td>$320,800</td>
|
||||||
<td>Junior Technical Author</td>
|
</tr>
|
||||||
<td>San Francisco</td>
|
<tr>
|
||||||
<td>66</td>
|
<td>Garrett Winters</td>
|
||||||
<td>2009/01/12</td>
|
<td>Accountant</td>
|
||||||
<td>$86,000</td>
|
<td>Tokyo</td>
|
||||||
</tr>
|
<td>63</td>
|
||||||
<tr>
|
<td>2011/07/25</td>
|
||||||
<td>Cedric Kelly</td>
|
<td>$170,750</td>
|
||||||
<td>Senior Javascript Developer</td>
|
</tr>
|
||||||
<td>Edinburgh</td>
|
<tr>
|
||||||
<td>22</td>
|
<td>Ashton Cox</td>
|
||||||
<td>2012/03/29</td>
|
<td>Junior Technical Author</td>
|
||||||
<td>$433,060</td>
|
<td>San Francisco</td>
|
||||||
</tr>
|
<td>66</td>
|
||||||
<tr>
|
<td>2009/01/12</td>
|
||||||
<td>Airi Satou</td>
|
<td>$86,000</td>
|
||||||
<td>Accountant</td>
|
</tr>
|
||||||
<td>Tokyo</td>
|
<tr>
|
||||||
<td>33</td>
|
<td>Cedric Kelly</td>
|
||||||
<td>2008/11/28</td>
|
<td>Senior Javascript Developer</td>
|
||||||
<td>$162,700</td>
|
<td>Edinburgh</td>
|
||||||
</tr>
|
<td>22</td>
|
||||||
<tr>
|
<td>2012/03/29</td>
|
||||||
<td>Brielle Williamson</td>
|
<td>$433,060</td>
|
||||||
<td>Integration Specialist</td>
|
</tr>
|
||||||
<td>New York</td>
|
<tr>
|
||||||
<td>61</td>
|
<td>Airi Satou</td>
|
||||||
<td>2012/12/02</td>
|
<td>Accountant</td>
|
||||||
<td>$372,000</td>
|
<td>Tokyo</td>
|
||||||
</tr>
|
<td>33</td>
|
||||||
<tr>
|
<td>2008/11/28</td>
|
||||||
<td>Herrod Chandler</td>
|
<td>$162,700</td>
|
||||||
<td>Sales Assistant</td>
|
</tr>
|
||||||
<td>San Francisco</td>
|
<tr>
|
||||||
<td>59</td>
|
<td>Brielle Williamson</td>
|
||||||
<td>2012/08/06</td>
|
<td>Integration Specialist</td>
|
||||||
<td>$137,500</td>
|
<td>New York</td>
|
||||||
</tr>
|
<td>61</td>
|
||||||
<tr>
|
<td>2012/12/02</td>
|
||||||
<td>Rhona Davidson</td>
|
<td>$372,000</td>
|
||||||
<td>Integration Specialist</td>
|
</tr>
|
||||||
<td>Tokyo</td>
|
<tr>
|
||||||
<td>55</td>
|
<td>Herrod Chandler</td>
|
||||||
<td>2010/10/14</td>
|
<td>Sales Assistant</td>
|
||||||
<td>$327,900</td>
|
<td>San Francisco</td>
|
||||||
</tr>
|
<td>59</td>
|
||||||
<tr>
|
<td>2012/08/06</td>
|
||||||
<td>Colleen Hurst</td>
|
<td>$137,500</td>
|
||||||
<td>Javascript Developer</td>
|
</tr>
|
||||||
<td>San Francisco</td>
|
<tr>
|
||||||
<td>39</td>
|
<td>Rhona Davidson</td>
|
||||||
<td>2009/09/15</td>
|
<td>Integration Specialist</td>
|
||||||
<td>$205,500</td>
|
<td>Tokyo</td>
|
||||||
</tr>
|
<td>55</td>
|
||||||
<tr>
|
<td>2010/10/14</td>
|
||||||
<td>Sonya Frost</td>
|
<td>$327,900</td>
|
||||||
<td>Software Engineer</td>
|
</tr>
|
||||||
<td>Edinburgh</td>
|
<tr>
|
||||||
<td>23</td>
|
<td>Colleen Hurst</td>
|
||||||
<td>2008/12/13</td>
|
<td>Javascript Developer</td>
|
||||||
<td>$103,600</td>
|
<td>San Francisco</td>
|
||||||
</tr>
|
<td>39</td>
|
||||||
<tr>
|
<td>2009/09/15</td>
|
||||||
<td>Jena Gaines</td>
|
<td>$205,500</td>
|
||||||
<td>Office Manager</td>
|
</tr>
|
||||||
<td>London</td>
|
<tr>
|
||||||
<td>30</td>
|
<td>Sonya Frost</td>
|
||||||
<td>2008/12/19</td>
|
<td>Software Engineer</td>
|
||||||
<td>$90,560</td>
|
<td>Edinburgh</td>
|
||||||
</tr>
|
<td>23</td>
|
||||||
<tr>
|
<td>2008/12/13</td>
|
||||||
<td>Quinn Flynn</td>
|
<td>$103,600</td>
|
||||||
<td>Support Lead</td>
|
</tr>
|
||||||
<td>Edinburgh</td>
|
<tr>
|
||||||
<td>22</td>
|
<td>Jena Gaines</td>
|
||||||
<td>2013/03/03</td>
|
<td>Office Manager</td>
|
||||||
<td>$342,000</td>
|
<td>London</td>
|
||||||
</tr>
|
<td>30</td>
|
||||||
<tr>
|
<td>2008/12/19</td>
|
||||||
<td>Charde Marshall</td>
|
<td>$90,560</td>
|
||||||
<td>Regional Director</td>
|
</tr>
|
||||||
<td>San Francisco</td>
|
<tr>
|
||||||
<td>36</td>
|
<td>Quinn Flynn</td>
|
||||||
<td>2008/10/16</td>
|
<td>Support Lead</td>
|
||||||
<td>$470,600</td>
|
<td>Edinburgh</td>
|
||||||
</tr>
|
<td>22</td>
|
||||||
<tr>
|
<td>2013/03/03</td>
|
||||||
<td>Haley Kennedy</td>
|
<td>$342,000</td>
|
||||||
<td>Senior Marketing Designer</td>
|
</tr>
|
||||||
<td>London</td>
|
<tr>
|
||||||
<td>43</td>
|
<td>Charde Marshall</td>
|
||||||
<td>2012/12/18</td>
|
<td>Regional Director</td>
|
||||||
<td>$313,500</td>
|
<td>San Francisco</td>
|
||||||
</tr>
|
<td>36</td>
|
||||||
<tr>
|
<td>2008/10/16</td>
|
||||||
<td>Tatyana Fitzpatrick</td>
|
<td>$470,600</td>
|
||||||
<td>Regional Director</td>
|
</tr>
|
||||||
<td>London</td>
|
<tr>
|
||||||
<td>19</td>
|
<td>Haley Kennedy</td>
|
||||||
<td>2010/03/17</td>
|
<td>Senior Marketing Designer</td>
|
||||||
<td>$385,750</td>
|
<td>London</td>
|
||||||
</tr>
|
<td>43</td>
|
||||||
<tr>
|
<td>2012/12/18</td>
|
||||||
<td>Michael Silva</td>
|
<td>$313,500</td>
|
||||||
<td>Marketing Designer</td>
|
</tr>
|
||||||
<td>London</td>
|
<tr>
|
||||||
<td>66</td>
|
<td>Tatyana Fitzpatrick</td>
|
||||||
<td>2012/11/27</td>
|
<td>Regional Director</td>
|
||||||
<td>$198,500</td>
|
<td>London</td>
|
||||||
</tr>
|
<td>19</td>
|
||||||
|
<td>2010/03/17</td>
|
||||||
|
<td>$385,750</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Michael Silva</td>
|
||||||
|
<td>Marketing Designer</td>
|
||||||
|
<td>London</td>
|
||||||
|
<td>66</td>
|
||||||
|
<td>2012/11/27</td>
|
||||||
|
<td>$198,500</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
}
|
||||||
</div>
|
</div>
|
||||||
|
</>
|
||||||
</>)
|
)
|
||||||
}
|
}
|
||||||
@@ -36,46 +36,58 @@ export default function Reports() {
|
|||||||
<>
|
<>
|
||||||
<BreadcrumbComBS title='Reports' paths={['Dashboard', 'Reports']}/>
|
<BreadcrumbComBS title='Reports' paths={['Dashboard', 'Reports']}/>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
|
{isFetching ?
|
||||||
|
<>
|
||||||
|
<div className="col-12">
|
||||||
|
<p className='text-mute'>Loading...</p>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
: isError ?
|
||||||
|
<div className="col-12">
|
||||||
|
<p className='text-danger'>{error?.message}</p>
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div className="card card-statistics" style={{minHeight: '550px'}}>
|
||||||
<div className="card card-statistics" style={{minHeight: '550px'}}>
|
{/*<div className="card-header">*/}
|
||||||
{/*<div className="card-header">*/}
|
{/* <div className="card-heading">*/}
|
||||||
{/* <div className="card-heading">*/}
|
{/* <h4 className="card-title"> Tab vertical </h4>*/}
|
||||||
{/* <h4 className="card-title"> Tab vertical </h4>*/}
|
{/* </div>*/}
|
||||||
{/* </div>*/}
|
{/*</div>*/}
|
||||||
{/*</div>*/}
|
<div className="card-body">
|
||||||
<div className="card-body">
|
<div className="tab tab-vertical">
|
||||||
<div className="tab tab-vertical">
|
|
||||||
|
{/* <!-- Tabs --> */}
|
||||||
{/* <!-- Tabs --> */}
|
<ul className="nav nav-tabs" id="myTab" role="tablist">
|
||||||
<ul className="nav nav-tabs" id="myTab" role="tablist">
|
{sortedReportTopicList && sortedReportTopicList.map((item, index) => {
|
||||||
{sortedReportTopicList && sortedReportTopicList.map((item, index) => {
|
return (
|
||||||
return (
|
<li key={index} className="nav-item" role="presentation">
|
||||||
<li key={index} className="nav-item" role="presentation">
|
<a className={`nav-link ${index == 0 && 'active'}`} id={`tab-${item?.url}`} href="#" data-bs-toggle="tab" data-bs-target={`#content-${item?.url}`} type="button" role="tab">
|
||||||
<a className={`nav-link ${index == 0 && 'active'}`} id={`tab-${item?.url}`} href="#" data-bs-toggle="tab" data-bs-target={`#content-${item?.url}`} type="button" role="tab">
|
{item?.name}
|
||||||
{item?.name}
|
</a>
|
||||||
</a>
|
</li>
|
||||||
</li>
|
)
|
||||||
)
|
})}
|
||||||
})}
|
</ul>
|
||||||
</ul>
|
|
||||||
|
|
||||||
{/* <!-- Tab Content --> */}
|
{/* <!-- Tab Content --> */}
|
||||||
<div className="tab-content">
|
<div className="tab-content">
|
||||||
{sortedReportTopicList && sortedReportTopicList.map((item, index) => {
|
{sortedReportTopicList && sortedReportTopicList.map((item, index) => {
|
||||||
return (
|
return (
|
||||||
<div key={index} className={`tab-pane fade show ${index == 0 && 'active'}`} id={`content-${item?.url}`} role="tabpanel">
|
<div key={index} className={`tab-pane fade show ${index == 0 && 'active'}`} id={`content-${item?.url}`} role="tabpanel">
|
||||||
{renderedTable[item?.url]}
|
{renderedTable[item?.url]}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,28 @@
|
|||||||
import React from "react";
|
import React, { useState } from "react";
|
||||||
|
import { useQuery } from "@tanstack/react-query";
|
||||||
|
import { getSystemReports } from "../../services/services";
|
||||||
|
import queryKeys from "../../services/queryKeys";
|
||||||
|
|
||||||
export default function SystemReportTable() {
|
export default function SystemReportTable() {
|
||||||
return (<>
|
|
||||||
|
const [page, setPage] = useState(0)
|
||||||
|
|
||||||
|
const {data, isFetching, isError, error} = useQuery({
|
||||||
|
queryKey: [...queryKeys.system_report, page],
|
||||||
|
queryFn: () => {
|
||||||
|
let reqData = {
|
||||||
|
token: localStorage.getItem('token'), // USER TOKEN
|
||||||
|
uid: localStorage.getItem('uid'), // USER UID
|
||||||
|
page
|
||||||
|
}
|
||||||
|
return getSystemReports(reqData)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('DATA', data?.data)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-md-12 m-b-30">
|
<div className="col-md-12 m-b-30">
|
||||||
@@ -14,159 +35,171 @@ export default function SystemReportTable() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-lg-12">
|
{isFetching ?
|
||||||
<div className="card card-statistics">
|
<>
|
||||||
<div className="card-body">
|
<div className="col-12">
|
||||||
<div className="export-table-wrapper table-responsive">
|
<p className='text-mute'>Loading...</p>
|
||||||
<table id="export-table" className="table table-bordered">
|
</div>
|
||||||
<thead className="thead-light">
|
</>
|
||||||
<tr>
|
: isError ?
|
||||||
<th>Name</th>
|
<div className="col-12">
|
||||||
<th>Position</th>
|
<p className='text-danger'>{error?.message}</p>
|
||||||
<th>Office</th>
|
</div>
|
||||||
<th>Age</th>
|
:
|
||||||
<th>Start date</th>
|
<div className="col-lg-12">
|
||||||
<th>Salary</th>
|
<div className="card card-statistics">
|
||||||
</tr>
|
<div className="card-body">
|
||||||
</thead>
|
<div className="export-table-wrapper table-responsive">
|
||||||
<tbody>
|
<table id="export-table" className="table table-bordered">
|
||||||
<tr>
|
<thead className="thead-light">
|
||||||
<td>Tiger Nixon</td>
|
<tr>
|
||||||
<td>System Architect</td>
|
<th>Name</th>
|
||||||
<td>Edinburgh</td>
|
<th>Position</th>
|
||||||
<td>61</td>
|
<th>Office</th>
|
||||||
<td>2011/04/25</td>
|
<th>Age</th>
|
||||||
<td>$320,800</td>
|
<th>Start date</th>
|
||||||
</tr>
|
<th>Salary</th>
|
||||||
<tr>
|
</tr>
|
||||||
<td>Garrett Winters</td>
|
</thead>
|
||||||
<td>Accountant</td>
|
<tbody>
|
||||||
<td>Tokyo</td>
|
<tr>
|
||||||
<td>63</td>
|
<td>Tiger Nixon</td>
|
||||||
<td>2011/07/25</td>
|
<td>System Architect</td>
|
||||||
<td>$170,750</td>
|
<td>Edinburgh</td>
|
||||||
</tr>
|
<td>61</td>
|
||||||
<tr>
|
<td>2011/04/25</td>
|
||||||
<td>Ashton Cox</td>
|
<td>$320,800</td>
|
||||||
<td>Junior Technical Author</td>
|
</tr>
|
||||||
<td>San Francisco</td>
|
<tr>
|
||||||
<td>66</td>
|
<td>Garrett Winters</td>
|
||||||
<td>2009/01/12</td>
|
<td>Accountant</td>
|
||||||
<td>$86,000</td>
|
<td>Tokyo</td>
|
||||||
</tr>
|
<td>63</td>
|
||||||
<tr>
|
<td>2011/07/25</td>
|
||||||
<td>Cedric Kelly</td>
|
<td>$170,750</td>
|
||||||
<td>Senior Javascript Developer</td>
|
</tr>
|
||||||
<td>Edinburgh</td>
|
<tr>
|
||||||
<td>22</td>
|
<td>Ashton Cox</td>
|
||||||
<td>2012/03/29</td>
|
<td>Junior Technical Author</td>
|
||||||
<td>$433,060</td>
|
<td>San Francisco</td>
|
||||||
</tr>
|
<td>66</td>
|
||||||
<tr>
|
<td>2009/01/12</td>
|
||||||
<td>Airi Satou</td>
|
<td>$86,000</td>
|
||||||
<td>Accountant</td>
|
</tr>
|
||||||
<td>Tokyo</td>
|
<tr>
|
||||||
<td>33</td>
|
<td>Cedric Kelly</td>
|
||||||
<td>2008/11/28</td>
|
<td>Senior Javascript Developer</td>
|
||||||
<td>$162,700</td>
|
<td>Edinburgh</td>
|
||||||
</tr>
|
<td>22</td>
|
||||||
<tr>
|
<td>2012/03/29</td>
|
||||||
<td>Brielle Williamson</td>
|
<td>$433,060</td>
|
||||||
<td>Integration Specialist</td>
|
</tr>
|
||||||
<td>New York</td>
|
<tr>
|
||||||
<td>61</td>
|
<td>Airi Satou</td>
|
||||||
<td>2012/12/02</td>
|
<td>Accountant</td>
|
||||||
<td>$372,000</td>
|
<td>Tokyo</td>
|
||||||
</tr>
|
<td>33</td>
|
||||||
<tr>
|
<td>2008/11/28</td>
|
||||||
<td>Herrod Chandler</td>
|
<td>$162,700</td>
|
||||||
<td>Sales Assistant</td>
|
</tr>
|
||||||
<td>San Francisco</td>
|
<tr>
|
||||||
<td>59</td>
|
<td>Brielle Williamson</td>
|
||||||
<td>2012/08/06</td>
|
<td>Integration Specialist</td>
|
||||||
<td>$137,500</td>
|
<td>New York</td>
|
||||||
</tr>
|
<td>61</td>
|
||||||
<tr>
|
<td>2012/12/02</td>
|
||||||
<td>Rhona Davidson</td>
|
<td>$372,000</td>
|
||||||
<td>Integration Specialist</td>
|
</tr>
|
||||||
<td>Tokyo</td>
|
<tr>
|
||||||
<td>55</td>
|
<td>Herrod Chandler</td>
|
||||||
<td>2010/10/14</td>
|
<td>Sales Assistant</td>
|
||||||
<td>$327,900</td>
|
<td>San Francisco</td>
|
||||||
</tr>
|
<td>59</td>
|
||||||
<tr>
|
<td>2012/08/06</td>
|
||||||
<td>Colleen Hurst</td>
|
<td>$137,500</td>
|
||||||
<td>Javascript Developer</td>
|
</tr>
|
||||||
<td>San Francisco</td>
|
<tr>
|
||||||
<td>39</td>
|
<td>Rhona Davidson</td>
|
||||||
<td>2009/09/15</td>
|
<td>Integration Specialist</td>
|
||||||
<td>$205,500</td>
|
<td>Tokyo</td>
|
||||||
</tr>
|
<td>55</td>
|
||||||
<tr>
|
<td>2010/10/14</td>
|
||||||
<td>Sonya Frost</td>
|
<td>$327,900</td>
|
||||||
<td>Software Engineer</td>
|
</tr>
|
||||||
<td>Edinburgh</td>
|
<tr>
|
||||||
<td>23</td>
|
<td>Colleen Hurst</td>
|
||||||
<td>2008/12/13</td>
|
<td>Javascript Developer</td>
|
||||||
<td>$103,600</td>
|
<td>San Francisco</td>
|
||||||
</tr>
|
<td>39</td>
|
||||||
<tr>
|
<td>2009/09/15</td>
|
||||||
<td>Jena Gaines</td>
|
<td>$205,500</td>
|
||||||
<td>Office Manager</td>
|
</tr>
|
||||||
<td>London</td>
|
<tr>
|
||||||
<td>30</td>
|
<td>Sonya Frost</td>
|
||||||
<td>2008/12/19</td>
|
<td>Software Engineer</td>
|
||||||
<td>$90,560</td>
|
<td>Edinburgh</td>
|
||||||
</tr>
|
<td>23</td>
|
||||||
<tr>
|
<td>2008/12/13</td>
|
||||||
<td>Quinn Flynn</td>
|
<td>$103,600</td>
|
||||||
<td>Support Lead</td>
|
</tr>
|
||||||
<td>Edinburgh</td>
|
<tr>
|
||||||
<td>22</td>
|
<td>Jena Gaines</td>
|
||||||
<td>2013/03/03</td>
|
<td>Office Manager</td>
|
||||||
<td>$342,000</td>
|
<td>London</td>
|
||||||
</tr>
|
<td>30</td>
|
||||||
<tr>
|
<td>2008/12/19</td>
|
||||||
<td>Charde Marshall</td>
|
<td>$90,560</td>
|
||||||
<td>Regional Director</td>
|
</tr>
|
||||||
<td>San Francisco</td>
|
<tr>
|
||||||
<td>36</td>
|
<td>Quinn Flynn</td>
|
||||||
<td>2008/10/16</td>
|
<td>Support Lead</td>
|
||||||
<td>$470,600</td>
|
<td>Edinburgh</td>
|
||||||
</tr>
|
<td>22</td>
|
||||||
<tr>
|
<td>2013/03/03</td>
|
||||||
<td>Haley Kennedy</td>
|
<td>$342,000</td>
|
||||||
<td>Senior Marketing Designer</td>
|
</tr>
|
||||||
<td>London</td>
|
<tr>
|
||||||
<td>43</td>
|
<td>Charde Marshall</td>
|
||||||
<td>2012/12/18</td>
|
<td>Regional Director</td>
|
||||||
<td>$313,500</td>
|
<td>San Francisco</td>
|
||||||
</tr>
|
<td>36</td>
|
||||||
<tr>
|
<td>2008/10/16</td>
|
||||||
<td>Tatyana Fitzpatrick</td>
|
<td>$470,600</td>
|
||||||
<td>Regional Director</td>
|
</tr>
|
||||||
<td>London</td>
|
<tr>
|
||||||
<td>19</td>
|
<td>Haley Kennedy</td>
|
||||||
<td>2010/03/17</td>
|
<td>Senior Marketing Designer</td>
|
||||||
<td>$385,750</td>
|
<td>London</td>
|
||||||
</tr>
|
<td>43</td>
|
||||||
<tr>
|
<td>2012/12/18</td>
|
||||||
<td>Michael Silva</td>
|
<td>$313,500</td>
|
||||||
<td>Marketing Designer</td>
|
</tr>
|
||||||
<td>London</td>
|
<tr>
|
||||||
<td>66</td>
|
<td>Tatyana Fitzpatrick</td>
|
||||||
<td>2012/11/27</td>
|
<td>Regional Director</td>
|
||||||
<td>$198,500</td>
|
<td>London</td>
|
||||||
</tr>
|
<td>19</td>
|
||||||
|
<td>2010/03/17</td>
|
||||||
|
<td>$385,750</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Michael Silva</td>
|
||||||
|
<td>Marketing Designer</td>
|
||||||
|
<td>London</td>
|
||||||
|
<td>66</td>
|
||||||
|
<td>2012/11/27</td>
|
||||||
|
<td>$198,500</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
}
|
||||||
</div>
|
</div>
|
||||||
|
</>
|
||||||
</>)
|
)
|
||||||
}
|
}
|
||||||
@@ -13,6 +13,9 @@ const queryKeys = {
|
|||||||
profile_data: ['profile_data'],
|
profile_data: ['profile_data'],
|
||||||
my_files: ['my_files'],
|
my_files: ['my_files'],
|
||||||
topics: ['topics'],
|
topics: ['topics'],
|
||||||
|
payment_report: ['payment_report'],
|
||||||
|
product_report: ['product_report'],
|
||||||
|
system_report: ['system_report'],
|
||||||
|
|
||||||
dashboard: ['dashboard'],
|
dashboard: ['dashboard'],
|
||||||
topBar: ['top-bar'],
|
topBar: ['top-bar'],
|
||||||
|
|||||||
@@ -297,6 +297,30 @@ export const getReportsTopicsList = (reqData) => {
|
|||||||
return postAuxEnd(`/panel/report/topics`, postData, false)
|
return postAuxEnd(`/panel/report/topics`, postData, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION TO GET PAYMENT REPORTS
|
||||||
|
export const getPaymentReports = (reqData) => {
|
||||||
|
let postData = {
|
||||||
|
...reqData,
|
||||||
|
}
|
||||||
|
return postAuxEnd(`/panel/report/item/payment`, postData, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION TO GET PRODUCT REPORTS
|
||||||
|
export const getProductReports = (reqData) => {
|
||||||
|
let postData = {
|
||||||
|
...reqData,
|
||||||
|
}
|
||||||
|
return postAuxEnd(`/panel/report/item/product`, postData, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION TO GET SYSTEM REPORTS
|
||||||
|
export const getSystemReports = (reqData) => {
|
||||||
|
let postData = {
|
||||||
|
...reqData,
|
||||||
|
}
|
||||||
|
return postAuxEnd(`/panel/report/item/system`, postData, false)
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION TO GET COMMON PRACTICE
|
// FUNCTION TO GET COMMON PRACTICE
|
||||||
export const getCommonPractice = (reqData) => {
|
export const getCommonPractice = (reqData) => {
|
||||||
let postData = {
|
let postData = {
|
||||||
|
|||||||
Reference in New Issue
Block a user