diff --git a/.env b/.env index 333327d..9b5f3f2 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ -REACT_APP_BASE_URL="https://rubix.betadelivery.com/api" -REACT_APP_IMAGE_URL="https://rubix.betadelivery.com/" -REACT_APP_ENVIRONMENT="development" \ No newline at end of file +VITE_API_BASE_URL="https://rubix.betadelivery.com/api" +VITE_API_IMAGE_URL="https://rubix.betadelivery.com" +VITE_API_ENVIRONMENT="development" \ No newline at end of file diff --git a/src/Components/Banner/BannerEdit.jsx b/src/Components/Banner/BannerEdit.jsx index de9a1fd..54d9879 100644 --- a/src/Components/Banner/BannerEdit.jsx +++ b/src/Components/Banner/BannerEdit.jsx @@ -37,6 +37,7 @@ import Header from "../../Components/Header"; import CommunityBannerCard from "../../Pages/Community/CommunityBannerCard"; import BannerMainCard from "./BannerMainCard"; import ToastBox from "../ToastBox"; +import { IMAGE_URI } from "../../Constants/Paginations"; const BannerEdit = ({isLoading, data, updateBanner, navigateTo, refetch, center}) => { const { id } = useParams(); @@ -78,7 +79,7 @@ const BannerEdit = ({isLoading, data, updateBanner, navigateTo, refetch, center} useEffect(() => { if (data?.data) { setSelectedImage( - `https://rubix.betadelivery.com/${data?.data?.banner_image}` + `${IMAGE_URI}/${data?.data?.banner_image}` ); setValue("heading", data?.data?.Heading); setValue("sub_heading", data?.data?.sub_heading); diff --git a/src/Components/Banner/BannerMainCard.jsx b/src/Components/Banner/BannerMainCard.jsx index 0e2826a..fe34985 100644 --- a/src/Components/Banner/BannerMainCard.jsx +++ b/src/Components/Banner/BannerMainCard.jsx @@ -4,7 +4,7 @@ import React from 'react' const BannerMainCard = ({heading, subHeading, buttonTitle, imgLink, center}) => { - const words = heading.split(' '); + const words = heading?.split(' '); const firstThreeWords = words.slice(0, 3).join(' '); const remainingWords = words.slice(3).join(' '); diff --git a/src/Components/Banner/BannerTable.jsx b/src/Components/Banner/BannerTable.jsx index dacbfcb..d98978e 100644 --- a/src/Components/Banner/BannerTable.jsx +++ b/src/Components/Banner/BannerTable.jsx @@ -22,7 +22,7 @@ import CustomAlertDialog from "../../Components/CustomAlertDialog"; import DataTable from "../DataTable/DataTable"; import Header from "../Header"; import { OPACITY_ON_LOAD } from "../../Layout/animations"; -import { TABLE_PAGINATION } from "../../Constants/Paginations"; +import { IMAGE_URI, TABLE_PAGINATION } from "../../Constants/Paginations"; import { CheckCircleIcon, ChevronLeftIcon, @@ -159,7 +159,7 @@ const BannerCommunity = ({ h={14} rounded={4} objectFit="cover" - src={`https://rubix.betadelivery.com/${item.banner_image}`} + src={`${IMAGE_URI}/${item.banner_image}`} alt="Dan Abramov" /> ), diff --git a/src/Components/TabularView/TabularView.jsx b/src/Components/TabularView/TabularView.jsx index 00541ee..de52be7 100644 --- a/src/Components/TabularView/TabularView.jsx +++ b/src/Components/TabularView/TabularView.jsx @@ -24,6 +24,7 @@ const TabularView = ({ setPageSize, totalPages, noDataTitle, + totalItems, }) => { const [displayRange, setDisplayRange] = useState({ start: TABLE_PAGINATION?.page, @@ -38,15 +39,14 @@ const TabularView = ({ }; const paginationNext = () => { - const totalPage = Math.ceil(totalPages / pageSize); - if (currentPage < totalPage) { + if (currentPage < totalPages) { setCurrentPage(currentPage + 1); updateDisplayRange(currentPage + 1); } }; const updateDisplayRange = (page) => { const start = (page - 1) * pageSize + 1; - const end = Math.min(start + pageSize - 1, totalPages); + const end = Math.min(start + pageSize - 1, totalItems); setDisplayRange({ start, end }); }; @@ -100,7 +100,9 @@ const TabularView = ({ value={pageSize} onChange={(e) => setPageSize(e.target.value)} > - + + + @@ -109,7 +111,7 @@ const TabularView = ({ className=" link rounded-3 pointer" /> - {displayRange.start} - {displayRange.end} of {totalPages} + {displayRange.start} - {displayRange.end} of {totalItems} { const [deleteIsLoading, setDeleteIsLoading] = useState(false); const [searchTerm, setSearchTerm] = useState(""); const [statusFilter, setStatusFilter] = useState("all"); - const blog = useGetBlogQuery(); + const blog = useGetBlogQuery({ page: currentPage, size: pageSize }); const [deleteBlog] = useDeleteBlogMutation(); const [updateBlogStatus] = useUpdateBlogStatusMutation(); // ====================================================[Functions]=================================================================== @@ -280,7 +280,8 @@ const BlogsAndArticles = () => { setPageSize={setPageSize} currentPage={currentPage} setCurrentPage={setCurrentPage} - totalPages={blog?.data?.data?.totalItems} + totalItems={blog?.data?.data?.totalItems} + totalPages={blog?.data?.data?.totalPages} noDataTitle={'blog'} /> { // ====================================================[Hooks]=================================================================== @@ -68,20 +75,16 @@ const Community = () => { const [searchTerm, setSearchTerm] = useState(""); const [statusFilter, setStatusFilter] = useState("all"); - - const [pageSize, setPageSize] = useState(TABLE_PAGINATION?.size); const [currentPage, setCurrentPage] = useState(1); - - const [displayRange, setDisplayRange] = useState({ start: TABLE_PAGINATION?.page, end: pageSize }); - - + const [displayRange, setDisplayRange] = useState({ + start: TABLE_PAGINATION?.page, + end: pageSize, + }); const community = useGetCommunityQuery({ page: currentPage, size: pageSize }); - - const [deleteCommunity] = useDeleteCommunityMutation(); const [updateCommunityStatus] = useUpdateCommunityStatusMutation(); @@ -119,7 +122,10 @@ const Community = () => { if (response?.data?.statusCode === 201) { toast({ render: () => ( - + ), }); } @@ -187,9 +193,11 @@ const Community = () => { ), Description: ( + {item?.description} + ), "Linked In": ( @@ -254,8 +262,6 @@ const Community = () => { }; }); - - // ====================================================[Pagination Setup]================================================================ const paginationPrev = () => { if (currentPage > 1) { @@ -273,232 +279,35 @@ const Community = () => { }; const updateDisplayRange = (page) => { const start = (page - 1) * pageSize + 1; - const end = Math.min(start + pageSize - 1, community?.data?.data?.totalItems); + const end = Math.min( + start + pageSize - 1, + community?.data?.data?.totalItems + ); setDisplayRange({ start, end }); }; - - - - - - return ( - -
- - {/* */} - {/* - Community banner - - - - - - */} - - {/* */} - {/* {communityBanner?.isLoading ? : - - - {banner?.Heading} - - - {banner?.sub_heading} - - - - Last update: {formatDate(banner?.createdAt)} - } */} - - {/* {communityBanner?.isLoading - ? Array.from({ length: 3 }).map((_, index) => ( - - )) - : banner?.map( - ({ - id, - CTO_button_title, - banner_image, - Heading, - createdAt, - sub_heading, - }) => ( - - ) - )} - */} - - - {/* ====================================================[ Top bar ]================================================================ */} - - {/* */} - - - {/* - - Community cards - - */} - - setSearchTerm(e.target.value)} - /> - - - - - - - - - - {displayRange.start} - {displayRange.end} of{" "} - {community?.data?.data?.totalItems} - - - - - - - - - {/* ====================================================[ Table ]================================================================ */} - + - {/* */} - - {/* - - Community cards - - - - - */} - {/* ====================================================[ Alert ]================================================================ */} setDeleteAlert(false)} @@ -507,7 +316,7 @@ const Community = () => { message={"Are you sure you want to delete community?"} isLoading={deleteIsLoading} /> - + ); }; diff --git a/src/Pages/Events/Events.jsx b/src/Pages/Events/Events.jsx index 5b84ae3..95f1819 100644 --- a/src/Pages/Events/Events.jsx +++ b/src/Pages/Events/Events.jsx @@ -28,6 +28,7 @@ import { Link as RouterLink } from "react-router-dom"; import { formatDate } from "../../Components/Functions/UTCConvertor"; import CustomAlertDialog from "../../Components/CustomAlertDialog"; import ToastBox from "../../Components/ToastBox"; +import TabularView from "../../Components/TabularView/TabularView"; const Events = () => { // ====================================================[Hooks]=================================================================== @@ -207,88 +208,27 @@ const Events = () => { }); return ( - -
+ + - - - - setSearchTerm(e.target.value)} - /> - - - - - - - - - {displayRange.start} - {displayRange.end} of{" "} - {events?.data?.data?.totalItems} - - - - - - - - {/* ====================================================[ Table ]================================================================ */} - {/* ====================================================[ Alert ]================================================================ */} @@ -299,7 +239,7 @@ const Events = () => { message={"Are you sure you want to delete event?"} isLoading={deleteIsLoading} /> - + ); }; diff --git a/src/Pages/Faq/Faq.jsx b/src/Pages/Faq/Faq.jsx index 8566740..9f4fc8b 100644 --- a/src/Pages/Faq/Faq.jsx +++ b/src/Pages/Faq/Faq.jsx @@ -40,19 +40,15 @@ const Faq = () => { const [actionStatus, setActionStatus] = useState(null); const [deleteIsLoading, setDeleteIsLoading] = useState(false); - const faqPage = useCreateFaqMutation({ - page: currentPage, - size: pageSize, - }); + const faqPage = useCreateFaqMutation(); + + const faq = useGetFaqQuery({ page: currentPage, size: pageSize }); - const { data } = useGetFaqQuery(); - const faq = data?.data?.rows; - // console.log(faq); const [deleteFaq] = useDeleteFaqMutation(); const [updateFaqStatus] = useUpdateFaqStatusMutation(); - const filteredData = faq?.filter((item) => { + const filteredData = faq?.data?.data?.rows?.filter((item) => { // Filter by name (case insensitive) const name = item.question; const searchLower = searchTerm.toLowerCase(); @@ -241,7 +237,8 @@ const Faq = () => { currentPage={currentPage} setCurrentPage={setCurrentPage} totalPages={faq?.data?.data?.totalPages} - noDataTitle={"faq"} + totalItems={faq?.data?.data?.totalItems} + noDataTitle={"FAQ's"} /> setDeleteAlert(false)} diff --git a/src/Pages/Login.jsx b/src/Pages/Login.jsx index aa04cdf..dbf16a6 100644 --- a/src/Pages/Login.jsx +++ b/src/Pages/Login.jsx @@ -62,11 +62,12 @@ const Login = () => { // dispatch(loginUser(true)); setIsAuthenticate(false) setIsLoading(false); + toast({ - title: `Invalid Credentials`, - status: "error", - isClosable: true, - }) + render: () => ( + + ), + }); reset(); navigate("/login"); }, 2000); diff --git a/src/Pages/NewLetter/NewsLetter.jsx b/src/Pages/NewLetter/NewsLetter.jsx index c1cb817..08c9aa2 100644 --- a/src/Pages/NewLetter/NewsLetter.jsx +++ b/src/Pages/NewLetter/NewsLetter.jsx @@ -50,7 +50,7 @@ const NewsLetter = () => { const [actionStatus, setActionStatus] = useState(null); const [deleteIsLoading, setDeleteIsLoading] = useState(false); - const { data } = useGetNewsLetterQuery(); + const { data } = useGetNewsLetterQuery({ page: currentPage, size: pageSize }); // // console.log(useGetNewsletterQuery); const email = data?.data?.rows; // console.log(email); @@ -123,20 +123,20 @@ const NewsLetter = () => { const extractedArray = email?.map((item, index) => { return { Title: ( - - - - {item?.email} - - - + + + + {item?.email} + + + ), "Created At": ( { currentPage={currentPage} setCurrentPage={setCurrentPage} totalPages={email?.data?.data?.totalPages} + totalItems={email?.data?.data?.totalItems} noDataTitle={"NewsLetter"} /> { ]; const extractedArray = filteredData?.map((item, index) => { return { - Title: - {item?.title}, + Title: {item?.title}, Description: ( { currentPage={currentPage} setCurrentPage={setCurrentPage} totalPages={news?.data?.data?.totalPages} - noDataTitle={'news'} + totalItems={news?.data?.data?.totalItems} + noDataTitle={"news"} /> setDeleteAlert(false)} diff --git a/src/Pages/Partners/Partner.jsx b/src/Pages/Partners/Partner.jsx index ee63638..78381ec 100644 --- a/src/Pages/Partners/Partner.jsx +++ b/src/Pages/Partners/Partner.jsx @@ -145,52 +145,6 @@ const Partner = () => { }; }); - // ====================================================[Functions]=================================================================== - // const handleDelete = async (communityId, status) => { - // if (status) { - // return toast({ - // render: () => ( - // - // ), - // }); - // } - - // try { - // // Trigger the mutation - // setDeleteIsLoading(true); - // await deletePartners(communityId) - // .then((response) => { - // // Handle the response here - // // console.log("Mutation response:", response?.data?.statusCode); - // // console.log("Mutation response:", response?.data?.message); - - // if (response?.data?.statusCode === 201) { - // setDeleteIsLoading(false); - // setDeleteAlert(false); - // toast({ - // render: () => ( - // - // ), - // }); - // } - // }) - // .catch((error) => { - // // console.error("Error creating community:", error); - // setDeleteIsLoading(false); - // setDeleteAlert(false); - // }); - // } catch (error) { - // // Handle errors - // // console.log("Error deleting community:", error); - // } - // }; - const handleDelete = async (communityId, status) => { if (status) { return toast({ @@ -290,6 +244,7 @@ const Partner = () => { currentPage={currentPage} setCurrentPage={setCurrentPage} totalPages={partners?.data?.data?.totalPages} + totalItems={partners?.data?.data?.totalItems} noDataTitle={"partners"} /> { currentPage={currentPage} setCurrentPage={setCurrentPage} totalPages={policy?.data?.data?.totalPages} + totalItems={policy?.data?.data?.totalItems} noDataTitle={"policy"} /> { currentPage={currentPage} setCurrentPage={setCurrentPage} totalPages={terms?.data?.data?.totalPages} + totalItems={terms?.data?.data?.totalItems} noDataTitle={"terms"} /> { currentPage={currentPage} setCurrentPage={setCurrentPage} totalPages={useCase?.data?.data?.totalPages} + totalItems={useCase?.data?.data?.totalItems} noDataTitle={"usecase"} /> { const extractedArray = filteredData?.map((item, index) => { return { - - Title: ( - - - - {item?.title} - + Title: ( + + + + {item?.title} + + ), Description: ( @@ -92,7 +92,7 @@ const Videos = () => { label={item?.description} bg="blue.200" > - + {item?.description} @@ -182,10 +182,6 @@ const Videos = () => { } }; - - - - const handleUpdateStatus = async (id) => { try { // Trigger the mutation @@ -211,13 +207,6 @@ const Videos = () => { } }; - - - - - - - return ( <> { setPageSize={setPageSize} currentPage={currentPage} setCurrentPage={setCurrentPage} + totalItems={videos?.data?.data?.data?.totalItems} totalPages={videos?.data?.data?.data?.totalPages} - noDataTitle={'video'} + noDataTitle={"video"} /> setDeleteAlert(false)} @@ -251,6 +241,4 @@ const Videos = () => { export default Videos; - - -// Event & Community Pending \ No newline at end of file +// Event & Community Pending diff --git a/src/Pages/Whitepapers/Whitepapers.jsx b/src/Pages/Whitepapers/Whitepapers.jsx index c7ddf0b..096b1a0 100644 --- a/src/Pages/Whitepapers/Whitepapers.jsx +++ b/src/Pages/Whitepapers/Whitepapers.jsx @@ -234,6 +234,7 @@ const Whitepapers = () => { setPageSize={setPageSize} currentPage={currentPage} setCurrentPage={setCurrentPage} + totalItems={whitePaper?.data?.data?.data?.totalItems} totalPages={whitePaper?.data?.data?.data?.totalPages} noDataTitle={'whitepaper'} /> diff --git a/src/Routes/Routes.js b/src/Routes/Routes.js index 85fcdcf..c18d0ea 100644 --- a/src/Routes/Routes.js +++ b/src/Routes/Routes.js @@ -96,7 +96,7 @@ export const RouteLink = [ { path: "/community", Component: Community }, { path: "community/view/:id", Component: ComunityViewPage }, { path: "community/edit/:id", Component: ComunityEditPage }, - { path: "community/add-comunity", Component: AddComunity }, + { path: "community/add-community", Component: AddComunity }, // =============[ Community banner ]================ { path: "banner/banner-community", Component: BannerCommunity }, diff --git a/src/Services/api.service.js b/src/Services/api.service.js index 244263e..a78ddca 100644 --- a/src/Services/api.service.js +++ b/src/Services/api.service.js @@ -1,7 +1,9 @@ // Need to use the React-specific entry point to import createApi import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react"; -const baseUrl = "https://rubix.betadelivery.com/api"; + + +const baseUrl = import.meta.env.VITE_API_BASE_URL // Define a service using a base URL and expected endpoints export const rubixApi = createApi({ @@ -40,7 +42,7 @@ export const rubixApi = createApi({ "getFaq", "getPartners", - 'getNewsLetter', + "getNewsLetter", ], endpoints: (builder) => ({ // ===============[ Community cards endpoints ]======================= @@ -246,7 +248,7 @@ export const rubixApi = createApi({ // ================[ Blog endpoints ]==================== getBlog: builder.query({ - query: () => "/admin/blog", + query: ({ page, size }) => `/admin/blog?page=${page}&size=${size}`, providesTags: ["getBlog"], }), getBlogById: builder.query({ @@ -538,11 +540,9 @@ export const rubixApi = createApi({ invalidatesTags: ["getWhitePaper"], }), - - // ===============[ Usecase endpoints ]======================= getUsecase: builder.query({ - query: () => "/admin/tech", + query: ({ page, size }) => `/admin/tech?page=${page}&size=${size}`, providesTags: ["getUseCase"], }), createUsecase: builder.mutation({ @@ -581,12 +581,10 @@ export const rubixApi = createApi({ invalidatesTags: ["getUseCase"], }), - - - // ===============[ Terms endpoints ]======================= getTerms: builder.query({ - query: () => "/admin/term-condition", + query: ({ page, size }) => + `/admin/term-condition?page=${page}&size=${size}`, providesTags: ["getTerms"], }), deleteTerms: builder.mutation({ @@ -626,7 +624,7 @@ export const rubixApi = createApi({ // ===============[ Terms endpoints ]======================= getPolicy: builder.query({ - query: () => "/admin/policy", + query: ({ page, size }) => `/admin/policy?page=${page}&size=${size}`, providesTags: ["getPolicy"], }), deletePolicy: builder.mutation({ @@ -666,7 +664,7 @@ export const rubixApi = createApi({ // ===============[ Faq endpoints ]======================= getFaq: builder.query({ - query: () => "/admin/faq", + query: ({ page, size }) => `/admin/faq?page=${page}&size=${size}`, providesTags: ["getFaq"], }), deleteFaq: builder.mutation({ @@ -704,10 +702,9 @@ export const rubixApi = createApi({ providesTags: ["getFaq"], }), - // ===============[ Cards endpoints ]======================= getPartners: builder.query({ - query: () => "/admin/card", + query: ({ page, size }) => `/admin/card?page=${page}&size=${size}`, providesTags: ["getPartners"], }), deletePartners: builder.mutation({ @@ -747,8 +744,8 @@ export const rubixApi = createApi({ // ===============[ Cards endpoints ]======================= getNewsLetter: builder.query({ - query: () => 'newsLetter/request', - providesTags: ['getNewsLetter'], + query: ({ page, size }) => `newsLetter/request?page=${page}&size=${size}`, + providesTags: ["getNewsLetter"], }), deleteEmail: builder.mutation({ query: (id) => ({ @@ -758,14 +755,12 @@ export const rubixApi = createApi({ invalidatesTags: ["getNewsLetter"], }), getNewsLetterEmail: builder.query({ - query: () => 'newsLetter/request', - providesTags: ['getNewsLetter'], + query: () => "newsLetter/request", + providesTags: ["getNewsLetter"], }), }), }); - - export const { useGetCommunityQuery, useGetCommunityByIdQuery, @@ -858,8 +853,6 @@ export const { useGetUsecaseQuery, useUpdateUsecaseStatusMutation, - - useGetTermsQuery, useDeleteTermsMutation, useCreateTermsMutation, @@ -891,5 +884,4 @@ export const { useGetNewsLetterQuery, useDeleteEmailMutation, useGetNewsLetterEmailQuery, - } = rubixApi;