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
-
-
-
-
-
-
+
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")