diff --git a/apps/client/Dockerfile b/apps/client/Dockerfile index fa0dca9e6..b344f2668 100644 --- a/apps/client/Dockerfile +++ b/apps/client/Dockerfile @@ -14,6 +14,7 @@ RUN pnpm install --ignore-scripts # --no-optional COPY --chown=node:root packages/ ./packages/ RUN pnpm --filter @cpn-console/shared run build COPY --chown=node:root apps/client/ ./apps/client/ +RUN pnpm --filter client run icons ENTRYPOINT [ "pnpm", "--filter", "client", "run", "dev" ] diff --git a/apps/client/cypress/e2e/specs/admin/projects.e2e.ts b/apps/client/cypress/e2e/specs/admin/projects.e2e.ts index 696366bd2..f26bfd2eb 100644 --- a/apps/client/cypress/e2e/specs/admin/projects.e2e.ts +++ b/apps/client/cypress/e2e/specs/admin/projects.e2e.ts @@ -47,7 +47,8 @@ describe('Administration projects', () => { cy.get('td:nth-of-type(4)').should('contain', project.owner.email) cy.get('td:nth-of-type(5)').invoke('attr', 'title').should('contain', statusDict.status[project.status].wording) cy.get('td:nth-of-type(5)').invoke('attr', 'title').should('contain', statusDict.locked[String(!!project.locked)].wording) - cy.get('td:nth-of-type(6)').should('contain.text', 'il y a') + cy.get('td:nth-of-type(6)').should('contain.text', '-') + cy.get('td:nth-of-type(7)').should('contain.text', 'il y a') }) }) }) diff --git a/apps/client/package.json b/apps/client/package.json index a1c9b5a88..c6e3970f8 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -5,13 +5,14 @@ "private": false, "description": "cpn-console client", "scripts": { - "build": "run-s type-check build-only", + "build": "run-s icons type-check build-only", "build-only": "vite --mode=production build", "build:clean": "rimraf ./dist ./tsconfig.tsbuildinfo", "cypress:install": "cypress install", "dev": "vite --mode=development", "format": "NODE_OPTIONS='--no-warnings=ExperimentalWarning' eslint ./ --fix", "format:style": "stylelint ./src/**/*.{css,vue} --fix", + "icons": "vue-dsfr-icons -s scripts/icons.js -t src/icon-collections.ts", "integ": "vite --mode=integration", "kube:e2e": "CLIENT_HOST=console.dso.local CLIENT_PORT=80 cypress open", "lint": "run-p lint:*", @@ -30,7 +31,8 @@ "dependencies": { "@cpn-console/shared": "workspace:^", "@gouvfr/dsfr": "^1.13.0", - "@gouvminint/vue-dsfr": "^7.1.1", + "@gouvminint/vue-dsfr": "^8.0.0", + "@iconify-json/ri": "^1.2.2", "@iconify/vue": "^4.2.0", "@ts-rest/core": "^3.51.0", "@vue/tsconfig": "^0.7.0", @@ -49,9 +51,9 @@ "xbytes": "^1.9.1" }, "optionalDependencies": { - "@cypress/vue": "^6.0.1", - "cypress": "^13.16.1", - "cypress-vite": "^1.5.0" + "@cypress/vue": "6.0.1", + "cypress": "13.16.1", + "cypress-vite": "1.5.0" }, "devDependencies": { "@cpn-console/eslint-config": "workspace:^", diff --git a/apps/client/scripts/create-collections.js b/apps/client/scripts/create-collections.js new file mode 100644 index 000000000..da1b4a6ef --- /dev/null +++ b/apps/client/scripts/create-collections.js @@ -0,0 +1,18 @@ +#!env node +import path from 'node:path' + +import { createCustomCollectionFile } from '@gouvminint/vue-dsfr/meta' +import { Command } from 'commander' + +const program = new Command() + +program + .option('-s, --source ', 'Chemin vers le fichier de tuples [IconifyJSON, string[]]') + .option('-t, --target ', 'Chemin vers le fichier destination (src/icons.ts par défaut)') + .parse(process.argv) + +const options = program.opts() + +if (options.source && options.target) { + createCustomCollectionFile(path.resolve(process.cwd(), options.source), path.resolve(process.cwd(), options.target)) +} diff --git a/apps/client/scripts/icons.js b/apps/client/scripts/icons.js new file mode 100644 index 000000000..41313a0a1 --- /dev/null +++ b/apps/client/scripts/icons.js @@ -0,0 +1,74 @@ +// @ts-check +import { icons as riCollection } from '@iconify-json/ri' + +/** + * @type {string[]} + */ +const riIconNames = [ + 'account-circle-line', + 'add-line', + 'admin-line', + 'alert-line', + 'archive-line', + 'arrow-drop-left-line', + 'arrow-drop-right-line', + 'arrow-go-back-line', + 'arrow-left-double-line', + 'arrow-right-double-line', + 'arrow-right-s-line', + 'arrow-up-s-line', + 'award-line', + 'building-line', + 'check-line', + 'checkbox-blank-circle-fill', + 'checkbox-circle-line', + 'clipboard-line', + 'close-line', + 'dashboard-line', + 'delete-bin-7-line', + 'exchange-line', + 'eye-line', + 'eye-off-line', + 'file-download-line', + 'filter-line', + 'filter-off-line', + 'flow-chart', + 'focus-3-line', + 'folder-user-line', + 'folders-line', + 'git-branch-line', + 'git-merge-line', + 'github-line', + 'heart-pulse-line', + 'key-2-line', + 'key-2-line', + 'loader-4-line', + 'lock-line', + 'lock-unlock-line', + 'mail-line', + 'microsoft-line', + 'moon-clear-line', + 'newspaper-line', + 'pencil-line', + 'refresh-line', + 'restart-line', + 'send-plane-line', + 'server-line', + 'settings-3-line', + 'shield-check-line', + 'sound-module-line', + 'stock-line', + 'sun-line', + 'team-line', + 'tools-line', + 'upload-cloud-line', + 'user-add-line', + 'user-shared-2-line', +] + +/** + * @type {[import('@iconify/vue').IconifyJSON, string[]][]} + */ +export const collectionsToFilter = [ + [riCollection, riIconNames], +] diff --git a/apps/client/src/components/AdminRoleForm.vue b/apps/client/src/components/AdminRoleForm.vue index d74300475..39628556a 100644 --- a/apps/client/src/components/AdminRoleForm.vue +++ b/apps/client/src/components/AdminRoleForm.vue @@ -3,7 +3,6 @@ import { computed, onBeforeMount, ref } from 'vue' import type { AdminPermsKeys, LettersQuery, SharedZodError, User } from '@cpn-console/shared' import { ADMIN_PERMS, RoleSchema, adminPermsDetails, shallowEqual } from '@cpn-console/shared' import pDebounce from 'p-debounce' -// @ts-ignore '@gouvminint/vue-dsfr' missing types import { getRandomId } from '@gouvminint/vue-dsfr' import SuggestionInput from './SuggestionInput.vue' import { useUsersStore } from '@/stores/users.js' diff --git a/apps/client/src/components/ClusterForm.vue b/apps/client/src/components/ClusterForm.vue index 50eb07304..6620c519d 100644 --- a/apps/client/src/components/ClusterForm.vue +++ b/apps/client/src/components/ClusterForm.vue @@ -231,14 +231,8 @@ const isConnectionDetailsShown = ref(true) Informations de connexion (kubeconfig) -