Skip to content

[Feature]: Build a reusable DataTable component with built-in sorting and filtering so that all data-heavy views across the app can use a single consistent, powerful table implementation. #38

Description

@imSubhro

🤔 Problem It Solves

Right now data is displayed across multiple pages without a shared table component. Each view likely implements its own ad-hoc table structure with no sorting, no filtering, and no consistency. As the app grows and more data needs to be displayed this becomes harder to maintain and creates an inconsistent experience for users. A shared reusable DataTable component solves all of this in one place and becomes the foundation for every data view in the app going forward.

💡 Proposed Solution

  • Build a reusable DataTable component that accepts columns and data as props.
  • Sorting — clicking a column header sorts the table by that column in ascending or descending order with a visual indicator.
  • Filtering — a search input above the table filters rows in real time based on any matching field.
  • Pagination — display a configurable number of rows per page with next/previous controls.
  • Keep the component fully typed if the project uses TypeScript.
  • Style it consistently with the existing OPSCORD design system.

🔄 Alternatives Considered

A third-party library like TanStack Table or AG Grid could be used but they add significant bundle size and complexity. A lightweight custom component built for this project's specific needs is cleaner, more maintainable and keeps full control over styling and behavior.

📸 Mockups / Examples

Similar reusable table components are used across Linear, Notion databases, Airtable and most modern dashboards where data is displayed in sortable, filterable grids.

✅ Acceptance Criteria

  • DataTable component created and accepts columns and data as props.
  • Column header click sorts the table ascending and descending with a visual arrow indicator.
  • A search/filter input filters rows in real time.
  • Pagination controls allow navigating through large datasets.
  • Component is reusable across at least two existing data views in the app.
  • Fully responsive on mobile and desktop.
  • Styled consistently with the existing OPSCORD UI.

📋 Additional Context

This is a frontend engineering task that will have long-term value for the entire codebase. Once this component exists, every new data view in the app can simply drop in <DataTable /> instead of building a new table from scratch each time. It is one of those contributions that keeps giving well beyond the initial PR.

🌱 Contributor Checklist

  • I am participating via GSSoC
  • I have read the contribution guidelines
  • I checked for existing issues before creating this

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions