From 1c38213eff8219777199178cd5e5e5bdcdf5a311 Mon Sep 17 00:00:00 2001 From: Julien Bouquillon Date: Wed, 6 Mar 2024 15:56:36 +0100 Subject: [PATCH 01/16] fix: beautify stat tiles --- src/components/StatTile.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/StatTile.tsx b/src/components/StatTile.tsx index 481372c8..9d095b56 100644 --- a/src/components/StatTile.tsx +++ b/src/components/StatTile.tsx @@ -11,7 +11,12 @@ export const StatTile = (props: StatTileProps): JSX.Element => {
- {props.stats} + + {props.stats} +

{props.title}

{props.description && (
From 8555db8611cc99b8f68aba213a905c3fd36c097b Mon Sep 17 00:00:00 2001 From: Julien Bouquillon Date: Fri, 8 Mar 2024 22:02:37 +0100 Subject: [PATCH 02/16] wip --- .env.development | 4 +- .env.production | 8 +- .env.staging | 8 +- .github/workflows/debug-kube.yaml | 22 - .github/workflows/preproduction.yaml | 19 - .github/workflows/production.yaml | 16 - .github/workflows/review-auto.yaml | 16 - .github/workflows/review.yaml | 19 - .husky/pre-commit | 10 +- .talismanrc | 8 +- README.md | 88 +- package.json | 72 +- src/components/DeclarationAccessibilite.tsx | 4 +- src/components/StatTile.stories.tsx | 2 +- src/pages/404.tsx | 27 +- src/pages/_app.tsx | 25 +- src/pages/_document.tsx | 9 +- src/pages/index.tsx | 144 +- src/pages/mentions-legales.tsx | 16 +- src/pages/mui.tsx | 2 +- src/pages/politique-confidentialite.tsx | 87 +- yarn.lock | 3464 ++++++++++++------- 22 files changed, 2545 insertions(+), 1525 deletions(-) delete mode 100644 .github/workflows/debug-kube.yaml delete mode 100644 .github/workflows/preproduction.yaml delete mode 100644 .github/workflows/production.yaml delete mode 100644 .github/workflows/review-auto.yaml delete mode 100644 .github/workflows/review.yaml mode change 100755 => 100644 .husky/pre-commit diff --git a/.env.development b/.env.development index 006ab845..fe9f04d5 100644 --- a/.env.development +++ b/.env.development @@ -1,7 +1,7 @@ NEXT_TELEMETRY_DISABLED=1 NEXT_PUBLIC_SITE_URL="" -NEXT_PUBLIC_SENTRY_DSN="https://67a92c8c0f70486d9f36f2352eff1d19@sentry.fabrique.social.gouv.fr/68" +NEXT_PUBLIC_SENTRY_DSN="https://xxx/yy" NEXT_PUBLIC_SENTRY_ENV="dev" NEXT_PUBLIC_MATOMO_URL="" NEXT_PUBLIC_MATOMO_SITE_ID="" -NEXT_PUBLIC_APP_REPOSITORY_URL="https://github.com/SocialGouv/template" \ No newline at end of file +NEXT_PUBLIC_APP_REPOSITORY_URL="https://github.com/betagouv/template" \ No newline at end of file diff --git a/.env.production b/.env.production index f655a790..1e53dba1 100644 --- a/.env.production +++ b/.env.production @@ -1,7 +1,7 @@ NEXT_TELEMETRY_DISABLED=1 -NEXT_PUBLIC_SITE_URL="https://template.fabrique.social.gouv.fr/" -NEXT_PUBLIC_SENTRY_DSN="https://67a92c8c0f70486d9f36f2352eff1d19@sentry.fabrique.social.gouv.fr/68" +NEXT_PUBLIC_SITE_URL="https://template.beta.gouv.fr/" +NEXT_PUBLIC_SENTRY_DSN="https://xxx/yy" NEXT_PUBLIC_SENTRY_ENV="production" -NEXT_PUBLIC_MATOMO_URL="https://matomo.fabrique.social.gouv.fr" +NEXT_PUBLIC_MATOMO_URL="https:/stats.beta.gouv.fr" NEXT_PUBLIC_MATOMO_SITE_ID=63 -NEXT_PUBLIC_APP_REPOSITORY_URL="https://github.com/SocialGouv/template" \ No newline at end of file +NEXT_PUBLIC_APP_REPOSITORY_URL="https://github.com/betagouv/template" \ No newline at end of file diff --git a/.env.staging b/.env.staging index 5fefb033..a4c7242d 100644 --- a/.env.staging +++ b/.env.staging @@ -1,7 +1,7 @@ NEXT_TELEMETRY_DISABLED=1 -NEXT_PUBLIC_SITE_URL="https://template.fabrique.social.gouv.fr/" -NEXT_PUBLIC_SENTRY_DSN="https://67a92c8c0f70486d9f36f2352eff1d19@sentry.fabrique.social.gouv.fr/68" -NEXT_PUBLIC_SENTRY_ENV="development" +NEXT_PUBLIC_SITE_URL="https://template.incubateur.net/" +NEXT_PUBLIC_SENTRY_DSN="https://xxx/yy" +NEXT_PUBLIC_SENTRY_ENV="staging" NEXT_PUBLIC_MATOMO_URL="" NEXT_PUBLIC_MATOMO_SITE_ID="" -NEXT_PUBLIC_APP_REPOSITORY_URL="https://github.com/SocialGouv/template" \ No newline at end of file +NEXT_PUBLIC_APP_REPOSITORY_URL="https://github.com/betagouv/template" \ No newline at end of file diff --git a/.github/workflows/debug-kube.yaml b/.github/workflows/debug-kube.yaml deleted file mode 100644 index e1716539..00000000 --- a/.github/workflows/debug-kube.yaml +++ /dev/null @@ -1,22 +0,0 @@ -name: Debug kube - -on: - workflow_dispatch: - push: - branches: - - "feat/**" - - "fix/**" - - -jobs: - dump: - name: Debug kube - runs-on: ubuntu-latest - steps: - - uses: azure/setup-kubectl@v3 - - name: extract kubeconfig - run: | - echo -n "${{secrets.KUBECONFIG}}" | base64 --decode > kubeconfig - - name: list kube data - run: | - KUBECONFIG=./kubeconfig kubectl config get-contexts \ No newline at end of file diff --git a/.github/workflows/preproduction.yaml b/.github/workflows/preproduction.yaml deleted file mode 100644 index c0028bf1..00000000 --- a/.github/workflows/preproduction.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: 😎 PreProd -on: - workflow_dispatch: - push: - branches: - - "master" - - "main" - tags-ignore: - - v* - -concurrency: - cancel-in-progress: true - group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.ref }} - -jobs: - socialgouv: - name: "🇫🇷 SocialGouv" - uses: socialgouv/workflows/.github/workflows/use-ks-gh-preproduction.yaml@v1 - secrets: inherit diff --git a/.github/workflows/production.yaml b/.github/workflows/production.yaml deleted file mode 100644 index 3cae2d52..00000000 --- a/.github/workflows/production.yaml +++ /dev/null @@ -1,16 +0,0 @@ -name: 🚀 Production -on: - workflow_dispatch: - push: - tags: - - v* - -concurrency: - cancel-in-progress: true - group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.ref }} - -jobs: - socialgouv: - name: "🇫🇷 SocialGouv" - uses: socialgouv/workflows/.github/workflows/use-ks-gh-production.yaml@v1 - secrets: inherit diff --git a/.github/workflows/review-auto.yaml b/.github/workflows/review-auto.yaml deleted file mode 100644 index 548cf4e0..00000000 --- a/.github/workflows/review-auto.yaml +++ /dev/null @@ -1,16 +0,0 @@ -name: 👓 Review Auto -on: - push: - branches: - - "feat/**" - - "fix/**" - -concurrency: - cancel-in-progress: true - group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.ref }} - -jobs: - socialgouv: - name: "🇫🇷 SocialGouv" - uses: socialgouv/workflows/.github/workflows/use-ks-gh-review-auto.yaml@v1 - secrets: inherit diff --git a/.github/workflows/review.yaml b/.github/workflows/review.yaml deleted file mode 100644 index 2f78e3e0..00000000 --- a/.github/workflows/review.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: 👀 Review -on: - push: - branches: - - "**" - - "!master" - - "!main" - - "!feat/**" - - "!fix/**" - -concurrency: - cancel-in-progress: true - group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.ref }} - -jobs: - socialgouv: - name: "🇫🇷 SocialGouv" - uses: socialgouv/workflows/.github/workflows/use-ks-gh-review.yaml@v1 - secrets: inherit \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit old mode 100755 new mode 100644 index a62504ec..c8ff3a05 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,5 +1,5 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -yarn lint-staged -exec < /dev/tty; yarn node-talisman --githook pre-commit -i +if sh -c ': >/dev/tty' >/dev/null 2>/dev/null; then + exec ⚠️ Le [Système de Design de l'État](https://www.systeme-de-design.gouv.fr/) s'adresse **uniquement** aux développeurs et aux concepteurs, qu'ils soient agents publics ou prestataires pour des sites Internet de l'État (Ministères, Administrations centrales, Préfectures, Ambassades, etc.). cf [conditions d'utilisation](https://www.systeme-de-design.gouv.fr/utilisation-et-organisation/perimetre-d-application). @@ -31,13 +30,6 @@ Template minimal de la [Fabrique des ministères sociaux](https://www.fabrique.s - Healthz - Page 404 -#### En plus dans la branche `hasura` : - -- Page d'authentification -- Page d'inscription -- Page profil -- Interactions avec la base de données - ### D'un point de vue technique - [storybook](https://storybook.js.org/) permettant de réaliser des stories pour les composants @@ -53,12 +45,6 @@ Template minimal de la [Fabrique des ministères sociaux](https://www.fabrique.s - intégration de [sentry](https://sentry.io/) pour gérer les erreurs - intégration de [matomo](https://matomo.org/) pour les statistiques d'utilisation -#### En plus dans la branche `hasura` : - -- [keycloak](https://www.keycloak.org/) qui est un serveur d'authentification (exclusive à `main`) -- [next-auth](https://next-auth.js.org/) qui est un wrapper pour gérer l'authentification au sein de l'application (exclusive à `main`) -- [hasura](https://hasura.io) qui permet d'exposer une API GraphQL sur votre Postgres et de gérer les authorisations (RBAC) - ## Lancer le code Après avoir cloné le projet : @@ -82,72 +68,6 @@ Le fichier `.env.development` est utilisé pour l'environnement de développemen :warning: Les variables d'environnement sont publiques (utilisées durant le build), ne commitez donc pas de variables privées dans ces fichiers. -#### Variables d'env - -cf .env.development - -en production, les secrets sont chiffrés dans GIT avec sealed-secrets. - -### Branche `Hasura` - -Cette branche propose des composants backends de référence. - ---- - -```mermaid -graph LR -Browser{Browser}-->|JWT|Frontend[Frontend/API Next.js] -Browser-->KeyCloak -Frontend-->|JWT|Hasura -KeyCloak-->PG1[PostgreSQL] -KeyCloak-->|JWT|Browser -Hasura-->|RBAC|PG2[PostgreSQL] -KeyCloak-->FranceConnect -``` - ---- - -Lancer les serveurs Postgres, hasura et keycloak avec `docker-compose up`. - -##### Hasura - -Lancer les seeds : - -```sh -yarn hasura seed apply --file books.sql --project ./hasura --database-name default --endpoint http://127.0.0.1:8082 --admin-secret myadminsecretkey -``` - -Mettre à jour les metadatas et migrations : - -Lancer la console avec `yarn hasura console --project ./hasura --endpoint http://127.0.0.1:8082 --admin-secret myadminsecretkey`. Les modifs faites dans l'UI seront reportées dans les dossiers `hasura/metadata` et `hasura/migrations` - -Cf [migrations documentation](https://hasura.io/docs/latest/migrations-metadata-seeds/manage-migrations/) - -##### KeyCloak - -Le template intègre [Next-auth](https://next-auth.js.org/) et [KeyCloak 20](https://www.keycloak.org/) qui assure tous les workflows d'authentification. - -Le `realm` par défaut est dans [.kontinuous/files/realm-export.json](.kontinuous/files/realm-export.json). Pour générer realm utilisable par `docker-compose` à partir de celui-ci, utilisez `yarn keycloak`. - -Le thème keycloak est basé sur le design-système de l'état, cf [keycloak de sill-web](https://github.com/codegouvfr/sill-web/tree/main/src/keycloak-theme). - -##### FranceConnect - -Cf https://partenaires.franceconnect.gouv.fr/fcp/fournisseur-service - -Dans les URLs de callback définies [sur le compte FranceConnect](), utiliser `https://[votre-hostname]/realms/app-realm/broker/franceconnect-particulier/endpoint` et `https://[votre-hostname]/realms/app-realm/broker/franceconnect-particulier/endpoint/logout_response`. - -## Déploiement sur kubernetes - -Template utilise [kontinuous](https://github.com/socialgouv/kontinuous) pour définir et déployer ses ressources kubernetes. - -Lancer `npx kontinuous build --env dev -o` pour obtenir les manifests de votre environment (`dev`, `preprod` ou `prod`). - -La version dev est déployée sur OVH. - ## Liens -- : Version en production du projet -- : Storybook liés à la branche principale du projet -- : Thème keycloak-DSFR -- : Documentation technique SocialGouv +- : Version initiale du template diff --git a/package.json b/package.json index 6bb14ffd..6e002f55 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@socialgouv/template", + "name": "@betagouv/template", "version": "1.15.8", "private": true, "engines": { @@ -34,54 +34,54 @@ "build-storybook": "storybook build" }, "dependencies": { - "@codegouvfr/react-dsfr": "^0.76.0", - "@emotion/react": "^11.11.1", + "@codegouvfr/react-dsfr": "^1.9.1", + "@emotion/react": "^11.11.4", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.11.0", - "@mui/icons-material": "^5.14.1", - "@mui/material": "^5.14.1", - "@mui/x-data-grid": "^5.17.16", + "@mui/icons-material": "^5.15.12", + "@mui/material": "^5.15.12", + "@mui/x-data-grid": "^5.17.26", "@mui/x-date-pickers": "^5.0.11", - "@sentry/nextjs": "^7.60.0", - "@socialgouv/matomo-next": "^1.6.1", - "next": "13.5.6", + "@sentry/nextjs": "^7.106.0", + "@socialgouv/matomo-next": "^1.8.1", + "next": "14.1.3", "react": "18.2.0", "react-dom": "18.2.0", - "tss-react": "^4.8.8" + "tss-react": "^4.9.4" }, "devDependencies": { - "@babel/core": "^7.22.9", - "@storybook/addon-actions": "^7.6.8", - "@storybook/addon-docs": "^7.6.8", - "@storybook/addon-essentials": "^7.6.8", - "@storybook/addon-interactions": "^7.6.8", - "@storybook/addon-links": "^7.6.8", - "@storybook/addon-onboarding": "^1.0.10", - "@storybook/blocks": "^7.6.8", - "@storybook/nextjs": "^7.6.8", - "@storybook/test": "^7.6.8", + "@babel/core": "^7.24.0", + "@storybook/addon-actions": "^7.6.17", + "@storybook/addon-docs": "^7.6.17", + "@storybook/addon-essentials": "^7.6.17", + "@storybook/addon-interactions": "^7.6.17", + "@storybook/addon-links": "^7.6.17", + "@storybook/addon-onboarding": "^1.0.11", + "@storybook/blocks": "^7.6.17", + "@storybook/nextjs": "^7.6.17", + "@storybook/test": "^7.6.17", "@storybook/testing-library": "^0.2.2", - "@swc-node/register": "^1.6.6", - "@swc/core": "^1.3.70", + "@swc-node/register": "^1.9.0", + "@swc/core": "^1.4.6", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^12.1.2", - "@types/node": "18.19.3", - "@types/react": "18.2.45", - "@types/react-dom": "18.2.17", + "@types/node": "20.11.25", + "@types/react": "18.2.64", + "@types/react-dom": "18.2.21", "cypress": "^9.4.1", - "eslint": "8.55.0", - "eslint-config-next": "13.5.6", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-storybook": "^0.6.15", + "eslint": "8.57.0", + "eslint-config-next": "14.1.3", + "eslint-plugin-jsx-a11y": "^6.8.0", + "eslint-plugin-storybook": "^0.8.0", "gh-pages": "^5.0.0", - "husky": "^8.0.3", + "husky": "^9.0.11", "is-ci": "^3.0.1", - "jest": "^29.6.1", - "jest-environment-jsdom": "^29.6.1", - "lint-staged": "^13.2.3", - "node-talisman": "^1.29.10", - "start-server-and-test": "^1.14.0", - "storybook": "^7.6.8", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "lint-staged": "^15.2.2", + "node-talisman": "^1.29.11", + "start-server-and-test": "^2.0.3", + "storybook": "^7.6.17", "storybook-dark-mode": "^3.0.3", "typescript": "4.9.5" }, diff --git a/src/components/DeclarationAccessibilite.tsx b/src/components/DeclarationAccessibilite.tsx index c9e46cdc..bbbd196b 100644 --- a/src/components/DeclarationAccessibilite.tsx +++ b/src/components/DeclarationAccessibilite.tsx @@ -1,10 +1,10 @@ export const DeclarationAccessibilite = ({ produit = "[PRODUIT]", - organisme = "Fabrique numérique des ministères sociaux", + organisme = "[SPONSOR]", date = "9 décembre 2021", conformite = "non conforme", audited = false, - email = "contact@fabrique.social.gouv.fr", + email = "contact@xxx.fr", }) => { return (
diff --git a/src/components/StatTile.stories.tsx b/src/components/StatTile.stories.tsx index 1274a8ca..3e24546e 100644 --- a/src/components/StatTile.stories.tsx +++ b/src/components/StatTile.stories.tsx @@ -14,7 +14,7 @@ const Template: ComponentStory = (args) => ( export const Default = Template.bind({}); Default.args = { title: "Nombre de visites", - stats: "1.000.000", + stats: "100.000", }; export const WithDescription = Template.bind({}); diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 61321253..f9ac9299 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -10,8 +10,31 @@ const NotFound: NextPage = () => { }, []); return ( -
-

404 - Page non trouvée

+
+
+
+
+

+ Erreur 404 +

+

+ La page n'a pas été trouvée +

+

+ Impossible de trouver la ressource demandée. +
+ Ré-essayez en passant par la Page d'accueil. +

+
+
+ +
+
+
); }; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index daddf7a7..ec320bbf 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -50,12 +50,14 @@ const { withDsfr, dsfrDocumentApi } = createNextDsfrIntegrationApi({ ], }); -const { augmentDocumentWithEmotionCache, withAppEmotionCache } = +export { dsfrDocumentApi }; + +const { withAppEmotionCache, augmentDocumentWithEmotionCache } = createEmotionSsrAdvancedApproach({ key: "css", }); -export { dsfrDocumentApi, augmentDocumentWithEmotionCache }; +export { augmentDocumentWithEmotionCache }; const brandTop = ( <> @@ -68,7 +70,7 @@ const brandTop = ( const homeLinkPops = { href: "/", title: - "Accueil - Nom de l’entité (ministère, secrétariat d‘état, gouvernement)", + "Accueil - Nom de l’entité (ministère, secrétariat d'état, gouvernement)", }; const bottomLinks = [ @@ -84,6 +86,12 @@ const bottomLinks = [ href: "/stats", }, }, + { + text: "Budget", + linkProps: { + href: "/budget", + }, + }, { text: "Politique de confidentialité", linkProps: { @@ -112,7 +120,7 @@ const Layout = ({ children }: { children: ReactNode }) => { return ( - Template | Fabrique numérique des ministères sociaux + Template | beta.gouv.fr {contentSecurityPolicy && ( { > )} - +
+
diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 3c8df563..a914b0a9 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,10 +1,13 @@ import * as React from "react"; import Head from "next/head"; import { NextPage } from "next"; +import Stack from "@mui/material/Stack"; + import { push as matomoPush } from "@socialgouv/matomo-next"; +import { Accordion } from "@codegouvfr/react-dsfr/Accordion"; import { Alert } from "@codegouvfr/react-dsfr/Alert"; import { Button } from "@codegouvfr/react-dsfr/Button"; -import Stack from "@mui/material/Stack"; +import { fr } from "@codegouvfr/react-dsfr"; const Home: NextPage = () => { const onClick1 = () => { @@ -14,44 +17,113 @@ const Home: NextPage = () => { return ( <> - Template | Fabrique numérique des ministères sociaux + Template | beta.gouv.fr - -
-
-

- Template - -

Template de la fabrique des ministères sociaux.

-
-

-

- Pariatur veniam ipsum pariatur elit ullamco sit quis ipsum ad veniam - proident sunt. Qui ut irure in quis reprehenderit. Laborum anim ad - laboris ipsum magna ullamco consequat ex consectetur. Duis sit - adipisicing ipsum occaecat commodo consequat officia ea. Cupidatat - fugiat reprehenderit aliqua eiusmod mollit Lorem consectetur. Minim - elit proident eu qui exercitation mollit id esse velit et dolore - velit laboris. Ipsum occaecat Lorem occaecat magna excepteur veniam - ullamco cupidatat irure incididunt velit nulla. -

-
-
- {/* eslint-disable-next-line jsx-a11y/img-redundant-alt*/} - {/* eslint-disable-next-line @next/next/no-img-element*/} - My description + +
+
+

Template

+ Ce template minimal en Next.js met en oeuvre les pratiques + recommandées chez betagouv et peut vous faire gagner du temps. +
+
+ Il permet de déployer très rapidement une application web à l'état de + l'art, qui respecte{" "} + la conformité, l'accessibilité et la sécurité attendues et + intègre nos outils standards. +
+
+ Vous pouvez vous en servir comme base de départ ou comme référence + d'implémentation. Les contributions sont bienvenues. +
+
+ + Intègre la dernière version du kit{" "} + + @codegouvfr/react-dsfr + + . Compatible avec{" "} + + la librairie MUI + + .
+
+ Le template est fourni 100% accessible. +
+ + Intègre un tracker matomo avec le lien de désinscription + réglementaire dans la politique de confidentialité. + + + Intègre une sonde sentry pour être alerté des erreurs applicatives + et monitorer les performances de votre application. + + + Les CGU, mentions légales et politique de confidentialité sont + fournies pré-rédigées. + + + Modèle de page de statistiques, de budget et page "SOS" fournies. + + +
    +
  • Gestion des headers CSP
  • +
  • Image docker root-less
  • +
  • Pre-commit hooks anti fuite de secrets
  • +
+
+ +
    +
  • + Testing unitaire et de bout-en-bout intégré avec{" "} + + Cypress.io + +
  • +
  • + + Storybook + {" "} + pour tester/review les composants en isolation +
  • +
  • CI de lint, test et scan statique
  • +
+
+ +
    +
  • + Workflows de release automatisés ( + + semantic-release + + ) +
  • +
  • + Compatible scalingo, clever cloud avec des reviews-branches +
  • +
+
- + +

Example intégrations

+ diff --git a/src/pages/mentions-legales.tsx b/src/pages/mentions-legales.tsx index ffd9029c..f96dd824 100644 --- a/src/pages/mentions-legales.tsx +++ b/src/pages/mentions-legales.tsx @@ -19,13 +19,13 @@ const MentionsLegales: NextPage = () => {
- Tour Mirabeau
- 39-43 Quai André Citroën
- 75015 PARIS
- Téléphone: 01 40 56 60 00 + [XXX]
+ [XXX]
+ [XXX]
+ Téléphone: [XXX]
{ description="Ce site est hébergé par :" >

- Microsoft Azure
- 37 Quai du Président Roosevelt
- 92130 Issy-les-Moulineaux + [XXX]
+ [XXX]
+ [XXX]

{ }; return ( - + diff --git a/src/pages/politique-confidentialite.tsx b/src/pages/politique-confidentialite.tsx index 49365d13..075bf632 100644 --- a/src/pages/politique-confidentialite.tsx +++ b/src/pages/politique-confidentialite.tsx @@ -2,6 +2,7 @@ import React from "react"; import type { NextPage } from "next"; import Head from "next/head"; +import { Table } from "@codegouvfr/react-dsfr/Table"; import { Alert } from "@codegouvfr/react-dsfr/Alert"; const URL = [ @@ -42,22 +43,22 @@ const Confidentiality: NextPage = () => { éléments sont indispensables pour nous permettre de retrouver votre recherche - par voie électronique à l’adresse suivante :{" "} - template@fabrique.social.gouv.fr + contact@[produit].beta.gouv.fr
ou par voie postale :

- Direction des systèmes d’information + [XXX]
- Ministère des affaires sociales et de la santé + [XXX]
- 39-43 Quai André Citroën + [XXX]
- 75015 PARIS + [XXX]

Vous êtes également en droit de saisir la Commission Nationale de @@ -71,39 +72,10 @@ const Confidentiality: NextPage = () => { .

Hébergement

- {/* row.name} - data={[ - { - name: "Microsoft Azure", - country: "France", - treatment: "Hébergement", - urlName: "Déclaration de confidentialité Microsoft", - }, - ]} - columns={[ - { name: "name", label: "Partenaire" }, - { name: "country", label: "Pays destinataire" }, - { - name: "treatment", - label: "Traitement réalisé", - }, - { - name: "urlName", - label: "Garantie", - render: ({ urlName }: { urlName: string }) => ( - v.name === urlName)?.value} - > - {urlName} - - ), - }, - ]} - />*/} +

Cookies

Un cookie est un fichier déposé sur votre terminal lors de la visite @@ -115,30 +87,17 @@ const Confidentiality: NextPage = () => { Nous collectons donc des données par l’intermédiaire de dispositifs appelés “cookies” permettant d’établir des mesures statistiques.

- {/*
row.name} - data={[ - { - type: "Mesure d’audience anonymisée", - name: "Matomo", - months: "13 mois", - purpose: "Mesure d’audience", - editor: "Matomo & Fabrique numérique", - country: "France", - }, +
*/} + data={[["[XXX]", "[XXX]", "[XXX]", "[XXX]", "[XXX]"]]} + /> +

L’accès aux informations contenues dans les cookies est limité aux seules personnes autorisées au sein de la Fabrique numérique. En @@ -159,7 +118,7 @@ const Confidentiality: NextPage = () => {