@react-querybuilder/dnd v8.7.1
@react-querybuilder/dnd
Augments react-querybuilder with drag-and-drop functionality.
To see this in action, check out the react-querybuilder demo with the drag-and-drop option enabled.
Installation
npm i react-querybuilder @react-querybuilder/dnd react-dnd react-dnd-html5-backend
# OR yarn add / pnpm add / bun addUsage
To enable the drag-and-drop functionality of a query builder, wrap the <QueryBuilder /> element in <QueryBuilderDnD /> and pass in the exports from react-dnd and react-dnd-html5-backend as props to QueryBuilderDnD.
import { QueryBuilderDnD } from '@react-querybuilder/dnd';
import * as ReactDnD from 'react-dnd';
import * as ReactDndHtml5Backend from 'react-dnd-html5-backend';
import { QueryBuilder, RuleGroupType } from 'react-querybuilder';
const fields = [
{ name: 'firstName', label: 'First Name' },
{ name: 'lastName', label: 'Last Name' },
];
const App = () => {
const [query, setQuery] = useState<RuleGroupType>({ combinator: 'and', rules: [] });
return (
<QueryBuilderDnD dnd={{ ...ReactDnD, ...ReactDndHtml5Backend }}>
<QueryBuilder fields={fields} query={query} onQueryChange={setQuery} />
</QueryBuilderDnD>
);
};Notes
- While not strictly necessary, we strongly recommend passing the
react-dndandreact-dnd-html5-backendexports in as props to<QueryBuilderDnD />. If they are not passed in as props, the initial render of the query builder will have drag-and-drop disabled until the dependencies are asynchronously loaded viaimport(). <QueryBuilderDnD />will automatically set theenableDragAndDropprop totrueon any descendant<QueryBuilder />elements unlessenableDragAndDropis explicitly set tofalseon the<QueryBuilder />element.<QueryBuilderDnD />does not need to be an immediate ancestor to<QueryBuilder />.- Multiple
<QueryBuilder />s may be nested beneath a single<QueryBuilderDnD />. The same drag-and-drop settings will be applied to each of them. If your application already uses
react-dndoutside the scope of a query builder, useQueryBuilderDndWithoutProviderinstead ofQueryBuilderDnDto inherit context from your existing<DndProvider />. Example:import { QueryBuilderDndWithoutProvider } from '@react-querybuilder/dnd'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; import { QueryBuilder, RuleGroupType } from 'react-querybuilder'; import { SomeOtherDndContextConsumer } from './SomeOtherDndContextConsumer'; const fields = [ { name: 'firstName', label: 'First Name' }, { name: 'lastName', label: 'Last Name' }, ]; const ChildComponentOfDndProvider = () => { const [query, setQuery] = useState<RuleGroupType>({ combinator: 'and', rules: [] }); return ( <QueryBuilderDndWithoutProvider> <QueryBuilder fields={fields} query={query} onQueryChange={setQuery} /> </QueryBuilderDndWithoutProvider> ); }; const App = () => { return ( <DndProvider backend={HTML5Backend}> <SomeOtherDndContextConsumer /> <ChildComponentOfDndProvider /> </DndProvider> ); };
1 year ago
6 months ago
6 months ago
6 months ago
10 months ago
10 months ago
5 months ago
8 months ago
6 months ago
9 months ago
8 months ago
8 months ago
9 months ago
7 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago