How to Use the React Awesome Query Builder

Nov 23, 2021 | Programming

In today’s world of web development, the ability to create dynamic and user-friendly query builders is crucial. The React Awesome Query Builder is a powerful tool that allows you to construct complex queries with ease. Inspired by jQuery QueryBuilder, this component is optimized for different UI frameworks such as Ant Design, Material-UI, and Bootstrap. Let’s dive into how you can integrate and maximize its capabilities.

Features

  • Highly configurable to suit your needs.
  • Supports multiple field types, operators, and functions.
  • Allows for aggregation functions and dynamic rule creation.
  • Native Themes for various UI frameworks.
  • TypeScript support for enhanced code quality.

Getting Started

The React Awesome Query Builder library is modular and divided into several packages. Utilize only the necessary packages for optimal performance. For example, if you’re using MUI, you only need to install:

npm i @react-awesome-query-builder/mui --save

Example Walk-Through

Imagine building a recipe card—each recipe has a name, cooking time, ingredients, and dietary preferences. Likewise, the React Awesome Query Builder allows you to construct a query containing various fields and logical operations.

Setting Up the Query

First, you will create a minimal JavaScript example using the class component:


import React, { Component } from 'react';
import { Utils as QbUtils, Query, Builder, BasicConfig } from '@react-awesome-query-builder/ui';
import '@react-awesome-query-builder/ui/lib/css/styles.css';

const InitialConfig = BasicConfig; // Base configuration

const config = {
  ...InitialConfig,
  fields: {
    qty: {
      label: "Qty",
      type: "number",
      fieldSettings: { min: 0 },
      valueSources: ["value"],
      preferWidgets: ["number"]
    },
    price: {
      label: "Price",
      type: "number",
      valueSources: ["value"],
      fieldSettings: { min: 10, max: 100 },
      preferWidgets: ["slider", "rangeslider"]
    },
    name: {
      label: "Name",
      type: "text",
    },
    // More fields...
  },
};

const queryValue = { id: QbUtils.uuid(), type: 'group' };

class DemoQueryBuilder extends Component {
  state = {
    tree: QbUtils.loadTree(queryValue),
    config: config
  };

  // Render function and other methods...
}

In this example, you are setting up the configuration for different fields just like ingredients in a recipe. Each field (ingredient) has specific properties like type and settings.

Minimal TypeScript Example

For those using TypeScript, here’s a streamlined version:


import React, { useState } from 'react';
import type { Config } from '@react-awesome-query-builder/ui';
import { Utils as QbUtils, Query, Builder, BasicConfig } from '@react-awesome-query-builder/ui';
import '@react-awesome-query-builder/ui/lib/css/styles.css';

const InitialConfig = BasicConfig;

const config: Config = {
  ...InitialConfig,
  fields: {
    qty: { label: "Qty", type: "number", fieldSettings: { min: 0 }, valueSources: ["value"], preferWidgets: ["number"] },
    // Additional fields...
  },
};

const DemoQueryBuilder: React.FC = () => {
  const [state, setState] = useState({ tree: QbUtils.loadTree(queryValue), config });

  // Render function and other handlers...
};

This code mirrors the spirit of the first example but utilizes the benefits of TypeScript for better type checking and safety.

Troubleshooting

If you run into issues while integrating the React Awesome Query Builder, consider the following troubleshooting ideas:

  • Ensure all necessary packages are installed and up to date.
  • Check your configuration object; any syntax errors here may cause issues.
  • Utilize the console to debug. Place console.log statements in the onChange method to observe the state changes.
  • Refer to the official documentation for detailed usage examples.

For more insights, updates, or to collaborate on AI development projects, stay connected with fxis.ai.

Conclusion

At fxis.ai, we believe that such advancements are crucial for the future of AI, as they enable more comprehensive and effective solutions. Our team is continually exploring new methodologies to push the envelope in artificial intelligence, ensuring that our clients benefit from the latest technological innovations.

Stay Informed with the Newest F(x) Insights and Blogs

Tech News and Blog Highlights, Straight to Your Inbox