@solucx/react-native-solucx-widget 0.2.4 → 2.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/README.md +526 -182
- package/lib/SoluCXWidget.d.ts +50 -7
- package/lib/SoluCXWidget.d.ts.map +1 -1
- package/lib/SoluCXWidget.js +105 -100
- package/lib/SoluCXWidget.js.map +1 -1
- package/lib/SoluCXWidgetHost.d.ts +3 -0
- package/lib/SoluCXWidgetHost.d.ts.map +1 -0
- package/lib/SoluCXWidgetHost.js +34 -0
- package/lib/SoluCXWidgetHost.js.map +1 -0
- package/lib/SoluCXWidgetView.d.ts +12 -0
- package/lib/SoluCXWidgetView.d.ts.map +1 -0
- package/lib/SoluCXWidgetView.js +61 -0
- package/lib/SoluCXWidgetView.js.map +1 -0
- package/lib/components/CloseButton.d.ts +1 -1
- package/lib/components/CloseButton.d.ts.map +1 -1
- package/lib/components/CloseButton.js +4 -1
- package/lib/components/CloseButton.js.map +1 -1
- package/lib/components/InlineWidget.d.ts.map +1 -1
- package/lib/components/InlineWidget.js +2 -7
- package/lib/components/InlineWidget.js.map +1 -1
- package/lib/components/ModalWidget.d.ts +1 -1
- package/lib/components/ModalWidget.d.ts.map +1 -1
- package/lib/components/ModalWidget.js +3 -16
- package/lib/components/ModalWidget.js.map +1 -1
- package/lib/components/OverlayWidget.d.ts.map +1 -1
- package/lib/components/OverlayWidget.js +5 -15
- package/lib/components/OverlayWidget.js.map +1 -1
- package/lib/components/index.d.ts +5 -0
- package/lib/components/index.d.ts.map +1 -0
- package/lib/components/index.js +12 -0
- package/lib/components/index.js.map +1 -0
- package/lib/constants/Constants.d.ts +11 -0
- package/lib/constants/Constants.d.ts.map +1 -1
- package/lib/constants/Constants.js +16 -1
- package/lib/constants/Constants.js.map +1 -1
- package/lib/{interfaces → domain}/WidgetCallbacks.d.ts +2 -2
- package/lib/domain/WidgetCallbacks.d.ts.map +1 -0
- package/lib/domain/WidgetCallbacks.js.map +1 -0
- package/{src/interfaces/WidgetData.ts → lib/domain/WidgetData.d.ts} +5 -2
- package/lib/domain/WidgetData.d.ts.map +1 -0
- package/lib/{interfaces → domain}/WidgetData.js.map +1 -1
- package/lib/domain/WidgetDisplayResult.d.ts +6 -0
- package/lib/domain/WidgetDisplayResult.d.ts.map +1 -0
- package/lib/domain/WidgetDisplayResult.js +3 -0
- package/lib/domain/WidgetDisplayResult.js.map +1 -0
- package/lib/domain/WidgetOptions.d.ts +27 -0
- package/lib/domain/WidgetOptions.d.ts.map +1 -0
- package/lib/domain/WidgetOptions.js +30 -0
- package/lib/domain/WidgetOptions.js.map +1 -0
- package/lib/domain/WidgetResponse.d.ts +5 -0
- package/lib/domain/WidgetResponse.d.ts.map +1 -0
- package/lib/{interfaces/WidgetOptions.js → domain/WidgetResponse.js} +1 -1
- package/lib/domain/WidgetResponse.js.map +1 -0
- package/lib/domain/WidgetSamplerLog.d.ts +12 -0
- package/lib/domain/WidgetSamplerLog.d.ts.map +1 -0
- package/lib/domain/WidgetSamplerLog.js.map +1 -0
- package/lib/{interfaces → domain}/index.d.ts +1 -2
- package/lib/domain/index.d.ts.map +1 -0
- package/lib/{interfaces → domain}/index.js.map +1 -1
- package/lib/hooks/index.d.ts +2 -2
- package/lib/hooks/index.d.ts.map +1 -1
- package/lib/hooks/index.js +5 -5
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useClientVersionCollector.d.ts +3 -0
- package/lib/hooks/useClientVersionCollector.d.ts.map +1 -0
- package/lib/{services/ClientVersionCollector.js → hooks/useClientVersionCollector.js} +7 -2
- package/lib/hooks/useClientVersionCollector.js.map +1 -0
- package/lib/hooks/useHeightAnimation.d.ts +0 -1
- package/lib/hooks/useHeightAnimation.d.ts.map +1 -1
- package/lib/hooks/useHeightAnimation.js +4 -2
- package/lib/hooks/useHeightAnimation.js.map +1 -1
- package/lib/hooks/useWidget.d.ts +13 -0
- package/lib/hooks/useWidget.d.ts.map +1 -0
- package/lib/hooks/useWidget.js +44 -0
- package/lib/hooks/useWidget.js.map +1 -0
- package/lib/hooks/useWidgetBootstrap.d.ts +21 -0
- package/lib/hooks/useWidgetBootstrap.d.ts.map +1 -0
- package/lib/hooks/useWidgetBootstrap.js +87 -0
- package/lib/hooks/useWidgetBootstrap.js.map +1 -0
- package/lib/hooks/useWidgetServices.d.ts +19 -0
- package/lib/hooks/useWidgetServices.d.ts.map +1 -0
- package/lib/hooks/useWidgetServices.js +34 -0
- package/lib/hooks/useWidgetServices.js.map +1 -0
- package/lib/hooks/useWidgetUI.d.ts +9 -0
- package/lib/hooks/useWidgetUI.d.ts.map +1 -0
- package/lib/hooks/useWidgetUI.js +33 -0
- package/lib/hooks/useWidgetUI.js.map +1 -0
- package/lib/index.d.ts +10 -11
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +13 -38
- package/lib/index.js.map +1 -1
- package/lib/services/UserIdentificationService.d.ts +3 -0
- package/lib/services/UserIdentificationService.d.ts.map +1 -0
- package/lib/services/UserIdentificationService.js +17 -0
- package/lib/services/UserIdentificationService.js.map +1 -0
- package/lib/services/WidgetBootstrapService.d.ts +12 -0
- package/lib/services/WidgetBootstrapService.d.ts.map +1 -0
- package/lib/services/{widgetBootstrapService.js → WidgetBootstrapService.js} +36 -15
- package/lib/services/WidgetBootstrapService.js.map +1 -0
- package/lib/services/WidgetEventService.d.ts +8 -0
- package/lib/services/WidgetEventService.d.ts.map +1 -0
- package/lib/services/WidgetEventService.js +14 -0
- package/lib/services/WidgetEventService.js.map +1 -0
- package/lib/services/WidgetStateManager.d.ts +20 -0
- package/lib/services/WidgetStateManager.d.ts.map +1 -0
- package/lib/services/WidgetStateManager.js +93 -0
- package/lib/services/WidgetStateManager.js.map +1 -0
- package/lib/services/WidgetValidationService.d.ts +17 -0
- package/lib/services/WidgetValidationService.d.ts.map +1 -0
- package/lib/services/WidgetValidationService.js +132 -0
- package/lib/services/WidgetValidationService.js.map +1 -0
- package/lib/services/events/EventHandlerFactory.d.ts +18 -0
- package/lib/services/events/EventHandlerFactory.d.ts.map +1 -0
- package/lib/services/events/EventHandlerFactory.js +67 -0
- package/lib/services/events/EventHandlerFactory.js.map +1 -0
- package/lib/services/events/EventHandlers.d.ts +10 -0
- package/lib/services/events/EventHandlers.d.ts.map +1 -0
- package/lib/services/events/EventHandlers.js +72 -0
- package/lib/services/events/EventHandlers.js.map +1 -0
- package/lib/services/events/index.d.ts +3 -0
- package/lib/services/events/index.d.ts.map +1 -0
- package/lib/services/events/index.js +21 -0
- package/lib/services/events/index.js.map +1 -0
- package/lib/services/height/HeightStrategies.d.ts +3 -0
- package/lib/services/height/HeightStrategies.d.ts.map +1 -0
- package/lib/services/height/HeightStrategies.js +14 -0
- package/lib/services/height/HeightStrategies.js.map +1 -0
- package/lib/services/storage/AsyncStorageService.d.ts +13 -0
- package/lib/services/storage/AsyncStorageService.d.ts.map +1 -0
- package/lib/services/storage/AsyncStorageService.js +73 -0
- package/lib/services/storage/AsyncStorageService.js.map +1 -0
- package/lib/services/storage/IStorageService.d.ts +30 -0
- package/lib/services/storage/IStorageService.d.ts.map +1 -0
- package/lib/services/storage/IStorageService.js +3 -0
- package/lib/services/storage/IStorageService.js.map +1 -0
- package/lib/services/storage/StorageIdBuilder.d.ts +11 -0
- package/lib/services/storage/StorageIdBuilder.d.ts.map +1 -0
- package/lib/services/storage/StorageIdBuilder.js +17 -0
- package/lib/services/storage/StorageIdBuilder.js.map +1 -0
- package/lib/services/storage/index.d.ts +3 -0
- package/lib/services/storage/index.d.ts.map +1 -0
- package/lib/services/storage/index.js +6 -0
- package/lib/services/storage/index.js.map +1 -0
- package/lib/styles/widgetStyles.d.ts +1 -1
- package/lib/styles/widgetStyles.d.ts.map +1 -1
- package/package.json +8 -2
- package/src/SoluCXWidget.ts +144 -0
- package/src/SoluCXWidgetHost.tsx +44 -0
- package/src/SoluCXWidgetView.tsx +97 -0
- package/src/__tests__/ClientVersionCollector.test.ts +5 -5
- package/src/__tests__/OverlayWidget.rendering.test.tsx +12 -14
- package/src/__tests__/SoluCXWidget.rendering.test.tsx +103 -60
- package/src/__tests__/SoluCXWidget.test.ts +448 -0
- package/src/__tests__/WidgetValidationService.test.ts +408 -0
- package/src/__tests__/e2e/widget-lifecycle.test.tsx +14 -23
- package/src/__tests__/index.test.tsx +39 -0
- package/src/__tests__/integration/webview-communication-simple.test.tsx +8 -6
- package/src/__tests__/integration/webview-communication.test.tsx +127 -130
- package/src/__tests__/normalizeWidgetOptions.test.ts +80 -0
- package/src/__tests__/useWidgetBootstrap.test.ts +634 -0
- package/src/__tests__/useWidgetState.test.ts +56 -13
- package/src/__tests__/widgetBootstrapService.test.ts +15 -17
- package/src/components/CloseButton.tsx +6 -2
- package/src/components/InlineWidget.tsx +4 -9
- package/src/components/ModalWidget.tsx +15 -45
- package/src/components/OverlayWidget.tsx +5 -15
- package/src/components/index.ts +4 -0
- package/src/constants/Constants.ts +15 -0
- package/src/{interfaces → domain}/WidgetCallbacks.ts +2 -2
- package/{lib/interfaces/WidgetData.d.ts → src/domain/WidgetData.ts} +3 -2
- package/src/domain/WidgetDisplayResult.ts +16 -0
- package/src/domain/WidgetOptions.ts +53 -0
- package/src/domain/WidgetResponse.ts +5 -0
- package/src/domain/WidgetSamplerLog.ts +11 -0
- package/src/{interfaces → domain}/index.ts +1 -2
- package/src/hooks/index.ts +2 -2
- package/src/{services/ClientVersionCollector.ts → hooks/useClientVersionCollector.ts} +6 -0
- package/src/hooks/useHeightAnimation.ts +6 -3
- package/src/hooks/useWidget.ts +46 -0
- package/src/hooks/useWidgetBootstrap.ts +117 -0
- package/src/hooks/useWidgetServices.ts +44 -0
- package/src/hooks/useWidgetUI.ts +38 -0
- package/src/index.ts +16 -11
- package/src/services/UserIdentificationService.ts +14 -0
- package/src/services/{widgetBootstrapService.ts → WidgetBootstrapService.ts} +43 -19
- package/src/services/WidgetEventService.ts +15 -0
- package/src/services/WidgetStateManager.ts +115 -0
- package/src/services/WidgetValidationService.ts +149 -0
- package/src/services/events/EventHandlerFactory.ts +70 -0
- package/src/services/events/EventHandlers.ts +67 -0
- package/src/services/events/index.ts +2 -0
- package/src/services/height/HeightStrategies.ts +15 -0
- package/src/services/storage/AsyncStorageService.ts +74 -0
- package/src/services/storage/IStorageService.ts +32 -0
- package/src/services/storage/StorageIdBuilder.ts +15 -0
- package/src/services/storage/index.ts +2 -0
- package/src/styles/widgetStyles.ts +1 -1
- package/README.intern.md +0 -490
- package/lib/constants/webViewConstants.d.ts +0 -12
- package/lib/constants/webViewConstants.d.ts.map +0 -1
- package/lib/constants/webViewConstants.js +0 -19
- package/lib/constants/webViewConstants.js.map +0 -1
- package/lib/hooks/useWidgetHeight.d.ts +0 -13
- package/lib/hooks/useWidgetHeight.d.ts.map +0 -1
- package/lib/hooks/useWidgetHeight.js +0 -21
- package/lib/hooks/useWidgetHeight.js.map +0 -1
- package/lib/hooks/useWidgetState.d.ts +0 -15
- package/lib/hooks/useWidgetState.d.ts.map +0 -1
- package/lib/hooks/useWidgetState.js +0 -79
- package/lib/hooks/useWidgetState.js.map +0 -1
- package/lib/interfaces/WidgetCallbacks.d.ts.map +0 -1
- package/lib/interfaces/WidgetCallbacks.js.map +0 -1
- package/lib/interfaces/WidgetData.d.ts.map +0 -1
- package/lib/interfaces/WidgetOptions.d.ts +0 -9
- package/lib/interfaces/WidgetOptions.d.ts.map +0 -1
- package/lib/interfaces/WidgetOptions.js.map +0 -1
- package/lib/interfaces/WidgetResponse.d.ts +0 -10
- package/lib/interfaces/WidgetResponse.d.ts.map +0 -1
- package/lib/interfaces/WidgetResponse.js +0 -12
- package/lib/interfaces/WidgetResponse.js.map +0 -1
- package/lib/interfaces/WidgetSamplerLog.d.ts +0 -7
- package/lib/interfaces/WidgetSamplerLog.d.ts.map +0 -1
- package/lib/interfaces/WidgetSamplerLog.js.map +0 -1
- package/lib/interfaces/index.d.ts.map +0 -1
- package/lib/services/ClientVersionCollector.d.ts +0 -2
- package/lib/services/ClientVersionCollector.d.ts.map +0 -1
- package/lib/services/ClientVersionCollector.js.map +0 -1
- package/lib/services/storage.d.ts +0 -8
- package/lib/services/storage.d.ts.map +0 -1
- package/lib/services/storage.js +0 -23
- package/lib/services/storage.js.map +0 -1
- package/lib/services/widgetBootstrapService.d.ts +0 -6
- package/lib/services/widgetBootstrapService.d.ts.map +0 -1
- package/lib/services/widgetBootstrapService.js.map +0 -1
- package/lib/services/widgetEventService.d.ts +0 -19
- package/lib/services/widgetEventService.d.ts.map +0 -1
- package/lib/services/widgetEventService.js +0 -79
- package/lib/services/widgetEventService.js.map +0 -1
- package/lib/services/widgetValidationService.d.ts +0 -18
- package/lib/services/widgetValidationService.d.ts.map +0 -1
- package/lib/services/widgetValidationService.js +0 -71
- package/lib/services/widgetValidationService.js.map +0 -1
- package/src/SoluCXWidget.tsx +0 -178
- package/src/constants/webViewConstants.ts +0 -15
- package/src/hooks/useWidgetHeight.ts +0 -38
- package/src/hooks/useWidgetState.ts +0 -101
- package/src/interfaces/WidgetOptions.ts +0 -8
- package/src/interfaces/WidgetResponse.ts +0 -15
- package/src/interfaces/WidgetSamplerLog.ts +0 -6
- package/src/services/storage.ts +0 -21
- package/src/services/widgetEventService.ts +0 -110
- package/src/services/widgetValidationService.ts +0 -102
- /package/lib/{interfaces → domain}/WidgetCallbacks.js +0 -0
- /package/lib/{interfaces → domain}/WidgetData.js +0 -0
- /package/lib/{interfaces → domain}/WidgetSamplerLog.js +0 -0
- /package/lib/{interfaces → domain}/index.js +0 -0
package/README.intern.md
DELETED
|
@@ -1,490 +0,0 @@
|
|
|
1
|
-
# SoluCX Widget
|
|
2
|
-
|
|
3
|
-
Um widget React Native modular para coleta de feedback e pesquisas, desenvolvido seguindo princípios de Clean Code e arquitetura escalável.
|
|
4
|
-
|
|
5
|
-
## 📋 Visão Geral
|
|
6
|
-
|
|
7
|
-
O SoluCX Widget oferece quatro modos de renderização flexíveis para integração em aplicações React Native/Expo:
|
|
8
|
-
|
|
9
|
-
- **Top**: Widget fixo no topo da tela
|
|
10
|
-
- **Bottom**: Widget fixo na parte inferior
|
|
11
|
-
- **Modal**: Widget em sobreposição centralizada
|
|
12
|
-
- **Inline**: Widget integrado ao fluxo do layout
|
|
13
|
-
|
|
14
|
-
## 🏗️ Arquitetura
|
|
15
|
-
|
|
16
|
-
### Componentes Principais
|
|
17
|
-
|
|
18
|
-
- [`SoluCXWidget.tsx`](src/SoluCXWidget.tsx) - Componente principal
|
|
19
|
-
- [`useWidgetState.ts`](src/hooks/useWidgetState.ts) - Hook para gerenciamento de estado
|
|
20
|
-
- [`useWidgetHeight.ts`](src/hooks/useWidgetHeight.ts) - Hook para gerenciamento de altura (dinâmica/fixa)
|
|
21
|
-
- [`WidgetEventService`](src/services/widgetEventService.ts) - Serviço de eventos
|
|
22
|
-
- [`StorageService`](src/services/storage.ts) - Persistência local
|
|
23
|
-
|
|
24
|
-
### Estrutura de Arquivos
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
src/
|
|
28
|
-
├── SoluCXWidget.tsx # Componente principal
|
|
29
|
-
├── components/ # Componentes especializados
|
|
30
|
-
│ ├── ModalWidget.tsx # Widget modal
|
|
31
|
-
│ ├── InlineWidget.tsx # Widget inline
|
|
32
|
-
│ └── OverlayWidget.tsx # Widget overlay (top/bottom)
|
|
33
|
-
├── hooks/ # Hooks personalizados
|
|
34
|
-
│ ├── useWidgetState.ts # Estado do widget
|
|
35
|
-
│ ├── useWidgetHeight.ts # Gerenciamento de altura (dinâmica/fixa)
|
|
36
|
-
│ └── useHeightAnimation.ts # Animação de altura
|
|
37
|
-
├── services/ # Serviços
|
|
38
|
-
│ ├── widgetEventService.ts # Gerenciamento de eventos
|
|
39
|
-
│ └── storage.ts # Persistência de dados
|
|
40
|
-
├── interfaces/ # Tipos TypeScript
|
|
41
|
-
│ ├── index.ts # Exports centralizados
|
|
42
|
-
│ ├── WidgetData.ts # Dados do widget
|
|
43
|
-
│ ├── WidgetOptions.ts # Opções de configuração
|
|
44
|
-
│ ├── WidgetResponse.ts # Respostas e erros
|
|
45
|
-
│ └── WidgetSamplerLog.ts # Log de tentativas
|
|
46
|
-
├── styles/ # Estilos
|
|
47
|
-
│ └── widgetStyles.ts # Estilos por tipo
|
|
48
|
-
├── utils/ # Utilitários
|
|
49
|
-
│ └── urlUtils.ts # Construção de URLs
|
|
50
|
-
├── constants/ # Constantes
|
|
51
|
-
│ └── webViewConstants.ts # URLs e configurações
|
|
52
|
-
└── __tests__/ # Testes
|
|
53
|
-
├── urlUtils.test.ts
|
|
54
|
-
└── useWidgetState.test.ts
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## 🚀 Instalação e Uso
|
|
58
|
-
|
|
59
|
-
### Instalação
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
# Como dependência local (monorepo)
|
|
63
|
-
npm install solucx_widget@file:./modules/solucx_widget
|
|
64
|
-
|
|
65
|
-
# Dependências peer necessárias
|
|
66
|
-
npm install react-native-webview @react-native-async-storage/async-storage
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### Uso Básico
|
|
70
|
-
|
|
71
|
-
```tsx
|
|
72
|
-
import React from 'react';
|
|
73
|
-
import { SoluCXWidget } from 'solucx_widget';
|
|
74
|
-
|
|
75
|
-
export default function MyComponent() {
|
|
76
|
-
return (
|
|
77
|
-
<SoluCXWidget
|
|
78
|
-
soluCXKey='sua-chave-solucx'
|
|
79
|
-
type='bottom' // 'top' | 'bottom' | 'modal' | 'inline'
|
|
80
|
-
data={{
|
|
81
|
-
journey: 'nome_da_jornada',
|
|
82
|
-
name: 'Nome do Cliente',
|
|
83
|
-
email: 'cliente@email.com',
|
|
84
|
-
phone: '11999999999',
|
|
85
|
-
store_id: '1',
|
|
86
|
-
employee_id: '1',
|
|
87
|
-
amount: 100,
|
|
88
|
-
param_REGIAO: 'SUDESTE'
|
|
89
|
-
}}
|
|
90
|
-
options={{
|
|
91
|
-
height: 400
|
|
92
|
-
}}
|
|
93
|
-
/>
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## 🎛️ API do Componente
|
|
99
|
-
|
|
100
|
-
### Props do SoluCXWidget
|
|
101
|
-
|
|
102
|
-
```typescript
|
|
103
|
-
interface SoluCXWidgetProps {
|
|
104
|
-
soluCXKey: string; // Chave de autenticação SoluCX
|
|
105
|
-
type: WidgetType; // Modo de renderização
|
|
106
|
-
data: WidgetData; // Dados do cliente/transação
|
|
107
|
-
options: WidgetOptions; // Configurações do widget
|
|
108
|
-
}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### Tipos de Widget
|
|
112
|
-
|
|
113
|
-
```typescript
|
|
114
|
-
type WidgetType = 'bottom' | 'top' | 'inline' | 'modal';
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### Dados do Widget
|
|
118
|
-
|
|
119
|
-
```typescript
|
|
120
|
-
interface WidgetData {
|
|
121
|
-
// Identificadores
|
|
122
|
-
transaction_id?: string;
|
|
123
|
-
customer_id?: string;
|
|
124
|
-
|
|
125
|
-
// Dados do cliente
|
|
126
|
-
name?: string;
|
|
127
|
-
email?: string;
|
|
128
|
-
phone?: string;
|
|
129
|
-
birth_date?: string;
|
|
130
|
-
document?: string;
|
|
131
|
-
|
|
132
|
-
// Dados da transação
|
|
133
|
-
store_id?: string;
|
|
134
|
-
store_name?: string;
|
|
135
|
-
employee_id?: string;
|
|
136
|
-
employee_name?: string;
|
|
137
|
-
amount?: number;
|
|
138
|
-
score?: number;
|
|
139
|
-
|
|
140
|
-
// Parâmetros customizados
|
|
141
|
-
journey?: string;
|
|
142
|
-
[key: string]: string | number | undefined;
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### Opções de Configuração
|
|
147
|
-
|
|
148
|
-
```typescript
|
|
149
|
-
interface WidgetOptions {
|
|
150
|
-
height?: number; // Altura fixa em pontos (não pixels)
|
|
151
|
-
// Se não fornecido: altura dinâmica baseada em eventos de resize
|
|
152
|
-
// Se fornecido: altura fixa para todos os tipos de widget
|
|
153
|
-
retry?: {
|
|
154
|
-
// Configuração de retry
|
|
155
|
-
attempts?: number; // Número de tentativas
|
|
156
|
-
interval?: number; // Intervalo entre tentativas (ms)
|
|
157
|
-
};
|
|
158
|
-
waitDelayAfterRating?: number; // Delay após avaliação (ms)
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
**⚙️ Gerenciamento de Altura:**
|
|
163
|
-
|
|
164
|
-
O widget possui dois modos de altura:
|
|
165
|
-
|
|
166
|
-
1. **Altura Dinâmica (padrão)**: Quando `height` não é fornecido, o widget se ajusta automaticamente através de eventos `FORM_RESIZE` do conteúdo. Funciona para todos os tipos (`bottom`, `top`, `inline`, `modal`).
|
|
167
|
-
|
|
168
|
-
2. **Altura Fixa**: Quando `height` é especificado, o valor é fixo e eventos de resize são ignorados. Funciona para todos os tipos de widget.
|
|
169
|
-
|
|
170
|
-
```tsx
|
|
171
|
-
// Altura dinâmica - se adapta ao conteúdo
|
|
172
|
-
<SoluCXWidget
|
|
173
|
-
type="bottom"
|
|
174
|
-
options={{}} // height não especificado
|
|
175
|
-
{...props}
|
|
176
|
-
/>
|
|
177
|
-
|
|
178
|
-
// Altura fixa de 400 pontos
|
|
179
|
-
<SoluCXWidget
|
|
180
|
-
type="modal"
|
|
181
|
-
options={{ height: 400 }} // altura fixa
|
|
182
|
-
{...props}
|
|
183
|
-
/>
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
**⚠️ Importante**: O valor de `height` é sempre em **pontos** (points), não pixels, seguindo o padrão do React e React Native. O sistema operacional converte automaticamente para pixels considerando a densidade da tela do dispositivo.
|
|
187
|
-
|
|
188
|
-
## 🔄 Sistema de Eventos
|
|
189
|
-
|
|
190
|
-
O widget comunica através de mensagens WebView bidirecionais:
|
|
191
|
-
|
|
192
|
-
### Eventos Suportados
|
|
193
|
-
|
|
194
|
-
```typescript
|
|
195
|
-
type EventKey =
|
|
196
|
-
| 'FORM_OPENED' // Widget foi aberto
|
|
197
|
-
| 'FORM_CLOSE' // Usuário fechou o widget
|
|
198
|
-
| 'FORM_ERROR' // Erro no carregamento
|
|
199
|
-
| 'FORM_RESIZE' // Widget redimensionado
|
|
200
|
-
| 'FORM_PAGECHANGED' // Mudança de página
|
|
201
|
-
| 'QUESTION_ANSWERED' // Pergunta respondida
|
|
202
|
-
| 'FORM_COMPLETED' // Formulário concluído
|
|
203
|
-
| 'FORM_PARTIALCOMPLETED'; // Completado parcialmente
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
### Tratamento de Eventos
|
|
207
|
-
|
|
208
|
-
Os eventos são processados automaticamente pelo [`WidgetEventService`](src/services/widgetEventService.ts):
|
|
209
|
-
|
|
210
|
-
```typescript
|
|
211
|
-
const eventService = new WidgetEventService(
|
|
212
|
-
setIsWidgetVisible, // Função para controlar visibilidade
|
|
213
|
-
resize, // Função para redimensionar
|
|
214
|
-
open // Função para abrir widget
|
|
215
|
-
);
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
## 💾 Persistência de Dados
|
|
219
|
-
|
|
220
|
-
O widget utiliza [`AsyncStorage`](@react-native-async-storage/async-storage) para persistir:
|
|
221
|
-
|
|
222
|
-
- **Histórico de tentativas**: Controla quantas vezes o widget foi exibido
|
|
223
|
-
- **Última avaliação**: Data da última interação
|
|
224
|
-
- **Controle de frequência**: Evita spam de widgets
|
|
225
|
-
|
|
226
|
-
### Estrutura dos Dados
|
|
227
|
-
|
|
228
|
-
```typescript
|
|
229
|
-
interface WidgetSamplerLog {
|
|
230
|
-
attempts: number; // Número de tentativas
|
|
231
|
-
lastAttempt: number; // Timestamp da última tentativa
|
|
232
|
-
lastRating: number; // Timestamp da última avaliação
|
|
233
|
-
lastParcial: number; // Timestamp do último parcial
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## 🎨 Customização de Estilos
|
|
238
|
-
|
|
239
|
-
### Estilos por Tipo
|
|
240
|
-
|
|
241
|
-
Cada tipo de widget possui estilos específicos definidos em [`widgetStyles.ts`](src/styles/widgetStyles.ts):
|
|
242
|
-
|
|
243
|
-
```typescript
|
|
244
|
-
export const getWidgetStyles = (type: WidgetType) => {
|
|
245
|
-
const styleMap = {
|
|
246
|
-
bottom: { container: styles.wrapper, content: styles.bottom },
|
|
247
|
-
top: { container: styles.wrapper, content: styles.top },
|
|
248
|
-
inline: { container: styles.inlineWrapper, content: styles.inline },
|
|
249
|
-
modal: { container: styles.wrapper, content: styles.inline }
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
return styleMap[type] || styleMap.bottom;
|
|
253
|
-
};
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### Características Visuais
|
|
257
|
-
|
|
258
|
-
- **Bottom/Top**: Position absolute com z-index elevado
|
|
259
|
-
- **Modal**: Overlay com background semitransparente
|
|
260
|
-
- **Inline**: Integrado ao fluxo normal do layout
|
|
261
|
-
|
|
262
|
-
## 🧪 Testes
|
|
263
|
-
|
|
264
|
-
### Executando Testes
|
|
265
|
-
|
|
266
|
-
```bash
|
|
267
|
-
# Todos os testes
|
|
268
|
-
npm test
|
|
269
|
-
|
|
270
|
-
# Teste específico
|
|
271
|
-
npm test -- urlUtils.test.ts
|
|
272
|
-
npm test -- useWidgetState.test.ts
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Cobertura de Testes
|
|
276
|
-
|
|
277
|
-
- ✅ Construção de URLs
|
|
278
|
-
- ✅ Gerenciamento de eventos
|
|
279
|
-
- ✅ Estados do widget
|
|
280
|
-
- ✅ Persistência de dados
|
|
281
|
-
|
|
282
|
-
## ⚙️ Configuração
|
|
283
|
-
|
|
284
|
-
### Constantes
|
|
285
|
-
|
|
286
|
-
Configurações centralizadas em [`webViewConstants.ts`](src/constants/webViewConstants.ts):
|
|
287
|
-
|
|
288
|
-
```typescript
|
|
289
|
-
export const BASE_URL = 'https://survey-link.solucx.com.br/link';
|
|
290
|
-
export const STORAGE_KEY = '@solucxWidgetLog';
|
|
291
|
-
export const MIN_HEIGHT = 200;
|
|
292
|
-
export const FIXED_Z_INDEX = 9999;
|
|
293
|
-
export const MODAL_Z_INDEX = 10000;
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
### JavaScript Injection
|
|
297
|
-
|
|
298
|
-
Listener para comunicação WebView:
|
|
299
|
-
|
|
300
|
-
```typescript
|
|
301
|
-
export const WEB_VIEW_MESSAGE_LISTENER = `
|
|
302
|
-
window.addEventListener('message', function(event) {
|
|
303
|
-
window.ReactNativeWebView.postMessage(event.data);
|
|
304
|
-
});
|
|
305
|
-
`;
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
## 🚨 Considerações Importantes
|
|
309
|
-
|
|
310
|
-
### 1. **Comportamento de Posicionamento**
|
|
311
|
-
|
|
312
|
-
⚠️ **Ponto Crítico**: A posição no JSX **não determina** onde widgets `top`, `bottom` e `modal` aparecem:
|
|
313
|
-
|
|
314
|
-
```tsx
|
|
315
|
-
// ❌ Isso NÃO faz o widget aparecer no meio
|
|
316
|
-
<Text>Conteúdo antes</Text>
|
|
317
|
-
<SoluCXWidget type="bottom" {...props} /> {/* Sempre aparece embaixo */}
|
|
318
|
-
<Text>Conteúdo depois</Text>
|
|
319
|
-
|
|
320
|
-
// ✅ Apenas o tipo "inline" respeita a posição no código
|
|
321
|
-
<Text>Conteúdo antes</Text>
|
|
322
|
-
<SoluCXWidget type="inline" {...props} /> {/* Aparece aqui */}
|
|
323
|
-
<Text>Conteúdo depois</Text>
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
### 2. **Performance**
|
|
327
|
-
|
|
328
|
-
- Widget usa WebView interna (overhead de performance)
|
|
329
|
-
- Carregamento lazy das pesquisas
|
|
330
|
-
- Cache automático via AsyncStorage
|
|
331
|
-
- JavaScript injection para comunicação
|
|
332
|
-
|
|
333
|
-
### 3. **Segurança**
|
|
334
|
-
|
|
335
|
-
- **Chaves API**: Nunca hardcode em produção
|
|
336
|
-
- **Dados sensíveis**: Não são logados automaticamente
|
|
337
|
-
- **URLs**: Validadas antes do carregamento
|
|
338
|
-
- **HTTPS**: Obrigatório para comunicação
|
|
339
|
-
|
|
340
|
-
### 4. **Limitações Técnicas**
|
|
341
|
-
|
|
342
|
-
- Requer conexão com internet
|
|
343
|
-
- Dependente do WebView do sistema
|
|
344
|
-
- Eventos assíncronos (não bloqueantes)
|
|
345
|
-
- Storage limitado do dispositivo
|
|
346
|
-
|
|
347
|
-
## 📝 Desenvolvimento
|
|
348
|
-
|
|
349
|
-
### Adicionando Novos Tipos
|
|
350
|
-
|
|
351
|
-
1. **Estenda o tipo WidgetType**:
|
|
352
|
-
|
|
353
|
-
```typescript
|
|
354
|
-
// modules/solucx_widget/src/interfaces/index.ts
|
|
355
|
-
export type WidgetType = 'bottom' | 'top' | 'inline' | 'modal' | 'novo_tipo';
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
2. **Adicione estilos correspondentes**:
|
|
359
|
-
|
|
360
|
-
```typescript
|
|
361
|
-
// modules/solucx_widget/src/styles/widgetStyles.ts
|
|
362
|
-
const styleMap = {
|
|
363
|
-
// ... estilos existentes
|
|
364
|
-
novo_tipo: { container: styles.novoWrapper, content: styles.novoContent }
|
|
365
|
-
};
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
3. **Implemente lógica no componente principal**:
|
|
369
|
-
|
|
370
|
-
```typescript
|
|
371
|
-
// modules/solucx_widget/src/SoluCXWidget.tsx
|
|
372
|
-
if (type === 'novo_tipo') {
|
|
373
|
-
return <NovoTipoWidget>{/* ... */}</NovoTipoWidget>;
|
|
374
|
-
}
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
### Adicionando Novos Eventos
|
|
378
|
-
|
|
379
|
-
1. **Estenda EventKey**:
|
|
380
|
-
|
|
381
|
-
```typescript
|
|
382
|
-
// modules/solucx_widget/src/interfaces/index.ts
|
|
383
|
-
export type EventKey = 'FORM_OPENED' | 'NOVO_EVENTO'; // Novo evento
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
2. **Implemente handler**:
|
|
387
|
-
|
|
388
|
-
```typescript
|
|
389
|
-
// modules/solucx_widget/src/services/widgetEventService.ts
|
|
390
|
-
private executeEvent(eventKey: EventKey, value: string): WidgetResponse {
|
|
391
|
-
const eventHandlers = {
|
|
392
|
-
// ... handlers existentes
|
|
393
|
-
NOVO_EVENTO: (value: string) => this.handleNovoEvento(value),
|
|
394
|
-
};
|
|
395
|
-
}
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
3. **Adicione testes**:
|
|
399
|
-
|
|
400
|
-
```typescript
|
|
401
|
-
// modules/solucx_widget/src/__tests__/widgetEventService.test.ts
|
|
402
|
-
it('should handle NOVO_EVENTO correctly', () => {
|
|
403
|
-
const result = service.handleMessage('NOVO_EVENTO-data', true);
|
|
404
|
-
expect(result).toEqual({ status: 'success' });
|
|
405
|
-
});
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
## 🔍 Troubleshooting
|
|
409
|
-
|
|
410
|
-
### Problemas Comuns
|
|
411
|
-
|
|
412
|
-
#### 1. **Widget não aparece**
|
|
413
|
-
|
|
414
|
-
```bash
|
|
415
|
-
# Verificações:
|
|
416
|
-
✅ Chave SoluCX válida?
|
|
417
|
-
✅ Conectividade com internet?
|
|
418
|
-
✅ Logs do WebView no console?
|
|
419
|
-
✅ Evento FORM_OPENED sendo disparado?
|
|
420
|
-
```
|
|
421
|
-
|
|
422
|
-
#### 2. **Eventos não funcionam**
|
|
423
|
-
|
|
424
|
-
```bash
|
|
425
|
-
# Verificações:
|
|
426
|
-
✅ JavaScript listener injetado?
|
|
427
|
-
✅ Formato das mensagens correto?
|
|
428
|
-
✅ WebView carregou completamente?
|
|
429
|
-
✅ postMessage funcionando?
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
#### 3. **Layout quebrado**
|
|
433
|
-
|
|
434
|
-
```bash
|
|
435
|
-
# Verificações:
|
|
436
|
-
✅ Dimensões adequadas para o dispositivo?
|
|
437
|
-
✅ Estilos corretos para o tipo?
|
|
438
|
-
✅ Z-index conflitando?
|
|
439
|
-
✅ SafeArea configurada?
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
#### 4. **Storage não persiste**
|
|
443
|
-
|
|
444
|
-
```bash
|
|
445
|
-
# Verificações:
|
|
446
|
-
✅ AsyncStorage instalado?
|
|
447
|
-
✅ Permissões de storage?
|
|
448
|
-
✅ Dados sendo serializados corretamente?
|
|
449
|
-
✅ Chaves de storage únicas?
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
### Debug Avançado
|
|
453
|
-
|
|
454
|
-
```typescript
|
|
455
|
-
// Habilitar logs detalhados
|
|
456
|
-
console.log('Widget event received:', processedKey, value);
|
|
457
|
-
|
|
458
|
-
// Verificar dados persistidos
|
|
459
|
-
const data = await storageService.read();
|
|
460
|
-
console.log('Stored data:', data);
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
## 📚 Dependências
|
|
464
|
-
|
|
465
|
-
### Peer Dependencies
|
|
466
|
-
|
|
467
|
-
```json
|
|
468
|
-
{
|
|
469
|
-
"react-native-webview": "^13.0.0",
|
|
470
|
-
"@react-native-async-storage/async-storage": "^2.0.0",
|
|
471
|
-
"react": "^19.0.0",
|
|
472
|
-
"react-native": "^0.79.0"
|
|
473
|
-
}
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
### Compatibilidade
|
|
477
|
-
|
|
478
|
-
- **React Native**: 0.70+
|
|
479
|
-
- **Expo**: 50+
|
|
480
|
-
- **iOS**: 11+
|
|
481
|
-
- **Android**: API 21+
|
|
482
|
-
- **Web**: Suporte limitado (WebView)
|
|
483
|
-
|
|
484
|
-
## 📄 Licença
|
|
485
|
-
|
|
486
|
-
Este projeto é privado e proprietário da SoluCX.
|
|
487
|
-
|
|
488
|
-
---
|
|
489
|
-
|
|
490
|
-
**Desenvolvido com ❤️ pela equipe SoluCX**
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export declare const BASE_URL = "https://survey-link.solucx.com.br/link";
|
|
2
|
-
export declare const RATING_FORM_ENDPOINT = "https://widget-api.solucx.com.br/widget/preflight";
|
|
3
|
-
export declare const STORAGE_KEY = "@solucxWidgetLog";
|
|
4
|
-
export declare const DEFAULT_CHANNEL_NUMBER = 1;
|
|
5
|
-
export declare const DEFAULT_CHANNEL = "widget";
|
|
6
|
-
export declare const DEFAULT_WIDTH = 380;
|
|
7
|
-
export declare const MIN_HEIGHT = 200;
|
|
8
|
-
export declare const FIXED_Z_INDEX = 9999;
|
|
9
|
-
export declare const MODAL_Z_INDEX = 10000;
|
|
10
|
-
export declare const DESIGN_HEIGHT = 700;
|
|
11
|
-
export declare const WEB_VIEW_MESSAGE_LISTENER = "\n window.addEventListener('message', function(event) {\n window.ReactNativeWebView.postMessage(event.data);\n });\n";
|
|
12
|
-
//# sourceMappingURL=webViewConstants.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webViewConstants.d.ts","sourceRoot":"","sources":["../../src/constants/webViewConstants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,2CAA2C,CAAC;AACjE,eAAO,MAAM,oBAAoB,sDAAsD,CAAC;AACxF,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,eAAe,WAAW,CAAC;AACxC,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,yBAAyB,8HAIrC,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WEB_VIEW_MESSAGE_LISTENER = exports.DESIGN_HEIGHT = exports.MODAL_Z_INDEX = exports.FIXED_Z_INDEX = exports.MIN_HEIGHT = exports.DEFAULT_WIDTH = exports.DEFAULT_CHANNEL = exports.DEFAULT_CHANNEL_NUMBER = exports.STORAGE_KEY = exports.RATING_FORM_ENDPOINT = exports.BASE_URL = void 0;
|
|
4
|
-
exports.BASE_URL = 'https://survey-link.solucx.com.br/link';
|
|
5
|
-
exports.RATING_FORM_ENDPOINT = 'https://widget-api.solucx.com.br/widget/preflight';
|
|
6
|
-
exports.STORAGE_KEY = '@solucxWidgetLog';
|
|
7
|
-
exports.DEFAULT_CHANNEL_NUMBER = 1;
|
|
8
|
-
exports.DEFAULT_CHANNEL = 'widget';
|
|
9
|
-
exports.DEFAULT_WIDTH = 380;
|
|
10
|
-
exports.MIN_HEIGHT = 200;
|
|
11
|
-
exports.FIXED_Z_INDEX = 9999;
|
|
12
|
-
exports.MODAL_Z_INDEX = 10000;
|
|
13
|
-
exports.DESIGN_HEIGHT = 700;
|
|
14
|
-
exports.WEB_VIEW_MESSAGE_LISTENER = `
|
|
15
|
-
window.addEventListener('message', function(event) {
|
|
16
|
-
window.ReactNativeWebView.postMessage(event.data);
|
|
17
|
-
});
|
|
18
|
-
`;
|
|
19
|
-
//# sourceMappingURL=webViewConstants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webViewConstants.js","sourceRoot":"","sources":["../../src/constants/webViewConstants.ts"],"names":[],"mappings":";;;AAAa,QAAA,QAAQ,GAAG,wCAAwC,CAAC;AACpD,QAAA,oBAAoB,GAAG,mDAAmD,CAAC;AAC3E,QAAA,WAAW,GAAG,kBAAkB,CAAC;AACjC,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAC3B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,aAAa,GAAG,GAAG,CAAC;AACpB,QAAA,UAAU,GAAG,GAAG,CAAC;AACjB,QAAA,aAAa,GAAG,IAAI,CAAC;AACrB,QAAA,aAAa,GAAG,KAAK,CAAC;AACtB,QAAA,aAAa,GAAG,GAAG,CAAC;AACpB,QAAA,yBAAyB,GAAG;;;;CAIxC,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { WidgetOptions } from '../interfaces';
|
|
2
|
-
interface UseWidgetHeightProps {
|
|
3
|
-
options?: WidgetOptions;
|
|
4
|
-
initialHeight?: number;
|
|
5
|
-
}
|
|
6
|
-
interface UseWidgetHeightReturn {
|
|
7
|
-
height: number;
|
|
8
|
-
isFixedHeight: boolean;
|
|
9
|
-
handleResize: (newHeight: number) => void;
|
|
10
|
-
}
|
|
11
|
-
export declare const useWidgetHeight: ({ options, initialHeight }: UseWidgetHeightProps) => UseWidgetHeightReturn;
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=useWidgetHeight.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useWidgetHeight.d.ts","sourceRoot":"","sources":["../../src/hooks/useWidgetHeight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,qBAAqB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,eAAe,GAAI,4BAG7B,oBAAoB,KAAG,qBAoBzB,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useWidgetHeight = void 0;
|
|
4
|
-
const react_1 = require("react");
|
|
5
|
-
const useWidgetHeight = ({ options, initialHeight = 300 }) => {
|
|
6
|
-
const [dynamicHeight, setDynamicHeight] = (0, react_1.useState)(initialHeight);
|
|
7
|
-
const hasFixedHeight = typeof options?.height === 'number';
|
|
8
|
-
const height = hasFixedHeight ? options.height : dynamicHeight;
|
|
9
|
-
const handleResize = (0, react_1.useCallback)((newHeight) => {
|
|
10
|
-
if (!hasFixedHeight && newHeight > 0) {
|
|
11
|
-
setDynamicHeight(newHeight);
|
|
12
|
-
}
|
|
13
|
-
}, [hasFixedHeight]);
|
|
14
|
-
return {
|
|
15
|
-
height,
|
|
16
|
-
isFixedHeight: hasFixedHeight,
|
|
17
|
-
handleResize
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
exports.useWidgetHeight = useWidgetHeight;
|
|
21
|
-
//# sourceMappingURL=useWidgetHeight.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useWidgetHeight.js","sourceRoot":"","sources":["../../src/hooks/useWidgetHeight.ts"],"names":[],"mappings":";;;AAAA,iCAA8C;AAcvC,MAAM,eAAe,GAAG,CAAC,EAC9B,OAAO,EACP,aAAa,GAAG,GAAG,EACE,EAAyB,EAAE;IAChD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAS,aAAa,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC;IAE3D,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAO,CAAC,CAAC,CAAC,aAAa,CAAC;IAEjE,MAAM,YAAY,GAAG,IAAA,mBAAW,EAC9B,CAAC,SAAiB,EAAE,EAAE;QACpB,IAAI,CAAC,cAAc,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACrC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,OAAO;QACL,MAAM;QACN,aAAa,EAAE,cAAc;QAC7B,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,eAAe,mBAuB1B"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { WidgetData, WidgetOptions, WidgetType, WidgetSamplerLog } from '../interfaces';
|
|
2
|
-
export declare const useWidgetState: (data: WidgetData, options?: WidgetOptions, type?: WidgetType) => {
|
|
3
|
-
savedData: WidgetSamplerLog | null;
|
|
4
|
-
widgetHeight: number;
|
|
5
|
-
isWidgetVisible: boolean;
|
|
6
|
-
setIsWidgetVisible: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
7
|
-
loadSavedData: () => Promise<void>;
|
|
8
|
-
saveData: (data: WidgetSamplerLog) => Promise<void>;
|
|
9
|
-
open: () => Promise<void>;
|
|
10
|
-
close: () => void;
|
|
11
|
-
resize: (value: string) => void;
|
|
12
|
-
userId: string;
|
|
13
|
-
screenHeight: number;
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=useWidgetState.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useWidgetState.d.ts","sourceRoot":"","sources":["../../src/hooks/useWidgetState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAYvB,eAAO,MAAM,cAAc,GACzB,MAAM,UAAU,EAChB,UAAU,aAAa,EACvB,OAAO,UAAU;;;;;;qBAwBF,gBAAgB;;;oBA6BrB,MAAM;;;CAyBjB,CAAC"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useWidgetState = void 0;
|
|
4
|
-
const react_1 = require("react");
|
|
5
|
-
const react_native_1 = require("react-native");
|
|
6
|
-
const storage_1 = require("../services/storage");
|
|
7
|
-
function getUserId(widgetData) {
|
|
8
|
-
return (widgetData?.customer_id ??
|
|
9
|
-
widgetData?.document ??
|
|
10
|
-
widgetData?.email ??
|
|
11
|
-
'default_user');
|
|
12
|
-
}
|
|
13
|
-
const useWidgetState = (data, options, type) => {
|
|
14
|
-
const [savedData, setSavedData] = (0, react_1.useState)(null);
|
|
15
|
-
const [isWidgetVisible, setIsWidgetVisible] = (0, react_1.useState)(false);
|
|
16
|
-
const userId = getUserId(data);
|
|
17
|
-
const storageService = (0, react_1.useMemo)(() => new storage_1.StorageService(userId), [userId]);
|
|
18
|
-
const screenHeight = react_native_1.Dimensions.get('screen').height;
|
|
19
|
-
const height = options?.height ? Number(options.height) : undefined;
|
|
20
|
-
const [widgetHeight, setWidgetHeight] = (0, react_1.useState)(height ?? 300);
|
|
21
|
-
const loadSavedData = (0, react_1.useCallback)(async () => {
|
|
22
|
-
try {
|
|
23
|
-
const jsonValue = await storageService.read();
|
|
24
|
-
setSavedData(jsonValue);
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
console.error('Error loading storage data:', error);
|
|
28
|
-
}
|
|
29
|
-
}, [storageService]);
|
|
30
|
-
const saveData = (0, react_1.useCallback)(async (data) => {
|
|
31
|
-
try {
|
|
32
|
-
await storageService.write(data);
|
|
33
|
-
setSavedData(data);
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
console.error('Error saving storage data:', error);
|
|
37
|
-
}
|
|
38
|
-
}, [storageService]);
|
|
39
|
-
const open = (0, react_1.useCallback)(async () => {
|
|
40
|
-
const userLogs = await storageService.read();
|
|
41
|
-
userLogs.attempts = (userLogs.attempts || 0) + 1;
|
|
42
|
-
userLogs.lastAttempt = Date.now();
|
|
43
|
-
try {
|
|
44
|
-
await storageService.write(userLogs);
|
|
45
|
-
setSavedData(userLogs);
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
console.error('Error saving storage data:', error);
|
|
49
|
-
}
|
|
50
|
-
setIsWidgetVisible(true);
|
|
51
|
-
}, [storageService]);
|
|
52
|
-
const close = (0, react_1.useCallback)(() => {
|
|
53
|
-
setIsWidgetVisible(false);
|
|
54
|
-
}, []);
|
|
55
|
-
const resize = (0, react_1.useCallback)((value) => {
|
|
56
|
-
const receivedHeight = Number(value);
|
|
57
|
-
if (height !== undefined) {
|
|
58
|
-
setWidgetHeight(height);
|
|
59
|
-
}
|
|
60
|
-
else if (receivedHeight > 0) {
|
|
61
|
-
setWidgetHeight(receivedHeight);
|
|
62
|
-
}
|
|
63
|
-
}, [height]);
|
|
64
|
-
return {
|
|
65
|
-
savedData,
|
|
66
|
-
widgetHeight,
|
|
67
|
-
isWidgetVisible,
|
|
68
|
-
setIsWidgetVisible,
|
|
69
|
-
loadSavedData,
|
|
70
|
-
saveData,
|
|
71
|
-
open,
|
|
72
|
-
close,
|
|
73
|
-
resize,
|
|
74
|
-
userId,
|
|
75
|
-
screenHeight
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
exports.useWidgetState = useWidgetState;
|
|
79
|
-
//# sourceMappingURL=useWidgetState.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useWidgetState.js","sourceRoot":"","sources":["../../src/hooks/useWidgetState.ts"],"names":[],"mappings":";;;AAAA,iCAAuD;AACvD,+CAA0C;AAO1C,iDAAqD;AAErD,SAAS,SAAS,CAAC,UAAsB;IACvC,OAAO,CACL,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,KAAK;QACjB,cAAc,CACf,CAAC;AACJ,CAAC;AAEM,MAAM,cAAc,GAAG,CAC5B,IAAgB,EAChB,OAAuB,EACvB,IAAiB,EACjB,EAAE;IACF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAA0B,IAAI,CAAC,CAAC;IAC1E,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAU,KAAK,CAAC,CAAC;IAEvE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,cAAc,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAI,wBAAc,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3E,MAAM,YAAY,GAAG,yBAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAS,MAAM,IAAI,GAAG,CAAC,CAAC;IAExE,MAAM,aAAa,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;YAC9C,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,KAAK,EAAE,IAAsB,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,IAAI,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QAClC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC7C,QAAQ,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC7B,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,CAAC,KAAa,EAAE,EAAE;QAChB,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAErC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,eAAe,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YAC9B,eAAe,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO;QACL,SAAS;QACT,YAAY;QACZ,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,QAAQ;QACR,IAAI;QACJ,KAAK;QACL,MAAM;QACN,MAAM;QACN,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAjFW,QAAA,cAAc,kBAiFzB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetCallbacks.d.ts","sourceRoot":"","sources":["../../src/interfaces/WidgetCallbacks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,MAAM,WAAW,eAAe;IAC5B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetCallbacks.js","sourceRoot":"","sources":["../../src/interfaces/WidgetCallbacks.ts"],"names":[],"mappings":""}
|