diff --git a/Dockerfile b/Dockerfile index f30921b..77546f6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,9 +27,9 @@ COPY . . #RUN npm run build - +RUN npm run start # CMD [ "npm", "run", "preview" ] ##CMD [ "npm", "run", "start" ,"--", "--host"] -CMD /bin/sh ./run.sh +#CMD /bin/sh ./run.sh diff --git a/src/RouteLinks.js b/src/RouteLinks.js index ab5b7ab..d623096 100644 --- a/src/RouteLinks.js +++ b/src/RouteLinks.js @@ -6,6 +6,7 @@ const RouteLinks = { subscriptionDetails: '/subscription-view/*', subscriptions: '/subscriptions', billings: '/billings', + files_uploads: '/files-uploads', recentSignup: '/recent-signup', loansPage: '/loans', transactionsPage: '/transactions', diff --git a/src/SiteRoutes.jsx b/src/SiteRoutes.jsx index 3400898..6ec2d79 100644 --- a/src/SiteRoutes.jsx +++ b/src/SiteRoutes.jsx @@ -22,7 +22,8 @@ import ProductTemplatePage from "./pages/ProductTemplatePage"; import CustomTemplatePage from "./pages/CustomTemplatePage"; import SubscriptionDetailsPage from "./pages/SubscriptionDetailsPage"; import CountrySettingsPage from "./pages/CountrySettingsPage"; -import ProductViewPage from "./pages/ProductViewPage"; // TRANSACTION DETAILS PAGE +import ProductViewPage from "./pages/ProductViewPage"; +import FilesUploadPage from "./pages/FilesUploadPage"; // TRANSACTION DETAILS PAGE // const Home = lazy(() => import('./pages/Home')); @@ -43,6 +44,8 @@ export default function SiteRoutes() { }/> {`*/PRODUCTS VIEW PAGE*/`} }/> {`*/ADMIN USERS PAGE*/`} + }/> {`*/FILES PAGE*/`} + }/> {`*/PRODUCTS TEMPLATE PAGE*/`} }/> {`*/PRODUCTS TEMPLATE PAGE*/`} }/> {`*/CUSTOM TEMPLATES PAGE*/`} diff --git a/src/components/file_uploads/FileUploadCom.jsx b/src/components/file_uploads/FileUploadCom.jsx new file mode 100644 index 0000000..4fba03a --- /dev/null +++ b/src/components/file_uploads/FileUploadCom.jsx @@ -0,0 +1,153 @@ +import { useState } from 'react' +import { useQuery } from '@tanstack/react-query' +import queryKeys from '../../services/queryKeys' + +import BreadcrumbCom from '../breadcrumb/BreadcrumbCom' +import TablePaginatedWrapper from '../tableWrapper/TablePaginatedWrapper' +import Icons from '../Icons' +import { getBillings } from '../../services/siteServices' +import getDateTimeFromDateString from '../../helpers/getDateTimeFromDateString'; +// import formatNumber from '../../helpers/formatNumber' +// import Avatar from '../../assets/user_avatar.jpg' + + +export default function FileUploadCom() { + + 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.billings, page, willFilter], + queryFn: () => { + const filterData = filter?.type ? {[filter?.type]: filter.id} : {} + const reqData = { + page, + ...filterData + } + return getBillings(reqData) + }, + staleTime: 0 //0 mins + }) + const billingData = data?.data?.payments // BILLINGS LIST + const pagination = data?.data?.pagination + + return ( +
+ + +
+ { isError ? +

{error?.message}

+ : + <> + {/* filter section */} +
+ +
+ +
+
+ +
+ +
+ {/* end of filter section */} + + + {({ data }) => ( + <> + + + + + + + + + + + + {(data && data.length > 0) ? data?.map((item, index) => ( + + + + + + + + )) + : + + + + } + +
+ Added + + Option Name + + Member ID + + Amount + + Status +
+
+
+
{getDateTimeFromDateString(item?.added)}
+
+
+
+
+
{item?.option_name}
+
+
+
+
{item?.member_id}
+
+
+
+
${item?.amount}
+ {/*
{item?.external_url}
*/} +
+
+
+
{item?.status}
+
+
+
+ No Record Found +
+
+ + )} +
+ + } +
+
+ ) +} \ No newline at end of file diff --git a/src/components/layouts/aside/DashboardAside.jsx b/src/components/layouts/aside/DashboardAside.jsx index 8fb787b..6fcbdff 100644 --- a/src/components/layouts/aside/DashboardAside.jsx +++ b/src/components/layouts/aside/DashboardAside.jsx @@ -1,5 +1,5 @@ import {useLocation} from 'react-router-dom' -import { useSelector } from "react-redux"; +import {useSelector} from "react-redux"; import RouteLinks from "../../../RouteLinks"; import DummyLogo from "../../DummyLogo"; import MainBtn from "../../MainBtn"; @@ -17,7 +17,7 @@ export default function DashboardAside() { const {setLogoutModal, handleActiveMenu} = GeneralLayoutContext() - const {userDetails:{username, email}} = useSelector((state) => state.userDetails) // GETS LOGGED IN USER + const {userDetails: {username, email}} = useSelector((state) => state.userDetails) // GETS LOGGED IN USER // const {role}= userDetails return ( @@ -156,6 +156,7 @@ const asideNavLinks = [ {name: 'Provisions', status: 1, icon: 'dot', to: RouteLinks.subscriptions}, {name: 'Customers', status: 1, icon: 'dot', to: RouteLinks.customerPage}, {name: 'Billings', status: 1, icon: 'dot', to: RouteLinks.billings}, + {name: 'Files & Uploads', status: 1, icon: 'dot', to: RouteLinks.files_uploads}, { name: 'Configurations', status: 1, icon: 'arrow-right', subLinks: [ {name: 'Country', status: 1, icon: 'dot', to: RouteLinks.countrySettings}, diff --git a/src/pages/FilesUploadPage.jsx b/src/pages/FilesUploadPage.jsx new file mode 100644 index 0000000..c20940c --- /dev/null +++ b/src/pages/FilesUploadPage.jsx @@ -0,0 +1,8 @@ +import React from 'react' +import FileUploadCom from "../components/file_uploads/FileUploadCom"; + +export default function FilesUploadPage() { + return ( + + ) +}