Untitled
unknown
plain_text
2 years ago
29 kB
15
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