1. acceptOnlyNumbers (boolean)
  2. actions (objeto)
  3. align (string)
  4. breakline (boolean)
  5. class (integer)
  6. dataSource (object)
  7. dataSourceFilter (array)
  8. defaultTab (string)
  9. descriptionOrder (integer)
  10. dateFormat (string)
  11. dateTime-dateFormat (string)
  12. datetime-dateOrder (string)
  13. datetime-preset (string)
  14. endLabel: (string)
  15. expandingProperty (string)
  16. breadcrumbProperty (string)
  17. fieldGroup (string)
  18. fieldGroups (array)
  19. filterProperties (objeto)
  20. floatingControl (objeto)
  21. focused (boolean)
  22. hideEmptyValue (boolean)
  23. id (string)
  24. itemsPerPage (string)
  25. isVisible (boolean)
  26. label (string)
  27. maxlength (integer)
  28. mask (object)
  29. name (string)
  30. order (string)
  31. placeholder (string)
  32. primaryProperty (string)
  33. parentProperty (string)
  34. order (string)
  35. readOnly (boolean)
  36. readOnlyOnEdit (boolean)
  37. searchIn (string)
  38. separator (string)
  39. sequenceInList (integer)
  40. showDescriptionOrder (boolean)
  41. showHeader (boolean)
  42. showMenu (boolean)
  43. showOnList (boolean)
  44. showOnForm (boolean)
  45. showSelectAs (string)
  46. startLabel: (string)
  47. validations (object)
  48. valueToTrue (string)
  49. valueToFalse (string)

acceptOnlyNumbers (boolean)

Como o nome diz, isso deveria permitir somente números em um campo quando true, mas não consegui fazer funcionar, aparentemente o jeito correto e funcional é com mask!.

Testado, Não Funcionou.

Exemplo:

{
  "acceptOnlyNumbers": true
}

actions (objeto)

Parcialmente Testado

Adiciona um botão no footer da página, que chama um evento javascript ao ser clicado. action fazer algo

Exemplo:

  "actions": [
      {
              "id": "",
              "name": "acao",
              "label": "Fazer Algo",
              "showAsAction": "never",
              "events": [
                  {
                      "id": "",
                      "name": "ActionEvent",
                      "code": ""
                  }
              ]
          }
                    
  ]

Se você coloca um icone para o botão com icon, ele imediatamente se alinha ao centro. Ainda não sei o que o showAsAction faz tho, tanto o always quanto o never aparecem na tela então vai saber ¯_(ツ)_/¯


align (string)

Não Testado

Breakline false

Exemplo:

{
  "align": true
}

breakline (boolean)

Testado

Breakline false Faz com que o campo seja exibido em uma nova linha/parágrafo. (Por padrão cada tela tem a largura máxima 12, caso o breakline for inexistente ou false, os campos sempre serão alinhados horizontalmente até que o espaço seja completamente ocupado. Caso seja true ele é forçado a ser movido para uma nova linha.)

Exemplo:

{
  "breakline": true
}

class (integer)

Testado

Largura de um campo na tela, pode ter valores até 12 (tamanho máximo da tela).

Exemplo:

{
  "class": 12
}

dataSource (object)

Fonte de dados (literalmente no nome). Porém quero me lembrar de que dá pra usar tanto os caminhos de dataSources definidos pelo framework, como fis#/crud/fitipoctreceberlial com os atributos rest e lazyLoad, quanto dados definidos localmente.

Só é necessário que uma das colunas retornadas pelo datasource existam como campo no grid pra que os dados sejam recebidos na tela. Exemplo:

{
  "dataSource": {
    "rest": true,
    "name": "fis#/crud/tipoctreceber",
    "lazyLoad": true
   }
}

Quando exibindo dados de um dataSource em um grid, são necessários: Um campo com um dos valores retornados. e um order. Porém, quando usando um caminho de dataSource crud em um campo, é necessário um filterProperties.

ou usando o sub-atributo data {} para definir dados localmente! Útil quando se se sabe as opções que devem ser carregadas, como “Sim” ou “Não”. E os sub-sub atributos value e description definem o valor e o nome exibido.

  "dataSource": {
        "data": [
            {
                "value": "S",
                "description": "Sim"
            },
            {
                "value": "N",
                "description": "Não"
            }
        ]
    }

mas aparentemente tu tem que meter um

{
   "valueField": "value",
    "descriptionField": "description"
}

com os atributos lá no campo pra decidir o que vai aparecer se não fica em branco.


dataSourceFilter (array)

Parcialmente Testado

O filtro aplicado na sua tela (sempre um grid) pra decidir que dados vão ou não aparecer. É uma array com objetos definindo um filtro especifico que normalmente leva três atributos: name, operator e value.

    "dataSourceFilter": [
          {
              "name": "IDCONTCCUS",
              "operator": "IN",
              "value": "R"
          },
          {
              "name": "IDTIPOCONT",
              "operator": "=",
              "value": "A"
          }
                                          
      ]

É muito simples. O filtro procura nos dados da tela, linhas cujo campo (name), seja relacionado de forma (operator) à algum valor (value).

No exemplo:

{
    "name": "CDEMPRESA",
    "operator": "=",
    "value": "01"
}

Só serão exibidas linhas cujo valor de CDEMPRESA seja IGUAL (=) à 01.

Entre os operadores (operator) que se podem usar estão:

  • =: Valor IGUAL.
  • IN: Valor se encontra entre os valores. e.g: se o valor está dentro de uma array.
  • ORDER_BY:
  • <>:

Lembrando que dentro de value é possível passar valores dinâmicos, contanto que tudo esteja dentro de @;


defaultTab (string)

Testado

Qual a tab/guia/janela padrão que aparece ao carregar num template widget/tabbedWidget.html.

{
  "defaultTab": "NomeDaTab"
}

descriptionOrder (integer)

Testado

exemplo field group

A ordem na qual o titulozinho que aparece no swipe quando se expande a linha do grid. Tem um nome pro que eu quero dizer mas eu esqueci :p Mentira, achei que era um breadcrumb mas não sei se conta.

{
  "descriptionOrder": 1
}

dateFormat (string)

Pacialmente Testado

O formato que você quer que o seu campo de data/calendário mostre um valor. Pode ser só ano YYYY, ano simplificado YY, mês MM, mês + ano MM/YY. Sempre separado por barra (/).

{ 
  "dateFormat": "YYYY"
}

dateTime-dateFormat (string)

Pacialmente Testado

{
  "datetime-dateFormat": "yy"
}

datetime-dateOrder (string)

{
  "datetime-dateOrder": "YYYY"
}

“datetime-preset”: “date”,

datetime-preset (string)

{
  "datetime-preset": "date"
}

endLabel: (string)

endLabel

Testado

Título da segunda data (final) a ser escolhida em um campo de período/intervalo Veja também: endLabel

Exemplo:

{
  "endLabel": "Data 1"
}

expandingProperty (string)

Não Testado

Algo relacionado a tree widget template, vou testar ainda


Não Testado

Algo relacionado a tree widget template, vou testar ainda


fieldGroup (string)

Testado

exemplo field group Fazer com que um campo seja parte de um grupo de campos.

{
  "fieldGroup": "grupo_1"
}

Lembrando que se deve usar o mesmo name do fieldGroup em que se quer adicionar o campo.


fieldGroups (array)

Testado

Dá pra criar grupos de campos nos menus. Menus colapsáveis ou não.

 "fieldGroups": [
                {
                    "id": "1234564321434560987634685",
                    "name": "grupo_1",
                    "label": "Grupo",
                    "collapsible": true,
                    "opened": false
                }
 ]

Lembrando que ele NÃO aparece a menos que tenha pelo menos um campo com o atributo fieldGroup com o name desse menu

Se usa collapsible para definir se o menu é dinâmico/colapsável (pode ser aberto e fechado).

Se usa opened para defenir se o menu aparece aberto ou fechado quando o widget carrega.


filterProperties (objeto)

MEU DEUS DO CÉU QUE ISSO

O filter properties é um jeito de filtrar dados de um dataSource em um campo. Por partes:

  • O filterProperties não precisa de uma ID.
  • Um label não é necessário no filterProperties, mas caso tenha ele tem prioridade e SUBSTITUI o label do campo pai.
  • Atributos como valueField, descriptionField, showSelectAs e até dataSource normalmente se encontram DENTRO DO FILTER PROPERTIES, não sei se é necessário ou só boas práticas mas alguns desses campos funcionam pro filtro dentro ou fora do filterProperties. Na dúvida vou colocar dentro.
  • É literalmente um campo por si próprio, pra exibir os dados de um dataSource no filtro vocÊ precisa dos campos dentro do fields. Os campos, necessitam do "showOnList": true, se não, não vão aparecer ao expandir.
  • "searchableFields": [] É NECESSÁRIO, sem ele, o campo se mata.
  • "valueField": "" também É NECESSÁRIO, como é em qualquer select.
  "filterProperties": {
        "template": "zh-select-autocomplete#field/select-autocomplete.html",
        "searchableFields": [
            "CDFILIAL",
            "NMFILIAL"
        ],
        "valueField": "CDFILIAL",
        "dataSource": {
            "rest": true,
            "name": "fis#/crud/filial",
            "lazyLoad": true
        },
        "fields": [
            {
                "label": "Código",
                "name": "CDFILIAL",
                "showOnList": true,
                "template": "field/text-edit.html"
            },
            {
                "label": "Nome",
                "name": "NMFILIAL",
                "showOnList": true,
                "template": "field/text-edit.html"
            }
        ]
}

Exemplo mais básico que consegui sem quebrar, filtra o dataSource filial e usa os campos CDFILIAL e NMFILIAL para código e nome do país respectivamente.


floatingControl (objeto)

Testado

Floatincontrol sem o refresh action

Se usa para definir que botões vão aparecer ou não no menu flutuante em baixo na direita (?)

Os botões são:

pdfAction, xlsAction, e csvAction para as opções de exportação em pdf, xls e csv respectivamente. Quando todos forem false, o botão de exportação botao de exportar não aparece no menu.


searchAction para o botão de busca botao de busca. Porém deixá-lo como false não remove ele do menu a menos que filter do customizationAction também seja false!


customizationAction é um objeto para os botões que mudam o layout da tela. filter para o filtro, layout para o layout/esquema botao de layout, e view para a visão botao de visao.

Exemplo:


 "floatingControl": {
        "pdfAction": false,
        "xlsAction": false,
        "searchAction": true,
        "csvAction": true,
        "customizationAction": {
            "filter": true,
            "layout": true,
            "view": false
	}

}

focused (boolean)

Testado

Quando ativado (true), o campo vai inicar com foco.

Exemplo:

{
  "focused": true
}

hideEmptyValue (boolean)

Testado

Quando ativado (true), este atributo oculta a primeira opção vazia ("") em campos select-native.

Exemplo:

{
  "hideEmptyValue": true
}

id (string)

Testado

ID único que todos os campos, eventos e widgets têm.

Exemplo:

{
  "id": "123456789012345946"
}

itemsPerPage (string)

Testado

endLabel

Quantas linhas dos dados o grid vai mostrar, automaticamente coloca também um botão ‘Carregue Mais’, porém ele tá bugado* parece.

*o suposto bug é que o ‘Carregue mais’ só traz mais n linhas ao ser clicado somente uma vez, n sendo o valor de “itemsPerPage”. Pelo menos no meu teste.

Exemplo:

{
  "itemsPerPage": 2
}

isVisible (boolean)

Testado

Visivel ou não. Exemplo:

{
  "isVisible": false
}

label (string)

Testado

O título do campo que aparece em cima. Exemplo:

{
  "label": "Nome do Campo"
}

maxlength (integer)

Testado

Número máximo de caracteres em um campo. Por algum motivo é tudo minusculo. Exemplo:

{
  "maxlength": 10
}

mask (object)

Parcialmente Testado

Define se o framework deve ou não aplicar mascara no valor de algum campo.

Exemplo:

{
  "mask": {
    "type": "zerofill",
     "params": {
        "left": true,
        "maxlength": 4
     }
  }
}

OS TIPOS. SÃO ELAS:

- zerofill: Preenche espaços vazios com 0, recebe como params: left, right. PORÉM, não sei se eu que sou burro e não entendi o padrão mas:

Quando "left": true

  • Preenche com zeros à esquerda até que o valor tenha o número total de dígitos especificado por maxlength.
  • Não adiciona vírgulas. Entrada: 1 -> Saída: 001 Entrada: 42 -> Saída: 042

Quando "right": true

  • Preenche com zeros à direita até que o valor atinja o maxlength, com uma vírgula antes dos zeros.
  • O valor original é mantido antes da vírgula. Aqui, o valor depois da vírgula sempre terá o comprimento igual ao maxlength. Entrada: 1 -> Saída: 1,000 Entrada: 45 -> Saída: 45,000

Se tanto "left" quanto "right" estiverem ausentes, o padrão é "left".

- number: Faz com que um campo aceite apenas números. recebe como params: allowNegative e allowEmpty. Mas nenhum deles fez nada num campo normal lollllllllll.

- float: Literalmente converte o valor do campo em float point. Nesse aqui o allowNegative funciona! Pode se usar também o precision pra definir o número de casas decimais após a vírgula (o padrão é dois 1 -> 1,00), além de thousands: '.' pra definir que simbolo separa 1000 e decimal: ',' pro símbolo que separa casas decimais.

   "mask": {
    "type": "float",
    "params": {
        "symbol": " ",
        "precision": 2,
        "thousands": "+",
        "decimal": ">",
        "operator": "="
    }
}

Haha haha

- datetime: Converte o valor digitado em formato de data. dd/mm/yyyy. Straightforward, não consegui achar nenhum parâmetro específico.

- fix: Mascára personalizada pelo que eu entendi, caso precise recolher dados de forma específica como CEP ou número de telefone. Se usa mask mais uma vez como param: eg: "mask": "99999-999"

"mask": {
    "type": "fix",
    "params": {
            "mask": "99999-999"
        }
}

Nesse caso 12345678 vira 12345-678.


name (string)

Testado

O equivalente ao ID do HTML padrão. É o nome pelo qual o javascript vai conseguir localizar o campo no documento e acessá-lo/modificá-lo. Exemplo:

{
  "name": "CDFILIAL"
}

order (string)

Não Testado

Por qual campo ordernar as linhas de um grid, lembrar de usar sempre que popular uma tabela com um dataSource.

Exemplo:

{
  "order": "CDFILIAL"
}

CDFILIAL é um dos campos que devem ser exibidos em um grid, o order está dizendo que os dados serão populados com base nessa coluna.


placeholder (string)

Testado

placeholder apenas

Placeholder apenas. Indicador de que dados devem ser colocados em um campo. Exemplo:

{
  "placeholder": "Digite aqui algo."
}

primaryProperty (string)

Não Testado

Algo relacionado a tree widget template, vou testar ainda


parentProperty (string)

Não Testado

Algo relacionado a tree widget template, vou testar ainda


order (string)

Não Testado

Por qual campo ordernar as linhas de um grid, lembrar de usar sempre que popular uma tabela com um dataSource.

Exemplo:

{
  "order": "CDFILIAL"
}

CDFILIAL é um dos campos que devem ser exibidos em um grid, o order está dizendo que os dados serão populados com base na ordem dos dados dessa coluna.


readOnly (boolean)

Testado

readonly

Quando ativado (true), o campo NÃO pode ser alterado. Útil para bloquear campos que dependem de outros campos serem preenchidos primeiro, por exemplo.

Exemplo:

{
  "readOnly": true
}

readOnlyOnEdit (boolean)

Testado

Quando ativado (true), o campo NÃO pode ser alterado na tela de edição, porém no filtro normal ele continua alterável.

Exemplo:

{
  "readOnlyOnEdit": true
}

searchIn (string)

Não Testado

Exemplo:

{
 "searchIn": "beginning"
}

separator (string)

Testado, porém sem resultado.

Qual o caractere que separa os campos em um campo de data, talvez? O padrão é “/”, mesmo sem especificar. Porém tentando usar isso não consegui fazer funcionar, ele mostra uma barra independente do que eu coloco lá. Inclusive todas as referências a esse atributo que eu achei nos repositorios simplesmente tem “/” como valor! Bizarro.

Exemplo:

{
 "separator": "/"
}

sequenceInList (integer)

Parcialmente Testado

Se usa pra definir a posição em que um campo aparece na lista do grid. (Inclusive dinamicamente!!!), muito útil se está trabalhando com colunas dinâmicas. Um dia eu descubro exatamente como funciona.

Exemplo:

{
 "sequenceInList": 2
}

Alterar dinâmicamente:

field.sequenceInList; // retorna a posição da coluna

field.sequenceInList = 2; // define a posição da coluna como 2


showDescriptionOrder (boolean)

Não Testado

Mostrar ou não o campo de descriptionOrder.

Exemplo:

{
 "descriptionOrder": true
}

showHeader (boolean)

Testado

Quando desativado (false), o cabeçalho não aparece. Header Exemplo:

{
  "showHeader": true
}

showMenu (boolean)

Testado

Quando desativado (false), o menu no cabeçalho não aparece. Header Exemplo:

{
  "showMenu": true
}

showOnList (boolean)

Testado

Mostrar campo como coluna no grid. Não afeta o filtro.

Header Exemplo:

{
  "showOnList": true
}

showOnForm (boolean)

Testado

Mostrar campo no filtro. Não afeta a coluna do grid.

Header Exemplo:

{
  "showOnForm": false
}

showSelectAs (string)

Parcialmente Testado

Como as opções do filterProperties aparecem agrupadas em um campo. As opções que eu vi até agora foram: list (o padrão), grid e tree.

list: showSelectAsGrid

grid: showSelectAsGrid

Exemplo:

{
  "showSelectAs": "grid"
}

startLabel: (string)

startLabel

Testado

Título da primeira data (inicial) a ser escolhida em um campo de período/intervalo Veja também: endLabel

Exemplo:

{
  "startLabel": "Data 1"
}

validations (object)

Parcialmente Testado

Define se o framework deve ou não aplicar regras de validação.

Exemplo:

{
  "validations": {
    "required": true
  }
}

AS REGRAS. SÃO ELAS:

  • required (boolean/objeto): O usuário PRECISA preencher esse campo ou o formulário não pode ser enviado. Visualmente ele se traduz como um pequeno asterisco em cima do campo. Dá pra colocar o valor como um objeto com o atributo message, e definir a mensagem que o usuário vai ver quando o campo obrigatório não for preenchido:

Validação com range e mensagem

Sem mensagem personalizada Com mensagem
{
  "validations": {
    "required": true
  }
}
{
  "validations": {
    "required": {
      "message": "Tem que digitar filhão"
    }
  }
}

  • range (objeto): Não sei ainda como funciona esse troço mas parece que só define mesmo os valores minimos min (integer), maximos max (integer) que podem ser preenchidos, além da mensagem de erro message (string) caso esse valor não seja respeitado, mas não sei se só funciona com algum tipo de campo: Validação com range e mensagem
{
   "validations": {
        "range": {
            "max": 10, 
            "min": 1,
            "message": "O valor deve ser entre 1 e 10!"
        }
    } 
}

  • extensions (objeto): Claramente se usa pra definir as extensões/formatos de arquivo permitidos em um template file-upload. Recebe um outro atributo value, uma array com todas as extensões permitidas. A mensagem de erro aparece em inglês mesmo. Validação com range e mensagem
{
  "validations": {
      "extensions": {
            "value": [
                ".fpa",
                ".txt",
                "xls"
            ]
      }
  }
}

valueToTrue (string)

Parcialmente Testado

Valor que deve ser enviado pela checkbox caso esteja marcada.

{
 "valueToTrue": "S"
}

valueToFalse (string)

Parcialmente Testado

Valor que deve ser enviado pela checkbox caso esteja desmarcada.

{
 "valueToFalse": "N"
}