complete transactions page

This commit is contained in:
Alihaghighattalab
2024-08-11 11:01:10 +03:30
parent 7e18228d46
commit f552eee230
13 changed files with 118 additions and 30 deletions
+23
View File
@@ -18,5 +18,28 @@
"install_date": "1403/05/01 18:26:43", "install_date": "1403/05/01 18:26:43",
"install_iemi": "1403/05/31 10:17:24" "install_iemi": "1403/05/31 10:17:24"
} }
],
"transactions": [
{
"status": true,
"amount": "1558900",
"request_date": "1403/4/30 18:26:43",
"traking_number": "930482",
"deposit_date": "1403/4/31"
},
{
"status": false,
"amount": "1558900",
"request_date": "1403/4/30 18:26:43",
"traking_number": "930482",
"deposit_date": "1403/4/31"
},
{
"status": true,
"amount": "1558900",
"request_date": "1403/4/30 18:26:43",
"traking_number": "930482",
"deposit_date": "1403/4/31"
}
] ]
} }
+3 -2
View File
@@ -1,18 +1,19 @@
import { createColumnHelper } from "@tanstack/react-table"; import { createColumnHelper } from "@tanstack/react-table";
import { ShieldCross, ShieldTick } from "iconsax-react";
type ColumnConfig = { type ColumnConfig = {
accessor: any; accessor: any;
header: string; header: string;
enableSorting?: boolean; enableSorting?: boolean;
cellRenderer?: (info: any) => JSX.Element;
}; };
export const createColumns = <T,>(columnConfigs: ColumnConfig[]) => { export const createColumns = <T,>(columnConfigs: ColumnConfig[]) => {
const columnHelper = createColumnHelper<T>(); const columnHelper = createColumnHelper<T>();
return columnConfigs.map(config => return columnConfigs.map(config =>
columnHelper.accessor(config.accessor, { columnHelper.accessor(config.accessor, {
header: () => config.header, header: () => config.header,
cell: (info) => config.header === "وضعیت" ? info.getValue() ? <ShieldTick color="#11212D" className="flex w-full"/> : <ShieldCross color="#E51717" className="flex w-full"/> : info.getValue(), cell: (info) => config.cellRenderer ? config.cellRenderer(info) : info.getValue(),
enableSorting: config.enableSorting ?? true, enableSorting: config.enableSorting ?? true,
}) })
); );
@@ -1,7 +1,7 @@
import { useQuery } from "@tanstack/react-query" import { useQuery } from "@tanstack/react-query"
import { installationReportsCol } from "../../utility/reports" import { installationReportsCol } from "../../utility/reports"
import { Table } from "../common/table" import { Table } from "../common/table"
import { getReportsList } from "../../services/api" import { getReportsList } from "../../services/api/reports"
import { useState } from "react" import { useState } from "react"
import { SortingState } from "@tanstack/react-table" import { SortingState } from "@tanstack/react-table"
+20
View File
@@ -0,0 +1,20 @@
import { useState } from "react"
import { Table } from "../common/table"
import { SortingState } from "@tanstack/react-table"
import { transactionsCol } from "../../utility/transactions"
import { useQuery } from "@tanstack/react-query"
import { getTransactionsList } from "../../services/api/transactions"
export const Transactions = () => {
const [sorting, setSorting] = useState<SortingState>([])
const { data, isLoading } = useQuery({
queryKey: ["transactions-list"],
queryFn: getTransactionsList
})
if (isLoading) return <p>LOADING ....</p>
return (
<Table sorting={sorting} setSorting={setSorting} columns={transactionsCol} data={data?.data} />
)
}
+7
View File
@@ -0,0 +1,7 @@
import { Transactions } from "../../components/transactions"
export const TransactionsPage = () => {
return (
<Transactions />
)
}
+5
View File
@@ -13,6 +13,7 @@ import { MyAcccount } from "../pages/dashboard/my-account";
import { Wallet } from "../pages/dashboard/wallet"; import { Wallet } from "../pages/dashboard/wallet";
import { ManagementBankAccountPage } from "../pages/dashboard/management-bank-account"; import { ManagementBankAccountPage } from "../pages/dashboard/management-bank-account";
import { InstallationReportsPage } from "../pages/dashboard/installation-reports"; import { InstallationReportsPage } from "../pages/dashboard/installation-reports";
import { TransactionsPage } from "../pages/dashboard/transactions";
export const router = createBrowserRouter([ export const router = createBrowserRouter([
@@ -40,6 +41,10 @@ export const router = createBrowserRouter([
path: "installation-reports", path: "installation-reports",
element: <InstallationReportsPage /> element: <InstallationReportsPage />
}, },
{
path: "transactions",
element: <TransactionsPage />
},
] ]
}, },
{ {
+4
View File
@@ -0,0 +1,4 @@
import { TransactionsInterface } from "../../types";
import { axiosInstance } from "../axios";
export const getTransactionsList = () => axiosInstance.get<TransactionsInterface>("/transactions")
+14
View File
@@ -108,4 +108,18 @@ export interface installationReportsInterface {
imei_number: string imei_number: string
install_date: string install_date: string
install_iemi: string install_iemi: string
}
export interface colConfig {
accessor: string
header: string
cellRenderer?: (info: any) => JSX.Element;
}
export interface TransactionsInterface {
status: boolean
amount: string
request_date: string
traking_number: string
deposit_date: string
} }
-18
View File
@@ -25,15 +25,6 @@ const banks: BanksInterface[] | [] = [
"636214" "636214"
] ]
}, },
{
name: "bank_markazi",
name_farsi: "بانک مرکزی",
icon: "Bank_Markazi.svg",
iban_nbc: "010",
pan_iin: [
"636795"
]
},
{ {
name: "dey", name: "dey",
name_farsi: "دی", name_farsi: "دی",
@@ -166,15 +157,6 @@ const banks: BanksInterface[] | [] = [
"170019" "170019"
] ]
}, },
{
name: "noor",
name_farsi: "نور",
icon: "Noor.svg",
iban_nbc: "080",
pan_iin: [
"507677"
]
},
{ {
name: "parsian", name: "parsian",
name_farsi: "پارسیان", name_farsi: "پارسیان",
+8 -8
View File
@@ -1,18 +1,18 @@
import { ShieldCross, ShieldTick } from "iconsax-react";
import { createColumns } from "../components/common/create-col"; import { createColumns } from "../components/common/create-col";
import { colConfig } from "../types";
type colConfig = {
accessor: string
header: string
}
const columnConfigs: colConfig[] | [] = [ const columnConfigs: colConfig[] | [] = [
{ accessor: "status", header: "وضعیت" }, {
accessor: "status", header: "وضعیت",
cellRenderer: (info) => info.getValue() ? <ShieldTick color="#11212D" className="flex w-full" /> : <ShieldCross color="#E51717" className="flex w-full" />
},
{ accessor: "dollar", header: "دلار" }, { accessor: "dollar", header: "دلار" },
{ accessor: "score", header: "امتیاز" }, { accessor: "score", header: "امتیاز" },
{ accessor: "device_model", header: "مدل دستگاه" }, { accessor: "device_model", header: "مدل دستگاه" },
{ accessor: "imei_number", header: "شماره IMEI" }, { accessor: "imei_number", header: "شماره IMEI" },
{ accessor: "install_date", header: "تاریخ نصب" }, { accessor: "install_date", header: "تاریخ نصب", cellRenderer: (info) => info.getValue() && <p style={{ direction: "ltr" }}>{info.getValue()}</p> },
{ accessor: "install_iemi", header: "تاریخ ثبت IMEI" }, { accessor: "install_iemi", header: "تاریخ ثبت IMEI", cellRenderer: (info) => info.getValue() && <p style={{ direction: "ltr" }}>{info.getValue()}</p> },
]; ];
export const installationReportsCol = createColumns<any>(columnConfigs); export const installationReportsCol = createColumns<any>(columnConfigs);
+8 -1
View File
@@ -1,4 +1,4 @@
import { CardPos, DocumentText, Home2, ReceiptItem, SmartCar, StarSlash, UserSquare, Wallet } from "iconsax-react"; import { CardPos, Cup, DocumentText, Home2, ReceiptItem, SmartCar, StarSlash, UserSquare, Wallet } from "iconsax-react";
import { SidebarInterface } from "../types"; import { SidebarInterface } from "../types";
@@ -52,6 +52,13 @@ export const sidebarItems: SidebarInterface[] | [] = [
icon: <StarSlash color="#777577" className="size-[27px]" variant="Bold" />, icon: <StarSlash color="#777577" className="size-[27px]" variant="Bold" />,
activeIcon: <StarSlash color="#11212D" className="size-[27px]" variant="Bold" /> activeIcon: <StarSlash color="#11212D" className="size-[27px]" variant="Bold" />
}, },
{
name: "awards",
title: "جوایز",
route: "/awards",
icon: <Cup color="#777577" className="size-[27px]" variant="Bold" />,
activeIcon: <Cup color="#11212D" className="size-[27px]" variant="Bold" />
},
{ {
name: "subscription-report", name: "subscription-report",
title: "گزارش تمدید اشتراک اینترنتی", title: "گزارش تمدید اشتراک اینترنتی",
+25
View File
@@ -0,0 +1,25 @@
import { ClipboardClose, ClipboardTick } from "iconsax-react";
import { createColumns } from "../components/common/create-col";
import { colConfig } from "../types";
import { filterNumber } from "./status";
const columnConfigs: colConfig[] | [] = [
{
accessor: "status", header: "وضعیت",
cellRenderer: (info) => info.getValue() ? <ClipboardTick color="#11212D" className="flex w-full" /> : <ClipboardClose color="#E51717" className="flex w-full" />
},
{
accessor: "amount", header: "مبلغ",
cellRenderer: (info) => info.getValue() && <div className="w-full justify-center flex flex-row gap-2 items-end">
<p className="text-primary-text-color text-base font-normal">{filterNumber(info.getValue())}</p>
<p className="text-primary-text-color font-normal text-xs">تومان</p>
</div>
},
{ accessor: "request_date", header: "تاریخ درخواست", cellRenderer: (info) => info.getValue() && <p style={{direction: "ltr"}}>{info.getValue()}</p> },
{ accessor: "traking_number", header: "شماره پیگیری" },
{ accessor: "deposit_date", header: "تاریخ واریز" },
];
export const transactionsCol = createColumns<any>(columnConfigs);