@znap/components-vue2 1.0.10 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +413 -62
- package/dist/index.common.js +7 -3
- package/dist/index.common.js.map +1 -1
- package/dist/index.umd.js +7 -3
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/dist/types/utils/views/generateCrudViewConfigs.d.ts +4 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
### ⚡ Inicio Rapido
|
|
1
|
+
## ⚡ Instalação
|
|
4
2
|
|
|
5
3
|
Utilizando [pnpm](https://pnpm.io/)
|
|
6
4
|
```bash
|
|
@@ -18,7 +16,7 @@ No arquivo **main.js** do Vue.
|
|
|
18
16
|
import Vue from "vue";
|
|
19
17
|
import * as ZnapComponents from '@znap/components-vue2';
|
|
20
18
|
|
|
21
|
-
// -- Configuraçoes do Hands on Table (
|
|
19
|
+
// -- Configuraçoes do Hands on Table (Opcional)
|
|
22
20
|
import { registerAllModules } from "handsontable/registry";
|
|
23
21
|
import { registerLanguageDictionary, ptBR } from "handsontable/i18n";
|
|
24
22
|
import numbro from "numbro";
|
|
@@ -35,19 +33,19 @@ Vue.use(ZnapComponents.plugin, {
|
|
|
35
33
|
})
|
|
36
34
|
```
|
|
37
35
|
|
|
38
|
-
|
|
36
|
+
## Estrutura de importação da lib:
|
|
39
37
|
|
|
40
38
|
```javascript
|
|
41
39
|
import * as ZnapComponents from '@znap/components-vue2';
|
|
42
40
|
|
|
43
|
-
|
|
41
|
+
ZnapComponents.plugin: Plugin de instalaçao global de todos com componentes para utilizaçao sem importaçao no template vue.
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
ZnapComponents.components: Retorna todos os componentes exportados pela lib
|
|
46
44
|
|
|
47
|
-
|
|
45
|
+
ZnapComponents.utils: Retorna todas as funçoes uteis exportadas pela lib
|
|
48
46
|
```
|
|
49
47
|
|
|
50
|
-
|
|
48
|
+
## Utilização do ZnapBaseCrudView
|
|
51
49
|
|
|
52
50
|
```javascript
|
|
53
51
|
<template>
|
|
@@ -64,7 +62,7 @@ import * as ZnapComponents from '@znap/components-vue2';
|
|
|
64
62
|
@update:row="updateRow"
|
|
65
63
|
>
|
|
66
64
|
<template v-slot:footer-prepend>
|
|
67
|
-
Slot para adicionar elementos do lado esquerdo dos componentes de
|
|
65
|
+
Slot para adicionar elementos do lado esquerdo dos componentes de paginação.
|
|
68
66
|
</template>
|
|
69
67
|
</ZnapBaseCrudView>
|
|
70
68
|
</template>
|
|
@@ -80,87 +78,90 @@ export default {
|
|
|
80
78
|
}),
|
|
81
79
|
|
|
82
80
|
async created() {
|
|
83
|
-
const { CrudViewConfigs } = ZnapUtils; // Importar a classe CrudViewConfigs da utils para gerar o template de dados da tela
|
|
81
|
+
const { CrudViewConfigs } = ZnapUtils; // Importar a classe CrudViewConfigs da utils para gerar o template de dados da tela.
|
|
84
82
|
|
|
85
83
|
const crudViewConfigs = new CrudViewConfigs({
|
|
86
|
-
viewTitle: "Titulo da
|
|
84
|
+
viewTitle: "Titulo da página",
|
|
87
85
|
viewIcon: "icone_da_pagina",
|
|
88
86
|
primaryKey: "chave_primaria_da_tela",
|
|
89
87
|
endpoint: CrudViewConfigs.generateEndpoint(
|
|
90
88
|
"URL", {} // parametros
|
|
91
89
|
),
|
|
92
|
-
useServerSidePagination?: false, // Habilita a
|
|
93
|
-
useServerSideSearch?: false, // Habilita busca do lado do servidor por
|
|
90
|
+
useServerSidePagination?: false, // Habilita a paginação do lado do servidor, por padrão vem desabilitado. (Se habilitado, a busca também passa a acontecer do lado do servidor)
|
|
91
|
+
useServerSideSearch?: false, // Habilita busca do lado do servidor por padrão que vem desabilitado.
|
|
94
92
|
});
|
|
95
93
|
|
|
96
94
|
crudViewConfigs
|
|
97
95
|
.addPrimaryFilter({
|
|
98
96
|
column: "coluna_que_ira_buscar",
|
|
99
|
-
filterComponent: "v-autocomplete", // componentes
|
|
100
|
-
itemsArray?: [] // Array de dados iniciais
|
|
101
|
-
initialValue?: null // Valor inicial
|
|
97
|
+
filterComponent: "v-autocomplete", // componentes disponíveis: v-autocomplete, v-checkbox, date-picker
|
|
98
|
+
itemsArray?: [] // Array de dados iniciais.
|
|
99
|
+
initialValue?: null // Valor inicial.
|
|
102
100
|
endpoint?: CrudViewConfigs.generateEndpoint(
|
|
103
|
-
"URL", {} //
|
|
101
|
+
"URL", {} // parâmetros
|
|
104
102
|
),
|
|
105
103
|
componentProps: {
|
|
106
104
|
label: "Grupo empresarial",
|
|
107
105
|
clearable?: true,
|
|
108
|
-
required?: true // Se o valor for true, ele devera ser preenchido e
|
|
109
|
-
multiple?: false // Se for um v-autocomplete permite selecionar
|
|
106
|
+
required?: true // Se o valor for true, ele devera ser preenchido e, caso não for preenchido, irá exibir mensagem na tela.
|
|
107
|
+
multiple?: false // Se for um v-autocomplete permite selecionar vários itens
|
|
110
108
|
range?: false // Se for um date-picker permite selecionar um range de data.
|
|
111
|
-
}, // Props que
|
|
112
|
-
dependsOn?: '' // Filtro
|
|
109
|
+
}, // Props que será passada para o componente.
|
|
110
|
+
dependsOn?: '' // Filtro primário que possui dependência
|
|
113
111
|
hooks?: {
|
|
114
112
|
afterChange: () => {
|
|
115
|
-
// Hook que
|
|
113
|
+
// Hook que será disparado após a mudança do valor.
|
|
116
114
|
|
|
117
|
-
// * Pode ser utilizado para alterar os dados de outros filtros, ou
|
|
115
|
+
// * Pode ser utilizado para alterar os dados de outros filtros, ou então realizar chamadas assíncronas para atualizar o array de dados.
|
|
118
116
|
}
|
|
119
|
-
}
|
|
117
|
+
},
|
|
118
|
+
ignoreOnFetchFunction?: false // Se o valor for true, será ignorado na função de fetch genérica, por padrão o valor é false.
|
|
120
119
|
})
|
|
121
120
|
|
|
122
121
|
crudViewConfigs
|
|
123
122
|
.addSecondaryFilter({
|
|
124
123
|
column: "coluna_que_ira_buscar",
|
|
125
|
-
filterComponent: "v-autocomplete", // componentes
|
|
126
|
-
itemsArray?: [] // Array de dados iniciais
|
|
127
|
-
initialValue?: null // Valor inicial
|
|
124
|
+
filterComponent: "v-autocomplete", // componentes disponíveis: v-autocomplete, v-checkbox, date-picker
|
|
125
|
+
itemsArray?: [] // Array de dados iniciais.
|
|
126
|
+
initialValue?: null // Valor inicial.
|
|
128
127
|
endpoint?: CrudViewConfigs.generateEndpoint(
|
|
129
128
|
"URL", {} // parametros
|
|
130
129
|
),
|
|
131
130
|
componentProps: {
|
|
132
131
|
label: "Empresa",
|
|
133
132
|
clearable?: true,
|
|
134
|
-
multiple?: false // Se for um v-autocomplete permite selecionar
|
|
133
|
+
multiple?: false // Se for um v-autocomplete permite selecionar vários itens.
|
|
135
134
|
range?: false // Se for um date-picker permite selecionar um range de data.
|
|
136
135
|
}, // Props que sera passada para o componente
|
|
137
136
|
dependsOn?: '' // Filtro secundario que possui dependencia
|
|
138
137
|
hooks?: {
|
|
139
138
|
afterChange: () => {
|
|
140
|
-
// Hook que
|
|
139
|
+
// Hook que será disparado após a mudança do valor.
|
|
141
140
|
|
|
142
|
-
// * Pode ser utilizado para alterar os dados de outros filtros, ou
|
|
141
|
+
// * Pode ser utilizado para alterar os dados de outros filtros, ou então realizar chamadas assíncronas para atualizar o array de dados.
|
|
143
142
|
}
|
|
144
|
-
}
|
|
143
|
+
},
|
|
144
|
+
ignoreOnFetchFunction?: false // Se o valor for true, será ignorado na funçao de fetch generica, por padrao o valor é false.
|
|
145
145
|
})
|
|
146
146
|
|
|
147
147
|
crudViewConfigs
|
|
148
148
|
.addTableOption({
|
|
149
149
|
column: "chave_que_recebera_as_options",
|
|
150
|
-
itemsArray?: [] // Array com dados iniciais
|
|
150
|
+
itemsArray?: [] // Array com dados iniciais.
|
|
151
151
|
endpoint?: CrudViewConfigs.generateEndpoint(
|
|
152
152
|
"URL", {
|
|
153
|
-
//
|
|
153
|
+
// parâmetros
|
|
154
154
|
}
|
|
155
155
|
),
|
|
156
156
|
formatter?: (value) => {
|
|
157
|
-
// Logica para formatar o dado quando for
|
|
157
|
+
// Logica para formatar o dado quando for exibido na tabela, sem alterar o dado original.
|
|
158
158
|
}
|
|
159
159
|
filterFunction?: () => {
|
|
160
|
-
// Logica
|
|
160
|
+
// Logica para filtrar os dados que serão exibidos, se for passada uma filterFunction o array de itens será ignorado e o retorno será o retorno da filterFunction.
|
|
161
161
|
|
|
162
162
|
// Deve sempre retornar um array
|
|
163
|
-
}
|
|
163
|
+
},
|
|
164
|
+
ignoreOnFetchFunction?: false // Se o valor for true, será ignorado na função de fetch genérica, por padrão o valor é false.
|
|
164
165
|
})
|
|
165
166
|
|
|
166
167
|
|
|
@@ -168,33 +169,34 @@ export default {
|
|
|
168
169
|
.addFormOption({
|
|
169
170
|
column: "chave_que_recebera_as_options",
|
|
170
171
|
dependsOn?: 'chave_que_dependa_que_tenha_valor'
|
|
171
|
-
itemsArray?: [] // Array de itens iniciais
|
|
172
|
+
itemsArray?: [] // Array de itens iniciais.
|
|
172
173
|
endpoint?: CrudViewConfigs.generateEndpoint(
|
|
173
|
-
"URL", {} //
|
|
174
|
+
"URL", {} // parâmetros
|
|
174
175
|
),
|
|
175
176
|
hooks?: {
|
|
176
177
|
afterChange: (item) =>{
|
|
177
|
-
// Logica que
|
|
178
|
+
// Logica que irá disparar após o valor ser alterado.
|
|
178
179
|
|
|
179
|
-
// * Pode ser utilizado para alterar os dados ou
|
|
180
|
+
// * Pode ser utilizado para alterar os dados ou então realizar chamadas assíncronas para atualizar o array de dados.
|
|
180
181
|
}
|
|
181
182
|
beforeChange: (item) => {
|
|
182
|
-
// Logica que
|
|
183
|
+
// Logica que irá disparar antes do valor ser alterado.
|
|
183
184
|
|
|
184
|
-
// * Pode ser utilizado para alterar os dados ou
|
|
185
|
+
// * Pode ser utilizado para alterar os dados ou então realizar chamadas assíncronas para atualizar o array de dados.
|
|
185
186
|
}
|
|
186
|
-
}
|
|
187
|
+
},
|
|
188
|
+
ignoreOnFetchFunction?: false // Se o valor for true, será ignorado na função de fetch genérica, por padrão o valor é false.
|
|
187
189
|
})
|
|
188
190
|
|
|
189
191
|
crudViewConfigs.setFormModel({
|
|
190
|
-
// Modelo inicial do
|
|
192
|
+
// Modelo inicial do formulário.
|
|
191
193
|
});
|
|
192
194
|
|
|
193
|
-
this.viewSettings = crudViewConfigs.viewConfigs; // Retorna o objeto de configuraçoes da classe (Se
|
|
194
|
-
this.viewMethods = crudViewConfigs.viewMethods; // Retorna os
|
|
195
|
+
this.viewSettings = crudViewConfigs.viewConfigs; // Retorna o objeto de configuraçoes da classe (Se tornará o state do componente)
|
|
196
|
+
this.viewMethods = crudViewConfigs.viewMethods; // Retorna os métodos pre prontos disponíveis da classe.
|
|
195
197
|
|
|
196
198
|
|
|
197
|
-
// Pode usar os
|
|
199
|
+
// Pode usar os métodos das classe CrudViewConfigs ou então criar os próprios conforme a necessidade.
|
|
198
200
|
await Promise.all([
|
|
199
201
|
this.viewMethods.fetchFiltersData(this.viewSettings.filters, this.$http),
|
|
200
202
|
this.viewMethods.fetchTableOptionsData(
|
|
@@ -214,32 +216,32 @@ export default {
|
|
|
214
216
|
this.viewSettings.rowsChanged = new Set(this.viewSettings.rowsChanged); // Importante para o Vue detectar que o rowsChanged alterou e exibir o elemento em destaque na tabela.
|
|
215
217
|
}
|
|
216
218
|
updateRow() {
|
|
217
|
-
this.$set(this.viewSettings.apiData, rowIndex, data); // Importante para o vue detectar que teve
|
|
219
|
+
this.$set(this.viewSettings.apiData, rowIndex, data); // Importante para o vue detectar que teve alteração no elemento da tabela.
|
|
218
220
|
}
|
|
219
221
|
async onReload() {
|
|
220
|
-
// Logica de como
|
|
222
|
+
// Logica de como será tratado o evento de reload.
|
|
221
223
|
}
|
|
222
224
|
async onExportFile() {
|
|
223
|
-
// Logica de como
|
|
225
|
+
// Logica de como será tratado o evento de exportação de arquivo.
|
|
224
226
|
}
|
|
225
227
|
async onImportFile(
|
|
226
|
-
event // evento contendo o elemento do input de arquivo
|
|
228
|
+
event // evento contendo o elemento do input de arquivo.
|
|
227
229
|
) {
|
|
228
|
-
// Logica de como
|
|
230
|
+
// Logica de como será tratado o evento de importação de arquivo.
|
|
229
231
|
}
|
|
230
232
|
async onSave({
|
|
231
|
-
reload = true, //
|
|
232
|
-
itemData = null // Se for um item proveniente da modal (
|
|
233
|
+
reload = true, // variável retornada do componente para verificar se deve ou não realizar o reload (Fica a cargo do desenvolvedor)
|
|
234
|
+
itemData = null // Se for um item proveniente da modal (Criação/Edição) os dados virão aqui.
|
|
233
235
|
}) {
|
|
234
|
-
// Logica de como
|
|
236
|
+
// Logica de como será tratado o evento de salvamento de registro(s)
|
|
235
237
|
}
|
|
236
238
|
async onDelete(
|
|
237
|
-
rows // Array com as linhas que devem ser
|
|
239
|
+
rows // Array com as linhas que devem ser excluídas.
|
|
238
240
|
) {
|
|
239
|
-
// Logica de como
|
|
241
|
+
// Logica de como será tratado o evento de exclusão de registro(s)
|
|
240
242
|
}
|
|
241
243
|
async fetchData() {
|
|
242
|
-
// Logica de busca de dados principais
|
|
244
|
+
// Logica de busca de dados principais.
|
|
243
245
|
}
|
|
244
246
|
}
|
|
245
247
|
}
|
|
@@ -247,11 +249,360 @@ export default {
|
|
|
247
249
|
|
|
248
250
|
```
|
|
249
251
|
|
|
252
|
+
## Utilização da Classe Auxiliar **CrudViewConfigs**
|
|
253
|
+
|
|
254
|
+
O intuito dessa classe é fornecer ao desenvolvedor uma interface padronizada de criação de telas, tornando o processo padronizado e de fácil aprendizado.
|
|
255
|
+
|
|
256
|
+
A classe retorna métodos e um objeto padrão de estado para ser utilizado para manipular o componente **ZnapBaseCrudView** por meio dos getters **viewConfigs** e **viewMethods**, além disso, possui diversos métodos/interfaces para o desenvolvedor adicionar elementos na tela de maneira padronizada evitando refazer a roda toda vez que for construir uma nova tela.
|
|
257
|
+
|
|
258
|
+
### Objeto de Estado (viewConfigs):
|
|
259
|
+
```typescript
|
|
260
|
+
type AvalibleFilterComponents = "v-autocomplete" | "v-checkbox" | "date-picker"
|
|
261
|
+
type AvalibleFormOptionHooks = "afterChange" | "beforeChange"
|
|
262
|
+
type AvalibleFilterOptionHooks = "afterChange"
|
|
263
|
+
type AvalibleFormHooks = "beforeSetItem" | "afterSetItem"
|
|
264
|
+
type Endpoint = [string, {[key: string]: any}]
|
|
265
|
+
type ComponentProps = {
|
|
266
|
+
required?: boolean
|
|
267
|
+
multiple?: boolean
|
|
268
|
+
label: string
|
|
269
|
+
range?: string
|
|
270
|
+
[key: string] : any
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
interface FiltersInterface {
|
|
274
|
+
column: string
|
|
275
|
+
filterComponent: AvalibleFilterComponents
|
|
276
|
+
itemsArray: any[]
|
|
277
|
+
initialValue: any
|
|
278
|
+
endpoint: Endpoint
|
|
279
|
+
componentProps: ComponentProps
|
|
280
|
+
hooks: AvalibleFilterOptionHooks
|
|
281
|
+
dependsOn: string
|
|
282
|
+
ignoreOnFetchFunction: boolean
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
interface TableOptionsInterface {
|
|
286
|
+
column: string
|
|
287
|
+
itemsArray: any[]
|
|
288
|
+
endpoint: Endpoint
|
|
289
|
+
formatter: (value: any) => any
|
|
290
|
+
filterFunction: () => any[]
|
|
291
|
+
ignoreOnFetchFunction: boolean
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
interface FormOptionsInterface {
|
|
295
|
+
column: string
|
|
296
|
+
itemsArray: any[]
|
|
297
|
+
dependsOn: any
|
|
298
|
+
endpoint: Endpoint
|
|
299
|
+
hooks: AvalibleFormOptionHooks
|
|
300
|
+
ignoreOnFetchFunction: boolean
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const viewConfigs = {
|
|
304
|
+
tableName: string,
|
|
305
|
+
tableIcon: string,
|
|
306
|
+
headers: [],
|
|
307
|
+
columns: [],
|
|
308
|
+
apiData: any[],
|
|
309
|
+
useServerSidePagination: boolean,
|
|
310
|
+
useServerSideSearch: boolean,
|
|
311
|
+
paginationSettings: {
|
|
312
|
+
page: number,
|
|
313
|
+
itemsPerPage: number,
|
|
314
|
+
itemsPerPageOptions: number[],
|
|
315
|
+
serverItemsLength: number | null
|
|
316
|
+
},
|
|
317
|
+
searchColums: string[],
|
|
318
|
+
primaryKey: string,
|
|
319
|
+
loading: boolean,
|
|
320
|
+
rowsChanged: Set<number>,
|
|
321
|
+
filters: {
|
|
322
|
+
primary: FiltersInterface[]
|
|
323
|
+
secondary: FiltersInterface[]
|
|
324
|
+
search: ''
|
|
325
|
+
},
|
|
326
|
+
currentFilters: {
|
|
327
|
+
primary: any[]
|
|
328
|
+
secondary: any[]
|
|
329
|
+
search: ''
|
|
330
|
+
},
|
|
331
|
+
tableOptions: TableOptionsInterface[],
|
|
332
|
+
formSettings: {
|
|
333
|
+
baseModel: {
|
|
334
|
+
[string]: any
|
|
335
|
+
},
|
|
336
|
+
formOptions: FormOptionsInterface[],
|
|
337
|
+
hooks: {
|
|
338
|
+
beforeSetItem: (item: any) => any | Promise<any>,
|
|
339
|
+
afterSetItem: (item: any) => any | Promise<any>,
|
|
340
|
+
},
|
|
341
|
+
loading: false,
|
|
342
|
+
},
|
|
343
|
+
endpoint: Endpoint,
|
|
344
|
+
hasFetch: boolean,
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
- **tableName**: O texto que será exibido como título da página.
|
|
349
|
+
|
|
350
|
+
- **tableIcon**: O ícone que será exibido ao lado do título da página.
|
|
351
|
+
|
|
352
|
+
- **headers**: Array de headers que é retornado do back-end.
|
|
353
|
+
|
|
354
|
+
- **columns**: Array de colunas retornado do back-end.
|
|
355
|
+
|
|
356
|
+
- **apiData**: Array de dados que será exibido na tabela.
|
|
250
357
|
|
|
251
|
-
|
|
358
|
+
- **endpoint**: Tupla/Array de 2 posições onde a primeira é a URL do endpoint principal da página e a segunda os parâmetros que serão passados para esse endpoint.
|
|
359
|
+
|
|
360
|
+
- **hasFetch**: Booleano que indica que já ocorreu o fetch de dados da página.
|
|
361
|
+
|
|
362
|
+
- **useServerSidePagination**: Booleano para controlar a paginação do lado servidor.
|
|
252
363
|
|
|
253
|
-
|
|
364
|
+
- **useServerSideSearch**: Booleano para controlar a busca do lado servidor. **Se
|
|
365
|
+
useServerSidePagination for True, essa opção deve ser True também.**
|
|
254
366
|
|
|
255
|
-
|
|
367
|
+
- **paginationSettings**: Objeto de configuração de paginação.
|
|
368
|
+
- **page**: Pagina atual.
|
|
369
|
+
- **itemsPerPage**: Quantidade de itens por pagina.
|
|
370
|
+
- **serverItemsLength**: Quantidade total de itens para paginar **Se estiver utilizando paginação do lado servidor, essa informação deve ser atribuída, caso contrario, a paginação irá quebrar.**
|
|
371
|
+
- **itemsPerPageOptions**: Array com as opções de itemsPerPage: Para ter a opçao **Todos** o valor **-1 deve ser atribuído no Array**.
|
|
256
372
|
|
|
373
|
+
- **searchColums**: Array com as colunas que serão utilizadas na busca por texto.
|
|
374
|
+
|
|
375
|
+
- **primaryKey**: Chave primária da tela.
|
|
376
|
+
|
|
377
|
+
- **loading**: Booleano que controla o estado de loading da tela.
|
|
378
|
+
|
|
379
|
+
- **rowsChanged**: Set contendo os **índices físicos** das linhas que foram alterados.
|
|
380
|
+
|
|
381
|
+
- **filters**: Objeto de filtros.
|
|
382
|
+
- **primary**: Array contendo todos os filtros primários
|
|
383
|
+
- **secondary**: Array contendo todos os filtros secundários
|
|
384
|
+
- **search**: String que será utilizada em busca por texto.
|
|
385
|
+
|
|
386
|
+
- **currentFilters**: Objeto contendo os filtros que realmente estão selecionados após o fetch de dados.
|
|
387
|
+
- **primary**: Array contendo os valores selecionados nos filtros primários.
|
|
388
|
+
- **secondary**: Array contendo os valores selecionados nos filtros secundários.
|
|
389
|
+
- **search**: String contendo o filtro de texto selecionado.
|
|
390
|
+
|
|
391
|
+
- **tableOptions**: Array contendo as opções das colunas da tabela.
|
|
392
|
+
|
|
393
|
+
- **formSettings**: Objeto de configurações do formulário:
|
|
394
|
+
- **baseModel**: Objeto contendo a estrutura inicial do objeto do item a ser criado/editado.
|
|
395
|
+
- **formOptions**: Array contendo as opçoes dos campos do formulário.
|
|
396
|
+
- **hooks**: Objeto contendo as funçoes de hooks do formulário:
|
|
397
|
+
- **beforeSetItem**: Função a ser executada antes do item ser atribuído ao formulário.
|
|
398
|
+
- **afterSetItem**: Função a ser executada após o item ser atribuído ao formulário.
|
|
399
|
+
|
|
400
|
+
### Objeto de métodos (viewMethods)
|
|
401
|
+
```typescript
|
|
402
|
+
type KeysToValidate = 'search' | 'primary' | 'secondary'
|
|
403
|
+
type FetcherReturn = {data: {rows: any[]}, [key: string]: any}
|
|
404
|
+
type HttpFetcher = {
|
|
405
|
+
post: (url: string, params: {[key: string] : any}) => Promise<FetcherReturn>,
|
|
406
|
+
get: (url: string) => Promise<FetcherReturn>,
|
|
407
|
+
delete: (url: string) => Promise<FetcherReturn>,
|
|
408
|
+
}
|
|
257
409
|
|
|
410
|
+
const viewMethods = {
|
|
411
|
+
getFilters: (filters, searchColums) => void,
|
|
412
|
+
fetchTableOptionsData: (tableOptions, httpFetcher: HttpFetcher) => void,
|
|
413
|
+
fetchFormOptionsData: (formOptions, httpFetcher: HttpFetcher) => void,
|
|
414
|
+
fetchFiltersData: (filters, httpFetcher: HttpFetcher) => void,
|
|
415
|
+
setCurrentFilters: (filters) => void,
|
|
416
|
+
validateFiltersKeyHaveChange: (filters, currentFilters, keysToValidate: KeysToValidate[] ) => boolean,
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
- **getFilters**: função responsável por retornar o array de condições de todos os filtros de maneira formatada para atribuir aos endpoints.
|
|
420
|
+
- Parâmetros:
|
|
421
|
+
- Objeto de filtros.
|
|
422
|
+
- Array de searchColums
|
|
423
|
+
|
|
424
|
+
- **fetchTableOptionsData**: função genérica responsável por realizar o fetch de todos os dados do Array de tableOptions.
|
|
425
|
+
|
|
426
|
+
- **fetchFormOptionsData**: função genérica responsável por realizar o fetch de todos os dados do Array de formOptions.
|
|
427
|
+
|
|
428
|
+
- **fetchFiltersData**: função genérica responsável por realizar o fetch de todos os dados do Array de filtros.
|
|
429
|
+
|
|
430
|
+
- **setCurrentFilters**: função que retorna os valores dos filtros selecionados.
|
|
431
|
+
- Parâmetros:
|
|
432
|
+
- Array de filtros.
|
|
433
|
+
|
|
434
|
+
- **validateFiltersKeyHaveChange**: função para validar se os filtros selecionados na tela possuem diferença com os filtros que de fato estão selecionados.
|
|
435
|
+
- Parâmetros:
|
|
436
|
+
- Objeto de filtros.
|
|
437
|
+
- Objeto de currentFilters
|
|
438
|
+
- Array com as chaves dos filtros que deseja comparar.
|
|
439
|
+
|
|
440
|
+
### Métodos de geração do Estado inicial:
|
|
441
|
+
A classe possui diversos métodos para gerar o objeto inicial de estado (viewConfigs), esses métodos são interfaces padrões para facilitar e padronizar a estrutura de dados que será passada para o componente.
|
|
442
|
+
|
|
443
|
+
- Métodos Estáticos:
|
|
444
|
+
- **generateEndpoint**: Retorna o Array/Tupla de endpoint.
|
|
445
|
+
```javascript
|
|
446
|
+
CrudViewConfigs.generateEndpoint(url: string, parâmetros?: {}): [string, {}]
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
- Métodos da instância:
|
|
450
|
+
- **addPrimaryFilter**: Adiciona um filtro primário no array de filtros.
|
|
451
|
+
```javascript
|
|
452
|
+
crudViewConfigs.addPrimaryFilter({
|
|
453
|
+
column: string,
|
|
454
|
+
filterComponent: "v-autocomplete" | "v-checkbox" | "date-picker",
|
|
455
|
+
itemsArray?: any[],
|
|
456
|
+
initialValue?: any | null,
|
|
457
|
+
endpoint?: [string, {}],
|
|
458
|
+
componentProps: {
|
|
459
|
+
label: string,
|
|
460
|
+
required?: boolean,
|
|
461
|
+
[string]: any
|
|
462
|
+
},
|
|
463
|
+
dependsOn?: string,
|
|
464
|
+
ignoreOnFetchFunction?: boolean
|
|
465
|
+
}): this
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
- **setPrimaryFilters**: Permite atribuir de maneira manual todo o Array de filtros primários.
|
|
469
|
+
```javascript
|
|
470
|
+
crudViewConfigs.setPrimaryFilters([
|
|
471
|
+
{
|
|
472
|
+
column: string,
|
|
473
|
+
filterComponent: "v-autocomplete" | "v-checkbox" | "date-picker",
|
|
474
|
+
itemsArray?: any[],
|
|
475
|
+
initialValue?: any | null,
|
|
476
|
+
endpoint?: [string, {}],
|
|
477
|
+
componentProps: {
|
|
478
|
+
label: string,
|
|
479
|
+
required?: boolean,
|
|
480
|
+
multiple?: boolean,
|
|
481
|
+
range?: boolean,
|
|
482
|
+
[string]: any
|
|
483
|
+
},
|
|
484
|
+
dependsOn?: string,
|
|
485
|
+
ignoreOnFetchFunction?: boolean
|
|
486
|
+
}...
|
|
487
|
+
]): this
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
- **addSecondaryFilter**: Adiciona um filtro secundário no array de filtro secundário.
|
|
491
|
+
```javascript
|
|
492
|
+
crudViewConfigs.addSecondaryFilter({
|
|
493
|
+
column: string,
|
|
494
|
+
filterComponent: "v-autocomplete" | "v-checkbox" | "date-picker",
|
|
495
|
+
itemsArray?: any[],
|
|
496
|
+
initialValue?: any | null,
|
|
497
|
+
endpoint?: [string, {}],
|
|
498
|
+
componentProps: {
|
|
499
|
+
label: string,
|
|
500
|
+
[string]: any
|
|
501
|
+
},
|
|
502
|
+
dependsOn?: string,
|
|
503
|
+
ignoreOnFetchFunction?: boolean
|
|
504
|
+
}): this
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
- **setSecondaryFilters**: Permite atribuir de maneira manual todo o Array de filtro secundário.
|
|
508
|
+
```javascript
|
|
509
|
+
crudViewConfigs.setSecondaryFilters([
|
|
510
|
+
{
|
|
511
|
+
column: string,
|
|
512
|
+
filterComponent: "v-autocomplete" | "v-checkbox" | "date-picker",
|
|
513
|
+
itemsArray?: any[],
|
|
514
|
+
initialValue?: any | null,
|
|
515
|
+
endpoint?: [string, {}],
|
|
516
|
+
componentProps: {
|
|
517
|
+
label: string,
|
|
518
|
+
[string]: any
|
|
519
|
+
},
|
|
520
|
+
dependsOn?: string,
|
|
521
|
+
ignoreOnFetchFunction?: boolean
|
|
522
|
+
}...
|
|
523
|
+
]) : this
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
- **addTableOption**: Adiciona uma opção referente a uma coluna na tabela principal no Array de tableOptions.
|
|
527
|
+
```javascript
|
|
528
|
+
crudViewConfigs.addTableOption({
|
|
529
|
+
column: string,
|
|
530
|
+
itemsArray?: any[],
|
|
531
|
+
endpoint?: [string, {}],
|
|
532
|
+
formatter?: (value: any) => any
|
|
533
|
+
filterFunction?: () => any[]
|
|
534
|
+
ignoreOnFetchFunction?: boolean
|
|
535
|
+
}): this
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
- **setTableOptions**: Permite atribuir de maneira manual todo o Array de tableOptions.
|
|
539
|
+
```javascript
|
|
540
|
+
crudViewConfigs.setTableOptions([
|
|
541
|
+
{
|
|
542
|
+
column: string,
|
|
543
|
+
itemsArray?: any[],
|
|
544
|
+
endpoint?: [string, {}],
|
|
545
|
+
formatter?: (value: any) => any
|
|
546
|
+
filterFunction?: () => any[]
|
|
547
|
+
ignoreOnFetchFunction?: boolean
|
|
548
|
+
}...
|
|
549
|
+
]): this
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
- **setFormModel**: Adiciona o modelo base de dados do formulário.
|
|
553
|
+
```javascript
|
|
554
|
+
crudViewConfigs.setFormModel(any{}): this
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
- **addFormOption**: Adiciona uma opção referente a uma coluna do formulario no Array de formOptions.
|
|
558
|
+
```javascript
|
|
559
|
+
crudViewConfigs.addFormOption({
|
|
560
|
+
column: string,
|
|
561
|
+
itemsArray?: any[],
|
|
562
|
+
dependsOn?: string,
|
|
563
|
+
endpoint?: [string, {}],
|
|
564
|
+
ignoreOnFetchFunction?: boolean,
|
|
565
|
+
hooks?: {
|
|
566
|
+
afterChange?: (item: any) => any
|
|
567
|
+
beforeChange?: (item: any) => any
|
|
568
|
+
}
|
|
569
|
+
}): this
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
- **setFormOptions**: Permite atribuir de maneira manual todo o Array de formOptions.
|
|
573
|
+
```javascript
|
|
574
|
+
crudViewConfigs.setFormOptions([{
|
|
575
|
+
column: string,
|
|
576
|
+
itemsArray?: any[],
|
|
577
|
+
dependsOn?: string,
|
|
578
|
+
endpoint?: [string, {}],
|
|
579
|
+
ignoreOnFetchFunction?: boolean,
|
|
580
|
+
hooks?: {
|
|
581
|
+
afterChange?: (item) => any,
|
|
582
|
+
beforeChange?: (item) => any
|
|
583
|
+
}}]): this
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
- **setFormHooks**: Permite atribuir de maneira manual todos os hooks do formulário.
|
|
587
|
+
```javascript
|
|
588
|
+
crudViewConfigs.setFormHooks({
|
|
589
|
+
beforeSetItem?: (item: any) => any | Promise<any>,
|
|
590
|
+
afterSetItem?: (item: any) => any | Promise<any>
|
|
591
|
+
}): this
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
- **addFormHook**: Permite atribuir de maneira manual todos os hooks do formulário.
|
|
595
|
+
```javascript
|
|
596
|
+
crudViewConfigs.addFormHook(key: 'beforeSetItem' | 'afterSetItem', (item: any) => any | Promise<any> ): this
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
- **setPaginationSettings**: Permite atribuir de maneira manual o objeto paginationSettings.
|
|
600
|
+
```javascript
|
|
601
|
+
crudViewConfigs.setPaginationSettings({
|
|
602
|
+
page: number,
|
|
603
|
+
itemsPerPage: number,
|
|
604
|
+
itemsPerPageOption?: number[],
|
|
605
|
+
serverItemsLength?: number | null,
|
|
606
|
+
}): this
|
|
607
|
+
```
|
|
608
|
+
|
package/dist/index.common.js
CHANGED
|
@@ -49024,7 +49024,7 @@ class CrudViewConfigs {
|
|
|
49024
49024
|
_defineProperty(this, "paginationSettings", {
|
|
49025
49025
|
page: 1,
|
|
49026
49026
|
itemsPerPage: 15,
|
|
49027
|
-
serverItemsLength:
|
|
49027
|
+
serverItemsLength: null,
|
|
49028
49028
|
sortBy: [],
|
|
49029
49029
|
sortDesc: [],
|
|
49030
49030
|
itemsPerPageOptions: [5, 10, 15, 25, 50, 100, -1]
|
|
@@ -49399,7 +49399,8 @@ class CrudViewConfigs {
|
|
|
49399
49399
|
itemsArray = [],
|
|
49400
49400
|
dependsOn = "",
|
|
49401
49401
|
endpoint = [],
|
|
49402
|
-
hooks = {}
|
|
49402
|
+
hooks = {},
|
|
49403
|
+
ignoreOnFetchFunction = false
|
|
49403
49404
|
} = {}) {
|
|
49404
49405
|
const hooksKeys = Object.keys(hooks);
|
|
49405
49406
|
for (const hookKey of hooksKeys) {
|
|
@@ -49412,7 +49413,8 @@ class CrudViewConfigs {
|
|
|
49412
49413
|
loading: false,
|
|
49413
49414
|
endpoint: this.isValidEndpoint(endpoint) ? endpoint : CrudViewConfigs.generateEndpoint(),
|
|
49414
49415
|
dependsOn,
|
|
49415
|
-
hooks
|
|
49416
|
+
hooks,
|
|
49417
|
+
ignoreOnFetchFunction
|
|
49416
49418
|
});
|
|
49417
49419
|
return this;
|
|
49418
49420
|
}
|
|
@@ -49423,10 +49425,12 @@ class CrudViewConfigs {
|
|
|
49423
49425
|
throw new Error(`O hook ${hookKey}, não esta disponivel como form hook!`);
|
|
49424
49426
|
}
|
|
49425
49427
|
this.formSettings.hooks = hooks;
|
|
49428
|
+
return this;
|
|
49426
49429
|
}
|
|
49427
49430
|
addFormHook(key = "", hookFunction) {
|
|
49428
49431
|
if (!this.avalibleFormHooks.has(key)) throw new Error(`O hook ${key}, não esta disponivel como form hook!`);
|
|
49429
49432
|
this.formSettings.hooks[key] = hookFunction;
|
|
49433
|
+
return this;
|
|
49430
49434
|
}
|
|
49431
49435
|
setPaginationSettings({
|
|
49432
49436
|
page = 1,
|