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) => (
))}
)),
items: (items) =>
items.map((