@orbe-agro/client-core 5.6.117 → 5.6.119

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.
Files changed (105) hide show
  1. package/dist/@types/base/@types/filters/index.d.ts +60 -0
  2. package/dist/@types/base/@types/filters/index.d.ts.map +1 -0
  3. package/dist/@types/base/@types/index.d.ts +1 -0
  4. package/dist/@types/base/@types/index.d.ts.map +1 -1
  5. package/dist/@types/base/@types/models/compras/RequisicaoCompra.d.ts +3 -0
  6. package/dist/@types/base/@types/models/compras/RequisicaoCompra.d.ts.map +1 -1
  7. package/dist/@types/base/@types/models/performance/categoria.d.ts +2 -1
  8. package/dist/@types/base/@types/models/performance/categoria.d.ts.map +1 -1
  9. package/dist/@types/base/components/filters/DynamicFilterField.d.ts +23 -0
  10. package/dist/@types/base/components/filters/DynamicFilterField.d.ts.map +1 -0
  11. package/dist/@types/base/components/filters/DynamicFilterPanel.d.ts +30 -0
  12. package/dist/@types/base/components/filters/DynamicFilterPanel.d.ts.map +1 -0
  13. package/dist/@types/base/components/filters/index.d.ts +3 -0
  14. package/dist/@types/base/components/filters/index.d.ts.map +1 -0
  15. package/dist/@types/base/components/index.d.ts +1 -0
  16. package/dist/@types/base/components/index.d.ts.map +1 -1
  17. package/dist/@types/base/configs/endpoints.config/centralNfe/centralNfe.d.ts +4 -0
  18. package/dist/@types/base/configs/endpoints.config/centralNfe/centralNfe.d.ts.map +1 -1
  19. package/dist/@types/base/configs/endpoints.config/centralNfe/config/nfe.d.ts +4 -0
  20. package/dist/@types/base/configs/endpoints.config/centralNfe/config/nfe.d.ts.map +1 -1
  21. package/dist/@types/base/configs/endpoints.config/compras/compras.d.ts +4 -0
  22. package/dist/@types/base/configs/endpoints.config/compras/compras.d.ts.map +1 -1
  23. package/dist/@types/base/configs/endpoints.config/compras/config/cadastroEstrategiaLiberacaoValor.d.ts +4 -0
  24. package/dist/@types/base/configs/endpoints.config/compras/config/cadastroEstrategiaLiberacaoValor.d.ts.map +1 -1
  25. package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts +9 -0
  26. package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts.map +1 -1
  27. package/dist/@types/base/configs/endpoints.config/originacao/config/saldoTicket.d.ts +1 -0
  28. package/dist/@types/base/configs/endpoints.config/originacao/config/saldoTicket.d.ts.map +1 -1
  29. package/dist/@types/base/configs/endpoints.config/originacao/originacao.d.ts +1 -0
  30. package/dist/@types/base/configs/endpoints.config/originacao/originacao.d.ts.map +1 -1
  31. package/dist/@types/base/configs/navigation.config/submenu/performance/cadastros.submenu.d.ts.map +1 -1
  32. package/dist/@types/base/hooks/filters/useFilterMetadata.d.ts +26 -0
  33. package/dist/@types/base/hooks/filters/useFilterMetadata.d.ts.map +1 -0
  34. package/dist/@types/base/hooks/index.d.ts +1 -0
  35. package/dist/@types/base/hooks/index.d.ts.map +1 -1
  36. package/dist/@types/base/services/modules/centralNfe/nfe/NfeService.d.ts +1 -0
  37. package/dist/@types/base/services/modules/centralNfe/nfe/NfeService.d.ts.map +1 -1
  38. package/dist/@types/base/services/modules/compras/cadastroEstrategiaLiberacaoValor/CadastroEstrategiaLiberacaoValorService.d.ts +7 -0
  39. package/dist/@types/base/services/modules/compras/cadastroEstrategiaLiberacaoValor/CadastroEstrategiaLiberacaoValorService.d.ts.map +1 -1
  40. package/dist/@types/base/services/modules/originacao/saldoTicket/saldoTicketService.d.ts +2 -0
  41. package/dist/@types/base/services/modules/originacao/saldoTicket/saldoTicketService.d.ts.map +1 -1
  42. package/dist/@types/base/utils/filters/groupFilterFields.d.ts +15 -0
  43. package/dist/@types/base/utils/filters/groupFilterFields.d.ts.map +1 -0
  44. package/dist/@types/base/utils/index.d.ts +1 -0
  45. package/dist/@types/base/utils/index.d.ts.map +1 -1
  46. package/dist/base/@types/filters/index.js +2 -0
  47. package/dist/base/@types/filters/index.js.map +1 -0
  48. package/dist/base/@types/index.js +1 -0
  49. package/dist/base/@types/index.js.map +1 -1
  50. package/dist/base/components/filters/DynamicFilterField.js +156 -0
  51. package/dist/base/components/filters/DynamicFilterField.js.map +1 -0
  52. package/dist/base/components/filters/DynamicFilterPanel.js +19 -0
  53. package/dist/base/components/filters/DynamicFilterPanel.js.map +1 -0
  54. package/dist/base/components/filters/index.js +7 -0
  55. package/dist/base/components/filters/index.js.map +1 -0
  56. package/dist/base/components/index.js +11 -6
  57. package/dist/base/components/index.js.map +1 -1
  58. package/dist/base/configs/endpoints.config/centralNfe/config/nfe.js +1 -0
  59. package/dist/base/configs/endpoints.config/centralNfe/config/nfe.js.map +1 -1
  60. package/dist/base/configs/endpoints.config/compras/config/cadastroEstrategiaLiberacaoValor.js +2 -1
  61. package/dist/base/configs/endpoints.config/compras/config/cadastroEstrategiaLiberacaoValor.js.map +1 -1
  62. package/dist/base/configs/endpoints.config/originacao/config/saldoTicket.js +2 -1
  63. package/dist/base/configs/endpoints.config/originacao/config/saldoTicket.js.map +1 -1
  64. package/dist/base/configs/navigation.config/submenu/performance/cadastros.submenu.js +0 -2
  65. package/dist/base/configs/navigation.config/submenu/performance/cadastros.submenu.js.map +1 -1
  66. package/dist/base/hooks/filters/useFilterMetadata.js +23 -0
  67. package/dist/base/hooks/filters/useFilterMetadata.js.map +1 -0
  68. package/dist/base/hooks/index.js +2 -0
  69. package/dist/base/hooks/index.js.map +1 -1
  70. package/dist/base/index.js +232 -223
  71. package/dist/base/index.js.map +1 -1
  72. package/dist/base/services/index.js +2 -1
  73. package/dist/base/services/modules/centralNfe/index.js +2 -1
  74. package/dist/base/services/modules/centralNfe/nfe/NfeService.js +7 -0
  75. package/dist/base/services/modules/centralNfe/nfe/NfeService.js.map +1 -1
  76. package/dist/base/services/modules/compras/cadastroEstrategiaLiberacaoValor/CadastroEstrategiaLiberacaoValorService.js +8 -0
  77. package/dist/base/services/modules/compras/cadastroEstrategiaLiberacaoValor/CadastroEstrategiaLiberacaoValorService.js.map +1 -1
  78. package/dist/base/services/modules/compras/index.js +2 -1
  79. package/dist/base/services/modules/index.js +2 -1
  80. package/dist/base/services/modules/originacao/saldoTicket/saldoTicketService.js +7 -0
  81. package/dist/base/services/modules/originacao/saldoTicket/saldoTicketService.js.map +1 -1
  82. package/dist/base/utils/filters/groupFilterFields.js +56 -0
  83. package/dist/base/utils/filters/groupFilterFields.js.map +1 -0
  84. package/dist/base/utils/index.js +2 -0
  85. package/dist/base/utils/index.js.map +1 -1
  86. package/lib/base/@types/filters/index.ts +87 -0
  87. package/lib/base/@types/index.ts +1 -0
  88. package/lib/base/@types/models/compras/RequisicaoCompra.ts +3 -0
  89. package/lib/base/@types/models/performance/categoria.ts +3 -1
  90. package/lib/base/components/filters/DynamicFilterField.tsx +213 -0
  91. package/lib/base/components/filters/DynamicFilterPanel.tsx +50 -0
  92. package/lib/base/components/filters/index.ts +2 -0
  93. package/lib/base/components/index.ts +4 -1
  94. package/lib/base/configs/endpoints.config/centralNfe/config/nfe.ts +1 -0
  95. package/lib/base/configs/endpoints.config/compras/config/cadastroEstrategiaLiberacaoValor.ts +1 -0
  96. package/lib/base/configs/endpoints.config/originacao/config/saldoTicket.ts +2 -1
  97. package/lib/base/configs/navigation.config/submenu/performance/cadastros.submenu.ts +0 -2
  98. package/lib/base/hooks/filters/useFilterMetadata.ts +43 -0
  99. package/lib/base/hooks/index.ts +2 -1
  100. package/lib/base/services/modules/centralNfe/nfe/NfeService.ts +8 -0
  101. package/lib/base/services/modules/compras/cadastroEstrategiaLiberacaoValor/CadastroEstrategiaLiberacaoValorService.ts +8 -0
  102. package/lib/base/services/modules/originacao/saldoTicket/saldoTicketService.ts +8 -0
  103. package/lib/base/utils/filters/groupFilterFields.ts +93 -0
  104. package/lib/base/utils/index.ts +1 -0
  105. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  // Route components
3
3
  export * from './routes';
4
4
 
5
- // Table components
5
+ // Table components
6
6
  export * from './table';
7
7
 
8
8
  // Tool components
@@ -10,3 +10,6 @@ export * from './tools';
10
10
 
11
11
  // View components
12
12
  export * from './views';
13
+
14
+ // Filter components (dynamic metadata-driven filters)
15
+ export * from './filters';
@@ -11,6 +11,7 @@ const nfe = {
11
11
  desvincularOrdemCompra: { endpoint: `${NFE_BASE_URL}/desvincular-ordem-compra`, httpMethod: 'post' },
12
12
  estornarPedidoCompra: { endpoint: `${NFE_BASE_URL}/estornar-pedido-compra/{numeroPedido}`, httpMethod: 'post' },
13
13
  estornarOperacao: { endpoint: `${NFE_BASE_URL}/estornar-operacao?id={id}`, httpMethod: 'post' },
14
+ finalizarPedido: { endpoint: `${NFE_BASE_URL}/finalizar-pedido/{numeroPedido}`, httpMethod: 'post' },
14
15
  lock: { endpoint: `${NFE_BASE_URL}/lock`, httpMethod: 'post' },
15
16
  }
16
17
 
@@ -6,6 +6,7 @@ const cadastroEstrategiaLiberacaoValor = {
6
6
  findMonitor: { endpoint: `${CADASTRO_ESTRATEGIA_LIBERACAO_VALOR}/find-monitor`, httpMethod: 'post' },
7
7
  findOne: { endpoint: CADASTRO_ESTRATEGIA_LIBERACAO_VALOR, httpMethod: 'get' },
8
8
  delete: { endpoint: CADASTRO_ESTRATEGIA_LIBERACAO_VALOR, httpMethod: 'delete' },
9
+ findRolesByValor: { endpoint: `${CADASTRO_ESTRATEGIA_LIBERACAO_VALOR}/find-roles-by-valor`, httpMethod: 'post' },
9
10
  }
10
11
 
11
12
  export default cadastroEstrategiaLiberacaoValor
@@ -4,7 +4,8 @@ const saldoTicket = {
4
4
  historicoById: (id: string, params?: string) => `/originacao/api/saldo-ticket/${id}/historicos?${params ?? ""}`,
5
5
  buscarSaldoDisponivel: '/originacao/api/saldo-ticket/saldo-disponivel',
6
6
  findAllMetrics: (params?: string) => `/originacao/api/saldo-ticket/metrics?${params ?? ""}`,
7
- updateStatus: (id: string) => `/originacao/api/saldo-ticket/${id}/forcar-status-saldo`
7
+ updateStatus: (id: string) => `/originacao/api/saldo-ticket/${id}/forcar-status-saldo`,
8
+ filterMetadata: '/originacao/api/saldo-ticket/filter-metadata',
8
9
  };
9
10
 
10
11
  export default saldoTicket;
@@ -1,11 +1,9 @@
1
1
  import { NavigationTree } from '@/@types/navigation'
2
- import modeloNotaSubmenu from './config/modeloNota.submenu'
3
2
  import categoriaSubmenu from './config/categoria.submenu'
4
3
  import areaAtuacaoSubmenu from './config/areaAtuacao.submenu'
5
4
  import modeloAvaliacaoSubmenu from './config/modeloAvaliacao.submenu'
6
5
 
7
6
  const cadastrosSubmenu: NavigationTree[] = [
8
- modeloNotaSubmenu,
9
7
  categoriaSubmenu,
10
8
  areaAtuacaoSubmenu,
11
9
  modeloAvaliacaoSubmenu
@@ -0,0 +1,43 @@
1
+ import useSWR from 'swr'
2
+ import type { IFilterFieldDescriptor } from '@base/@types/filters'
3
+
4
+ /**
5
+ * Busca e faz cache dos metadados de filtros de um endpoint específico.
6
+ *
7
+ * Usa configurações imutáveis de SWR: os dados são buscados uma única vez
8
+ * por sessão e nunca revalidados automaticamente, pois metadados de filtro são
9
+ * estruturais e não mudam durante o uso da aplicação.
10
+ *
11
+ * O `fetcher` deve ser a função de serviço correspondente ao endpoint,
12
+ * garantindo que a chamada passe pelo ApiService (Axios + token de autenticação).
13
+ *
14
+ * @param swrKey - Chave única de cache SWR (ex: '/originacao/api/saldo-ticket/filter-metadata')
15
+ * @param fetcher - Função que realiza a chamada à API e retorna IFilterFieldDescriptor[]
16
+ *
17
+ * @example
18
+ * const { fields, isLoading, error } = useFilterMetadata(
19
+ * '/originacao/api/saldo-ticket/filter-metadata',
20
+ * apiFindSaldoFilterMetadata,
21
+ * )
22
+ */
23
+ export default function useFilterMetadata(
24
+ swrKey: string,
25
+ fetcher: () => Promise<IFilterFieldDescriptor[]>,
26
+ ) {
27
+ const { data, error, isLoading } = useSWR<IFilterFieldDescriptor[]>(
28
+ swrKey || null,
29
+ fetcher,
30
+ {
31
+ revalidateOnFocus: false,
32
+ revalidateOnReconnect: false,
33
+ revalidateIfStale: false,
34
+ dedupingInterval: 600_000, // 10 minutos — metadados são imutáveis por sessão
35
+ }
36
+ )
37
+
38
+ return {
39
+ fields: data ?? [],
40
+ isLoading,
41
+ error,
42
+ }
43
+ }
@@ -77,4 +77,5 @@ export { default as useIdleTimeout } from './useIdleTimeout';
77
77
  export { default as useFindProdutosByDepositoList } from './dm/produto/useFindProdutosByDepositoList';
78
78
  export { default as useBusinessPartnerFindMonitorTransportadoraList } from './dm/businessPartner/useBusinessPartnerFindMonitorTransportadoraList';
79
79
  export { default as useSapFindUniaoUtilizacaoLimiteCreditoByBusinessPartner } from './sap/uniaoUtilizacaoLimiteCredito/useSapFindUniaoUtilizacaoLimiteCreditoByCliente';
80
- export { default as useDadosUnificadosList } from './crm/dadosUnificados/useDadosUnificadosList';
80
+ export { default as useDadosUnificadosList } from './crm/dadosUnificados/useDadosUnificadosList';
81
+ export { default as useFilterMetadata } from './filters/useFilterMetadata';
@@ -82,6 +82,14 @@ export async function apiEstornarOperacao(id: number) {
82
82
  })
83
83
  }
84
84
 
85
+ export async function apiFinalizarPedido(numeroPedido: string) {
86
+ return ApiService.fetchDataWithAxios<any>({
87
+ url: NFE_ENDPOINT.finalizarPedido.endpoint
88
+ .replace('{numeroPedido}', numeroPedido),
89
+ method: NFE_ENDPOINT.finalizarPedido.httpMethod
90
+ })
91
+ }
92
+
85
93
  export async function apiSetNfeLock(idNfe: number, lock: boolean) {
86
94
  return ApiService.fetchDataWithAxios<any>({
87
95
  url: NFE_ENDPOINT.lock.endpoint,
@@ -40,4 +40,12 @@ export async function apiDeleteOneCadastroEstrategiaLiberacaoValor(id: number) {
40
40
  url: `${CADASTRO_ESTRATEGIA_LIBERACAO_VALOR_ENDPOINT.delete.endpoint}/${id}`,
41
41
  method: CADASTRO_ESTRATEGIA_LIBERACAO_VALOR_ENDPOINT.delete.httpMethod
42
42
  })
43
+ }
44
+
45
+ export async function apiFindRolesByValorCadastroEstrategiaLiberacaoValor(data: { valor: number }) {
46
+ return ApiService.fetchDataWithAxios<{ idRole: number; nome: string; ordem: number }[]>({
47
+ url: CADASTRO_ESTRATEGIA_LIBERACAO_VALOR_ENDPOINT.findRolesByValor.endpoint,
48
+ method: CADASTRO_ESTRATEGIA_LIBERACAO_VALOR_ENDPOINT.findRolesByValor.httpMethod,
49
+ data,
50
+ })
43
51
  }
@@ -7,6 +7,7 @@ import { TFindAllMetricsSaldoResponse } from "@base/@types/api/response/originac
7
7
  import { TEntityHistoricoResponse } from "@base/@types/api/response/originacao/TEntityHistoricoResponse";
8
8
  import { StatusSaldoTicket } from "@base/@types/enums/originacao/StatusSaldoTicket";
9
9
  import { TipoSaldo } from "@base/@types/enums/originacao/TipoSaldo";
10
+ import { IFilterFieldDescriptor } from "@base/@types/filters";
10
11
 
11
12
  const SALDO_TICKET_ORIGINACAO_ENDPOINT = endpointNavigationConfig.originacao.saldoTicket;
12
13
 
@@ -62,4 +63,11 @@ export async function apiUpdateStatusSaldoTicket(
62
63
  justificativa
63
64
  }
64
65
  });
66
+ }
67
+
68
+ export async function apiFindSaldoFilterMetadata() {
69
+ return ApiService.fetchDataWithAxios<IFilterFieldDescriptor[]>({
70
+ url: SALDO_TICKET_ORIGINACAO_ENDPOINT.filterMetadata,
71
+ method: "get",
72
+ });
65
73
  }
@@ -0,0 +1,93 @@
1
+ import type {
2
+ IFilterFieldDescriptor,
3
+ IFilterRangeGroup,
4
+ TFilterRenderItem,
5
+ IFilterStandaloneField,
6
+ } from '@base/@types/filters'
7
+
8
+ /**
9
+ * Agrupa IFilterFieldDescriptors em itens renderizáveis.
10
+ *
11
+ * - Campos com o mesmo rangeGroup não-nulo são fundidos em um único IFilterRangeGroup.
12
+ * - Todos os demais campos se tornam IFilterStandaloneField.
13
+ * - A ordem da lista original é preservada: o grupo aparece na posição do seu primeiro campo.
14
+ * - Se um rangeGroup tiver menos de 2 campos, cada um é tratado como standalone (fallback seguro).
15
+ *
16
+ * @example
17
+ * // dataEnvioDe + dataEnvioAte (mesmo rangeGroup) → IFilterRangeGroup { startField, endField }
18
+ * // id, operacao, businessPartnerId → IFilterStandaloneField[]
19
+ */
20
+ export function groupFilterFields(fields: IFilterFieldDescriptor[]): TFilterRenderItem[] {
21
+ // Primeiro passo: coletar todos os campos de cada rangeGroup
22
+ const rangeGroupMap = new Map<string, IFilterFieldDescriptor[]>()
23
+ for (const field of fields) {
24
+ if (field.rangeGroup) {
25
+ if (!rangeGroupMap.has(field.rangeGroup)) {
26
+ rangeGroupMap.set(field.rangeGroup, [])
27
+ }
28
+ rangeGroupMap.get(field.rangeGroup)!.push(field)
29
+ }
30
+ }
31
+
32
+ // Segundo passo: percorrer os campos mantendo a ordem, inserindo o grupo
33
+ // na posição do seu primeiro membro
34
+ const result: TFilterRenderItem[] = []
35
+ const rangeGroupInserted = new Set<string>()
36
+
37
+ for (const field of fields) {
38
+ if (field.rangeGroup) {
39
+ // Apenas insere o grupo uma vez (na posição do primeiro campo)
40
+ if (!rangeGroupInserted.has(field.rangeGroup)) {
41
+ rangeGroupInserted.add(field.rangeGroup)
42
+ const groupFields = rangeGroupMap.get(field.rangeGroup)!
43
+
44
+ // Fallback seguro: se o backend enviar apenas um campo do par, trata como standalone
45
+ if (groupFields.length < 2) {
46
+ result.push({ kind: 'standalone', descriptor: groupFields[0] })
47
+ continue
48
+ }
49
+
50
+ // Garante que o campo "De" (início) vem antes de "Ate"/"Até" (fim).
51
+ // Não pode usar localeCompare simples pois "Ate" < "De" alfabeticamente.
52
+ const sorted = [...groupFields].sort((a, b) => {
53
+ const aIsDe = /De$/i.test(a.field)
54
+ const bIsDe = /De$/i.test(b.field)
55
+ if (aIsDe && !bIsDe) return -1
56
+ if (!aIsDe && bIsDe) return 1
57
+ return a.field.localeCompare(b.field)
58
+ })
59
+
60
+ const rangeGroup: IFilterRangeGroup = {
61
+ kind: 'range',
62
+ rangeGroup: field.rangeGroup,
63
+ label: deriveRangeLabel(sorted),
64
+ startField: sorted[0],
65
+ endField: sorted[1],
66
+ }
67
+ result.push(rangeGroup)
68
+ }
69
+ } else {
70
+ const standalone: IFilterStandaloneField = {
71
+ kind: 'standalone',
72
+ descriptor: field,
73
+ }
74
+ result.push(standalone)
75
+ }
76
+ }
77
+
78
+ return result
79
+ }
80
+
81
+ /**
82
+ * Deriva um label legível para o grupo de range.
83
+ * Remove sufixos "De", "Até" e "Ate" do label do primeiro campo.
84
+ *
85
+ * @example
86
+ * // "Data Envio De" → "Data Envio"
87
+ * // "Data Envio Até" → "Data Envio"
88
+ */
89
+ function deriveRangeLabel(fields: IFilterFieldDescriptor[]): string {
90
+ if (fields.length === 0) return ''
91
+ const raw = fields[0].label
92
+ return raw.replace(/\s+(De|Até|Ate)$/i, '').trim() || raw
93
+ }
@@ -1,4 +1,5 @@
1
1
  // Utils exports from base
2
2
  export * from './logo';
3
3
  export * from './validateEmail/validateEmail';
4
+ export * from './filters/groupFilterFields';
4
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbe-agro/client-core",
3
- "version": "5.6.117",
3
+ "version": "5.6.119",
4
4
  "description": "Biblioteca principal de componentes e utilidades para os microfrontends do Orbe Agro.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",