Commit 7f6cebb4 authored by Shiva Komirishetti's avatar Shiva Komirishetti

sorting and download button changes

parent 0b20cc86
import React, {useState, useEffect} from "react"; import React, {useState, useEffect} from "react";
import { useSelector, useDispatch} from "react-redux";
import {setSortKey, setSortOrder} from '../../redux/reducers/reporteesSlice';
import Loading from "../loading Component/Loading"; import Loading from "../loading Component/Loading";
import SortButton from "../sortButton"; import SortButton from "../sortButton";
function Table({headers, data,loading, maxHeight}) { function Table({headers, data,loading, handleSorting }) {
const [sortedData, setSortedData] = useState([]); const dispatch = useDispatch();
const [sortKey, setSortKey] = useState(null); const {sortKey, sortOrder} = useSelector((state) => state.reportees);
const [sortOrder, setSortOrder] = useState('asc'); // const [sortedData, setSortedData] = useState([]);
// const [sortKey, setSortKey] = useState(null);
// const [sortOrder, setSortOrder] = useState('asc');
useEffect(() => { // useEffect(() => {
if(sortKey) { // if(sortKey) {
setSortKey(null); // setSortKey(null);
} // }
setSortedData(data); // setSortedData(data);
}, [data]); // }, [data]);
// useEffect(() => {
// if(sortKey) {
// }
// }, [sortKey, sortOrder])
const handleSort = (key) => { const handleSort = (key) => {
const order = key === sortKey ? (sortOrder === 'asc' ? 'desc' : 'asc') : 'asc';
const order = key === sortKey ? (sortOrder === 'asc' ? 'desc' : 'asc') : 'asc';
if(sortOrder === 'desc' && key === sortKey) { if(sortOrder === 'desc' && key === sortKey) {
setSortedData(data); dispatch(setSortKey(null))
setSortKey(null); dispatch(setSortOrder('asc'));
setSortOrder('asc'); handleSorting(null, order)
} else { } else {
const sorted = [...data].sort((a, b) => { dispatch(setSortKey(key));
if (typeof a[key] === 'string') { dispatch(setSortOrder(order));
return order === 'asc' ? a[key].localeCompare(b[key]) : b[key].localeCompare(a[key]); handleSorting(key, order)
}
return order === 'asc' ? a[key] - b[key] : b[key] - a[key];
});
setSortedData(sorted);
setSortKey(key);
setSortOrder(order);
} }
// if(sortOrder === 'desc' && key === sortKey) {
// setSortedData(data);
// setSortKey(null);
// setSortOrder('asc');
// } else {
// const sorted = [...data].sort((a, b) => {
// if (typeof a[key] === 'string') {
// return order === 'asc' ? a[key].localeCompare(b[key]) : b[key].localeCompare(a[key]);
// }
// return order === 'asc' ? a[key] - b[key] : b[key] - a[key];
// });
// setSortedData(sorted);
// setSortKey(key);
// setSortOrder(order);
// }
}; };
...@@ -58,7 +79,7 @@ function Table({headers, data,loading, maxHeight}) { ...@@ -58,7 +79,7 @@ function Table({headers, data,loading, maxHeight}) {
{ {
(data?.length)?<tbody > (data?.length)?<tbody >
{ {
sortedData?.map((item, index) => ( data?.map((item, index) => (
<tr key={item.id} className="bg-white hover:bg-gray-300 " > <tr key={item.id} className="bg-white hover:bg-gray-300 " >
{ {
headers?.map(({render, id}) => ( headers?.map(({render, id}) => (
......
...@@ -10,7 +10,7 @@ import PaginationComponent from "../../components/Pagenation/Pagenation"; ...@@ -10,7 +10,7 @@ import PaginationComponent from "../../components/Pagenation/Pagenation";
function Dashboard() { function Dashboard() {
const dispatch = useDispatch(); const dispatch = useDispatch();
const navigate = useNavigate(); const navigate = useNavigate();
const { reportees, loading, totalCount, currPage, pagesCount} = useSelector((state) => state.reportees); const { reportees, loading, totalCount, currPage, pagesCount, sortKey, sortOrder} = useSelector((state) => state.reportees);
const userDetails = useSelector((state) => state.userDetails); const userDetails = useSelector((state) => state.userDetails);
const [reporteIds, setReporteIds] = useState([]); const [reporteIds, setReporteIds] = useState([]);
const [inputValue, setInputValue] = useState(null); const [inputValue, setInputValue] = useState(null);
...@@ -20,12 +20,22 @@ function Dashboard() { ...@@ -20,12 +20,22 @@ function Dashboard() {
let data = { let data = {
reportees: userDetails.user.reportees, reportees: userDetails.user.reportees,
page: currPage, page: currPage,
perPage: 10 perPage: 10,
sort: sortKey ? {type:sortKey, order: sortOrder === "asc" ? 1 : -1} : {}
} }
dispatch(setCurrPage(currPage)) dispatch(setCurrPage(currPage))
dispatch(fetchReportees(data)) dispatch(fetchReportees(data))
} }
const handleSort = (key, order) => {
let data = {
reportees: userDetails.user.reportees,
page: currPage,
perPage: 10,
sort: key ? {type:key, order: order === "asc" ? 1 : -1} : {}
}
dispatch(fetchReportees(data))
}
useEffect(() => { useEffect(() => {
dispatch(setPagesCount(Math.ceil((totalCount) / (10)))) dispatch(setPagesCount(Math.ceil((totalCount) / (10))))
...@@ -122,7 +132,7 @@ function Dashboard() { ...@@ -122,7 +132,7 @@ function Dashboard() {
<label>Search :</label> <label>Search :</label>
<input placeholder="Name/Id/Designation/Role" value={inputValue} onChange={handleChange} type="text" className="p-1 px-2 border rounded ml-2 placeholder:text-[14px]"/> <input placeholder="Name/Id/Designation/Role" value={inputValue} onChange={handleChange} type="text" className="p-1 px-2 border rounded ml-2 placeholder:text-[14px]"/>
</div> </div>
<Table headers={headers} data={reportees} loading={loading} maxHeight={88} /> <Table headers={headers} data={reportees} loading={loading} handleSorting={handleSort}/>
<div className=""> <div className="">
{reportees.length>0 && pagesCount>1 && ( {reportees.length>0 && pagesCount>1 && (
......
...@@ -174,7 +174,7 @@ function Exporttable() { ...@@ -174,7 +174,7 @@ function Exporttable() {
return true; return true;
} }
} else { } else {
if((preEmployee !== selectedEmployee && fromDate !== preFromDate && toDate !== preToDate) || activitiesData?.length === 0) { if((preEmployee !== selectedEmployee || fromDate !== preFromDate || toDate !== preToDate) || activitiesData.length === 0) {
return true; return true;
} }
} }
......
...@@ -9,7 +9,9 @@ const initialState = { ...@@ -9,7 +9,9 @@ const initialState = {
loading: false, loading: false,
error: null, error: null,
currPage:1, currPage:1,
pagesCount:1 pagesCount:1,
sortKey: null,
sortOrder: 'asc'
}; };
export const fetchReportees = createAsyncThunk("getreportees", async (data) => { export const fetchReportees = createAsyncThunk("getreportees", async (data) => {
...@@ -43,6 +45,12 @@ const reporteesSlice = createSlice({ ...@@ -43,6 +45,12 @@ const reporteesSlice = createSlice({
}, },
setPagesCount: (state, action) => { setPagesCount: (state, action) => {
state.pagesCount = action.payload state.pagesCount = action.payload
},
setSortKey: (state, action) => {
state.sortKey = action.payload
},
setSortOrder: (state, action) => {
state.sortOrder = action.payload
} }
}, },
extraReducers: (builder) => { extraReducers: (builder) => {
...@@ -64,6 +72,6 @@ const reporteesSlice = createSlice({ ...@@ -64,6 +72,6 @@ const reporteesSlice = createSlice({
}, },
}); });
export const {resetReportees,setViewReportee, setCurrPage, setPagesCount} = reporteesSlice.actions; export const {resetReportees,setViewReportee, setCurrPage, setPagesCount, setSortKey, setSortOrder} = reporteesSlice.actions;
export default reporteesSlice.reducer; export default reporteesSlice.reducer;
...@@ -15,7 +15,7 @@ const initialState = { ...@@ -15,7 +15,7 @@ const initialState = {
export const fetchReporteeActivities = createAsyncThunk("getReports", async (data) => { export const fetchReporteeActivities = createAsyncThunk("getReports", async (data) => {
return await axios return await axios
.post(`${base_url}/getActivities`, data) .post(`${base_url}/getActivities`, data)
.then((response) => response.data?.activities); .then((response) => {return {data:response.data?.activities, type:data.types}});
}); });
export const fetchActivitiesAvg = createAsyncThunk("getActivities-avg", async (data) => { export const fetchActivitiesAvg = createAsyncThunk("getActivities-avg", async (data) => {
...@@ -37,8 +37,8 @@ const reportSlice = createSlice({ ...@@ -37,8 +37,8 @@ const reportSlice = createSlice({
return {...state,loading :true,error :"loading"} return {...state,loading :true,error :"loading"}
}); });
builder.addCase(fetchReporteeActivities.fulfilled, (state, action) => { builder.addCase(fetchReporteeActivities.fulfilled, (state, action) => {
const {type} = action?.payload[0] ?? {} const {data, type} = action.payload;
return {...state,loading :false,error :"", [`${type}Reports`]: action.payload} return {...state,loading :false,error :"", [`${type[0]}Reports`]: data}
}); });
builder.addCase(fetchReporteeActivities.rejected, (state, action) => { builder.addCase(fetchReporteeActivities.rejected, (state, action) => {
return {...state,loading :false,error :action.error || "Something went wrong!",reports:null} return {...state,loading :false,error :action.error || "Something went wrong!",reports:null}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment