@archbase/template 3.0.6 → 3.0.7
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/dist/archbase-template-3.0.7.tgz +0 -0
- package/dist/index.js +1348 -963
- package/dist/template/src/ArchbaseLookupDataTemplate.d.ts +48 -0
- package/dist/template/src/ArchbaseLookupDataTemplate.types.d.ts +164 -0
- package/dist/template/src/hooks/index.d.ts +1 -0
- package/dist/template/src/hooks/useArchbaseLookup.d.ts +124 -0
- package/dist/template/src/index.d.ts +2 -0
- package/package.json +14 -15
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { ArchbaseLookupDataTemplateProps, ArchbaseLookupDataTemplateRef } from './ArchbaseLookupDataTemplate.types';
|
|
3
|
+
/**
|
|
4
|
+
* Implementação interna do ArchbaseLookupDataTemplate
|
|
5
|
+
*/
|
|
6
|
+
declare function ArchbaseLookupDataTemplateImpl<T extends object, ID = string>(props: ArchbaseLookupDataTemplateProps<T, ID>, ref: React.ForwardedRef<ArchbaseLookupDataTemplateRef<T>>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
/**
|
|
8
|
+
* ArchbaseLookupDataTemplate - Template de lookup/pesquisa com grid de dados
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Seleção única com loadData
|
|
12
|
+
* <ArchbaseLookupDataTemplate<VeiculoDto>
|
|
13
|
+
* opened={opened}
|
|
14
|
+
* title="Selecionar Veículo"
|
|
15
|
+
* selectionMode="single"
|
|
16
|
+
* loadData={loadVeiculos}
|
|
17
|
+
* idField="id"
|
|
18
|
+
* displayField="placa"
|
|
19
|
+
* onSelect={handleSelect}
|
|
20
|
+
* onClose={() => setOpened(false)}
|
|
21
|
+
* >
|
|
22
|
+
* <Columns>
|
|
23
|
+
* <ArchbaseDataGridColumn dataField="placa" header="Placa" size={120} />
|
|
24
|
+
* </Columns>
|
|
25
|
+
* </ArchbaseLookupDataTemplate>
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // Seleção múltipla com DataSource externo
|
|
29
|
+
* <ArchbaseLookupDataTemplate<ProdutoDto>
|
|
30
|
+
* opened={opened}
|
|
31
|
+
* title="Selecionar Produtos"
|
|
32
|
+
* selectionMode="multiple"
|
|
33
|
+
* dataSource={dsProducts}
|
|
34
|
+
* maxSelections={10}
|
|
35
|
+
* idField="id"
|
|
36
|
+
* displayField="nome"
|
|
37
|
+
* onSelectMultiple={handleSelectMultiple}
|
|
38
|
+
* onClose={() => setOpened(false)}
|
|
39
|
+
* >
|
|
40
|
+
* <Columns>
|
|
41
|
+
* <ArchbaseDataGridColumn dataField="nome" header="Nome" size={200} />
|
|
42
|
+
* </Columns>
|
|
43
|
+
* </ArchbaseLookupDataTemplate>
|
|
44
|
+
*/
|
|
45
|
+
export declare const ArchbaseLookupDataTemplate: <T extends object, ID = string>(props: ArchbaseLookupDataTemplateProps<T, ID> & {
|
|
46
|
+
ref?: React.ForwardedRef<ArchbaseLookupDataTemplateRef<T>>;
|
|
47
|
+
}) => ReturnType<typeof ArchbaseLookupDataTemplateImpl>;
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ArchbaseDataSource } from '../../data/src';
|
|
3
|
+
import { FilterOptions, ArchbaseQueryFilterDelegator } from '../../advanced/src';
|
|
4
|
+
import { ArchbaseTemplateSecurityProps } from './ArchbaseTemplateCommonTypes';
|
|
5
|
+
/**
|
|
6
|
+
* Modo de seleção do lookup
|
|
7
|
+
*/
|
|
8
|
+
export type LookupSelectionMode = 'single' | 'multiple';
|
|
9
|
+
/**
|
|
10
|
+
* Labels customizáveis do componente
|
|
11
|
+
*/
|
|
12
|
+
export interface LookupLabels {
|
|
13
|
+
okButton?: string;
|
|
14
|
+
cancelButton?: string;
|
|
15
|
+
clearButton?: string;
|
|
16
|
+
selectedLabel?: string;
|
|
17
|
+
doubleClickHint?: string;
|
|
18
|
+
noItemSelected?: string;
|
|
19
|
+
itemsSelected?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Props principais do ArchbaseLookupDataTemplate
|
|
23
|
+
*/
|
|
24
|
+
export interface ArchbaseLookupDataTemplateProps<T extends object, ID = string> extends ArchbaseTemplateSecurityProps {
|
|
25
|
+
/** Estado de abertura do modal */
|
|
26
|
+
opened: boolean;
|
|
27
|
+
/** Título do modal */
|
|
28
|
+
title: string;
|
|
29
|
+
/** Colunas do grid (children: <Columns><ArchbaseDataGridColumn /></Columns>) */
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
/** Callback quando o modal é fechado */
|
|
32
|
+
onClose: () => void;
|
|
33
|
+
/** Campo usado como ID único */
|
|
34
|
+
idField: keyof T;
|
|
35
|
+
/** Campo principal para exibir no resumo do item selecionado */
|
|
36
|
+
displayField: keyof T;
|
|
37
|
+
/** Modo de seleção: 'single' (padrão) ou 'multiple' */
|
|
38
|
+
selectionMode?: LookupSelectionMode;
|
|
39
|
+
/** Callback quando um item é selecionado (seleção única) */
|
|
40
|
+
onSelect?: (item: T) => void;
|
|
41
|
+
/** Callback quando múltiplos itens são selecionados (seleção múltipla) */
|
|
42
|
+
onSelectMultiple?: (items: T[]) => void;
|
|
43
|
+
/** Itens pré-selecionados (para inicialização ou edição) */
|
|
44
|
+
initialSelectedItems?: T[];
|
|
45
|
+
/** Seleção por duplo clique (apenas single). Default: true */
|
|
46
|
+
selectOnDoubleClick?: boolean;
|
|
47
|
+
/** Callback antes de confirmar a seleção (retornar false cancela) */
|
|
48
|
+
onBeforeConfirm?: (items: T[]) => boolean | Promise<boolean>;
|
|
49
|
+
/** Callback após confirmar a seleção */
|
|
50
|
+
onAfterConfirm?: (items: T[]) => void;
|
|
51
|
+
/**
|
|
52
|
+
* DataSource externo (quando fornecido, o componente não cria um interno)
|
|
53
|
+
* Suporta tanto V1 quanto V2 automaticamente
|
|
54
|
+
*/
|
|
55
|
+
dataSource?: ArchbaseDataSource<T, ID>;
|
|
56
|
+
/**
|
|
57
|
+
* Função para carregar dados (usada quando dataSource não é fornecido)
|
|
58
|
+
* @param searchValue - Valor de busca
|
|
59
|
+
* @param searchFields - Campos para busca
|
|
60
|
+
* @returns Promise com array de registros
|
|
61
|
+
*/
|
|
62
|
+
loadData?: (searchValue?: string, searchFields?: string) => Promise<T[]>;
|
|
63
|
+
/** Campos para busca (separados por vírgula) */
|
|
64
|
+
searchFields?: string;
|
|
65
|
+
/** Tamanho da página para paginação. Default: 100 */
|
|
66
|
+
pageSize?: number;
|
|
67
|
+
/** Campo secundário para exibir no resumo (opcional) */
|
|
68
|
+
displaySubField?: keyof T;
|
|
69
|
+
/** Função customizada para renderizar o item selecionado */
|
|
70
|
+
renderSelectedItem?: (item: T) => ReactNode;
|
|
71
|
+
/** Função customizada para renderizar a lista de itens selecionados (múltipla seleção) */
|
|
72
|
+
renderSelectedItems?: (items: T[]) => ReactNode;
|
|
73
|
+
/** Ícone do título */
|
|
74
|
+
icon?: ReactNode;
|
|
75
|
+
/** Tamanho do modal. Default: '70%' */
|
|
76
|
+
modalSize?: string | number;
|
|
77
|
+
/** Altura do modal. Default: '600px' */
|
|
78
|
+
modalHeight?: string | number;
|
|
79
|
+
/** Altura do grid. Default: 400 */
|
|
80
|
+
gridHeight?: number;
|
|
81
|
+
/** Altura das linhas do grid. Default: 52 */
|
|
82
|
+
rowHeight?: number;
|
|
83
|
+
/** Cor de fundo do indicador de seleção. Default: 'blue.0' */
|
|
84
|
+
selectionIndicatorColor?: string;
|
|
85
|
+
/** Exibir indicador de seleção. Default: true */
|
|
86
|
+
showSelectionIndicator?: boolean;
|
|
87
|
+
/** Máximo de itens selecionáveis. Default: undefined (sem limite) */
|
|
88
|
+
maxSelections?: number;
|
|
89
|
+
/** Exibir contador de seleção. Default: true */
|
|
90
|
+
showSelectionCount?: boolean;
|
|
91
|
+
/** Permitir desmarcar todos. Default: true */
|
|
92
|
+
allowClearAll?: boolean;
|
|
93
|
+
/** Tipo de filtro: 'none' | 'simple' | 'advanced'. Default: 'simple' */
|
|
94
|
+
filterType?: 'none' | 'simple' | 'advanced';
|
|
95
|
+
/** Opções do filtro avançado (quando filterType='advanced') */
|
|
96
|
+
filterOptions?: FilterOptions;
|
|
97
|
+
/** Delegador de persistência de filtros */
|
|
98
|
+
filterPersistenceDelegator?: ArchbaseQueryFilterDelegator;
|
|
99
|
+
/** Campos de filtro para o QueryBuilder */
|
|
100
|
+
filterFields?: ReactNode;
|
|
101
|
+
/** Indicador de carregamento externo */
|
|
102
|
+
isLoading?: boolean;
|
|
103
|
+
/** Indicador de erro */
|
|
104
|
+
isError?: boolean;
|
|
105
|
+
/** Mensagem de erro */
|
|
106
|
+
error?: string;
|
|
107
|
+
/** Função para limpar erro */
|
|
108
|
+
clearError?: () => void;
|
|
109
|
+
/** Tempo para auto-fechar alerta de erro (ms). Default: 15000 */
|
|
110
|
+
autoCloseAlertError?: number;
|
|
111
|
+
/** Callback quando ocorre erro ao carregar dados */
|
|
112
|
+
onError?: (error: any) => void;
|
|
113
|
+
/** Ações customizadas na toolbar */
|
|
114
|
+
userActions?: ReactNode;
|
|
115
|
+
/** Labels customizáveis */
|
|
116
|
+
labels?: LookupLabels;
|
|
117
|
+
/** Variante de estilo */
|
|
118
|
+
variant?: string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Interface para os métodos expostos via ref do ArchbaseLookupDataTemplate
|
|
122
|
+
*/
|
|
123
|
+
export interface ArchbaseLookupDataTemplateRef<T = any> {
|
|
124
|
+
/**
|
|
125
|
+
* Obtém os itens atualmente selecionados
|
|
126
|
+
*/
|
|
127
|
+
getSelectedItems: () => T[];
|
|
128
|
+
/**
|
|
129
|
+
* Obtém um único item selecionado (para modo single)
|
|
130
|
+
*/
|
|
131
|
+
getSelectedItem: () => T | null;
|
|
132
|
+
/**
|
|
133
|
+
* Limpa toda a seleção
|
|
134
|
+
*/
|
|
135
|
+
clearSelection: () => void;
|
|
136
|
+
/**
|
|
137
|
+
* Seleciona itens programaticamente
|
|
138
|
+
*/
|
|
139
|
+
selectItems: (items: T[]) => void;
|
|
140
|
+
/**
|
|
141
|
+
* Seleciona um único item programaticamente
|
|
142
|
+
*/
|
|
143
|
+
selectItem: (item: T) => void;
|
|
144
|
+
/**
|
|
145
|
+
* Remove um item da seleção
|
|
146
|
+
*/
|
|
147
|
+
deselectItem: (item: T) => void;
|
|
148
|
+
/**
|
|
149
|
+
* Atualiza/recarrega os dados do grid
|
|
150
|
+
*/
|
|
151
|
+
refreshData: () => void;
|
|
152
|
+
/**
|
|
153
|
+
* Obtém o DataSource interno/externo
|
|
154
|
+
*/
|
|
155
|
+
getDataSource: () => ArchbaseDataSource<T, any> | null;
|
|
156
|
+
/**
|
|
157
|
+
* Confirma a seleção (equivalente a clicar OK)
|
|
158
|
+
*/
|
|
159
|
+
confirmSelection: () => Promise<void>;
|
|
160
|
+
/**
|
|
161
|
+
* Cancela a seleção (equivalente a clicar Cancelar)
|
|
162
|
+
*/
|
|
163
|
+
cancelSelection: () => void;
|
|
164
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opções para configurar o hook useArchbaseLookup
|
|
3
|
+
*/
|
|
4
|
+
export interface UseArchbaseLookupOptions<T> {
|
|
5
|
+
/**
|
|
6
|
+
* Callback executado quando um item é selecionado (modo single)
|
|
7
|
+
* Chamado antes de fechar o modal
|
|
8
|
+
*/
|
|
9
|
+
onSelect?: (item: T) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Callback executado quando múltiplos itens são selecionados (modo multiple)
|
|
12
|
+
* Chamado antes de fechar o modal
|
|
13
|
+
*/
|
|
14
|
+
onSelectMultiple?: (items: T[]) => void;
|
|
15
|
+
/**
|
|
16
|
+
* Item inicial selecionado (para pré-selecionar um valor)
|
|
17
|
+
*/
|
|
18
|
+
initialValue?: T | null;
|
|
19
|
+
/**
|
|
20
|
+
* Itens iniciais selecionados (para modo múltipla seleção)
|
|
21
|
+
*/
|
|
22
|
+
initialValues?: T[];
|
|
23
|
+
/**
|
|
24
|
+
* Modo de seleção: 'single' ou 'multiple'
|
|
25
|
+
* Default: 'single'
|
|
26
|
+
*/
|
|
27
|
+
selectionMode?: 'single' | 'multiple';
|
|
28
|
+
/**
|
|
29
|
+
* Se true, fecha o modal automaticamente após seleção
|
|
30
|
+
* Default: true
|
|
31
|
+
*/
|
|
32
|
+
autoClose?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Callback executado quando o modal é aberto
|
|
35
|
+
*/
|
|
36
|
+
onOpen?: () => void;
|
|
37
|
+
/**
|
|
38
|
+
* Callback executado quando o modal é fechado
|
|
39
|
+
*/
|
|
40
|
+
onClose?: () => void;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Props para passar diretamente ao ArchbaseLookupDataTemplate
|
|
44
|
+
* Facilita a integração via spread: {...lookup.lookupProps}
|
|
45
|
+
*/
|
|
46
|
+
export interface LookupTemplateProps<T> {
|
|
47
|
+
opened: boolean;
|
|
48
|
+
onClose: () => void;
|
|
49
|
+
onSelect: (item: T) => void;
|
|
50
|
+
onSelectMultiple: (items: T[]) => void;
|
|
51
|
+
selectionMode: 'single' | 'multiple';
|
|
52
|
+
initialSelectedItems?: T[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Retorno do hook useArchbaseLookup
|
|
56
|
+
*/
|
|
57
|
+
export interface UseArchbaseLookupReturn<T> {
|
|
58
|
+
/** Indica se o modal está aberto */
|
|
59
|
+
opened: boolean;
|
|
60
|
+
/** Item selecionado (modo single) */
|
|
61
|
+
selectedItem: T | null;
|
|
62
|
+
/** Itens selecionados (modo multiple) */
|
|
63
|
+
selectedItems: T[];
|
|
64
|
+
/** Abre o modal de lookup */
|
|
65
|
+
open: () => void;
|
|
66
|
+
/** Fecha o modal de lookup */
|
|
67
|
+
close: () => void;
|
|
68
|
+
/** Limpa a seleção atual */
|
|
69
|
+
clear: () => void;
|
|
70
|
+
/** Define um item selecionado programaticamente */
|
|
71
|
+
setSelectedItem: (item: T | null) => void;
|
|
72
|
+
/** Define múltiplos itens selecionados programaticamente */
|
|
73
|
+
setSelectedItems: (items: T[]) => void;
|
|
74
|
+
/** Handler para seleção única (usado internamente pelo modal) */
|
|
75
|
+
handleSelect: (item: T) => void;
|
|
76
|
+
/** Handler para seleção múltipla (usado internamente pelo modal) */
|
|
77
|
+
handleSelectMultiple: (items: T[]) => void;
|
|
78
|
+
/** Handler para fechar o modal (usado internamente pelo modal) */
|
|
79
|
+
handleClose: () => void;
|
|
80
|
+
/**
|
|
81
|
+
* Props para passar diretamente ao ArchbaseLookupDataTemplate
|
|
82
|
+
* Uso: <ArchbaseLookupDataTemplate {...lookup.lookupProps} ... />
|
|
83
|
+
*/
|
|
84
|
+
lookupProps: LookupTemplateProps<T>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Hook para gerenciar estado de lookup e integrar com editores
|
|
88
|
+
*
|
|
89
|
+
* @example Uso básico com seleção única
|
|
90
|
+
* ```tsx
|
|
91
|
+
* function MeuFormulario() {
|
|
92
|
+
* const lookup = useArchbaseLookup<VeiculoDto>({
|
|
93
|
+
* onSelect: (veiculo) => {
|
|
94
|
+
* dataSource.setFieldValue('veiculo', veiculo)
|
|
95
|
+
* }
|
|
96
|
+
* })
|
|
97
|
+
*
|
|
98
|
+
* return (
|
|
99
|
+
* <>
|
|
100
|
+
* <ArchbaseLookupEdit
|
|
101
|
+
* onActionSearchExecute={lookup.open}
|
|
102
|
+
* // ...
|
|
103
|
+
* />
|
|
104
|
+
* <ArchbaseLookupDataTemplate
|
|
105
|
+
* {...lookup.lookupProps}
|
|
106
|
+
* title="Selecionar Veículo"
|
|
107
|
+
* // ...
|
|
108
|
+
* />
|
|
109
|
+
* </>
|
|
110
|
+
* )
|
|
111
|
+
* }
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* @example Uso com seleção múltipla
|
|
115
|
+
* ```tsx
|
|
116
|
+
* const lookup = useArchbaseLookup<ProdutoDto>({
|
|
117
|
+
* selectionMode: 'multiple',
|
|
118
|
+
* onSelectMultiple: (produtos) => {
|
|
119
|
+
* setProdutosSelecionados(produtos)
|
|
120
|
+
* }
|
|
121
|
+
* })
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export declare function useArchbaseLookup<T>(options?: UseArchbaseLookupOptions<T>): UseArchbaseLookupReturn<T>;
|
|
@@ -6,6 +6,8 @@ export * from './ArchbaseMasonryTemplate';
|
|
|
6
6
|
export * from './ArchbasePanelTemplate';
|
|
7
7
|
export * from './ArchbaseSpaceTemplate';
|
|
8
8
|
export * from './ArchbaseSearchTemplate';
|
|
9
|
+
export * from './ArchbaseLookupDataTemplate';
|
|
10
|
+
export * from './ArchbaseLookupDataTemplate.types';
|
|
9
11
|
export * from './ArchbaseTemplateCommonTypes';
|
|
10
12
|
export * from './ArchbaseTemplateState';
|
|
11
13
|
export * from './ArchbaseStateValues';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@archbase/template",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.7",
|
|
4
4
|
"description": "Template components for Archbase React v3 - High-level templates and layouts",
|
|
5
5
|
"author": "Edson Martins <edsonmartins2005@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -13,35 +13,34 @@
|
|
|
13
13
|
"types": "./dist/index.d.ts",
|
|
14
14
|
"import": "./dist/index.js",
|
|
15
15
|
"require": "./dist/index.js"
|
|
16
|
-
}
|
|
17
|
-
"./dist/index.css": "./dist/index.css"
|
|
16
|
+
}
|
|
18
17
|
},
|
|
19
18
|
"files": [
|
|
20
19
|
"dist",
|
|
21
20
|
"README.md"
|
|
22
21
|
],
|
|
23
22
|
"peerDependencies": {
|
|
24
|
-
"@mantine/core": "8.3.
|
|
25
|
-
"@mantine/dates": "8.3.
|
|
26
|
-
"@mantine/hooks": "8.3.
|
|
27
|
-
"@mantine/modals": "8.3.
|
|
23
|
+
"@mantine/core": "8.3.14",
|
|
24
|
+
"@mantine/dates": "8.3.14",
|
|
25
|
+
"@mantine/hooks": "8.3.14",
|
|
26
|
+
"@mantine/modals": "8.3.14",
|
|
28
27
|
"@tabler/icons-react": "^3.26.0",
|
|
29
28
|
"react": "^18.3.0 || ^19.2.0",
|
|
30
29
|
"react-dom": "^18.3.0 || ^19.2.0"
|
|
31
30
|
},
|
|
32
31
|
"dependencies": {
|
|
33
|
-
"@archbase/advanced": "3.0.6",
|
|
34
|
-
"@archbase/components": "3.0.6",
|
|
35
|
-
"@archbase/core": "3.0.6",
|
|
36
|
-
"@archbase/data": "3.0.6",
|
|
37
|
-
"@archbase/layout": "3.0.6",
|
|
38
|
-
"@archbase/security": "3.0.6",
|
|
39
|
-
"@archbase/security-ui": "3.0.6",
|
|
40
32
|
"@rehooks/component-size": "^1.0.3",
|
|
41
33
|
"dayjs": "^1.11.13",
|
|
42
34
|
"i18next": "^25.3.1",
|
|
43
35
|
"lodash": "^4.17.21",
|
|
44
|
-
"react-i18next": "^15.1.2"
|
|
36
|
+
"react-i18next": "^15.1.2",
|
|
37
|
+
"@archbase/advanced": "3.0.7",
|
|
38
|
+
"@archbase/components": "3.0.7",
|
|
39
|
+
"@archbase/core": "3.0.7",
|
|
40
|
+
"@archbase/data": "3.0.7",
|
|
41
|
+
"@archbase/layout": "3.0.7",
|
|
42
|
+
"@archbase/security": "3.0.7",
|
|
43
|
+
"@archbase/security-ui": "3.0.7"
|
|
45
44
|
},
|
|
46
45
|
"devDependencies": {
|
|
47
46
|
"@types/react": "^19.0.6",
|