This commit adds a new navigation section for the 'Concepteur Développeur d'Applications' certification. The section includes links to various activity types and their respective competency points.
242 lines
6.6 KiB
TypeScript
242 lines
6.6 KiB
TypeScript
const navigationsTypes = {
|
|
GLOBAL: "👋 Général",
|
|
CERTIFICATIONS: "🎓 Certifications",
|
|
DOCUMENTATIONS: "📚 Documentations",
|
|
OTHER: "🔗 Autres",
|
|
};
|
|
|
|
export type NavigationSection = {
|
|
title: string;
|
|
type: (typeof navigationsTypes)[keyof typeof navigationsTypes];
|
|
position: "start" | "end" | "auto";
|
|
links: NavigationLink[];
|
|
};
|
|
|
|
export type NavigationOG = Partial<{
|
|
image: string;
|
|
}>;
|
|
|
|
export type NavigationLink = {
|
|
title: string;
|
|
href: string;
|
|
og?: NavigationOG;
|
|
subitems: NavigationSubItem[];
|
|
};
|
|
|
|
export type NavigationSubItem = {
|
|
title: string;
|
|
href: string;
|
|
};
|
|
|
|
export const navigation: NavigationSection[] = [
|
|
{
|
|
title: "Préambule",
|
|
type: navigationsTypes.GLOBAL,
|
|
position: "start",
|
|
links: [
|
|
{ title: "Memento Dev", href: "/", subitems: [] },
|
|
{ title: "Certifications", href: "/certifications", subitems: [] },
|
|
{ title: "Documentations", href: "/docs", subitems: [] },
|
|
],
|
|
},
|
|
{
|
|
title: "Communauté",
|
|
type: navigationsTypes.GLOBAL,
|
|
position: "start",
|
|
links: [
|
|
{
|
|
title: "Influenceurs",
|
|
href: "/communaute/influenceurs",
|
|
subitems: [],
|
|
},
|
|
{
|
|
title: "Partages et réutilisations",
|
|
href: "/communaute/partages",
|
|
subitems: [],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: "Légal",
|
|
type: navigationsTypes.OTHER,
|
|
position: "end",
|
|
links: [
|
|
{ title: "Mentions légales", href: "/mentions-legales", subitems: [] },
|
|
{
|
|
title: "Politique de confidentialité",
|
|
href: "/politique-de-confidentialite",
|
|
subitems: [],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: "Concepteur Développeur d'Applications",
|
|
type: navigationsTypes.CERTIFICATIONS,
|
|
position: "auto",
|
|
links: [
|
|
{ title: "Résumé du titre", href: "/certifications/cda", subitems: [] },
|
|
{
|
|
title: "Activité Type 1",
|
|
href: "/certifications/cda/at1",
|
|
subitems: [
|
|
{ title: "Résumé de l'AT", href: "/certifications/cda/at1" },
|
|
{ title: "CP 1", href: "/certifications/cda/at1/cp1" },
|
|
{ title: "CP 2", href: "/certifications/cda/at1/cp2" },
|
|
{ title: "CP 3", href: "/certifications/cda/at1/cp3" },
|
|
{ title: "CP 4", href: "/certifications/cda/at1/cp4" },
|
|
],
|
|
},
|
|
{
|
|
title: "Activité Type 2",
|
|
href: "/certifications/cda/at2",
|
|
subitems: [
|
|
{ title: "Résumé de l'AT", href: "/certifications/cda/at2" },
|
|
{ title: "CP 5", href: "/certifications/cda/at2/cp5" },
|
|
{ title: "CP 6", href: "/certifications/cda/at2/cp6" },
|
|
{ title: "CP 7", href: "/certifications/cda/at2/cp7" },
|
|
{ title: "CP 8", href: "/certifications/cda/at2/cp8" },
|
|
],
|
|
},
|
|
{
|
|
title: "Activité Type 3",
|
|
href: "/certifications/cda/at3",
|
|
subitems: [
|
|
{ title: "Résumé de l'AT", href: "/certifications/cda/at3" },
|
|
{ title: "CP 9", href: "/certifications/cda/at3/cp9" },
|
|
{ title: "CP 10", href: "/certifications/cda/at3/cp10" },
|
|
{ title: "CP 11", href: "/certifications/cda/at3/cp11" },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: "Développeur Web et Web Mobile",
|
|
type: navigationsTypes.CERTIFICATIONS,
|
|
position: "auto",
|
|
links: [
|
|
{ title: "Résumé du titre", href: "/certifications/dwwm", subitems: [] },
|
|
{
|
|
title: "Activité Type 1",
|
|
href: "/certifications/dwwm/at1",
|
|
subitems: [
|
|
{ title: "Résumé de l'AT", href: "/certifications/dwwm/at1" },
|
|
{ title: "CP 1", href: "/certifications/dwwm/at1/cp1" },
|
|
{ title: "CP 2", href: "/certifications/dwwm/at1/cp2" },
|
|
{ title: "CP 3", href: "/certifications/dwwm/at1/cp3" },
|
|
{ title: "CP 4", href: "/certifications/dwwm/at1/cp4" },
|
|
],
|
|
},
|
|
{
|
|
title: "Activité Type 2",
|
|
href: "/certifications/dwwm/at2",
|
|
subitems: [
|
|
{ title: "Résumé de l'AT", href: "/certifications/dwwm/at2" },
|
|
{ title: "CP 5", href: "/certifications/dwwm/at2/cp5" },
|
|
{ title: "CP 6", href: "/certifications/dwwm/at2/cp6" },
|
|
{ title: "CP 7", href: "/certifications/dwwm/at2/cp7" },
|
|
{ title: "CP 8", href: "/certifications/dwwm/at2/cp8" },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: "Front-end",
|
|
type: navigationsTypes.DOCUMENTATIONS,
|
|
position: "auto",
|
|
links: [
|
|
{
|
|
title: "HTML",
|
|
href: "/docs/html",
|
|
subitems: [
|
|
{ title: "Introduction", href: "/docs/html" },
|
|
{ title: "Balise <head>", href: "/docs/html/balise-head" },
|
|
{ title: "Balises de base", href: "/docs/html/balises-de-base" },
|
|
{ title: "Attributs", href: "/docs/html/attributs" },
|
|
{ title: "Formulaires", href: "/docs/html/formulaires" },
|
|
],
|
|
},
|
|
{
|
|
title: "JavaScript",
|
|
href: "/docs/javascript",
|
|
subitems: [
|
|
{ title: "Introduction", href: "/docs/javascript" },
|
|
{ title: "Syntaxe", href: "/docs/javascript/syntaxe" },
|
|
{ title: "Instructions", href: "/docs/javascript/instructions" },
|
|
{ title: "Types de données", href: "/docs/javascript/types" },
|
|
{
|
|
title: "Fonctions et portée",
|
|
href: "/docs/javascript/fonctions-et-portee",
|
|
},
|
|
{
|
|
title: "Le DOM",
|
|
href: "/docs/javascript/dom",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: "React",
|
|
href: "/docs/react",
|
|
subitems: [
|
|
{ title: "Introduction", href: "/docs/react" },
|
|
{ title: "Initialisation", href: "/docs/react/initialisation" },
|
|
{ title: "Syntaxe JSX", href: "/docs/react/jsx" },
|
|
{ title: "Premier composant", href: "/docs/react/premier-composant" },
|
|
{
|
|
title: "State et cycle de vie",
|
|
href: "/docs/react/state-et-cycle-de-vie",
|
|
},
|
|
{ title: "Hooks", href: "/docs/react/hooks" },
|
|
{ title: "Le hook useContext", href: "/docs/react/use-context" },
|
|
{ title: "Le hook useReducer", href: "/docs/react/use-reducer" },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: "Base de données",
|
|
type: navigationsTypes.DOCUMENTATIONS,
|
|
position: "auto",
|
|
links: [
|
|
{
|
|
title: "Merise",
|
|
href: "/docs/merise",
|
|
og: { image: "/merise/og.webp" },
|
|
subitems: [
|
|
{ title: "Introduction", href: "/docs/merise" },
|
|
{
|
|
title: "Dictionnaire de données",
|
|
href: "/docs/merise/dictionnaire-de-donnees",
|
|
},
|
|
{ title: "Modèle Conceptuel de Données", href: "/docs/merise/mcd" },
|
|
{ title: "Modèle Logique de Données", href: "/docs/merise/mld" },
|
|
{ title: "Modèle Physique de Données", href: "/docs/merise/mpd" },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
export function doesLinkSubitemExist(
|
|
link: NavigationLink,
|
|
subitemHref: string,
|
|
): boolean {
|
|
return link.subitems.some((subitem) => subitem.href === subitemHref);
|
|
}
|
|
|
|
export function findNavigationLink(
|
|
namespace: string,
|
|
href?: string,
|
|
): NavigationLink | undefined {
|
|
const currentUrl = `/${namespace}/${href}`
|
|
.replace(/\/+/g, "/")
|
|
.replace(/\/$/, "");
|
|
|
|
const foundLink = navigation
|
|
.flatMap((section) => section.links)
|
|
.find((link) => {
|
|
return link.href === currentUrl || doesLinkSubitemExist(link, currentUrl);
|
|
});
|
|
|
|
return foundLink;
|
|
}
|