@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.
@@ -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
+ }
@@ -1 +1,2 @@
1
1
  export * from './useOptionalTemplateSecurity';
2
+ export * from './useArchbaseLookup';
@@ -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.6",
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.12",
25
- "@mantine/dates": "8.3.12",
26
- "@mantine/hooks": "8.3.12",
27
- "@mantine/modals": "8.3.12",
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",