Skip to content

Commit 72616f7

Browse files
authored
Merge pull request #18 from Gabry848/features/onboarding
Features/onboarding
2 parents 815231f + 5dff0a0 commit 72616f7

31 files changed

Lines changed: 2149 additions & 1700 deletions

TUTORIAL_SYSTEM.md

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
# Tutorial System - MyTaskly
2+
3+
Sistema di tutorial interattivo per guidare gli utenti attraverso le funzionalità principali dell'app MyTaskly.
4+
5+
## Architettura
6+
7+
Il sistema di tutorial è basato su `react-native-walkthrough-tooltip` e utilizza un approccio context-based per la gestione dello stato globale.
8+
9+
### Componenti Principali
10+
11+
```
12+
src/components/Tutorial/
13+
├── InteractiveTutorial.tsx # Componente base per tooltip interattivi
14+
├── TutorialTooltip.tsx # Wrapper semplificato per applicare tooltip
15+
├── TutorialWelcomeScreen.tsx # Schermata di benvenuto iniziale
16+
├── index.tsx # TutorialManager (legacy - deprecato)
17+
└── exports.ts # Esportazioni centralizzate
18+
```
19+
20+
### Context & Hooks
21+
22+
```
23+
src/contexts/TutorialContext.tsx # Context provider per stato tutorial
24+
src/hooks/useInteractiveTutorial.ts # Hook per usare il tutorial context
25+
```
26+
27+
### Configurazione
28+
29+
```
30+
src/constants/tutorialContent.ts # Definizione degli step del tutorial
31+
src/locales/ # Traduzioni IT/EN
32+
```
33+
34+
## Come Funziona
35+
36+
### 1. Avvio Automatico
37+
38+
Al primo avvio dell'app, viene mostrata automaticamente la `TutorialWelcomeScreen` che offre due opzioni:
39+
- **Inizia il Tour**: Avvia il tutorial interattivo
40+
- **Salta il tour**: Chiude la schermata e salva la preferenza
41+
42+
### 2. Step del Tutorial
43+
44+
Gli step sono definiti in `tutorialContent.ts` e organizzati per schermata:
45+
46+
**Home Screen:**
47+
- `home-text-chat`: Input messaggio chat testuale
48+
- `home-voice-chat`: Pulsante microfono per chat vocale
49+
- `home-chat-history`: Pulsante cronologia conversazioni
50+
51+
**Categories Screen:**
52+
- `categories-general`: Vista categoria generale
53+
- `categories-new-task`: Pulsante creazione task da categoria
54+
- `categories-refresh`: Pulsante aggiorna/sincronizza
55+
56+
**Notes Screen** (da implementare):
57+
- `notes-create`: Creazione nuova nota
58+
- `notes-edit`: Modifica nota esistente
59+
- `notes-move`: Spostamento nota su whiteboard
60+
61+
**Calendar Screen** (da implementare):
62+
- `calendar-switch`: Switch tra vista base e avanzata
63+
64+
### 3. Tooltip Interattivi
65+
66+
Ogni elemento UI chiave è wrappato con `<TutorialTooltip stepKey="...">`:
67+
68+
```tsx
69+
<TutorialTooltip stepKey="home-text-chat">
70+
<View style={styles.inputContainer}>
71+
{/* ... elemento UI ... */}
72+
</View>
73+
</TutorialTooltip>
74+
```
75+
76+
Il tooltip mostra:
77+
- Titolo e descrizione dello step
78+
- Pulsanti navigazione (Avanti/Indietro)
79+
- Opzione "Salta tutorial"
80+
- Posizionamento automatico (top/bottom/left/right)
81+
82+
### 4. Persistenza
83+
84+
Lo stato di completamento del tutorial viene salvato in AsyncStorage:
85+
- Key: `@mytaskly:tutorial_completed`
86+
- Values: `"true"` (completato), `"skipped"` (saltato), `null` (non fatto)
87+
88+
## Utilizzo
89+
90+
### Integrare un Nuovo Step
91+
92+
1. **Aggiungi traduzione** in `src/locales/it.json` e `en.json`:
93+
```json
94+
"tutorial": {
95+
"steps": {
96+
"myScreen": {
97+
"myFeature": {
98+
"title": "Titolo Feature",
99+
"description": "Descrizione dettagliata"
100+
}
101+
}
102+
}
103+
}
104+
```
105+
106+
2. **Definisci lo step** in `src/constants/tutorialContent.ts`:
107+
```typescript
108+
{
109+
key: 'myScreen-myFeature',
110+
screen: 'MyScreen',
111+
title: content.myScreen.myFeature.title,
112+
description: content.myScreen.myFeature.description,
113+
placement: 'bottom',
114+
}
115+
```
116+
117+
3. **Wrappa l'elemento UI** nella schermata:
118+
```tsx
119+
import { TutorialTooltip } from '../../components/Tutorial/TutorialTooltip';
120+
121+
<TutorialTooltip stepKey="myScreen-myFeature">
122+
<TouchableOpacity>
123+
{/* ... */}
124+
</TouchableOpacity>
125+
</TutorialTooltip>
126+
```
127+
128+
### Riavviare il Tutorial
129+
130+
Gli utenti possono riavviare il tutorial da **Impostazioni > Rivedi Tutorial**. Questo:
131+
- Rimuove il flag di completamento
132+
- Imposta gli step del tutorial
133+
- Avvia il tutorial dall'inizio
134+
135+
## API Context
136+
137+
### TutorialContext
138+
139+
```typescript
140+
interface TutorialContextType {
141+
isTutorialVisible: boolean;
142+
shouldAutoStart: boolean;
143+
currentStepIndex: number;
144+
currentStep: TutorialStep | null;
145+
steps: TutorialStep[];
146+
startTutorial: () => void;
147+
closeTutorial: () => void;
148+
nextStep: () => void;
149+
previousStep: () => void;
150+
skipTutorial: () => void;
151+
setSteps: (steps: TutorialStep[]) => void;
152+
registerElementRef: (key: string, ref: any) => void;
153+
getElementRef: (key: string) => any;
154+
}
155+
```
156+
157+
### Uso del Context
158+
159+
```tsx
160+
import { useTutorialContext } from '../contexts/TutorialContext';
161+
162+
const {
163+
startTutorial,
164+
nextStep,
165+
currentStep
166+
} = useTutorialContext();
167+
```
168+
169+
## Personalizzazione Stili
170+
171+
Gli stili dei tooltip sono definiti in `InteractiveTutorial.tsx`:
172+
173+
```typescript
174+
const styles = StyleSheet.create({
175+
tooltipContent: { padding: 20, maxWidth: 300 },
176+
tooltipTitle: { fontSize: 18, fontWeight: 'bold' },
177+
tooltipDescription: { fontSize: 14, color: '#666' },
178+
primaryButton: { backgroundColor: '#007AFF' },
179+
// ...
180+
});
181+
```
182+
183+
## Migrazione dal Vecchio Sistema
184+
185+
Il vecchio sistema basato su `TutorialManager` è stato deprecato. Le differenze principali:
186+
187+
| Vecchio | Nuovo |
188+
|---------|-------|
189+
| `TutorialManager` component | `TutorialWelcomeScreen` + `TutorialTooltip` |
190+
| Navigation-based | Context-based |
191+
| Spotlight overlay | Native tooltips |
192+
| Sequenza fissa | Step modulari |
193+
| Pulsante "?" nella Home | Avvio automatico + Settings |
194+
195+
## Troubleshooting
196+
197+
### Il tutorial non si avvia
198+
- Verifica che `TutorialWelcomeScreen` sia montato in `navigation/index.tsx`
199+
- Controlla AsyncStorage per il flag `@mytaskly:tutorial_completed`
200+
- Verifica che gli step siano configurati correttamente
201+
202+
### I tooltip non appaiono
203+
- Verifica che `stepKey` corrisponda a uno step definito
204+
- Controlla che `isTutorialVisible` sia `true` nel context
205+
- Verifica il `currentStep.screen` corrisponda alla schermata corrente
206+
207+
### Errori TypeScript
208+
- Assicurati che `TutorialStep` sia importato da `InteractiveTutorial.tsx`
209+
- Non confondere `TutorialStep` (nuovo) con `OldTutorialStep` (legacy)
210+
211+
## Future Enhancements
212+
213+
- [ ] Completare integrazione Notes e Calendar
214+
- [ ] Aggiungere animazioni personalizzate
215+
- [ ] Tracking analytics completamento tutorial
216+
- [ ] Supporto per tooltip condizionali (es. solo se feature attiva)
217+
- [ ] Tutorial contestuali (es. dopo aver completato un'azione)

assets/tutorial/Chat_history.png

48 KB
Loading

assets/tutorial/Edit_category.png

77.5 KB
Loading

assets/tutorial/Edit_task.png

53.6 KB
Loading
70.2 KB
Loading

assets/tutorial/Text_chat.png

312 KB
Loading

assets/tutorial/Voice_chat.png

40.1 KB
Loading

0 commit comments

Comments
 (0)