Edit update

This commit is contained in:
2024-08-20 12:19:02 +05:30
parent dfbc1ad338
commit 50f87869be
8 changed files with 1424 additions and 751 deletions

2071
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,12 +9,11 @@ import { Input } from "@chakra-ui/react";
// };
export const formatCurrency = (value) => {
if (!value) return '';
const [integer, decimal] = value?.split('.');
const formattedInteger = integer?.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
if (value === undefined || value === null) return ''; // Handle undefined or null values
const [integer, decimal] = String(value).split('.'); // Convert value to string before splitting
const formattedInteger = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return decimal ? `${formattedInteger}.${decimal}` : formattedInteger;
};
const CurrencyInput = forwardRef(({ value, onChange, ...props }, ref) => {

View File

@@ -36,7 +36,6 @@ import { useGetDepositRequestQuery } from "../../../Services/deposit.request.ser
import { current } from "@reduxjs/toolkit";
import { TABLE_PAGINATION } from "../../../Constants/Paginations";
import { removeTrailingZeros } from "../../../Constants/Constants";
import { formatCurrency } from "../../../Components/CurrencyInput";
const formatDate = (date) => new Date(date).toLocaleDateString(); // Simple date formatter
@@ -179,7 +178,9 @@ const DepositRequest = () => {
"Amount in Investor currency": (
<Box display={'flex'} justifyContent={'end'} w={"100px"} isTruncated={true}>
<Text as={"span"} color={"teal.900"}>
{formatCurrency(removeTrailingZeros(item?.investorAmount))} <Badge ms={1} colorScheme="green">{item?.currencyCode}</Badge>
{/* {formatCurrency(removeTrailingZeros(item?.investorAmount))} */}
{parseFloat(item?.investorAmount||0).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
<Badge ms={1} colorScheme="green">{item?.currencyCode}</Badge>
</Text>
</Box>
),

View File

@@ -81,7 +81,7 @@ const ViewIOTable = () => {
"Goal Amount",
"Holding Period",
"IO Status",
// "Preview",
"Preview",
"Action",
];

View File

@@ -41,8 +41,8 @@ import Cancle from "./HeaderModal/Cancle";
import { AddIcon } from "@chakra-ui/icons";
import { GrGallery } from "react-icons/gr";
import Loader01 from "../../../Components/Loaders/Loader01";
import { formatCurrency } from "../../../Components/CurrencyInput";
import { removeTrailingZeros } from "../../../Constants/Constants";
// import { formatCurrency } from "../../../Components/CurrencyInput";
// import { removeTrailingZeros } from "../../../Constants/Constants";
const ViewIOdataHeader = ({data, isLoading}) => {
const params = useParams();
@@ -294,7 +294,8 @@ const filteredMenu = menu?.filter(item => apiTransactionTitles?.includes(item.id
IO MV
</Text>
<Text as={"span"} fontSize={"sm"} fontWeight={"500"}>
{IODetails?.ioNAV ? formatCurrency(removeTrailingZeros(IODetails?.ioNAV)) : "00.00"}
{/* {IODetails?.ioNAV ? formatCurrency(removeTrailingZeros(IODetails?.ioNAV)) : "00.00"} */}
{parseFloat(IODetails?.ioNAV||0).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
</Text>
</Box>
@@ -303,7 +304,8 @@ const filteredMenu = menu?.filter(item => apiTransactionTitles?.includes(item.id
IO cash
</Text>
<Text as={"span"} fontSize={"sm"} fontWeight={"500"}>
{IODetails?.ioCash ? formatCurrency(removeTrailingZeros(IODetails?.ioCash)) : "00.00"}
{/* {IODetails?.ioCash ? formatCurrency(removeTrailingZeros(IODetails?.ioCash)) : "00.00"} */}
{parseFloat(IODetails?.ioCash||0).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
</Text>
</Box>
@@ -312,7 +314,8 @@ const filteredMenu = menu?.filter(item => apiTransactionTitles?.includes(item.id
IO NAV
</Text>
<Text as={"span"} fontSize={"sm"} fontWeight={"500"}>
{IODetails?.ioMVNAV ? formatCurrency(removeTrailingZeros(IODetails?.ioMVNAV)) : "00.00"}
{/* {IODetails?.ioMVNAV ? formatCurrency(removeTrailingZeros(IODetails?.ioMVNAV)) : "00.00"} */}
{parseFloat(IODetails?.ioMVNAV||0).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
</Text>
</Box>

View File

@@ -263,7 +263,8 @@ const ViewIOdetails = () => {
{
label: "Goal Amount",
placeHolder: "$00.00",
value: IObyID?.data?.goalAmount ? formatCurrency(removeTrailingZeros(IObyID?.data?.goalAmount)) : "---",
value: IObyID?.data?.goalAmount?parseFloat(IObyID?.data?.goalAmount||0).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) : "---",
name: "goalAmount",
type: "number",
isRequired: true,

View File

@@ -3,7 +3,7 @@ import axios from "axios";
// Create an Axios instance for API calls
export const api = axios.create({
// baseURL: `https://tanami.betadelivery.com/api/v1`,
baseURL: `https://admin.tanami.betadelivery.com/api/v1`, // Replace with your API base URL
baseURL: `https://sprint4.tanami.betadelivery.com/api/v1`, // Replace with your API base URL
timeout: 10000, // Adjust timeout as needed
headers: {
"Content-Type": "application/json",

View File

@@ -1,8 +1,8 @@
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
// Define a base query function with RTK Query
// export const baseQuery = fetchBaseQuery({
// baseUrl: 'https://admin.tanami.betadelivery.com/api/v1',
// baseUrl: 'https://sprint4.tanami.betadelivery.com/api/v1',
// prepareHeaders: (headers) => {
// const token = localStorage.getItem('accessToken');
// if (token) {
@@ -12,17 +12,14 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
// },
// });
// Define a base query function with token refresh logic
export const baseQuery = async (args, api, extraOptions) => {
export const baseQuery = async (args, api, extraOptions) => {
let result = await fetchBaseQuery({
baseUrl: 'https://admin.tanami.betadelivery.com/api/v1',
baseUrl: "https://sprint4.tanami.betadelivery.com/api/v1",
prepareHeaders: (headers) => {
const token = localStorage.getItem('accessToken');
const token = localStorage.getItem("accessToken");
if (token) {
headers.set('x-auth-token', token);
headers.set("x-auth-token", token);
}
return headers;
},
@@ -30,38 +27,47 @@ export const baseQuery = async (args, api, extraOptions) => {
if (result.error && result.error.status === 401) {
// Handle token refresh
const refreshToken = localStorage.getItem('refreshToken');
const refreshToken = localStorage.getItem("refreshToken");
if (refreshToken) {
try {
const refreshResult = await fetchBaseQuery({
baseUrl: 'https://admin.tanami.betadelivery.com/api/v1',
})({
url: '/auth/user/regenerate-token',
method: 'POST',
body: { refreshToken },
}, api, extraOptions);
baseUrl: "https://sprint4.tanami.betadelivery.com/api/v1",
})(
{
url: "/auth/user/regenerate-token",
method: "POST",
body: { refreshToken },
},
api,
extraOptions
);
if (refreshResult.data) {
// Save new tokens
localStorage.setItem('accessToken', refreshResult.data.access.token);
localStorage.setItem('refreshToken', refreshResult.data.refresh.token);
localStorage.setItem('refreshTokenExp', refreshResult.data.refresh.expires);
localStorage.setItem("accessToken", refreshResult.data.access.token);
localStorage.setItem(
"refreshToken",
refreshResult.data.refresh.token
);
localStorage.setItem(
"refreshTokenExp",
refreshResult.data.refresh.expires
);
// Retry the original request with the new token
result = await fetchBaseQuery({
baseUrl: 'https://admin.tanami.betadelivery.com/api/v1',
baseUrl: "https://sprint4.tanami.betadelivery.com/api/v1",
prepareHeaders: (headers) => {
const token = localStorage.getItem('accessToken');
const token = localStorage.getItem("accessToken");
if (token) {
headers.set('x-auth-token', token);
headers.set("x-auth-token", token);
}
return headers;
},
})(args, api, extraOptions);
}
} catch (err) {
console.error('Failed to refresh token:', err);
console.error("Failed to refresh token:", err);
// Handle refresh failure (e.g., redirect to login)
}
}
@@ -72,32 +78,32 @@ export const baseQuery = async (args, api, extraOptions) => {
// Create an RTK Query API slice
export const apiSlice = createApi({
reducerPath: 'api',
reducerPath: "api",
baseQuery: baseQuery,
endpoints: (builder) => ({
login: builder.mutation({
query: (credentials) => ({
url: '/auth/admin',
method: 'POST',
url: "/auth/admin",
method: "POST",
body: credentials,
}),
async onQueryStarted(arg, { dispatch, queryFulfilled }) {
try {
const { data } = await queryFulfilled;
// Store tokens in local storage
localStorage.setItem('accessToken', data?.data?.access?.token) ;
localStorage.setItem('refreshToken', data?.data?.refresh?.token);
localStorage.setItem("accessToken", data?.data?.access?.token);
localStorage.setItem("refreshToken", data?.data?.refresh?.token);
// localStorage.setItem('refreshTokenExp', data?.data?.refresh?.expires);
localStorage.setItem('accessTokenExp', data?.data?.access?.expires);
localStorage.setItem("accessTokenExp", data?.data?.access?.expires);
} catch (error) {
console.error('Login failed:', error);
console.error("Login failed:", error);
}
},
}),
refreshToken: builder.mutation({
query: (refreshToken) => ({
url: '/auth/user/regenerate-token',
method: 'POST',
url: "/auth/user/regenerate-token",
method: "POST",
body: { refreshToken },
}),
}),