feat(submissions): Implement submissions page with paginated table

This commit introduces a new page for users to view their submissions in a structured and paginated table. This allows users to easily track their submission history and access key details.

The main changes include:
- A new page at `/submissions` to display the submissions list.
- A `SubmissionsTable` component to render submission data, including title, country, status, and a link to the submission URL.
- Integration of `react-paginate` to handle navigation through large sets of data.
- A new `useSubmissions` custom hook using TanStack Query for efficient, paginated data fetching from the API.
- Addition of the `currency-symbol-map` dependency to display prices with the correct currency symbol.
This commit is contained in:
AmirReza Jamali
2025-09-18 16:52:46 +03:30
parent 2f2114eba9
commit e1898bf259
24 changed files with 411 additions and 86 deletions
+5 -1
View File
@@ -1,13 +1,17 @@
import api from "../axios";
import { API_ENDPOINTS } from "../endpoints";
import { ApiResponse } from "../types";
import {
CreateCustomerCredentials,
CustomerListResponseSchema,
TAssignCustomerToCompanyCredentials,
TCustomersListResponse,
} from "../types/Customers";
export const customersService = {
getCustomers: async (params?: Record<string, any>) => {
getCustomers: async (
params?: Record<string, any>,
): Promise<ApiResponse<TCustomersListResponse>> => {
try {
const response = await api.get(API_ENDPOINTS.CUSTOMERS.READ_ALL, {
params,
+15
View File
@@ -0,0 +1,15 @@
import api from "../axios";
import { API_ENDPOINTS } from "../endpoints";
export const flagsService = {
getCountryFlag: async (countryCode: string) => {
try {
const response = await api.get(API_ENDPOINTS.FLAGS(countryCode));
return response.data;
} catch (error) {
console.error("ERROR caught in Flags Service", error);
throw error;
}
},
};
+12 -1
View File
@@ -1,7 +1,7 @@
import api from "../axios";
import { API_ENDPOINTS } from "../endpoints";
import { ApiResponse } from "../types";
import { TTenderResponse } from "../types/Tenders";
import { TTenderDetails, TTenderResponse } from "../types/Tenders";
export const tendersService = {
tendersList: async (
@@ -14,4 +14,15 @@ export const tendersService = {
throw error;
}
},
tenderDetails: async (id: string): Promise<ApiResponse<TTenderDetails>> => {
try {
return (await api.get(API_ENDPOINTS.TENDERS.DETAILS(id))).data;
} catch (error) {
console.error(
"ERROR caught in Tender Service => tender details: ",
error,
);
throw error;
}
},
};