react-querybuilder

React Query Builder component for constructing queries and filters, with utilities for executing them in various database and evaluation contexts

react-querybuilder downloads react-querybuilder version react-querybuilder license

react-querybuilderSimilar Packages:

Npm Package Weekly Downloads Trend

3 Years
馃専 Show real-time usage chart on react-querybuilder's README.md, just copy the code below.
## Usage Trend
[![Usage Trend of react-querybuilder](https://npm-compare.com/img/npm-trend/THREE_YEARS/react-querybuilder.png)](https://npm-compare.com/react-querybuilder#timeRange=THREE_YEARS)

Cumulative GitHub Star Trend

馃専 Show GitHub stars trend chart on react-querybuilder's README.md, just copy the code below.
## GitHub Stars Trend
[![GitHub Stars Trend of react-querybuilder](https://npm-compare.com/img/github-trend/react-querybuilder.png)](https://npm-compare.com/react-querybuilder)

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
react-querybuilder01,6632.95 MB312 months agoMIT

README for react-querybuilder

react-querybuilder

The Query Builder component for React

React Query Builder is a fully customizable query builder component for React, along with a collection of utility functions for importing from, and exporting to, various query languages like SQL, MongoDB, and more.

Screenshot

Basic usage

npm i react-querybuilder
# OR yarn add / pnpm add / bun add
import { useState } from 'react';
import { Field, QueryBuilder, RuleGroupType } from 'react-querybuilder';
import 'react-querybuilder/dist/query-builder.css';

const fields: Field[] = [
  { name: 'firstName', label: 'First Name' },
  { name: 'lastName', label: 'Last Name' },
  { name: 'age', label: 'Age', inputType: 'number' },
  { name: 'address', label: 'Address' },
  { name: 'phone', label: 'Phone' },
  { name: 'email', label: 'Email', validator: ({ value }) => /^[^@]+@[^@]+/.test(value) },
  { name: 'twitter', label: 'Twitter' },
  { name: 'isDev', label: 'Is a Developer?', valueEditorType: 'checkbox', defaultValue: false },
];

const initialQuery: RuleGroupType = {
  combinator: 'and',
  rules: [],
};

export const App = () => {
  const [query, setQuery] = useState(initialQuery);

  return <QueryBuilder fields={fields} defaultQuery={query} onQueryChange={setQuery} />;
};

Customizations are not limited to the following libraries, but these have first-class support through their respective compatibility packages:

LibraryCompatibility packageDemoExample projects
Ant Design@react-querybuilder/antddemoCodeSandboxStackBlitz
Bootstrap@react-querybuilder/bootstrapdemoCodeSandboxStackBlitz
Bulma@react-querybuilder/bulmademoCodeSandboxStackBlitz
Chakra UI@react-querybuilder/chakrademoCodeSandboxStackBlitz
Fluent UI@react-querybuilder/fluentdemoCodeSandboxStackBlitz
Mantine@react-querybuilder/mantinedemoCodeSandboxStackBlitz
MUI@react-querybuilder/materialdemoCodeSandboxStackBlitz
React Native@react-querybuilder/nativeCodeSandboxStackBlitz
Tremor@react-querybuilder/tremordemoCodeSandboxStackBlitz

[!TIP]

To enable drag-and-drop, use @react-querybuilder/dnd.

For enhanced date/time support, use @react-querybuilder/datetime.

For rules engine functionality (if-then-else) use @react-querybuilder/rules-engine.

Export

To export queries as a SQL WHERE clause, MongoDB query object, or one of several other formats, use formatQuery.

const query = {
  combinator: 'and',
  rules: [
    {
      field: 'first_name',
      operator: 'beginsWith',
      value: 'Stev',
    },
    {
      field: 'last_name',
      operator: 'in',
      value: 'Vai, Vaughan',
    },
  ],
};

formatQuery(query, 'sql');
/*
"(first_name like 'Stev%' and last_name in ('Vai', 'Vaughan'))"
*/

Import

To import queries use parseSQL, parseMongoDB, parseJsonLogic, parseJSONata, parseCEL, or parseSpEL depending on the source.

// Tip: `parseSQL` will accept either a full `SELECT` statement or a `WHERE` clause by itself.
// Everything but the `WHERE` expressions will be ignored.

const query = parseSQL(
  `SELECT * FROM my_table WHERE first_name LIKE 'Stev%' AND last_name in ('Vai', 'Vaughan')`
);

console.log(query);
/*
{
  "combinator": "and",
  "rules": [
    {
      "field": "first_name",
      "operator": "beginsWith",
      "value": "Stev",
    },
    {
      "field": "last_name",
      "operator": "in",
      "value": "Vai, Vaughan",
    },
  ],
}
*/

Utilities

formatQuery, transformQuery, and the parse* functions can be used without importing from react (on the server, for example) like this:

import { formatQuery } from 'react-querybuilder/formatQuery';
import { parseCEL } from 'react-querybuilder/parseCEL';
import { parseJSONata } from 'react-querybuilder/parseJSONata';
import { parseJsonLogic } from 'react-querybuilder/parseJsonLogic';
import { parseMongoDB } from 'react-querybuilder/parseMongoDB';
import { parseSpEL } from 'react-querybuilder/parseSpEL';
import { parseSQL } from 'react-querybuilder/parseSQL';
import { transformQuery } from 'react-querybuilder/transformQuery';

(As of version 7, the parse* functions are only available through these extended exports.)