Finder: headless datatable management for things that aren’t tables

Introducing Finder: A Flexible Solution for Managing Dynamic Data Structures in WordPress

In the ever-evolving landscape of web development, managing complex, client-side data beyond traditional tables has become increasingly important. Meet Finderโ€”a powerful, lightweight library designed to handle diverse data structures that donโ€™t necessarily conform to standard table formats. Although currently in its alpha stage, Finder offers an innovative approach to data manipulation that integrates seamlessly with WordPress projects.

What is Finder?

Finder is a versatile data management tool originally developed to streamline in-game shop interfaces, player inventory systems, dashboards, and other applications involving dynamic, client-driven data. Its primary goal is to deliver an intuitive interface supporting features like searching, filtering, sorting, grouping, pagination, and item selectionโ€”all while maintaining simplicity and ease of use.

Unlike traditional table-focused solutions such as Tanstack Table or Material UI’s DataGrid, Finder emphasizes flexibility. It is built to handle non-tabular data structures without the heavy learning curve typically associated with advanced grid components.

Key Features

  • Accepts a simple array of items
  • Applies static or dynamic filtering rules
  • Supports searching, grouping, and sorting
  • Enables item selection and metadata storage
  • Offers a customizable interface for diverse data types

Getting Started

Using Finder in your WordPress environment involves providing it with your data array and defining rules to manipulate that data. Hereโ€™s a conceptual example to illustrate its straightforward implementation:

“`jsx
function FruitList(fruits) {
const rules = createFinderRuleset([
searchRule({
searchFn: (item, term) => item.name.includes(term),
}),
filterRule({
id: ‘texture’,
filterFn: (item, value) => item.texture === value,
}),
groupByRule({
id: ‘colorGroup’,
groupFn: (item) => item.color,
}),
]);

return (

{/ Custom input components for filters/search can be added here /}

{{
loading: “Loading data…”,
empty: “No items available”,
groups: ({ groups }) =>
groups.map(({ id, items }) => (

{id}

{items.map((item) => (

{item.name}

))}

)),
items: (items) =>
items.map((


Leave a Reply

Your email address will not be published. Required fields are marked *