diff --git a/website/public/api/v1/gaufre.js b/website/public/api/v1/gaufre.js index 003f36a..162e225 100644 --- a/website/public/api/v1/gaufre.js +++ b/website/public/api/v1/gaufre.js @@ -66,11 +66,10 @@ iframe.width = "304" iframe.height = "360" iframe.style.cssText = "display: none !important" - const { host, protocol } = new URL(scriptTag.src) - const searchParams = new URLSearchParams(scriptTag.src) - const anct = searchParams.get("type") === "anct" + const { host, protocol, searchParams } = new URL(scriptTag.src) + const local = searchParams.get("type") === "local" const lang = ["en"].includes(searchParams.get("lang")) ? searchParams.get("lang") : null - iframe.src = `${protocol}//${host}/api/v1/${(!!lang && `${lang}/`) || ""}gaufre${(!!anct && "?type=anct") || ""}` + iframe.src = `${protocol}//${host}/api/v1/${(!!lang && `${lang}/`) || ""}gaufre${(!!local && "/local") || ""}` document.body.appendChild(iframe) } diff --git a/website/src/components/GaufrePage.astro b/website/src/components/GaufrePage.astro new file mode 100644 index 0000000..67be06c --- /dev/null +++ b/website/src/components/GaufrePage.astro @@ -0,0 +1,224 @@ +--- +import { Image } from "astro:assets" +const logos = import.meta.glob<{ default: ImageMetadata }>("/src/assets/logos/*.{svg,png,jpg}") +const { services } = Astro.props +--- + + + + + + Services de La Suite numérique + + + +
+
+

Liste des services de La Suite numérique

+ +
+
+ + + diff --git a/website/src/content/docs/guides/gaufre.mdx b/website/src/content/docs/guides/gaufre.mdx index 917d432..16127a5 100644 --- a/website/src/content/docs/guides/gaufre.mdx +++ b/website/src/content/docs/guides/gaufre.mdx @@ -91,6 +91,10 @@ votre `` : lang="html" /> +Si vous voulez afficher la liste des services de La Suite territoriale, remplacez `src` par : + + + :::note Pour que le script fonctionne il est nécessaire qu'il ait un id `lasuite-gaufre-script`. Ne diff --git a/website/src/content/docs/reference/api.md b/website/src/content/docs/reference/api.md index 4fb2ba8..c90fadc 100644 --- a/website/src/content/docs/reference/api.md +++ b/website/src/content/docs/reference/api.md @@ -74,13 +74,17 @@ https://integration.lasuite.numerique.gouv.fr/api/v1/gaufre.js - Méthode : GET - Retourne : le JavaScript s'occupant d'afficher la popup listant les services de La Suite au clic sur le bouton [Gaufre](/guides/gaufre) +- Ajouter `?type=local` en paramètre pour afficher la liste des services de La Suite territoriale ## Liste des services de La Suite -`https://integration.lasuite.numerique.gouv.fr/api/v1/services.json` +``` +https://integration.lasuite.numerique.gouv.fr/api/v1/services.json +https://integration.lasuite.numerique.gouv.fr/api/v1/services-local.json +``` -Retourne un tableau JSON listant les services de La Suite numérique. Chaque service a cette -structure : +Retourne un tableau JSON listant les services de La Suite numérique ou de La Suite territoriale. +Chaque service a cette structure : - `id` l'identifiant du service, utilisé par d'autres APIs, - `name` le nom du service, diff --git a/website/src/data/services-anct.json b/website/src/data/services-anct.json new file mode 100644 index 0000000..8aa20b0 --- /dev/null +++ b/website/src/data/services-anct.json @@ -0,0 +1,29 @@ +[ + { + "id": "grist", + "name": "Tableur collaboratif", + "url": "https://grist.incubateur.net/", + "tagline": "**Grist**, une feuille de calcul simple,
flexible, moderne et open source
qui va au-delà de la grille.", + "homepageType": "proconnect", + "entity": "Gouvernement", + "enabled": true + }, + { + "id": "messagerie", + "name": "Messagerie", + "url": "https://webmail.numerique.gouv.fr/appsuite/", + "tagline": "**Messagerie** de l'État
le mail simple, centralisé et sécurisé", + "homepageType": "email", + "entity": "Gouvernement", + "enabled": true + }, + { + "id": "resana", + "name": "Stockage", + "url": "https://resana.numerique.gouv.fr/public/", + "tagline": "**Resana**
groupes de travail
et suite collaborative en ligne", + "homepageType": "email-or-proconnect", + "entity": "Gouvernement", + "enabled": true + } +] diff --git a/website/src/pages/api/v1/gaufre.astro b/website/src/pages/api/v1/gaufre.astro index 24d066e..41ac8ff 100644 --- a/website/src/pages/api/v1/gaufre.astro +++ b/website/src/pages/api/v1/gaufre.astro @@ -1,224 +1,6 @@ --- import services from "@/data/services.json" -import { Image } from "astro:assets" -const logos = import.meta.glob<{ default: ImageMetadata }>("/src/assets/logos/*.{svg,png,jpg}") +import GaufrePage from "@/components/GaufrePage.astro" --- - - - - - Services de La Suite numérique - - - -
-
-

Liste des services de La Suite numérique

-
    - { - services - .filter(({ enabled }) => !!enabled) - .map(({ id, name, url }, i) => { - const logo = - logos[`/src/assets/logos/${id}.svg`] || - logos[`/src/assets/logos/${id}.jpg`] || - logos[`/src/assets/logos/${id}.png`] - return ( -
  • - -
  • - ) - }) - } -
-
-
- - - + diff --git a/website/src/pages/api/v1/gaufre/anct.astro b/website/src/pages/api/v1/gaufre/anct.astro new file mode 100644 index 0000000..3fe011d --- /dev/null +++ b/website/src/pages/api/v1/gaufre/anct.astro @@ -0,0 +1,6 @@ +--- +import services from "@/data/services-local.json" +import GaufrePage from "@/components/GaufrePage.astro" +--- + + diff --git a/website/src/pages/api/v1/services-local.json.ts b/website/src/pages/api/v1/services-local.json.ts new file mode 100644 index 0000000..5507413 --- /dev/null +++ b/website/src/pages/api/v1/services-local.json.ts @@ -0,0 +1,18 @@ +import type { APIContext } from "astro" +import services from "@/data/services-local.json" + +export async function GET({ url }: APIContext) { + const response = new Response( + JSON.stringify( + services + .filter(({ enabled }) => !!enabled) + .map((service) => ({ + id: service.id, + name: service.name, + url: new URL(`/services/${service.id}`, url).toString(), + })), + ), + ) + response.headers.set("Content-Type", "application/json") + return response +} diff --git a/website/src/pages/api/v1/services.json.ts b/website/src/pages/api/v1/services.json.ts index b7a3298..3f9b0c8 100644 --- a/website/src/pages/api/v1/services.json.ts +++ b/website/src/pages/api/v1/services.json.ts @@ -4,11 +4,13 @@ import services from "@/data/services.json" export async function GET({ url }: APIContext) { const response = new Response( JSON.stringify( - services.map((service) => ({ - id: service.id, - name: service.name, - url: new URL(`/services/${service.id}`, url).toString(), - })), + services + .filter(({ enabled }) => !!enabled) + .map((service) => ({ + id: service.id, + name: service.name, + url: new URL(`/services/${service.id}`, url).toString(), + })), ), ) response.headers.set("Content-Type", "application/json")