Skip to content

Commit 893e23a

Browse files
committed
refactor: table view improvements.
1 parent 0ed7e01 commit 893e23a

File tree

1 file changed

+30
-22
lines changed

1 file changed

+30
-22
lines changed

src/components/roadmap/TableView.js

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
import React, { useState } from 'react';
22
import { Link } from 'react-router-dom';
3-
import CustomDropdown from '../CustomDropdown';
4-
import { FunnelIcon } from '@phosphor-icons/react';
5-
import { getStatusClasses, getPriorityClasses } from '../../utils/roadmapHelpers';
3+
4+
import { getStatusClasses, getPriorityClasses, statusTextColor } from '../../utils/roadmapHelpers';
65

76
const TableView = ({ issuesData = [] }) => {
87
const [sortBy, setSortBy] = useState('title');
98
const [sortOrder, setSortOrder] = useState('asc'); // 'asc' or 'desc'
10-
const [filterStatus, setFilterStatus] = useState('All');
9+
const [activeFilters, setActiveFilters] = useState([]); // Changed filterStatus to activeFilters
1110

12-
const filteredApps = issuesData.filter((app) =>
13-
filterStatus === 'All' ? true : (app.status || 'Planned') === filterStatus,
14-
);
11+
const handleFilterChange = (status) => {
12+
if (activeFilters.includes(status)) {
13+
setActiveFilters(activeFilters.filter((s) => s !== status)); // Remove filter
14+
} else {
15+
setActiveFilters([...activeFilters, status]); // Add filter
16+
}
17+
};
18+
19+
const filteredApps = issuesData.filter((app) => {
20+
if (activeFilters.length === 0) return false; // Show none if no filters active
21+
return activeFilters.includes(app.status || 'Planned');
22+
});
1523

1624
const sortedApps = [...filteredApps].sort((a, b) => {
1725
let comparison = 0;
@@ -52,20 +60,20 @@ const TableView = ({ issuesData = [] }) => {
5260

5361
return (
5462
<div className="overflow-x-auto rounded-xl shadow-lg bg-gray-900/70 backdrop-blur-sm border border-gray-800">
55-
<div className="mb-4 mt-4 flex justify-center items-center">
56-
<CustomDropdown
57-
options={[
58-
{ label: 'All Statuses', value: 'All' },
59-
{ label: 'Planned', value: 'Planned' },
60-
{ label: 'In Progress', value: 'In Progress' },
61-
{ label: 'Completed', value: 'Completed' },
62-
{ label: 'On Hold', value: 'On Hold' },
63-
]}
64-
value={filterStatus}
65-
onChange={setFilterStatus}
66-
icon={FunnelIcon}
67-
label="Filter by Status"
68-
/>
63+
<div className="mb-4 mt-4 flex justify-center items-center flex-wrap gap-2">
64+
{['Planned', 'In Progress', 'Completed', 'On Hold'].map((status) => (
65+
<button
66+
key={status}
67+
onClick={() => handleFilterChange(status)}
68+
className={`px-4 py-2 rounded-md text-sm font-mono transition-colors border ${
69+
activeFilters.includes(status)
70+
? `${getStatusClasses(status).split(' ')[0]} ${getStatusClasses(status).split(' ')[1]} ${statusTextColor(status)}`
71+
: 'bg-gray-800/60 border-gray-700 text-gray-300 hover:border-indigo-500 hover:text-white'
72+
}`}
73+
>
74+
{status}
75+
</button>
76+
))}
6977
</div>
7078
<table className="min-w-full divide-y divide-gray-700 text-white">
7179
<thead className="bg-gray-800/60 border-b border-gray-700">
@@ -125,7 +133,7 @@ const TableView = ({ issuesData = [] }) => {
125133
</td>
126134
<td className="px-6 py-4 whitespace-nowrap">
127135
<span
128-
className={`px-2 py-0 inline-flex text-xs font-mono font-semibold rounded-md shadow-sm border ${getStatusClasses(app.status)}`}
136+
className={`px-2 py-0 inline-flex text-xs font-mono font-semibold rounded-md shadow-sm border ${getStatusClasses(app.status)} ${statusTextColor(app.status)} `}
129137
>
130138
{app.status || 'Planned'}
131139
</span>

0 commit comments

Comments
 (0)