Search Builder
A great and easy search builder to your rails project
Instalação
Add it to your Gemfile:
gem 'visual_condition_builder'
Rubn the following command to install it:
$ bundle install
Add it to your app/assets/stylesheets/application.css
*= require visual_condition_builder
Add it to your app/assets/javascripts/application.js
//= require visual_condition_builder
Dependencies
Antes de iniciar o plugin você precisa ter o jQuery adicionado no seu application.js
Caso você tenha os seguintes plugins jQuery indicados no seu application.js, você deve remover:
- select2
- autoNumeric
Select2 Languages
Select2 supports multiple languages by simply including the right language JS file (visual_condition_builder/select2_i18n/it, visual_condition_builder/select2_i18n/pt-BR, etc.) after visual_condition_builder in your application.js
//= require visual_condition_builder
//= require visual_condition_builder/select2_i18n/pt-BR
Como usar
Instancie em um elemento jQuery passando os parametros necessários:
var builder = $('#div-exemplo-regras').ruleBuilder({
dicionario: [],
regras: [],
texto_instrucao: {
campos: 'Selecione um campo',
operadores: 'Selecione um operador',
valores: 'Informe um valor'
},
permite_brancos: true,
resultado: function(dados) {
//RETORNO DO RESULTADO EM JSON
}
});
Nos parâmetros dicionário e regras você pode informar diretamente um objeto com os dados ou informar uma url para carregar os dados. Atualmente o carregamento dessa fonte de dados é feita de forma síncrona);
var dicionario = [{
"variavel": "nome_do_campo", //
"tipo": "STRING", //
"descricao": "descricao_do_campo", //
"operadores": [
{"operador": "simbolo_do_operador", "descricao": "texto_do_operador"},
{"operador": "=", "descricao": "Igual"},
{"operador": "EMPTY", "descricao": "Vazio", "sem_valor": "true"},
{"operador": "IN", "descricao": "Presente em", "multiplo": "true"},
{"operador": "BETWEEN", "descricao": "Entre", "multiplo": "2" }
],
"valores": [
{"id": "1", "label": "Um"},
{"id": "65465", "label": "José da Silva"},
{"id": "2016-06-15", "label": "Data de Hoje"},
{"id": "50.8", "label": "Valor Total"}
]
}];
Parâmetros
dicionario
Array de Hash:
[{},{},{}, ...]
- variavel: Indica qual será o VALUE utilizado no
<option>do<select>na coluna CAMPO - tipo: Qual o tipo do valor do campo, esse tipo influência nos valores. Ex: Date mostra um datepicker no
<input>do valor.- STRING, DECIMAL(n), INTEGER, DATE, TIME
- descricao: Indica qual será o TEXT utilizado no
<option>do<select>na coluna CAMPO - operadores: Array de Hash com os operadores que esse campo possibilita selecionar.
- operador: Indica qual será o VALUE utilizado no
<option>do<select>na coluna OPERADOR - descricao: Indica qual será o TEXT utilizado no
<option>do<select>na coluna OPERADOR - sem_valor: Indica que esse operador não requer um valor, logo ele não será exibido.
- multiplo: Indica que o campo possibilita informar multiplos valores. Caso você passe um número para esse campo, esse número indicará quantas caixas de valores serão exibidas para esse campo.
- operador: Indica qual será o VALUE utilizado no
- valores: É o Array dos valores que será exibidos para o usuário durante a seleção desse campo. Caso você não informe valores, será exibido um campo em aberto de acordo com o tipo selecionado. Também pode ser informado uma URL para carregar os dados diretamente dessa fonte.
- id: Indica qual será o VALUE utilizado no
<option>do<select>na coluna VALOR - label: Indica qual será o TEXT utilizado no
<option>do<select>na coluna VALOR - Exemplo:
"valores": [{"id": "S", "label": "Sim" }, {"id": "N", "label": "Não" }]
- id: Indica qual será o VALUE utilizado no
regras
Array de Array:
[[],[], ...]
Esse parâmetro permite informar os dados que serão pré-selecionados ao carregar o plugin, é o estado inicial do plugin.
O array interno das regras sempre deverá ser informado com 3 elementos: ["CAMPO], "OPERADOR", "VALOR"], onde o valor poderá ser uma outra array caso esse campo permita seleção de múltiplos valores.
Exemplo:
var regras = [
["nome_do_campo", "simbolo_do_operador", "id_do_valor"],
["campo_sim_ou_nao", "=", "S"],
["campo_decimal", "=", "88884.55"],
["campo_multiplo_2", "BETWEEN", ["2015-07-21","2015-07-30"]],
["campo_multiplo_true", "IN", ["A","B","C","D"]]
];
permite_brancos
Boleano: true/false
Esse campo permite informar se as caixas de seleção irão ou não iniciar com valor "vazio" para que o usuário possa selecionar. Caso false seja informado o primeiro valor de cada coluna será pré-selecionado.
resultado
Função:
function(dados){}
Callback de retorno dos dados em JSON (type object), o retorno segue o mesmo padrão do parâmetro regra, logo o mesmo formato que você informa para pré-popular o plugin será o formato que o plugin retornará apóas as modificações do usuário.
Exemplo:
var resultado = function(objJSON) {
//CONVERTO JSON EM STRING COMO EXEMPLO...
var stringJSON = JSON.stringify(objJSON);
}
Esse callback é chamado toda vez que o usuário faz uma modificação no plugin. Caso você queira forçar a recuperação desses dados através de um botão, você pode fazer:
var builder = $('#div-exemplo-regras').ruleBuilder({
//...
});
$('#meu-botao').click(function(){
var objJSON = builder.getResultado();
//CONVERTO JSON EM STRING COMO EXEMPLO...
var stringJSON = JSON.stringify(objJSON);
});