feat: ajouter la section Compétences (6e bloc)
This commit is contained in:
1 parent
a0d312a884
commit
92aaafb4aa
13 files changed
+75
-47
No files matched your search
@@ -5,26 +5,28 @@
|
||||
- **Aucun serveur** : le « modèle de données » = structure de l'état applicatif + son image persistée dans **localStorage**.
|
||||
- **Une seule clé de stockage** versionnée : `cv-maker:v1`.
|
||||
- **Toutes les zones sont du Markdown brut** (chaînes de caractères). Le rendu HTML est calculé à la volée, jamais stocké.
|
||||
- Les expériences sont une **liste d'objets** (avec identifiant stable), contrairement aux 5 zones simples.
|
||||
- Les expériences sont une **liste d'objets** (avec identifiant stable), contrairement aux 6 zones simples.
|
||||
|
||||
## 2. Contracts TypeScript
|
||||
|
||||
`lib/types/cv.ts` :
|
||||
|
||||
```ts
|
||||
/** Identifiant des 5 zones de saisie éditées par onglets. */
|
||||
/** Identifiant des 6 zones de saisie éditées par onglets. */
|
||||
export type CVTabId =
|
||||
| "accroche"
|
||||
| "etatCivil"
|
||||
| "formations"
|
||||
| "competences"
|
||||
| "softSkills"
|
||||
| "centresInteret";
|
||||
|
||||
/** Ordre d'affichage des onglets (1 → 5). */
|
||||
/** Ordre d'affichage des onglets (1 → 6). */
|
||||
export const CV_TAB_ORDER: CVTabId[] = [
|
||||
"accroche",
|
||||
"etatCivil",
|
||||
"formations",
|
||||
"competences",
|
||||
"softSkills",
|
||||
"centresInteret",
|
||||
];
|
||||
@@ -32,7 +34,7 @@ export const CV_TAB_ORDER: CVTabId[] = [
|
||||
/** Métadonnées d'affichage d'un onglet. */
|
||||
export interface CVTabMeta {
|
||||
id: CVTabId;
|
||||
numero: 1 | 2 | 3 | 4 | 5; // numéro affiché sur l'onglet
|
||||
numero: 1 | 2 | 3 | 4 | 5 | 6; // numéro affiché sur l'onglet
|
||||
label: string; // libellé court de l'onglet
|
||||
}
|
||||
|
||||
@@ -40,8 +42,9 @@ export const CV_TABS: Record<CVTabId, CVTabMeta> = {
|
||||
accroche: { id: "accroche", numero: 1, label: "Accroche" },
|
||||
etatCivil: { id: "etatCivil", numero: 2, label: "État civil" },
|
||||
formations: { id: "formations", numero: 3, label: "Formations" },
|
||||
softSkills: { id: "softSkills", numero: 4, label: "Soft skills" },
|
||||
centresInteret: { id: "centresInteret", numero: 5, label: "Centres d'intérêt" },
|
||||
competences: { id: "competences", numero: 4, label: "Compétences" },
|
||||
softSkills: { id: "softSkills", numero: 5, label: "Soft skills" },
|
||||
centresInteret: { id: "centresInteret", numero: 6, label: "Centres d'intérêt" },
|
||||
};
|
||||
|
||||
/** Une expérience professionnelle. */
|
||||
@@ -59,8 +62,9 @@ export interface CVCareerData {
|
||||
accroche: string; // zone 1
|
||||
etatCivil: string; // zone 2
|
||||
formations: string; // zone 3
|
||||
softSkills: string; // zone 4
|
||||
centresInteret: string; // zone 5
|
||||
competences: string; // zone 4
|
||||
softSkills: string; // zone 5
|
||||
centresInteret: string; // zone 6
|
||||
experiences: Experience[]; // liste, ordre = ordre d'affichage dans le CV
|
||||
}
|
||||
|
||||
@@ -81,6 +85,7 @@ export function createDefaultCVData(): CVCareerData {
|
||||
accroche: "",
|
||||
etatCivil: "",
|
||||
formations: "",
|
||||
competences: "",
|
||||
softSkills: "",
|
||||
centresInteret: "",
|
||||
experiences: [],
|
||||
@@ -141,7 +146,7 @@ Regroupe toute la logique d'édition du CV, façade unique pour les composants :
|
||||
export interface UseCVDataReturn {
|
||||
data: CVCareerData;
|
||||
|
||||
setText(tab: CVTabId, value: string): void; // édition d'une zone 1..5
|
||||
setText(tab: CVTabId, value: string): void; // édition d'une zone 1..6
|
||||
addExperience(titre: string, contenu: string): void; // ajoute en fin de liste
|
||||
updateExperience(id: string, titre: string, contenu: string): void;
|
||||
removeExperience(id: string): void; // suppression + confirmation côté UI
|
||||
|
||||
Reference in new issue
Block a user