diff --git a/package-lock.json b/package-lock.json index 5dda5724420..7491ec5e96a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "app.territoiresentransitions.react" ], "dependencies": { + "react-icons": "^5.0.1", "react-markdown": "^9.0.1" }, "devDependencies": { @@ -29946,6 +29947,14 @@ "version": "2.0.4", "license": "MIT" }, + "node_modules/react-icons": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.0.1.tgz", + "integrity": "sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "18.2.0", "license": "MIT" diff --git a/package.json b/package.json index bdd1e5b8f26..19f24ae4807 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "react-refresh": "^0.11.0" }, "dependencies": { + "react-icons": "^5.0.1", "react-markdown": "^9.0.1" } } diff --git a/packages/site/app/programme/[uid]/ListeGallerieService.tsx b/packages/site/app/programme/[uid]/ListeGallerieService.tsx index 6207f5887b6..b228625c3a7 100644 --- a/packages/site/app/programme/[uid]/ListeGallerieService.tsx +++ b/packages/site/app/programme/[uid]/ListeGallerieService.tsx @@ -2,6 +2,7 @@ import MasonryGallery from '@components/galleries/MasonryGallery'; import {Liste} from './types'; import Markdown from '@components/markdown/Markdown'; import {StrapiImage} from '@components/strapiImage/StrapiImage'; +import ReactIcon from '@components/react-icons/ReactIcon'; const ListeGallerieService = ({liste}: {liste: Liste}) => { return ( @@ -12,13 +13,22 @@ const ListeGallerieService = ({liste}: {liste: Liste}) => {
- {!!l.preTitre && ( -
-
{l.preTitre}
-
- )} -

{l.titre}

- +
+ {!!l.icone && ( + + )} + {!!l.preTitre && ( +
+
{l.preTitre}
+
+ )} +
+ + {!!l.titre &&

{l.titre}

} + {!!l.image && ( { return ( @@ -9,11 +10,19 @@ const ListeGrilleService = ({liste}: {liste: Liste}) => { {liste.map(l => (
- {!!l.preTitre && ( -
- {l.preTitre} -
- )} +
+ {!!l.icone && ( + + )} + {!!l.preTitre && ( +
+ {l.preTitre} +
+ )} +
{!!l.titre && (
{l.titre} @@ -21,7 +30,7 @@ const ListeGrilleService = ({liste}: {liste: Liste}) => { )} {!!l.image && ( { @@ -18,7 +19,13 @@ const ListeVerticaleService = ({liste}: {liste: Liste}) => { /> )}
- {!!l.titre &&

{l.titre}

} +
+ {!!l.icone && ( + + )} + {!!l.titre &&

{l.titre}

} +
+
diff --git a/packages/site/app/programme/[uid]/types.ts b/packages/site/app/programme/[uid]/types.ts index fc8aad7972a..6a60eaf0dcf 100644 --- a/packages/site/app/programme/[uid]/types.ts +++ b/packages/site/app/programme/[uid]/types.ts @@ -40,6 +40,7 @@ export type ListeFetchedData = { introduction?: string; liste: { id: number; + icone?: string; pre_titre?: string; titre?: string; texte: string; @@ -51,6 +52,7 @@ export type ListeFetchedData = { export type Liste = { id: number; preTitre?: string; + icone?: string; titre?: string; texte: string; image?: StrapiItem; diff --git a/packages/site/app/programme/[uid]/utils.ts b/packages/site/app/programme/[uid]/utils.ts index d92e1f88c95..3ce19d166d6 100644 --- a/packages/site/app/programme/[uid]/utils.ts +++ b/packages/site/app/programme/[uid]/utils.ts @@ -73,6 +73,7 @@ export const getServiceStrapiData = async (uid: string) => { introduction: listeData.introduction, liste: listeData.liste.map(ct => ({ id: ct.id, + icone: ct.icone, preTitre: ct.pre_titre, titre: ct.titre, texte: ct.texte, diff --git a/packages/site/components/react-icons/ReactIcon.tsx b/packages/site/components/react-icons/ReactIcon.tsx new file mode 100644 index 00000000000..ac8af424381 --- /dev/null +++ b/packages/site/components/react-icons/ReactIcon.tsx @@ -0,0 +1,17 @@ +import * as ReactIcons from 'react-icons/ri'; + +interface IIconComponent { + icon: string; + className?: string; +} +type TReactIcon = keyof typeof ReactIcons; + +const ReactIcon: React.FC = ({icon, className}) => { + const DynamicIconComponent = ReactIcons[icon as TReactIcon]; + + if (DynamicIconComponent === undefined) return <>; + + return ; +}; + +export default ReactIcon; diff --git a/strapi/.strapi/client/app.js b/strapi/.strapi/client/app.js index e0f39d01137..4ac4b09a054 100644 --- a/strapi/.strapi/client/app.js +++ b/strapi/.strapi/client/app.js @@ -4,11 +4,13 @@ */ import i18N from "@strapi/plugin-i18n/strapi-admin"; import usersPermissions from "@strapi/plugin-users-permissions/strapi-admin"; +import reactIcons from "strapi-plugin-react-icons/strapi-admin"; import { renderAdmin } from "@strapi/strapi/admin"; renderAdmin(document.getElementById("strapi"), { plugins: { i18n: i18N, "users-permissions": usersPermissions, + "react-icons": reactIcons, }, }); diff --git a/strapi/config/plugins.ts b/strapi/config/plugins.ts new file mode 100644 index 00000000000..96981416a4e --- /dev/null +++ b/strapi/config/plugins.ts @@ -0,0 +1 @@ +export default ({ env }) => ({ "react-icons": true }); diff --git a/strapi/package-lock.json b/strapi/package-lock.json index 25fb1d7e238..b98ddda7a8e 100644 --- a/strapi/package-lock.json +++ b/strapi/package-lock.json @@ -17,6 +17,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^5.3.4", + "strapi-plugin-react-icons": "^0.2.2", "styled-components": "^5.3.11" }, "engines": { @@ -1141,28 +1142,28 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", - "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", + "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", "dependencies": { - "@floating-ui/utils": "^0.1.1" + "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/dom": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", - "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", + "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", "dependencies": { - "@floating-ui/core": "^1.4.1", - "@floating-ui/utils": "^0.1.1" + "@floating-ui/core": "^1.5.3", + "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz", - "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.6.tgz", + "integrity": "sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==", "dependencies": { - "@floating-ui/dom": "^1.5.1" + "@floating-ui/dom": "^1.5.4" }, "peerDependencies": { "react": ">=16.8.0", @@ -1170,9 +1171,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", - "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, "node_modules/@formatjs/ecma402-abstract": { "version": "1.14.3", @@ -1301,17 +1302,17 @@ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, "node_modules/@internationalized/date": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.0.tgz", - "integrity": "sha512-nw0Q+oRkizBWMioseI8+2TeUPEyopJVz5YxoYVzR0W1v+2YytiYah7s/ot35F149q/xAg4F1gT/6eTd+tsUpFQ==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.1.tgz", + "integrity": "sha512-LUQIfwU9e+Fmutc/DpRTGXSdgYZLBegi4wygCWDSVmUdLTaMHsQyASDiJtREwanwKuQLq0hY76fCJ9J/9I2xOQ==", "dependencies": { "@swc/helpers": "^0.5.0" } }, "node_modules/@internationalized/number": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.4.0.tgz", - "integrity": "sha512-8TvotW3qVDHC4uv/BVoN6Qx0Dm8clHY1/vpH+dh+XRiPW/9NVpKn1P8d1A+WLphWrMwyqyWXI7uWehJPviaeIw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.5.0.tgz", + "integrity": "sha512-ZY1BW8HT9WKYvaubbuqXbbDdHhOUMfE2zHHFJeTppid0S+pc8HtdIxFxaYMsGjCb4UsF+MEJ4n2TfU7iHnUK8w==", "dependencies": { "@swc/helpers": "^0.5.0" } @@ -3286,9 +3287,9 @@ } }, "node_modules/@strapi/ui-primitives": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@strapi/ui-primitives/-/ui-primitives-1.13.2.tgz", - "integrity": "sha512-Koaun6riXoTOvvlKNgFy44BVUfLfchgpabRhrNH/KfmBQQlhLCqJDQu023FcFQDQQ4XFO3DpvzDk8pCbmva7oQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@strapi/ui-primitives/-/ui-primitives-1.14.1.tgz", + "integrity": "sha512-AmwyfZuazN7J1AgVf7i7oly+zwcJdWFqh/UCd3uPtoonnPmdCIRjkK8aBWlU9M+k3277FGIaCHOwNHiMSiBbbA==", "dependencies": { "@radix-ui/number": "^1.0.1", "@radix-ui/primitive": "^1.0.1", @@ -11835,6 +11836,14 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, + "node_modules/react-icons": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.8.0.tgz", + "integrity": "sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-intl": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.4.1.tgz", @@ -13507,6 +13516,94 @@ "node": ">= 0.8" } }, + "node_modules/strapi-plugin-react-icons": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/strapi-plugin-react-icons/-/strapi-plugin-react-icons-0.2.2.tgz", + "integrity": "sha512-zGgdAU8w/62dDWG9qNdBePVyO+g5cz2ZcDC5h0FOSbPRUXppswp7DPgY0B9fDQiXi7y/ooFpe6WeON99cXsKmQ==", + "dependencies": { + "@strapi/design-system": "^1.13.1", + "@strapi/helper-plugin": "^4.16.2", + "@strapi/icons": "^1.13.0", + "prop-types": "^15.8.1", + "react-icons": "4.8.0" + }, + "engines": { + "node": ">=14.19.1 <=20.x.x", + "npm": ">=6.0.0" + }, + "peerDependencies": { + "@strapi/strapi": "^4.14.5", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0", + "react-router-dom": "^5.3.4", + "styled-components": "^5.3.3 || ^6.1.0" + } + }, + "node_modules/strapi-plugin-react-icons/node_modules/@strapi/design-system": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@strapi/design-system/-/design-system-1.14.1.tgz", + "integrity": "sha512-BHWX0f8l4JNhds4c4S2Vop60eF+wK2c0dLoq+8fKB3rZOftS5deO1BuFWo7XzZHF4MFbGT5mYWys9J5ANVBA6A==", + "dependencies": { + "@codemirror/lang-json": "^6.0.1", + "@floating-ui/react-dom": "^2.0.5", + "@internationalized/date": "^3.5.1", + "@internationalized/number": "^3.5.0", + "@radix-ui/react-dismissable-layer": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-focus-scope": "1.0.4", + "@strapi/ui-primitives": "^1.14.1", + "@uiw/react-codemirror": "^4.21.21", + "aria-hidden": "^1.2.3", + "compute-scroll-into-view": "^3.1.0", + "prop-types": "^15.8.1", + "react-remove-scroll": "^2.5.7" + }, + "peerDependencies": { + "@strapi/icons": "^1.5.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0", + "react-router-dom": "^5.2.0", + "styled-components": "^5.2.1" + } + }, + "node_modules/strapi-plugin-react-icons/node_modules/@strapi/helper-plugin": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@strapi/helper-plugin/-/helper-plugin-4.17.1.tgz", + "integrity": "sha512-2c5wI6PFQ/kRrEoVvmo6gUrgVJMdnK/P99YD10Vw3ljn7n1G5ejlyef1lkbElgRoNFFQdGPK9+n0jvTZ0dhyWQ==", + "dependencies": { + "axios": "1.6.0", + "date-fns": "2.30.0", + "formik": "2.4.0", + "immer": "9.0.19", + "lodash": "4.17.21", + "qs": "6.11.1", + "react-helmet": "6.1.0", + "react-intl": "6.4.1", + "react-query": "3.39.3", + "react-select": "5.7.0" + }, + "engines": { + "node": ">=18.0.0 <=20.x.x", + "npm": ">=6.0.0" + }, + "peerDependencies": { + "@strapi/design-system": "1.14.1", + "@strapi/icons": "1.14.1", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0", + "react-router-dom": "^5.2.0", + "styled-components": "^5.2.1" + } + }, + "node_modules/strapi-plugin-react-icons/node_modules/@strapi/icons": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@strapi/icons/-/icons-1.14.1.tgz", + "integrity": "sha512-ja3et1QIo+6kTfk/mzeSiLTtZ6pCC6mwvUlp8qGyBTQ5BJvMacgxEdXBnYRn6fbYt6fl7gAKCORRQpnHNQfwjg==", + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, "node_modules/stream-chain": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", @@ -16195,34 +16292,34 @@ "optional": true }, "@floating-ui/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", - "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", + "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", "requires": { - "@floating-ui/utils": "^0.1.1" + "@floating-ui/utils": "^0.2.0" } }, "@floating-ui/dom": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", - "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", + "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", "requires": { - "@floating-ui/core": "^1.4.1", - "@floating-ui/utils": "^0.1.1" + "@floating-ui/core": "^1.5.3", + "@floating-ui/utils": "^0.2.0" } }, "@floating-ui/react-dom": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz", - "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.6.tgz", + "integrity": "sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==", "requires": { - "@floating-ui/dom": "^1.5.1" + "@floating-ui/dom": "^1.5.4" } }, "@floating-ui/utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", - "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, "@formatjs/ecma402-abstract": { "version": "1.14.3", @@ -16359,17 +16456,17 @@ } }, "@internationalized/date": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.0.tgz", - "integrity": "sha512-nw0Q+oRkizBWMioseI8+2TeUPEyopJVz5YxoYVzR0W1v+2YytiYah7s/ot35F149q/xAg4F1gT/6eTd+tsUpFQ==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.1.tgz", + "integrity": "sha512-LUQIfwU9e+Fmutc/DpRTGXSdgYZLBegi4wygCWDSVmUdLTaMHsQyASDiJtREwanwKuQLq0hY76fCJ9J/9I2xOQ==", "requires": { "@swc/helpers": "^0.5.0" } }, "@internationalized/number": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.4.0.tgz", - "integrity": "sha512-8TvotW3qVDHC4uv/BVoN6Qx0Dm8clHY1/vpH+dh+XRiPW/9NVpKn1P8d1A+WLphWrMwyqyWXI7uWehJPviaeIw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.5.0.tgz", + "integrity": "sha512-ZY1BW8HT9WKYvaubbuqXbbDdHhOUMfE2zHHFJeTppid0S+pc8HtdIxFxaYMsGjCb4UsF+MEJ4n2TfU7iHnUK8w==", "requires": { "@swc/helpers": "^0.5.0" } @@ -17687,9 +17784,9 @@ } }, "@strapi/ui-primitives": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@strapi/ui-primitives/-/ui-primitives-1.13.2.tgz", - "integrity": "sha512-Koaun6riXoTOvvlKNgFy44BVUfLfchgpabRhrNH/KfmBQQlhLCqJDQu023FcFQDQQ4XFO3DpvzDk8pCbmva7oQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@strapi/ui-primitives/-/ui-primitives-1.14.1.tgz", + "integrity": "sha512-AmwyfZuazN7J1AgVf7i7oly+zwcJdWFqh/UCd3uPtoonnPmdCIRjkK8aBWlU9M+k3277FGIaCHOwNHiMSiBbbA==", "requires": { "@radix-ui/number": "^1.0.1", "@radix-ui/primitive": "^1.0.1", @@ -24039,6 +24136,12 @@ } } }, + "react-icons": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.8.0.tgz", + "integrity": "sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==", + "requires": {} + }, "react-intl": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.4.1.tgz", @@ -25295,6 +25398,63 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "strapi-plugin-react-icons": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/strapi-plugin-react-icons/-/strapi-plugin-react-icons-0.2.2.tgz", + "integrity": "sha512-zGgdAU8w/62dDWG9qNdBePVyO+g5cz2ZcDC5h0FOSbPRUXppswp7DPgY0B9fDQiXi7y/ooFpe6WeON99cXsKmQ==", + "requires": { + "@strapi/design-system": "^1.13.1", + "@strapi/helper-plugin": "^4.16.2", + "@strapi/icons": "^1.13.0", + "prop-types": "^15.8.1", + "react-icons": "4.8.0" + }, + "dependencies": { + "@strapi/design-system": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@strapi/design-system/-/design-system-1.14.1.tgz", + "integrity": "sha512-BHWX0f8l4JNhds4c4S2Vop60eF+wK2c0dLoq+8fKB3rZOftS5deO1BuFWo7XzZHF4MFbGT5mYWys9J5ANVBA6A==", + "requires": { + "@codemirror/lang-json": "^6.0.1", + "@floating-ui/react-dom": "^2.0.5", + "@internationalized/date": "^3.5.1", + "@internationalized/number": "^3.5.0", + "@radix-ui/react-dismissable-layer": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-focus-scope": "1.0.4", + "@strapi/ui-primitives": "^1.14.1", + "@uiw/react-codemirror": "^4.21.21", + "aria-hidden": "^1.2.3", + "compute-scroll-into-view": "^3.1.0", + "prop-types": "^15.8.1", + "react-remove-scroll": "^2.5.7" + } + }, + "@strapi/helper-plugin": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@strapi/helper-plugin/-/helper-plugin-4.17.1.tgz", + "integrity": "sha512-2c5wI6PFQ/kRrEoVvmo6gUrgVJMdnK/P99YD10Vw3ljn7n1G5ejlyef1lkbElgRoNFFQdGPK9+n0jvTZ0dhyWQ==", + "requires": { + "axios": "1.6.0", + "date-fns": "2.30.0", + "formik": "2.4.0", + "immer": "9.0.19", + "lodash": "4.17.21", + "qs": "6.11.1", + "react-helmet": "6.1.0", + "react-intl": "6.4.1", + "react-query": "3.39.3", + "react-select": "5.7.0" + } + }, + "@strapi/icons": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@strapi/icons/-/icons-1.14.1.tgz", + "integrity": "sha512-ja3et1QIo+6kTfk/mzeSiLTtZ6pCC6mwvUlp8qGyBTQ5BJvMacgxEdXBnYRn6fbYt6fl7gAKCORRQpnHNQfwjg==", + "requires": {} + } + } + }, "stream-chain": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", diff --git a/strapi/package.json b/strapi/package.json index 5604b4f9d05..21b62b3e667 100644 --- a/strapi/package.json +++ b/strapi/package.json @@ -22,6 +22,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^5.3.4", + "strapi-plugin-react-icons": "^0.2.2", "styled-components": "^5.3.11" }, "engines": { diff --git a/strapi/src/components/services/carte.json b/strapi/src/components/services/carte.json index 6c5228b212d..09a23224209 100644 --- a/strapi/src/components/services/carte.json +++ b/strapi/src/components/services/carte.json @@ -7,6 +7,10 @@ }, "options": {}, "attributes": { + "icone": { + "type": "customField", + "customField": "plugin::react-icons.icon" + }, "pre_titre": { "type": "string", "maxLength": 255 @@ -24,9 +28,7 @@ "type": "media", "multiple": false, "required": false, - "allowedTypes": [ - "images" - ] + "allowedTypes": ["images"] } } } diff --git a/strapi/types/generated/components.d.ts b/strapi/types/generated/components.d.ts index d0d5491c904..c2ee5f62bd9 100644 --- a/strapi/types/generated/components.d.ts +++ b/strapi/types/generated/components.d.ts @@ -243,6 +243,7 @@ export interface ServicesCarte extends Schema.Component { description: ''; }; attributes: { + icone: Attribute.String & Attribute.CustomField<'plugin::react-icons.icon'>; pre_titre: Attribute.String & Attribute.SetMinMaxLength<{ maxLength: 255; diff --git a/strapi/types/generated/contentTypes.d.ts b/strapi/types/generated/contentTypes.d.ts index ccf5101c198..62aa53bf490 100644 --- a/strapi/types/generated/contentTypes.d.ts +++ b/strapi/types/generated/contentTypes.d.ts @@ -482,6 +482,51 @@ export interface PluginUploadFolder extends Schema.CollectionType { }; } +export interface PluginReactIconsIconlibrary extends Schema.CollectionType { + collectionName: 'iconlibrary'; + info: { + singularName: 'iconlibrary'; + pluralName: 'iconlibraries'; + displayName: 'IconLibrary'; + }; + options: { + draftAndPublish: false; + comment: ''; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + name: Attribute.String & Attribute.Required; + abbreviation: Attribute.String & + Attribute.Required & + Attribute.Unique & + Attribute.SetMinMaxLength<{ + maxLength: 3; + }>; + isEnabled: Attribute.Boolean & Attribute.DefaultTo; + createdAt: Attribute.DateTime; + updatedAt: Attribute.DateTime; + createdBy: Attribute.Relation< + 'plugin::react-icons.iconlibrary', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + updatedBy: Attribute.Relation< + 'plugin::react-icons.iconlibrary', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + }; +} + export interface PluginI18NLocale extends Schema.CollectionType { collectionName: 'i18n_locale'; info: { @@ -1250,6 +1295,7 @@ declare module '@strapi/types' { 'admin::transfer-token-permission': AdminTransferTokenPermission; 'plugin::upload.file': PluginUploadFile; 'plugin::upload.folder': PluginUploadFolder; + 'plugin::react-icons.iconlibrary': PluginReactIconsIconlibrary; 'plugin::i18n.locale': PluginI18NLocale; 'plugin::users-permissions.permission': PluginUsersPermissionsPermission; 'plugin::users-permissions.role': PluginUsersPermissionsRole;