Code Monkey home page Code Monkey logo

react-awesome-query-builder's People

Contributors

afeedhshaji avatar alphazhe avatar apkawa avatar danyrojj avatar dependabot[bot] avatar derkobe avatar fernandobd42 avatar fubhy avatar jagzmz avatar lbrdar avatar linell avatar mujuni88 avatar mzrt avatar nardove avatar nikhilsarvaiye avatar pedroamcoelho avatar petermoresi avatar pstanize-nht avatar ravikirandn avatar ravipatil1982 avatar remejuan avatar rhallerman avatar robinbullock avatar ruzz311 avatar shaimo avatar spetsmash avatar tagorecaue avatar tk-o avatar ukrbublik avatar vvf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-awesome-query-builder's Issues

queryBuilderFormat

Is there a way to use the result of queryBuilderFormat to repopulate the querybuilder in the value prop?

Is there a way to deserialize a saved query and bind to the query Builder

Lets say i have created a query using the query builder with set of fields/operators/values and saved it(JSON) to storage. On my next visit(refresh) to the UI page i want to recreate the UI with all controls(fields/operators/values) with specific values i saved from the saved query in storage with the specific previous values selected.

Can't Install on Windows?

Hi. Project looks great. I wanted to play with it, but can't get past the first step.. "npm install".

It's failing on "rm -rf build/npm && babel -d build/npm/lib ./modules && cp README.md build/npm...."

I'm not very familiar with npm, but it looks like if I want to run the examples, I would need to do some hacking to convert *nix script code to Windows?

Messing up the styles in an existing project

I have a project and I wanted to integrate this query builder into it, but it messes up all my styles. Can anyone help me to find a way to "isolate" query builder own styles from the rest of the styles from the application?

Warning: Failed prop type: Invalid prop `children1` of type `Map` supplied to `Item`, expected instance of `OrderedMap`.

Warning: Failed prop type: Invalid prop `children1` of type `Map` supplied to `Item`, expected instance of `OrderedMap`.

For anyone who ever faces the above warning after converting the tree output using fromJS from Immutable, you can solve it by doing the following:

function fromJSOrdered(js){
  return typeof js !== 'object' || js === null ? js :
    Array.isArray(js) ? 
      Immutable.Seq(js).map(fromJSOrdered).toList() :
      Immutable.Seq(js).map(fromJSOrdered).toOrderedMap()
}

Reference: https://github.com/facebook/immutable-js/wiki/Converting-from-JS-objects#custom-conversion

API for add rule

Hey, this library looks like a great fit for my project!

I am however unsure of whether there exists any functionality for calling add rule externally, like from a separate meny in my webapp. Would this be something that could be inserted into Query as a value?

I have read the example code and the github issues. My apology if this question / functionality has already been covered.

Building Issue

I am getting below error after importing component in application

node_modules\antd\lib\style\index.css:12
SyntaxError: Unexpected token {
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object. (node_modules\antd\lib\col\style\css.js:3:1)

Underscore in string queries

Is there any reason why there's an underscore prepended to string queries. In my implementation, there is a single underscore. In the demo implementation, there are 2 underscores.

If this is a bug, I'll look into it and submit a PR, but if there's a reason I'm unaware of, feel free to let me know.

Thanks for creating this neat little wrapper!

screen shot 2018-11-05 at 9 35 02 am

screen shot 2018-11-05 at 10 01 33 am

Can't Install With NPM

I am getting the below error. I have already antd installed in a project .


$ npm i react-awesome-query-builder
[email protected] /Users/umutguncan/netionant
└─┬ [email protected]
  └─┬ [email protected]
    ├── [email protected]
    ├── [email protected]
    ├── [email protected]
    ├─┬ [email protected]
    │ └── [email protected]
    ├─┬ [email protected]
    │ └── [email protected]
    ├── [email protected]
    ├── [email protected]
    ├── [email protected]
    ├── [email protected]
    ├── [email protected]
    ├── [email protected]
    ├── [email protected]
    ├── [email protected]
    └── [email protected]

npm WARN [email protected] requires a peer of webpack@1 || 2 || ^2.1.0-beta || ^2.2.0-rc but none was installed.

Typing invalid values fails quietly

typing something that doesn't make sense into the query builder makes it fail quietly.

Perhaps we could add an actual error message, disallow invalid inputs, or just in some way tell the user what happened

SQL format Util?

Is there already something available (or) something on the roadmap to get the SQL equivalent of the query
that can become the WHERE clause and passed to the database.

Could be an extension to the human string format queryString

reset query Conds and hidden Buttons for simple query

@ukrbublik Hello, thanks for your work. I'm developing a big data center. So the query conditions may be very complex. I haven't found how to reset all conditions, just like this:
reset
What's more?Is it possible to hide all the add, add group,and ,or, del Buttons for just a simple search box?
searchonly
pls give me some suggestion.

Update to latest version of antd

This lib is using with antd v2.12.2 which is bit aged. Some of my components rendered differently after this library being used. I assume this is cause by the older version of antd.

Select[mode] deprecation warning

Thanks for this awesome library! We're seeing a deprecation warning in the console when using the select widget:

browser.js?3a0d:49 Warning: `Select[multiple|tags|combobox]` is deprecated, please use `Select[mode]` instead.

Can follow up with a PR later.

Add custom table to fields configuration

My end goal is that I want to be able to query two tables from the same heading in the query builder. As an example, right now I've got something like this:

    members: {
      label: 'Members',
      type: '!struct',
      subfields: {
        subname: {
          type: 'number',
          operators: ['equal'],
        },
        members_count: { // reference aggregates table
          label: 'Count',
          type: 'number'
        }
      }
    }

Right now this would generate members.subname and members.members_count, but I'd like to have the option to set something like tableName (or something more generic, if you can think of it) so that it'd generate aggregates.members_count while still showing up as one group in the builder.

screen shot 2018-01-04 at 4 34 52 pm

$elemMatch

Hi,

For the MongoDB support, do you have a way to customise the queries? jQuery-querybuilder has an event you can hook into which allows us to utilise $elemMatch.

Thanks

Setting for "Add rule"

It would be great to have a setting that shows/hides "Add rule" button.

User case, I would like to show a "ready-only" mode where it shows the rules but does not allow to make changes. I understand that there will need to be other things to make it really readonly, but this could be a start.

If you're ok with this proposal, I can create a PR

Restore from saved result will convert list of value to single value.

I have a configured a in operator which allows a list of values.

select_in: {
    label: 'in',
    labelForFormat: 'IN',
    formatOp: (field, op, values, valueSrc, valueType, opDef, operatorOptions, isForDisplay) => {
      if (valueSrc === 'value') {
        return `${field} IN (${values.join(', ')})`
      } else {
        return `${field} IN (${values})`
      }
    },
    reversedOp: 'select_not_in'
  }

Say, I have stored a select_in item have values [1, 2, 3] in my savedTree.

When restore form the tree.

        <Query
          {...config}
          value={savedTree}
          onChange={this.onChange}
          get_children={this.getChildren}
        > </Query>

The constructor of ConnectedQuery at line will call the validateTree.

this.validatedTree = this.validateTree(props, props.config, props.tree);

And then goto the line:

const operatorCardinality = newOperator ? defaultValue(newOperatorConfig.cardinality, 1) : null;

will set operatorCardinality to 1 for my select_in operator. And the the follow line use operatorCardinality to cut my list of 3 values to list of only 1 value:

newValue = new Immutable.List(Array.from({length: operatorCardinality}, (_ignore, i) => {

The the newValue will will be [1].

Bundling issue

So I'm running into an issue with webpack when I bundle this component in with a module.

This is the error I get out on the browser:

621:1 Uncaught Error: Module build failed: 
@import "./themes/default";
@import "./core/index";

^
      File to import not found or unreadable: ./themes/default.
Parent style sheet: stdin
      in C:\vso-git\myapp\node_modules\antd\lib\style\index.less (line 1, column 1)

here's what I get in the CLI:

ERROR in ./~/css-loader!./~/less-loader/dist/cjs.js!./~/sass-loader/lib/loader.js?{"includePaths":["./AdvancedSearch/Adv
ancedSearch/Content/Modules/AdvancedSearch","C://vso-git//myapp//host//Content"]}!./~/antd/lib/style/index.les
s
Module build failed:
@import "./themes/default";
@import "./core/index";

^
      File to import not found or unreadable: ./themes/default.
Parent style sheet: stdin
      in C:\vso-git\myapp\node_modules\antd\lib\style\index.less (line 1, column 1)
 @ ./~/antd/lib/style/index.less 4:14-146
 @ ./~/antd/lib/date-picker/style/index.js
 @ ./~/react-awesome-query-builder/build/npm/lib/components/widgets/Number.js
 @ ./~/react-awesome-query-builder/build/npm/lib/components/widgets/index.js
 @ ./~/react-awesome-query-builder/build/npm/lib/index.js
 @ ./AdvancedSearch/AdvancedSearch/App/Modules/AdvancedSearch/viewmodels/QueryBuilderEx.es6
 @ ./~/babel-loader/lib?{"presets":["babel-preset-es2015","react","stage-3"]}!./AdvancedSearch/AdvancedSearch/App/Module
s/AdvancedSearch/viewmodels/AdvancedSearch.es6
 @ ./AdvancedSearch/AdvancedSearch/App/Modules/AdvancedSearch/viewmodels/AdvancedSearch.es6
 @ multi ./AdvancedSearch/AdvancedSearch/App/Modules/AdvancedSearch/viewmodels/AdvancedSearch.es6 ./AdvancedSearch/Advan
cedSearch/App/Modules/AdvancedSearch/viewmodels/AdvancedSearch.html

Now this could be an issue with antd, as the error is clearly coming from that library. And there's a bunch of other less style issues that I am getting this is just 1 / 6 errors I'm getting all pointing to the less styles in antd design.

I have a less-loader in my webpack below is my configuration:

    module: {
        rules: [{
            test: /\.es6|.jsx|.js$/,
            loader: 'babel-loader',
            exclude: /node_modules/,
            options: { presets: ['babel-preset-es2015', 'react', 'stage-3'] } //stage-3 does the polyfilling for '...' syntax
        }, {
            test: path.resolve(moduleExportPath),
            exclude: /node_modules/,
            use: [{
                loader: 'expose-loader',
                options: `__${type}_${dmxModule}`
            }, {
                loader: 'babel-loader',
                options: { presets: ['babel-preset-es2015', 'react', 'stage-3'] } //stage-3 does the polyfilling for '...' syntax
            }]
        }, {
            test: /\.html$/,
            loader: 'custom-knockout-template-loader!html-loader'
        }, {
            test: /\.(scss|css|less)$/,
            //include: path.resolve(__dirname, './host/Content'),
            //exclude: /node_modules/,
            use: [{
                loader: "style-loader" // creates style nodes from JS strings
            }, {
                loader: "css-loader" // translates CSS into CommonJS
            }, {
                loader: "less-loader",
            }, {
                loader: "sass-loader", // compiles Sass to CSS
                options: {
                    includePaths: [moduleCssRootFile, path.resolve(__dirname, './host/Content')]
                }
            }]
        }, {
            test: /\.json$/,
            loader: 'json-loader',
        }],
        loaders: [{
            test: /exporting/, loader: 'imports?highstock'
        }, {
            test: /highcharts.modules.treemap/, loader: 'imports?highstock,highcharts.modules.heatmap'
        }, {
            test: /highcharts.modules.heatmap/, loader: 'imports?highstock'
        }]
    }

So I could be using the less loader incorrectly here. If so let me know what I should do I've tried a few different approaches. Including how you configured your webpack config here: https://github.com/ukrbublik/react-awesome-query-builder/blob/master/webpack.config.js

ERROR in ./node_modules/antd/lib/time-picker/style/index.js

My webpack is failing:

Module not found: Error: Can't resolve 'style' in path'

BREAKING CHANGE: It's no longer allowed to omit the '-loader' suffix when using loaders.
You need to specify 'style-loader' instead of 'style',
see https://webpack.js.org/guides/migrating/#automatic-loader-module-name-extension-removed
 @ ./node_modules/antd/lib/time-picker/style/index.js 5:0-23
 @ ./node_modules/antd/lib/date-picker/style/index.js
 @ ./node_modules/react-awesome-query-builder/build/npm/lib/components/widgets/Number.js
@ ./node_modules/react-awesome-query-builder/build/npm/lib/components/widgets/index.js
@ ./node_modules/react-awesome-query-builder/build/npm/lib/index.js

setDefaultFieldAndOp:true no longer updates query or widget.

Hello ,
I ran into some weird issue when trying to set setDefaultFieldAndOp to true. while it initializes the rule correctly with the correct Field & Operator. updating the value doesn't reflect in the input or the query unless you change the operator to something else ().

You can easily Reproduce the issue by cloning a fresh clone and changing setDefaultFieldAndOp to true. and add any defaultField for example name2.

I am suspecting the issue is originating from "valueType" being initialized with an object and not an array. but i am not sure where to go from there. So any help would be apprechiated.
Thanks

Don't run in IE

Awesome query builder does not render in Internet Explorer.

I get "Object doesn't support property in method 'remove'" on stuff.js (45,3)

The sample also fails (with a different error in this case).

readme

  • .query-builder-container for sortable in scrollable container
  • config

Suggestions for Accessibility

I am running into accessibility problems using a screen reader because this library depends on Ant Design (see here: ant-design/ant-design#13198)

Has anyone come up with any workarounds to make the components listed accessible via screen reader?

Thanks!

how to update fields data from database at <Query> component?

Hi,I like you component.I want to update field data from database at component,But
exception:


react-dom.development.js:244 Uncaught TypeError: Cannot read property 'type' of undefined
    at _validateValue (tree.js:357)
    at setValue (tree.js:533)
    at tree.js:635
    at dispatch (createStore.js:165)
    at Object.setValue (stuff.js:28)
    at Object.RuleContainer._this.setValue (RuleContainer.js:73)
    at WidgetContainer._this._setValue (WidgetContainer.js:98)
    at Object.NumberWidget._this.handleChange [as onChange] (Number.js:68)
    at Object.setValue (mixin.js:140)
    at Object.onBlur (mixin.js:93)
    at HTMLUnknownElement.callCallback (react-dom.development.js:104)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:142)
    at Object.invokeGuardedCallback (react-dom.development.js:191)
    at Object.invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:205)
    at executeDispatch (react-dom.development.js:470)
    at executeDispatchesInOrder (react-dom.development.js:492)
    at executeDispatchesAndRelease (react-dom.development.js:590)
    at executeDispatchesAndReleaseTopLevel (react-dom.development.js:601)
    at forEachAccumulated (react-dom.development.js:571)
    at runEventsInBatch (react-dom.development.js:732)
    at runExtractedEventsInBatch (react-dom.development.js:741)
    at handleTopLevel (react-dom.development.js:4198)
    at batchedUpdates (react-dom.development.js:12510)
    at batchedUpdates (react-dom.development.js:1943)
    at dispatchEvent (react-dom.development.js:4279)
    at interactiveUpdates (react-dom.development.js:12565)
    at interactiveUpdates (react-dom.development.js:1962)
    at dispatchInteractiveEvent (react-dom.development.js:4256)

my query config:
fields:{},
other config is not changed from demo,


<Query
                       {...query_config}
                       fields={this.state.from_db_fields}
                      //you can pass object here, see treeJSON at onChange
                      //value=transit.fromJSON(treeJSON)
                          get_children={this.getChildren} />


this.state.from_db_fields had data from database.
please help .
how to update fields data from database at component?
Thanks your see!

Allow either Immutable or plain json object on import

Immutable strings aren't exactly the best transport for doing any type of AST eval on the backend. So in order to support a backend eval as well as frontend initialization, you would need to store a tuple of a regular json representation as well as the immutable representation (wasteful), or write a recursive fold over the json -> immutable representation. The former is a bad idea for a few reasons, so if you're just left with the latter, why not just support that at a library level?

I generally prefer language level persistent immutable data structures, but for a language like JS that doesn't have it, it seems like a much better idea to enforce immutability internally (if at all), and to allow the option to expose those internals when requested

querybuilder form elemnts hides onclick or onchange of other form elemnts on the page

I have other form elements like drop down, check box etc present on the page along with query builder.. If i have multiple row visible with query builder with data in it & if i click on other form elements which are not part of query builder then all query builder row disappear and query string becomes empty.
I noticed that in my onchage function i am using this.setState({someFlag :true})
if i comment this.setState({someFlag :true}) code then above issue does not happen, but i need
use setState inside my function.

Can you please help me on this issue.

Multi-tiered or nested json?

Does the builder support multi-tiered feature Where the first drop down opens another select box with 2nd drop down options?? Basically like a nested JSON.

Something like this?

image

Dynamic Config Possible?

Hi. I've been playing around with this. It seems very well done. Looks nice and very flexible and functional.
One problem I'm having is that I don't see an obvious way to dynamically load fields. The config is a full-blown javascript file. If I understand correctly, then this has to be compiled/bundled by webpack.
I'm new to react, webpack, etc, so maybe I just don't understand it well enough.
I need the 'fields' portion of the config file to be dynamically generated at load time. Is there an easy way to do this?
I will have potentially hundreds of fields and they will change depending on who's looking at it.
Thanks

New type in query builder?

Is there any way to add new type other than existing? Like for between query builder I would like add slider control (other that two input controls), for that I tried to add new Type but its not working for my.
Or is there any other way to add Slider widget in existing code?

Bad validation of multiselect values when using redux and immutable-js

Hey @ukrbublik,

So I have been using your library (with redux) for a while now and its been working great! However, I was recently asked to attempt to add multiselect, and found some issues with the MultiSelectWidget when storing the querytree in redux (or probably any other storage).

What happens
My program takes the onChange querytree from Query and stores them in redux, then uses this tree to reinstantiate Query. However, when I try to initialize Query with a querytree containing MultiSelectWidgets, their values are immediatly reset.

What I think causes this
I believe that I have located the bug in the function _getNewValueForFieldOp in modules/stores/tree.js. After doing some console.log testing, I can see that this if-sentence does not have an else statement, and in my case of trying to add a value to a MultiSelectWidget, the newValue is not set and is thus reset to undefined. The problem is not here. Firstly the value is in the wrong format (immutable list rather than normal list), secondly this if triggers and sets the value to invalid.

debug

Whats in the image
Here are some console.logging I did. It shows the currentval and return value of this if sentence. As you can see, the currentval is at one point a List [ List [] ], which doesn't run properly.

What I thought I could do
I kinda already promised to deliver this functionality, so I would like to create a pull request, mb tomorrow or something. I can however not be 100% sure that I dont make any breaking changes, since this is core functionality. So if you could help me out with checking if my pull request is good that would be great :)

TL;DR: I think I found a bug, will make PR, please help to ensure its good

EDIT: update with more debugging info

How do I avoid nested fields labels being together ?

A structure like this:
screen shot 2018-12-28 at 17 57 03

Ends up causing a weird effect:

screen shot 2018-12-28 at 18 00 59

This effect will be undercovered if you have simple fields placed first... The problem is that fields is an object and object's property order is a complex matter :)

Is there any setting to avoid this behaviour ? Is there a possibility to pass an array as fields so we can have order?

Best regards

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.