I try to sort the value and update the same of both columns by onclick of name and Lname(its TH) Below is the link which am refering https://codesandbox.io/s/customtablereact-forked-drnc0
am trying to sort both column, by ascending order by what am missing here https://codesandbox.io/s/customtablereact-forked-fnvlo any suggestion, how to implement sorting here
please refer below snippet
import React from "react";
export const CustTable = ({ columns, data, setData, search, setSearch }) => {
const [editable, setEditable] = React.useState("");
const [sortType, setSortType] = React.useState("asc");
const cellEditable = (label) => {
data.map((l) => {
if (l.name === label.name) {
setEditable(label.name);
}
});
};
const changeLastNameBasedIndex = (name, e, index) => {
e.persist();
setData((prevData) => {
return [
...prevData.slice(0, index),
{ name, lname: e.target.value },
...prevData.slice(index + 1)
];
});
};
const changeLastName = (name, e, index) => {
let filterData = [];
e.persist();
setData((prevData) => {
const dummyData = [...prevData];
filterData = dummyData.filter((label) => {
return label.name !== name;
});
return [...filterData, { name, lname: e.target.value }];
});
};
const items = () => {
let resultItems = data;
if (search) {
resultItems = data.filter((item) =>
item.name.toLowerCase().includes(search.toLowerCase())
);
}
return resultItems.map((label, index) => {
return (
<tr style={{ display: "flex" }} key={index}>
<span style={{ width: "35%" }}>{label.name} </span>
{editable === label.name ? (
<input
type="text"
value={label.lname}
onChange={
search
? (e) => changeLastName(label.name, e, index)
: (e) => changeLastNameBasedIndex(label.name, e, index)
}
/>
) : (
<span onClick={() => cellEditable(label)}>{label.lname} </span>
)}
</tr>
);
});
};
const searchData = (e) => {
setSearch(e.target.value);
};
return (
<>
<div>
<input
type="search"
placeholder="search"
onChange={(e) => searchData(e)}
/>
</div>
<tr>
<th>First</th>
<th>Second</th>
</tr>
{items()}
</>
);
};