Untitled
unknown
plain_text
2 years ago
29 kB
10
Indexable
import React, { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import axios from "axios"; import PARAMS from "../Global/Url"; import { useMemo } from "react"; import Pagination from "./Pagination"; import Footer from "./footer"; export default function Bo() { const navigate = useNavigate(); const [pricing, setPricing] = useState({ confermation: 0, reservation: 0, sold: 0, followUp: 0, aftersail: 0, leadCost: 0, }); const [active, setActive] = useState(false); const [active2, setActive2] = useState(false); const token = localStorage.getItem("jwt-admin"); const [bosData, setBosData] = useState([]); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage] = useState(6); // Adjust as needed const [searchEmail, setSearchEmail] = useState(""); const [selectedBoId, setSelectedBoId] = useState(null); const [amountToAdd, setAmountToAdd] = useState(0); console.log( "Initial States - Items Per Page:", itemsPerPage, "Current Page:", currentPage ); const handlePageChange = (pageNumber) => { setCurrentPage(pageNumber); }; useEffect(() => { axios .get(`${PARAMS.API_URL}/admin/bo/list`, { headers: { Authorization: `Bearer ${token}` }, withCredentials: true, }) .then((res) => { setBosData(res.data.bos); }) .catch((err) => { console.log(err); }); }, [token]); const handleChangeAccountStatus = async (id, status) => { try { const response = await axios.post( `${PARAMS.API_URL}/admin/status`, { id: id, status: status, }, { headers: { Authorization: `Bearer ${token}`, }, } ); const updatedBosData = bosData.map((bo) => bo.id === id ? { ...bo, status: status } : bo ); setBosData(updatedBosData); } catch (error) { console.error("Error updating status:", error); } }; const handleStatusChange = async (id, newStatus) => { try { await handleChangeAccountStatus(id, newStatus); const normalizedStatus = newStatus.toLowerCase(); const updatedBosData = bosData.map((bo) => bo.id === id ? { ...bo, status: normalizedStatus } : bo ); setBosData(updatedBosData); } catch (error) { console.error("Error updating status:", error); } }; const handleUpdatePriceTag = async (e) => { e.preventDefault(); const updateData = { id: selectedBoId, confermation: isNaN(Number(pricing.confermation)) ? 0 : Number(pricing.confermation), reservation: isNaN(Number(pricing.reservation)) ? 0 : Number(pricing.reservation), sold: isNaN(Number(pricing.sold)) ? 0 : Number(pricing.sold), followUp: isNaN(Number(pricing.followUp)) ? 0 : Number(pricing.followUp), aftersail: isNaN(Number(pricing.aftersail)) ? 0 : Number(pricing.aftersail), leadCost: isNaN(Number(pricing.leadCost)) ? 0 : Number(pricing.leadCost), }; try { // UPDATE const response = await axios.post( `${PARAMS.API_URL}/admin/payment/edit`, updateData, { headers: { Authorization: `Bearer ${token}`, }, } ); setPricing(response.data); setActive(false); } catch (error) { console.error("Error updating pricing data:", error); } }; const handlePriceTagClick = (boId) => { setSelectedBoId(boId); setActive(true); axios .get(`${PARAMS.API_URL}/admin/payment/${boId}`, { headers: { Authorization: `Bearer ${token}`, }, }) .then((res) => { setPricing(res.data); }) .catch((err) => { console.log(err); }); }; const handleLeadInfo = (boId) => { setSelectedBoId(boId); axios .get(`${PARAMS.API_URL}/admin/payment/${boId}`, { headers: { Authorization: `Bearer ${token}`, }, }) .then((res) => { setPricing(res.data); }) .catch((err) => { console.log(err); }); navigate(`/leads/${boId}`); }; const filteredBos = useMemo(() => { return bosData.filter((bo) => bo.email.toLowerCase().includes(searchEmail.toLowerCase()) ); }, [bosData, searchEmail]); console.log("Total Items after Filtering:", filteredBos.length); const handleSearchInputChange = (e) => { const inputValue = e.target.value; setSearchEmail(inputValue); }; const indexOfLastItem = currentPage * itemsPerPage; const indexOfFirstItem = indexOfLastItem - itemsPerPage; const currentBos = bosData.slice(indexOfFirstItem, indexOfLastItem); console.log("Items on Current Page:", currentBos); const handleNextPage = () => { const totalPages = Math.ceil(filteredBos.length / itemsPerPage); setCurrentPage((prevPage) => Math.min(prevPage + 1, totalPages)); }; const handleAddBalance = async () => { try { const response = await axios.post( `${PARAMS.API_URL}/admin/balance`, { id: selectedBoId, amount: amountToAdd, }, { headers: { Authorization: `Bearer ${token}`, }, } ); const updatedBosData = bosData.map((bo) => bo.id === selectedBoId ? { ...bo, balance: bo.balance + amountToAdd } : bo ); setBosData(updatedBosData); setAmountToAdd(0); setActive2(false); } catch (error) { console.error("Error adding balance:", error); } }; const handleCloseModal = () => { setActive(false); setActive2(false); }; const handleGenerateTokenClick = async (boId) => { window.open("http://user.heylead.io/authentification/admin", "_blank"); }; console.log( "Rendering Pagination - Current Page:", currentPage, "Total Items:", filteredBos.length ); return ( <div className="dashboard"> {active && selectedBoId && ( <div className="popup"> <div className="model"> <span>Pricing edit</span> <svg className="x-edit" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" width="30px" height="30px" onClick={handleCloseModal} > {" "} <path d="M 7 4 C 6.744125 4 6.4879687 4.0974687 6.2929688 4.2929688 L 4.2929688 6.2929688 C 3.9019687 6.6839688 3.9019687 7.3170313 4.2929688 7.7070312 L 11.585938 15 L 4.2929688 22.292969 C 3.9019687 22.683969 3.9019687 23.317031 4.2929688 23.707031 L 6.2929688 25.707031 C 6.6839688 26.098031 7.3170313 26.098031 7.7070312 25.707031 L 15 18.414062 L 22.292969 25.707031 C 22.682969 26.098031 23.317031 26.098031 23.707031 25.707031 L 25.707031 23.707031 C 26.098031 23.316031 26.098031 22.682969 25.707031 22.292969 L 18.414062 15 L 25.707031 7.7070312 C 26.098031 7.3170312 26.098031 6.6829688 25.707031 6.2929688 L 23.707031 4.2929688 C 23.316031 3.9019687 22.682969 3.9019687 22.292969 4.2929688 L 15 11.585938 L 7.7070312 4.2929688 C 7.5115312 4.0974687 7.255875 4 7 4 z" /> </svg> <div className="inputs"> <span>Confermation</span> <label> <input type="number" value={pricing?.confermation || 0} onChange={(e) => setPricing({ ...pricing, confermation: e.target.value }) } />{" "} <i className="line"></i> $ </label> <span>Reservation</span> <label> <input type="number" value={pricing?.reservation || 0} onChange={(e) => setPricing({ ...pricing, reservation: e.target.value }) } />{" "} <i className="line"></i> $ </label> <span>Solde</span> <label> <input type="number" value={pricing?.sold || 0} onChange={(e) => setPricing({ ...pricing, sold: e.target.value }) } />{" "} <i className="line"></i> % </label> <div className="line"></div> <span>Followed up</span> <label> <input type="number" value={pricing?.followUp || 0} onChange={(e) => setPricing({ ...pricing, followUp: e.target.value }) } />{" "} <i className="line"></i> $ </label> <div className="line"></div> <span>After sell done</span> <label> <input type="number" value={pricing?.aftersail || 0} onChange={(e) => setPricing({ ...pricing, aftersail: e.target.value }) } />{" "} <i className="line"></i> $ </label> <div className="line"></div> <span>Lead Cost</span> <label> <input type="number" value={pricing?.leadCost || 0} onChange={(e) => setPricing({ ...pricing, leadCost: e.target.value }) } />{" "} <i className="line"></i> $ </label> </div> <button type="submit" onClick={(e) => { handleUpdatePriceTag(e); navigate("/bo"); }} > Update </button> </div> </div> )} {active2 && selectedBoId && ( <div className="popup"> <div className="model"> <span>Add balance</span> <svg className="x-edit" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" width="30px" height="30px" onClick={handleCloseModal} > {" "} <path d="M 7 4 C 6.744125 4 6.4879687 4.0974687 6.2929688 4.2929688 L 4.2929688 6.2929688 C 3.9019687 6.6839688 3.9019687 7.3170313 4.2929688 7.7070312 L 11.585938 15 L 4.2929688 22.292969 C 3.9019687 22.683969 3.9019687 23.317031 4.2929688 23.707031 L 6.2929688 25.707031 C 6.6839688 26.098031 7.3170313 26.098031 7.7070312 25.707031 L 15 18.414062 L 22.292969 25.707031 C 22.682969 26.098031 23.317031 26.098031 23.707031 25.707031 L 25.707031 23.707031 C 26.098031 23.316031 26.098031 22.682969 25.707031 22.292969 L 18.414062 15 L 25.707031 7.7070312 C 26.098031 7.3170312 26.098031 6.6829688 25.707031 6.2929688 L 23.707031 4.2929688 C 23.316031 3.9019687 22.682969 3.9019687 22.292969 4.2929688 L 15 11.585938 L 7.7070312 4.2929688 C 7.5115312 4.0974687 7.255875 4 7 4 z" /> </svg> <div> <div className="amount">Amount</div> <label> <input type="number" value={amountToAdd} onChange={(e) => setAmountToAdd(Number(e.target.value))} />{" "} <i className="line"></i> $ </label> </div> <button onClick={handleAddBalance}>Add</button> </div> </div> )} <div className="top"> <svg xmlns="http://www.w3.org/2000/svg" width="22.762" height="24.895" viewBox="0 0 22.762 24.895" > <g id="Group_875" data-name="Group 875" transform="translate(-1842 -60.3)" > <g id="Group_15" data-name="Group 15" transform="translate(1696.36 -1550.331)" > <path id="Path_23" data-name="Path 23" d="M156.857,1613.181c0-.261-.009-.5,0-.736a1.167,1.167,0,0,1,2.332,0c.009.237,0,.474,0,.73.236.06.459.1.674.173a6.591,6.591,0,0,1,4.768,5.476c.242,1.363.451,2.733.683,4.1a3.688,3.688,0,0,0,1.23,2.156,3.2,3.2,0,0,1,.8,3.747,3.009,3.009,0,0,1-2.856,1.9c-4.334.026-8.668.016-13,.006a3.162,3.162,0,0,1-2.874-2.01,3.126,3.126,0,0,1,.755-3.467,3.864,3.864,0,0,0,1.318-2.258c.166-1.032.322-2.067.515-3.093a14.444,14.444,0,0,1,.579-2.539,6.491,6.491,0,0,1,4.912-4.145Z" transform="translate(0 0)" fill="none" stroke="#263238" stroke-width="1.4" /> <path id="Path_24" data-name="Path 24" d="M159.285,1624.439a3.535,3.535,0,0,1-6.96,0Z" transform="translate(2.249 7.476)" fill="none" stroke="#263238" stroke-width="1.4" /> </g> <circle id="Ellipse_1" data-name="Ellipse 1" cx="6" cy="6" r="6" transform="translate(1842 61)" fill="#00c198" /> </g> </svg> <span>ADMIN</span> <img src="https://images.unsplash.com/photo-1700076823924-a87fca414724?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="" /> </div> <div className="title"> <svg xmlns="http://www.w3.org/2000/svg" width="15" height="13" viewBox="0 0 12.754 11.054" > <g id="Group_983" data-name="Group 983" transform="translate(3945.042 -3640.153)" > <path id="Path_972" data-name="Path 972" d="M-3942.5,3641.854a6.306,6.306,0,0,1,.036-.641,1.252,1.252,0,0,1,1.244-1.058c1.032-.005,2.063,0,3.095,0h1.952a1.275,1.275,0,0,1,1.335,1.335c0,.115,0,.229,0,.365h.145c.368,0,.735,0,1.1,0a1.272,1.272,0,0,1,1.3,1.3q0,3.374,0,6.747a1.269,1.269,0,0,1-1.3,1.3q-5.073,0-10.147,0a1.27,1.27,0,0,1-1.3-1.3q0-3.374,0-6.747a1.272,1.272,0,0,1,1.3-1.3C-3943.327,3641.853-3942.916,3641.854-3942.5,3641.854Zm9.363,3.166c-.064.027-.109.044-.153.064l-3.635,1.583c-.149.065-.361.089-.434.2s-.025.324-.028.492a.42.42,0,0,1-.439.446q-.837,0-1.674,0a.42.42,0,0,1-.437-.447c0-.137,0-.275,0-.411a.113.113,0,0,0-.084-.126q-1.983-.858-3.966-1.72c-.062-.027-.127-.052-.2-.082v.151q0,2.338,0,4.676c0,.353.156.509.511.509h10.029c.355,0,.512-.156.512-.508v-4.828Zm-6.8.946c0-.236,0-.444,0-.652a.431.431,0,0,1,.48-.485h1.567a.44.44,0,0,1,.5.5c0,.205,0,.41,0,.628.04-.014.062-.02.081-.028q2.042-.9,4.085-1.807a.126.126,0,0,0,.086-.14c0-.27,0-.54,0-.81a.428.428,0,0,0-.468-.471h-10.118a.426.426,0,0,0-.466.46c0,.266,0,.531,0,.8a.16.16,0,0,0,.115.176q1.693.743,3.383,1.494Zm4.251-4.117v-.344a.44.44,0,0,0-.505-.5h-3.666c-.447,0-.894,0-1.341,0a.411.411,0,0,0-.431.354,4.556,4.556,0,0,0,0,.491Zm-3.395,5.1h.835v-1.26h-.835Z" transform="translate(0 0)" fill="#000" /> </g> </svg> Business Owners </div> <div className="search"> <div> <input type="text" placeholder="Search by email" value={searchEmail} onChange={handleSearchInputChange} /> <button> <i className="fa-solid fa-magnifying-glass"></i> </button> </div> </div> <div className="table"> <div className="head"> <span>Name</span> <span>Email</span> <span>Phone</span> <span>Registration Date</span> <span>Balance</span> <span>Status</span> <span>Lead Info</span> <span>Action</span> <div className="break"></div> {currentBos.map((bo) => ( <React.Fragment key={bo.id}> <span> <img className="pfp" src={bo.image} alt="" /> {bo.name} </span> <span>{bo.email}</span> <span>{bo.phone}</span> <span>{new Date(bo.registrationDate).toLocaleString()}</span> <span>{bo.balance}</span> <span className={bo.status === "active" ? "active" : "inactive"}> <button>{bo.status}</button> </span> <span className="actions"> <svg onClick={() => handleLeadInfo(bo.id)} xmlns="http://www.w3.org/2000/svg" width="10.519" height="10.523" viewBox="0 0 10.519 10.523" > <g id="Group_918" data-name="Group 918" transform="translate(996.562 -462.182)" > <path id="Path_970" data-name="Path 970" d="M-955.367,467.449c0,1.044,0,2.088,0,3.132a2.082,2.082,0,0,1-1.662,2.075,2.26,2.26,0,0,1-.477.046q-2.6,0-5.191,0a2.079,2.079,0,0,1-2.1-1.759,5.151,5.151,0,0,1-.034-.762c0-.2,0-.4,0-.6a.529.529,0,0,1,.535-.555.528.528,0,0,1,.518.558c0,.325,0,.649,0,.974a1.054,1.054,0,0,0,1.1,1.1c1,0,2,0,3,0,.723,0,1.447,0,2.17,0a1.048,1.048,0,0,0,1.065-.815,1.427,1.427,0,0,0,.031-.318q0-3.077,0-6.153a1.061,1.061,0,0,0-1.131-1.136h-5.105a1.059,1.059,0,0,0-1.132,1.134c0,.312,0,.625,0,.937a.528.528,0,0,1-.527.562.526.526,0,0,1-.525-.552c0-.419-.011-.84.019-1.257a2.078,2.078,0,0,1,1.943-1.865c.5-.018,1-.007,1.5-.007,1.291,0,2.581,0,3.872,0a2.082,2.082,0,0,1,2.084,1.666,2.484,2.484,0,0,1,.045.514C-955.365,465.394-955.367,466.421-955.367,467.449Z" transform="translate(-30.676)" fill="#00c198" /> <path id="Path_971" data-name="Path 971" d="M-991.528,559.6c-.046-.05-.071-.08-.1-.107-.188-.189-.38-.376-.566-.567a.524.524,0,0,1-.008-.752.521.521,0,0,1,.742,0q.794.784,1.578,1.578a.51.51,0,0,1,0,.741q-.785.794-1.578,1.578a.521.521,0,0,1-.742,0,.522.522,0,0,1,0-.743c.189-.2.383-.384.575-.576.027-.028.053-.057.1-.107h-4.424a.9.9,0,0,1-.232-.021.517.517,0,0,1-.374-.577.516.516,0,0,1,.5-.448c.131-.005.263,0,.394,0h4.14Z" transform="translate(0 -92.678)" fill="#00c198" /> </g> </svg> </span> <span> <div className="actions"> <svg onClick={() => handlePriceTagClick(bo.id)} xmlns="http://www.w3.org/2000/svg" width="11.745" height="11.744" viewBox="0 0 11.745 11.744" > <g id="Group_917" data-name="Group 917" transform="translate(-1654.41 -1199.511)" > <path id="Path_967" data-name="Path 967" d="M1658.787,1199.575c.436-.021.871-.05,1.308-.063a3.23,3.23,0,0,1,2.471.98q1.308,1.3,2.612,2.613a3.243,3.243,0,0,1,0,4.645q-1.259,1.266-2.525,2.524a3.243,3.243,0,0,1-4.645,0q-1.311-1.3-2.612-2.612a3.276,3.276,0,0,1-.976-2.6c.048-.917.094-1.835.131-2.753a2.725,2.725,0,0,1,1.82-2.513,3.052,3.052,0,0,1,.877-.155c.514-.022,1.028-.047,1.542-.071Zm-.01.883h0c-.307.014-.615.022-.922.044a5.391,5.391,0,0,0-1.068.095,1.838,1.838,0,0,0-1.356,1.755c-.042.936-.089,1.872-.134,2.808a2.347,2.347,0,0,0,.684,1.839c.889.9,1.779,1.795,2.682,2.68a2.341,2.341,0,0,0,3.321,0q1.315-1.287,2.6-2.6a2.343,2.343,0,0,0-.01-3.322c-.883-.9-1.777-1.784-2.67-2.672a2.308,2.308,0,0,0-1.754-.692C1659.695,1200.407,1659.236,1200.437,1658.777,1200.458Z" fill="#00c198" /> <path id="Path_968" data-name="Path 968" d="M1683.95,1227.113a1.912,1.912,0,1,1-1.906-1.9A1.914,1.914,0,0,1,1683.95,1227.113Zm-1.917,1.042a1.03,1.03,0,1,0-1.025-1.028A1.033,1.033,0,0,0,1682.032,1228.154Z" transform="translate(-23.227 -23.214)" fill="#00c198" /> <path id="Path_969" data-name="Path 969" d="M1719.964,1262.21a.476.476,0,0,1-.133.38q-1.16,1.159-2.32,2.318a.439.439,0,1,1-.622-.62q1.162-1.167,2.329-2.329a.416.416,0,0,1,.483-.09A.393.393,0,0,1,1719.964,1262.21Z" transform="translate(-56.316 -56.29)" fill="#00c198" /> </g> </svg> <svg onClick={() => { setAmountToAdd(0); setSelectedBoId(bo.id); setActive2(true); }} xmlns="http://www.w3.org/2000/svg" width="11.183" height="9.823" viewBox="0 0 11.183 9.823" > <g id="Group_984" data-name="Group 984" transform="translate(3608.427 610.207)" > <path id="Path_973" data-name="Path 973" d="M-3597.394-604.785a.664.664,0,0,1-.05.081.212.212,0,0,1-.236.079.21.21,0,0,1-.162-.189,1.23,1.23,0,0,1,0-.127q0-1.966,0-3.932a.682.682,0,0,0-.5-.7.909.909,0,0,0-.231-.027q-4.255,0-8.512,0a.687.687,0,0,0-.735.729c0,.326,0,.652,0,.978,0,.031,0,.063,0,.111h.127c.928,0,1.856,0,2.784,0a1.077,1.077,0,0,1,1.139.945,9.64,9.64,0,0,1,0,1.729,1.082,1.082,0,0,1-1.147.949c-.921,0-1.842,0-2.763,0h-.14c0,.043-.006.081-.006.118q0,.478,0,.956a.69.69,0,0,0,.742.743h4.814c.042,0,.085,0,.127,0a.225.225,0,0,1,.213.223.228.228,0,0,1-.2.224.83.83,0,0,1-.106,0h-4.835a1.138,1.138,0,0,1-1.206-1.2q0-2.88,0-5.759a1.136,1.136,0,0,1,1.2-1.2h8.491a1.129,1.129,0,0,1,1.176.952c0,.009.011.017.017.026Zm-10.418.165c.037,0,.068,0,.1,0h2.8a.68.68,0,0,0,.712-.716q0-.643,0-1.285a.68.68,0,0,0-.72-.719h-2.9Z" transform="translate(0)" fill="#00c198" stroke="#00c198" stroke-width="0.3" /> <path id="Path_974" data-name="Path 974" d="M-3398.971-460.978a.531.531,0,0,1-.359-.579c.01-.669,0-1.338,0-2.007v-.135h-.529c-.191,0-.382,0-.574,0a.23.23,0,0,1-.238-.142.23.23,0,0,1,.07-.268l2.216-2.215a.233.233,0,0,1,.384,0q.771.769,1.54,1.539c.2.2.4.4.6.6.056.057.106.121.159.182v.128a.28.28,0,0,1-.3.172c-.315-.006-.63,0-.945,0h-.118v.13c0,.676-.007,1.352,0,2.028a.515.515,0,0,1-.364.562Zm2.468-3.172-1.683-1.683-1.684,1.683h.7c.231,0,.3.072.3.306q0,1.142,0,2.283c0,.041,0,.082.005.123h1.355v-2.416c0-.229.068-.3.3-.3Z" transform="translate(-201.697 -139.556)" fill="#00c198" stroke="#00c198" stroke-width="0.3" /> <path id="Path_975" data-name="Path 975" d="M-3558.546-497.394a.908.908,0,0,1-.906.9.912.912,0,0,1-.9-.918.912.912,0,0,1,.913-.9A.907.907,0,0,1-3558.546-497.394Zm-.9.447a.452.452,0,0,0,.452-.453.452.452,0,0,0-.455-.45.453.453,0,0,0-.453.453A.453.453,0,0,0-3559.449-496.947Z" transform="translate(-46.559 -108.577)" fill="#00c198" stroke="#00c198" stroke-width="0.3" /> </g> </svg> <svg onClick={() => handleGenerateTokenClick(bo.id)} xmlns="http://www.w3.org/2000/svg" width="14" height="12.134" viewBox="0 0 14 12.134" > <g id="Group_983" data-name="Group 983" transform="translate(3945.042 -3640.153)" > <path id="Path_972" data-name="Path 972" d="M-3942.253,3642.02a6.942,6.942,0,0,1,.04-.7,1.375,1.375,0,0,1,1.366-1.161c1.132-.006,2.265,0,3.4,0q1.071,0,2.143,0a1.4,1.4,0,0,1,1.466,1.466c0,.126,0,.252,0,.4h.159c.4,0,.807,0,1.21,0a1.4,1.4,0,0,1,1.429,1.429q0,3.7,0,7.406a1.393,1.393,0,0,1-1.429,1.43q-5.569,0-11.138,0a1.394,1.394,0,0,1-1.43-1.429q0-3.7,0-7.406a1.4,1.4,0,0,1,1.43-1.429C-3943.16,3642.018-3942.708,3642.02-3942.253,3642.02Zm10.278,3.475c-.071.03-.12.049-.168.07l-3.99,1.738c-.164.072-.4.1-.477.222s-.027.356-.031.54a.46.46,0,0,1-.481.489q-.919,0-1.837,0a.461.461,0,0,1-.48-.491c0-.151,0-.3,0-.452a.125.125,0,0,0-.093-.138q-2.177-.942-4.353-1.888c-.069-.03-.14-.057-.222-.09v.166q0,2.566,0,5.132c0,.387.172.558.562.558h11.008c.39,0,.563-.171.563-.557v-5.3Zm-7.466,1.039c0-.259,0-.487,0-.715a.474.474,0,0,1,.528-.532h1.72a.482.482,0,0,1,.552.553c0,.225,0,.45,0,.689.044-.015.068-.022.089-.031q2.241-.993,4.484-1.984a.139.139,0,0,0,.094-.154c0-.3,0-.593,0-.889a.469.469,0,0,0-.514-.517H-3943.6a.468.468,0,0,0-.512.505c0,.292,0,.583,0,.875a.176.176,0,0,0,.126.193q1.857.816,3.713,1.64Zm4.667-4.519v-.377a.484.484,0,0,0-.555-.55h-4.023c-.49,0-.981,0-1.472,0a.452.452,0,0,0-.473.388,5.065,5.065,0,0,0,0,.539Zm-3.726,5.6h.917v-1.383h-.917Z" transform="translate(0 0)" fill="#00c198" /> </g> </svg> </div> <i className="fa-solid fa-ellipsis-vertical"> <div> <span className={ bo.status.toLowerCase() === "active" ? "active" : "inactive" } onClick={() => handleStatusChange(bo.id, "Active")} > Active </span> <span className={ bo.status.toLowerCase() === "inactive" ? "active" : "inactive" } onClick={() => handleStatusChange(bo.id, "Inactive")} > Inactive </span> </div> </i> </span> </React.Fragment> ))} </div> </div> <div className="nav"> <Pagination itemsPerPage={itemsPerPage} totalItems={bosData.length} currentPage={currentPage} handlePageChange={handlePageChange} /> <span className="next" onClick={handleNextPage}> {">"} </span> </div> <Footer /> </div> ); } // Pagination : const Pagination = ({ itemsPerPage, totalItems, currentPage, handlePageChange, }) => { const pageNumbers = []; for (let i = 1; i <= Math.ceil(totalItems / itemsPerPage); i++) { pageNumbers.push(i); } return ( <div className="nav"> {pageNumbers.map((number) => ( <span key={number} className="pagination-link btn-pagination" onClick={() => handlePageChange(number)} > {number} </span> ))} </div> ); }; export default Pagination;
Editor is loading...
Leave a Comment