diff --git a/.dockerignore b/.dockerignore index d3af2a345..4708f41f3 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,27 +1,80 @@ -Dockerfile -Dockerfile.* -*docker-compose.*.yml -.dockerignore -node_modules/ +# Version control +.git +.gitignore +.gitattributes + +# GitHub +.github + +# IDE & Editor +.vscode +.idea +.editorconfig +.prettierrc +.prettierrc.json +.eslintrc +.eslintrc.js +.eslintrc.json + +# Dependencies & Build Artifacts +node_modules **/node_modules +dist +build +.next +.cache +.turbo +pnpm-store +.pnpm-store +.strapi +next-env.d.ts +tsconfig.tsbuildinfo +.strapi-updater.json + +# Logs npm-debug.log -README.md -.next/ -.git -.tmp/ -.cache/ -build/ -data/ +pnpm-debug.log +yarn-error.log +*.log + +# Temporary & OS +.DS_Store +.tmp .env -.env* +.env.local +.env.*.local +Thumbs.db + +# Documentation +README.md +*.md +docs/ + +# Testing +coverage/ +.nyc_output/ +cypress/ +**/*.test.* +**/*.spec.* +__tests__/ +**/__tests__/ + +# Docker files (not needed in context) +Dockerfile +Dockerfile.* +docker-compose*.yml +.dockerignore -**/.next +# CI/CD (not needed in image) +.github/ +.gitlab-ci.yml +.travis.yml + +# Misc +*.pem +.vercel +.eslintcache +.next/ **/.tmp -**/build/ **/data/ -**/dist/ -**/.cache/ -**/node_modules/ -**/.DS_Store -docs -*.log \ No newline at end of file +**/.cache/ \ No newline at end of file diff --git a/.envrc.json b/.envrc.json index ea7aeed40..dd64df4e5 100644 --- a/.envrc.json +++ b/.envrc.json @@ -24,6 +24,14 @@ "example": "http://localhost:8000/static/sdk/open-forms-sdk.js", "developmentDefault": "http://localhost:8000/static/sdk/open-forms-sdk.js" }, + { + "name": "OPEN_FORMS_MOCK", + "description": "Whether to use a mock implementation of the Open Forms API. This can be used for development and testing without needing to set up an actual Open Forms instance.", + "required": false, + "valueType": "string", + "examples": ["true", "false"], + "developmentDefault": "false" + }, { "name": "OVERIGE_OBJECTEN_API_PORT", "description": "Port number for the Overige Objecten API. This is used to access the Overige Objecten API from the frontend.", @@ -130,10 +138,18 @@ }, { "name": "FRONTEND_PUBLIC_URL", - "description": "URL where the preview of pages in the Strapi Dashboard are hosted. You can use the Docker container name as the URL, for example: http://pdc_frontend:3000.", + "description": "URL where the preview of pages in the Strapi Dashboard are hosted. You can use the Docker container name as the URL, for example: http://overige-objecten-api:3000.", + "required": true, + "valueType": "url", + "developmentDefault": "http://localhost:3000" + }, + { + "name": "KISS_PREVIEW_URL", + "description": "URL where the preview of pages in the Strapi Dashboard are hosted. You can use the Docker container name as the URL, for example: http://overige-objecten-api:3000.", "required": true, "valueType": "url", - "developmentDefault": "http://pdc_frontend:3000" + "developmentDefault": "http://localhost:4001/api/v2/preview", + "example": "http://localhost:4001/api/v2/preview" }, { "name": "HOST", @@ -149,7 +165,7 @@ "required": true, "valueType": "string", "examples": ["development", "production"], - "developmentDefault": "production" + "developmentDefault": "development" }, { "name": "PGADMIN_DEFAULT_EMAIL", @@ -184,20 +200,29 @@ "valueType": "base64", "developmentDefault": "SGVsbG8sIHdvcmxkIQ==" }, + { + "name": "KISS_PREVIEW_TOKEN", + "description": "Configure Strapi Dashboard and the website with the same secret, to be able to show unpublished content in preview mode.", + "required": true, + "secret": true, + "valueType": "base64", + "developmentDefault": "aGVsbG8gd29ybGQ=", + "example": "aGVsbG8gd29ybGQ=" + }, { "name": "STRAPI_PRIVATE_URL", "description": "URL where Strapi is available on the internal network, for example to access the GraphQL API. You can use the Docker container name, e.g. http://pdc_strapi:1337.", "required": true, - "example": "http://pdc_strapi:1337", - "developmentDefault": "http://pdc_strapi:1337" + "example": "http://localhost:1337", + "developmentDefault": "http://localhost:1337" }, { "name": "STRAPI_PUBLIC_URL", "description": "URL where Strapi is available to the public. You can use the Docker container name, e.g. http://pdc_strapi:1337.", "required": true, "valueType": "url", - "example": "http://pdc_strapi:1337", - "developmentDefault": "http://pdc_strapi:1337" + "example": "http://localhost:1337", + "developmentDefault": "http://localhost:1337" }, { "name": "TRANSFER_TOKEN_SALT", @@ -317,7 +342,7 @@ "name": "STRAPI_ENV_LABEL", "description": "Text describing the environment, used to warn users of Strapi Dashboard when they are not working in production. Can not be localized.", "required": false, - "developmentDefault": "Development", + "developmentDefault": "development", "valueType": "string" }, { @@ -341,7 +366,7 @@ "description": "URL for the Flo Legal API, used to access legal documents and templates.", "required": false, "valueType": "url", - "example": "https://example.com/api" + "example": "https://services-acc.flolegal.app/builder-api" }, { "name": "KCM_SURVEY_API_KEY", diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 63350707a..000000000 --- a/.eslintignore +++ /dev/null @@ -1,37 +0,0 @@ -# Ignore 3rd party files -node_modules -SearchBar - -# Ignore minified files -*.min.js - -# Ignore generated files -.strapi-updater.json -patches -dist -build -tmp -sample -.cache -generated -.rollup.cache -.tmp -yarn-error.log -gql -.next -**/build -**/.next -**/.cache -**/.tmp -**/dist -**/node_modules -**/.rollup.cache -**/yarn-error.log -**/.strapi-updater.json -**/generated -packages/editoria11y/lib/** -packages/editoria11y/loader/** -packages/editoria11y/www/** -apps/overige-objecten-api/src/types -apps/pdc-frontend/public/flo-client-plugin.js -apps/pdc-frontend/public/flo-client-plugin-polyfills.js diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index de4d5deb5..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,111 +0,0 @@ -/* eslint-env node */ - -module.exports = { - root: true, - globals: { - process: true, - }, - env: { - browser: true, - es6: true, - node: false, - jest: true, - }, - parserOptions: { - ecmaVersion: 2021, - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - }, - settings: { - react: { - version: 'detect', - }, - }, - overrides: [ - { - extends: ['plugin:json/recommended'], - files: ['*.json'], - }, - { - extends: ['plugin:react/recommended', 'eslint-config-prettier', './.eslintrc.js.json', './.eslintrc.react.json'], - files: ['*.js', '*.jsx'], - plugins: ['import', 'jest', 'prettier'], - rules: { - 'prettier/prettier': 'error', - }, - }, - { - extends: ['plugin:react/recommended', 'eslint-config-prettier', './.eslintrc.js.json', './.eslintrc.react.json'], - files: ['*.ts', '*.tsx'], - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint', 'import', 'jest', 'prettier'], - rules: { - 'prettier/prettier': 'error', - }, - }, - { - extends: ['plugin:react/recommended', 'eslint-config-prettier', './.eslintrc.js.json', './.eslintrc.react.json'], - files: ['*.ts', '*.tsx'], - parser: '@typescript-eslint/parser', - parserOptions: { - project: [ - './apps/overige-objecten-api/tsconfig.json', - './apps/overige-objecten-api/tsconfig.test.json', - './apps/strapi-admin-extensions/tsconfig.json', - './apps/strapi-admin-extensions/tsconfig.test.json', - './apps/kennisbank-dashboard/src/admin/tsconfig.json', - './apps/kennisbank-dashboard/tsconfig.json', - './apps/kennisbank-frontend/tsconfig.json', - './apps/pdc-dashboard/src/admin/tsconfig.json', - './apps/pdc-dashboard/tsconfig.json', - './apps/pdc-frontend/tsconfig.json', - './apps/pdc-sc/tsconfig.json', - './apps/strapi.frameless.io/tsconfig.json', - './apps/tiptap-sandbox/tsconfig.json', - './apps/tiptap-sandbox/tsconfig.node.json', - './apps/vth-dashboard/src/admin/tsconfig.json', - './apps/vth-dashboard/tsconfig.json', - './apps/vth-frontend/tsconfig.json', - './packages/catalogi-data/tsconfig.json', - './packages/content-compliance-checker/tsconfig.json', - './packages/content-compliance-checker/tsconfig.server.json', - './packages/editoria11y/tsconfig.json', - './packages/provider-upload-vercel/tsconfig.json', - './packages/samenwerkende-catalogi/tsconfig.json', - './packages/strapi-plugin-env-label/tsconfig.json', - './packages/strapi-plugin-env-label/tsconfig.server.json', - './packages/strapi-plugin-flo-legal-embed/tsconfig.json', - './packages/strapi-plugin-flo-legal-embed/tsconfig.server.json', - './packages/strapi-plugin-language/tsconfig.json', - './packages/strapi-plugin-language/tsconfig.server.json', - './packages/strapi-plugin-old-slugs/tsconfig.json', - './packages/strapi-plugin-old-slugs/tsconfig.server.json', - './packages/strapi-plugin-old-slugs/tsconfig.test.json', - './packages/strapi-plugin-open-forms-embed/tsconfig.json', - './packages/strapi-plugin-open-forms-embed/tsconfig.server.json', - './packages/strapi-plugin-uniform-product-name/tsconfig.json', - './packages/strapi-plugin-uniform-product-name/tsconfig.server.json', - './packages/strapi-plugin-uuid-field/tsconfig.json', - './packages/strapi-plugin-uuid-field/tsconfig.server.json', - './packages/strapi-tiptap-editor/tsconfig.json', - './packages/strapi-tiptap-editor/tsconfig.server.json', - './packages/strapi-tiptap-editor/tsconfig.test.json', - './packages/ui/tsconfig.json', - './packages/ui/tsconfig.test.json', - './packages/upl/tsconfig.json', - './packages/utils/tsconfig.json', - './packages/utils/tsconfig.test.json', - './packages/tiptap-editor/tsconfig.json', - ], - tsconfigRootDir: __dirname, - }, - plugins: ['@typescript-eslint', 'import', 'prettier'], - rules: { - 'prettier/prettier': 'error', - 'no-unused-vars': 'off', - }, - }, - ], -}; diff --git a/.eslintrc.js.json b/.eslintrc.js.json deleted file mode 100644 index beade8ffb..000000000 --- a/.eslintrc.js.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "rules": { - "array-callback-return": ["error", { "checkForEach": false }], - "block-scoped-var": "error", - "consistent-return": "error", - "constructor-super": "error", - "no-console": "error", - "eqeqeq": "error", - "for-direction": "error", - "getter-return": "error", - "import/order": [ - "error", - { - "alphabetize": { "order": "asc", "caseInsensitive": false }, - "groups": [ - ["builtin", "external"], - ["internal", "unknown"], - ["parent", "sibling", "index"] - ], - "newlines-between": "never", - "warnOnUnassignedImports": false - } - ], - "no-alert": "error", - "no-async-promise-executor": "error", - "no-caller": "error", - "no-case-declarations": "error", - "no-class-assign": "error", - "no-compare-neg-zero": "error", - "no-cond-assign": "error", - "no-const-assign": "error", - "no-constant-condition": "error", - "no-constructor-return": "error", - "no-control-regex": "error", - "no-debugger": "error", - "no-delete-var": "error", - "no-dupe-args": "error", - "no-dupe-class-members": "error", - "no-dupe-else-if": "error", - "no-dupe-keys": "error", - "no-duplicate-case": "error", - "no-empty": "error", - "no-empty-character-class": "error", - "no-empty-pattern": "error", - "no-eval": "error", - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-extra-semi": "error", - "no-fallthrough": "error", - "no-func-assign": "error", - "no-global-assign": "error", - "no-implicit-globals": "error", - "no-implied-eval": "error", - "no-import-assign": "error", - "no-inner-declarations": "error", - "no-invalid-regexp": "error", - "no-invalid-this": "error", - "no-irregular-whitespace": "error", - "no-lone-blocks": "error", - "no-loop-func": "error", - "no-misleading-character-class": "error", - "no-multi-str": "error", - "no-new-func": "error", - "no-new-symbol": "error", - "no-new-wrappers": "error", - "no-obj-calls": "error", - "no-octal": "error", - "no-octal-escape": "error", - "no-param-reassign": "error", - "no-prototype-builtins": "error", - "no-redeclare": "error", - "no-regex-spaces": "error", - "no-return-assign": "error", - "no-return-await": "error", - "no-self-assign": "error", - "no-self-compare": "error", - "no-sequences": "error", - "no-setter-return": "error", - "no-shadow-restricted-names": "error", - "no-sparse-arrays": "error", - "no-this-before-super": "error", - "no-throw-literal": "error", - "no-undef": "error", - "no-unexpected-multiline": "error", - "no-unmodified-loop-condition": "error", - "no-unreachable": "error", - "no-unsafe-finally": "error", - "no-unsafe-negation": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], - "no-useless-call": "error", - "no-useless-catch": "error", - "no-useless-concat": "error", - "no-useless-escape": "error", - "no-useless-return": "error", - "no-void": "error", - "no-with": "error", - "prefer-regex-literals": "error", - "radix": "error", - "require-yield": "error", - "sort-imports": [ - "error", - { - "ignoreCase": true, - "ignoreDeclarationSort": true, - "ignoreMemberSort": false, - "allowSeparatedGroups": false - } - ], - "use-isnan": "error", - "valid-typeof": "error", - "vars-on-top": "off", - "yoda": "error" - } -} diff --git a/.eslintrc.react.json b/.eslintrc.react.json deleted file mode 100644 index f75735163..000000000 --- a/.eslintrc.react.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "rules": { - "react/no-unknown-property": "off", - "react/prop-types": "off", - "react/jsx-key": "error", - "react/react-in-jsx-scope": "off" - } -} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 64d159202..5197a9639 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,17 +11,40 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2 with: fetch-depth: 0 - name: Use Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 #v4.4.0 + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0 with: node-version-file: .nvmrc - cache: "yarn" - registry-url: "https://npm.pkg.github.com/" + registry-url: "https://registry.npmjs.org/" scope: "@frameless" - - run: yarn install --frozen-lockfile + - name: Install pnpm + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 #v5.0.0 + - name: Set pnpm store path + run: pnpm config set store-dir ~/.pnpm-store/v10 + - name: Setup pnpm cache + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 #v5.0.3 + id: pnpm-store-cache + with: + path: ~/.pnpm-store/v10 + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - name: Cache Puppeteer browsers + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 #v5.0.3 + with: + path: ~/.cache/puppeteer + key: ${{ runner.os }}-puppeteer-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-puppeteer- + - run: pnpm install --frozen-lockfile + env: + SCARF_ANALYTICS: false + PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true + PUPPETEER_SKIP_DOWNLOAD: "true" + PUPPETEER_CACHE_DIR: ~/.cache/puppeteer - name: Make the root envfile uses: SpicyPizza/create-envfile@ace6d4f5d7802b600276c23ca417e669f1a06f6f #v2.0.3 with: @@ -59,38 +82,34 @@ jobs: - name: Lint env: NODE_OPTIONS: "--max_old_space_size=4096" - run: yarn run lint + run: pnpm run lint - name: Test - run: yarn run test + run: pnpm run test - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.0.1 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 with: token: ${{ secrets.CODECOV_TOKEN }} - name: Build - run: yarn run build + run: pnpm run build - name: Upload artifact for GitHub Pages - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1 + uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0 with: path: apps/strapi.frameless.io/build/ - - name: Upload Build artifacts - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: build - path: apps/tiptap-sandbox/dist/ + continuous-deployment: runs-on: ubuntu-latest permissions: packages: write steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2 - name: Check Free Disk Space uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be #v1.3.1 with: swap-storage: false - name: Docker meta id: meta - uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 #v5.7.0 + uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf #v6.0.0 with: images: | ghcr.io/${{ github.repository }} @@ -100,17 +119,17 @@ jobs: type=semver,pattern={{major}}.{{minor}} type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} - name: Set up QEMU - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 #v3.6.0 + uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a #v4.0.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 #v3.10.0 + uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd #v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 #v3.4.0 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 #v4.0.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GH_CLASSIC_TOKEN }} - name: Build and push - uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 #v6.16.0 + uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 #v7.0.0 with: context: . file: Dockerfile.prod @@ -123,21 +142,22 @@ jobs: if: github.ref == 'refs/heads/main' steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2 - name: Use Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 #v4.4.0 + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0 with: node-version-file: .nvmrc - cache: "yarn" - registry-url: "https://npm.pkg.github.com/" + registry-url: "https://registry.npmjs.org/" scope: "@frameless" + - name: Install pnpm + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 #v5.0.0 - name: Install - run: yarn install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Build - run: yarn run build + run: pnpm run build - name: Publish to GitHub repository if: github.ref == 'refs/heads/main' - uses: changesets/action@06245a4e0a36c064a573d4150030f5ec548e4fcc # v1.4.10 + uses: changesets/action@6a0a831ff30acef54f2c6aa1cbbc1096b066edaf # v1.7.0 id: changeset env: GIT_AUTHOR_EMAIL: "devops@frameless.io" @@ -150,7 +170,7 @@ jobs: commit: "docs(release): strapi packages" setupGitUser: false title: "docs(release): strapi packages" - publish: "yarn run publish" + publish: "pnpm run publish" publish-strapi-docs-website: runs-on: ubuntu-latest needs: continuous-integration @@ -165,53 +185,3 @@ jobs: - name: Deploy to GitHub Pages id: deploy-pages uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 - deploy-to-vercel: - runs-on: ubuntu-latest - needs: continuous-integration - steps: - - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 - - name: Download build artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 #v4.3.0 - with: - name: build - path: apps/tiptap-sandbox/dist/ - - name: Start Deploy to Vercel - uses: bobheadxi/deployments@648679e8e4915b27893bd7dbc35cb504dc915bc8 # v1.5.0 - id: deployment-preview - with: - step: start - token: ${{ secrets.GITHUB_TOKEN }} - env: Preview - - name: Deploy to Vercel/Preview - id: vercel-action-preview - if: github.ref != 'refs/heads/main' - uses: amondnet/vercel-action@16e87c0a08142b0d0d33b76aeaf20823c381b9b9 # v25.2.0 - with: - vercel-token: ${{ secrets.VERCEL_TOKEN }} - vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} - vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }} - scope: ${{ secrets.VERCEL_ORG_ID }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: Deploy to Vercel/Production - uses: amondnet/vercel-action@16e87c0a08142b0d0d33b76aeaf20823c381b9b9 # v25.2.0 - id: vercel-action-production - if: github.event_name == 'push' && github.ref == 'refs/heads/main' - with: - vercel-token: ${{ secrets.VERCEL_TOKEN }} - vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} - vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }} - scope: ${{ secrets.VERCEL_ORG_ID }} - github-comment: false - vercel-args: "--prod" - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: Update Deployment Status on Vercel - uses: bobheadxi/deployments@648679e8e4915b27893bd7dbc35cb504dc915bc8 # v1.5.0 - if: github.ref != 'refs/heads/main' - with: - step: finish - token: ${{ secrets.GITHUB_TOKEN }} - status: ${{ job.status }} - deployment_id: ${{ steps.deployment-preview.outputs.deployment_id }} - env_url: ${{ steps.vercel-action-preview.outputs.preview-url }} - env: ${{ steps.deployment-preview.outputs.env }} diff --git a/.github/workflows/wcag.yaml b/.github/workflows/wcag.yaml index 17b283bb8..5c850c37f 100644 --- a/.github/workflows/wcag.yaml +++ b/.github/workflows/wcag.yaml @@ -18,7 +18,7 @@ jobs: steps: - name: Checkout branch - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2 - name: Include GitHub Issues as WCAG result uses: frameless/wcag-issues-action@latest diff --git a/.gitignore b/.gitignore index c22f412f5..ad57e7a62 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ Icon .Trashes ._* vendor/ - +.turbo ############################ # Linux @@ -148,3 +148,9 @@ apps/overige-objecten-api/src/types ############################ apps/pdc-frontend/public/flo-client-plugin.js apps/pdc-frontend/public/flo-client-plugin-polyfills.js + + +############################ +# TypeScript +############################ +tsconfig.test.tsbuildinfo diff --git a/.lintstagedrc.js b/.lintstagedrc.js deleted file mode 100644 index 90e520553..000000000 --- a/.lintstagedrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - '**/*.{ts,tsx,js,scss,css,html,json,md}?(x)': () => 'npm run lint', - '**/*.{ts,tsx}': () => 'npm run lint-build', -}; diff --git a/.lintstagedrc.mjs b/.lintstagedrc.mjs new file mode 100644 index 000000000..ec7dae529 --- /dev/null +++ b/.lintstagedrc.mjs @@ -0,0 +1,4 @@ +export default { + '**/*.{ts,tsx,js,scss,css,html,json,md}?(x)': () => 'pnpm lint', + '**/*.{ts,tsx}': () => 'pnpm lint-build', +}; diff --git a/.npmrc b/.npmrc index b028546be..d791f5e8d 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,29 @@ +# Save exact versions in package.json (no ^ or ~ prefixes) +# Example: "react": "18.3.1" instead of "react": "^18.3.1" save-exact=true + +# Remove version prefix when saving (works with save-exact) save-prefix= + +# Hoist all dependencies to root node_modules (fixes Strapi v5 plugin resolution issues) +# Required for community plugins to find @strapi/design-system and other shared deps +shamefully-hoist=true + +# Automatically install peer dependencies without prompting +# Prevents "missing peer dependency" warnings during install +auto-install-peers=true + +# Don't fail installation when peer dependency versions don't match exactly +# Allows slightly mismatched peer deps (useful in monorepos with multiple Strapi plugins) +strict-peer-dependencies=false + +# Hoist Strapi and React deps to root for plugins +public-hoist-pattern[]=*@strapi/* +public-hoist-pattern[]=*react* +public-hoist-pattern[]=*react-dom* +public-hoist-pattern[]=*styled-components* + +provenance=true + +# This package moved to public npm +@frameless/preview-button:registry=https://registry.npmjs.org/ diff --git a/.nvmrc b/.nvmrc index c8ac5a416..cabf43b5d 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.19 \ No newline at end of file +24 \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 8c6806368..f424275ed 100644 --- a/.prettierignore +++ b/.prettierignore @@ -16,6 +16,7 @@ tmp CHANGELOG.md package-lock.json yarn.lock +pnpm-lock.yaml .strapi-updater.json generated gql diff --git a/.prettierrc.json b/.prettierrc.json index 4b2e58f36..8c66792ff 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -10,6 +10,16 @@ "singleQuote": true } }, + { + "files": ["*.mjs"], + "options": { + "parser": "babel", + "printWidth": 120, + "trailingComma": "all", + "tabWidth": 2, + "singleQuote": true + } + }, { "files": ["*.json"], "options": { diff --git a/.stylelintrc.json b/.stylelintrc.json index 911d15ec0..15d11db3c 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,5 +1,5 @@ { - "extends": ["stylelint-config-standard", "stylelint-config-standard-scss"], + "extends": ["stylelint-config-standard-scss"], "plugins": ["stylelint-order"], "rules": { "order/order": ["custom-properties", "declarations"], @@ -32,7 +32,6 @@ "no-duplicate-at-import-rules": [true], "no-duplicate-selectors": [true], "no-empty-source": [true], - "no-extra-semicolons": null, "no-invalid-double-slash-comments": [true], "property-no-unknown": [true], "selector-pseudo-class-no-unknown": [true], @@ -57,8 +56,6 @@ "function-url-no-scheme-relative": [true], "font-family-name-quotes": ["always-unless-keyword"], "function-url-quotes": ["always"], - "number-leading-zero": null, - "number-no-trailing-zeros": null, "declaration-property-value-disallowed-list": [ { "text-align": ["left", "right"] @@ -79,71 +76,9 @@ ] ], "selector-max-id": [0], - "indentation": null, - "linebreaks": null, - "max-line-length": null, - "function-comma-newline-after": null, - "function-comma-newline-before": null, - "function-comma-space-after": null, - "function-comma-space-before": null, - "function-max-empty-lines": null, - "function-parentheses-newline-inside": null, - "function-parentheses-space-inside": null, - "value-list-comma-newline-after": null, - "value-list-comma-newline-before": null, - "value-list-comma-space-after": null, - "value-list-comma-space-before": null, - "value-list-max-empty-lines": null, - "declaration-colon-newline-after": null, - "declaration-colon-space-after": null, - "declaration-colon-space-before": null, - "declaration-block-semicolon-newline-after": null, - "declaration-block-semicolon-newline-before": null, - "declaration-block-semicolon-space-after": null, - "declaration-block-semicolon-space-before": null, - "declaration-block-trailing-semicolon": null, - "block-closing-brace-empty-line-before": null, - "block-closing-brace-newline-after": null, - "block-closing-brace-newline-before": null, - "block-closing-brace-space-after": null, - "block-closing-brace-space-before": null, - "block-opening-brace-newline-after": null, - "block-opening-brace-newline-before": null, - "block-opening-brace-space-after": null, - "block-opening-brace-space-before": null, "selector-attribute-quotes": ["always"], - "selector-combinator-space-after": null, - "selector-combinator-space-before": null, - "selector-descendant-combinator-no-non-space": null, - "selector-list-comma-newline-after": null, - "selector-list-comma-newline-before": null, - "selector-list-comma-space-after": null, - "selector-list-comma-space-before": null, - "media-query-list-comma-newline-after": null, - "media-query-list-comma-newline-before": null, - "media-query-list-comma-space-after": null, - "media-query-list-comma-space-before": null, - "at-rule-empty-line-before": null, - "at-rule-name-newline-after": null, - "at-rule-semicolon-newline-after": null, - "max-empty-lines": null, - "no-eol-whitespace": null, - "no-missing-end-of-source-newline": null, - "no-empty-first-line": null, - "unicode-bom": null, - "rule-empty-line-before": null, - "color-hex-case": null, - "unit-case": null, - "property-case": null, - "selector-pseudo-class-case": null, - "selector-pseudo-element-case": null, - "selector-max-empty-lines": null, - "media-feature-name-case": null, - "at-rule-name-case": null, - "string-quotes": null, "property-no-vendor-prefix": null, "value-keyword-case": ["lower", { "camelCaseSvgKeywords": true }], - "declaration-block-no-redundant-longhand-properties": null, - "scss/at-import-no-partial-leading-underscore": null + "declaration-block-no-redundant-longhand-properties": null } } diff --git a/.yarnrc b/.yarnrc deleted file mode 100644 index 89a20e53c..000000000 --- a/.yarnrc +++ /dev/null @@ -1,2 +0,0 @@ -install --frozen-lockfile true -disable-self-update-check true diff --git a/Dockerfile.dev b/Dockerfile.dev index 0b719b06b..fe171eeb9 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,69 +1,62 @@ -FROM node:20.19-alpine3.22 as build -# Installing libvips-dev for sharp Compatibility -RUN apk update && apk add --no-cache git libc6-compat build-base bash gcc autoconf automake zlib-dev libpng-dev vips-dev > /dev/null 2>&1 +# ---------- base ---------- +FROM node:24-alpine AS base + +RUN apk add --no-cache libc6-compat git bash + +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable && corepack prepare pnpm@10.23.0 --activate + +WORKDIR /app + + +# ---------- dependencies ---------- +FROM base AS dependencies ARG NODE_ENV=development +ARG STRAPI_PUBLIC_URL ENV NODE_ENV=${NODE_ENV} +ENV STRAPI_PUBLIC_URL=${STRAPI_PUBLIC_URL} + +RUN apk add --no-cache \ + build-base \ + python3 \ + autoconf \ + automake \ + vips-dev + +COPY pnpm-lock.yaml package.json pnpm-workspace.yaml ./ +COPY apps ./apps +COPY packages ./packages + +# Install with both shamefully-hoist AND auto-install-peers +RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ + pnpm install --frozen-lockfile --shamefully-hoist + +# ---------- development ---------- +FROM base AS development + +ARG NODE_ENV=development ARG STRAPI_PUBLIC_URL +ENV NODE_ENV=${NODE_ENV} ENV STRAPI_PUBLIC_URL=${STRAPI_PUBLIC_URL} -WORKDIR /opt/app -COPY ./package.json ./yarn.lock ./ -ENV PATH /opt/app/node_modules/.bin:$PATH -COPY ./apps/pdc-dashboard/package.json apps/pdc-dashboard/package.json -COPY ./apps/pdc-frontend/package.json apps/pdc-frontend/package.json -COPY ./apps/pdc-sc/package.json apps/pdc-sc/package.json -COPY ./apps/vth-dashboard/package.json apps/vth-dashboard/package.json -COPY ./apps/vth-frontend/package.json apps/vth-frontend/package.json -COPY ./apps/kennisbank-dashboard/package.json apps/kennisbank-dashboard/package.json -COPY ./apps/overige-objecten-api/package.json apps/overige-objecten-api/package.json -COPY ./apps/strapi-admin-extensions/package.json apps/strapi-admin-extensions/package.json -COPY ./apps/kennisbank-frontend/package.json apps/kennisbank-frontend/package.json -COPY ./packages/catalogi-data/package.json packages/catalogi-data/package.json -COPY ./packages/preview-button/package.json packages/preview-button/package.json -COPY ./packages/samenwerkende-catalogi/package.json packages/samenwerkende-catalogi/package.json -COPY ./packages/strapi-plugin-gemeente-select/package.json packages/strapi-plugin-gemeente-select/package.json -COPY ./packages/strapi-plugin-scheme-select/package.json packages/strapi-plugin-scheme-select/package.json -COPY ./packages/strapi-tiptap-editor/package.json packages/strapi-tiptap-editor/package.json -COPY ./packages/ui/package.json packages/ui/package.json -COPY ./packages/upl/package.json packages/upl/package.json -COPY ./packages/strapi-plugin-uniform-product-name/package.json packages/strapi-plugin-uniform-product-name/package.json -COPY ./packages/strapi-plugin-open-forms-embed/package.json packages/strapi-plugin-open-forms-embed/package.json -COPY ./packages/strapi-plugin-uuid-field/package.json packages/strapi-plugin-uuid-field/package.json -COPY ./packages/strapi-plugin-env-label/package.json packages/strapi-plugin-env-label/package.json -COPY ./packages/strapi-plugin-language/package.json packages/strapi-plugin-language/package.json - - -# Build target dependencies # -############################# -FROM build AS dependencies -# Install prod dependencies -COPY ./patches /opt/app/patches -RUN yarn install --frozen-lockfile - -# Build target builder # -######################## -FROM build AS builder -COPY --from=dependencies /opt/app/node_modules /opt/app/node_modules -COPY . /opt/app/ -RUN npm run build --workspace @frameless/upl && \ - npm run build --workspace @frameless/strapi-plugin-uniform-product-name && \ - npm run build --workspace @frameless/strapi-tiptap-editor && \ - npm run build --workspace @frameless/ui && \ - npm run build --workspace @frameless/catalogi-data && \ - npm run build --workspace @frameless/samenwerkende-catalogi && \ - npm run build --workspace @frameless/pdc-sc && \ - npm run build --workspace @frameless/strapi-plugin-open-forms-embed && \ - npm run build --workspace @frameless/strapi-plugin-uuid-field && \ - npm run build --workspace @frameless/strapi-plugin-env-label && \ - npm run build --workspace @frameless/strapi-plugin-language && \ - npm run build --workspace @frameless/overige-objecten-api && \ - npm run build --workspace @frameless/strapi-admin-extensions - -# Build target production # -########################### -FROM build AS development -COPY --from=builder /opt/app /opt/app -COPY --from=dependencies /opt/app/node_modules /opt/app/node_modules -RUN chmod +x ./bin/wait-for-it.sh -EXPOSE 1337 -CMD ["yarn", "dev"] + +RUN apk add --no-cache \ + build-base \ + python3 \ + autoconf \ + automake \ + vips-dev + +COPY --from=dependencies /app . + +# Create necessary Strapi directories +RUN mkdir -p /app/apps/pdc-dashboard/dist && \ + mkdir -p /app/apps/pdc-dashboard/.strapi && \ + mkdir -p /app/apps/vth-dashboard/dist && \ + mkdir -p /app/apps/vth-dashboard/.strapi && \ + chmod +x ./bin/wait-for-it.sh 2>/dev/null || true + +EXPOSE 1337 3000 4000 + +CMD ["pnpm", "dev"] \ No newline at end of file diff --git a/Dockerfile.prod b/Dockerfile.prod index 1238e5d23..1cec348d3 100644 --- a/Dockerfile.prod +++ b/Dockerfile.prod @@ -1,67 +1,103 @@ -FROM node:20.19-alpine3.22 AS build -# Update package index and install build dependencies. -# These packages are needed for building native modules and ensuring compatibility. -RUN set -eux; apk update && apk add --no-cache \ - git libc6-compat build-base gcc bash autoconf automake \ - zlib-dev libpng-dev vips-dev shadow python3 python3-dev py3-pip && \ - # Create a symlink for python3 so node-gyp can locate Python as 'python' - ln -sf "$(which python3)" /usr/bin/python && \ - echo "Python version: $(python --version)" - -# Set build-time variable for the public URL. -ARG STRAPI_PUBLIC_URL -ENV STRAPI_PUBLIC_URL=${STRAPI_PUBLIC_URL} - -# Set working directory and update PATH for local binaries. -WORKDIR /opt/app -ENV PATH /opt/app/node_modules/.bin:$PATH - -# Install global Node.js tools needed for patching and native module building. -RUN yarn global add patch-package node-gyp - -# Copy dependency definitions. -COPY ./package.json ./yarn.lock ./ - -# Copy all application files. -COPY ./ . - -# Install all dependencies (including devDependencies) required for the build. -RUN set -eux; yarn install --frozen-lockfile - -# --- Builder stage: Compile and build assets --- -FROM build AS builder -# Copy remaining files and build the application. -COPY . /opt/app/ -RUN set -eux; NODE_OPTIONS="--max-old-space-size=4096" yarn build - -# --- Production stage: Prepare a lean image for runtime --- -FROM node:20.19-alpine3.22 AS production -# Copy built application from the builder stage. -COPY --from=builder /opt/app /opt/app - -WORKDIR /opt/app -# Install runtime dependencies and ensure essential tools are available. -RUN set -eux; \ - apk add --no-cache git make g++ python3 bash && \ - ln -sf "$(which python3)" /usr/bin/python && \ - yarn global add patch-package && \ - export PYTHON=/usr/bin/python3 && \ - yarn install --production=true - -# Configure container permissions and executable permissions. -RUN set -eux; \ - chmod +x ./bin/wait-for-it.sh && \ - addgroup --system --gid 1001 pdcgroup && \ - adduser --system --uid 1001 --ingroup pdcgroup pdcuser && \ - chown -R pdcuser:pdcgroup /opt/app - -# Switch to a non-root user for security. +# ---------- base ---------- +FROM node:24-alpine AS base + +RUN apk add --no-cache libc6-compat git bash + +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +ENV PUPPETEER_SKIP_DOWNLOAD=true +RUN corepack enable && corepack prepare pnpm@10.23.0 --activate + +WORKDIR /app + + +# ---------- prune workspace (ALL apps) ---------- +FROM base AS pruner + +COPY . . + +# Prune everything - no specific app, builds all +RUN pnpm dlx turbo prune \ + @frameless/pdc-dashboard \ + @frameless/vth-dashboard \ + @frameless/pdc-frontend \ + @frameless/vth-frontend \ + @frameless/pdc-sc \ + @frameless/strapi-admin-extensions \ + @frameless/overige-objecten-api \ + @frameless/editoria11y \ + @frameless/samenwerkende-catalogi \ + @frameless/ui \ + @frameless/utils \ + --docker + + +# ---------- dependencies ---------- +FROM base AS deps + +RUN apk add --no-cache \ + build-base \ + python3 \ + autoconf \ + automake \ + vips-dev + +COPY --from=pruner /app/out/json/ . +COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml + +RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ + pnpm install --frozen-lockfile + + +# ---------- build (ALL apps) ---------- +FROM deps AS builder + +COPY --from=pruner /app/out/full/ . + +# Build everything - no filter, builds all apps +RUN NODE_OPTIONS="--max-old-space-size=4096" \ + pnpm \ + --filter @frameless/utils \ + --filter @frameless/ui \ + --filter @frameless/editoria11y \ + --filter @frameless/samenwerkende-catalogi \ + --filter @frameless/pdc-dashboard \ + --filter @frameless/pdc-frontend \ + --filter @frameless/overige-objecten-api \ + --filter @frameless/strapi-admin-extensions \ + --filter @frameless/vth-dashboard \ + --filter @frameless/vth-frontend \ + --filter @frameless/pdc-sc \ + build + + +# ---------- runtime ---------- +FROM node:24-alpine AS runner + +RUN apk add --no-cache libc6-compat vips bash + +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +ENV NODE_ENV=production +ENV CI=true + +RUN corepack enable && corepack prepare pnpm@10.23.0 --activate + +WORKDIR /app + +COPY --from=builder /app . +COPY bin ./bin +RUN chmod +x ./bin/wait-for-it.sh 2>/dev/null || true + +RUN pnpm install --prod --frozen-lockfile + +RUN addgroup -S pdcgroup -g 1001 \ + && adduser -S pdcuser -u 1001 -G pdcgroup \ + && chown -R pdcuser:pdcgroup /app + USER pdcuser -# Set runtime environment and expose application port. -ARG NODE_ENV=production -ENV NODE_ENV=${NODE_ENV} -EXPOSE 1337 +# Expose all ports +EXPOSE 1337 1338 3000 4000 4001 4002 -# Set default command. -CMD ["yarn", "start"] +# No CMD - let docker-compose specify what to run \ No newline at end of file diff --git a/ENVIRONMENT_VARIABLES.md b/ENVIRONMENT_VARIABLES.md index 105754bd2..eaafa677d 100644 --- a/ENVIRONMENT_VARIABLES.md +++ b/ENVIRONMENT_VARIABLES.md @@ -21,22 +21,25 @@ | `DATABASE_SSL` | string | ✅ | | Enable SSL to use an encrypted connection. Typically `false` during development, and `true` in production. | `` | `false` | | `DATABASE_USERNAME` | string | ✅ | | Username for your database. | `postgres` | `postgres` | | `FLO_LEGAL_API_TOKEN` | string | | ✅ | API token for the Flo Legal API, used to access legal documents and templates. | `xxxxxxxx` | `xxxxxxxx` | -| `FLO_LEGAL_API_URL` | url | | | URL for the Flo Legal API, used to access legal documents and templates. | `https://example.com/api` | `` | -| `FRONTEND_PUBLIC_URL` | url | ✅ | | URL where the preview of pages in the Strapi Dashboard are hosted. You can use the Docker container name as the URL, for example: http://pdc_frontend:3000. | `` | `http://pdc_frontend:3000` | +| `FLO_LEGAL_API_URL` | url | | | URL for the Flo Legal API, used to access legal documents and templates. | `https://services-acc.flolegal.app/builder-api` | `` | +| `FRONTEND_PUBLIC_URL` | url | ✅ | | URL where the preview of pages in the Strapi Dashboard are hosted. You can use the Docker container name as the URL, for example: http://overige-objecten-api:3000. | `` | `http://localhost:3000` | | `HOST` | hostname | ✅ | | Strapi Dashboard hostname where users will access Strapi. Use `0.0.0.0` to respond to any hostname. | `0.0.0.0` | `0.0.0.0` | | `JWT_SECRET` | base64 | ✅ | ✅ | Secret for signing JSON Web Tokens for the Strapi API | `pIUa5y9fIImYq2Nf92AUEw==` | `` | | `KCM_SURVEY_API_KEY` | string | | ✅ | API key for the KCM Survey widget, used to authenticate requests to the KCM survey service. | `add-your-api-key` | `` | | `KCM_SURVEY_ID` | string | | | Survey ID for the KCM Survey widget, used to identify which survey to display. | `add-kcm-survey-id` | `` | | `KCM_SURVEY_STYLESHEETS_LINK` | url | | | URL for the custom stylesheet for the KCM Survey widget (e.g., https://www.utrecht.nl/fileadmin/kcm-radio.css). | `https://www.utrecht.nl` | `https://www.utrecht.nl` | | `KCM_SURVEY_URL` | url | | | Base URL for the KCM Survey service where the survey widget is hosted. | `https://viewer.kcmg.nl/` | `https://viewer.kcmg.nl/` | +| `KISS_PREVIEW_TOKEN` | base64 | ✅ | ✅ | Configure Strapi Dashboard and the website with the same secret, to be able to show unpublished content in preview mode. | `aGVsbG8gd29ybGQ=` | `aGVsbG8gd29ybGQ=` | +| `KISS_PREVIEW_URL` | url | ✅ | | URL where the preview of pages in the Strapi Dashboard are hosted. You can use the Docker container name as the URL, for example: http://overige-objecten-api:3000. | `http://localhost:4001/api/v2/preview` | `http://localhost:4001/api/v2/preview` | | `MATOMO_CONTAINER_ID` | string | | | Container ID for the Matomo tracker API. See: https://matomo.org/faq/general/faq_19212/ | `36D0C594-E017-485B-B032-C436` | `36D0C594-E017-485B-B032-C436` | | `MATOMO_HOST` | url | | | URL where the Matomo is hosted | `https://example.com` | `https://example.com` | | `MATOMO_SITE_ID` | string | | | Website ID for the Matomo tracker API. See: https://matomo.org/faq/general/faq_19212/ | `36D0C594-E017-485B-B032-C436` | `36D0C594-E017-485B-B032-C436EC876E5B` | -| `NODE_ENV` | string | ✅ | | Enable production mode for Node.js. See: https://nodejs.org/en/learn/getting-started/nodejs-the-difference-between-development-and-production | `` | `production` | +| `NODE_ENV` | string | ✅ | | Enable production mode for Node.js. See: https://nodejs.org/en/learn/getting-started/nodejs-the-difference-between-development-and-production | `` | `development` | | `OGONE_PAYMENT_SERVICE_URL` | url | | | URL of the Ogone payment form target. Typically you will use different values for acceptance and production. | `` | `` | | `OPEN_FORMS_API_TOKEN` | base64 | | ✅ | Open Forms API token, used to access access forms from the website and the Strapi Dashboard. See: https://open-forms.readthedocs.io/en/stable/configuration/general/cms_integration.html | `pIUa5y9fIImYq2Nf92AUEw==` | `pIUa5y9fIImYq2Nf92AUEw==` | | `OPEN_FORMS_API_URL` | url | | | URL for the Open Forms v2 API. See: https://open-forms.readthedocs.io/en/stable/developers/embedding.html | `` | `http://localhost:8000/api/v2/` | | `OPEN_FORMS_CSS_URL` | url | | | URL for the Open Forms SDK CSS file. See: https://open-forms.readthedocs.io/en/stable/developers/embedding.html | `` | `http://localhost:8000/static/sdk/open-forms-sdk.css` | +| `OPEN_FORMS_MOCK` | string | | | Whether to use a mock implementation of the Open Forms API. This can be used for development and testing without needing to set up an actual Open Forms instance. | `` | `false` | | `OPEN_FORMS_SDK_URL` | url | | | URL for the Open Forms SDK JavaScript file. See: https://open-forms.readthedocs.io/en/stable/developers/embedding.html | `http://localhost:8000/static/sdk/open-forms-sdk.js` | `http://localhost:8000/static/sdk/open-forms-sdk.js` | | `OVERIGE_OBJECTEN_API_CORS` | url | | | CORS settings for the Overige Objecten API. This is used to access the Overige Objecten API from the frontend. | `http://localhost:8000` | `` | | `OVERIGE_OBJECTEN_API_PORT` | port-number | | | Port number for the Overige Objecten API. This is used to access the Overige Objecten API from the frontend. | `4001` | `4001` | @@ -48,7 +51,7 @@ | `PREVIEW_SECRET_TOKEN` | base64 | ✅ | ✅ | Configure Strapi Dashboard and the website with the same secret, to be able to show unpublished content in preview mode. | `` | `SGVsbG8sIHdvcmxkIQ==` | | `STRAPI_ADMIN_EXTENSIONS_PORT` | port-number | | | Port number for the Strapi Admin Extensions. This is used to access the Strapi Admin Extensions from the frontend. | `4002` | `4002` | | `STRAPI_API_TOKEN` | string | | ✅ | API token for the Strapi CMS, used to authenticate requests to the Strapi REST or GraphQL API. | `strapiToken_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` | `` | -| `STRAPI_ENV_LABEL` | string | | | Text describing the environment, used to warn users of Strapi Dashboard when they are not working in production. Can not be localized. | `` | `Development` | -| `STRAPI_PRIVATE_URL` | | ✅ | | URL where Strapi is available on the internal network, for example to access the GraphQL API. You can use the Docker container name, e.g. http://pdc_strapi:1337. | `http://pdc_strapi:1337` | `http://pdc_strapi:1337` | -| `STRAPI_PUBLIC_URL` | url | ✅ | | URL where Strapi is available to the public. You can use the Docker container name, e.g. http://pdc_strapi:1337. | `http://pdc_strapi:1337` | `http://pdc_strapi:1337` | +| `STRAPI_ENV_LABEL` | string | | | Text describing the environment, used to warn users of Strapi Dashboard when they are not working in production. Can not be localized. | `` | `development` | +| `STRAPI_PRIVATE_URL` | | ✅ | | URL where Strapi is available on the internal network, for example to access the GraphQL API. You can use the Docker container name, e.g. http://pdc_strapi:1337. | `http://localhost:1337` | `http://localhost:1337` | +| `STRAPI_PUBLIC_URL` | url | ✅ | | URL where Strapi is available to the public. You can use the Docker container name, e.g. http://pdc_strapi:1337. | `http://localhost:1337` | `http://localhost:1337` | | `TRANSFER_TOKEN_SALT` | base64 | | ✅ | Salt for generating Transfer tokens. If no transfer token salt is defined, transfer features will be disabled. See: https://docs.strapi.io/user-docs/settings/transfer-tokens | `HtHorFUigcXPMtDF/kAHcQ==` | `` | diff --git a/README.md b/README.md index cf127db43..e3fed2201 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ cd frameless-cms Before running the app, make sure you have the following prerequisites installed on your machine: -- [Yarn Classic](https://classic.yarnpkg.com/lang/en/) version 1.22.19 +- [PNPM](https://pnpm.io/) version 1.22.19 - [Node.js](https://nodejs.org/) version [20.18.1](https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V20.md#20.18.1) Follow these steps to prepare the app: @@ -27,13 +27,13 @@ Follow these steps to prepare the app: 2. Install Dependencies: ```shell - yarn install + pnpm install ``` 3. Build the Project: ```shell - yarn build + pnpm build ``` These commands will ensure that all necessary dependencies are installed and the project is built successfully. Once completed, you'll be ready to run the app. @@ -43,30 +43,27 @@ These commands will ensure that all necessary dependencies are installed and the To run the application as a Docker container on your Mac, follow these steps: 1. **Install Docker Desktop:** - - Go to the Docker [website](https://docs.docker.com/desktop/install/mac-install/) and download Docker Desktop for Mac. - Install Docker Desktop by following the installation instructions for macOS. - Ensure you have `docker-compose` available. For example by installing [docker-compose with Homebrew](https://formulae.brew.sh/formula/docker-compose) 2. **Launch Docker Desktop:** - - Once Docker Desktop is installed, launch it from your Applications folder. 3. **Add Environments variables to the project** If there are no existing environment variables, run: ```bash - yarn init:env + pnpm run env ``` This command generates a .env file containing the necessary environment variables. The generated values are suitable for the PDC project in Docker production environment. - - Running PDC in development mode - Update the generated .env file or create a .pdc.dev.env file with the same variables, modified for development. - For development, you need to adjust certain variables (for example, set NODE_ENV=development) to ensure the environment behaves correctly. + Update the generated .env file or create a `.pdc.dev.env` file with the same variables, modified for development. + For development, you need to adjust certain variables (for example, set `NODE_ENV=development`) to ensure the environment behaves correctly. - Running the VTH project - Run the same yarn init:env command, then create a .vth.dev.env file with the same variables, modified for VTH development. + Run the same `pnpm run env` command, then create a `.vth.dev.env` file with the same variables, modified for VTH development. Environment variable definitions are based on the .envrc.json file in the project root. You can find detailed documentation for each variable in the [Environment Variables](./ENVIRONMENT_VARIABLES.md) file. @@ -74,7 +71,7 @@ To run the application as a Docker container on your Mac, follow these steps: **Note:** When updating `.envrc.json`, run the following command to regenerate the documentation: ```bash - yarn generate-env-docs + pnpm generate-env-docs ``` 4. Run the Docker Image: @@ -95,7 +92,6 @@ To run the application as a Docker container on your Mac, follow these steps: ``` Valid project names are: - - `pdc-dashboard` - `vth-dashboard` - `kennisbank-dashboard` @@ -106,54 +102,41 @@ To run the application as a Docker container on your Mac, follow these steps: ## Start the server without Docker -Before starting the server without Docker, create a `.env` file for both the frontend and the Strapi dashboard app. +Before starting the server without Docker, create a `.env` file for both the frontend and the Strapi dashboard app: `pnpm run env`. -**Frontend env:** +Then run: ```shell -FRONTEND_PUBLIC_URL=http://localhost:3000 -# these three environments variables below are required to be able to test the openFormsEmbed into the frontend. So you have to start the OpenForms server on your local machine -PANDOSEARCH_API_URL= # You can use the following API URL to test the functionality of the SearchBar component: https://public.pandosearch.com/developer.pandosearch.com/. Valid keys that can be used in the searchBar field include: search, server, highlighting, and help. -PREVIEW_SECRET_TOKEN= # the value should matched the same environment variable on the Strapi dashboard -STRAPI_PRIVATE_URL=http://0.0.0.0:1337/ -STRAPI_PUBLIC_URL=http://0.0.0.0:1337/ - +pnpm run development ``` -**Strapi Dashboard env:** +Choose: `dev`, `both`, `pdc` to start the development frontend + backend for PDC. -```shell -NODE_ENV=development -ADMIN_JWT_SECRET= -API_TOKEN_SALT= -APP_KEYS= -FRONTEND_PUBLIC_URL=http://localhost:3000 -HOST=0.0.0.0 -JWT_SECRET= -OPEN_FORMS_API_TOKEN= -OPEN_FORMS_API_URL=http://localhost:8000/api/v2/ -PORT=1337 -# the value should matched the same environment variable on the Frontend -PREVIEW_SECRET_TOKEN= -STRAPI_PRIVATE_URL=http://0.0.0.0:1337 -STRAPI_PUBLIC_URL=http://0.0.0.0:1337 -``` +Visit the following URLs: + +- for the website +- for the Strapi admin interface + +When starting Strapi for the first time: + +1. Go to and create an account. +2. Go to and login. +3. Go to and click "Import". ### Two Options to Run the Server 1. Using the Start Script: - - Navigate to the app's root level and run the following command: ```shell - yarn development + pnpm development ``` - You will be prompted with options to select. For example: ```bash - ❯ yarn development - yarn run v1.22.19 + ❯ pnpm development + pnpm run v1.22.19 $ node scripts/start.js ? Select an option: … Build # build a specific app or both @@ -164,19 +147,17 @@ STRAPI_PUBLIC_URL=http://0.0.0.0:1337 - Choose the "Dev" option to start a development server for the specified app. 2. Basic Way: - - Change to the app's directory (e.g., `cd apps/pdc-dashboard`) and run: ```shell - yarn dev + pnpm dev ``` -3. Using Yarn Workspaces: - +3. Using Pnpm Workspaces: - Run the following command from the project root: ```shell - yarn workspace @frameless/pdc-dashboard dev + pnpm workspace @frameless/pdc-dashboard dev ``` Choose the option that best fits your workflow to start the server without Docker. Once the server is running, you can access the application from your browser. @@ -188,18 +169,16 @@ Choose the option that best fits your workflow to start the server without Docke If you encounter problems with building the project or starting the server, try the following steps: 1. **Remove Build Folders:** - - Execute the following commands from the app root level: ```bash - yarn clean - yarn build + pnpm clean + pnpm build ``` - This will remove the `/build` or `/dist` folders and rebuild the entire project. 2. **Remove Node Modules:** - - If the issue persists, remove the `node_modules` folders for all the apps using the command: ```bash @@ -209,7 +188,7 @@ If you encounter problems with building the project or starting the server, try - Afterward, reinstall the dependencies with: ```bash - yarn install + pnpm install ``` These steps can help resolve common issues related to project build and server startup. If you continue to face problems, feel free to reach out for further assistance. diff --git a/apps/kennisbank-dashboard/.gitignore b/apps/kennisbank-dashboard/.gitignore deleted file mode 100644 index 25864658e..000000000 --- a/apps/kennisbank-dashboard/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/public/uploads/* -!/public/uploads/.gitkeep diff --git a/apps/kennisbank-dashboard/CHANGELOG.md b/apps/kennisbank-dashboard/CHANGELOG.md deleted file mode 100644 index 17f6df976..000000000 --- a/apps/kennisbank-dashboard/CHANGELOG.md +++ /dev/null @@ -1,52 +0,0 @@ -# @frameless/kennisbank-dashboard - -## 0.1.7 - -### Patch Changes - -- Updated dependencies [8b2df3c] - - @frameless/strapi-tiptap-editor@0.3.2 - -## 0.1.6 - -### Patch Changes - -- @frameless/strapi-tiptap-editor@0.3.1 - -## 0.1.5 - -### Patch Changes - -- Updated dependencies [d96fe22] -- Updated dependencies [3b6b5b8] - - @frameless/strapi-tiptap-editor@0.3.0 - -## 0.1.4 - -### Patch Changes - -- Updated dependencies [ed4d2a4] - - @frameless/strapi-tiptap-editor@0.2.0 - -## 0.1.3 - -### Patch Changes - -- 981db82: Update Strapi-afhankelijkheden om het paginering probleem in het dashboard op te lossen ([GitHub Issue frameless/strapi#715](https://github.com/frameless/strapi/issues/715)). -- Updated dependencies [f40ac6b] - - @frameless/strapi-tiptap-editor@0.1.1 - -## 0.1.2 - -### Patch Changes - -- Updated dependencies [06c52b9] - - @frameless/strapi-tiptap-editor@0.1.0 - -## 0.1.1 - -### Patch Changes - -- Updated dependencies [82fa577] -- Updated dependencies [82fa577] - - @frameless/strapi-tiptap-editor@0.0.0 diff --git a/apps/kennisbank-dashboard/README.md b/apps/kennisbank-dashboard/README.md deleted file mode 100644 index ad964a948..000000000 --- a/apps/kennisbank-dashboard/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# 🚀 Getting started with Strapi - -Strapi comes with a full featured [Command Line Interface](https://docs.strapi.io/developer-docs/latest/developer-resources/cli/CLI.html) (CLI) which lets you scaffold and manage your project in seconds. - -## `develop` - -Start your Strapi application with autoReload enabled. [Learn more](https://docs.strapi.io/developer-docs/latest/developer-resources/cli/CLI.html#strapi-develop) - -```shell -npm run dev -# or -yarn dev -``` - -### `start` - -Start your Strapi application with autoReload disabled. [Learn more](https://docs.strapi.io/developer-docs/latest/developer-resources/cli/CLI.html#strapi-start) - -```shell -npm run start -# or -yarn start -``` - -### `build` - -Build your admin panel. [Learn more](https://docs.strapi.io/developer-docs/latest/developer-resources/cli/CLI.html#strapi-build) - -```shell -npm run build -# or -yarn build -``` diff --git a/apps/kennisbank-dashboard/config/admin.ts b/apps/kennisbank-dashboard/config/admin.ts deleted file mode 100644 index 894637602..000000000 --- a/apps/kennisbank-dashboard/config/admin.ts +++ /dev/null @@ -1,14 +0,0 @@ -export default ({ env }) => ({ - watchIgnoredFiles: ['**/config/sync/**'], - auth: { - secret: env('ADMIN_JWT_SECRET'), - }, - apiToken: { - salt: env('API_TOKEN_SALT'), - }, - transfer: { - token: { - salt: env('TRANSFER_TOKEN_SALT'), - }, - }, -}); diff --git a/apps/kennisbank-dashboard/config/api.ts b/apps/kennisbank-dashboard/config/api.ts deleted file mode 100644 index 37f7c14a4..000000000 --- a/apps/kennisbank-dashboard/config/api.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default { - rest: { - defaultLimit: 25, - maxLimit: 100, - withCount: true, - }, -}; diff --git a/apps/kennisbank-dashboard/config/database.ts b/apps/kennisbank-dashboard/config/database.ts deleted file mode 100644 index f72bb5144..000000000 --- a/apps/kennisbank-dashboard/config/database.ts +++ /dev/null @@ -1,42 +0,0 @@ -export default ({ env }) => { - const client = env('DATABASE_CLIENT', 'sqlite'); - - const connections = { - postgres: { - connection: { - connectionString: env('DATABASE_URL'), - host: env('DATABASE_HOST'), - port: env.int('DATABASE_PORT'), - database: env('DATABASE_NAME'), - user: env('DATABASE_USERNAME'), - password: env('DATABASE_PASSWORD'), - ssl: env.bool('DATABASE_SSL', false) && { - key: env('DATABASE_SSL_KEY', undefined), - cert: env('DATABASE_SSL_CERT', undefined), - ca: env('DATABASE_SSL_CA', undefined), - capath: env('DATABASE_SSL_CAPATH', undefined), - cipher: env('DATABASE_SSL_CIPHER', undefined), - rejectUnauthorized: env.bool('DATABASE_SSL_REJECT_UNAUTHORIZED', true), - }, - schema: env('DATABASE_SCHEMA', 'public'), - }, - pool: { min: env.int('DATABASE_POOL_MIN', 0), max: env.int('DATABASE_POOL_MAX', 30) }, - }, - sqlite: { - connection: { - filename: env('DATABASE_FILENAME', '.tmp/data.db'), - useNullAsDefault: true, - debug: false, - }, - useNullAsDefault: true, - }, - }; - - return { - connection: { - client, - ...connections[client], - acquireConnectionTimeout: env.int('DATABASE_CONNECTION_TIMEOUT', 60000), - }, - }; -}; diff --git a/apps/kennisbank-dashboard/config/middlewares.ts b/apps/kennisbank-dashboard/config/middlewares.ts deleted file mode 100644 index 3ab20d955..000000000 --- a/apps/kennisbank-dashboard/config/middlewares.ts +++ /dev/null @@ -1,12 +0,0 @@ -export default [ - 'strapi::errors', - 'strapi::security', - 'strapi::cors', - 'strapi::poweredBy', - 'strapi::logger', - 'strapi::query', - 'strapi::body', - 'strapi::session', - 'strapi::favicon', - 'strapi::public', -]; diff --git a/apps/kennisbank-dashboard/config/plugins.ts b/apps/kennisbank-dashboard/config/plugins.ts deleted file mode 100644 index 40751a512..000000000 --- a/apps/kennisbank-dashboard/config/plugins.ts +++ /dev/null @@ -1,31 +0,0 @@ -const { apolloPrometheusPlugin } = require('strapi-prometheus'); - -export default () => ({ - 'strapi-tiptap-editor': { - enabled: true, - }, - 'strapi-prometheus': { - enabled: true, - graphql: { - enabled: true, - config: { - apolloServer: { - plugins: [apolloPrometheusPlugin], // add the plugin to get apollo metrics - tracing: true, // this must be true to get some of the data needed to create the metrics - }, - }, - }, - }, - upload: { - config: { - providerOptions: { - localServer: { - maxage: 300000, - }, - }, - }, - }, - publisher: { - enabled: true, - }, -}); diff --git a/apps/kennisbank-dashboard/config/server.ts b/apps/kennisbank-dashboard/config/server.ts deleted file mode 100644 index a54a2414c..000000000 --- a/apps/kennisbank-dashboard/config/server.ts +++ /dev/null @@ -1,10 +0,0 @@ -export default ({ env }) => ({ - host: env('HOST', '0.0.0.0'), - port: env.int('PORT', 1337), - app: { - keys: env.array('APP_KEYS'), - }, - webhooks: { - populateRelations: env.bool('WEBHOOKS_POPULATE_RELATIONS', false), - }, -}); diff --git a/apps/kennisbank-dashboard/database/migrations/.gitkeep b/apps/kennisbank-dashboard/database/migrations/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/kennisbank-dashboard/favicon.ico b/apps/kennisbank-dashboard/favicon.ico deleted file mode 100644 index 03eec51b1..000000000 Binary files a/apps/kennisbank-dashboard/favicon.ico and /dev/null differ diff --git a/apps/kennisbank-dashboard/package.json b/apps/kennisbank-dashboard/package.json deleted file mode 100644 index 4fd7c4934..000000000 --- a/apps/kennisbank-dashboard/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@frameless/kennisbank-dashboard", - "private": true, - "version": "0.1.7", - "description": "A Strapi application", - "keywords": [], - "scripts": { - "dev": "strapi develop", - "develop:watch": "strapi develop --watch-admin", - "start": "strapi start", - "prebuild": "npm run clean", - "build": "strapi build", - "strapi": "strapi", - "lint": "eslint --ext .js src", - "lint:fix": "eslint --ext .js src --fix", - "lint-build": "tsc --noEmit --project tsconfig.json", - "clean": "rimraf build .cache dist" - }, - "dependencies": { - "@frameless/strapi-tiptap-editor": "0.3.2", - "@strapi/plugin-graphql": "4.25.23", - "@strapi/plugin-i18n": "4.25.23", - "@strapi/plugin-users-permissions": "4.25.23", - "@strapi/strapi": "4.25.23", - "better-sqlite3": "12.2.0", - "pg": "8.11.3", - "slugify": "1.6.6", - "strapi-plugin-config-sync": "1.2.6", - "strapi-plugin-publisher": "1.5.7", - "strapi-plugin-slugify": "2.3.8", - "strapi-prometheus": "1.9.1", - "react": "18.3.1", - "react-dom": "18.3.1", - "react-router-dom": "5.3.4", - "styled-components": "5.3.11" - }, - "author": { - "name": "" - }, - "strapi": { - "uuid": "3d9f46d7-679c-4633-8821-761d8bbb5bea" - }, - "engines": { - "node": "20.x.x" - }, - "license": "EUPL-1.2", - "devDependencies": { - "node-sass": "8.0.0", - "sass-loader": "13.2.2", - "scss": "0.2.4" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "apps/kennisbank-dashboard" - } -} diff --git a/apps/kennisbank-dashboard/public/uploads/.gitkeep b/apps/kennisbank-dashboard/public/uploads/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/kennisbank-dashboard/src/admin/app.ts b/apps/kennisbank-dashboard/src/admin/app.ts deleted file mode 100644 index 2d7d0dd90..000000000 --- a/apps/kennisbank-dashboard/src/admin/app.ts +++ /dev/null @@ -1,24 +0,0 @@ -const config = { - locales: ['nl'], - notifications: { - releases: false, - }, - translations: { - nl: { - 'app.components.HomePage.welcome': 'Welkom 👋', - 'content-manager.popUpWarning.warning.has-draft-relations.title': 'Bevestiging', - 'content-manager.popUpWarning.warning.publish-question': 'Wil je nog steeds publiceren?', - 'content-manager.popUpWarning.warning.unpublish-question': 'Weet je zeker dat je het niet wilt publiceren?', - 'content-manager.popUpWarning.warning.unpublish': - 'Als je deze inhoud niet publiceert, wordt deze automatisch een concept.', - 'content-manager.popUpWarning.warning.updateAllSettings': 'Dit zal al je instellingen wijzigen.', - }, - }, -}; - -const bootstrap = () => {}; - -export default { - config, - bootstrap, -}; diff --git a/apps/kennisbank-dashboard/src/admin/tsconfig.json b/apps/kennisbank-dashboard/src/admin/tsconfig.json deleted file mode 100644 index 843155d34..000000000 --- a/apps/kennisbank-dashboard/src/admin/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/admin", - "include": ["./"], - "exclude": ["node_modules/", "build/", "dist/", "**/*.test.ts"] -} diff --git a/apps/kennisbank-dashboard/src/admin/webpack.config.js b/apps/kennisbank-dashboard/src/admin/webpack.config.js deleted file mode 100644 index 5a5b486f1..000000000 --- a/apps/kennisbank-dashboard/src/admin/webpack.config.js +++ /dev/null @@ -1,25 +0,0 @@ -const { NormalModuleReplacementPlugin } = require('webpack'); - -// eslint-disable-next-line no-undef -module.exports = (config) => { - config.plugins.push(new NormalModuleReplacementPlugin(/^tippy\.js$/, 'tippy.js/dist/tippy-bundle.umd.min.js')); - // Allow scss modules - config.resolve = { - ...config.resolve, - extensions: [...config.resolve.extensions, '.scss'], - }; - - // Configure a SASS loader - config.module.rules.push({ - test: /\.s[ac]ss$/i, - use: [ - 'style-loader', - 'css-loader', - 'sass-loader', - { - loader: 'sass-loader', - }, - ], - }); - return config; -}; diff --git a/apps/kennisbank-dashboard/src/api/.gitkeep b/apps/kennisbank-dashboard/src/api/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/kennisbank-dashboard/src/api/homepage/content-types/homepage/schema.json b/apps/kennisbank-dashboard/src/api/homepage/content-types/homepage/schema.json deleted file mode 100644 index 31e00c631..000000000 --- a/apps/kennisbank-dashboard/src/api/homepage/content-types/homepage/schema.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "kind": "singleType", - "collectionName": "homepages", - "info": { - "singularName": "homepage", - "pluralName": "homepages", - "displayName": "Homepage", - "description": "" - }, - "options": { - "draftAndPublish": true - }, - "pluginOptions": {}, - "attributes": { - "title": { - "type": "string", - "required": true, - "default": "Kennisbank" - }, - "content": { - "type": "richtext" - } - } -} diff --git a/apps/kennisbank-dashboard/src/api/homepage/controllers/homepage.ts b/apps/kennisbank-dashboard/src/api/homepage/controllers/homepage.ts deleted file mode 100644 index 402a7388e..000000000 --- a/apps/kennisbank-dashboard/src/api/homepage/controllers/homepage.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * homepage controller - */ - -import { factories } from '@strapi/strapi'; - -export default factories.createCoreController('api::homepage.homepage'); diff --git a/apps/kennisbank-dashboard/src/api/homepage/routes/homepage.ts b/apps/kennisbank-dashboard/src/api/homepage/routes/homepage.ts deleted file mode 100644 index 14e14f2d6..000000000 --- a/apps/kennisbank-dashboard/src/api/homepage/routes/homepage.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * homepage router - */ - -import { factories } from '@strapi/strapi'; - -export default factories.createCoreRouter('api::homepage.homepage'); diff --git a/apps/kennisbank-dashboard/src/api/homepage/services/homepage.ts b/apps/kennisbank-dashboard/src/api/homepage/services/homepage.ts deleted file mode 100644 index 4369109c7..000000000 --- a/apps/kennisbank-dashboard/src/api/homepage/services/homepage.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * homepage service - */ - -import { factories } from '@strapi/strapi'; - -export default factories.createCoreService('api::homepage.homepage'); diff --git a/apps/kennisbank-dashboard/src/extensions/.gitkeep b/apps/kennisbank-dashboard/src/extensions/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/kennisbank-dashboard/src/index.ts b/apps/kennisbank-dashboard/src/index.ts deleted file mode 100644 index 0fb9cd48e..000000000 --- a/apps/kennisbank-dashboard/src/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -export default { - /** - * An asynchronous register function that runs before - * your application is initialized. - * - * This gives you an opportunity to extend code. - */ - - register(/*{ strapi }: { strapi: Strapi }*/) {}, - - /** - * An asynchronous bootstrap function that runs before - * your application gets started. - * - * This gives you an opportunity to set up your data model, - * run jobs, or perform some special logic. - */ - async bootstrap(/*{ strapi }: { strapi: Strapi }*/) {}, -}; diff --git a/apps/kennisbank-dashboard/tsconfig.json b/apps/kennisbank-dashboard/tsconfig.json deleted file mode 100644 index c0a45b6a9..000000000 --- a/apps/kennisbank-dashboard/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/server", - "compilerOptions": { - "outDir": "dist", - "rootDir": ".", - "allowJs": true - }, - "include": ["./", "src/**/*.json"], - "exclude": ["node_modules/", "build/", "dist/", ".cache/", ".tmp/", "src/admin/", "**/*.test.ts", "src/plugins/**"] -} diff --git a/apps/kennisbank-frontend/.eslintrc.json b/apps/kennisbank-frontend/.eslintrc.json deleted file mode 100644 index e7fc2048e..000000000 --- a/apps/kennisbank-frontend/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "next/core-web-vitals", - "settings": { - "next": { - "rootDir": "../kennisbank-frontend" - } - }, - "rules": { - "@next/next/no-html-link-for-pages": "off" - } -} diff --git a/apps/kennisbank-frontend/.gitignore b/apps/kennisbank-frontend/.gitignore deleted file mode 100644 index c87c9b392..000000000 --- a/apps/kennisbank-frontend/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/apps/kennisbank-frontend/CHANGELOG.md b/apps/kennisbank-frontend/CHANGELOG.md deleted file mode 100644 index ce25e6612..000000000 --- a/apps/kennisbank-frontend/CHANGELOG.md +++ /dev/null @@ -1,41 +0,0 @@ -# @frameless/kennisbank-frontend - -## 0.1.5 - -### Patch Changes - -- Updated dependencies [95b7a51] -- Updated dependencies [dcaab2a] -- Updated dependencies [c16e0f5] - - @frameless/ui@0.1.2 - -## 0.1.4 - -### Patch Changes - -- Updated dependencies [ca71dbf] - - @frameless/ui@0.1.1 - -## 0.1.3 - -### Patch Changes - -- Updated dependencies [8c536da] -- Updated dependencies [2c0382b] -- Updated dependencies [2c0382b] - - @frameless/ui@0.1.0 - -## 0.1.2 - -### Patch Changes - -- Updated dependencies [06c52b9] - - @frameless/ui@0.0.1 - -## 0.1.1 - -### Patch Changes - -- Updated dependencies [82fa577] -- Updated dependencies [82fa577] - - @frameless/ui@0.0.0 diff --git a/apps/kennisbank-frontend/README.md b/apps/kennisbank-frontend/README.md deleted file mode 100644 index fcce90d54..000000000 --- a/apps/kennisbank-frontend/README.md +++ /dev/null @@ -1 +0,0 @@ -# Utrecht Kennisbank Frontend diff --git a/apps/kennisbank-frontend/next-sitemap.config.js b/apps/kennisbank-frontend/next-sitemap.config.js deleted file mode 100644 index 5d1b9b8d3..000000000 --- a/apps/kennisbank-frontend/next-sitemap.config.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @type {import('next-sitemap').IConfig} */ -module.exports = { - siteUrl: process.env.FRONTEND_PUBLIC_URL, - generateRobotsTxt: true, - exclude: ['/sitemap.xml'], - robotsTxtOptions: { - additionalSitemaps: [`${process.env.FRONTEND_PUBLIC_URL}/sitemap.xml`], - }, -}; diff --git a/apps/kennisbank-frontend/next.config.js b/apps/kennisbank-frontend/next.config.js deleted file mode 100644 index 4530be87c..000000000 --- a/apps/kennisbank-frontend/next.config.js +++ /dev/null @@ -1,19 +0,0 @@ -const { URL } = require('url'); -const { hostname, protocol, port } = new URL(process.env.STRAPI_PUBLIC_URL || 'http://localhost:1337'); -/** @type {import('next').NextConfig} */ -const nextConfig = { - images: { - remotePatterns: [ - { - protocol: protocol.replace(/:$/, ''), - hostname: hostname, - port: port, - }, - ], - }, - experimental: { - serverActions: true, - }, -}; - -module.exports = nextConfig; diff --git a/apps/kennisbank-frontend/package.json b/apps/kennisbank-frontend/package.json deleted file mode 100644 index 2798cc74f..000000000 --- a/apps/kennisbank-frontend/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "@frameless/kennisbank-frontend", - "version": "0.1.5", - "private": true, - "author": "@frameless", - "description": "Utrecht kennisbank frontend application", - "license": "EUPL-1.2", - "keywords": [], - "scripts": { - "dev": "next dev -p 3000", - "prebuild": "npm run clean", - "clean": "rimraf build .next", - "build": "next build", - "start": "next start -p 3000", - "lint": "next lint", - "lint-build": "tsc --noEmit --project tsconfig.json" - }, - "dependencies": { - "@tanstack/react-query": "4.29.25", - "@frameless/ui": "0.1.2", - "@utrecht/component-library-css": "4.2.0", - "@utrecht/component-library-react": "5.0.0", - "@utrecht/design-tokens": "1.1.0", - "@utrecht/web-component-library-react": "1.3.0", - "accept-language": "3.0.18", - "classnames": "2.3.3", - "i18next": "22.5.1", - "i18next-browser-languagedetector": "7.0.2", - "i18next-resources-to-backend": "1.1.4", - "is-absolute-url": "4.0.1", - "next": "13.5.6", - "next-sitemap": "4.1.8", - "react": "18.3.1", - "react-dom": "18.3.1", - "react-i18next": "12.3.1", - "react-loading-skeleton": "3.3.1", - "sharp": "0.32.6" - }, - "devDependencies": { - "eslint": "8.35.0", - "eslint-config-next": "13.2.4", - "sass": "1.63.6" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "apps/kennisbank-frontend" - } -} diff --git a/apps/kennisbank-frontend/public/next.svg b/apps/kennisbank-frontend/public/next.svg deleted file mode 100644 index 5174b28c5..000000000 --- a/apps/kennisbank-frontend/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/kennisbank-frontend/public/thirteen.svg b/apps/kennisbank-frontend/public/thirteen.svg deleted file mode 100644 index 8977c1bd1..000000000 --- a/apps/kennisbank-frontend/public/thirteen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/kennisbank-frontend/public/vercel.svg b/apps/kennisbank-frontend/public/vercel.svg deleted file mode 100644 index d2f842227..000000000 --- a/apps/kennisbank-frontend/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/kennisbank-frontend/src/app/[locale]/layout.tsx b/apps/kennisbank-frontend/src/app/[locale]/layout.tsx deleted file mode 100644 index b6fc2b52b..000000000 --- a/apps/kennisbank-frontend/src/app/[locale]/layout.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import classnames from 'classnames'; -import { dir } from 'i18next'; -import type { Metadata } from 'next'; -import React from 'react'; -import { QueryClientProvider } from '@/client'; -import '@utrecht/component-library-css'; -import '@utrecht/design-tokens/dist/index.css'; -import { useTranslation } from '../i18n/index'; -import '@frameless/ui/dist/bundle.css'; - -interface LayoutProps { - children: React.ReactNode; - params: { - locale: string; - }; -} - -type Params = { - params: { - locale: string; - }; -}; - -export async function generateMetadata({ params: { locale } }: Params): Promise { - // eslint-disable-next-line react-hooks/rules-of-hooks - const { t } = await useTranslation(locale, 'common'); - return { - title: { - template: `%s | ${t('website-setting.website-name')}`, - default: `${t('website-setting.website-name')}`, - }, - }; -} - -const RootLayout = async ({ children, params: { locale } }: LayoutProps) => { - return ( - - - -
{children}
-
- - - ); -}; -export default RootLayout; diff --git a/apps/kennisbank-frontend/src/app/[locale]/page.tsx b/apps/kennisbank-frontend/src/app/[locale]/page.tsx deleted file mode 100644 index 24a35585c..000000000 --- a/apps/kennisbank-frontend/src/app/[locale]/page.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Metadata } from 'next'; -import React from 'react'; -import { useTranslation } from '../i18n'; - -export interface Fields { - title: string; - body: string; -} - -type Params = { - params: { - locale: string; - }; -}; - -export async function generateMetadata({ params: { locale } }: Params): Promise { - // eslint-disable-next-line react-hooks/rules-of-hooks - const { t } = await useTranslation(locale, 'home-page'); - return { - title: t('seo.title'), - description: t('seo.description'), - }; -} - -const Home = async ({ params: { locale } }: { params: any }) => { - const { t } = await useTranslation(locale, 'home-page'); - return ( -
-

{t('h1')}

-
- ); -}; - -export default Home; diff --git a/apps/kennisbank-frontend/src/app/i18n/client.ts b/apps/kennisbank-frontend/src/app/i18n/client.ts deleted file mode 100644 index 55a20f62b..000000000 --- a/apps/kennisbank-frontend/src/app/i18n/client.ts +++ /dev/null @@ -1,38 +0,0 @@ -'use client'; - -import i18next from 'i18next'; -import LanguageDetector from 'i18next-browser-languagedetector'; -import resourcesToBackend from 'i18next-resources-to-backend'; -import { useEffect } from 'react'; -import { initReactI18next, useTranslation as useTranslationOrg } from 'react-i18next'; -import { getOptions } from './settings'; - -// on client side the normal singleton is ok -i18next - .use(initReactI18next) - .use(LanguageDetector) - .use(resourcesToBackend((language: string, namespace: string) => import(`./locales/${language}/${namespace}.json`))) - .init({ - ...getOptions(), - lng: undefined, // let detect the language on client side - detection: { - order: ['path', 'htmlTag', 'cookie', 'navigator'], - }, - }); - -const runsOnServerSide = typeof window === 'undefined'; - -export function useTranslation(lng: string, ns: string | string[], options?: any) { - const ret = useTranslationOrg(ns, options); - const { i18n } = ret; - if (runsOnServerSide && i18n.resolvedLanguage !== lng) { - i18n.changeLanguage(lng); - } else { - // eslint-disable-next-line react-hooks/rules-of-hooks - useEffect(() => { - if (i18n.resolvedLanguage === lng) return; - i18n.changeLanguage(lng); - }, [lng, i18n]); - } - return ret; -} diff --git a/apps/kennisbank-frontend/src/app/i18n/index.ts b/apps/kennisbank-frontend/src/app/i18n/index.ts deleted file mode 100644 index a202de7fc..000000000 --- a/apps/kennisbank-frontend/src/app/i18n/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -'use server'; - -import { createInstance, InitOptions } from 'i18next'; -import resourcesToBackend from 'i18next-resources-to-backend'; -import { initReactI18next } from 'react-i18next/initReactI18next'; -import { getOptions } from './settings'; - -const initI18next = async (locale: string, ns: string | string[]) => { - // on the server-side, we create a new instance for each render because during compilation everything seems to be executed in parallel - const i18nInstance = createInstance(); - await i18nInstance - .use(initReactI18next) - .use(resourcesToBackend((language: string, namespace: string) => import(`./locales/${language}/${namespace}.json`))) - .init(getOptions(locale, ns as string) as InitOptions); // Type assertion to InitOptions - return i18nInstance; -}; - -export async function useTranslation(locale: string, ns: string | string[], options: any = {}) { - const i18nextInstance = await initI18next(locale, ns); - - return { - t: i18nextInstance.getFixedT(locale, Array.isArray(ns) ? ns[0] : ns, options.keyPrefix), - i18n: i18nextInstance, - }; -} diff --git a/apps/kennisbank-frontend/src/app/i18n/locales/nl/common.json b/apps/kennisbank-frontend/src/app/i18n/locales/nl/common.json deleted file mode 100644 index 7dbd8b229..000000000 --- a/apps/kennisbank-frontend/src/app/i18n/locales/nl/common.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "website-setting": { - "website-name": "Gemeente Utrecht" - } -} diff --git a/apps/kennisbank-frontend/src/app/i18n/locales/nl/home-page.json b/apps/kennisbank-frontend/src/app/i18n/locales/nl/home-page.json deleted file mode 100644 index 31b0dd7ff..000000000 --- a/apps/kennisbank-frontend/src/app/i18n/locales/nl/home-page.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "seo": { - "title": "Toezicht en Handhaving | Gemeente Utrecht", - "description": "Beschrijving" - }, - "h1": "Hello kennisbank" -} diff --git a/apps/kennisbank-frontend/src/app/i18n/settings.ts b/apps/kennisbank-frontend/src/app/i18n/settings.ts deleted file mode 100644 index 7a33b63a1..000000000 --- a/apps/kennisbank-frontend/src/app/i18n/settings.ts +++ /dev/null @@ -1,16 +0,0 @@ -export const fallbackLng = 'nl'; -export const languages = ['nl']; -export const defaultNS = 'common'; - -export function getOptions(lng = fallbackLng, ns = defaultNS) { - return { - debug: !!process.env.I18N_DEBUG, - supportedLngs: languages, - preload: languages, - fallbackLng, - lng, - fallbackNS: defaultNS, - defaultNS, - ns, - }; -} diff --git a/apps/kennisbank-frontend/src/client.tsx b/apps/kennisbank-frontend/src/client.tsx deleted file mode 100644 index 8c6ae88f3..000000000 --- a/apps/kennisbank-frontend/src/client.tsx +++ /dev/null @@ -1,9 +0,0 @@ -'use client'; -import { QueryClientProvider as Provider, QueryClient } from '@tanstack/react-query'; -import React from 'react'; - -const queryClient = new QueryClient(); - -export const QueryClientProvider = ({ children }: any) => { - return {children}; -}; diff --git a/apps/kennisbank-frontend/src/middleware.ts b/apps/kennisbank-frontend/src/middleware.ts deleted file mode 100644 index 376142a02..000000000 --- a/apps/kennisbank-frontend/src/middleware.ts +++ /dev/null @@ -1,39 +0,0 @@ -import acceptLanguage from 'accept-language'; -import { NextResponse } from 'next/server'; -import { NextRequest } from 'next/server'; -import { fallbackLng, languages } from './app/i18n/settings'; -acceptLanguage.languages(languages); - -export const config = { - matcher: ['/((?!api|_next/static|_next/image|assets|favicon.ico|sw.js).*)'], -}; - -const cookieName = 'i18next'; - -export function middleware(req: NextRequest) { - if (req.nextUrl.pathname.indexOf('icon') > -1 || req.nextUrl.pathname.indexOf('chrome') > -1) - return NextResponse.next(); - let lng; - if (req.cookies.has(cookieName)) lng = acceptLanguage.get(req.cookies.get(cookieName)?.value); - if (!lng) lng = acceptLanguage.get(req.headers.get('Accept-Language')); - if (!lng) lng = fallbackLng; - - // Redirect if lng in path is not supported - if ( - !languages.some((loc) => req.nextUrl.pathname.startsWith(`/${loc}`)) && - !req.nextUrl.pathname.startsWith('/_next') - ) { - return NextResponse.redirect(new URL(`/${lng}${req.nextUrl.pathname}`, req.url)); - } - - if (req.headers.has('referer')) { - const refererUrl = new URL(req.headers.get('referer') as any); - const lngInReferer = languages.find((l) => refererUrl.pathname.startsWith(`/${l}`)); - const response = NextResponse.next(); - if (lngInReferer) response.cookies.set(cookieName, lngInReferer); - return response; - } - const requestHeaders = new Headers(req.headers); - requestHeaders.set('x-pathname', req.nextUrl.pathname); - return NextResponse.next(); -} diff --git a/apps/kennisbank-frontend/src/util/create-url.ts b/apps/kennisbank-frontend/src/util/create-url.ts deleted file mode 100644 index 8b5b25b5b..000000000 --- a/apps/kennisbank-frontend/src/util/create-url.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { format, parse } from 'url'; - -export const createURL = (baseUrl: string, params: any) => { - const parsedUrl = parse(baseUrl, true); - parsedUrl.query = params; - const finalUrl = format(parsedUrl); - return finalUrl; -}; diff --git a/apps/kennisbank-frontend/src/util/createStrapiURL.ts b/apps/kennisbank-frontend/src/util/createStrapiURL.ts deleted file mode 100644 index eff61bc8f..000000000 --- a/apps/kennisbank-frontend/src/util/createStrapiURL.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { URL } from 'url'; -export const createStrapiURL = () => { - if (!process.env.STRAPI_PRIVATE_URL) { - throw new Error('STRAPI_PRIVATE_URL is not defined'); - } - - const { origin } = new URL(process.env.STRAPI_PRIVATE_URL); - const strapiURL = `${origin}/graphql`; - return strapiURL; -}; diff --git a/apps/kennisbank-frontend/src/util/fetchData.ts b/apps/kennisbank-frontend/src/util/fetchData.ts deleted file mode 100644 index 240e7cf3e..000000000 --- a/apps/kennisbank-frontend/src/util/fetchData.ts +++ /dev/null @@ -1,97 +0,0 @@ -interface FetchDataProps { - url: string; - query?: string; - variables?: any; - method?: string; -} - -export const fetchData = async ({ url, query, variables, method = 'POST' }: FetchDataProps) => { - try { - const response = await fetch(url, { - method, - cache: 'no-store', - headers: { - 'Content-Type': 'application/json', - }, - body: - method !== 'GET' - ? JSON.stringify({ - query, - variables, - }) - : undefined, - }); - if (!response.ok) { - const { logger } = new ErrorHandler(); - logger(); - switch (response.status) { - case 400: - throw new ErrorHandler(response.statusText, { - statusCode: 400, - }); - case 403: - throw new ErrorHandler('Forbidden', { - statusCode: 403, - }); - case 404: - throw new ErrorHandler('Not found', { - statusCode: 404, - }); - case 422: - throw new ErrorHandler('Unprocessable entity', { - statusCode: 422, - }); - case 500: - throw new ErrorHandler('Internal server error', { - statusCode: 500, - }); - case 503: - logger(); - throw new ErrorHandler('Service unavailable', { - statusCode: 503, - }); - case 504: - throw new ErrorHandler('Gateway timeout', { - statusCode: 504, - }); - case 505: - throw new ErrorHandler('HTTP version not supported', { - statusCode: 505, - }); - default: - throw new ErrorHandler(response.statusText, { - statusCode: response.status, - }); - } - } - const data = await response.json(); - return data; - } catch (error: any) { - throw new ErrorHandler(error?.message, { - statusCode: error?.options?.statusCode, - }); - } -}; - -type Options = { - statusCode: number; -}; - -export class ErrorHandler extends Error { - constructor( - message?: string, - public options?: Options, - ) { - super(message); - this.name = 'ErrorHandler'; - this.options = options; - } - // this logger method should be used only on the server side to give some information when something goes wrong - logger() { - // eslint-disable-next-line no-console - console.log({ - message: this?.message, - statusCode: this?.options?.statusCode, - }); - } -} diff --git a/apps/kennisbank-frontend/src/util/getImageBaseUrl.ts b/apps/kennisbank-frontend/src/util/getImageBaseUrl.ts deleted file mode 100644 index b4c480c33..000000000 --- a/apps/kennisbank-frontend/src/util/getImageBaseUrl.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const getImageBaseUrl = () => { - if (!process.env.STRAPI_PUBLIC_URL) { - throw new Error('`STRAPI_PUBLIC_URL` is required to construct the image URL in the Markdown component.'); - } - const url = new URL(process.env.STRAPI_PUBLIC_URL); - return url?.origin; -}; diff --git a/apps/kennisbank-frontend/tsconfig.json b/apps/kennisbank-frontend/tsconfig.json deleted file mode 100644 index 0c7555fa7..000000000 --- a/apps/kennisbank-frontend/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/apps/overige-objecten-api/README.md b/apps/overige-objecten-api/README.md index 0ff766857..d3d75a90a 100644 --- a/apps/overige-objecten-api/README.md +++ b/apps/overige-objecten-api/README.md @@ -56,21 +56,21 @@ Then, follow these steps: 1. Build the project: ```shell - yarn build + pnpm build ``` 2. Start the PDC-dashboard server: ```shell - yarn workspace @frameless/pdc-dashboard dev + pnpm --filter @frameless/pdc-dashboard dev ``` 3. Start the overige-objecten-api server: ```shell - yarn workspace @frameless/overige-objecten-api dev + pnpm --filter @frameless/overige-objecten-api dev ``` diff --git a/apps/overige-objecten-api/eslint.config.mjs b/apps/overige-objecten-api/eslint.config.mjs new file mode 100644 index 000000000..0d92fee21 --- /dev/null +++ b/apps/overige-objecten-api/eslint.config.mjs @@ -0,0 +1,13 @@ +import { config } from '@frameless/eslint-config/base'; + +const customConfig = { + languageOptions: { + globals: { + URL: 'readonly', + process: 'readonly', + __dirname: 'readonly', + URLSearchParams: 'readonly', + }, + }, +}; +export default [...config, customConfig]; diff --git a/apps/overige-objecten-api/esm-loader.mjs b/apps/overige-objecten-api/esm-loader.mjs new file mode 100644 index 000000000..4999571ac --- /dev/null +++ b/apps/overige-objecten-api/esm-loader.mjs @@ -0,0 +1,11 @@ +// Node.js ESM loader that rewrites `classnames/bind` to `classnames/bind.js` at runtime. +// Required because @frameless/ui externalizes all deps in its Vite build, preserving the +// bare specifier in dist/index.esm.js which Node.js strict ESM cannot resolve. +// Equivalent to Next.js `transpilePackages` — fixes resolution without modifying the UI package. + +export const resolve = async (specifier, context, nextResolve) => { + if (specifier === 'classnames/bind') { + return nextResolve('classnames/bind.js', context); + } + return nextResolve(specifier, context); +}; diff --git a/apps/overige-objecten-api/global.d.ts b/apps/overige-objecten-api/global.d.ts index 0441f6ed0..1f6a84653 100644 --- a/apps/overige-objecten-api/global.d.ts +++ b/apps/overige-objecten-api/global.d.ts @@ -1,5 +1,4 @@ -import type { KennisartikelObject, VACObject } from '../types'; -import type { ErrorPageData } from '../types'; +import type { KennisartikelObject, VACObject, ErrorPageData } from '../types'; declare global { interface Window { __VAC_PREVIEW_DATA__: VACObject; diff --git a/apps/overige-objecten-api/gql/gql.ts b/apps/overige-objecten-api/gql/gql.ts new file mode 100644 index 000000000..c90ce50ca --- /dev/null +++ b/apps/overige-objecten-api/gql/gql.ts @@ -0,0 +1,97 @@ +/* eslint-disable */ +import * as types from './graphql'; +import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; + +/** + * Map of all GraphQL operations in the project. + * + * This map has several performance disadvantages: + * 1. It is not tree-shakeable, so it will include all operations in the project. + * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle. + * 3. It does not support dead code elimination, so it will add unused operations. + * + * Therefore it is highly recommended to use the babel or swc plugin for production. + */ +const documents = { + "\nquery getAllProducts(\n $locale: I18NLocaleCode\n $page: Int\n $pageSize: Int\n $start: Int\n $limit: Int\n) {\n products_connection(\n locale: $locale\n pagination: {\n start: $start\n limit: $limit\n page: $page\n pageSize: $pageSize\n }\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n id: documentId\n documentId\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n metaTags {\n keymatch\n title\n description\n }\n sections {\n __typename\n ... on ComponentComponentsContactInformationPublic {\n contact_information_public {\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n }\n }\n }\n ... on ComponentComponentsInternalBlockContent {\n id\n internal_field {\n title\n id: documentId\n contact_information_internal {\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n }\n }\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n keywords\n }\n }\n }\n ... on ComponentComponentsUtrechtRichText {\n id\n content\n kennisartikelCategorie\n }\n ... on ComponentComponentsUtrechtImage {\n categorie2: kennisartikelCategorie\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n categorie3: kennisartikelCategorie\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsUtrechtSpotlight {\n categorie4: kennisartikelCategorie\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n }\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n categorie6: kennisartikelCategorie\n column {\n id\n title\n logoButton {\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n categorie7: kennisartikelCategorie\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n categorie8: kennisartikelCategorie\n pdc_faq {\n title\n faq(pagination: { limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n categorie9: kennisartikelCategorie\n item(pagination: { limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n }\n }\n }\n price {\n price(pagination: { limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n }\n}\n": types.GetAllProductsDocument, + "\nquery getProductByUUIDOrDocumentId(\n $locale: I18NLocaleCode\n $uuid: String\n $documentId: ID\n $status: PublicationStatus\n) {\n products(\n locale: $locale\n filters: {\n or: [\n { uuid: { eq: $uuid } }\n { documentId: { eq: $documentId } }\n ]\n }\n status: $status\n ) {\n id: documentId\n publishedAt\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsContactInformationPublic {\n component: __typename\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n }\n ... on ComponentComponentsInternalBlockContent {\n component: __typename\n id\n internal_field {\n title\n id: documentId\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n content {\n id\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n keywords\n }\n }\n }\n # Merged RichText fragment to provide both original and aliased fields\n ... on ComponentComponentsUtrechtRichText {\n component: __typename\n id\n content\n kennisartikelCategorie\n categorie5: kennisartikelCategorie\n }\n ... on ComponentComponentsUtrechtImage {\n component: __typename\n categorie2: kennisartikelCategorie\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n component: __typename\n categorie3: kennisartikelCategorie\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsUtrechtSpotlight {\n component: __typename\n categorie4: kennisartikelCategorie\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n __typename\n }\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n component: __typename\n categorie6: kennisartikelCategorie\n column {\n id\n title\n logoButton {\n component: __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n component: __typename\n categorie7: kennisartikelCategorie\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n component: __typename\n categorie8: kennisartikelCategorie\n pdc_faq {\n title\n faq(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n component: __typename\n categorie9: kennisartikelCategorie\n item(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n component: __typename\n }\n }\n }\n price {\n price(pagination: { start: 0, limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n": types.GetProductByUuidOrDocumentIdDocument, + "\nquery getProductForUpdate(\n $locale: I18NLocaleCode\n $uuid: String\n $documentId: ID\n $status: PublicationStatus\n) {\n products(\n locale: $locale\n filters: {\n or: [\n { uuid: { eq: $uuid } }\n { documentId: { eq: $documentId } }\n ]\n }\n status: $status\n ) {\n id: documentId\n publishedAt\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsContactInformationPublic {\n component: __typename\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n content\n }\n }\n }\n ... on ComponentComponentsInternalBlockContent {\n component: __typename\n internal_field {\n title\n id: documentId\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n content\n }\n }\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n keywords\n }\n }\n }\n # Merged RichText fragment to provide both original and aliased fields\n ... on ComponentComponentsUtrechtRichText {\n component: __typename\n content\n kennisartikelCategorie\n categorie5: kennisartikelCategorie\n }\n ... on ComponentComponentsUtrechtImage {\n component: __typename\n categorie2: kennisartikelCategorie\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n component: __typename\n categorie3: kennisartikelCategorie\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsUtrechtSpotlight {\n component: __typename\n categorie4: kennisartikelCategorie\n content\n type\n logoButton {\n label\n href\n textContent\n logo\n appearance\n __typename\n }\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n component: __typename\n categorie6: kennisartikelCategorie\n column {\n title\n logoButton {\n component: __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n component: __typename\n categorie7: kennisartikelCategorie\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n component: __typename\n categorie8: kennisartikelCategorie\n pdc_faq {\n title\n faq(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n component: __typename\n categorie9: kennisartikelCategorie\n item(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n label\n }\n }\n }\n additional_information {\n content {\n uuid\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n component: __typename\n }\n }\n }\n price {\n price(pagination: { start: 0, limit: -1 }) {\n currency\n label\n uuid\n value\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n": types.GetProductForUpdateDocument, + "\nquery getInternalFields($uuid: String) {\n internalFields(filters: { content: { uuid: { eq: $uuid } } }) {\n id: documentId\n title\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n}\n": types.GetInternalFieldsDocument, + "\nmutation createInternalField($data: InternalFieldInput!) {\n createInternalField(data: $data) {\n id: documentId\n title\n content {\n id\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n}\n": types.CreateInternalFieldDocument, + "\nmutation updateInternalField($data: InternalFieldInput!, $id: ID!) {\n updateInternalField(data: $data, documentId: $id) {\n content {\n id\n uuid\n contentBlock {\n content\n }\n }\n }\n}\n": types.UpdateInternalFieldDocument, + "\nmutation createKennisartikel($data: ProductInput!, $locale: I18NLocaleCode) {\n createProduct(data: $data, locale: $locale) {\n id: documentId\n content\n title\n slug\n uuid\n updatedAt\n createdAt\n locale\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsUtrechtRichText {\n id\n content\n kennisartikelCategorie\n component: __typename\n }\n ... on ComponentComponentsInternalBlockContent {\n id\n component: __typename\n internal_field {\n title\n id: documentId\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n }\n }\n price {\n price(pagination: { limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n }\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n": types.CreateKennisartikelDocument, + "\nmutation updateKennisartikel($data: ProductInput!, $locale: I18NLocaleCode, $id: ID!) {\n updateProduct(data: $data, locale: $locale, documentId: $id) {\n id: documentId\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n locale\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsUtrechtRichText {\n id\n content\n kennisartikelCategorie\n component: __typename\n }\n ... on ComponentComponentsInternalBlockContent {\n id\n component: __typename\n internal_field {\n title\n id: documentId\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n }\n }\n price {\n price(pagination: { limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n }\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n": types.UpdateKennisartikelDocument, + "\nquery getAllVacItems($page: Int, $pageSize: Int, $start: Int, $limit: Int) {\n vacs_connection(\n pagination: {\n start: $start\n limit: $limit\n page: $page\n pageSize: $pageSize\n }\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n id: documentId\n createdAt\n updatedAt\n title\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n relatedVACs(pagination: { start: 0, limit: -1 }) {\n vac {\n uuid\n }\n }\n relatedProducts(pagination: { start: 0, limit: -1 }) {\n uuid\n title\n }\n\n vac {\n uuid\n vraag\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n afdelingen {\n afdelingId\n afdelingNaam\n }\n toelichting\n keywords\n }\n }\n }\n}\n\n": types.GetAllVacItemsDocument, + "\nquery getVacItemByUUIDOrDocumentId(\n $uuid: String\n $documentId: ID\n $status: PublicationStatus\n) {\n vacs(\n filters: {\n or: [\n { vac: { uuid: { eq: $uuid } } }\n { documentId: { eq: $documentId } }\n ]\n }\n status: $status\n ) {\n id: documentId\n createdAt\n updatedAt\n publishedAt\n title\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n relatedVACs(pagination: { start: 0, limit: -1 }) {\n vac {\n uuid\n }\n }\n relatedProducts(pagination: { start: 0, limit: -1 }) {\n uuid\n title\n }\n vac {\n uuid\n vraag\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n afdelingen {\n afdelingId\n afdelingNaam\n }\n toelichting\n keywords\n }\n }\n}\n": types.GetVacItemByUuidOrDocumentIdDocument, + "\n mutation createVac($data: VacInput!) {\n createVac(data: $data) {\n id: documentId\n createdAt\n publishedAt\n title\n vac {\n id\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n uuid\n toelichting\n afdelingen {\n afdelingId\n afdelingNaam\n }\n keywords\n }\n }\n}\n": types.CreateVacDocument, + "\nmutation updateVac($data: VacInput!, $id: ID!) {\n updateVac(documentId: $id, data: $data) {\n id: documentId\n createdAt\n publishedAt\n title\n vac {\n id\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n uuid\n toelichting\n afdelingen {\n afdelingId\n afdelingNaam\n }\n keywords\n }\n }\n}\n": types.UpdateVacDocument, +}; + +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + * + * + * @example + * ```ts + * const query = graphql(`query GetUser($id: ID!) { user(id: $id) { name } }`); + * ``` + * + * The query argument is unknown! + * Please regenerate the types. + */ +export function graphql(source: string): unknown; + +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getAllProducts(\n $locale: I18NLocaleCode\n $page: Int\n $pageSize: Int\n $start: Int\n $limit: Int\n) {\n products_connection(\n locale: $locale\n pagination: {\n start: $start\n limit: $limit\n page: $page\n pageSize: $pageSize\n }\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n id: documentId\n documentId\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n metaTags {\n keymatch\n title\n description\n }\n sections {\n __typename\n ... on ComponentComponentsContactInformationPublic {\n contact_information_public {\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n }\n }\n }\n ... on ComponentComponentsInternalBlockContent {\n id\n internal_field {\n title\n id: documentId\n contact_information_internal {\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n }\n }\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n keywords\n }\n }\n }\n ... on ComponentComponentsUtrechtRichText {\n id\n content\n kennisartikelCategorie\n }\n ... on ComponentComponentsUtrechtImage {\n categorie2: kennisartikelCategorie\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n categorie3: kennisartikelCategorie\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsUtrechtSpotlight {\n categorie4: kennisartikelCategorie\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n }\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n categorie6: kennisartikelCategorie\n column {\n id\n title\n logoButton {\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n categorie7: kennisartikelCategorie\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n categorie8: kennisartikelCategorie\n pdc_faq {\n title\n faq(pagination: { limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n categorie9: kennisartikelCategorie\n item(pagination: { limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n }\n }\n }\n price {\n price(pagination: { limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n }\n}\n"): (typeof documents)["\nquery getAllProducts(\n $locale: I18NLocaleCode\n $page: Int\n $pageSize: Int\n $start: Int\n $limit: Int\n) {\n products_connection(\n locale: $locale\n pagination: {\n start: $start\n limit: $limit\n page: $page\n pageSize: $pageSize\n }\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n id: documentId\n documentId\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n metaTags {\n keymatch\n title\n description\n }\n sections {\n __typename\n ... on ComponentComponentsContactInformationPublic {\n contact_information_public {\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n }\n }\n }\n ... on ComponentComponentsInternalBlockContent {\n id\n internal_field {\n title\n id: documentId\n contact_information_internal {\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n }\n }\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n keywords\n }\n }\n }\n ... on ComponentComponentsUtrechtRichText {\n id\n content\n kennisartikelCategorie\n }\n ... on ComponentComponentsUtrechtImage {\n categorie2: kennisartikelCategorie\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n categorie3: kennisartikelCategorie\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsUtrechtSpotlight {\n categorie4: kennisartikelCategorie\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n }\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n categorie6: kennisartikelCategorie\n column {\n id\n title\n logoButton {\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n categorie7: kennisartikelCategorie\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n categorie8: kennisartikelCategorie\n pdc_faq {\n title\n faq(pagination: { limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n categorie9: kennisartikelCategorie\n item(pagination: { limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n }\n }\n }\n price {\n price(pagination: { limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getProductByUUIDOrDocumentId(\n $locale: I18NLocaleCode\n $uuid: String\n $documentId: ID\n $status: PublicationStatus\n) {\n products(\n locale: $locale\n filters: {\n or: [\n { uuid: { eq: $uuid } }\n { documentId: { eq: $documentId } }\n ]\n }\n status: $status\n ) {\n id: documentId\n publishedAt\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsContactInformationPublic {\n component: __typename\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n }\n ... on ComponentComponentsInternalBlockContent {\n component: __typename\n id\n internal_field {\n title\n id: documentId\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n content {\n id\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n keywords\n }\n }\n }\n # Merged RichText fragment to provide both original and aliased fields\n ... on ComponentComponentsUtrechtRichText {\n component: __typename\n id\n content\n kennisartikelCategorie\n categorie5: kennisartikelCategorie\n }\n ... on ComponentComponentsUtrechtImage {\n component: __typename\n categorie2: kennisartikelCategorie\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n component: __typename\n categorie3: kennisartikelCategorie\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsUtrechtSpotlight {\n component: __typename\n categorie4: kennisartikelCategorie\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n __typename\n }\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n component: __typename\n categorie6: kennisartikelCategorie\n column {\n id\n title\n logoButton {\n component: __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n component: __typename\n categorie7: kennisartikelCategorie\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n component: __typename\n categorie8: kennisartikelCategorie\n pdc_faq {\n title\n faq(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n component: __typename\n categorie9: kennisartikelCategorie\n item(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n component: __typename\n }\n }\n }\n price {\n price(pagination: { start: 0, limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n"): (typeof documents)["\nquery getProductByUUIDOrDocumentId(\n $locale: I18NLocaleCode\n $uuid: String\n $documentId: ID\n $status: PublicationStatus\n) {\n products(\n locale: $locale\n filters: {\n or: [\n { uuid: { eq: $uuid } }\n { documentId: { eq: $documentId } }\n ]\n }\n status: $status\n ) {\n id: documentId\n publishedAt\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsContactInformationPublic {\n component: __typename\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n }\n ... on ComponentComponentsInternalBlockContent {\n component: __typename\n id\n internal_field {\n title\n id: documentId\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n content {\n id\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n keywords\n }\n }\n }\n # Merged RichText fragment to provide both original and aliased fields\n ... on ComponentComponentsUtrechtRichText {\n component: __typename\n id\n content\n kennisartikelCategorie\n categorie5: kennisartikelCategorie\n }\n ... on ComponentComponentsUtrechtImage {\n component: __typename\n categorie2: kennisartikelCategorie\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n component: __typename\n categorie3: kennisartikelCategorie\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsUtrechtSpotlight {\n component: __typename\n categorie4: kennisartikelCategorie\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n __typename\n }\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n component: __typename\n categorie6: kennisartikelCategorie\n column {\n id\n title\n logoButton {\n component: __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n component: __typename\n categorie7: kennisartikelCategorie\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n component: __typename\n categorie8: kennisartikelCategorie\n pdc_faq {\n title\n faq(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n component: __typename\n categorie9: kennisartikelCategorie\n item(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n component: __typename\n }\n }\n }\n price {\n price(pagination: { start: 0, limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getProductForUpdate(\n $locale: I18NLocaleCode\n $uuid: String\n $documentId: ID\n $status: PublicationStatus\n) {\n products(\n locale: $locale\n filters: {\n or: [\n { uuid: { eq: $uuid } }\n { documentId: { eq: $documentId } }\n ]\n }\n status: $status\n ) {\n id: documentId\n publishedAt\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsContactInformationPublic {\n component: __typename\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n content\n }\n }\n }\n ... on ComponentComponentsInternalBlockContent {\n component: __typename\n internal_field {\n title\n id: documentId\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n content\n }\n }\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n keywords\n }\n }\n }\n # Merged RichText fragment to provide both original and aliased fields\n ... on ComponentComponentsUtrechtRichText {\n component: __typename\n content\n kennisartikelCategorie\n categorie5: kennisartikelCategorie\n }\n ... on ComponentComponentsUtrechtImage {\n component: __typename\n categorie2: kennisartikelCategorie\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n component: __typename\n categorie3: kennisartikelCategorie\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsUtrechtSpotlight {\n component: __typename\n categorie4: kennisartikelCategorie\n content\n type\n logoButton {\n label\n href\n textContent\n logo\n appearance\n __typename\n }\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n component: __typename\n categorie6: kennisartikelCategorie\n column {\n title\n logoButton {\n component: __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n component: __typename\n categorie7: kennisartikelCategorie\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n component: __typename\n categorie8: kennisartikelCategorie\n pdc_faq {\n title\n faq(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n component: __typename\n categorie9: kennisartikelCategorie\n item(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n label\n }\n }\n }\n additional_information {\n content {\n uuid\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n component: __typename\n }\n }\n }\n price {\n price(pagination: { start: 0, limit: -1 }) {\n currency\n label\n uuid\n value\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n"): (typeof documents)["\nquery getProductForUpdate(\n $locale: I18NLocaleCode\n $uuid: String\n $documentId: ID\n $status: PublicationStatus\n) {\n products(\n locale: $locale\n filters: {\n or: [\n { uuid: { eq: $uuid } }\n { documentId: { eq: $documentId } }\n ]\n }\n status: $status\n ) {\n id: documentId\n publishedAt\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsContactInformationPublic {\n component: __typename\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n content\n }\n }\n }\n ... on ComponentComponentsInternalBlockContent {\n component: __typename\n internal_field {\n title\n id: documentId\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n content\n }\n }\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n keywords\n }\n }\n }\n # Merged RichText fragment to provide both original and aliased fields\n ... on ComponentComponentsUtrechtRichText {\n component: __typename\n content\n kennisartikelCategorie\n categorie5: kennisartikelCategorie\n }\n ... on ComponentComponentsUtrechtImage {\n component: __typename\n categorie2: kennisartikelCategorie\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n component: __typename\n categorie3: kennisartikelCategorie\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsUtrechtSpotlight {\n component: __typename\n categorie4: kennisartikelCategorie\n content\n type\n logoButton {\n label\n href\n textContent\n logo\n appearance\n __typename\n }\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n component: __typename\n categorie6: kennisartikelCategorie\n column {\n title\n logoButton {\n component: __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n component: __typename\n categorie7: kennisartikelCategorie\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n component: __typename\n categorie8: kennisartikelCategorie\n pdc_faq {\n title\n faq(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n component: __typename\n categorie9: kennisartikelCategorie\n item(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n label\n }\n }\n }\n additional_information {\n content {\n uuid\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n component: __typename\n }\n }\n }\n price {\n price(pagination: { start: 0, limit: -1 }) {\n currency\n label\n uuid\n value\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getInternalFields($uuid: String) {\n internalFields(filters: { content: { uuid: { eq: $uuid } } }) {\n id: documentId\n title\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n}\n"): (typeof documents)["\nquery getInternalFields($uuid: String) {\n internalFields(filters: { content: { uuid: { eq: $uuid } } }) {\n id: documentId\n title\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nmutation createInternalField($data: InternalFieldInput!) {\n createInternalField(data: $data) {\n id: documentId\n title\n content {\n id\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n}\n"): (typeof documents)["\nmutation createInternalField($data: InternalFieldInput!) {\n createInternalField(data: $data) {\n id: documentId\n title\n content {\n id\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nmutation updateInternalField($data: InternalFieldInput!, $id: ID!) {\n updateInternalField(data: $data, documentId: $id) {\n content {\n id\n uuid\n contentBlock {\n content\n }\n }\n }\n}\n"): (typeof documents)["\nmutation updateInternalField($data: InternalFieldInput!, $id: ID!) {\n updateInternalField(data: $data, documentId: $id) {\n content {\n id\n uuid\n contentBlock {\n content\n }\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nmutation createKennisartikel($data: ProductInput!, $locale: I18NLocaleCode) {\n createProduct(data: $data, locale: $locale) {\n id: documentId\n content\n title\n slug\n uuid\n updatedAt\n createdAt\n locale\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsUtrechtRichText {\n id\n content\n kennisartikelCategorie\n component: __typename\n }\n ... on ComponentComponentsInternalBlockContent {\n id\n component: __typename\n internal_field {\n title\n id: documentId\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n }\n }\n price {\n price(pagination: { limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n }\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n"): (typeof documents)["\nmutation createKennisartikel($data: ProductInput!, $locale: I18NLocaleCode) {\n createProduct(data: $data, locale: $locale) {\n id: documentId\n content\n title\n slug\n uuid\n updatedAt\n createdAt\n locale\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsUtrechtRichText {\n id\n content\n kennisartikelCategorie\n component: __typename\n }\n ... on ComponentComponentsInternalBlockContent {\n id\n component: __typename\n internal_field {\n title\n id: documentId\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n }\n }\n price {\n price(pagination: { limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n }\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nmutation updateKennisartikel($data: ProductInput!, $locale: I18NLocaleCode, $id: ID!) {\n updateProduct(data: $data, locale: $locale, documentId: $id) {\n id: documentId\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n locale\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsUtrechtRichText {\n id\n content\n kennisartikelCategorie\n component: __typename\n }\n ... on ComponentComponentsInternalBlockContent {\n id\n component: __typename\n internal_field {\n title\n id: documentId\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n }\n }\n price {\n price(pagination: { limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n }\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n"): (typeof documents)["\nmutation updateKennisartikel($data: ProductInput!, $locale: I18NLocaleCode, $id: ID!) {\n updateProduct(data: $data, locale: $locale, documentId: $id) {\n id: documentId\n content\n title\n slug\n uuid\n locale\n updatedAt\n createdAt\n locale\n metaTags {\n keymatch\n title\n description\n }\n sections {\n ... on ComponentComponentsUtrechtRichText {\n id\n content\n kennisartikelCategorie\n component: __typename\n }\n ... on ComponentComponentsInternalBlockContent {\n id\n component: __typename\n internal_field {\n title\n id: documentId\n content {\n uuid\n contentBlock {\n content\n kennisartikelCategorie\n }\n }\n }\n }\n }\n price {\n price(pagination: { limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n additional_information {\n content {\n id\n uuid\n contentBlock(pagination: { limit: -1 }) {\n id\n content\n categorie10: kennisartikelCategorie\n }\n }\n }\n kennisartikelMetadata {\n uuid\n doelgroep\n productAanwezig\n productValtOnder\n afdelingen {\n afdelingId\n afdelingNaam\n }\n verantwoordelijkeOrganisatie {\n owmsIdentifier\n owmsPrefLabel\n owmsEndDate\n }\n upnUri\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getAllVacItems($page: Int, $pageSize: Int, $start: Int, $limit: Int) {\n vacs_connection(\n pagination: {\n start: $start\n limit: $limit\n page: $page\n pageSize: $pageSize\n }\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n id: documentId\n createdAt\n updatedAt\n title\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n relatedVACs(pagination: { start: 0, limit: -1 }) {\n vac {\n uuid\n }\n }\n relatedProducts(pagination: { start: 0, limit: -1 }) {\n uuid\n title\n }\n\n vac {\n uuid\n vraag\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n afdelingen {\n afdelingId\n afdelingNaam\n }\n toelichting\n keywords\n }\n }\n }\n}\n\n"): (typeof documents)["\nquery getAllVacItems($page: Int, $pageSize: Int, $start: Int, $limit: Int) {\n vacs_connection(\n pagination: {\n start: $start\n limit: $limit\n page: $page\n pageSize: $pageSize\n }\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n id: documentId\n createdAt\n updatedAt\n title\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n relatedVACs(pagination: { start: 0, limit: -1 }) {\n vac {\n uuid\n }\n }\n relatedProducts(pagination: { start: 0, limit: -1 }) {\n uuid\n title\n }\n\n vac {\n uuid\n vraag\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n afdelingen {\n afdelingId\n afdelingNaam\n }\n toelichting\n keywords\n }\n }\n }\n}\n\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getVacItemByUUIDOrDocumentId(\n $uuid: String\n $documentId: ID\n $status: PublicationStatus\n) {\n vacs(\n filters: {\n or: [\n { vac: { uuid: { eq: $uuid } } }\n { documentId: { eq: $documentId } }\n ]\n }\n status: $status\n ) {\n id: documentId\n createdAt\n updatedAt\n publishedAt\n title\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n relatedVACs(pagination: { start: 0, limit: -1 }) {\n vac {\n uuid\n }\n }\n relatedProducts(pagination: { start: 0, limit: -1 }) {\n uuid\n title\n }\n vac {\n uuid\n vraag\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n afdelingen {\n afdelingId\n afdelingNaam\n }\n toelichting\n keywords\n }\n }\n}\n"): (typeof documents)["\nquery getVacItemByUUIDOrDocumentId(\n $uuid: String\n $documentId: ID\n $status: PublicationStatus\n) {\n vacs(\n filters: {\n or: [\n { vac: { uuid: { eq: $uuid } } }\n { documentId: { eq: $documentId } }\n ]\n }\n status: $status\n ) {\n id: documentId\n createdAt\n updatedAt\n publishedAt\n title\n contact_information_internal {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n relatedVACs(pagination: { start: 0, limit: -1 }) {\n vac {\n uuid\n }\n }\n relatedProducts(pagination: { start: 0, limit: -1 }) {\n uuid\n title\n }\n vac {\n uuid\n vraag\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n afdelingen {\n afdelingId\n afdelingNaam\n }\n toelichting\n keywords\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n mutation createVac($data: VacInput!) {\n createVac(data: $data) {\n id: documentId\n createdAt\n publishedAt\n title\n vac {\n id\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n uuid\n toelichting\n afdelingen {\n afdelingId\n afdelingNaam\n }\n keywords\n }\n }\n}\n"): (typeof documents)["\n mutation createVac($data: VacInput!) {\n createVac(data: $data) {\n id: documentId\n createdAt\n publishedAt\n title\n vac {\n id\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n uuid\n toelichting\n afdelingen {\n afdelingId\n afdelingNaam\n }\n keywords\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nmutation updateVac($data: VacInput!, $id: ID!) {\n updateVac(documentId: $id, data: $data) {\n id: documentId\n createdAt\n publishedAt\n title\n vac {\n id\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n uuid\n toelichting\n afdelingen {\n afdelingId\n afdelingNaam\n }\n keywords\n }\n }\n}\n"): (typeof documents)["\nmutation updateVac($data: VacInput!, $id: ID!) {\n updateVac(documentId: $id, data: $data) {\n id: documentId\n createdAt\n publishedAt\n title\n vac {\n id\n antwoord(pagination: { start: 0, limit: -1 }) {\n content\n kennisartikelCategorie\n }\n status\n doelgroep\n uuid\n toelichting\n afdelingen {\n afdelingId\n afdelingNaam\n }\n keywords\n }\n }\n}\n"]; + +export function graphql(source: string) { + return (documents as any)[source] ?? {}; +} + +export type DocumentType> = TDocumentNode extends DocumentNode< infer TType, any> ? TType : never; \ No newline at end of file diff --git a/apps/overige-objecten-api/gql/graphql.ts b/apps/overige-objecten-api/gql/graphql.ts new file mode 100644 index 000000000..1d6481d0f --- /dev/null +++ b/apps/overige-objecten-api/gql/graphql.ts @@ -0,0 +1,4055 @@ +/* eslint-disable */ +import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type MakeEmpty = { [_ in K]?: never }; +export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string; } + String: { input: string; output: string; } + Boolean: { input: boolean; output: boolean; } + Int: { input: number; output: number; } + Float: { input: number; output: number; } + /** A date string, such as 2007-12-03, compliant with the `full-date` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ + Date: { input: any; output: any; } + /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ + DateTime: { input: any; output: any; } + /** A string used to identify an i18n locale */ + I18NLocaleCode: { input: any; output: any; } + /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */ + JSON: { input: any; output: any; } + PdcHomePageComponentsDynamicZoneInput: { input: any; output: any; } + PdcTemplateSectionsDynamicZoneInput: { input: any; output: any; } + ProductSectionsDynamicZoneInput: { input: any; output: any; } +}; + +export type AdditionalInformation = { + content?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + product?: Maybe; + publishedAt?: Maybe; + title: Scalars['String']['output']; + updatedAt?: Maybe; +}; + +export type AdditionalInformationEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type AdditionalInformationFiltersInput = { + and?: InputMaybe>>; + content?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + product?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type AdditionalInformationInput = { + content?: InputMaybe; + product?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; +}; + +export type BooleanFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type ComponentComponentsAdditionalInformation = { + additional_information?: Maybe; + id: Scalars['ID']['output']; +}; + +export type ComponentComponentsAdditionalInformationField = { + contentBlock?: Maybe>>; + id: Scalars['ID']['output']; + uuid?: Maybe; +}; + + +export type ComponentComponentsAdditionalInformationFieldContentBlockArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsAdditionalInformationFieldFiltersInput = { + and?: InputMaybe>>; + contentBlock?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + uuid?: InputMaybe; +}; + +export type ComponentComponentsAdditionalInformationFieldInput = { + contentBlock?: InputMaybe>>; + id?: InputMaybe; + uuid?: InputMaybe; +}; + +export type ComponentComponentsAfdelingen = { + afdelingId: Scalars['String']['output']; + afdelingNaam: Scalars['String']['output']; + id: Scalars['ID']['output']; +}; + +export type ComponentComponentsAfdelingenFiltersInput = { + afdelingId?: InputMaybe; + afdelingNaam?: InputMaybe; + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ComponentComponentsAfdelingenInput = { + afdelingId?: InputMaybe; + afdelingNaam?: InputMaybe; + id?: InputMaybe; +}; + +export type ComponentComponentsAntwoord = { + content?: Maybe; + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; + label?: Maybe; +}; + +export type ComponentComponentsAntwoordFiltersInput = { + and?: InputMaybe>>; + content?: InputMaybe; + kennisartikelCategorie?: InputMaybe; + label?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ComponentComponentsAntwoordInput = { + content?: InputMaybe; + id?: InputMaybe; + kennisartikelCategorie?: InputMaybe; + label?: InputMaybe; +}; + +export type ComponentComponentsAudience = { + id: Scalars['ID']['output']; + type: Enum_Componentcomponentsaudience_Type; +}; + +export type ComponentComponentsAudienceFiltersInput = { + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; + type?: InputMaybe; +}; + +export type ComponentComponentsAudienceInput = { + id?: InputMaybe; + type?: InputMaybe; +}; + +export type ComponentComponentsCatalogiMeta = { + abstract: Scalars['String']['output']; + audience: Array>; + authority: ComponentComponentsSpatial; + id: Scalars['ID']['output']; + onlineRequest: ComponentComponentsOnlineRequest; + spatial: ComponentComponentsSpatial; +}; + + +export type ComponentComponentsCatalogiMetaAudienceArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsCatalogiMetaFiltersInput = { + abstract?: InputMaybe; + and?: InputMaybe>>; + audience?: InputMaybe; + authority?: InputMaybe; + not?: InputMaybe; + onlineRequest?: InputMaybe; + or?: InputMaybe>>; + spatial?: InputMaybe; +}; + +export type ComponentComponentsCatalogiMetaInput = { + abstract?: InputMaybe; + audience?: InputMaybe>>; + authority?: InputMaybe; + id?: InputMaybe; + onlineRequest?: InputMaybe; + spatial?: InputMaybe; +}; + +export type ComponentComponentsCimPdcProductAspectBeschrijving = { + id: Scalars['ID']['output']; + onderwerp?: Maybe; + uitleg: Scalars['String']['output']; +}; + +export type ComponentComponentsCimPdcProductAspectBeschrijvingFiltersInput = { + and?: InputMaybe>>; + not?: InputMaybe; + onderwerp?: InputMaybe; + or?: InputMaybe>>; + uitleg?: InputMaybe; +}; + +export type ComponentComponentsCimPdcProductAspectBeschrijvingInput = { + id?: InputMaybe; + onderwerp?: InputMaybe; + uitleg?: InputMaybe; +}; + +export type ComponentComponentsCimPdcProductBeschrijving = { + cimPdcProductAspectBeschrijving?: Maybe>>; + id: Scalars['ID']['output']; + omschrijving?: Maybe; + productNaam?: Maybe; + taal: Scalars['String']['output']; + trefwoord?: Maybe; +}; + + +export type ComponentComponentsCimPdcProductBeschrijvingCimPdcProductAspectBeschrijvingArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsCimPdcProductBeschrijvingFiltersInput = { + and?: InputMaybe>>; + cimPdcProductAspectBeschrijving?: InputMaybe; + not?: InputMaybe; + omschrijving?: InputMaybe; + or?: InputMaybe>>; + productNaam?: InputMaybe; + taal?: InputMaybe; + trefwoord?: InputMaybe; +}; + +export type ComponentComponentsCimPdcProductBeschrijvingInput = { + cimPdcProductAspectBeschrijving?: InputMaybe>>; + id?: InputMaybe; + omschrijving?: InputMaybe; + productNaam?: InputMaybe; + taal?: InputMaybe; + trefwoord?: InputMaybe; +}; + +export type ComponentComponentsCimPdcProductMetadata = { + afnemer?: Maybe; + beoogdResultaat?: Maybe; + bestelwijze?: Maybe; + cimPdcProductBeschrijving?: Maybe>>; + doelgroep?: Maybe; + eigenaar?: Maybe; + grondslag?: Maybe; + id: Scalars['ID']['output']; + productCode?: Maybe; + servicetermijn?: Maybe; + soortBevoegdGezag?: Maybe; + soortTaak?: Maybe; + uitvoeringsorganisatie?: Maybe; + uplProductNaam?: Maybe; + wettelijkeTermijn?: Maybe; +}; + + +export type ComponentComponentsCimPdcProductMetadataCimPdcProductBeschrijvingArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsCimPdcProductMetadataFiltersInput = { + afnemer?: InputMaybe; + and?: InputMaybe>>; + beoogdResultaat?: InputMaybe; + bestelwijze?: InputMaybe; + cimPdcProductBeschrijving?: InputMaybe; + doelgroep?: InputMaybe; + eigenaar?: InputMaybe; + grondslag?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + productCode?: InputMaybe; + servicetermijn?: InputMaybe; + soortBevoegdGezag?: InputMaybe; + soortTaak?: InputMaybe; + uitvoeringsorganisatie?: InputMaybe; + uplProductNaam?: InputMaybe; + wettelijkeTermijn?: InputMaybe; +}; + +export type ComponentComponentsCimPdcProductMetadataInput = { + afnemer?: InputMaybe; + beoogdResultaat?: InputMaybe; + bestelwijze?: InputMaybe; + cimPdcProductBeschrijving?: InputMaybe>>; + doelgroep?: InputMaybe; + eigenaar?: InputMaybe; + grondslag?: InputMaybe; + id?: InputMaybe; + productCode?: InputMaybe; + servicetermijn?: InputMaybe; + soortBevoegdGezag?: InputMaybe; + soortTaak?: InputMaybe; + uitvoeringsorganisatie?: InputMaybe; + uplProductNaam?: InputMaybe; + wettelijkeTermijn?: InputMaybe; +}; + +export type ComponentComponentsContact = { + id: Scalars['ID']['output']; +}; + +export type ComponentComponentsContactInformationPublic = { + contact_information_public?: Maybe; + id: Scalars['ID']['output']; +}; + +export type ComponentComponentsContactInformationRichText = { + content: Scalars['String']['output']; + id: Scalars['ID']['output']; + label?: Maybe; +}; + +export type ComponentComponentsContactInformationRichTextFiltersInput = { + and?: InputMaybe>>; + content?: InputMaybe; + label?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ComponentComponentsContactInformationRichTextInput = { + content?: InputMaybe; + id?: InputMaybe; + label?: InputMaybe; +}; + +export type ComponentComponentsEForm = { + id: Scalars['ID']['output']; +}; + +export type ComponentComponentsFaq = { + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; + pdc_faq?: Maybe; +}; + +export type ComponentComponentsFloLegalForm = { + floLegalFormSelector?: Maybe; + id: Scalars['ID']['output']; +}; + +export type ComponentComponentsInternalBlockContent = { + id: Scalars['ID']['output']; + internal_field?: Maybe; +}; + +export type ComponentComponentsInternalContentBlock = { + id: Scalars['ID']['output']; +}; + +export type ComponentComponentsInternalContentBlockComponent = { + content?: Maybe; + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; +}; + +export type ComponentComponentsInternalField = { + contentBlock?: Maybe>>; + id: Scalars['ID']['output']; + keywords?: Maybe; + uuid?: Maybe; +}; + + +export type ComponentComponentsInternalFieldContentBlockArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsInternalFieldFiltersInput = { + and?: InputMaybe>>; + contentBlock?: InputMaybe; + keywords?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + uuid?: InputMaybe; +}; + +export type ComponentComponentsInternalFieldInput = { + contentBlock?: InputMaybe>>; + id?: InputMaybe; + keywords?: InputMaybe; + uuid?: InputMaybe; +}; + +export type ComponentComponentsKennisartikel = { + afdelingen?: Maybe>>; + doelgroep: Enum_Componentcomponentskennisartikel_Doelgroep; + id: Scalars['ID']['output']; + productAanwezig: Scalars['Boolean']['output']; + productValtOnder?: Maybe; + upnUri: Scalars['String']['output']; + uuid?: Maybe; + verantwoordelijkeOrganisatie?: Maybe; +}; + + +export type ComponentComponentsKennisartikelAfdelingenArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsKennisartikelFiltersInput = { + afdelingen?: InputMaybe; + and?: InputMaybe>>; + doelgroep?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + productAanwezig?: InputMaybe; + productValtOnder?: InputMaybe; + upnUri?: InputMaybe; + uuid?: InputMaybe; + verantwoordelijkeOrganisatie?: InputMaybe; +}; + +export type ComponentComponentsKennisartikelInput = { + afdelingen?: InputMaybe>>; + doelgroep?: InputMaybe; + id?: InputMaybe; + productAanwezig?: InputMaybe; + productValtOnder?: InputMaybe; + upnUri?: InputMaybe; + uuid?: InputMaybe; + verantwoordelijkeOrganisatie?: InputMaybe; +}; + +export type ComponentComponentsMetadata = { + eForm?: Maybe; + id: Scalars['ID']['output']; +}; + +export type ComponentComponentsOnlineRequest = { + id: Scalars['ID']['output']; + type: Enum_Componentcomponentsonlinerequest_Type; +}; + +export type ComponentComponentsOnlineRequestFiltersInput = { + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; + type?: InputMaybe; +}; + +export type ComponentComponentsOnlineRequestInput = { + id?: InputMaybe; + type?: InputMaybe; +}; + +export type ComponentComponentsPrice = { + currency: Enum_Componentcomponentsprice_Currency; + id: Scalars['ID']['output']; + label: Scalars['String']['output']; + uuid?: Maybe; + value: Scalars['Float']['output']; +}; + +export type ComponentComponentsPriceFiltersInput = { + and?: InputMaybe>>; + currency?: InputMaybe; + label?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + uuid?: InputMaybe; + value?: InputMaybe; +}; + +export type ComponentComponentsPriceInput = { + currency?: InputMaybe; + id?: InputMaybe; + label?: InputMaybe; + uuid?: InputMaybe; + value?: InputMaybe; +}; + +export type ComponentComponentsSpatial = { + id: Scalars['ID']['output']; + resourceIdentifier?: Maybe; + scheme: Scalars['String']['output']; +}; + +export type ComponentComponentsSpatialFiltersInput = { + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; + resourceIdentifier?: InputMaybe; + scheme?: InputMaybe; +}; + +export type ComponentComponentsSpatialInput = { + id?: InputMaybe; + resourceIdentifier?: InputMaybe; + scheme?: InputMaybe; +}; + +export type ComponentComponentsTrackingScripts = { + enabled?: Maybe; + id: Scalars['ID']['output']; + slug?: Maybe; +}; + +export type ComponentComponentsTrackingScriptsFiltersInput = { + and?: InputMaybe>>; + enabled?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + slug?: InputMaybe; +}; + +export type ComponentComponentsTrackingScriptsInput = { + enabled?: InputMaybe; + id?: InputMaybe; + slug?: InputMaybe; +}; + +export type ComponentComponentsTrefwoorden = { + id: Scalars['ID']['output']; + trefwoord?: Maybe; +}; + +export type ComponentComponentsTrefwoordenFiltersInput = { + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; + trefwoord?: InputMaybe; +}; + +export type ComponentComponentsTriggerMatomoScript = { + id: Scalars['ID']['output']; + title?: Maybe; + trackingScripts?: Maybe>>; +}; + + +export type ComponentComponentsTriggerMatomoScriptTrackingScriptsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsTriggerMatomoScriptInput = { + id?: InputMaybe; + title?: InputMaybe; + trackingScripts?: InputMaybe>>; +}; + +export type ComponentComponentsUrl = { + id: Scalars['ID']['output']; + value?: Maybe; +}; + +export type ComponentComponentsUtrechtAccordion = { + id: Scalars['ID']['output']; + item?: Maybe>>; + kennisartikelCategorie?: Maybe; +}; + + +export type ComponentComponentsUtrechtAccordionItemArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtAccordionSection = { + body?: Maybe; + headingLevel?: Maybe; + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; + label?: Maybe; +}; + +export type ComponentComponentsUtrechtAccordionSectionFiltersInput = { + and?: InputMaybe>>; + body?: InputMaybe; + headingLevel?: InputMaybe; + kennisartikelCategorie?: InputMaybe; + label?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtAccordionSectionInput = { + body?: InputMaybe; + headingLevel?: InputMaybe; + id?: InputMaybe; + kennisartikelCategorie?: InputMaybe; + label?: InputMaybe; +}; + +export type ComponentComponentsUtrechtFooter = { + address?: Maybe; + id: Scalars['ID']['output']; + list?: Maybe; + socialMediaList?: Maybe; + title?: Maybe; +}; + +export type ComponentComponentsUtrechtFooterLink = { + href?: Maybe; + id: Scalars['ID']['output']; + textContent?: Maybe; +}; + +export type ComponentComponentsUtrechtFooterLinkFiltersInput = { + and?: InputMaybe>>; + href?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + textContent?: InputMaybe; +}; + +export type ComponentComponentsUtrechtFooterList = { + id: Scalars['ID']['output']; + listItem?: Maybe>>; +}; + + +export type ComponentComponentsUtrechtFooterListListItemArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtFooterListItem = { + id: Scalars['ID']['output']; + link?: Maybe>>; + title?: Maybe; +}; + + +export type ComponentComponentsUtrechtFooterListItemLinkArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtFooterListItemFiltersInput = { + and?: InputMaybe>>; + link?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + title?: InputMaybe; +}; + +export type ComponentComponentsUtrechtImage = { + id: Scalars['ID']['output']; + imageData?: Maybe; + kennisartikelCategorie?: Maybe; +}; + +export type ComponentComponentsUtrechtLink = { + href?: Maybe; + icon?: Maybe; + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; + language?: Maybe; + textContent?: Maybe; +}; + +export type ComponentComponentsUtrechtLogoButton = { + appearance?: Maybe; + href?: Maybe; + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; + label?: Maybe; + logo?: Maybe; + openFormsEmbed?: Maybe; + textContent?: Maybe; +}; + +export type ComponentComponentsUtrechtLogoButtonFiltersInput = { + and?: InputMaybe>>; + appearance?: InputMaybe; + href?: InputMaybe; + kennisartikelCategorie?: InputMaybe; + label?: InputMaybe; + logo?: InputMaybe; + not?: InputMaybe; + openFormsEmbed?: InputMaybe; + or?: InputMaybe>>; + textContent?: InputMaybe; +}; + +export type ComponentComponentsUtrechtMultiColumnsButton = { + column?: Maybe>>; + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; +}; + + +export type ComponentComponentsUtrechtMultiColumnsButtonColumnArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtMultiColumnsButtonItem = { + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; + logoButton?: Maybe>>; + title?: Maybe; +}; + + +export type ComponentComponentsUtrechtMultiColumnsButtonItemLogoButtonArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtMultiColumnsButtonItemFiltersInput = { + and?: InputMaybe>>; + kennisartikelCategorie?: InputMaybe; + logoButton?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + title?: InputMaybe; +}; + +export type ComponentComponentsUtrechtNavigation = { + id: Scalars['ID']['output']; + navigationList?: Maybe>>; +}; + + +export type ComponentComponentsUtrechtNavigationNavigationListArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtNavigationLink = { + href?: Maybe; + id: Scalars['ID']['output']; + textContent?: Maybe; +}; + +export type ComponentComponentsUtrechtNavigationLinkFiltersInput = { + and?: InputMaybe>>; + href?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + textContent?: InputMaybe; +}; + +export type ComponentComponentsUtrechtRichText = { + content: Scalars['String']['output']; + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; + label?: Maybe; +}; + +export type ComponentComponentsUtrechtRichTextFiltersInput = { + and?: InputMaybe>>; + content?: InputMaybe; + kennisartikelCategorie?: InputMaybe; + label?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtRichTextInput = { + content?: InputMaybe; + id?: InputMaybe; + kennisartikelCategorie?: InputMaybe; + label?: InputMaybe; +}; + +export type ComponentComponentsUtrechtSocialMediaLink = { + href?: Maybe; + icon: Enum_Componentcomponentsutrechtsocialmedialink_Icon; + id: Scalars['ID']['output']; + textContent?: Maybe; +}; + +export type ComponentComponentsUtrechtSocialMediaLinkFiltersInput = { + and?: InputMaybe>>; + href?: InputMaybe; + icon?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + textContent?: InputMaybe; +}; + +export type ComponentComponentsUtrechtSocialMediaList = { + id: Scalars['ID']['output']; + link?: Maybe>>; +}; + + +export type ComponentComponentsUtrechtSocialMediaListLinkArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtSpotlight = { + content: Scalars['String']['output']; + id: Scalars['ID']['output']; + kennisartikelCategorie?: Maybe; + logoButton?: Maybe>>; + type?: Maybe; +}; + + +export type ComponentComponentsUtrechtSpotlightLogoButtonArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtTopTaskLink = { + href?: Maybe; + id: Scalars['ID']['output']; + textContent?: Maybe; + topTaskIcons: Enum_Componentcomponentsutrechttoptasklink_Toptaskicons; +}; + +export type ComponentComponentsUtrechtTopTaskLinkFiltersInput = { + and?: InputMaybe>>; + href?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + textContent?: InputMaybe; + topTaskIcons?: InputMaybe; +}; + +export type ComponentComponentsUtrechtTopTasks = { + id: Scalars['ID']['output']; + link?: Maybe>>; +}; + + +export type ComponentComponentsUtrechtTopTasksLinkArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsVac = { + afdelingen?: Maybe>>; + antwoord?: Maybe>>; + doelgroep?: Maybe; + id: Scalars['ID']['output']; + keywords?: Maybe; + status?: Maybe; + toelichting?: Maybe; + uuid?: Maybe; + vraag?: Maybe; +}; + + +export type ComponentComponentsVacAfdelingenArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ComponentComponentsVacAntwoordArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsVacFiltersInput = { + afdelingen?: InputMaybe; + and?: InputMaybe>>; + antwoord?: InputMaybe; + doelgroep?: InputMaybe; + keywords?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + status?: InputMaybe; + toelichting?: InputMaybe; + uuid?: InputMaybe; + vraag?: InputMaybe; +}; + +export type ComponentComponentsVacInput = { + afdelingen?: InputMaybe>>; + antwoord?: InputMaybe>>; + doelgroep?: InputMaybe; + id?: InputMaybe; + keywords?: InputMaybe; + status?: InputMaybe; + toelichting?: InputMaybe; + uuid?: InputMaybe; + vraag?: InputMaybe; +}; + +export type ComponentComponentsVacUitklapmenu = { + afdelingen?: Maybe>>; + body?: Maybe; + doelgroep?: Maybe; + headingLevel?: Maybe; + id: Scalars['ID']['output']; + label?: Maybe; + status?: Maybe; + toelichting?: Maybe; + trefwoorden?: Maybe>>; + uuid?: Maybe; +}; + + +export type ComponentComponentsVacUitklapmenuAfdelingenArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ComponentComponentsVacUitklapmenuTrefwoordenArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsVerantwoordelijkeOrganisatie = { + id: Scalars['ID']['output']; + owmsEndDate: Scalars['DateTime']['output']; + owmsIdentifier: Scalars['String']['output']; + owmsPrefLabel?: Maybe; +}; + +export type ComponentComponentsVerantwoordelijkeOrganisatieFiltersInput = { + and?: InputMaybe>>; + not?: InputMaybe; + or?: InputMaybe>>; + owmsEndDate?: InputMaybe; + owmsIdentifier?: InputMaybe; + owmsPrefLabel?: InputMaybe; +}; + +export type ComponentComponentsVerantwoordelijkeOrganisatieInput = { + id?: InputMaybe; + owmsEndDate?: InputMaybe; + owmsIdentifier?: InputMaybe; + owmsPrefLabel?: InputMaybe; +}; + +export type ComponentSeoMeta = { + description: Scalars['String']['output']; + id: Scalars['ID']['output']; + keymatch: Scalars['String']['output']; + ogImage?: Maybe; + title: Scalars['String']['output']; +}; + +export type ComponentSeoMetaFiltersInput = { + and?: InputMaybe>>; + description?: InputMaybe; + keymatch?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + title?: InputMaybe; +}; + +export type ComponentSeoMetaInput = { + description?: InputMaybe; + id?: InputMaybe; + keymatch?: InputMaybe; + ogImage?: InputMaybe; + title?: InputMaybe; +}; + +export type ContactInformationInternal = { + contentBlock?: Maybe>>; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + internal_information: Array>; + internal_information_connection?: Maybe; + publishedAt?: Maybe; + title?: Maybe; + updatedAt?: Maybe; + vacs: Array>; + vacs_connection?: Maybe; +}; + + +export type ContactInformationInternalContentBlockArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationInternalInternal_InformationArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationInternalInternal_Information_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationInternalVacsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationInternalVacs_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ContactInformationInternalEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type ContactInformationInternalFiltersInput = { + and?: InputMaybe>>; + contentBlock?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + internal_information?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; + vacs?: InputMaybe; +}; + +export type ContactInformationInternalInput = { + contentBlock?: InputMaybe>>; + internal_information?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; + vacs?: InputMaybe>>; +}; + +export type ContactInformationInternalRelationResponseCollection = { + nodes: Array; +}; + +export type ContactInformationPublic = { + contentBlock?: Maybe>>; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + internal_information: Array>; + internal_information_connection?: Maybe; + products: Array>; + products_connection?: Maybe; + publishedAt?: Maybe; + title?: Maybe; + updatedAt?: Maybe; + vacs: Array>; + vacs_connection?: Maybe; +}; + + +export type ContactInformationPublicContentBlockArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationPublicInternal_InformationArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationPublicInternal_Information_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationPublicProductsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationPublicProducts_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationPublicVacsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationPublicVacs_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ContactInformationPublicEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type ContactInformationPublicFiltersInput = { + and?: InputMaybe>>; + contentBlock?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + internal_information?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + products?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; + vacs?: InputMaybe; +}; + +export type ContactInformationPublicInput = { + contentBlock?: InputMaybe>>; + internal_information?: InputMaybe>>; + products?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; + vacs?: InputMaybe>>; +}; + +export type DateFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type DateTimeFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type DeleteMutationResponse = { + documentId: Scalars['ID']['output']; +}; + +export enum Enum_Componentcomponentsantwoord_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsaudience_Type { + Ondernemer = 'ondernemer', + Particulier = 'particulier' +} + +export enum Enum_Componentcomponentscimpdcproductmetadata_Bestelwijze { + Informatie = 'informatie', + InitiatiefBevoegdGezag = 'initiatief_bevoegd_gezag', + OpVerzoek = 'op_verzoek' +} + +export enum Enum_Componentcomponentscimpdcproductmetadata_Doelgroep { + BedrijvenEnInstellingen = 'bedrijven_en_instellingen', + Burgers = 'burgers', + InterneOrganisatie = 'interne_organisatie', + Samenwerkingspartners = 'samenwerkingspartners' +} + +export enum Enum_Componentcomponentscimpdcproductmetadata_Soortbevoegdgezag { + Gemeente = 'gemeente', + Provincie = 'provincie', + Rijksoverheid = 'rijksoverheid', + Waterschap = 'waterschap' +} + +export enum Enum_Componentcomponentsfaq_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsinternalcontentblockcomponent_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentskennisartikel_Doelgroep { + EuBedrijf = 'eu_bedrijf', + EuBurger = 'eu_burger' +} + +export enum Enum_Componentcomponentsonlinerequest_Type { + Digid = 'digid', + Ja = 'ja', + Nee = 'nee' +} + +export enum Enum_Componentcomponentsprice_Currency { + Eur = 'EUR', + Usd = 'USD' +} + +export enum Enum_Componentcomponentstrackingscripts_Slug { + DarkMode = 'dark_mode', + ForcedColors = 'forced_colors', + GoogleTranslate = 'google_translate', + ZoomForms = 'zoom_forms' +} + +export enum Enum_Componentcomponentsutrechtaccordionsection_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsutrechtaccordion_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsutrechtimage_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsutrechtlink_Icon { + Arrow = 'arrow' +} + +export enum Enum_Componentcomponentsutrechtlink_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsutrechtlogobutton_Appearance { + Magenta = 'magenta', + PrimaryActionButton = 'primary_action_button', + SecondaryActionButton = 'secondary_action_button' +} + +export enum Enum_Componentcomponentsutrechtlogobutton_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsutrechtlogobutton_Logo { + Digid = 'digid', + Eherkenning = 'eherkenning', + Eidas = 'eidas', + WithoutLogo = 'without_logo' +} + +export enum Enum_Componentcomponentsutrechtmulticolumnsbuttonitem_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsutrechtmulticolumnsbutton_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsutrechtsocialmedialink_Icon { + Facebook = 'facebook', + Instagram = 'instagram', + Linkedin = 'linkedin', + Newsletter = 'newsletter', + Whatsapp = 'whatsapp', + X = 'x' +} + +export enum Enum_Componentcomponentsutrechtspotlight_Kennisartikelcategorie { + Aanvraag = 'aanvraag', + Bewijs = 'bewijs', + Bezwaar = 'bezwaar', + Bijzonderheden = 'bijzonderheden', + Contact = 'contact', + Inleiding = 'inleiding', + Kosten = 'kosten', + Termijn = 'termijn', + Voorwaarden = 'voorwaarden', + WatTeDoenBijGeenReactie = 'wat_te_doen_bij_geen_reactie' +} + +export enum Enum_Componentcomponentsutrechtspotlight_Type { + Gray = 'gray', + Info = 'info', + Warning = 'warning' +} + +export enum Enum_Componentcomponentsutrechttoptasklink_Toptaskicons { + AfspraakMaken = 'afspraak_maken', + Afval = 'afval', + Bewijsstukken = 'bewijsstukken', + Grofvuil = 'grofvuil', + GrofvuilOphalen = 'grofvuil_ophalen', + Hulpverlening = 'hulpverlening', + Informatie = 'informatie', + Kalender = 'kalender', + Klachten = 'klachten', + Kroon = 'kroon', + Melding = 'melding', + MeldingKlacht = 'melding_klacht', + Nummerbord = 'nummerbord', + Parkeervergunning = 'parkeervergunning', + Parkeren = 'parkeren', + ParkerenBetalen = 'parkeren_betalen', + Paspoort = 'paspoort', + Rijbewijs = 'rijbewijs', + SchildGemeenteUtrecht = 'schild_gemeente_utrecht', + Subsidie = 'subsidie', + Verhuizen = 'verhuizen', + Werkzaamheden = 'werkzaamheden' +} + +export enum Enum_Componentcomponentsvacuitklapmenu_Doelgroep { + EuBedrijf = 'eu_bedrijf', + EuBurger = 'eu_burger', + EuBurgerBedrijf = 'eu_burger_bedrijf' +} + +export enum Enum_Componentcomponentsvacuitklapmenu_Status { + Actief = 'actief', + NonActief = 'non_actief', + TeVerwijderen = 'te_verwijderen' +} + +export enum Enum_Componentcomponentsvac_Doelgroep { + EuBedrijf = 'eu_bedrijf', + EuBurger = 'eu_burger', + EuBurgerBedrijf = 'eu_burger_bedrijf' +} + +export enum Enum_Componentcomponentsvac_Status { + Actief = 'actief', + NonActief = 'non_actief', + TeVerwijderen = 'te_verwijderen' +} + +export enum Enum_Openformserrorpage_Type { + FormNotFound = 'form_not_found', + FormServerIsOffline = 'form_server_is_offline' +} + +export enum Enum_Productencatalogus_Doelgroep { + BedrijvenEnInstellingen = 'bedrijven_en_instellingen', + Burgers = 'burgers', + InterneOrganisatie = 'interne_organisatie', + Samenwerkingspartners = 'samenwerkingspartners' +} + +export type EntityNotesNote = { + content?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + entityId?: Maybe; + entitySlug?: Maybe; + publishedAt?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + +export type EntityNotesNoteEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type EntityNotesNoteFiltersInput = { + and?: InputMaybe>>; + content?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + entityId?: InputMaybe; + entitySlug?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type EntityNotesNoteInput = { + content?: InputMaybe; + entityId?: InputMaybe; + entitySlug?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; +}; + +export type Error = { + code: Scalars['String']['output']; + message?: Maybe; +}; + +export type FileInfoInput = { + alternativeText?: InputMaybe; + caption?: InputMaybe; + name?: InputMaybe; +}; + +export type FloatFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type GenericMorph = AdditionalInformation | ComponentComponentsAdditionalInformation | ComponentComponentsAdditionalInformationField | ComponentComponentsAfdelingen | ComponentComponentsAntwoord | ComponentComponentsAudience | ComponentComponentsCatalogiMeta | ComponentComponentsCimPdcProductAspectBeschrijving | ComponentComponentsCimPdcProductBeschrijving | ComponentComponentsCimPdcProductMetadata | ComponentComponentsContact | ComponentComponentsContactInformationPublic | ComponentComponentsContactInformationRichText | ComponentComponentsEForm | ComponentComponentsFaq | ComponentComponentsFloLegalForm | ComponentComponentsInternalBlockContent | ComponentComponentsInternalContentBlock | ComponentComponentsInternalContentBlockComponent | ComponentComponentsInternalField | ComponentComponentsKennisartikel | ComponentComponentsMetadata | ComponentComponentsOnlineRequest | ComponentComponentsPrice | ComponentComponentsSpatial | ComponentComponentsTrackingScripts | ComponentComponentsTrefwoorden | ComponentComponentsTriggerMatomoScript | ComponentComponentsUrl | ComponentComponentsUtrechtAccordion | ComponentComponentsUtrechtAccordionSection | ComponentComponentsUtrechtFooter | ComponentComponentsUtrechtFooterLink | ComponentComponentsUtrechtFooterList | ComponentComponentsUtrechtFooterListItem | ComponentComponentsUtrechtImage | ComponentComponentsUtrechtLink | ComponentComponentsUtrechtLogoButton | ComponentComponentsUtrechtMultiColumnsButton | ComponentComponentsUtrechtMultiColumnsButtonItem | ComponentComponentsUtrechtNavigation | ComponentComponentsUtrechtNavigationLink | ComponentComponentsUtrechtRichText | ComponentComponentsUtrechtSocialMediaLink | ComponentComponentsUtrechtSocialMediaList | ComponentComponentsUtrechtSpotlight | ComponentComponentsUtrechtTopTaskLink | ComponentComponentsUtrechtTopTasks | ComponentComponentsVac | ComponentComponentsVacUitklapmenu | ComponentComponentsVerantwoordelijkeOrganisatie | ComponentSeoMeta | ContactInformationInternal | ContactInformationPublic | EntityNotesNote | I18NLocale | InternalField | NotFoundPage | OpenFormsErrorPage | PdcCategory | PdcFaq | PdcHomePage | PdcSubcategory | PdcTemplate | Price | Product | Productencatalogus | PublisherAction | ReviewWorkflowsWorkflow | ReviewWorkflowsWorkflowStage | UploadFile | UsersPermissionsPermission | UsersPermissionsRole | UsersPermissionsUser | Vac | WebsiteSetting; + +export type I18NLocale = { + code?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + name?: Maybe; + publishedAt?: Maybe; + updatedAt?: Maybe; +}; + +export type I18NLocaleEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type I18NLocaleFiltersInput = { + and?: InputMaybe>>; + code?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type IdFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type IntFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type InternalField = { + contact_information_internal: Array>; + contact_information_internal_connection?: Maybe; + contact_information_public?: Maybe; + content?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + product?: Maybe; + publishedAt?: Maybe; + title: Scalars['String']['output']; + updatedAt?: Maybe; +}; + + +export type InternalFieldContact_Information_InternalArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type InternalFieldContact_Information_Internal_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type InternalFieldEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type InternalFieldFiltersInput = { + and?: InputMaybe>>; + contact_information_internal?: InputMaybe; + contact_information_public?: InputMaybe; + content?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + product?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type InternalFieldInput = { + contact_information_internal?: InputMaybe>>; + contact_information_public?: InputMaybe; + content?: InputMaybe; + product?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; +}; + +export type InternalFieldRelationResponseCollection = { + nodes: Array; +}; + +export type JsonFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type Mutation = { + /** Change user password. Confirm with the current password. */ + changePassword?: Maybe; + createAdditionalInformation?: Maybe; + createContactInformationInternal?: Maybe; + createContactInformationPublic?: Maybe; + createEntityNotesNote?: Maybe; + createInternalField?: Maybe; + createOpenFormsErrorPage?: Maybe; + createPdcCategory?: Maybe; + createPdcFaq?: Maybe; + createPdcSubcategory?: Maybe; + createPrice?: Maybe; + createProduct?: Maybe; + createProductencatalogus?: Maybe; + createPublisherAction?: Maybe; + createReviewWorkflowsWorkflow?: Maybe; + createReviewWorkflowsWorkflowStage?: Maybe; + /** Create a new role */ + createUsersPermissionsRole?: Maybe; + /** Create a new user */ + createUsersPermissionsUser: UsersPermissionsUserEntityResponse; + createVac?: Maybe; + deleteAdditionalInformation?: Maybe; + deleteContactInformationInternal?: Maybe; + deleteContactInformationPublic?: Maybe; + deleteEntityNotesNote?: Maybe; + deleteInternalField?: Maybe; + deleteNotFoundPage?: Maybe; + deleteOpenFormsErrorPage?: Maybe; + deletePdcCategory?: Maybe; + deletePdcFaq?: Maybe; + deletePdcHomePage?: Maybe; + deletePdcSubcategory?: Maybe; + deletePdcTemplate?: Maybe; + deletePrice?: Maybe; + deleteProduct?: Maybe; + deleteProductencatalogus?: Maybe; + deletePublisherAction?: Maybe; + deleteReviewWorkflowsWorkflow?: Maybe; + deleteReviewWorkflowsWorkflowStage?: Maybe; + deleteUploadFile?: Maybe; + /** Delete an existing role */ + deleteUsersPermissionsRole?: Maybe; + /** Delete an existing user */ + deleteUsersPermissionsUser: UsersPermissionsUserEntityResponse; + deleteVac?: Maybe; + deleteWebsiteSetting?: Maybe; + /** Confirm an email users email address */ + emailConfirmation?: Maybe; + /** Request a reset password token */ + forgotPassword?: Maybe; + login: UsersPermissionsLoginPayload; + /** Register a user */ + register: UsersPermissionsLoginPayload; + /** Reset user password. Confirm with a code (resetToken from forgotPassword) */ + resetPassword?: Maybe; + updateAdditionalInformation?: Maybe; + updateContactInformationInternal?: Maybe; + updateContactInformationPublic?: Maybe; + updateEntityNotesNote?: Maybe; + updateInternalField?: Maybe; + updateNotFoundPage?: Maybe; + updateOpenFormsErrorPage?: Maybe; + updatePdcCategory?: Maybe; + updatePdcFaq?: Maybe; + updatePdcHomePage?: Maybe; + updatePdcSubcategory?: Maybe; + updatePdcTemplate?: Maybe; + updatePrice?: Maybe; + updateProduct?: Maybe; + updateProductencatalogus?: Maybe; + updatePublisherAction?: Maybe; + updateReviewWorkflowsWorkflow?: Maybe; + updateReviewWorkflowsWorkflowStage?: Maybe; + updateUploadFile: UploadFile; + /** Update an existing role */ + updateUsersPermissionsRole?: Maybe; + /** Update an existing user */ + updateUsersPermissionsUser: UsersPermissionsUserEntityResponse; + updateVac?: Maybe; + updateWebsiteSetting?: Maybe; +}; + + +export type MutationChangePasswordArgs = { + currentPassword: Scalars['String']['input']; + password: Scalars['String']['input']; + passwordConfirmation: Scalars['String']['input']; +}; + + +export type MutationCreateAdditionalInformationArgs = { + data: AdditionalInformationInput; + status?: InputMaybe; +}; + + +export type MutationCreateContactInformationInternalArgs = { + data: ContactInformationInternalInput; + status?: InputMaybe; +}; + + +export type MutationCreateContactInformationPublicArgs = { + data: ContactInformationPublicInput; + status?: InputMaybe; +}; + + +export type MutationCreateEntityNotesNoteArgs = { + data: EntityNotesNoteInput; + status?: InputMaybe; +}; + + +export type MutationCreateInternalFieldArgs = { + data: InternalFieldInput; + status?: InputMaybe; +}; + + +export type MutationCreateOpenFormsErrorPageArgs = { + data: OpenFormsErrorPageInput; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type MutationCreatePdcCategoryArgs = { + data: PdcCategoryInput; + status?: InputMaybe; +}; + + +export type MutationCreatePdcFaqArgs = { + data: PdcFaqInput; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type MutationCreatePdcSubcategoryArgs = { + data: PdcSubcategoryInput; + status?: InputMaybe; +}; + + +export type MutationCreatePriceArgs = { + data: PriceInput; + status?: InputMaybe; +}; + + +export type MutationCreateProductArgs = { + data: ProductInput; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type MutationCreateProductencatalogusArgs = { + data: ProductencatalogusInput; + status?: InputMaybe; +}; + + +export type MutationCreatePublisherActionArgs = { + data: PublisherActionInput; + status?: InputMaybe; +}; + + +export type MutationCreateReviewWorkflowsWorkflowArgs = { + data: ReviewWorkflowsWorkflowInput; + status?: InputMaybe; +}; + + +export type MutationCreateReviewWorkflowsWorkflowStageArgs = { + data: ReviewWorkflowsWorkflowStageInput; + status?: InputMaybe; +}; + + +export type MutationCreateUsersPermissionsRoleArgs = { + data: UsersPermissionsRoleInput; +}; + + +export type MutationCreateUsersPermissionsUserArgs = { + data: UsersPermissionsUserInput; +}; + + +export type MutationCreateVacArgs = { + data: VacInput; + status?: InputMaybe; +}; + + +export type MutationDeleteAdditionalInformationArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteContactInformationInternalArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteContactInformationPublicArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteEntityNotesNoteArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteInternalFieldArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteNotFoundPageArgs = { + locale?: InputMaybe; +}; + + +export type MutationDeleteOpenFormsErrorPageArgs = { + documentId: Scalars['ID']['input']; + locale?: InputMaybe; +}; + + +export type MutationDeletePdcCategoryArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeletePdcFaqArgs = { + documentId: Scalars['ID']['input']; + locale?: InputMaybe; +}; + + +export type MutationDeletePdcHomePageArgs = { + locale?: InputMaybe; +}; + + +export type MutationDeletePdcSubcategoryArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeletePdcTemplateArgs = { + locale?: InputMaybe; +}; + + +export type MutationDeletePriceArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteProductArgs = { + documentId: Scalars['ID']['input']; + locale?: InputMaybe; +}; + + +export type MutationDeleteProductencatalogusArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeletePublisherActionArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteReviewWorkflowsWorkflowArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteReviewWorkflowsWorkflowStageArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteUploadFileArgs = { + id: Scalars['ID']['input']; +}; + + +export type MutationDeleteUsersPermissionsRoleArgs = { + id: Scalars['ID']['input']; +}; + + +export type MutationDeleteUsersPermissionsUserArgs = { + id: Scalars['ID']['input']; +}; + + +export type MutationDeleteVacArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationEmailConfirmationArgs = { + confirmation: Scalars['String']['input']; +}; + + +export type MutationForgotPasswordArgs = { + email: Scalars['String']['input']; +}; + + +export type MutationLoginArgs = { + input: UsersPermissionsLoginInput; +}; + + +export type MutationRegisterArgs = { + input: UsersPermissionsRegisterInput; +}; + + +export type MutationResetPasswordArgs = { + code: Scalars['String']['input']; + password: Scalars['String']['input']; + passwordConfirmation: Scalars['String']['input']; +}; + + +export type MutationUpdateAdditionalInformationArgs = { + data: AdditionalInformationInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateContactInformationInternalArgs = { + data: ContactInformationInternalInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateContactInformationPublicArgs = { + data: ContactInformationPublicInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateEntityNotesNoteArgs = { + data: EntityNotesNoteInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateInternalFieldArgs = { + data: InternalFieldInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateNotFoundPageArgs = { + data: NotFoundPageInput; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type MutationUpdateOpenFormsErrorPageArgs = { + data: OpenFormsErrorPageInput; + documentId: Scalars['ID']['input']; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type MutationUpdatePdcCategoryArgs = { + data: PdcCategoryInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdatePdcFaqArgs = { + data: PdcFaqInput; + documentId: Scalars['ID']['input']; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type MutationUpdatePdcHomePageArgs = { + data: PdcHomePageInput; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type MutationUpdatePdcSubcategoryArgs = { + data: PdcSubcategoryInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdatePdcTemplateArgs = { + data: PdcTemplateInput; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type MutationUpdatePriceArgs = { + data: PriceInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateProductArgs = { + data: ProductInput; + documentId: Scalars['ID']['input']; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type MutationUpdateProductencatalogusArgs = { + data: ProductencatalogusInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdatePublisherActionArgs = { + data: PublisherActionInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateReviewWorkflowsWorkflowArgs = { + data: ReviewWorkflowsWorkflowInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateReviewWorkflowsWorkflowStageArgs = { + data: ReviewWorkflowsWorkflowStageInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateUploadFileArgs = { + id: Scalars['ID']['input']; + info?: InputMaybe; +}; + + +export type MutationUpdateUsersPermissionsRoleArgs = { + data: UsersPermissionsRoleInput; + id: Scalars['ID']['input']; +}; + + +export type MutationUpdateUsersPermissionsUserArgs = { + data: UsersPermissionsUserInput; + id: Scalars['ID']['input']; +}; + + +export type MutationUpdateVacArgs = { + data: VacInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateWebsiteSettingArgs = { + data: WebsiteSettingInput; + status?: InputMaybe; +}; + +export type NotFoundPage = { + body?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + locale?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; + publishedAt?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + +export type NotFoundPageInput = { + body?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; +}; + +export type NotFoundPageRelationResponseCollection = { + nodes: Array; +}; + +export type OpenFormsErrorPage = { + body?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + locale?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; + publishedAt?: Maybe; + title: Scalars['String']['output']; + type: Enum_Openformserrorpage_Type; + updatedAt?: Maybe; +}; + + +export type OpenFormsErrorPageLocalizationsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type OpenFormsErrorPageLocalizations_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type OpenFormsErrorPageEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type OpenFormsErrorPageFiltersInput = { + and?: InputMaybe>>; + body?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + locale?: InputMaybe; + localizations?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; + type?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type OpenFormsErrorPageInput = { + body?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; + type?: InputMaybe; +}; + +export type OpenFormsErrorPageRelationResponseCollection = { + nodes: Array; +}; + +export type Pagination = { + page: Scalars['Int']['output']; + pageCount: Scalars['Int']['output']; + pageSize: Scalars['Int']['output']; + total: Scalars['Int']['output']; +}; + +export type PaginationArg = { + limit?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + start?: InputMaybe; +}; + +export type PdcCategory = { + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + pdc_subcategories: Array>; + pdc_subcategories_connection?: Maybe; + publishedAt?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + + +export type PdcCategoryPdc_SubcategoriesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type PdcCategoryPdc_Subcategories_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type PdcCategoryEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type PdcCategoryFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + documentId?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + pdc_subcategories?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type PdcCategoryInput = { + pdc_subcategories?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; +}; + +export type PdcFaq = { + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + faq?: Maybe>>; + locale?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; + publishedAt?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + + +export type PdcFaqFaqArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type PdcFaqLocalizationsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type PdcFaqLocalizations_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type PdcFaqEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type PdcFaqFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + documentId?: InputMaybe; + faq?: InputMaybe; + locale?: InputMaybe; + localizations?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type PdcFaqInput = { + faq?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; +}; + +export type PdcFaqRelationResponseCollection = { + nodes: Array; +}; + +export type PdcHomePage = { + components?: Maybe>>; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + locale?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; + publishedAt?: Maybe; + updatedAt?: Maybe; +}; + +export type PdcHomePageComponentsDynamicZone = ComponentComponentsUtrechtTopTasks | Error; + +export type PdcHomePageInput = { + components?: InputMaybe>; + publishedAt?: InputMaybe; +}; + +export type PdcHomePageRelationResponseCollection = { + nodes: Array; +}; + +export type PdcSubcategory = { + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + pdc_category?: Maybe; + products: Array>; + products_connection?: Maybe; + publishedAt?: Maybe; + title?: Maybe; + updatedAt?: Maybe; + vacs: Array>; + vacs_connection?: Maybe; +}; + + +export type PdcSubcategoryProductsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type PdcSubcategoryProducts_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type PdcSubcategoryVacsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type PdcSubcategoryVacs_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type PdcSubcategoryEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type PdcSubcategoryFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + documentId?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + pdc_category?: InputMaybe; + products?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; + vacs?: InputMaybe; +}; + +export type PdcSubcategoryInput = { + pdc_category?: InputMaybe; + products?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; + vacs?: InputMaybe>>; +}; + +export type PdcSubcategoryRelationResponseCollection = { + nodes: Array; +}; + +export type PdcTemplate = { + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + locale?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; + publishedAt?: Maybe; + sections?: Maybe>>; + updatedAt?: Maybe; +}; + +export type PdcTemplateInput = { + publishedAt?: InputMaybe; + sections?: InputMaybe>; +}; + +export type PdcTemplateRelationResponseCollection = { + nodes: Array; +}; + +export type PdcTemplateSectionsDynamicZone = ComponentComponentsUtrechtFooter | ComponentComponentsUtrechtNavigation | Error; + +export type Price = { + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + price?: Maybe>>; + products: Array>; + products_connection?: Maybe; + publishedAt?: Maybe; + title: Scalars['String']['output']; + updatedAt?: Maybe; + uuid?: Maybe; +}; + + +export type PricePriceArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type PriceProductsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type PriceProducts_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type PriceEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type PriceFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + documentId?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + price?: InputMaybe; + products?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; + uuid?: InputMaybe; +}; + +export type PriceInput = { + price?: InputMaybe>>; + products?: InputMaybe>>; + publishedAt?: InputMaybe; + title?: InputMaybe; + uuid?: InputMaybe; +}; + +export type Product = { + additional_information?: Maybe; + catalogiMeta?: Maybe; + contact_information_public?: Maybe; + content?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + enable_kcm_survey?: Maybe; + kennisartikelMetadata?: Maybe; + locale?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; + metaTags?: Maybe; + oldSlugs?: Maybe; + pdc_metadata?: Maybe; + pdc_subcategories: Array>; + pdc_subcategories_connection?: Maybe; + price?: Maybe; + productencatalogus?: Maybe; + publishedAt?: Maybe; + sections?: Maybe>>; + slug: Scalars['String']['output']; + title: Scalars['String']['output']; + updatedAt?: Maybe; + uuid?: Maybe; + vacs?: Maybe; +}; + + +export type ProductLocalizationsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ProductLocalizations_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ProductPdc_SubcategoriesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ProductPdc_Subcategories_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ProductEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type ProductFiltersInput = { + additional_information?: InputMaybe; + and?: InputMaybe>>; + catalogiMeta?: InputMaybe; + contact_information_public?: InputMaybe; + content?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + enable_kcm_survey?: InputMaybe; + kennisartikelMetadata?: InputMaybe; + locale?: InputMaybe; + localizations?: InputMaybe; + metaTags?: InputMaybe; + not?: InputMaybe; + oldSlugs?: InputMaybe; + or?: InputMaybe>>; + pdc_metadata?: InputMaybe; + pdc_subcategories?: InputMaybe; + price?: InputMaybe; + productencatalogus?: InputMaybe; + publishedAt?: InputMaybe; + slug?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; + uuid?: InputMaybe; + vacs?: InputMaybe; +}; + +export type ProductInput = { + additional_information?: InputMaybe; + catalogiMeta?: InputMaybe; + contact_information_public?: InputMaybe; + content?: InputMaybe; + enable_kcm_survey?: InputMaybe; + kennisartikelMetadata?: InputMaybe; + metaTags?: InputMaybe; + oldSlugs?: InputMaybe; + pdc_metadata?: InputMaybe; + pdc_subcategories?: InputMaybe>>; + price?: InputMaybe; + productencatalogus?: InputMaybe; + publishedAt?: InputMaybe; + sections?: InputMaybe>; + slug?: InputMaybe; + title?: InputMaybe; + uuid?: InputMaybe; + vacs?: InputMaybe; +}; + +export type ProductRelationResponseCollection = { + nodes: Array; +}; + +export type ProductSectionsDynamicZone = ComponentComponentsContactInformationPublic | ComponentComponentsFaq | ComponentComponentsFloLegalForm | ComponentComponentsInternalBlockContent | ComponentComponentsUtrechtAccordion | ComponentComponentsUtrechtImage | ComponentComponentsUtrechtLink | ComponentComponentsUtrechtLogoButton | ComponentComponentsUtrechtMultiColumnsButton | ComponentComponentsUtrechtRichText | ComponentComponentsUtrechtSpotlight | Error; + +export type Productencatalogus = { + begindatumVersie: Scalars['Date']['output']; + beherendeOrganisatie?: Maybe; + contactpersoonBeheerEmail?: Maybe; + contactpersoonBeheerNaam: Scalars['String']['output']; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + doelgroep: Enum_Productencatalogus_Doelgroep; + domein: Scalars['String']['output']; + naam: Scalars['String']['output']; + organisatieIdentificatie?: Maybe; + producten?: Maybe; + publishedAt?: Maybe; + referentieCatalogus: Array>; + referentieCatalogus_connection?: Maybe; + referentiePDC: Scalars['Boolean']['output']; + toelichting?: Maybe; + updatedAt?: Maybe; + versie: Scalars['String']['output']; +}; + + +export type ProductencatalogusReferentieCatalogusArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ProductencatalogusReferentieCatalogus_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ProductencatalogusEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type ProductencatalogusFiltersInput = { + and?: InputMaybe>>; + begindatumVersie?: InputMaybe; + beherendeOrganisatie?: InputMaybe; + contactpersoonBeheerEmail?: InputMaybe; + contactpersoonBeheerNaam?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + doelgroep?: InputMaybe; + domein?: InputMaybe; + naam?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + organisatieIdentificatie?: InputMaybe; + producten?: InputMaybe; + publishedAt?: InputMaybe; + referentieCatalogus?: InputMaybe; + referentiePDC?: InputMaybe; + toelichting?: InputMaybe; + updatedAt?: InputMaybe; + versie?: InputMaybe; +}; + +export type ProductencatalogusInput = { + begindatumVersie?: InputMaybe; + beherendeOrganisatie?: InputMaybe; + contactpersoonBeheerEmail?: InputMaybe; + contactpersoonBeheerNaam?: InputMaybe; + doelgroep?: InputMaybe; + domein?: InputMaybe; + naam?: InputMaybe; + organisatieIdentificatie?: InputMaybe; + producten?: InputMaybe; + publishedAt?: InputMaybe; + referentieCatalogus?: InputMaybe>>; + referentiePDC?: InputMaybe; + toelichting?: InputMaybe; + versie?: InputMaybe; +}; + +export type ProductencatalogusRelationResponseCollection = { + nodes: Array; +}; + +export enum PublicationStatus { + Draft = 'DRAFT', + Published = 'PUBLISHED' +} + +export type PublisherAction = { + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + entityId: Scalars['String']['output']; + entitySlug: Scalars['String']['output']; + executeAt: Scalars['DateTime']['output']; + mode: Scalars['String']['output']; + publishedAt?: Maybe; + updatedAt?: Maybe; +}; + +export type PublisherActionEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type PublisherActionFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + documentId?: InputMaybe; + entityId?: InputMaybe; + entitySlug?: InputMaybe; + executeAt?: InputMaybe; + mode?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type PublisherActionInput = { + entityId?: InputMaybe; + entitySlug?: InputMaybe; + executeAt?: InputMaybe; + mode?: InputMaybe; + publishedAt?: InputMaybe; +}; + +export type Query = { + additionalInformation?: Maybe; + additionalInformations: Array>; + additionalInformations_connection?: Maybe; + contactInformationInternal?: Maybe; + contactInformationInternals: Array>; + contactInformationInternals_connection?: Maybe; + contactInformationPublic?: Maybe; + contactInformationPublics: Array>; + contactInformationPublics_connection?: Maybe; + entityNotesNote?: Maybe; + entityNotesNotes: Array>; + entityNotesNotes_connection?: Maybe; + i18NLocale?: Maybe; + i18NLocales: Array>; + i18NLocales_connection?: Maybe; + internalField?: Maybe; + internalFields: Array>; + internalFields_connection?: Maybe; + me?: Maybe; + notFoundPage?: Maybe; + openFormsErrorPage?: Maybe; + openFormsErrorPages: Array>; + openFormsErrorPages_connection?: Maybe; + pdcCategories: Array>; + pdcCategories_connection?: Maybe; + pdcCategory?: Maybe; + pdcFaq?: Maybe; + pdcFaqs: Array>; + pdcFaqs_connection?: Maybe; + pdcHomePage?: Maybe; + pdcSubcategories: Array>; + pdcSubcategories_connection?: Maybe; + pdcSubcategory?: Maybe; + pdcTemplate?: Maybe; + price?: Maybe; + prices: Array>; + prices_connection?: Maybe; + product?: Maybe; + productencatalogus?: Maybe; + productencataloguses: Array>; + productencataloguses_connection?: Maybe; + products: Array>; + products_connection?: Maybe; + publisherAction?: Maybe; + publisherActions: Array>; + publisherActions_connection?: Maybe; + reviewWorkflowsWorkflow?: Maybe; + reviewWorkflowsWorkflowStage?: Maybe; + reviewWorkflowsWorkflowStages: Array>; + reviewWorkflowsWorkflowStages_connection?: Maybe; + reviewWorkflowsWorkflows: Array>; + reviewWorkflowsWorkflows_connection?: Maybe; + uploadFile?: Maybe; + uploadFiles: Array>; + uploadFiles_connection?: Maybe; + usersPermissionsRole?: Maybe; + usersPermissionsRoles: Array>; + usersPermissionsRoles_connection?: Maybe; + usersPermissionsUser?: Maybe; + usersPermissionsUsers: Array>; + usersPermissionsUsers_connection?: Maybe; + vac?: Maybe; + vacs: Array>; + vacs_connection?: Maybe; + websiteSetting?: Maybe; +}; + + +export type QueryAdditionalInformationArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryAdditionalInformationsArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryAdditionalInformations_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryContactInformationInternalArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryContactInformationInternalsArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryContactInformationInternals_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryContactInformationPublicArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryContactInformationPublicsArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryContactInformationPublics_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryEntityNotesNoteArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryEntityNotesNotesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryEntityNotesNotes_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryI18NLocaleArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryI18NLocalesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryI18NLocales_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryInternalFieldArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryInternalFieldsArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryInternalFields_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryNotFoundPageArgs = { + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryOpenFormsErrorPageArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryOpenFormsErrorPagesArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryOpenFormsErrorPages_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcCategoriesArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcCategories_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcCategoryArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryPdcFaqArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryPdcFaqsArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcFaqs_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcHomePageArgs = { + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryPdcSubcategoriesArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcSubcategories_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcSubcategoryArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryPdcTemplateArgs = { + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryPriceArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryPricesArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPrices_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryProductArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryProductencatalogusArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryProductencatalogusesArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryProductencataloguses_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryProductsArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryProducts_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPublisherActionArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryPublisherActionsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryPublisherActions_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryReviewWorkflowsWorkflowArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryReviewWorkflowsWorkflowStageArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryReviewWorkflowsWorkflowStagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryReviewWorkflowsWorkflowStages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryReviewWorkflowsWorkflowsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryReviewWorkflowsWorkflows_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUploadFileArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryUploadFilesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUploadFiles_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUsersPermissionsRoleArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryUsersPermissionsRolesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUsersPermissionsRoles_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUsersPermissionsUserArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryUsersPermissionsUsersArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUsersPermissionsUsers_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryVacArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryVacsArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryVacs_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryWebsiteSettingArgs = { + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + +export type ReviewWorkflowsWorkflow = { + contentTypes: Scalars['JSON']['output']; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + name: Scalars['String']['output']; + publishedAt?: Maybe; + stageRequiredToPublish?: Maybe; + stages: Array>; + stages_connection?: Maybe; + updatedAt?: Maybe; +}; + + +export type ReviewWorkflowsWorkflowStagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ReviewWorkflowsWorkflowStages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ReviewWorkflowsWorkflowEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type ReviewWorkflowsWorkflowFiltersInput = { + and?: InputMaybe>>; + contentTypes?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + stageRequiredToPublish?: InputMaybe; + stages?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type ReviewWorkflowsWorkflowInput = { + contentTypes?: InputMaybe; + name?: InputMaybe; + publishedAt?: InputMaybe; + stageRequiredToPublish?: InputMaybe; + stages?: InputMaybe>>; +}; + +export type ReviewWorkflowsWorkflowStage = { + color?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + name?: Maybe; + publishedAt?: Maybe; + updatedAt?: Maybe; + workflow?: Maybe; +}; + +export type ReviewWorkflowsWorkflowStageEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type ReviewWorkflowsWorkflowStageFiltersInput = { + and?: InputMaybe>>; + color?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + updatedAt?: InputMaybe; + workflow?: InputMaybe; +}; + +export type ReviewWorkflowsWorkflowStageInput = { + color?: InputMaybe; + name?: InputMaybe; + publishedAt?: InputMaybe; + workflow?: InputMaybe; +}; + +export type ReviewWorkflowsWorkflowStageRelationResponseCollection = { + nodes: Array; +}; + +export type StringFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type UploadFile = { + alternativeText?: Maybe; + caption?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + ext?: Maybe; + focalPoint?: Maybe; + formats?: Maybe; + hash: Scalars['String']['output']; + height?: Maybe; + mime: Scalars['String']['output']; + name: Scalars['String']['output']; + previewUrl?: Maybe; + provider: Scalars['String']['output']; + provider_metadata?: Maybe; + publishedAt?: Maybe; + related?: Maybe>>; + size: Scalars['Float']['output']; + updatedAt?: Maybe; + url: Scalars['String']['output']; + width?: Maybe; +}; + +export type UploadFileEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type UploadFileFiltersInput = { + alternativeText?: InputMaybe; + and?: InputMaybe>>; + caption?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + ext?: InputMaybe; + focalPoint?: InputMaybe; + formats?: InputMaybe; + hash?: InputMaybe; + height?: InputMaybe; + mime?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + previewUrl?: InputMaybe; + provider?: InputMaybe; + provider_metadata?: InputMaybe; + publishedAt?: InputMaybe; + size?: InputMaybe; + updatedAt?: InputMaybe; + url?: InputMaybe; + width?: InputMaybe; +}; + +export type UsersPermissionsCreateRolePayload = { + ok: Scalars['Boolean']['output']; +}; + +export type UsersPermissionsDeleteRolePayload = { + ok: Scalars['Boolean']['output']; +}; + +export type UsersPermissionsLoginInput = { + identifier: Scalars['String']['input']; + password: Scalars['String']['input']; + provider?: Scalars['String']['input']; +}; + +export type UsersPermissionsLoginPayload = { + jwt?: Maybe; + user: UsersPermissionsMe; +}; + +export type UsersPermissionsMe = { + blocked?: Maybe; + confirmed?: Maybe; + documentId: Scalars['ID']['output']; + email?: Maybe; + id: Scalars['ID']['output']; + role?: Maybe; + username: Scalars['String']['output']; +}; + +export type UsersPermissionsMeRole = { + description?: Maybe; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; + type?: Maybe; +}; + +export type UsersPermissionsPasswordPayload = { + ok: Scalars['Boolean']['output']; +}; + +export type UsersPermissionsPermission = { + action: Scalars['String']['output']; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + publishedAt?: Maybe; + role?: Maybe; + updatedAt?: Maybe; +}; + +export type UsersPermissionsPermissionFiltersInput = { + action?: InputMaybe; + and?: InputMaybe>>; + createdAt?: InputMaybe; + documentId?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + role?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type UsersPermissionsPermissionRelationResponseCollection = { + nodes: Array; +}; + +export type UsersPermissionsRegisterInput = { + email: Scalars['String']['input']; + password: Scalars['String']['input']; + username: Scalars['String']['input']; +}; + +export type UsersPermissionsRole = { + createdAt?: Maybe; + description?: Maybe; + documentId: Scalars['ID']['output']; + name: Scalars['String']['output']; + permissions: Array>; + permissions_connection?: Maybe; + publishedAt?: Maybe; + type?: Maybe; + updatedAt?: Maybe; + users: Array>; + users_connection?: Maybe; +}; + + +export type UsersPermissionsRolePermissionsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type UsersPermissionsRolePermissions_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type UsersPermissionsRoleUsersArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type UsersPermissionsRoleUsers_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type UsersPermissionsRoleEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type UsersPermissionsRoleFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + description?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + permissions?: InputMaybe; + publishedAt?: InputMaybe; + type?: InputMaybe; + updatedAt?: InputMaybe; + users?: InputMaybe; +}; + +export type UsersPermissionsRoleInput = { + description?: InputMaybe; + name?: InputMaybe; + permissions?: InputMaybe>>; + publishedAt?: InputMaybe; + type?: InputMaybe; + users?: InputMaybe>>; +}; + +export type UsersPermissionsUpdateRolePayload = { + ok: Scalars['Boolean']['output']; +}; + +export type UsersPermissionsUser = { + blocked?: Maybe; + confirmed?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + email: Scalars['String']['output']; + provider?: Maybe; + publishedAt?: Maybe; + role?: Maybe; + updatedAt?: Maybe; + username: Scalars['String']['output']; +}; + +export type UsersPermissionsUserEntityResponse = { + data?: Maybe; +}; + +export type UsersPermissionsUserEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type UsersPermissionsUserFiltersInput = { + and?: InputMaybe>>; + blocked?: InputMaybe; + confirmed?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + email?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + provider?: InputMaybe; + publishedAt?: InputMaybe; + role?: InputMaybe; + updatedAt?: InputMaybe; + username?: InputMaybe; +}; + +export type UsersPermissionsUserInput = { + blocked?: InputMaybe; + confirmed?: InputMaybe; + email?: InputMaybe; + password?: InputMaybe; + provider?: InputMaybe; + publishedAt?: InputMaybe; + role?: InputMaybe; + username?: InputMaybe; +}; + +export type UsersPermissionsUserRelationResponseCollection = { + nodes: Array; +}; + +export type Vac = { + contact_information_internal: Array>; + contact_information_internal_connection?: Maybe; + contact_information_public?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + publishedAt?: Maybe; + relatedProducts: Array>; + relatedProducts_connection?: Maybe; + relatedVACs: Array>; + relatedVACs_connection?: Maybe; + subcategories: Array>; + subcategories_connection?: Maybe; + title?: Maybe; + updatedAt?: Maybe; + vac?: Maybe; +}; + + +export type VacContact_Information_InternalArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacContact_Information_Internal_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacRelatedProductsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacRelatedProducts_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacRelatedVaCsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacRelatedVaCs_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacSubcategoriesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacSubcategories_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type VacEntityResponseCollection = { + nodes: Array; + pageInfo: Pagination; +}; + +export type VacFiltersInput = { + and?: InputMaybe>>; + contact_information_internal?: InputMaybe; + contact_information_public?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + relatedProducts?: InputMaybe; + relatedVACs?: InputMaybe; + subcategories?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; + vac?: InputMaybe; +}; + +export type VacInput = { + contact_information_internal?: InputMaybe>>; + contact_information_public?: InputMaybe; + publishedAt?: InputMaybe; + relatedProducts?: InputMaybe>>; + relatedVACs?: InputMaybe>>; + subcategories?: InputMaybe>>; + title?: InputMaybe; + vac?: InputMaybe; +}; + +export type VacRelationResponseCollection = { + nodes: Array; +}; + +export type WebsiteSetting = { + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + publishedAt?: Maybe; + triggerMatomoScript?: Maybe; + updatedAt?: Maybe; +}; + +export type WebsiteSettingInput = { + publishedAt?: InputMaybe; + triggerMatomoScript?: InputMaybe; +}; + +export type GetAllProductsQueryVariables = Exact<{ + locale?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + start?: InputMaybe; + limit?: InputMaybe; +}>; + + +export type GetAllProductsQuery = { products_connection?: { pageInfo: { total: number, page: number, pageSize: number, pageCount: number }, nodes: Array<{ documentId: string, content?: string | null, title: string, slug: string, uuid?: string | null, locale?: string | null, updatedAt?: any | null, createdAt?: any | null, id: string, metaTags?: { keymatch: string, title: string, description: string } | null, sections?: Array<{ __typename: 'ComponentComponentsContactInformationPublic', contact_information_public?: { contentBlock?: Array<{ id: string, content: string } | null> | null } | null } | { __typename: 'ComponentComponentsFaq', categorie8?: Enum_Componentcomponentsfaq_Kennisartikelcategorie | null, pdc_faq?: { title?: string | null, faq?: Array<{ body?: string | null, headingLevel?: number | null, id: string, label?: string | null } | null> | null } | null } | { __typename: 'ComponentComponentsFloLegalForm' } | { __typename: 'ComponentComponentsInternalBlockContent', id: string, internal_field?: { title: string, id: string, contact_information_internal: Array<{ contentBlock?: Array<{ id: string, content: string } | null> | null } | null>, contact_information_public?: { contentBlock?: Array<{ id: string, content: string } | null> | null } | null, content?: { uuid?: string | null, keywords?: string | null, contentBlock?: Array<{ content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null } | { __typename: 'ComponentComponentsUtrechtAccordion', categorie9?: Enum_Componentcomponentsutrechtaccordion_Kennisartikelcategorie | null, item?: Array<{ body?: string | null, headingLevel?: number | null, id: string, label?: string | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtImage', categorie2?: Enum_Componentcomponentsutrechtimage_Kennisartikelcategorie | null, imageData?: { name: string, alternativeText?: string | null, caption?: string | null, width?: number | null, height?: number | null, formats?: any | null, url: string } | null } | { __typename: 'ComponentComponentsUtrechtLink', href?: string | null, textContent?: string | null, icon?: Enum_Componentcomponentsutrechtlink_Icon | null, language?: string | null, categorie7?: Enum_Componentcomponentsutrechtlink_Kennisartikelcategorie | null } | { __typename: 'ComponentComponentsUtrechtLogoButton', appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null, categorie3?: Enum_Componentcomponentsutrechtlogobutton_Kennisartikelcategorie | null } | { __typename: 'ComponentComponentsUtrechtMultiColumnsButton', categorie6?: Enum_Componentcomponentsutrechtmulticolumnsbutton_Kennisartikelcategorie | null, column?: Array<{ id: string, title?: string | null, logoButton?: Array<{ appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null } | null> | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', id: string, content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | { __typename: 'ComponentComponentsUtrechtSpotlight', content: string, type?: Enum_Componentcomponentsutrechtspotlight_Type | null, categorie4?: Enum_Componentcomponentsutrechtspotlight_Kennisartikelcategorie | null, logoButton?: Array<{ id: string, label?: string | null, href?: string | null, textContent?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null } | null> | null } | { __typename: 'Error' } | null> | null, additional_information?: { content?: { id: string, uuid?: string | null, contentBlock?: Array<{ id: string, content: string, categorie10?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null, price?: { price?: Array<{ currency: Enum_Componentcomponentsprice_Currency, id: string, label: string, uuid?: string | null, value: number } | null> | null } | null, kennisartikelMetadata?: { uuid?: string | null, doelgroep: Enum_Componentcomponentskennisartikel_Doelgroep, productAanwezig: boolean, productValtOnder?: string | null, upnUri: string, afdelingen?: Array<{ afdelingId: string, afdelingNaam: string } | null> | null, verantwoordelijkeOrganisatie?: { owmsIdentifier: string, owmsPrefLabel?: string | null, owmsEndDate: any } | null } | null }> } | null }; + +export type GetProductByUuidOrDocumentIdQueryVariables = Exact<{ + locale?: InputMaybe; + uuid?: InputMaybe; + documentId?: InputMaybe; + status?: InputMaybe; +}>; + + +export type GetProductByUuidOrDocumentIdQuery = { products: Array<{ publishedAt?: any | null, content?: string | null, title: string, slug: string, uuid?: string | null, locale?: string | null, updatedAt?: any | null, createdAt?: any | null, id: string, metaTags?: { keymatch: string, title: string, description: string } | null, sections?: Array<{ component: 'ComponentComponentsContactInformationPublic', contact_information_public?: { contentBlock?: Array<{ id: string, content: string } | null> | null } | null } | { component: 'ComponentComponentsFaq', categorie8?: Enum_Componentcomponentsfaq_Kennisartikelcategorie | null, pdc_faq?: { title?: string | null, faq?: Array<{ body?: string | null, headingLevel?: number | null, id: string, label?: string | null } | null> | null } | null } | { id: string, component: 'ComponentComponentsInternalBlockContent', internal_field?: { title: string, id: string, contact_information_internal: Array<{ contentBlock?: Array<{ id: string, content: string } | null> | null } | null>, contact_information_public?: { contentBlock?: Array<{ id: string, content: string } | null> | null } | null, content?: { id: string, uuid?: string | null, keywords?: string | null, contentBlock?: Array<{ content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null } | { component: 'ComponentComponentsUtrechtAccordion', categorie9?: Enum_Componentcomponentsutrechtaccordion_Kennisartikelcategorie | null, item?: Array<{ body?: string | null, headingLevel?: number | null, id: string, label?: string | null } | null> | null } | { component: 'ComponentComponentsUtrechtImage', categorie2?: Enum_Componentcomponentsutrechtimage_Kennisartikelcategorie | null, imageData?: { name: string, alternativeText?: string | null, caption?: string | null, width?: number | null, height?: number | null, formats?: any | null, url: string } | null } | { href?: string | null, textContent?: string | null, icon?: Enum_Componentcomponentsutrechtlink_Icon | null, language?: string | null, component: 'ComponentComponentsUtrechtLink', categorie7?: Enum_Componentcomponentsutrechtlink_Kennisartikelcategorie | null } | { appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null, component: 'ComponentComponentsUtrechtLogoButton', categorie3?: Enum_Componentcomponentsutrechtlogobutton_Kennisartikelcategorie | null } | { component: 'ComponentComponentsUtrechtMultiColumnsButton', categorie6?: Enum_Componentcomponentsutrechtmulticolumnsbutton_Kennisartikelcategorie | null, column?: Array<{ id: string, title?: string | null, logoButton?: Array<{ appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null, component: 'ComponentComponentsUtrechtLogoButton' } | null> | null } | null> | null } | { id: string, content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null, component: 'ComponentComponentsUtrechtRichText', categorie5?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | { content: string, type?: Enum_Componentcomponentsutrechtspotlight_Type | null, component: 'ComponentComponentsUtrechtSpotlight', categorie4?: Enum_Componentcomponentsutrechtspotlight_Kennisartikelcategorie | null, logoButton?: Array<{ __typename: 'ComponentComponentsUtrechtLogoButton', id: string, label?: string | null, href?: string | null, textContent?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null } | null> | null } | {} | null> | null, additional_information?: { content?: { id: string, uuid?: string | null, contentBlock?: Array<{ id: string, content: string, categorie10?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null, component: 'ComponentComponentsUtrechtRichText' } | null> | null } | null } | null, price?: { price?: Array<{ currency: Enum_Componentcomponentsprice_Currency, id: string, label: string, uuid?: string | null, value: number } | null> | null } | null, kennisartikelMetadata?: { uuid?: string | null, doelgroep: Enum_Componentcomponentskennisartikel_Doelgroep, productAanwezig: boolean, productValtOnder?: string | null, upnUri: string, afdelingen?: Array<{ afdelingId: string, afdelingNaam: string } | null> | null, verantwoordelijkeOrganisatie?: { owmsIdentifier: string, owmsPrefLabel?: string | null, owmsEndDate: any } | null } | null } | null> }; + +export type GetProductForUpdateQueryVariables = Exact<{ + locale?: InputMaybe; + uuid?: InputMaybe; + documentId?: InputMaybe; + status?: InputMaybe; +}>; + + +export type GetProductForUpdateQuery = { products: Array<{ publishedAt?: any | null, content?: string | null, title: string, slug: string, uuid?: string | null, locale?: string | null, updatedAt?: any | null, createdAt?: any | null, id: string, metaTags?: { keymatch: string, title: string, description: string } | null, sections?: Array<{ component: 'ComponentComponentsContactInformationPublic', contact_information_public?: { contentBlock?: Array<{ content: string } | null> | null } | null } | { component: 'ComponentComponentsFaq', categorie8?: Enum_Componentcomponentsfaq_Kennisartikelcategorie | null, pdc_faq?: { title?: string | null, faq?: Array<{ body?: string | null, headingLevel?: number | null, label?: string | null } | null> | null } | null } | { component: 'ComponentComponentsInternalBlockContent', internal_field?: { title: string, id: string, contact_information_internal: Array<{ contentBlock?: Array<{ content: string } | null> | null } | null>, contact_information_public?: { contentBlock?: Array<{ content: string } | null> | null } | null, content?: { uuid?: string | null, keywords?: string | null, contentBlock?: Array<{ content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null } | { component: 'ComponentComponentsUtrechtAccordion', categorie9?: Enum_Componentcomponentsutrechtaccordion_Kennisartikelcategorie | null, item?: Array<{ body?: string | null, headingLevel?: number | null, label?: string | null } | null> | null } | { component: 'ComponentComponentsUtrechtImage', categorie2?: Enum_Componentcomponentsutrechtimage_Kennisartikelcategorie | null, imageData?: { name: string, alternativeText?: string | null, caption?: string | null, width?: number | null, height?: number | null, formats?: any | null, url: string } | null } | { href?: string | null, textContent?: string | null, icon?: Enum_Componentcomponentsutrechtlink_Icon | null, language?: string | null, component: 'ComponentComponentsUtrechtLink', categorie7?: Enum_Componentcomponentsutrechtlink_Kennisartikelcategorie | null } | { appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null, component: 'ComponentComponentsUtrechtLogoButton', categorie3?: Enum_Componentcomponentsutrechtlogobutton_Kennisartikelcategorie | null } | { component: 'ComponentComponentsUtrechtMultiColumnsButton', categorie6?: Enum_Componentcomponentsutrechtmulticolumnsbutton_Kennisartikelcategorie | null, column?: Array<{ title?: string | null, logoButton?: Array<{ appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null, component: 'ComponentComponentsUtrechtLogoButton' } | null> | null } | null> | null } | { content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null, component: 'ComponentComponentsUtrechtRichText', categorie5?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | { content: string, type?: Enum_Componentcomponentsutrechtspotlight_Type | null, component: 'ComponentComponentsUtrechtSpotlight', categorie4?: Enum_Componentcomponentsutrechtspotlight_Kennisartikelcategorie | null, logoButton?: Array<{ __typename: 'ComponentComponentsUtrechtLogoButton', label?: string | null, href?: string | null, textContent?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null } | null> | null } | {} | null> | null, additional_information?: { content?: { uuid?: string | null, contentBlock?: Array<{ id: string, content: string, categorie10?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null, component: 'ComponentComponentsUtrechtRichText' } | null> | null } | null } | null, price?: { price?: Array<{ currency: Enum_Componentcomponentsprice_Currency, label: string, uuid?: string | null, value: number } | null> | null } | null, kennisartikelMetadata?: { uuid?: string | null, doelgroep: Enum_Componentcomponentskennisartikel_Doelgroep, productAanwezig: boolean, productValtOnder?: string | null, upnUri: string, afdelingen?: Array<{ afdelingId: string, afdelingNaam: string } | null> | null, verantwoordelijkeOrganisatie?: { owmsIdentifier: string, owmsPrefLabel?: string | null, owmsEndDate: any } | null } | null } | null> }; + +export type GetInternalFieldsQueryVariables = Exact<{ + uuid?: InputMaybe; +}>; + + +export type GetInternalFieldsQuery = { internalFields: Array<{ title: string, id: string, content?: { uuid?: string | null, contentBlock?: Array<{ content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null> }; + +export type CreateInternalFieldMutationVariables = Exact<{ + data: InternalFieldInput; +}>; + + +export type CreateInternalFieldMutation = { createInternalField?: { title: string, id: string, content?: { id: string, uuid?: string | null, contentBlock?: Array<{ content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null }; + +export type UpdateInternalFieldMutationVariables = Exact<{ + data: InternalFieldInput; + id: Scalars['ID']['input']; +}>; + + +export type UpdateInternalFieldMutation = { updateInternalField?: { content?: { id: string, uuid?: string | null, contentBlock?: Array<{ content: string } | null> | null } | null } | null }; + +export type CreateKennisartikelMutationVariables = Exact<{ + data: ProductInput; + locale?: InputMaybe; +}>; + + +export type CreateKennisartikelMutation = { createProduct?: { content?: string | null, title: string, slug: string, uuid?: string | null, updatedAt?: any | null, createdAt?: any | null, locale?: string | null, id: string, metaTags?: { keymatch: string, title: string, description: string } | null, sections?: Array<{ id: string, component: 'ComponentComponentsInternalBlockContent', internal_field?: { title: string, id: string, content?: { uuid?: string | null, contentBlock?: Array<{ content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null } | { id: string, content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null, component: 'ComponentComponentsUtrechtRichText' } | {} | null> | null, price?: { price?: Array<{ currency: Enum_Componentcomponentsprice_Currency, id: string, label: string, uuid?: string | null, value: number } | null> | null } | null, additional_information?: { content?: { id: string, uuid?: string | null, contentBlock?: Array<{ id: string, content: string, categorie10?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null, kennisartikelMetadata?: { uuid?: string | null, doelgroep: Enum_Componentcomponentskennisartikel_Doelgroep, productAanwezig: boolean, productValtOnder?: string | null, upnUri: string, afdelingen?: Array<{ afdelingId: string, afdelingNaam: string } | null> | null, verantwoordelijkeOrganisatie?: { owmsIdentifier: string, owmsPrefLabel?: string | null, owmsEndDate: any } | null } | null } | null }; + +export type UpdateKennisartikelMutationVariables = Exact<{ + data: ProductInput; + locale?: InputMaybe; + id: Scalars['ID']['input']; +}>; + + +export type UpdateKennisartikelMutation = { updateProduct?: { content?: string | null, title: string, slug: string, uuid?: string | null, locale?: string | null, updatedAt?: any | null, createdAt?: any | null, id: string, metaTags?: { keymatch: string, title: string, description: string } | null, sections?: Array<{ id: string, component: 'ComponentComponentsInternalBlockContent', internal_field?: { title: string, id: string, content?: { uuid?: string | null, contentBlock?: Array<{ content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null } | { id: string, content: string, kennisartikelCategorie?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null, component: 'ComponentComponentsUtrechtRichText' } | {} | null> | null, price?: { price?: Array<{ currency: Enum_Componentcomponentsprice_Currency, id: string, label: string, uuid?: string | null, value: number } | null> | null } | null, additional_information?: { content?: { id: string, uuid?: string | null, contentBlock?: Array<{ id: string, content: string, categorie10?: Enum_Componentcomponentsutrechtrichtext_Kennisartikelcategorie | null } | null> | null } | null } | null, kennisartikelMetadata?: { uuid?: string | null, doelgroep: Enum_Componentcomponentskennisartikel_Doelgroep, productAanwezig: boolean, productValtOnder?: string | null, upnUri: string, afdelingen?: Array<{ afdelingId: string, afdelingNaam: string } | null> | null, verantwoordelijkeOrganisatie?: { owmsIdentifier: string, owmsPrefLabel?: string | null, owmsEndDate: any } | null } | null } | null }; + +export type GetAllVacItemsQueryVariables = Exact<{ + page?: InputMaybe; + pageSize?: InputMaybe; + start?: InputMaybe; + limit?: InputMaybe; +}>; + + +export type GetAllVacItemsQuery = { vacs_connection?: { pageInfo: { total: number, page: number, pageSize: number, pageCount: number }, nodes: Array<{ createdAt?: any | null, updatedAt?: any | null, title?: string | null, id: string, contact_information_internal: Array<{ contentBlock?: Array<{ id: string, content: string } | null> | null } | null>, contact_information_public?: { contentBlock?: Array<{ id: string, content: string } | null> | null } | null, relatedVACs: Array<{ vac?: { uuid?: string | null } | null } | null>, relatedProducts: Array<{ uuid?: string | null, title: string } | null>, vac?: { uuid?: string | null, vraag?: string | null, status?: Enum_Componentcomponentsvac_Status | null, doelgroep?: Enum_Componentcomponentsvac_Doelgroep | null, toelichting?: string | null, keywords?: string | null, antwoord?: Array<{ content?: string | null, kennisartikelCategorie?: Enum_Componentcomponentsantwoord_Kennisartikelcategorie | null } | null> | null, afdelingen?: Array<{ afdelingId: string, afdelingNaam: string } | null> | null } | null }> } | null }; + +export type GetVacItemByUuidOrDocumentIdQueryVariables = Exact<{ + uuid?: InputMaybe; + documentId?: InputMaybe; + status?: InputMaybe; +}>; + + +export type GetVacItemByUuidOrDocumentIdQuery = { vacs: Array<{ createdAt?: any | null, updatedAt?: any | null, publishedAt?: any | null, title?: string | null, id: string, contact_information_internal: Array<{ contentBlock?: Array<{ id: string, content: string } | null> | null } | null>, contact_information_public?: { contentBlock?: Array<{ id: string, content: string } | null> | null } | null, relatedVACs: Array<{ vac?: { uuid?: string | null } | null } | null>, relatedProducts: Array<{ uuid?: string | null, title: string } | null>, vac?: { uuid?: string | null, vraag?: string | null, status?: Enum_Componentcomponentsvac_Status | null, doelgroep?: Enum_Componentcomponentsvac_Doelgroep | null, toelichting?: string | null, keywords?: string | null, antwoord?: Array<{ content?: string | null, kennisartikelCategorie?: Enum_Componentcomponentsantwoord_Kennisartikelcategorie | null } | null> | null, afdelingen?: Array<{ afdelingId: string, afdelingNaam: string } | null> | null } | null } | null> }; + +export type CreateVacMutationVariables = Exact<{ + data: VacInput; +}>; + + +export type CreateVacMutation = { createVac?: { createdAt?: any | null, publishedAt?: any | null, title?: string | null, id: string, vac?: { id: string, status?: Enum_Componentcomponentsvac_Status | null, doelgroep?: Enum_Componentcomponentsvac_Doelgroep | null, uuid?: string | null, toelichting?: string | null, keywords?: string | null, antwoord?: Array<{ content?: string | null, kennisartikelCategorie?: Enum_Componentcomponentsantwoord_Kennisartikelcategorie | null } | null> | null, afdelingen?: Array<{ afdelingId: string, afdelingNaam: string } | null> | null } | null } | null }; + +export type UpdateVacMutationVariables = Exact<{ + data: VacInput; + id: Scalars['ID']['input']; +}>; + + +export type UpdateVacMutation = { updateVac?: { createdAt?: any | null, publishedAt?: any | null, title?: string | null, id: string, vac?: { id: string, status?: Enum_Componentcomponentsvac_Status | null, doelgroep?: Enum_Componentcomponentsvac_Doelgroep | null, uuid?: string | null, toelichting?: string | null, keywords?: string | null, antwoord?: Array<{ content?: string | null, kennisartikelCategorie?: Enum_Componentcomponentsantwoord_Kennisartikelcategorie | null } | null> | null, afdelingen?: Array<{ afdelingId: string, afdelingNaam: string } | null> | null } | null } | null }; + + +export const GetAllProductsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAllProducts"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"page"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"start"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"limit"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"Variable","name":{"kind":"Name","value":"start"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"Variable","name":{"kind":"Name","value":"limit"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"page"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"pageSize"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"page"}},{"kind":"Field","name":{"kind":"Name","value":"pageSize"}},{"kind":"Field","name":{"kind":"Name","value":"pageCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"keymatch"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsContactInformationPublic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsInternalBlockContent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"internal_field"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_internal"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"Field","name":{"kind":"Name","value":"keywords"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtImage"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"categorie2"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"imageData"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}},{"kind":"Field","name":{"kind":"Name","value":"caption"}},{"kind":"Field","name":{"kind":"Name","value":"width"}},{"kind":"Field","name":{"kind":"Name","value":"height"}},{"kind":"Field","name":{"kind":"Name","value":"formats"}},{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLogoButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"categorie3"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtSpotlight"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"categorie4"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtMultiColumnsButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"categorie6"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"column"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLink"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"categorie7"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"language"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsFaq"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"categorie8"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"pdc_faq"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"faq"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"categorie9"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"item"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"additional_information"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie10"},"name":{"kind":"Name","value":"kennisartikelCategorie"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"price"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currency"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"doelgroep"}},{"kind":"Field","name":{"kind":"Name","value":"productAanwezig"}},{"kind":"Field","name":{"kind":"Name","value":"productValtOnder"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingen"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"afdelingId"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingNaam"}}]}},{"kind":"Field","name":{"kind":"Name","value":"verantwoordelijkeOrganisatie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"owmsIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"owmsPrefLabel"}},{"kind":"Field","name":{"kind":"Name","value":"owmsEndDate"}}]}},{"kind":"Field","name":{"kind":"Name","value":"upnUri"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetProductByUuidOrDocumentIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProductByUUIDOrDocumentId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"uuid"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"documentId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"or"},"value":{"kind":"ListValue","values":[{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"uuid"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"uuid"}}}]}}]},{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"documentId"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"documentId"}}}]}}]}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"publishedAt"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"keymatch"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsContactInformationPublic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsInternalBlockContent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"internal_field"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_internal"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"Field","name":{"kind":"Name","value":"keywords"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie5"},"name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtImage"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie2"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"imageData"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}},{"kind":"Field","name":{"kind":"Name","value":"caption"}},{"kind":"Field","name":{"kind":"Name","value":"width"}},{"kind":"Field","name":{"kind":"Name","value":"height"}},{"kind":"Field","name":{"kind":"Name","value":"formats"}},{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLogoButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie3"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtSpotlight"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie4"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"__typename"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtMultiColumnsButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie6"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"column"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLink"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie7"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"language"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsFaq"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie8"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"pdc_faq"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"faq"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie9"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"item"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"additional_information"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie10"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"price"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currency"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"doelgroep"}},{"kind":"Field","name":{"kind":"Name","value":"productAanwezig"}},{"kind":"Field","name":{"kind":"Name","value":"productValtOnder"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingen"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"afdelingId"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingNaam"}}]}},{"kind":"Field","name":{"kind":"Name","value":"verantwoordelijkeOrganisatie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"owmsIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"owmsPrefLabel"}},{"kind":"Field","name":{"kind":"Name","value":"owmsEndDate"}}]}},{"kind":"Field","name":{"kind":"Name","value":"upnUri"}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetProductForUpdateDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProductForUpdate"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"uuid"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"documentId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"or"},"value":{"kind":"ListValue","values":[{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"uuid"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"uuid"}}}]}}]},{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"documentId"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"documentId"}}}]}}]}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"publishedAt"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"keymatch"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsContactInformationPublic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsInternalBlockContent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"internal_field"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_internal"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"Field","name":{"kind":"Name","value":"keywords"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie5"},"name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtImage"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie2"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"imageData"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}},{"kind":"Field","name":{"kind":"Name","value":"caption"}},{"kind":"Field","name":{"kind":"Name","value":"width"}},{"kind":"Field","name":{"kind":"Name","value":"height"}},{"kind":"Field","name":{"kind":"Name","value":"formats"}},{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLogoButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie3"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtSpotlight"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie4"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"__typename"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtMultiColumnsButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie6"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"column"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLink"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie7"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"language"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsFaq"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie8"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"pdc_faq"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"faq"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie9"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","name":{"kind":"Name","value":"item"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"additional_information"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie10"},"name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"price"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currency"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"doelgroep"}},{"kind":"Field","name":{"kind":"Name","value":"productAanwezig"}},{"kind":"Field","name":{"kind":"Name","value":"productValtOnder"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingen"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"afdelingId"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingNaam"}}]}},{"kind":"Field","name":{"kind":"Name","value":"verantwoordelijkeOrganisatie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"owmsIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"owmsPrefLabel"}},{"kind":"Field","name":{"kind":"Name","value":"owmsEndDate"}}]}},{"kind":"Field","name":{"kind":"Name","value":"upnUri"}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetInternalFieldsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getInternalFields"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"uuid"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"internalFields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"content"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"uuid"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"uuid"}}}]}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const CreateInternalFieldDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"createInternalField"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"InternalFieldInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createInternalField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const UpdateInternalFieldDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"updateInternalField"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"InternalFieldInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateInternalField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}},{"kind":"Argument","name":{"kind":"Name","value":"documentId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const CreateKennisartikelDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"createKennisartikel"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ProductInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createProduct"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"keymatch"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsInternalBlockContent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"internal_field"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"price"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currency"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"additional_information"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie10"},"name":{"kind":"Name","value":"kennisartikelCategorie"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"doelgroep"}},{"kind":"Field","name":{"kind":"Name","value":"productAanwezig"}},{"kind":"Field","name":{"kind":"Name","value":"productValtOnder"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingen"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"afdelingId"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingNaam"}}]}},{"kind":"Field","name":{"kind":"Name","value":"verantwoordelijkeOrganisatie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"owmsIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"owmsPrefLabel"}},{"kind":"Field","name":{"kind":"Name","value":"owmsEndDate"}}]}},{"kind":"Field","name":{"kind":"Name","value":"upnUri"}}]}}]}}]}}]} as unknown as DocumentNode; +export const UpdateKennisartikelDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"updateKennisartikel"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ProductInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateProduct"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"documentId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"keymatch"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}},{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsInternalBlockContent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","alias":{"kind":"Name","value":"component"},"name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"internal_field"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"price"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currency"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"additional_information"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","alias":{"kind":"Name","value":"categorie10"},"name":{"kind":"Name","value":"kennisartikelCategorie"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"doelgroep"}},{"kind":"Field","name":{"kind":"Name","value":"productAanwezig"}},{"kind":"Field","name":{"kind":"Name","value":"productValtOnder"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingen"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"afdelingId"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingNaam"}}]}},{"kind":"Field","name":{"kind":"Name","value":"verantwoordelijkeOrganisatie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"owmsIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"owmsPrefLabel"}},{"kind":"Field","name":{"kind":"Name","value":"owmsEndDate"}}]}},{"kind":"Field","name":{"kind":"Name","value":"upnUri"}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetAllVacItemsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAllVacItems"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"page"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"start"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"limit"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"vacs_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"Variable","name":{"kind":"Name","value":"start"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"Variable","name":{"kind":"Name","value":"limit"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"page"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"pageSize"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"page"}},{"kind":"Field","name":{"kind":"Name","value":"pageSize"}},{"kind":"Field","name":{"kind":"Name","value":"pageCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_internal"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"relatedVACs"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"vac"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"relatedProducts"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vac"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"vraag"}},{"kind":"Field","name":{"kind":"Name","value":"antwoord"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"doelgroep"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingen"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"afdelingId"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingNaam"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toelichting"}},{"kind":"Field","name":{"kind":"Name","value":"keywords"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetVacItemByUuidOrDocumentIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getVacItemByUUIDOrDocumentId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"uuid"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"documentId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"vacs"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"or"},"value":{"kind":"ListValue","values":[{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"vac"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"uuid"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"uuid"}}}]}}]}}]},{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"documentId"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"documentId"}}}]}}]}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"publishedAt"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_internal"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"relatedVACs"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"vac"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"relatedProducts"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vac"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"vraag"}},{"kind":"Field","name":{"kind":"Name","value":"antwoord"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"doelgroep"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingen"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"afdelingId"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingNaam"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toelichting"}},{"kind":"Field","name":{"kind":"Name","value":"keywords"}}]}}]}}]}}]} as unknown as DocumentNode; +export const CreateVacDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"createVac"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"VacInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createVac"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"publishedAt"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"vac"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"antwoord"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"doelgroep"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"toelichting"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingen"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"afdelingId"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingNaam"}}]}},{"kind":"Field","name":{"kind":"Name","value":"keywords"}}]}}]}}]}}]} as unknown as DocumentNode; +export const UpdateVacDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"updateVac"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"VacInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateVac"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"documentId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}},{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"id"},"name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"publishedAt"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"vac"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"antwoord"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"kennisartikelCategorie"}}]}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"doelgroep"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"toelichting"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingen"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"afdelingId"}},{"kind":"Field","name":{"kind":"Name","value":"afdelingNaam"}}]}},{"kind":"Field","name":{"kind":"Name","value":"keywords"}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/apps/overige-objecten-api/gql/index.ts b/apps/overige-objecten-api/gql/index.ts new file mode 100644 index 000000000..af7839936 --- /dev/null +++ b/apps/overige-objecten-api/gql/index.ts @@ -0,0 +1 @@ +export * from "./gql"; \ No newline at end of file diff --git a/apps/overige-objecten-api/jest.config.ts b/apps/overige-objecten-api/jest.config.ts deleted file mode 100644 index c34145713..000000000 --- a/apps/overige-objecten-api/jest.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { Config } from 'jest'; - -const config: Config = { - preset: 'ts-jest', - // to obtain access to the matchers. - moduleFileExtensions: ['ts', 'tsx', 'js', 'json', 'node'], - setupFilesAfterEnv: ['/src/tests/jest.setup.ts'], - modulePaths: [''], - testEnvironment: 'node', - roots: ['/src'], - transform: { - '^.+\\.(ts)$': [ - 'ts-jest', - { - tsconfig: 'tsconfig.test.json', - }, - ], - }, - moduleNameMapper: { - uuid: '/src/__mocks__/uuid.ts', - }, -}; - -export default config; diff --git a/apps/overige-objecten-api/package.json b/apps/overige-objecten-api/package.json index 8060396e3..5c7184605 100644 --- a/apps/overige-objecten-api/package.json +++ b/apps/overige-objecten-api/package.json @@ -5,65 +5,84 @@ "author": "@frameless", "description": "Overige Objecten API for PDC", "license": "EUPL-1.2", + "type": "module", "keywords": [], "scripts": { - "prebuild": "yarn clean && yarn generate-types", + "prebuild": "pnpm clean && pnpm generate-types", + "codegen": "wait-on http://localhost:1337 && graphql-codegen --config src/codegen.ts", + "codegen:docker": "graphql-codegen", + "lint": "eslint --report-unused-disable-directives .", + "lint:fix": "eslint --fix .", + "lint-build": "tsc --noEmit --project tsconfig.json", "build": "npm-run-all --parallel build:*", - "build:server": "tsc -p ./tsconfig.json", - "build:openapi": "mkdir -p dist/src/docs && cp -R src/docs/* dist/src/docs/", + "build:server": "tsup", + "build:openapi": "mkdir -p dist/docs && cp -R src/docs/* dist/docs/", "build:vite": "vite build", "watch": "npm-run-all --parallel watch:*", - "watch:server": "tsc -p ./tsconfig.json -w", "watch:vite": "vite", - "start": "NODE_ENV=production node ./dist/src/server.js", - "dev": "NODE_ENV=development nodemon src/server.ts", + "dev": "npm run watch", "clean": "rimraf dist src/types tmp", "generate-types": "openapi-typescript src/docs/openapi.yaml --output src/types/openapi.ts", - "test": "OVERIGE_OBJECTEN_API_PORT=3000 jest --coverage --forceExit --verbose", - "test:watch": "OVERIGE_OBJECTEN_API_PORT=3000 jest --watch" + "test": "OVERIGE_OBJECTEN_API_PORT=3000 vitest run --coverage", + "test:watch": "OVERIGE_OBJECTEN_API_PORT=3000 vitest", + "start": "NODE_ENV=production node --import ./register-loader.mjs ./dist/server.js", + "watch:server": "tsup --watch --onSuccess \"nodemon --import ./register-loader.mjs dist/server.js\"" }, "dependencies": { + "@frameless/ui": "workspace:*", + "@frameless/utils": "workspace:*", + "@utrecht/component-library-react": "7.3.5", + "@utrecht/web-component-library-react": "3.0.0", "cors": "2.8.5", + "dompurify": "3.2.1", "dotenv": "16.4.5", "express": "4.21.0", "express-openapi-validator": "5.3.7", "js-yaml": "4.1.0", - "swagger-ui-express": "5.0.1", + "lodash.memoize": "4.1.2", "lodash.merge": "4.6.2", "lodash.snakecase": "4.1.1", - "lodash.memoize": "4.1.2", - "react": "18.3.1", - "@utrecht/web-component-library-react": "3.0.0", - "@utrecht/component-library-react": "7.3.5", - "@frameless/ui": "0.1.2", - "@frameless/utils": "0.1.0", - "dompurify": "3.2.1" + "react": "19.2.6", + "react-dom": "19.2.6", + "react-markdown": "10.1.0", + "rehype-raw": "7.0.0", + "slugify": "1.6.9", + "swagger-ui-express": "5.0.1", + "jsdom": "25.0.1" }, "devDependencies": { + "@frameless/eslint-config": "1.2.0", + "@graphql-codegen/cli": "5.0.2", + "@graphql-codegen/client-preset": "4.1.0", "@types/cors": "2.8.17", "@types/dompurify": "3.2.0", - "@types/jest": "29.5.12", + "@types/lodash.memoize": "4.1.9", + "@types/lodash.merge": "4.6.9", + "@types/lodash.snakecase": "4.1.9", "@types/supertest": "6.0.2", "@types/swagger-ui-express": "4.1.6", "@types/yamljs": "0.2.34", - "jest": "29.7.0", + "@vitejs/plugin-react": "4.7.0", + "@vitest/coverage-v8": "2.1.1", + "@vitest/ui": "2.1.8", "nodemon": "3.1.7", "openapi-typescript": "7.4.1", "rimraf": "6.0.1", "supertest": "7.0.0", - "ts-jest": "29.2.3", - "ts-node": "10.9.2", + "tsup": "8.5.1", "typescript": "5.0.4", - "jest-fetch-mock": "3.0.3", - "@types/lodash.merge": "4.6.9", - "@types/lodash.snakecase": "4.1.9", - "@types/lodash.memoize": "4.1.9", - "@vitejs/plugin-react": "4.7.0", - "vite": "5.4.21" + "vite": "5.4.21", + "vitest": "2.1.1", + "vitest-fetch-mock": "0.4.5", + "wait-on": "7.2.0" }, "repository": { "type": "git+ssh", "url": "git@github.com:frameless/strapi.git", "directory": "apps/overige-objecten-api" + }, + "engines": { + "node": "24.x.x", + "pnpm": "10.23.0" } } diff --git a/apps/overige-objecten-api/public/preview-style.css b/apps/overige-objecten-api/public/preview-style.css index 75b5b9065..b933ce1a5 100644 --- a/apps/overige-objecten-api/public/preview-style.css +++ b/apps/overige-objecten-api/public/preview-style.css @@ -74,6 +74,7 @@ padding-block: var(--utrecht-preview-layout-padding-block); padding-inline: var(--utrecht-preview-layout-padding-inline); } + .utrecht-status-badge { margin-block-end: var(--utrecht-status-badge-margin-block-end, 24px); } diff --git a/apps/overige-objecten-api/register-loader.mjs b/apps/overige-objecten-api/register-loader.mjs new file mode 100644 index 000000000..a40a2e1b1 --- /dev/null +++ b/apps/overige-objecten-api/register-loader.mjs @@ -0,0 +1,4 @@ +import { register } from 'node:module'; +import { pathToFileURL } from 'node:url'; + +register('./esm-loader.mjs', pathToFileURL('./')); diff --git a/apps/overige-objecten-api/src/__mocks__/createKennisartikel.json b/apps/overige-objecten-api/src/__mocks__/createKennisartikel.json new file mode 100644 index 000000000..e58eac285 --- /dev/null +++ b/apps/overige-objecten-api/src/__mocks__/createKennisartikel.json @@ -0,0 +1,44 @@ +{ + "type": "http://localhost:4001/api/v2/objecttypes/kennisartikel", + "record": { + "typeVersion": 1, + "startAt": "2024-01-01", + "data": { + "url": "http://example.com/kennisartikel/1", + "uuid": "123e4567-e89b-12d3-a456-426614174000", + "upnUri": "http://example.com/upn/1", + + "publicatieDatum": "2024-01-01", + "productAanwezig": true, + "productValtOnder": null, + + "verantwoordelijkeOrganisatie": { + "owmsIdentifier": "http://example.com/owms/1", + "owmsPrefLabel": "Gemeente Utrecht", + "owmsEndDate": "2025-01-01T00:00:00Z" + }, + + "locaties": null, + "doelgroep": "eu-burger", + + "afdelingen": [ + { + "afdelingNaam": "Burgerzaken" + } + ], + + "vertalingen": [ + { + "taal": "nl", + "titel": "Paspoort aanvragen", + "tekst": "U kunt een paspoort aanvragen bij de gemeente.", + "datumWijziging": "2024-01-01T00:00:00Z", + + "trefwoorden": [{ "trefwoord": "paspoort" }] + } + ], + + "beschikbareTalen": ["nl"] + } + } +} diff --git a/apps/overige-objecten-api/src/__mocks__/createVAC.json b/apps/overige-objecten-api/src/__mocks__/createVAC.json new file mode 100644 index 000000000..980a257cb --- /dev/null +++ b/apps/overige-objecten-api/src/__mocks__/createVAC.json @@ -0,0 +1,25 @@ +{ + "type": "http://localhost:4001/api/v2/objecttypes/vac", + "record": { + "typeVersion": 1, + "startAt": "2024-01-01", + "data": { + "vraag": "Hoe vraag ik een paspoort aan?", + "status": "actief", + "antwoord": "U kunt een paspoort aanvragen bij de gemeente.", + "doelgroep": "eu-burger", + "url": "http://example.com/vac/1", + + "afdelingen": [ + { + "afdelingId": "123", + "afdelingNaam": "Burgerzaken" + } + ], + + "toelichting": "Extra info", + + "trefwoorden": [{ "trefwoord": "paspoort" }] + } + } +} diff --git a/apps/overige-objecten-api/src/__mocks__/getStrapiKennisartikelData.ts b/apps/overige-objecten-api/src/__mocks__/getStrapiKennisartikelData.ts index 14e6b16ce..740aa2158 100644 --- a/apps/overige-objecten-api/src/__mocks__/getStrapiKennisartikelData.ts +++ b/apps/overige-objecten-api/src/__mocks__/getStrapiKennisartikelData.ts @@ -1,146 +1,131 @@ export const getStrapiKennisartikelData = () => { return { data: { - products: { - meta: { - pagination: { - total: 1, - page: 1, - pageSize: 1, - pageCount: 1, - }, + products_connection: { + pageInfo: { + total: 1, + page: 1, + pageSize: 1, + pageCount: 1, }, - data: [ + nodes: [ { - id: '1', - attributes: { - title: 'Demo Product', - slug: 'demo-product', - uuid: 'b77a89a0-3ec2-467d-84b2-b484d5726ceb', - locale: 'nl', - updatedAt: '2024-11-06T12:05:42.541Z', - createdAt: '2024-11-05T16:03:50.975Z', - metaTags: { - keymatch: 'Demo, Page', - title: 'Demo Page Title', - description: 'Demo Page description', + id: 'l9ayhavxycg4w4dcqf2shjne', + title: 'Demo Product', + slug: 'demo-product', + uuid: 'b77a89a0-3ec2-467d-84b2-b484d5726ceb', + locale: 'nl', + updatedAt: '2024-11-06T12:05:42.541Z', + createdAt: '2024-11-05T16:03:50.975Z', + metaTags: { + keymatch: 'Demo, Page', + title: 'Demo Page Title', + description: 'Demo Page description', + }, + sections: [ + { + component: 'ComponentComponentsUtrechtRichText', + id: '1', + content: '

Inleiding - 1

Body text

', + categorie5: 'inleiding', + kennisartikelCategorie: 'inleiding', }, - sections: [ - { - id: '1', - content: '

Inleiding - 1

Body text

', - categorie5: 'inleiding', - component: 'ComponentComponentsUtrechtRichText', - }, - { - id: '2', - content: '

Inleiding - 2

Body text

', - categorie5: 'inleiding', - component: 'ComponentComponentsUtrechtRichText', - }, - { - id: '3', - content: '

Aanvraag - 1

Body text

', - categorie5: 'aanvraag', - component: 'ComponentComponentsUtrechtRichText', - }, - { - id: '4', - content: '

Bewijs - 1

Body text

', - categorie5: 'bewijs', - component: 'ComponentComponentsUtrechtRichText', - }, - { - id: '5', - content: '

Voorwaarden - 1

Body text

', - categorie5: 'voorwaarden', - component: 'ComponentComponentsUtrechtRichText', - }, - { - id: '6', - content: '

Bezwaar - 1

Body text

', - categorie5: 'bezwaar', - component: 'ComponentComponentsUtrechtRichText', - }, - { - id: '7', - content: '

Kosten - 1

', - categorie5: 'kosten', - component: 'ComponentComponentsUtrechtRichText', - }, - { - component: 'ComponentComponentsInternalBlockContent', - internal_field: { - data: { - attributes: { - content: { - uuid: 'e51318b2-ddb3-4e85-b746-5f29f3762a82', - contentBlock: [ - { - content: '

Inleiding- 2 - internal

Body tekst

', - kennisartikelCategorie: 'inleiding', - }, - { - content: '

Inleiding - internal

Body tekst

', - kennisartikelCategorie: 'inleiding', - }, - { - content: '

Aanvraag - internal

Body tekst

', - kennisartikelCategorie: 'aanvraag', - }, - { - content: '

Bewijs - internal

body tekst

', - kennisartikelCategorie: 'bewijs', - }, - { - content: '

Voorwaarden - internal

body tekst

', - kennisartikelCategorie: 'voorwaarden', - }, - { - content: '

Bezwaar - internal

body tekst

', - kennisartikelCategorie: 'bezwaar', - }, - { - content: '

Kosten - internal

body tekst

', - kennisartikelCategorie: 'kosten', - }, - { - content: '

Termijn - internal

body tekst

', - kennisartikelCategorie: 'termijn', - }, - { - content: '

Wat te doen bij geen reactie - internal

body tekst

', - kennisartikelCategorie: 'wat_te_doen_bij_geen_reactie', - }, - { - content: '

Bijzonderheden - internal

Body tekst

', - kennisartikelCategorie: 'bijzonderheden', - }, - ], - }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '2', + content: '

Inleiding - 2

Body text

', + categorie5: 'inleiding', + kennisartikelCategorie: 'inleiding', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '3', + content: '

Aanvraag - 1

Body text

', + categorie5: 'aanvraag', + kennisartikelCategorie: 'aanvraag', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '4', + content: '

Bewijs - 1

Body text

', + categorie5: 'bewijs', + kennisartikelCategorie: 'bewijs', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '5', + content: '

Voorwaarden - 1

Body text

', + categorie5: 'voorwaarden', + kennisartikelCategorie: 'voorwaarden', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '6', + content: '

Bezwaar - 1

Body text

', + categorie5: 'bezwaar', + kennisartikelCategorie: 'bezwaar', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '7', + content: '

Kosten - 1

', + categorie5: 'kosten', + kennisartikelCategorie: 'kosten', + }, + { + component: 'ComponentComponentsInternalBlockContent', + internal_field: { + content: { + uuid: 'e51318b2-ddb3-4e85-b746-5f29f3762a82', + contentBlock: [ + { + content: '

Inleiding- 2 - internal

Body tekst

', + kennisartikelCategorie: 'inleiding', + }, + { + content: '

Inleiding - internal

Body tekst

', + kennisartikelCategorie: 'inleiding', }, - }, + { content: '

Aanvraag - internal

Body tekst

', kennisartikelCategorie: 'aanvraag' }, + { content: '

Bewijs - internal

body tekst

', kennisartikelCategorie: 'bewijs' }, + { + content: '

Voorwaarden - internal

body tekst

', + kennisartikelCategorie: 'voorwaarden', + }, + { content: '

Bezwaar - internal

body tekst

', kennisartikelCategorie: 'bezwaar' }, + { content: '

Kosten - internal

body tekst

', kennisartikelCategorie: 'kosten' }, + { content: '

Termijn - internal

body tekst

', kennisartikelCategorie: 'termijn' }, + { + content: '

Wat te doen bij geen reactie - internal

body tekst

', + kennisartikelCategorie: 'wat_te_doen_bij_geen_reactie', + }, + { + content: '

Bijzonderheden - internal

Body tekst

', + kennisartikelCategorie: 'bijzonderheden', + }, + ], }, + contact_information_internal: [], }, - ], - kennisartikelMetadata: { - uuid: 'c81023c8-3653-4ce3-90c0-eee9f7a9336f', - doelgroep: 'eu_burger', - productAanwezig: true, - productValtOnder: null, - afdelingen: [ - { - afdelingId: '463de311-fbe3-48d8-bd87-722de5c80b04', - afdelingNaam: 'Demo Afdeling', - }, - ], - verantwoordelijkeOrganisatie: { - owmsIdentifier: 'http://standaarden.overheid.nl/owms/terms/Utrecht_(gemeente)', - owmsPrefLabel: 'Gemeente Utrecht', - owmsEndDate: '2024-11-05T23:00:00.000Z', + }, + ], + kennisartikelMetadata: { + uuid: 'c81023c8-3653-4ce3-90c0-eee9f7a9336f', + doelgroep: 'eu_burger', + productAanwezig: true, + productValtOnder: null, + afdelingen: [ + { + afdelingId: '463de311-fbe3-48d8-bd87-722de5c80b04', + afdelingNaam: 'Demo Afdeling', }, - upnUri: 'http://standaarden.overheid.nl/owms/terms/UPL-naam_nog_niet_beschikbaar', + ], + verantwoordelijkeOrganisatie: { + owmsIdentifier: 'http://standaarden.overheid.nl/owms/terms/Utrecht_(gemeente)', + owmsPrefLabel: 'Gemeente Utrecht', + owmsEndDate: '2024-11-05T23:00:00.000Z', }, + upnUri: 'http://standaarden.overheid.nl/owms/terms/UPL-naam_nog_niet_beschikbaar', }, }, ], diff --git a/apps/overige-objecten-api/src/__mocks__/getStrapiKennisartikelDataByUUID.ts b/apps/overige-objecten-api/src/__mocks__/getStrapiKennisartikelDataByUUID.ts new file mode 100644 index 000000000..a4a8f380b --- /dev/null +++ b/apps/overige-objecten-api/src/__mocks__/getStrapiKennisartikelDataByUUID.ts @@ -0,0 +1,124 @@ +export const getStrapiKennisartikelDataByUUID = () => { + return { + data: { + products: [ + { + id: 'l9ayhavxycg4w4dcqf2shjne', + title: 'Demo Product', + slug: 'demo-product', + uuid: 'b77a89a0-3ec2-467d-84b2-b484d5726ceb', + locale: 'nl', + updatedAt: '2024-11-06T12:05:42.541Z', + createdAt: '2024-11-05T16:03:50.975Z', + metaTags: { + keymatch: 'Demo, Page', + title: 'Demo Page Title', + description: 'Demo Page description', + }, + sections: [ + { + component: 'ComponentComponentsUtrechtRichText', + id: '1', + content: '

Inleiding - 1

Body text

', + categorie5: 'inleiding', + kennisartikelCategorie: 'inleiding', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '2', + content: '

Inleiding - 2

Body text

', + categorie5: 'inleiding', + kennisartikelCategorie: 'inleiding', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '3', + content: '

Aanvraag - 1

Body text

', + categorie5: 'aanvraag', + kennisartikelCategorie: 'aanvraag', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '4', + content: '

Bewijs - 1

Body text

', + categorie5: 'bewijs', + kennisartikelCategorie: 'bewijs', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '5', + content: '

Voorwaarden - 1

Body text

', + categorie5: 'voorwaarden', + kennisartikelCategorie: 'voorwaarden', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '6', + content: '

Bezwaar - 1

Body text

', + categorie5: 'bezwaar', + kennisartikelCategorie: 'bezwaar', + }, + { + component: 'ComponentComponentsUtrechtRichText', + id: '7', + content: '

Kosten - 1

', + categorie5: 'kosten', + kennisartikelCategorie: 'kosten', + }, + { + component: 'ComponentComponentsInternalBlockContent', + internal_field: { + content: { + uuid: 'e51318b2-ddb3-4e85-b746-5f29f3762a82', + contentBlock: [ + { + content: '

Inleiding- 2 - internal

Body tekst

', + kennisartikelCategorie: 'inleiding', + }, + { content: '

Inleiding - internal

Body tekst

', kennisartikelCategorie: 'inleiding' }, + { content: '

Aanvraag - internal

Body tekst

', kennisartikelCategorie: 'aanvraag' }, + { content: '

Bewijs - internal

body tekst

', kennisartikelCategorie: 'bewijs' }, + { + content: '

Voorwaarden - internal

body tekst

', + kennisartikelCategorie: 'voorwaarden', + }, + { content: '

Bezwaar - internal

body tekst

', kennisartikelCategorie: 'bezwaar' }, + { content: '

Kosten - internal

body tekst

', kennisartikelCategorie: 'kosten' }, + { content: '

Termijn - internal

body tekst

', kennisartikelCategorie: 'termijn' }, + { + content: '

Wat te doen bij geen reactie - internal

body tekst

', + kennisartikelCategorie: 'wat_te_doen_bij_geen_reactie', + }, + { + content: '

Bijzonderheden - internal

Body tekst

', + kennisartikelCategorie: 'bijzonderheden', + }, + ], + }, + contact_information_internal: [], + }, + }, + ], + kennisartikelMetadata: { + uuid: 'c81023c8-3653-4ce3-90c0-eee9f7a9336f', + doelgroep: 'eu_burger', + productAanwezig: true, + productValtOnder: null, + afdelingen: [ + { + afdelingId: '463de311-fbe3-48d8-bd87-722de5c80b04', + afdelingNaam: 'Demo Afdeling', + }, + ], + verantwoordelijkeOrganisatie: { + owmsIdentifier: 'http://standaarden.overheid.nl/owms/terms/Utrecht_(gemeente)', + owmsPrefLabel: 'Gemeente Utrecht', + owmsEndDate: '2024-11-05T23:00:00.000Z', + }, + upnUri: 'http://standaarden.overheid.nl/owms/terms/UPL-naam_nog_niet_beschikbaar', + }, + }, + ], + }, + }; +}; diff --git a/apps/overige-objecten-api/src/__mocks__/getStrapiVacData.ts b/apps/overige-objecten-api/src/__mocks__/getStrapiVacData.ts index e58641c03..da03fa2eb 100644 --- a/apps/overige-objecten-api/src/__mocks__/getStrapiVacData.ts +++ b/apps/overige-objecten-api/src/__mocks__/getStrapiVacData.ts @@ -1,116 +1,110 @@ -import type { ContactInformationInternalData } from '../strapi-product-type'; +import type { GetAllVacItemsQuery } from '../../gql/graphql'; + +type VacNode = NonNullable['nodes'][number]>; interface GetStrapiVACData { - contact_information_internal?: ContactInformationInternalData; + contact_information_internal?: VacNode['contact_information_internal']; + contact_information_public?: VacNode['contact_information_public']; } export const getStrapiVacData = (params: GetStrapiVACData = {}) => { - const { contact_information_internal = { data: [] } } = params; + const { contact_information_internal = [], contact_information_public = null } = params; + return { data: { - vacs: { - meta: { - pagination: { - total: 3, - page: 1, - pageSize: 1, - pageCount: 1, - }, + vacs_connection: { + pageInfo: { + total: 3, + page: 1, + pageSize: 1, + pageCount: 1, }, - data: [ + nodes: [ { - id: '1', - attributes: { - createdAt: '2024-11-05T16:03:50.975Z', - updatedAt: '2024-11-05T16:03:50.975Z', - title: 'Wat is het proces om een paspoort aan te vragen?', - contact_information_internal, - vac: { - uuid: '22D89EB2-2238-4885-A352-07C02CF8FCDF', - antwoord: [ - { - content: - 'U moet een afspraak maken bij de gemeente, uw identiteitsbewijs meenemen en een recente pasfoto aanleveren.', - kennisartikelCategorie: null, - }, - ], - status: 'actief', - doelgroep: 'eu_burger', - afdelingen: [ - { - afdelingId: '4DFE293E-FCDE-4913-81E5-E82F92CC8DB6', - afdelingNaam: 'Demo Afdeling', - }, - ], - toelichting: null, - keywords: 'paspoort, aanvraag', - }, + id: 'u67j77h2qj6svmbmn6a5k04p', + createdAt: '2024-11-05T16:03:50.975Z', + updatedAt: '2024-11-05T16:03:50.975Z', + title: 'Wat is het proces om een paspoort aan te vragen?', + contact_information_internal, + contact_information_public, + vac: { + uuid: '22D89EB2-2238-4885-A352-07C02CF8FCDF', + antwoord: [ + { + content: + 'U moet een afspraak maken bij de gemeente, uw identiteitsbewijs meenemen en een recente pasfoto aanleveren.', + kennisartikelCategorie: null, + }, + ], + status: 'actief', + doelgroep: 'eu_burger', + afdelingen: [ + { + afdelingId: '4DFE293E-FCDE-4913-81E5-E82F92CC8DB6', + afdelingNaam: 'Demo Afdeling', + }, + ], + toelichting: '', + keywords: 'paspoort, aanvraag', }, }, { - id: '2', - attributes: { - createdAt: '2024-11-05T16:03:50.975Z', - updatedAt: '2024-11-05T16:03:50.975Z', - title: 'Hoe kan ik een rijbewijs aanvragen?', - contact_information_internal: { - data: [], - }, - vac: { - uuid: 'b2c3d4e5-f6g7-8h9i-0j1k-l2m3n4o5p6q7', - antwoord: [ - { - content: - 'Voor het aanvragen van een rijbewijs moet u een aanvraagformulier invullen en uw identiteitsbewijs meenemen naar het gemeentehuis.', - kennisartikelCategorie: null, - }, - ], - status: 'actief', - doelgroep: 'eu_burger', - afdelingen: [ - { - afdelingId: 'B97257C5-589E-4FC0-8C7E-F744649A13B7', - afdelingNaam: 'Demo Afdeling', - }, - ], - toelichting: null, - keywords: 'rijbewijs, aanvraag', - }, + id: 'kw8dvw1wg290heyrtpfo1b0f', + createdAt: '2024-11-05T16:03:50.975Z', + updatedAt: '2024-11-05T16:03:50.975Z', + title: 'Hoe kan ik een rijbewijs aanvragen?', + contact_information_internal: [], + contact_information_public, + vac: { + uuid: 'b2c3d4e5-f6g7-8h9i-0j1k-l2m3n4o5p6q7', + antwoord: [ + { + content: + 'Voor het aanvragen van een rijbewijs moet u een aanvraagformulier invullen en uw identiteitsbewijs meenemen naar het gemeentehuis.', + kennisartikelCategorie: null, + }, + ], + status: 'actief', + doelgroep: 'eu_burger', + afdelingen: [ + { + afdelingId: 'B97257C5-589E-4FC0-8C7E-F744649A13B7', + afdelingNaam: 'Demo Afdeling', + }, + ], + toelichting: '', + keywords: 'rijbewijs, aanvraag', }, }, { - id: '3', - attributes: { - createdAt: '2024-11-05T16:03:50.975Z', - updatedAt: '2024-11-05T16:03:50.975Z', - title: 'Wat moet ik doen bij verhuizing?', - contact_information_internal: { - data: [], - }, - vac: { - uuid: 'c3d4e5f6-g7h8-9i0j-k1l2-m3n4o5p6q7r8', - antwoord: [ - { - content: - 'Bij verhuizing moet u zich binnen 5 dagen inschrijven op uw nieuwe adres bij de gemeente.', - kennisartikelCategorie: null, - }, - ], - status: 'actief', - doelgroep: 'eu_burger', - afdelingen: [ - { - afdelingId: '8B2EC293-AB4D-46BA-A4FE-7B5E84772D93', - afdelingNaam: 'Demo Afdeling', - }, - ], - toelichting: null, - keywords: 'verhuizing, inschrijven', - }, + id: 'fa7mc2gddmvhoomg4vw3e9d1', + createdAt: '2024-11-05T16:03:50.975Z', + updatedAt: '2024-11-05T16:03:50.975Z', + title: 'Wat moet ik doen bij verhuizing?', + contact_information_internal: [], + contact_information_public, + vac: { + uuid: 'c3d4e5f6-g7h8-9i0j-k1l2-m3n4o5p6q7r8', + antwoord: [ + { + content: 'Bij verhuizing moet u zich binnen 5 dagen inschrijven op uw nieuwe adres bij de gemeente.', + kennisartikelCategorie: null, + }, + ], + status: 'actief', + doelgroep: 'eu_burger', + afdelingen: [ + { + afdelingId: '8B2EC293-AB4D-46BA-A4FE-7B5E84772D93', + afdelingNaam: 'Demo Afdeling', + }, + ], + toelichting: '', + keywords: 'verhuizing, inschrijven', }, }, ], }, - }, + } as GetAllVacItemsQuery, }; }; diff --git a/apps/overige-objecten-api/src/__mocks__/getStrapiVacDataByUUID.ts b/apps/overige-objecten-api/src/__mocks__/getStrapiVacDataByUUID.ts new file mode 100644 index 000000000..12f352fbf --- /dev/null +++ b/apps/overige-objecten-api/src/__mocks__/getStrapiVacDataByUUID.ts @@ -0,0 +1,97 @@ +import type { GetAllVacItemsQuery } from '../../gql/graphql'; + +type VacNode = NonNullable['nodes'][number]>; + +interface GetStrapiVACData { + contact_information_internal?: VacNode['contact_information_internal']; +} + +export const getStrapiVacDataByUUID = (params: GetStrapiVACData = {}) => { + const { contact_information_internal = [] } = params; + return { + data: { + vacs: [ + { + id: 'u67j77h2qj6svmbmn6a5k04p', + createdAt: '2024-11-05T16:03:50.975Z', + updatedAt: '2024-11-05T16:03:50.975Z', + title: 'Wat is het proces om een paspoort aan te vragen?', + contact_information_internal, + vac: { + uuid: '22D89EB2-2238-4885-A352-07C02CF8FCDF', + antwoord: [ + { + content: + 'U moet een afspraak maken bij de gemeente, uw identiteitsbewijs meenemen en een recente pasfoto aanleveren.', + kennisartikelCategorie: null, + }, + ], + status: 'actief', + doelgroep: 'eu_burger', + afdelingen: [ + { + afdelingId: '4DFE293E-FCDE-4913-81E5-E82F92CC8DB6', + afdelingNaam: 'Demo Afdeling', + }, + ], + toelichting: '', + keywords: 'paspoort, aanvraag', + }, + }, + { + id: 'kw8dvw1wg290heyrtpfo1b0f', + createdAt: '2024-11-05T16:03:50.975Z', + updatedAt: '2024-11-05T16:03:50.975Z', + title: 'Hoe kan ik een rijbewijs aanvragen?', + contact_information_internal: [], + vac: { + uuid: 'b2c3d4e5-f6g7-8h9i-0j1k-l2m3n4o5p6q7', + antwoord: [ + { + content: + 'Voor het aanvragen van een rijbewijs moet u een aanvraagformulier invullen en uw identiteitsbewijs meenemen naar het gemeentehuis.', + kennisartikelCategorie: null, + }, + ], + status: 'actief', + doelgroep: 'eu_burger', + afdelingen: [ + { + afdelingId: 'B97257C5-589E-4FC0-8C7E-F744649A13B7', + afdelingNaam: 'Demo Afdeling', + }, + ], + toelichting: '', + keywords: 'rijbewijs, aanvraag', + }, + }, + { + id: 'fa7mc2gddmvhoomg4vw3e9d1', + createdAt: '2024-11-05T16:03:50.975Z', + updatedAt: '2024-11-05T16:03:50.975Z', + title: 'Wat moet ik doen bij verhuizing?', + contact_information_internal: [], + vac: { + uuid: 'c3d4e5f6-g7h8-9i0j-k1l2-m3n4o5p6q7r8', + antwoord: [ + { + content: 'Bij verhuizing moet u zich binnen 5 dagen inschrijven op uw nieuwe adres bij de gemeente.', + kennisartikelCategorie: null, + }, + ], + status: 'actief', + doelgroep: 'eu_burger', + afdelingen: [ + { + afdelingId: '8B2EC293-AB4D-46BA-A4FE-7B5E84772D93', + afdelingNaam: 'Demo Afdeling', + }, + ], + toelichting: '', + keywords: 'verhuizing, inschrijven', + }, + }, + ], + }, + }; +}; diff --git a/apps/overige-objecten-api/src/__mocks__/kennisartikelObject.ts b/apps/overige-objecten-api/src/__mocks__/kennisartikelObject.ts index 8a8f6f773..a9db0b121 100644 --- a/apps/overige-objecten-api/src/__mocks__/kennisartikelObject.ts +++ b/apps/overige-objecten-api/src/__mocks__/kennisartikelObject.ts @@ -6,7 +6,7 @@ export const kennisartikelObject = () => ({ record: { endAt: null, geometry: null, - index: 1, + index: 2342910951, registrationAt: '2024-11-05T16:03:50.975Z', startAt: '2024-11-05T16:03:50.975Z', typeVersion: 3, diff --git a/apps/overige-objecten-api/src/__mocks__/objectsResponseData.ts b/apps/overige-objecten-api/src/__mocks__/objectsResponseData.ts index 7ab8e5d24..9434748ca 100644 --- a/apps/overige-objecten-api/src/__mocks__/objectsResponseData.ts +++ b/apps/overige-objecten-api/src/__mocks__/objectsResponseData.ts @@ -5,10 +5,11 @@ export const objectsResponseData = ({ type }: { type?: 'kennisartikel' | 'vac' } type: 'http://localhost:3000/api/v2/objecttypes/kennisartikel', url: 'http://localhost:3000/api/v2/objects/b77a89a0-3ec2-467d-84b2-b484d5726ceb', uuid: 'b77a89a0-3ec2-467d-84b2-b484d5726ceb', + publicationState: 'PUBLISHED', record: { endAt: null, geometry: null, - index: 1, + index: 2342910951, registrationAt: '2024-11-05T16:03:50.975Z', startAt: '2024-11-05T16:03:50.975Z', typeVersion: 3, @@ -60,7 +61,7 @@ export const objectsResponseData = ({ type }: { type?: 'kennisartikel' | 'vac' } record: { endAt: null, geometry: null, - index: 1, + index: 2973921480, registrationAt: '2024-11-05T16:03:50.975Z', startAt: '2024-11-05T16:03:50.975Z', typeVersion: 1, @@ -79,7 +80,7 @@ export const objectsResponseData = ({ type }: { type?: 'kennisartikel' | 'vac' } afdelingNaam: 'Demo Afdeling', }, ], - toelichting: null, + toelichting: '', trefwoorden: [ { trefwoord: 'paspoort', @@ -99,7 +100,7 @@ export const objectsResponseData = ({ type }: { type?: 'kennisartikel' | 'vac' } record: { endAt: null, geometry: null, - index: 2, + index: 135603824, registrationAt: '2024-11-05T16:03:50.975Z', startAt: '2024-11-05T16:03:50.975Z', typeVersion: 1, @@ -118,7 +119,7 @@ export const objectsResponseData = ({ type }: { type?: 'kennisartikel' | 'vac' } afdelingNaam: 'Demo Afdeling', }, ], - toelichting: null, + toelichting: '', trefwoorden: [ { trefwoord: 'rijbewijs', @@ -138,7 +139,7 @@ export const objectsResponseData = ({ type }: { type?: 'kennisartikel' | 'vac' } record: { endAt: null, geometry: null, - index: 3, + index: 482341232, registrationAt: '2024-11-05T16:03:50.975Z', startAt: '2024-11-05T16:03:50.975Z', typeVersion: 1, @@ -156,7 +157,7 @@ export const objectsResponseData = ({ type }: { type?: 'kennisartikel' | 'vac' } afdelingNaam: 'Demo Afdeling', }, ], - toelichting: null, + toelichting: '', trefwoorden: [ { trefwoord: 'verhuizing', diff --git a/apps/overige-objecten-api/src/__mocks__/updateKennisartikel.json b/apps/overige-objecten-api/src/__mocks__/updateKennisartikel.json new file mode 100644 index 000000000..6dbd3a30a --- /dev/null +++ b/apps/overige-objecten-api/src/__mocks__/updateKennisartikel.json @@ -0,0 +1,34 @@ +{ + "type": "http://localhost:4001/api/v2/objecttypes/kennisartikel", + "record": { + "typeVersion": 1, + "startAt": "2024-01-01", + "data": { + "url": "http://example.com/kennisartikel/1", + "uuid": "123e4567-e89b-12d3-a456-426614174000", + "upnUri": "http://example.com/upn/1", + "publicatieDatum": "2024-01-01", + "productAanwezig": true, + "productValtOnder": null, + + "verantwoordelijkeOrganisatie": { + "owmsIdentifier": "http://example.com/owms/1", + "owmsEndDate": "2025-01-01T00:00:00Z" + }, + + "locaties": null, + "doelgroep": "eu-burger", + + "vertalingen": [ + { + "taal": "nl", + "titel": "Updated titel", + "tekst": "Nieuwe tekst", + "datumWijziging": "2024-02-01T00:00:00Z" + } + ], + + "beschikbareTalen": ["nl"] + } + } +} diff --git a/apps/overige-objecten-api/src/__mocks__/updateVAC.json b/apps/overige-objecten-api/src/__mocks__/updateVAC.json new file mode 100644 index 000000000..0eae04a29 --- /dev/null +++ b/apps/overige-objecten-api/src/__mocks__/updateVAC.json @@ -0,0 +1,14 @@ +{ + "type": "http://localhost:4001/api/v2/objecttypes/vac", + "record": { + "typeVersion": 1, + "startAt": "2024-01-01", + "data": { + "vraag": "Hoe vraag ik een paspoort aan? (updated)", + "status": "actief", + "antwoord": "Bijgewerkt antwoord", + "doelgroep": "eu-burger", + "url": "http://example.com/vac/1" + } + } +} diff --git a/apps/overige-objecten-api/src/__mocks__/vacObject.ts b/apps/overige-objecten-api/src/__mocks__/vacObject.ts index a44adccbc..6c392a38a 100644 --- a/apps/overige-objecten-api/src/__mocks__/vacObject.ts +++ b/apps/overige-objecten-api/src/__mocks__/vacObject.ts @@ -6,7 +6,7 @@ export const vacObject = () => ({ record: { endAt: null, geometry: null, - index: 1, + index: 2973921480, registrationAt: '2024-11-05T16:03:50.975Z', startAt: '2024-11-05T16:03:50.975Z', typeVersion: 1, @@ -25,7 +25,7 @@ export const vacObject = () => ({ afdelingNaam: 'Demo Afdeling', }, ], - toelichting: null, + toelichting: '', trefwoorden: [ { trefwoord: 'paspoort', diff --git a/apps/overige-objecten-api/src/client/errorRenderer.tsx b/apps/overige-objecten-api/src/client/errorRenderer.tsx index 9d5f44990..ee29382a2 100644 --- a/apps/overige-objecten-api/src/client/errorRenderer.tsx +++ b/apps/overige-objecten-api/src/client/errorRenderer.tsx @@ -1,7 +1,9 @@ import { renderToString } from 'react-dom/server'; -import { renderLayout } from './layout.view'; + import { ErrorPage } from '../components/ErrorPage'; +import { renderLayout } from './layout.view'; + interface ErrorRendererProps { title?: string; message?: string; diff --git a/apps/overige-objecten-api/src/client/index.tsx b/apps/overige-objecten-api/src/client/index.tsx index cb4077581..9fc4da9f8 100644 --- a/apps/overige-objecten-api/src/client/index.tsx +++ b/apps/overige-objecten-api/src/client/index.tsx @@ -1,4 +1,5 @@ import { hydrateRoot } from 'react-dom/client'; + import { PreviewPage } from '../components/PreviewPage'; hydrateRoot(document.getElementById('root')!, ); diff --git a/apps/overige-objecten-api/src/client/layout.view.ts b/apps/overige-objecten-api/src/client/layout.view.ts index 52f471fcf..ab55ae5a0 100644 --- a/apps/overige-objecten-api/src/client/layout.view.ts +++ b/apps/overige-objecten-api/src/client/layout.view.ts @@ -8,6 +8,11 @@ interface RenderLayoutProps { title?: string; errorPageData?: ErrorPageData; } +// base path prefix for the overige-objecten-api service. +// required when the service is served under a sub-path on a shared domain (e.g. DigitalOcean App Platform). +// example: '/overige-objecten-api' when routed via ingress on a shared domain. +// leave empty ('') when the service runs on its own dedicated domain (e.g. Docker, standalone deployment). +const basePath = process.env.OVERIGE_OBJECTEN_API_BASE_PATH || ''; export const renderLayout = ({ app, vacData, kennisartikelData, status, title, errorPageData }: RenderLayoutProps) => ` @@ -16,7 +21,7 @@ export const renderLayout = ({ app, vacData, kennisartikelData, status, title, e ${title} - + @@ -30,7 +35,7 @@ export const renderLayout = ({ app, vacData, kennisartikelData, status, title, e ${status !== undefined ? `window.__STATUS__ = '${status}';` : 'window.__STATUS__ = undefined;'} window.__ERROR_PAGE_DATA__ = ${JSON.stringify(errorPageData)}; - + `; diff --git a/apps/overige-objecten-api/src/client/pageRenderer.tsx b/apps/overige-objecten-api/src/client/pageRenderer.tsx index 52ae9ed0c..642d69ad6 100644 --- a/apps/overige-objecten-api/src/client/pageRenderer.tsx +++ b/apps/overige-objecten-api/src/client/pageRenderer.tsx @@ -1,9 +1,11 @@ import { renderToString } from 'react-dom/server'; -import { renderLayout } from './layout.view'; + import KennisartikelPage from '../components/KennisartikelPage'; import VacPage from '../components/VacPage'; import { KennisartikelObject, VACObject } from '../types'; +import { renderLayout } from './layout.view'; + interface PageRendererProps { vacData?: VACObject; kennisartikelData?: KennisartikelObject; diff --git a/apps/overige-objecten-api/src/codegen.ts b/apps/overige-objecten-api/src/codegen.ts new file mode 100644 index 000000000..8deb301c5 --- /dev/null +++ b/apps/overige-objecten-api/src/codegen.ts @@ -0,0 +1,31 @@ +import { CodegenConfig } from '@graphql-codegen/cli'; +import { config } from 'dotenv'; + +config(); + +if (!process.env.STRAPI_PRIVATE_URL) { + throw new Error('`STRAPI_PRIVATE_URL` is required to start codegen'); +} + +const { origin } = new URL(process.env.STRAPI_PRIVATE_URL); + +const codegenConfig: CodegenConfig = { + schema: `${origin}/graphql`, + documents: ['src/queries/index.ts'], + ignoreNoDocuments: true, + generates: { + './gql/': { + preset: 'client', + presetConfig: { + fragmentMasking: false, + }, + config: { + inlineFragmentTypes: 'combine', + skipTypename: true, + nonOptionalTypename: false, + }, + }, + }, +}; + +export default codegenConfig; diff --git a/apps/overige-objecten-api/src/components/ErrorPage.tsx b/apps/overige-objecten-api/src/components/ErrorPage.tsx index 1f452f91d..3a84bdf77 100644 --- a/apps/overige-objecten-api/src/components/ErrorPage.tsx +++ b/apps/overige-objecten-api/src/components/ErrorPage.tsx @@ -1,4 +1,5 @@ import { Button, ButtonGroup, Heading, Paragraph } from '@utrecht/component-library-react'; + import { ErrorPageData } from '../types'; interface ErrorPageProps extends ErrorPageData {} diff --git a/apps/overige-objecten-api/src/components/KennisartikelPage.tsx b/apps/overige-objecten-api/src/components/KennisartikelPage.tsx index 7199ba959..02a9f4309 100644 --- a/apps/overige-objecten-api/src/components/KennisartikelPage.tsx +++ b/apps/overige-objecten-api/src/components/KennisartikelPage.tsx @@ -1,7 +1,8 @@ import { Markdown } from '@frameless/ui'; import { Button, Heading } from '@utrecht/component-library-react'; import { useState } from 'react'; -import { BaseObject, KennisartikelData } from '../types'; + +import type { BaseObject, KennisartikelData, KennisartikelTranslation } from '../types'; interface KennisartikelPageProps { data: BaseObject; @@ -24,7 +25,12 @@ const categories = [ const KennisartikelPage = ({ data, showAllCategories = false }: KennisartikelPageProps) => { const [currentCategory, setCurrentCategory] = useState('inleiding'); - const content = data?.record.data?.vertalingen?.[0] || {}; + const content: KennisartikelTranslation = data?.record?.data?.vertalingen?.[0] || { + taal: '', + titel: '', + datumWijziging: '', + trefwoorden: [], + }; const htmlMap: Record = { inleiding: content?.tekst, diff --git a/apps/overige-objecten-api/src/components/Markdown.tsx b/apps/overige-objecten-api/src/components/Markdown.tsx index 4bdd522da..6cab3c7fa 100644 --- a/apps/overige-objecten-api/src/components/Markdown.tsx +++ b/apps/overige-objecten-api/src/components/Markdown.tsx @@ -1,14 +1,15 @@ import { isYouTubeURL, Markdown as ReactMarkdown, YouTubeVideo } from '@frameless/ui'; -import type { Price } from '../strapi-product-type'; + import { buildImageURL, sanitizeHTML } from '../utils'; +import type { PriceItem } from '../shared-types'; export interface MarkdownProps { - children: string; - priceData?: Price[]; + children?: string | null; + priceData?: PriceItem[]; } export const Markdown = ({ children: html, priceData }: MarkdownProps) => { - const DOMPurifyHTML = sanitizeHTML(html); + const DOMPurifyHTML = sanitizeHTML(html ?? ''); return html ? ( { const result = new Intl.NumberFormat('nl', { style: 'currency', currency: price.currency, - }).format(parseFloat(price.value)); + }).format(typeof price.value === 'string' ? parseFloat(price.value) : price.value); return {result}; } return {spanChildren}; @@ -67,8 +68,7 @@ export const Markdown = ({ children: html, priceData }: MarkdownProps) => { } }, }} - > - {DOMPurifyHTML} - + children={DOMPurifyHTML} + /> ) : null; }; diff --git a/apps/overige-objecten-api/src/components/PreviewLayout.tsx b/apps/overige-objecten-api/src/components/PreviewLayout.tsx index 4b57eda40..1263394bf 100644 --- a/apps/overige-objecten-api/src/components/PreviewLayout.tsx +++ b/apps/overige-objecten-api/src/components/PreviewLayout.tsx @@ -1,10 +1,13 @@ +/* eslint-disable no-undef */ import { Button, ButtonGroup } from '@utrecht/component-library-react'; import React, { useState } from 'react'; import { renderToString } from 'react-dom/server'; -import KennisartikelPage from './KennisartikelPage'; -import VacPage from './VacPage'; + import useCopyHTMLToClipboard from '../client/hooks/useCopyHTMLToClipboard'; import { HTMLTemplate } from '../utils/HTMLTemplate'; + +import KennisartikelPage from './KennisartikelPage'; +import VacPage from './VacPage'; interface PreviewLayoutProps { status?: 'DRAFT' | 'PUBLISHED'; children: React.ReactNode; diff --git a/apps/overige-objecten-api/src/components/PreviewPage.tsx b/apps/overige-objecten-api/src/components/PreviewPage.tsx index 0401e9d6d..f243bb034 100644 --- a/apps/overige-objecten-api/src/components/PreviewPage.tsx +++ b/apps/overige-objecten-api/src/components/PreviewPage.tsx @@ -1,7 +1,9 @@ +/* eslint-disable no-undef */ +import KennisartikelPage from '../components/KennisartikelPage'; + import { ErrorPage } from './ErrorPage'; import { PreviewLayout } from './PreviewLayout'; import VacPage from './VacPage'; -import KennisartikelPage from '../components/KennisartikelPage'; export const PreviewPage = () => { if (typeof window === 'undefined') return null; diff --git a/apps/overige-objecten-api/src/components/VacPage.tsx b/apps/overige-objecten-api/src/components/VacPage.tsx index 31d32400f..1dff63d57 100644 --- a/apps/overige-objecten-api/src/components/VacPage.tsx +++ b/apps/overige-objecten-api/src/components/VacPage.tsx @@ -1,5 +1,6 @@ import { Markdown } from '@frameless/ui'; import { Heading, RichText, Separator } from '@utrecht/component-library-react'; + import { VACObject } from '../types'; interface VacPageProps { diff --git a/apps/overige-objecten-api/src/controllers/objects/create.ts b/apps/overige-objecten-api/src/controllers/objects/create.ts index 50241de34..e0a7e746a 100644 --- a/apps/overige-objecten-api/src/controllers/objects/create.ts +++ b/apps/overige-objecten-api/src/controllers/objects/create.ts @@ -3,9 +3,10 @@ import type { RequestHandler } from 'express'; import snakeCase from 'lodash.snakecase'; import slugify from 'slugify'; import { v4 } from 'uuid'; + import { CREATE_INTERNAL_FIELD, CREATE_KENNISARTIKEL, CREATE_VAC } from '../../queries'; -import type { CreateInternalField, CreateProduct, CreateVacResponse } from '../../strapi-product-type'; import type { components } from '../../types/openapi'; +import type { CreateInternalFieldMutation, CreateKennisartikelMutation, CreateVacMutation } from '../../../gql/graphql'; import { generateKennisartikelObject, getCurrentTypeParam, @@ -13,6 +14,7 @@ import { getVacData, mapContentByCategory, } from '../../utils'; +import type { KennisartikelMetadata, PageSection, PriceItem } from '../../shared-types'; const categoryToKeyMap: { [key: string]: string } = { bewijs: 'bewijs', @@ -58,7 +60,7 @@ export const createVacController: RequestHandler = async (req, res, next) => { keywords: vac?.trefwoorden?.map(({ trefwoord }) => trefwoord).join(' ,'), }, }; - const { data: responseData } = await fetchData({ + const { data: responseData } = await fetchData<{ data: CreateVacMutation }>({ url: graphqlURL.href, query: CREATE_VAC, variables: { locale, data: vacPayload }, @@ -66,31 +68,56 @@ export const createVacController: RequestHandler = async (req, res, next) => { Authorization: `Bearer ${tokenAuth}`, }, }); - const vacResponse = getVacData({ - data: { - vacs: { data: [responseData.createVac.data] }, - }, - serverURL, - vacSchemaURL, - }); + const vacNode = responseData.createVac; + const vacResponse = vacNode + ? getVacData({ + data: { + vacs_connection: { + nodes: [ + { + ...vacNode, + contact_information_internal: [], + relatedVACs: [], + relatedProducts: [], + }, + ], + pageInfo: { total: 1, page: 1, pageSize: 1, pageCount: 1 }, + }, + }, + serverURL, + vacSchemaURL, + }) + : []; response = vacResponse[0]; } else if (isKennisartikel) { + if (!body?.record?.data) { + return res.status(400).json({ message: 'Missing record.data' }); + } const kennisartikel = body?.record?.data as components['schemas']['kennisartikel']; + if (!kennisartikel?.vertalingen?.length) { + return res.status(400).json({ message: 'Missing vertalingen' }); + } const kennisartikelNl = kennisartikel?.vertalingen?.find(({ taal }) => taal === 'nl'); - + if (!kennisartikelNl) { + return res.status(400).json({ message: 'Missing nl translation' }); + } const kennisartikelenBlocks = Object.entries(kennisartikelNl || {}) .map(([key, value]) => { - const mappedContent = mapContentByCategory(key, value as any, categoryToKeyMap); + if (typeof value !== 'string') return null; + const mappedContent = mapContentByCategory(key, value, categoryToKeyMap); if (Object.keys(mappedContent).length === 0) return null; const [kennisartikelCategorie, content] = Object.entries(mappedContent)[0]; return { content, kennisartikelCategorie, __typename: 'ComponentComponentsUtrechtRichText' }; }) .filter(Boolean); const deskMemo = kennisartikelNl?.deskMemo; + if (!kennisartikelNl.titel) { + return res.status(400).json({ message: 'titel is required' }); + } const kennisartikelPayload = { - title: kennisartikelNl?.titel, - slug: slugify(kennisartikelNl?.titel as string, { lower: true }), + title: kennisartikelNl.titel, + slug: slugify(kennisartikelNl.titel, { lower: true }), uuid: v4(), metaTags: { keymatch: kennisartikelNl?.trefwoorden?.map((trefwoord) => trefwoord.trefwoord).join(','), @@ -111,6 +138,7 @@ export const createVacController: RequestHandler = async (req, res, next) => { upnUri: kennisartikel.upnUri, }, }; + const internalFieldPayload = { title: kennisartikelNl?.titel, content: { @@ -121,7 +149,7 @@ export const createVacController: RequestHandler = async (req, res, next) => { }, }; if (deskMemo) { - const { data: internalResponse } = await fetchData({ + const { data: internalResponse } = await fetchData<{ data: CreateInternalFieldMutation }>({ url: graphqlURL.href, query: CREATE_INTERNAL_FIELD, variables: { locale, data: internalFieldPayload }, @@ -130,16 +158,16 @@ export const createVacController: RequestHandler = async (req, res, next) => { }, }); // check if the internal field was created - if (internalResponse?.createInternalField?.data?.attributes?.content?.id) { + if (internalResponse?.createInternalField?.content?.id) { kennisartikelPayload.sections.push({ __typename: 'ComponentComponentsInternalBlockContent', - internal_field: internalResponse?.createInternalField?.data?.id, + internal_field: internalResponse?.createInternalField.id, __component: 'components.internal-block-content', } as any); } } - const { data: responseData } = await fetchData<{ data: CreateProduct }>({ + const { data: responseData } = await fetchData<{ data: CreateKennisartikelMutation }>({ url: graphqlURL.href, query: CREATE_KENNISARTIKEL, variables: { locale, data: kennisartikelPayload }, @@ -148,11 +176,43 @@ export const createVacController: RequestHandler = async (req, res, next) => { }, }); - const results = generateKennisartikelObject({ - attributes: responseData?.createProduct?.data?.attributes, - url: serverURL, - id: responseData?.createProduct?.data?.id, - }); + const createdProduct = responseData?.createProduct; + const results = createdProduct + ? generateKennisartikelObject({ + url: serverURL, + sections: (createdProduct.sections?.filter(Boolean) ?? []) as PageSection[], + title: createdProduct.title, + uuid: createdProduct?.uuid, + locale: createdProduct.locale, + updatedAt: createdProduct.updatedAt, + createdAt: createdProduct.createdAt, + metaTags: createdProduct.metaTags ?? null, + kennisartikelMetadata: (createdProduct.kennisartikelMetadata as KennisartikelMetadata) ?? null, + price: createdProduct.price + ? { + price: (createdProduct.price.price?.filter(Boolean) ?? []) as PriceItem[], + } + : null, + additional_information: { + content: { + uuid: createdProduct.additional_information?.content?.uuid ?? '', + // Map the content blocks to match your ContentBlock interface exactly + contentBlock: (createdProduct.additional_information?.content?.contentBlock ?? []) + .filter((block): block is NonNullable => block !== null) + .map((block) => ({ + id: block.id, + content: block.content, + // Map the GraphQL 'categorie10' to the required 'kennisartikelCategorie' + kennisartikelCategorie: block.categorie10 ?? 'onbekend', + categorie10: block.categorie10, + component: 'ComponentComponentsUtrechtRichText' as const, + })), + }, + }, + id: createdProduct?.id, + publicationState: 'PUBLISHED', + }) + : null; response = results; } else { return res.status(400).json({ message: 'Type is not allowed' }); diff --git a/apps/overige-objecten-api/src/controllers/objects/index.test.ts b/apps/overige-objecten-api/src/controllers/objects/index.test.ts index ae3b45ce6..5b2a4839a 100644 --- a/apps/overige-objecten-api/src/controllers/objects/index.test.ts +++ b/apps/overige-objecten-api/src/controllers/objects/index.test.ts @@ -1,5 +1,27 @@ -import fetchMock from 'jest-fetch-mock'; import request from 'supertest'; +import { vi, describe, it, expect, beforeEach, afterEach, Mock } from 'vitest'; +import { fetchData, ErrorHandler } from '@frameless/utils'; + +vi.mock('@frameless/utils', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + fetchData: vi.fn(), + ErrorHandler: class ErrorHandler extends Error { + options: { statusCode: number }; + isOperational: boolean = true; + constructor(message: string, options = { statusCode: 500 }) { + super(message); + this.options = options; + this.isOperational = true; + } + }, + envAvailability: vi.fn(), + }; +}); + +const mockedFetchData = fetchData as Mock; + import { getStrapiKennisartikelData, getStrapiVacData, @@ -8,42 +30,40 @@ import { vacObject, } from '../../__mocks__'; import app from '../../server'; +import * as getPaginatedResponseUtils from '../../utils/getPaginatedResponse'; import type { Trefwoord } from '../openapi/types'; +import { getStrapiKennisartikelDataByUUID } from '../../__mocks__/getStrapiKennisartikelDataByUUID'; +import { getStrapiVacDataByUUID } from '../../__mocks__/getStrapiVacDataByUUID'; +import { ContactInformationPublic, UtrechtRichText2 } from '../../shared-types'; -jest.mock('../../utils/getTheServerURL.ts', () => ({ +vi.mock('../../utils/getTheServerURL.ts', () => ({ getTheServerURL: () => 'http://localhost:3000', })); +vi.mock('../../utils/getPaginatedResponse.ts'); -jest.mock('../../utils/getPaginatedResponse.ts'); - -fetchMock.enableMocks(); describe('Objects controller', () => { - beforeAll(() => { - jest.resetAllMocks(); - }); beforeEach(() => { - fetchMock.resetMocks(); + mockedFetchData.mockImplementation(() => ({ data: { products: [] }, vac: { data: [] } })); }); + afterEach(() => { - jest.clearAllMocks(); + vi.resetAllMocks(); }); describe('GET /api/objects', () => { it('should return kennisartikel & VAC by default', async () => { - const spy = jest - .spyOn(require('../../utils/getPaginatedResponse'), 'getPaginatedResponse') - .mockImplementation(() => - Promise.resolve({ - page: 1, - pageSize: 10, - count: 3, - total: 2, - next: null, - previous: null, - }), - ); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + const spay = vi.spyOn(getPaginatedResponseUtils, 'getPaginatedResponse').mockImplementation(() => + Promise.resolve({ + page: 1, + pageSize: 10, + count: 3, + total: 2, + next: null, + previous: null, + }), + ); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelData()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app).get('/api/v2/objects').set('Authorization', 'Token YOUR_API_TOKEN'); expect(response.status).toBe(200); expect(response.ok).toBe(true); @@ -56,24 +76,23 @@ describe('Objects controller', () => { total: 4, ...objectsResponseData({}), }); - spy.mockRestore(); + spay.mockRestore(); }); + describe('pagination', () => { it('should response the whole data by default', async () => { - const spy = jest - .spyOn(require('../../utils/getPaginatedResponse'), 'getPaginatedResponse') - .mockImplementation(() => - Promise.resolve({ - page: 1, - pageSize: 1, - count: 2, - total: 1, - next: null, - previous: null, - }), - ); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + const spy = vi.spyOn(getPaginatedResponseUtils, 'getPaginatedResponse').mockImplementation(() => + Promise.resolve({ + page: 1, + pageSize: 1, + count: 2, + total: 1, + next: null, + previous: null, + }), + ); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelData()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app).get('/api/v2/objects').set('Authorization', 'Token YOUR_API_TOKEN'); expect(response.status).toBe(200); expect(response.ok).toBe(true); @@ -88,21 +107,20 @@ describe('Objects controller', () => { }); spy.mockRestore(); }); + it('should response the second page when page=2&pageSize=10', async () => { - const spy = jest - .spyOn(require('../../utils/getPaginatedResponse'), 'getPaginatedResponse') - .mockImplementation(() => - Promise.resolve({ - page: 2, - pageSize: 10, - count: 1, - total: 1, - next: 'http://localhost:4001/api/v2/objects?page=2&pageSize=10', - previous: null, - }), - ); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + const spy = vi.spyOn(getPaginatedResponseUtils, 'getPaginatedResponse').mockImplementation(() => + Promise.resolve({ + page: 2, + pageSize: 10, + count: 1, + total: 1, + next: 'http://localhost:4001/api/v2/objects?page=2&pageSize=10', + previous: null, + }), + ); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelData()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get('/api/v2/objects?page=2&pageSize=10') .set('Authorization', 'Token YOUR_API_TOKEN'); @@ -120,8 +138,9 @@ describe('Objects controller', () => { spy.mockRestore(); }); }); + it('should return kennisartikel objects when type is kennisartikel', async () => { - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelData()); const response = await request(app) .get(`/api/v2/objects?type=${encodeURIComponent('http://localhost:4001/api/v2/objecttypes/kennisartikel')}`) .set('Authorization', 'Token YOUR_API_TOKEN'); @@ -129,8 +148,9 @@ describe('Objects controller', () => { expect(response.ok).toBe(true); expect(response.body).toStrictEqual(objectsResponseData({ type: 'kennisartikel' })); }); + it('should return vac objects when type is vac', async () => { - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get(`/api/v2/objects?type=${encodeURIComponent('http://localhost:4001/api/v2/objecttypes/vac')}`) .set('Authorization', 'Token YOUR_API_TOKEN'); @@ -138,27 +158,22 @@ describe('Objects controller', () => { expect(response.ok).toBe(true); expect(response.body).toStrictEqual(objectsResponseData({ type: 'vac' })); }); + it('should include contact_information_internal in VAC antwoord', async () => { - fetchMock.mockResponseOnce( - JSON.stringify( - getStrapiVacData({ - contact_information_internal: { - data: [ + mockedFetchData.mockResolvedValueOnce( + getStrapiVacData({ + contact_information_internal: [ + { + contentBlock: [ { - attributes: { - contentBlock: [ - { - id: '1', - content: - 'Voor het aanvragen van een paspoort kunt u contact opnemen met de gemeente via telefoonnummer 123-456789 of bezoek onze website voor meer informatie.', - }, - ], - }, + id: '1', + content: + 'Voor het aanvragen van een paspoort kunt u contact opnemen met de gemeente via telefoonnummer 123-456789 or bezoek onze website voor meer informatie.', }, ], }, - }), - ), + ], + }), ); const response = await request(app) .get(`/api/v2/objects?type=${encodeURIComponent('http://localhost:4001/api/v2/objecttypes/vac')}`) @@ -168,80 +183,53 @@ describe('Objects controller', () => { expect(firstVac.record.data.antwoord).toContain('U moet een afspraak maken'); expect(firstVac.record.data.antwoord).toContain('123-456789'); }); + it('should return 400 when type is not an encoded URL', async () => { - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelData()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get('/api/v2/objects?type=http://localhost:4001/api/v2/objecttypes/vac') .set('Authorization', 'Token YOUR_API_TOKEN'); expect(response.status).toBe(400); expect(response.ok).toBe(false); }); + it('should return 400 when type is empty', async () => { - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelData()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app).get('/api/v2/objects?type=').set('Authorization', 'Token YOUR_API_TOKEN'); expect(response.status).toBe(400); expect(response.ok).toBe(false); }); + it('should return 400 when type is not a valid URL', async () => { - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelData()); const response = await request(app) .get('/api/v2/objects?type=invalid') .set('Authorization', 'Token YOUR_API_TOKEN'); expect(response.status).toBe(400); expect(response.ok).toBe(false); }); + it('should return 200 and empty array when no data is returned', async () => { - const spy = jest - .spyOn(require('../../utils/getPaginatedResponse'), 'getPaginatedResponse') - .mockImplementation(() => - Promise.resolve({ - page: 1, - pageSize: 10, - count: 0, - total: 0, - next: null, - previous: null, - }), - ); - fetchMock.mockResponseOnce( - JSON.stringify({ - data: { - vacs: { - meta: { - pagination: { - total: 0, - page: 1, - pageSize: 0, - pageCount: 0, - }, - }, - data: [], - }, - }, - }), - ); - fetchMock.mockResponseOnce( - JSON.stringify({ - data: { - kennisartikels: { - meta: { - pagination: { - total: 0, - page: 1, - pageSize: 0, - pageCount: 0, - }, - }, - data: [], - }, - }, + const spy = vi.spyOn(getPaginatedResponseUtils, 'getPaginatedResponse').mockImplementation(() => + Promise.resolve({ + page: 1, + pageSize: 10, + count: 0, + total: 0, + next: null, + previous: null, }), ); + mockedFetchData.mockResolvedValueOnce({ + data: { vacs: { meta: { pagination: { total: 0, page: 1, pageSize: 0, pageCount: 0 } }, data: [] } }, + }); + mockedFetchData.mockResolvedValueOnce({ + data: { kennisartikels: { meta: { pagination: { total: 0, page: 1, pageSize: 0, pageCount: 0 } }, data: [] } }, + }); const response = await request(app).get('/api/v2/objects').set('Authorization', 'Token YOUR_API_TOKEN'); - expect(response.status).toBe(200); expect(response.ok).toBe(true); expect(response.body).toStrictEqual({ @@ -255,22 +243,25 @@ describe('Objects controller', () => { }); spy.mockRestore(); }); + it('should return 500 when fetch fails', async () => { - fetchMock.mockRejectOnce(new Error('Fetch failed')); + mockedFetchData.mockRejectedValueOnce(() => + Promise.reject(new ErrorHandler('Fetch failed', { statusCode: 500 })), + ); const response = await request(app).get('/api/v2/objects').set('Authorization', 'Token YOUR_API_TOKEN'); expect(response.status).toBe(500); - expect(response.ok).toBe(false); }); + it('should return 500 when fetch fails with error message', async () => { - fetchMock.mockRejectOnce(new Error('Fetch failed')); + mockedFetchData.mockRejectedValueOnce(new ErrorHandler('Fetch failed', { statusCode: 500 })); const response = await request(app).get('/api/v2/objects').set('Authorization', 'Token YOUR_API_TOKEN'); expect(response.status).toBe(500); - expect(response.ok).toBe(false); - expect(response.text).toBe(JSON.stringify({ message: 'Fetch failed' })); + expect(response.body).toStrictEqual({ message: 'Fetch failed' }); }); - it('should return 401 when authorization header is missing', async () => { - fetchMock.mockResponseOnce(JSON.stringify([{}])); + it('should return 401 when authorization header is missing', async () => { + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelData()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app).get('/api/v2/objects'); expect(response.status).toBe(401); expect(response.text).toBe( @@ -278,67 +269,48 @@ describe('Objects controller', () => { ); expect(response.ok).toBe(false); }); - it('should return 500 when fetch fails with error message', async () => { - fetchMock.mockRejectOnce(new Error('Fetch failed')); - const response = await request(app).get('/api/v2/objects').set('Authorization', 'Token YOUR_API_TOKEN'); - expect(response.status).toBe(500); - expect(response.ok).toBe(false); - expect(response.text).toBe(JSON.stringify({ message: 'Fetch failed' })); - }); + describe('validate fields with express-openapi-validator', () => { - it('should log an error message when of the required fields are missing', async () => { - const consoleSpy = jest.spyOn(console, 'log'); - const kennisartikelData = getStrapiKennisartikelData().data.products.data.map((data) => { - return { - ...data, - attributes: { - ...data.attributes, - title: null, + it('should log an error message when required fields are missing', async () => { + const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {}); + const kennisartikelData = getStrapiKennisartikelData().data.products_connection.nodes.map((data) => ({ + ...data, + title: null, + })); + + const vacData = getStrapiVacData().data.vacs_connection?.nodes.map((data) => ({ + ...data, + vac: { ...data.vac, vraag: null }, + })); + mockedFetchData.mockResolvedValueOnce({ + data: { + products_connection: { + nodes: kennisartikelData, + pageInfo: { total: 1, page: 1, pageSize: 1, pageCount: 1 }, }, - }; + }, }); - const vacData = getStrapiVacData().data.vacs.data.map((data) => { - return { - ...data, - attributes: { - ...data.attributes, - vac: { ...data.attributes.vac, vraag: null }, + mockedFetchData.mockResolvedValueOnce({ + data: { + vacs_connection: { + nodes: vacData, + pageInfo: { total: 1, page: 1, pageSize: 1, pageCount: 1 }, }, - }; + }, }); - const vacResponse = { data: { vacs: { data: vacData } } }; - fetchMock.mockResponseOnce( - JSON.stringify({ - data: { - products: { - data: kennisartikelData, - meta: { - pagination: { - total: 1, - page: 1, - pageSize: 1, - pageCount: 1, - }, - }, - }, - }, - }), - ); - fetchMock.mockResponseOnce(JSON.stringify(vacResponse)); await request(app).get('/api/v2/objects').set('Authorization', 'Token YOUR_API_TOKEN'); const consoleSpyKennisartikelValue = consoleSpy.mock.calls[0][1].find( (item: any) => item.path === '/response/results/0/record/data/vertalingen/0/titel', ); - const consoleSpayVacValue = consoleSpy.mock.calls[0][1].find( + const consoleSpyVacValue = consoleSpy.mock.calls[0][1].find( (item: any) => item.path === '/response/results/0/record/data/vraag', ); - expect(consoleSpyKennisartikelValue).toEqual({ path: '/response/results/0/record/data/vertalingen/0/titel', message: 'must be string', errorCode: 'type.openapi.validation', }); - expect(consoleSpayVacValue).toEqual({ + expect(consoleSpyVacValue).toEqual({ path: '/response/results/0/record/data/vraag', message: "must have required property 'vraag'", errorCode: 'required.openapi.validation', @@ -347,10 +319,11 @@ describe('Objects controller', () => { }); }); }); + describe('GET /api/objects/:id', () => { it('should return 200 and kennisartikel object when uuid is valid', async () => { - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelDataByUUID()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get('/api/v2/objects/b77a89a0-3ec2-467d-84b2-b484d5726ceb') .set('Authorization', 'Token YOUR_API_TOKEN'); @@ -358,9 +331,10 @@ describe('Objects controller', () => { expect(response.ok).toBe(true); expect(response.body).toStrictEqual(kennisartikelObject()); }); + it('should return kennisartikel object with trefwoorden', async () => { - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelDataByUUID()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get('/api/v2/objects/b77a89a0-3ec2-467d-84b2-b484d5726ceb') .set('Authorization', 'Token YOUR_API_TOKEN'); @@ -369,58 +343,37 @@ describe('Objects controller', () => { kennisartikelObject().record.data.vertalingen[0], ); }); + it('should merge internal and kennisartikel trefwoorden', async () => { - fetchMock.mockResponseOnce( - JSON.stringify({ - data: { - products: { - meta: { - pagination: { - total: 1, - page: 1, - pageSize: 1, - pageCount: 1, - }, - }, - data: [ + mockedFetchData.mockResolvedValueOnce({ + data: { + products: [ + { + id: '1', + title: 'Demo Product', + slug: 'demo-product', + uuid: 'b77a89a0-3ec2-467d-84b2-b484d5726ce3', + locale: 'nl', + updatedAt: '2024-11-06T12:05:42.541Z', + createdAt: '2024-11-05T16:03:50.975Z', + metaTags: { keymatch: 'Demo, Page', title: 'Demo Page Title', description: 'Demo Page description' }, + sections: [ { - id: '1', - attributes: { - title: 'Demo Product', - slug: 'demo-product', - uuid: 'b77a89a0-3ec2-467d-84b2-b484d5726ce3', - locale: 'nl', - updatedAt: '2024-11-06T12:05:42.541Z', - createdAt: '2024-11-05T16:03:50.975Z', - metaTags: { - keymatch: 'Demo, Page', - title: 'Demo Page Title', - description: 'Demo Page description', + component: 'ComponentComponentsInternalBlockContent', + internal_field: { + content: { + id: '1', + uuid: '241eb316-d348-4304-b303-9aa5ebf431b4', + keywords: 'Intern keyword 1, Intern keyword 2, Intern keyword 3', }, - sections: [ - { - component: 'ComponentComponentsInternalBlockContent', - internal_field: { - data: { - attributes: { - content: { - id: '1', - uuid: '241eb316-d348-4304-b303-9aa5ebf431b4', - keywords: 'Intern keyword 1, Intern keyword 2, Intern keyword 3', - }, - }, - }, - }, - }, - ], }, }, ], }, - }, - }), - ); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + ], + }, + }); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get('/api/v2/objects/b77a89a0-3ec2-467d-84b2-b484d5726ce3') .set('Authorization', 'Token YOUR_API_TOKEN'); @@ -434,174 +387,118 @@ describe('Objects controller', () => { ]; expect(responseKennisartikel.record.data.vertalingen[0].trefwoorden).toStrictEqual(expectedTrefwoorden); }); + it('should deskMemo include contact_information_internal from internal block', async () => { - fetchMock.mockResponseOnce( - JSON.stringify({ - data: { - products: { - meta: { - pagination: { - total: 1, - page: 1, - pageSize: 1, - pageCount: 1, - }, - }, - data: [ + mockedFetchData.mockResolvedValueOnce({ + data: { + products: [ + { + id: '1', + title: 'Demo Product', + slug: 'demo-product', + uuid: 'b77a89a0-3ec2-467d-84b2-b484d5726ce4', + locale: 'nl', + updatedAt: '2024-11-06T12:05:42.541Z', + createdAt: '2024-11-05T16:03:50.975Z', + sections: [ { - id: '1', - attributes: { - title: 'Demo Product', - slug: 'demo-product', - uuid: 'b77a89a0-3ec2-467d-84b2-b484d5726ce4', - locale: 'nl', - updatedAt: '2024-11-06T12:05:42.541Z', - createdAt: '2024-11-05T16:03:50.975Z', - sections: [ - { - component: 'ComponentComponentsInternalBlockContent', - internal_field: { - data: { - attributes: { - content: { - contentBlock: [ - { - id: '1', - content: 'Contact info: 123-456789', - }, - ], - }, - }, - }, - }, - }, - ], + component: 'ComponentComponentsInternalBlockContent', + internal_field: { + content: { contentBlock: [{ id: '1', content: 'Contact info: 123-456789' }] }, }, }, ], }, - }, - }), - ); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + ], + }, + }); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get('/api/v2/objects/b77a89a0-3ec2-467d-84b2-b484d5726ce4') .set('Authorization', 'Token YOUR_API_TOKEN'); const responseKennisartikel = response.body as ReturnType; - expect(responseKennisartikel.record.data.vertalingen[0].deskMemo).toContain('Contact info: 123-456789'); }); it('should extract contact_information_public from sections and include in vertalingen', async () => { - fetchMock.mockResponseOnce( - JSON.stringify({ - data: { - products: { - meta: { - pagination: { - total: 1, - page: 1, - pageSize: 1, - pageCount: 1, - }, - }, - data: [ + mockedFetchData.mockResolvedValueOnce({ + data: { + products: [ + { + id: '1', + title: 'Demo Product', + slug: 'demo-product', + additional_information: null, + price: null, + metaTags: null, + publicationState: 'PUBLISHED', + kennisartikelMetadata: null, + uuid: 'A555372B-EE1E-4432-8F90-51DAD214E1F4', + locale: 'nl', + updatedAt: '2024-11-06T12:05:42.541Z', + createdAt: '2024-11-05T16:03:50.975Z', + sections: [ { - id: '1', - attributes: { - title: 'Demo Product', - slug: 'demo-product', - uuid: 'A555372B-EE1E-4432-8F90-51DAD214E1F4', - locale: 'nl', - updatedAt: '2024-11-06T12:05:42.541Z', - createdAt: '2024-11-05T16:03:50.975Z', - sections: [ - { - component: 'ComponentComponentsContactInformationPublic', - contact_information_public: { - data: { - attributes: { - contentBlock: [ - { - id: '1', - content: '

Contact us at 123-456-7890

', - }, - { - id: '2', - content: '

Email: info@example.com

', - }, - ], - }, - }, - }, - }, + component: 'ComponentComponentsContactInformationPublic', + contact_information_public: { + contentBlock: [ + { id: '1', content: '

Contact us at 123-456-7890

' }, + { id: '2', content: '

Email: info@example.com

' }, ], }, - }, + } as ContactInformationPublic, ], }, - }, - }), - ); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + ], + }, + }); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get('/api/v2/objects/A555372B-EE1E-4432-8F90-51DAD214E1F4') .set('Authorization', 'Token YOUR_API_TOKEN'); - expect(response.body.record.data.vertalingen[0].contact).toContain('123-456-7890'); - expect(response.body.record.data.vertalingen[0].contact).toContain('info@example.com'); + + expect(response.body?.record?.data?.vertalingen[0]?.contact).toContain('123-456-7890'); + expect(response.body?.record?.data?.vertalingen[0]?.contact).toContain('info@example.com'); }); it('should return the first contentBlock as inleiding category when provided', async () => { - fetchMock.mockResponseOnce( - JSON.stringify({ - data: { - products: { - meta: { - pagination: { - total: 1, - page: 1, - pageSize: 1, - pageCount: 1, - }, - }, - data: [ + mockedFetchData.mockResolvedValueOnce({ + data: { + products: [ + { + id: '1', + title: 'Demo Product', + slug: 'demo-product', + uuid: 'F555372B-EE1E-4432-8F90-51DAD214E1F3', + content: '

This is the first content block in the Product collection.

', + locale: 'nl', + updatedAt: '2024-11-06T12:05:42.541Z', + createdAt: '2024-11-05T16:03:50.975Z', + sections: [ { id: '1', - attributes: { - title: 'Demo Product', - slug: 'demo-product', - uuid: 'F555372B-EE1E-4432-8F90-51DAD214E1F3', - content: '

This is the first content block in the Product collection.

', - locale: 'nl', - updatedAt: '2024-11-06T12:05:42.541Z', - createdAt: '2024-11-05T16:03:50.975Z', - sections: [ - { - id: '1', - content: '

Inleiding - 1

Body text

', - categorie5: 'inleiding', - component: 'ComponentComponentsUtrechtRichText', - }, - ], - }, - }, + content: '

Inleiding - 1

Body text

', + categorie5: 'inleiding', + component: 'ComponentComponentsUtrechtRichText', + } as UtrechtRichText2, ], }, - }, - }), - ); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + ], + }, + }); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get('/api/v2/objects/F555372B-EE1E-4432-8F90-51DAD214E1F3') .set('Authorization', 'Token YOUR_API_TOKEN'); const responseKennisartikel = response.body as ReturnType; - const expectedResults = - '

This is the first content block in the Product collection.

Inleiding - 1

Body text

'; - expect(responseKennisartikel.record.data.vertalingen[0].tekst).toStrictEqual(expectedResults); + expect(responseKennisartikel.record.data.vertalingen[0].tekst).toStrictEqual( + '

This is the first content block in the Product collection.

Inleiding - 1

Body text

', + ); }); + it('should return 200 and vac object when uuid is valid', async () => { - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelDataByUUID()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacDataByUUID()); const response = await request(app) .get('/api/v2/objects/22D89EB2-2238-4885-A352-07C02CF8FCDF') .set('Authorization', 'Token YOUR_API_TOKEN'); @@ -609,9 +506,10 @@ describe('Objects controller', () => { expect(response.ok).toBe(true); expect(response.body).toStrictEqual(vacObject()); }); + it('should return 200 and Kennisartikel object when uuid is valid', async () => { - fetchMock.mockResponseOnce(JSON.stringify(getStrapiKennisartikelData())); - fetchMock.mockResponseOnce(JSON.stringify(getStrapiVacData())); + mockedFetchData.mockResolvedValueOnce(getStrapiKennisartikelDataByUUID()); + mockedFetchData.mockResolvedValueOnce(getStrapiVacData()); const response = await request(app) .get('/api/v2/objects/b77a89a0-3ec2-467d-84b2-b484d5726ceb') .set('Authorization', 'Token YOUR_API_TOKEN'); @@ -619,25 +517,27 @@ describe('Objects controller', () => { expect(response.ok).toBe(true); expect(response.body).toStrictEqual(kennisartikelObject()); }); + it('should return 404 when id is not found', async () => { - fetchMock.mockResponseOnce(JSON.stringify({ data: { products: { data: [] } } })); - fetchMock.mockResponseOnce(JSON.stringify({ data: { vacs: { data: [] } } })); + mockedFetchData.mockResolvedValueOnce({ data: { products_connection: { nodes: [] } } }); + mockedFetchData.mockResolvedValueOnce({ data: { vacs_connection: { nodes: [] } } }); const response = await request(app) .get('/api/v2/objects/not-exist-uuid') .set('Authorization', 'Token YOUR_API_TOKEN'); - expect(response.status).toBe(404); expect(response.ok).toBe(false); expect(response.body).toStrictEqual({ message: 'Object not found' }); }); + it('should return 500 when fetch fails with error message', async () => { - fetchMock.mockRejectOnce(new Error('Fetch failed')); + mockedFetchData.mockImplementationOnce(() => + Promise.reject(new ErrorHandler('Fetch failed', { statusCode: 500 })), + ); const response = await request(app) .get('/api/v2/objects/a9058a3e-6dd9-480c-a074-e38026bd4ffd') .set('Authorization', 'Token YOUR_API_TOKEN'); expect(response.status).toBe(500); - expect(response.ok).toBe(false); - expect(response.text).toBe(JSON.stringify({ message: 'Fetch failed' })); + expect(response.body).toStrictEqual({ message: 'Fetch failed' }); }); }); }); diff --git a/apps/overige-objecten-api/src/controllers/objects/index.ts b/apps/overige-objecten-api/src/controllers/objects/index.ts index b2718411e..062e7e810 100644 --- a/apps/overige-objecten-api/src/controllers/objects/index.ts +++ b/apps/overige-objecten-api/src/controllers/objects/index.ts @@ -1,14 +1,14 @@ import { fetchData } from '@frameless/utils'; import type { RequestHandler } from 'express'; + import { GET_ALL_PRODUCTS, GET_ALL_VAC_ITEMS } from '../../queries'; import { getObjectByUUID } from '../../service/object'; -import type { Section, StrapiProductType, VACSData } from '../../strapi-product-type'; import type { components } from '../../types/openapi'; import { generateKennisartikelObject, getPaginatedResponse, getTheServerURL, getVacData } from '../../utils'; import type { PaginationType } from '../../utils'; -interface ModifiedSection extends Section { - categorie5?: string; -} +import type { GetAllProductsQuery, GetAllVacItemsQuery } from '../../../gql/graphql'; +import type { KennisartikelMetadata, PageSection, PriceItem } from '../../shared-types'; + type GetKennisartikelReturnData = components['schemas']['ObjectData']; const sum = (a: number, b: number): number => a + b; @@ -44,7 +44,7 @@ export const getAllObjectsController: RequestHandler = async (req, res, next) => }; const fetchKennisartikelen = async () => { // Fetch product data from GraphQL - const { data } = await fetchData({ + const { data } = await fetchData<{ data: GetAllProductsQuery }>({ url: graphqlURL.href, query: GET_ALL_PRODUCTS, variables: { locale, ...paginationParams }, @@ -54,29 +54,65 @@ export const getAllObjectsController: RequestHandler = async (req, res, next) => }); return data; }; - const getKennisartikelData = ({ data }: StrapiProductType): GetKennisartikelReturnData[] | [] => { - const products = data?.products?.data || []; + const getKennisartikelData = ({ + data, + }: { + data: GetAllProductsQuery | undefined; + }): GetKennisartikelReturnData[] => { + const products = data?.products_connection?.nodes ?? []; if (products.length === 0) return []; - const kennisartikel = products.map(({ attributes, id }) => { - const modifiedAttributes = { - ...attributes, + return products.map((product) => { + const modifiedProduct = { + ...product, sections: [ { - content: attributes?.content, - kennisartikelCategorie: 'inleiding', component: 'ComponentComponentsUtrechtRichText', + content: product?.content, + kennisartikelCategorie: 'inleiding', categorie5: 'inleiding', - } as ModifiedSection, - ...attributes.sections, + }, + ...(product.sections ?? []), ], }; - return generateKennisartikelObject({ attributes: modifiedAttributes, url: serverURL, id }); + return generateKennisartikelObject({ + sections: (modifiedProduct.sections?.filter(Boolean) ?? []) as PageSection[], + title: modifiedProduct.title, + uuid: modifiedProduct?.uuid, + locale: modifiedProduct.locale, + updatedAt: modifiedProduct.updatedAt, + createdAt: modifiedProduct.createdAt, + metaTags: modifiedProduct.metaTags ?? null, + kennisartikelMetadata: (modifiedProduct.kennisartikelMetadata as KennisartikelMetadata) ?? null, + price: modifiedProduct.price + ? { + price: (modifiedProduct.price.price?.filter(Boolean) ?? []) as PriceItem[], + } + : null, + additional_information: { + content: { + uuid: modifiedProduct.additional_information?.content?.uuid ?? '', + // Map the content blocks to match your ContentBlock interface exactly + contentBlock: (modifiedProduct.additional_information?.content?.contentBlock ?? []) + .filter((block): block is NonNullable => block !== null) + .map((block) => ({ + id: block.id, + content: block.content, + // Map the GraphQL 'categorie10' to the required 'kennisartikelCategorie' + kennisartikelCategorie: block.categorie10 ?? 'onbekend', + categorie10: block.categorie10, + component: 'ComponentComponentsUtrechtRichText' as const, + })), + }, + }, + id: modifiedProduct.id, + url: serverURL, + publicationState: 'PUBLISHED', + }); }); - return kennisartikel; }; const fetchVac = async () => { // Fetch VACs data from GraphQL - const { data } = await fetchData<{ data: VACSData }>({ + const { data } = await fetchData<{ data: GetAllVacItemsQuery }>({ url: graphqlURL.href, query: GET_ALL_VAC_ITEMS, variables: { ...paginationParams }, @@ -91,19 +127,22 @@ export const getAllObjectsController: RequestHandler = async (req, res, next) => // Send results based on the requested type if (isKennisartikel) { const data = await fetchKennisartikelen(); - pagination = await getPaginatedResponse(req, data?.products); + pagination = await getPaginatedResponse(req, data?.products_connection?.pageInfo ?? undefined); const kennisartikelData = getKennisartikelData({ data }); results = kennisartikelData; } else if (isVac) { const data = await fetchVac(); const vac = getVacData({ data, serverURL, vacSchemaURL }); - pagination = await getPaginatedResponse(req, data?.vacs as any); + pagination = await getPaginatedResponse(req, data?.vacs_connection?.pageInfo ?? undefined); results = vac; } else if (!type && !isVac && !isKennisartikel) { const productsData = await fetchKennisartikelen(); const data = await fetchVac(); - const kennisartikelPagination = await getPaginatedResponse(req, productsData?.products); - const vacPagination = await getPaginatedResponse(req, data?.vacs as any); + const kennisartikelPagination = await getPaginatedResponse( + req, + productsData?.products_connection?.pageInfo ?? undefined, + ); + const vacPagination = await getPaginatedResponse(req, data?.vacs_connection?.pageInfo ?? undefined); const count = [kennisartikelPagination?.count, vacPagination?.count].filter(isFiniteNumber).reduce(sum, 0); const total = [kennisartikelPagination?.total, vacPagination?.total].filter(isFiniteNumber).reduce(sum, 0); pagination = { @@ -137,7 +176,7 @@ export const getAllObjectsController: RequestHandler = async (req, res, next) => export const getObjectByUUIDController: RequestHandler = async (req, res, next) => { try { - const uuid = req.params?.uuid; + const uuid = req.params?.uuid as string | undefined; const locale = (req.query?.locale as string) || 'nl'; if (!uuid) { diff --git a/apps/overige-objecten-api/src/controllers/objects/update.ts b/apps/overige-objecten-api/src/controllers/objects/update.ts index b29d17f41..100d273fb 100644 --- a/apps/overige-objecten-api/src/controllers/objects/update.ts +++ b/apps/overige-objecten-api/src/controllers/objects/update.ts @@ -3,30 +3,36 @@ import type { RequestHandler } from 'express'; import merge from 'lodash.merge'; import snakeCase from 'lodash.snakecase'; import slugify from 'slugify'; + import { GET_INTERNAL_FIELD_BY_UUID, - GET_PRODUCT_BY_UUID, + GET_PRODUCT_MUTATION_BASE, GET_VAC_ITEM_BY_UUID, UPDATE_INTERNAL_FIELD, UPDATE_KENNISARTIKEL, UPDATE_VAC, } from '../../queries'; -import type { DataVacItem, InternalFieldQuery, StrapiProductType, VACSData } from '../../strapi-product-type'; import type { components } from '../../types/openapi'; +import type { + GetInternalFieldsQuery, + GetProductByUuidOrDocumentIdQuery, + GetVacItemByUuidOrDocumentIdQuery, + UpdateInternalFieldMutation, + UpdateKennisartikelMutation, + UpdateVacMutation, +} from '../../../gql/graphql'; import { + createComponentGuard, generateKennisartikelObject, getCurrentTypeParam, getTheServerURL, getVacData, mapContentByCategory, } from '../../utils'; +import type { KennisartikelMetadata, PageSection, PriceItem } from '../../shared-types'; type VACData = { - data: { - updateVac: { - data: DataVacItem; - }; - }; + data: UpdateVacMutation; }; const categoryToKeyMap: { [key: string]: string } = { @@ -62,7 +68,7 @@ export const updateVacController: RequestHandler = async (req, res, next) => { if (!isVac && !isKennisartikel) return res.status(400).json({ message: 'Type is not allowed' }); if (isVac) { - const { data: vacData } = await fetchData<{ data: VACSData }>({ + const { data: vacData } = await fetchData<{ data: GetVacItemByUuidOrDocumentIdQuery }>({ url: graphqlURL.href, query: GET_VAC_ITEM_BY_UUID, variables: { uuid }, @@ -70,20 +76,21 @@ export const updateVacController: RequestHandler = async (req, res, next) => { Authorization: `Bearer ${tokenAuth}`, }, }); - if (vacData?.vacs?.data?.length === 0) return res.status(404).json({ message: 'Object not found' }); - const existingVac = vacData.vacs.data[0]; - const vacID = existingVac.id; + const existingVacs = vacData?.vacs ?? []; + if (existingVacs.length === 0) return res.status(404).json({ message: 'Object not found' }); + const existingVac = existingVacs[0]; + const vacID = existingVac?.id; const currentVACObject = { - publishedAt: existingVac.attributes.createdAt, - title: existingVac.attributes?.title, + publishedAt: existingVac?.createdAt, + title: existingVac?.title, vac: { - antwoord: existingVac.attributes.vac.antwoord, - status: existingVac.attributes.vac.status, - doelgroep: existingVac.attributes.vac.doelgroep, - uuid: existingVac.attributes.vac.uuid, - afdelingen: existingVac.attributes.vac.afdelingen, - toelichting: existingVac.attributes.vac.toelichting, - keywords: existingVac.attributes.vac.keywords, + antwoord: existingVac?.vac?.antwoord, + status: existingVac?.vac?.status, + doelgroep: existingVac?.vac?.doelgroep, + uuid: existingVac?.vac?.uuid, + afdelingen: existingVac?.vac?.afdelingen, + toelichting: existingVac?.vac?.toelichting, + keywords: existingVac?.vac?.keywords, }, }; const vacBody = { @@ -110,57 +117,73 @@ export const updateVacController: RequestHandler = async (req, res, next) => { Authorization: `Bearer ${tokenAuth}`, }, }); - const vacResponse = getVacData({ - data: { - vacs: { data: [responseData.updateVac.data] }, - }, - serverURL, - vacSchemaURL, - }); + const updatedVacNode = responseData.updateVac; + const vacResponse = updatedVacNode + ? getVacData({ + data: { + vacs_connection: { + nodes: [ + { + ...updatedVacNode, + contact_information_internal: [], + relatedVACs: [], + relatedProducts: [], + }, + ], + pageInfo: { total: 1, page: 1, pageSize: 1, pageCount: 1 }, + }, + }, + serverURL, + vacSchemaURL, + }) + : []; response = vacResponse[0]; } else if (isKennisartikel) { const kennisartikel = body?.record?.data as components['schemas']['kennisartikel']; const kennisartikelNl = kennisartikel?.vertalingen?.find(({ taal }) => taal === 'nl'); const kennisartikelenBlocks = Object.entries(kennisartikelNl || {}) .map(([key, value]) => { - const mappedContent = mapContentByCategory(key, value as any, categoryToKeyMap); + if (typeof value !== 'string') return null; + const mappedContent = mapContentByCategory(key, value, categoryToKeyMap); if (Object.keys(mappedContent).length === 0) return null; const [kennisartikelCategorie, content] = Object.entries(mappedContent)[0]; - return { content, kennisartikelCategorie, __typename: 'ComponentComponentsUtrechtRichText' }; + return { content, kennisartikelCategorie, __typename: 'ComponentComponentsUtrechtRichText' as const }; }) .filter(Boolean); const deskMemo = kennisartikelNl?.deskMemo; // Fetch product data from GraphQL - const { data } = await fetchData({ + const { data } = await fetchData<{ data: GetProductByUuidOrDocumentIdQuery }>({ url: graphqlURL.href, - query: GET_PRODUCT_BY_UUID, + query: GET_PRODUCT_MUTATION_BASE, variables: { locale, uuid }, headers: { Authorization: `Bearer ${tokenAuth}`, }, }); - const existingKennisartikelData = data?.products?.data[0]?.attributes; - if (!existingKennisartikelData) return res.status(404).json({ message: 'Object not found' }); + const existingProduct = (data?.products ?? []).filter(Boolean)[0]; + if (!existingProduct) return res.status(404).json({ message: 'Object not found' }); - const internalFieldContent = data.products.data[0]?.attributes?.sections?.find( - ({ component }) => component === 'ComponentComponentsInternalBlockContent', - )?.internal_field.data?.attributes?.content; + const isInternalBlock = createComponentGuard('ComponentComponentsInternalBlockContent'); + const internalFieldSection = (existingProduct.sections ?? []) + .filter((section): section is PageSection => Boolean(section)) + .find(isInternalBlock); + const internalFieldContent = internalFieldSection?.internal_field?.content; const existingKennisartikel = { - title: existingKennisartikelData?.title, - slug: existingKennisartikelData?.slug, - uuid: existingKennisartikelData?.uuid, - metaTags: existingKennisartikelData?.metaTags, - sections: existingKennisartikelData.sections.filter( - ({ component }) => component !== 'ComponentComponentsInternalBlockContent', - ), - kennisartikelMetadata: existingKennisartikelData.kennisartikelMetadata, + title: existingProduct.title, + slug: existingProduct.slug, + uuid: existingProduct.uuid, + metaTags: existingProduct.metaTags, + sections: (existingProduct.sections ?? []) + .filter((section): section is PageSection => !!section) + .filter((s) => !isInternalBlock(s)), + kennisartikelMetadata: existingProduct.kennisartikelMetadata, }; const kennisartikelBody = { title: kennisartikelNl?.titel, slug: kennisartikelNl?.titel ? slugify(kennisartikelNl.titel, { lower: true }) : undefined, - uuid: existingKennisartikelData.uuid, + uuid: existingProduct.uuid, metaTags: { keymatch: kennisartikelNl?.trefwoorden?.map((trefwoord) => trefwoord.trefwoord).join(','), title: kennisartikelNl?.titel, @@ -168,7 +191,7 @@ export const updateVacController: RequestHandler = async (req, res, next) => { }, sections: kennisartikelenBlocks, kennisartikelMetadata: { - uuid: existingKennisartikelData.kennisartikelMetadata.uuid, + uuid: existingProduct.kennisartikelMetadata?.uuid, afdelingen: kennisartikel.afdelingen?.map(({ afdelingNaam, afdelingId }) => ({ afdelingId: afdelingId, afdelingNaam, @@ -181,8 +204,9 @@ export const updateVacController: RequestHandler = async (req, res, next) => { }, }; const kennisartikelPayload = merge(existingKennisartikel, kennisartikelBody); + if (internalFieldContent?.uuid) { - const { data: existingInternalFieldData } = await fetchData<{ data: InternalFieldQuery }>({ + const { data: existingInternalFieldData } = await fetchData<{ data: GetInternalFieldsQuery }>({ url: graphqlURL.href, query: GET_INTERNAL_FIELD_BY_UUID, variables: { locale, uuid: internalFieldContent.uuid }, @@ -190,42 +214,75 @@ export const updateVacController: RequestHandler = async (req, res, next) => { Authorization: `Bearer ${tokenAuth}`, }, }); - const existingInternalFieldContentBlock = - existingInternalFieldData?.internalFields?.data[0]?.attributes?.content?.contentBlock; + const existingInternalField = (existingInternalFieldData?.internalFields ?? []).filter(Boolean)[0]; + const existingInternalFieldContentBlock = existingInternalField?.content?.contentBlock; const internalFieldPayload = { - title: kennisartikelPayload?.title, + title: existingInternalField?.title, content: { - uuid: existingInternalFieldData?.internalFields?.data[0]?.attributes?.content?.uuid, + uuid: existingInternalField?.content?.uuid, contentBlock: deskMemo ? [{ content: deskMemo }] : existingInternalFieldContentBlock, }, }; - kennisartikelPayload.sections.push({ + (kennisartikelPayload.sections as unknown[]).push({ __typename: 'ComponentComponentsInternalBlockContent', - internal_field: existingInternalFieldData?.internalFields?.data[0]?.id, + internal_field: existingInternalField?.id, __component: 'components.internal-block-content', - } as any); - await fetchData({ + }); + await fetchData<{ data: UpdateInternalFieldMutation }>({ url: graphqlURL.href, query: UPDATE_INTERNAL_FIELD, - variables: { locale, data: internalFieldPayload, id: existingInternalFieldData?.internalFields?.data[0]?.id }, + variables: { locale, data: internalFieldPayload, id: existingInternalField?.id }, headers: { Authorization: `Bearer ${tokenAuth}`, }, }); } - const { data: updatedKennisartikel } = await fetchData<{ data: any }>({ + const { data: updatedKennisartikel } = await fetchData<{ data: UpdateKennisartikelMutation }>({ url: graphqlURL.href, query: UPDATE_KENNISARTIKEL, - variables: { locale, data: kennisartikelPayload, id: data?.products?.data[0]?.id }, + variables: { locale, data: kennisartikelPayload, id: existingProduct?.id }, headers: { Authorization: `Bearer ${tokenAuth}`, }, }); - const results = generateKennisartikelObject({ - attributes: updatedKennisartikel?.updateProduct?.data?.attributes, - url: serverURL, - id: updatedKennisartikel?.updateProduct?.data?.id, - }); + const kennisartikelResponse = updatedKennisartikel.updateProduct; + + const results = updatedKennisartikel?.updateProduct + ? generateKennisartikelObject({ + sections: (kennisartikelResponse?.sections?.filter(Boolean) ?? []) as PageSection[], + title: kennisartikelResponse?.title, + uuid: kennisartikelResponse?.uuid, + locale: kennisartikelResponse?.locale ?? 'nl', + updatedAt: kennisartikelResponse?.updatedAt, + createdAt: kennisartikelResponse?.createdAt, + metaTags: kennisartikelResponse?.metaTags ?? null, + kennisartikelMetadata: (kennisartikelResponse?.kennisartikelMetadata as KennisartikelMetadata) ?? null, + price: kennisartikelResponse?.price + ? { + price: (kennisartikelResponse.price.price?.filter(Boolean) ?? []) as PriceItem[], + } + : null, + additional_information: { + content: { + uuid: kennisartikelResponse?.additional_information?.content?.uuid ?? '', + // Map the content blocks to match your ContentBlock interface exactly + contentBlock: (kennisartikelResponse?.additional_information?.content?.contentBlock ?? []) + .filter((block): block is NonNullable => block !== null) + .map((block) => ({ + id: block.id, + content: block.content, + // Map the GraphQL 'categorie10' to the required 'kennisartikelCategorie' + kennisartikelCategorie: block.categorie10 ?? 'onbekend', + categorie10: block.categorie10, + component: 'ComponentComponentsUtrechtRichText' as const, + })), + }, + }, + id: kennisartikelResponse?.id, + url: serverURL, + publicationState: 'PUBLISHED', + }) + : null; response = results; } return res.status(200).json(response); diff --git a/apps/overige-objecten-api/src/controllers/objecttypes/index.test.ts b/apps/overige-objecten-api/src/controllers/objecttypes/index.test.ts index 3b2f32496..6ad86d452 100644 --- a/apps/overige-objecten-api/src/controllers/objecttypes/index.test.ts +++ b/apps/overige-objecten-api/src/controllers/objecttypes/index.test.ts @@ -1,22 +1,21 @@ -import fetchMock from 'jest-fetch-mock'; import request from 'supertest'; +import { vi, describe, it, expect, beforeAll, afterEach } from 'vitest'; + import kennisartikelObjectTypes from '../../docs/kennisartikel.json'; import vacObjectTypes from '../../docs/vac.json'; import app from '../../server'; +import * as docUtils from '../../utils/resolveDoc'; -jest.mock('../../utils/getTheServerURL.ts', () => ({ +vi.mock('../../utils/getTheServerURL.ts', () => ({ getTheServerURL: () => 'http://localhost:3000', })); -fetchMock.enableMocks(); + describe('objecttypesController', () => { beforeAll(() => { - jest.resetAllMocks(); - }); - beforeEach(() => { - fetchMock.resetMocks(); + vi.clearAllMocks(); }); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('GET /api/v2/objecttypes/:type should return 200 and kennisartikel.json', async () => { const response = await request(app).get('/api/v2/objecttypes/kennisartikel'); @@ -38,21 +37,25 @@ describe('objecttypesController', () => { expect(response.status).toBe(404); }); it('GET /api/v2/objecttypes/:type should return 500 when an error occurs', async () => { - const spy = jest.spyOn(require('../../utils/readFile'), 'readFile').mockImplementation(() => 'invalid-path'); + const spy = vi.spyOn(docUtils, 'resolveDoc').mockImplementation(() => 'invalid-path'); const response = await request(app).get('/api/v2/objecttypes/kennisartikel'); expect(response.status).toBe(500); spy.mockRestore(); }); it('GET /api/v2/objecttypes/:type should return 500 when kennisartikel.json is not found', async () => { - const spy = jest.spyOn(require('../../utils/readFile'), 'readFile').mockImplementation(() => false); + const spy = vi.spyOn(docUtils, 'resolveDoc').mockImplementation(() => { + throw new Error('mocked file not found'); + }); const response = await request(app).get('/api/v2/objecttypes/kennisartikel'); expect(response.status).toBe(500); expect(response.body).toEqual({ message: 'An unexpected error occurred.' }); spy.mockRestore(); }); it('GET /api/v2/objecttypes/:type should return 500 when VAC.json is not found', async () => { - const spy = jest.spyOn(require('../../utils/readFile'), 'readFile').mockImplementation(() => false); + const spy = vi.spyOn(docUtils, 'resolveDoc').mockImplementation(() => { + throw new Error('mocked file not found'); + }); const response = await request(app).get('/api/v2/objecttypes/vac'); expect(response.status).toBe(500); expect(response.body).toEqual({ message: 'An unexpected error occurred.' }); diff --git a/apps/overige-objecten-api/src/controllers/objecttypes/index.ts b/apps/overige-objecten-api/src/controllers/objecttypes/index.ts index ed0ce9873..e3ad84559 100644 --- a/apps/overige-objecten-api/src/controllers/objecttypes/index.ts +++ b/apps/overige-objecten-api/src/controllers/objecttypes/index.ts @@ -1,11 +1,13 @@ -/* eslint-disable no-undef */ +import fs from 'node:fs'; + import type { RequestHandler } from 'express'; -import path from 'node:path'; -import { readFile } from '../../utils'; + +import { resolveDoc } from '../../utils'; + export const objecttypesController: RequestHandler = async (req, res, next) => { try { - const kennisartikelJSON = readFile(path.join(__dirname, '../../docs/kennisartikel.json')); - const vacJSON = readFile(path.join(__dirname, '../../docs/vac.json')); + const vacJSON = fs.readFileSync(resolveDoc('vac.json'), 'utf8'); + const kennisartikelJSON = fs.readFileSync(resolveDoc('kennisartikel.json'), 'utf8'); const type = req.params.type as string; res.setHeader('Content-Type', 'application/json'); diff --git a/apps/overige-objecten-api/src/controllers/openapi/index.test.ts b/apps/overige-objecten-api/src/controllers/openapi/index.test.ts index 0f048ecdf..390f2e237 100644 --- a/apps/overige-objecten-api/src/controllers/openapi/index.test.ts +++ b/apps/overige-objecten-api/src/controllers/openapi/index.test.ts @@ -1,5 +1,8 @@ import request from 'supertest'; +import { describe, it, expect, vi } from 'vitest'; + import app from '../../server'; +import * as docUtils from '../../utils/resolveDoc'; describe('openAPIController', () => { it('GET /api/v2/openapi.json return 200 and json', async () => { @@ -8,7 +11,9 @@ describe('openAPIController', () => { expect(response.headers['content-type']).toMatch(/json/); }); it('GET /api/v2/openapi.yaml return 500 when an error occurs', async () => { - const spy = jest.spyOn(require('../../utils/readFile'), 'readFile').mockImplementation(() => undefined); + const spy = vi.spyOn(docUtils, 'resolveDoc').mockImplementation(() => { + throw new Error('Test error'); + }); const response = await request(app).get('/api/v2/openapi.json'); expect(response.status).toBe(500); expect(response.body).toEqual({ message: 'An unexpected error occurred.' }); diff --git a/apps/overige-objecten-api/src/controllers/openapi/index.ts b/apps/overige-objecten-api/src/controllers/openapi/index.ts index c08f005f7..2ed16246c 100644 --- a/apps/overige-objecten-api/src/controllers/openapi/index.ts +++ b/apps/overige-objecten-api/src/controllers/openapi/index.ts @@ -1,14 +1,16 @@ -/* eslint-disable no-undef */ +import fs from 'node:fs'; + import type { RequestHandler } from 'express'; import yaml from 'js-yaml'; -import path from 'node:path'; + +import { getTheServerURL, resolveDoc } from '../../utils'; + import type { OpenAPI } from './types'; -import { getTheServerURL, readFile } from '../../utils'; export const openAPIController: RequestHandler = async (req, res, next) => { try { const url = new URL('api/v2', getTheServerURL(req)).href; - const OPEN_API_YAML = readFile(path.join(__dirname, '../../docs/openapi.yaml')); + const OPEN_API_YAML = fs.readFileSync(resolveDoc('openapi.yaml'), 'utf8'); if (!OPEN_API_YAML) throw new Error('openapi.yaml file not found'); diff --git a/apps/overige-objecten-api/src/controllers/preview/index.ts b/apps/overige-objecten-api/src/controllers/preview/index.ts index 27264348f..35d585666 100644 --- a/apps/overige-objecten-api/src/controllers/preview/index.ts +++ b/apps/overige-objecten-api/src/controllers/preview/index.ts @@ -1,4 +1,5 @@ import { Request, Response } from 'express'; + import { errorRenderer } from '../../client/errorRenderer'; import { pageRenderer } from '../../client/pageRenderer'; import { getObjectByUUID } from '../../service/object'; @@ -6,10 +7,10 @@ import { KennisartikelObject, VACObject } from '../../types'; import { getTheServerURL } from '../../utils'; export const previewController = async (req: Request, res: Response) => { - const { slug, secret, uuid } = req.query as { + const { slug, secret, uuid, status } = req.query as { slug?: 'vac' | 'kennisartikelen'; secret?: string; - // status?: 'DRAFT' | 'PUBLISHED'; this will be enable when we migrate to Strapi v5 with draft and publish system + status?: 'DRAFT' | 'PUBLISHED'; uuid?: string; }; const serverURL = getTheServerURL(req); @@ -18,7 +19,7 @@ export const previewController = async (req: Request, res: Response) => { return res.status(400).send('Missing query parameters'); } - if (secret !== process.env.PREVIEW_SECRET_TOKEN) { + if (secret !== process.env.KISS_PREVIEW_TOKEN) { return res.status(401).send('Unauthorized'); } @@ -26,10 +27,11 @@ export const previewController = async (req: Request, res: Response) => { if (slug === 'vac') { const vacData = (await getObjectByUUID({ uuid, + documentId: uuid, locale: 'nl', apiToken: process.env.STRAPI_API_TOKEN, serverURL, - publicationState: 'PREVIEW', + status, })) as VACObject; return res.send( @@ -44,8 +46,9 @@ export const previewController = async (req: Request, res: Response) => { const kennisartikelData = (await getObjectByUUID({ uuid, locale: 'nl', + documentId: uuid, serverURL, - publicationState: 'PREVIEW', + status, apiToken: process.env.STRAPI_API_TOKEN, })) as KennisartikelObject; @@ -67,7 +70,7 @@ export const previewController = async (req: Request, res: Response) => { }), ); } - // eslint-disable-next-line no-console + // eslint-disable-next-line no-console, no-undef console.error(err); return res.status(500).end( errorRenderer({ diff --git a/apps/overige-objecten-api/src/controllers/preview/previewController.test.ts b/apps/overige-objecten-api/src/controllers/preview/previewController.test.ts index c6fb2de98..dfabbdb8a 100644 --- a/apps/overige-objecten-api/src/controllers/preview/previewController.test.ts +++ b/apps/overige-objecten-api/src/controllers/preview/previewController.test.ts @@ -1,29 +1,25 @@ -import fetchMock from 'jest-fetch-mock'; import request from 'supertest'; +import { describe, it, expect, vi, beforeAll, afterEach, type Mock } from 'vitest'; + import { pageRenderer } from '../../client/pageRenderer'; import app from '../../server'; import { getObjectByUUID } from '../../service/object'; -jest.mock('../../service/object'); -jest.mock('../../client/pageRenderer'); -jest.mock('../../utils/getTheServerURL', () => ({ +vi.mock('../../service/object'); +vi.mock('../../client/pageRenderer'); +vi.mock('../../utils/getTheServerURL', () => ({ getTheServerURL: () => 'http://localhost:3000', })); -fetchMock.enableMocks(); - describe('previewController', () => { beforeAll(() => { - jest.resetAllMocks(); - process.env.PREVIEW_SECRET_TOKEN = 'secret123'; - }); - - beforeEach(() => { - fetchMock.resetMocks(); + vi.resetAllMocks(); + process.env.KISS_PREVIEW_TOKEN = 'secret123'; + process.env.Strapi_API_TOKEN = 'token'; }); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('should return 400 when required query params are missing', async () => { @@ -56,8 +52,8 @@ describe('previewController', () => { }, }; - (getObjectByUUID as jest.Mock).mockResolvedValue(vacObject); - (pageRenderer as jest.Mock).mockReturnValue('VAC PAGE'); + (getObjectByUUID as Mock).mockResolvedValue(vacObject); + (pageRenderer as Mock).mockReturnValue('VAC PAGE'); const response = await request(app).get('/api/v2/preview').query({ slug: 'vac', @@ -85,8 +81,8 @@ describe('previewController', () => { }, }; - (getObjectByUUID as jest.Mock).mockResolvedValue(kennisartikelObject); - (pageRenderer as jest.Mock).mockReturnValue('KA PAGE'); + (getObjectByUUID as Mock).mockResolvedValue(kennisartikelObject); + (pageRenderer as Mock).mockReturnValue('KA PAGE'); const response = await request(app).get('/api/v2/preview').query({ slug: 'kennisartikelen', @@ -105,7 +101,7 @@ describe('previewController', () => { }); it('should return 404 page when object is not found', async () => { - (getObjectByUUID as jest.Mock).mockRejectedValue(new Error('Object not found')); + (getObjectByUUID as Mock).mockRejectedValue(new Error('Object not found')); const response = await request(app).get('/api/v2/preview').query({ slug: 'vac', @@ -126,7 +122,7 @@ describe('previewController', () => { }); it('should return 500 when an unexpected error occurs', async () => { - (getObjectByUUID as jest.Mock).mockRejectedValue(new Error('Boom')); + (getObjectByUUID as Mock).mockRejectedValue(new Error('Boom')); const response = await request(app).get('/api/v2/preview').query({ slug: 'vac', diff --git a/apps/overige-objecten-api/src/queries/index.ts b/apps/overige-objecten-api/src/queries/index.ts index 267864509..8e8f675fc 100644 --- a/apps/overige-objecten-api/src/queries/index.ts +++ b/apps/overige-objecten-api/src/queries/index.ts @@ -7,7 +7,7 @@ query getAllProducts( $start: Int $limit: Int ) { - products( + products_connection( locale: $locale pagination: { start: $start @@ -16,180 +16,130 @@ query getAllProducts( pageSize: $pageSize } ) { - meta { - pagination { - total - page - pageSize - pageCount - } + pageInfo { + total + page + pageSize + pageCount } - data { - id - attributes { - content + nodes { + id: documentId + documentId + content + title + slug + uuid + locale + updatedAt + createdAt + metaTags { + keymatch title - slug - uuid - locale - updatedAt - createdAt - locale - metaTags { - keymatch - title - description + description + } + sections { + __typename + ... on ComponentComponentsContactInformationPublic { + contact_information_public { + contentBlock(pagination: { limit: -1 }) { + id + content + } + } } - sections { - ... on ComponentComponentsContactInformationPublic { - component: __typename - contact_information_public { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } + ... on ComponentComponentsInternalBlockContent { + id + internal_field { + title + id: documentId + contact_information_internal { + contentBlock(pagination: { limit: -1 }) { + id + content } } - } - ... on ComponentComponentsInternalBlockContent { - component: __typename - internal_field { - data { - attributes { - contact_information_internal { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } - } - } - contact_information_public { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } - } - } - content { - uuid - contentBlock { - content - kennisartikelCategorie - } - keywords - } - } - } - } + contact_information_public { + contentBlock(pagination: { limit: -1 }) { + id + content } - ... on ComponentComponentsUtrechtRichText { - id - content - kennisartikelCategorie - component: __typename - } - ... on ComponentComponentsUtrechtImage { - component: __typename - categorie2:kennisartikelCategorie - imageData { - data { - attributes { - name - alternativeText - caption - width - height - formats - url - } + } + content { + uuid + contentBlock { + content + kennisartikelCategorie } + keywords } } - ... on ComponentComponentsUtrechtLogoButton { - component: __typename - categorie3:kennisartikelCategorie - appearance - href + } + ... on ComponentComponentsUtrechtRichText { + id + content + kennisartikelCategorie + } + ... on ComponentComponentsUtrechtImage { + categorie2: kennisartikelCategorie + imageData { + name + alternativeText + caption + width + height + formats + url + } + } + ... on ComponentComponentsUtrechtLogoButton { + categorie3: kennisartikelCategorie + appearance + href + label + logo + openFormsEmbed + textContent + } + ... on ComponentComponentsUtrechtSpotlight { + categorie4: kennisartikelCategorie + content + type + logoButton { + id label - logo - openFormsEmbed + href textContent + logo + appearance } - ... on ComponentComponentsUtrechtSpotlight { - component: __typename - categorie4:kennisartikelCategorie - content - type + } + ... on ComponentComponentsUtrechtMultiColumnsButton { + categorie6: kennisartikelCategorie + column { + id + title logoButton { - id - label + appearance href - textContent + label logo - appearance - __typename - } - } - ... on ComponentComponentsUtrechtRichText { - component: __typename - categorie5:kennisartikelCategorie - content - } - ... on ComponentComponentsUtrechtMultiColumnsButton { - component: __typename - categorie6:kennisartikelCategorie - column { - id - title - logoButton { - component: __typename - appearance - href - label - logo - openFormsEmbed - textContent - } - } - } - ... on ComponentComponentsUtrechtLink { - component: __typename - categorie7:kennisartikelCategorie - href - textContent - icon - language - } - ... on ComponentComponentsFaq { - component: __typename - categorie8:kennisartikelCategorie - pdc_faq { - data { - attributes { - title - faq(pagination: { start: 0, limit: -1 }) { - body - headingLevel - id - label - } - } - } + openFormsEmbed + textContent } } - ... on ComponentComponentsUtrechtAccordion { - component: __typename - categorie9:kennisartikelCategorie - item(pagination: { start: 0, limit: -1 }) { + } + ... on ComponentComponentsUtrechtLink { + categorie7: kennisartikelCategorie + href + textContent + icon + language + } + ... on ComponentComponentsFaq { + categorie8: kennisartikelCategorie + pdc_faq { + title + faq(pagination: { limit: -1 }) { body headingLevel id @@ -197,159 +147,181 @@ query getAllProducts( } } } - additional_information { - data { - attributes { - content { - id - uuid - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - categorie10:kennisartikelCategorie - component: __typename - } - } - } - } - } - price { - data { - attributes { - price( pagination: {start: 0, limit: -1} ) { - currency - id - label - uuid - value - } - } + ... on ComponentComponentsUtrechtAccordion { + categorie9: kennisartikelCategorie + item(pagination: { limit: -1 }) { + body + headingLevel + id + label } } - kennisartikelMetadata { + } + additional_information { + content { + id uuid - doelgroep - productAanwezig - productValtOnder - afdelingen { - afdelingId - afdelingNaam - } - verantwoordelijkeOrganisatie { - owmsIdentifier - owmsPrefLabel - owmsEndDate + contentBlock(pagination: { limit: -1 }) { + id + content + categorie10: kennisartikelCategorie } - upnUri } } + price { + price(pagination: { limit: -1 }) { + currency + id + label + uuid + value + } + } + kennisartikelMetadata { + uuid + doelgroep + productAanwezig + productValtOnder + afdelingen { + afdelingId + afdelingNaam + } + verantwoordelijkeOrganisatie { + owmsIdentifier + owmsPrefLabel + owmsEndDate + } + upnUri + } } } } `); export const GET_PRODUCT_BY_UUID = gql(` - query getProductByUUID($locale: I18NLocaleCode, $uuid: String, $publicationState: PublicationState) { - products( - locale: $locale, - filters: { uuid: { eq: $uuid }} - publicationState: $publicationState - ) { - data { - id - attributes { - publishedAt - content - title - slug - uuid - locale - updatedAt - createdAt - locale - metaTags { - keymatch - title - description - } - sections { - ... on ComponentComponentsContactInformationPublic { - component: __typename - contact_information_public { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } - } - } - } - ... on ComponentComponentsInternalBlockContent { - component: __typename - internal_field { - data { - attributes { - contact_information_internal { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } - } - } - contact_information_public { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } - } - } - content { - id - uuid - contentBlock { - content - kennisartikelCategorie - } - keywords - } - } - } - } - } - ... on ComponentComponentsUtrechtRichText { +query getProductByUUIDOrDocumentId( + $locale: I18NLocaleCode + $uuid: String + $documentId: ID + $status: PublicationStatus +) { + products( + locale: $locale + filters: { + or: [ + { uuid: { eq: $uuid } } + { documentId: { eq: $documentId } } + ] + } + status: $status + ) { + id: documentId + publishedAt + content + title + slug + uuid + locale + updatedAt + createdAt + metaTags { + keymatch + title + description + } + sections { + ... on ComponentComponentsContactInformationPublic { + component: __typename + contact_information_public { + contentBlock(pagination: { start: 0, limit: -1 }) { id content - kennisartikelCategorie - component: __typename } - ... on ComponentComponentsUtrechtImage { - component: __typename - categorie2:kennisartikelCategorie - imageData { - data { - attributes { - name - alternativeText - caption - width - height - formats - url - } - } + } + } + ... on ComponentComponentsInternalBlockContent { + component: __typename + id + internal_field { + title + id: documentId + contact_information_internal { + contentBlock(pagination: { start: 0, limit: -1 }) { + id + content + } + } + contact_information_public { + contentBlock(pagination: { start: 0, limit: -1 }) { + id + content } } - ... on ComponentComponentsUtrechtLogoButton { + content { + id + uuid + contentBlock { + content + kennisartikelCategorie + } + keywords + } + } + } + # Merged RichText fragment to provide both original and aliased fields + ... on ComponentComponentsUtrechtRichText { + component: __typename + id + content + kennisartikelCategorie + categorie5: kennisartikelCategorie + } + ... on ComponentComponentsUtrechtImage { + component: __typename + categorie2: kennisartikelCategorie + imageData { + name + alternativeText + caption + width + height + formats + url + } + } + ... on ComponentComponentsUtrechtLogoButton { + component: __typename + categorie3: kennisartikelCategorie + appearance + href + label + logo + openFormsEmbed + textContent + } + ... on ComponentComponentsUtrechtSpotlight { + component: __typename + categorie4: kennisartikelCategorie + content + type + logoButton { + id + label + href + textContent + logo + appearance + __typename + } + } + ... on ComponentComponentsUtrechtMultiColumnsButton { + component: __typename + categorie6: kennisartikelCategorie + column { + id + title + logoButton { component: __typename - categorie3:kennisartikelCategorie appearance href label @@ -357,316 +329,478 @@ export const GET_PRODUCT_BY_UUID = gql(` openFormsEmbed textContent } - ... on ComponentComponentsUtrechtSpotlight { - component: __typename - categorie4:kennisartikelCategorie - content - type - logoButton { - id - label - href - textContent - logo - appearance - __typename - } + } + } + ... on ComponentComponentsUtrechtLink { + component: __typename + categorie7: kennisartikelCategorie + href + textContent + icon + language + } + ... on ComponentComponentsFaq { + component: __typename + categorie8: kennisartikelCategorie + pdc_faq { + title + faq(pagination: { start: 0, limit: -1 }) { + body + headingLevel + id + label } - ... on ComponentComponentsUtrechtRichText { - component: __typename - categorie5:kennisartikelCategorie + } + } + ... on ComponentComponentsUtrechtAccordion { + component: __typename + categorie9: kennisartikelCategorie + item(pagination: { start: 0, limit: -1 }) { + body + headingLevel + id + label + } + } + } + additional_information { + content { + id + uuid + contentBlock(pagination: { start: 0, limit: -1 }) { + id + content + categorie10: kennisartikelCategorie + component: __typename + } + } + } + price { + price(pagination: { start: 0, limit: -1 }) { + currency + id + label + uuid + value + } + } + kennisartikelMetadata { + uuid + doelgroep + productAanwezig + productValtOnder + afdelingen { + afdelingId + afdelingNaam + } + verantwoordelijkeOrganisatie { + owmsIdentifier + owmsPrefLabel + owmsEndDate + } + upnUri + } + } +} +`); + +export const GET_PRODUCT_MUTATION_BASE = gql(` +query getProductForUpdate( + $locale: I18NLocaleCode + $uuid: String + $documentId: ID + $status: PublicationStatus +) { + products( + locale: $locale + filters: { + or: [ + { uuid: { eq: $uuid } } + { documentId: { eq: $documentId } } + ] + } + status: $status + ) { + id: documentId + publishedAt + content + title + slug + uuid + locale + updatedAt + createdAt + metaTags { + keymatch + title + description + } + sections { + ... on ComponentComponentsContactInformationPublic { + component: __typename + contact_information_public { + contentBlock(pagination: { start: 0, limit: -1 }) { content } - ... on ComponentComponentsUtrechtMultiColumnsButton { - component: __typename - categorie6:kennisartikelCategorie - column { - id - title - logoButton { - component: __typename - appearance - href - label - logo - openFormsEmbed - textContent - } + } + } + ... on ComponentComponentsInternalBlockContent { + component: __typename + internal_field { + title + id: documentId + contact_information_internal { + contentBlock(pagination: { start: 0, limit: -1 }) { + content } } - ... on ComponentComponentsUtrechtLink { - component: __typename - categorie7:kennisartikelCategorie - href - textContent - icon - language + contact_information_public { + contentBlock(pagination: { start: 0, limit: -1 }) { + content + } } - ... on ComponentComponentsFaq { - component: __typename - categorie8:kennisartikelCategorie - pdc_faq { - data { - attributes { - title - faq(pagination: { start: 0, limit: -1 }) { - body - headingLevel - id - label - } - } - } + content { + uuid + contentBlock { + content + kennisartikelCategorie } + keywords } - ... on ComponentComponentsUtrechtAccordion { + } + } + # Merged RichText fragment to provide both original and aliased fields + ... on ComponentComponentsUtrechtRichText { + component: __typename + content + kennisartikelCategorie + categorie5: kennisartikelCategorie + } + ... on ComponentComponentsUtrechtImage { + component: __typename + categorie2: kennisartikelCategorie + imageData { + name + alternativeText + caption + width + height + formats + url + } + } + ... on ComponentComponentsUtrechtLogoButton { + component: __typename + categorie3: kennisartikelCategorie + appearance + href + label + logo + openFormsEmbed + textContent + } + ... on ComponentComponentsUtrechtSpotlight { + component: __typename + categorie4: kennisartikelCategorie + content + type + logoButton { + label + href + textContent + logo + appearance + __typename + } + } + ... on ComponentComponentsUtrechtMultiColumnsButton { + component: __typename + categorie6: kennisartikelCategorie + column { + title + logoButton { component: __typename - categorie9:kennisartikelCategorie - item(pagination: { start: 0, limit: -1 }) { - body - headingLevel - id - label - } + appearance + href + label + logo + openFormsEmbed + textContent } - } - additional_information { - data { - attributes { - content { - id - uuid - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - categorie10:kennisartikelCategorie - component: __typename - } - } - } - } - } - price { - data { - attributes { - price( pagination: {start: 0, limit: -1} ) { - currency - id - label - uuid - value - } - } - } - } - kennisartikelMetadata { - uuid - doelgroep - productAanwezig - productValtOnder - afdelingen { - afdelingId - afdelingNaam - } - verantwoordelijkeOrganisatie { - owmsIdentifier - owmsPrefLabel - owmsEndDate - } - upnUri - } + } + } + ... on ComponentComponentsUtrechtLink { + component: __typename + categorie7: kennisartikelCategorie + href + textContent + icon + language + } + ... on ComponentComponentsFaq { + component: __typename + categorie8: kennisartikelCategorie + pdc_faq { + title + faq(pagination: { start: 0, limit: -1 }) { + body + headingLevel + label } } } + ... on ComponentComponentsUtrechtAccordion { + component: __typename + categorie9: kennisartikelCategorie + item(pagination: { start: 0, limit: -1 }) { + body + headingLevel + label + } + } } + additional_information { + content { + uuid + contentBlock(pagination: { start: 0, limit: -1 }) { + id + content + categorie10: kennisartikelCategorie + component: __typename + } + } + } + price { + price(pagination: { start: 0, limit: -1 }) { + currency + label + uuid + value + } + } + kennisartikelMetadata { + uuid + doelgroep + productAanwezig + productValtOnder + afdelingen { + afdelingId + afdelingNaam + } + verantwoordelijkeOrganisatie { + owmsIdentifier + owmsPrefLabel + owmsEndDate + } + upnUri + } + } +} `); + export const GET_INTERNAL_FIELD_BY_UUID = gql(` query getInternalFields($uuid: String) { - internalFields(filters: { content: { uuid: { eq: $uuid } } }){ - data { - id - attributes{ - title - content { - uuid - contentBlock { - content - kennisartikelCategorie - } - } + internalFields(filters: { content: { uuid: { eq: $uuid } } }) { + id: documentId + title + content { + uuid + contentBlock { + content + kennisartikelCategorie } } } -} +} `); export const CREATE_INTERNAL_FIELD = gql(` -mutation createInternalField($data: InternalFieldInput!){ - createInternalField(data: $data){ - data { +mutation createInternalField($data: InternalFieldInput!) { + createInternalField(data: $data) { + id: documentId + title + content { id - attributes { - title - content { - id - uuid - contentBlock { - content - kennisartikelCategorie - } - } + uuid + contentBlock { + content + kennisartikelCategorie } } } -} +} `); export const UPDATE_INTERNAL_FIELD = gql(` mutation updateInternalField($data: InternalFieldInput!, $id: ID!) { - updateInternalField(data: $data, id: $id){ - data { - attributes { - content { - id - uuid - contentBlock { - content - } - } + updateInternalField(data: $data, documentId: $id) { + content { + id + uuid + contentBlock { + content } } } -} +} `); export const CREATE_KENNISARTIKEL = gql(` -mutation($data: ProductInput!, $locale: I18NLocaleCode) { +mutation createKennisartikel($data: ProductInput!, $locale: I18NLocaleCode) { createProduct(data: $data, locale: $locale) { - data { - id - attributes { + id: documentId + content + title + slug + uuid + updatedAt + createdAt + locale + metaTags { + keymatch + title + description + } + sections { + ... on ComponentComponentsUtrechtRichText { + id content - title - slug - uuid - locale - updatedAt - createdAt - locale - metaTags { - keymatch + kennisartikelCategorie + component: __typename + } + ... on ComponentComponentsInternalBlockContent { + id + component: __typename + internal_field { title - description - } - sections { - ... on ComponentComponentsUtrechtRichText { - id - content - kennisartikelCategorie - component: __typename - } - ... on ComponentComponentsInternalBlockContent { - component: __typename - internal_field { - data { - attributes { - content { - uuid - contentBlock { - content - kennisartikelCategorie - } - } - } - } + id: documentId + content { + uuid + contentBlock { + content + kennisartikelCategorie } } } - kennisartikelMetadata { + } + } + price { + price(pagination: { limit: -1 }) { + currency + id + label uuid - doelgroep - productAanwezig - productValtOnder - afdelingen { - afdelingId - afdelingNaam - } - verantwoordelijkeOrganisatie { - owmsIdentifier - owmsPrefLabel - owmsEndDate + value + } + } + additional_information { + content { + id + uuid + contentBlock(pagination: { limit: -1 }) { + id + content + categorie10: kennisartikelCategorie } - upnUri } } + kennisartikelMetadata { + uuid + doelgroep + productAanwezig + productValtOnder + afdelingen { + afdelingId + afdelingNaam + } + verantwoordelijkeOrganisatie { + owmsIdentifier + owmsPrefLabel + owmsEndDate + } + upnUri } } } `); export const UPDATE_KENNISARTIKEL = gql(` -mutation($data: ProductInput!, $locale: I18NLocaleCode, $id: ID!) { - updateProduct(data: $data, locale: $locale, id: $id) { - data { - id - attributes { +mutation updateKennisartikel($data: ProductInput!, $locale: I18NLocaleCode, $id: ID!) { + updateProduct(data: $data, locale: $locale, documentId: $id) { + id: documentId + content + title + slug + uuid + locale + updatedAt + createdAt + metaTags { + keymatch + title + description + } + sections { + ... on ComponentComponentsUtrechtRichText { + id content - title - slug - uuid - locale - updatedAt - createdAt - locale - metaTags { - keymatch + kennisartikelCategorie + component: __typename + } + ... on ComponentComponentsInternalBlockContent { + id + component: __typename + internal_field { title - description - } - sections { - ... on ComponentComponentsUtrechtRichText { - id - content - kennisartikelCategorie - component: __typename - } - ... on ComponentComponentsInternalBlockContent { - component: __typename - internal_field { - data { - attributes { - content { - uuid - contentBlock { - content - kennisartikelCategorie - } - } - } - } + id: documentId + content { + uuid + contentBlock { + content + kennisartikelCategorie } } } - kennisartikelMetadata { + } + } + price { + price(pagination: { limit: -1 }) { + currency + id + label uuid - doelgroep - productAanwezig - productValtOnder - afdelingen { - afdelingId - afdelingNaam - } - verantwoordelijkeOrganisatie { - owmsIdentifier - owmsPrefLabel - owmsEndDate + value + } + } + additional_information { + content { + id + uuid + contentBlock(pagination: { limit: -1 }) { + id + content + categorie10: kennisartikelCategorie } - upnUri } } + kennisartikelMetadata { + uuid + doelgroep + productAanwezig + productValtOnder + afdelingen { + afdelingId + afdelingNaam + } + verantwoordelijkeOrganisatie { + owmsIdentifier + owmsPrefLabel + owmsEndDate + } + upnUri } } -} +} `); export const GET_ALL_VAC_ITEMS = gql(` query getAllVacItems($page: Int, $pageSize: Int, $start: Int, $limit: Int) { - vacs( + vacs_connection( pagination: { start: $start limit: $limit @@ -674,204 +808,169 @@ query getAllVacItems($page: Int, $pageSize: Int, $start: Int, $limit: Int) { pageSize: $pageSize } ) { - meta { - pagination { - total - page - pageSize - pageCount - } + pageInfo { + total + page + pageSize + pageCount } - data { - id - attributes { - createdAt - updatedAt - title - contact_information_internal { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } - } - } - contact_information_public { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } - } - } - relatedVACs(pagination: { start: 0, limit: -1 }) { - data { - attributes { - vac { - uuid - } - } - } + nodes { + id: documentId + createdAt + updatedAt + title + contact_information_internal { + contentBlock(pagination: { start: 0, limit: -1 }) { + id + content } - relatedProducts(pagination: { start: 0, limit: -1 }) { - data { - attributes { - uuid - } - } + } + contact_information_public { + contentBlock(pagination: { start: 0, limit: -1 }) { + id + content } + } + relatedVACs(pagination: { start: 0, limit: -1 }) { vac { uuid - vraag - antwoord(pagination: { start: 0, limit: -1 }) { - content - kennisartikelCategorie - } - status - doelgroep - afdelingen { - afdelingId - afdelingNaam - } - toelichting - keywords } } + relatedProducts(pagination: { start: 0, limit: -1 }) { + uuid + title + } + + vac { + uuid + vraag + antwoord(pagination: { start: 0, limit: -1 }) { + content + kennisartikelCategorie + } + status + doelgroep + afdelingen { + afdelingId + afdelingNaam + } + toelichting + keywords + } } } } + `); export const GET_VAC_ITEM_BY_UUID = gql(` -query getVacItemByUUID($uuid: String, $publicationState: PublicationState) { +query getVacItemByUUIDOrDocumentId( + $uuid: String + $documentId: ID + $status: PublicationStatus +) { vacs( - filters: { vac: { uuid: { eq: $uuid }}} - publicationState: $publicationState + filters: { + or: [ + { vac: { uuid: { eq: $uuid } } } + { documentId: { eq: $documentId } } + ] + } + status: $status ) { - data { - id - attributes { - createdAt - updatedAt - publishedAt - title - contact_information_internal { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } - } - } - contact_information_public { - data { - attributes { - contentBlock(pagination: { start: 0, limit: -1 }) { - id - content - } - } - } - } - relatedVACs(pagination: { start: 0, limit: -1 }) { - data { - attributes { - vac { - uuid - } - } - } - } - relatedProducts(pagination: { start: 0, limit: -1 }) { - data { - attributes { - uuid - } - } - } - vac { - uuid - vraag - antwoord(pagination: { start: 0, limit: -1 }) { - content - kennisartikelCategorie - } - status - doelgroep - afdelingen { - afdelingId - afdelingNaam - } - toelichting - keywords - } + id: documentId + createdAt + updatedAt + publishedAt + title + contact_information_internal { + contentBlock(pagination: { start: 0, limit: -1 }) { + id + content + } + } + contact_information_public { + contentBlock(pagination: { start: 0, limit: -1 }) { + id + content + } + } + relatedVACs(pagination: { start: 0, limit: -1 }) { + vac { + uuid + } + } + relatedProducts(pagination: { start: 0, limit: -1 }) { + uuid + title + } + vac { + uuid + vraag + antwoord(pagination: { start: 0, limit: -1 }) { + content + kennisartikelCategorie + } + status + doelgroep + afdelingen { + afdelingId + afdelingNaam } + toelichting + keywords } } } `); export const CREATE_VAC = gql(` mutation createVac($data: VacInput!) { - createVac(data: $data){ - data { + createVac(data: $data) { + id: documentId + createdAt + publishedAt + title + vac { id - attributes { - createdAt - publishedAt - title - vac { - id - antwoord(pagination: { start: 0, limit: -1 }) { - content - kennisartikelCategorie - } - status - doelgroep - uuid - toelichting - afdelingen { - afdelingId - afdelingNaam - } - keywords - } + antwoord(pagination: { start: 0, limit: -1 }) { + content + kennisartikelCategorie } + status + doelgroep + uuid + toelichting + afdelingen { + afdelingId + afdelingNaam + } + keywords } } } `); export const UPDATE_VAC = gql(` -mutation updateVac ($data: VacInput!, $id: ID!){ - updateVac(id: $id, data: $data){ - data { +mutation updateVac($data: VacInput!, $id: ID!) { + updateVac(documentId: $id, data: $data) { + id: documentId + createdAt + publishedAt + title + vac { id - attributes { - createdAt - publishedAt - title - vac { - id - antwoord(pagination: { start: 0, limit: -1 }) { - content - kennisartikelCategorie - } - status - doelgroep - uuid - toelichting - afdelingen { - afdelingId - afdelingNaam - } - keywords - } + antwoord(pagination: { start: 0, limit: -1 }) { + content + kennisartikelCategorie + } + status + doelgroep + uuid + toelichting + afdelingen { + afdelingId + afdelingNaam } + keywords } } } diff --git a/apps/overige-objecten-api/src/routers/objects/index.ts b/apps/overige-objecten-api/src/routers/objects/index.ts index 160e51b13..d92c0ffec 100644 --- a/apps/overige-objecten-api/src/routers/objects/index.ts +++ b/apps/overige-objecten-api/src/routers/objects/index.ts @@ -1,4 +1,5 @@ -import express from 'express'; +import express, { type Router } from 'express'; + import { createVacController, getAllObjectsController, @@ -6,7 +7,7 @@ import { updateVacController, } from '../../controllers'; -const router = express.Router({ mergeParams: true }); +const router: Router = express.Router({ mergeParams: true }); router.get('/objects', getAllObjectsController); router.get('/objects/:uuid', getObjectByUUIDController); diff --git a/apps/overige-objecten-api/src/routers/objecttypes/index.ts b/apps/overige-objecten-api/src/routers/objecttypes/index.ts index faf1be029..5e7775361 100644 --- a/apps/overige-objecten-api/src/routers/objecttypes/index.ts +++ b/apps/overige-objecten-api/src/routers/objecttypes/index.ts @@ -1,7 +1,8 @@ -import express from 'express'; +import express, { type Router } from 'express'; + import { objecttypesController } from '../../controllers'; -const router = express.Router({ mergeParams: true }); +const router: Router = express.Router({ mergeParams: true }); router.get('/objecttypes/:type', objecttypesController); diff --git a/apps/overige-objecten-api/src/routers/openapi/index.ts b/apps/overige-objecten-api/src/routers/openapi/index.ts index 77a95d65a..1040ea8b2 100644 --- a/apps/overige-objecten-api/src/routers/openapi/index.ts +++ b/apps/overige-objecten-api/src/routers/openapi/index.ts @@ -1,7 +1,8 @@ -import express from 'express'; +import express, { type Router } from 'express'; + import { openAPIController } from '../../controllers'; -const router = express.Router({ mergeParams: true }); +const router: Router = express.Router({ mergeParams: true }); router.get('/openapi.json', openAPIController); diff --git a/apps/overige-objecten-api/src/routers/preview/index.ts b/apps/overige-objecten-api/src/routers/preview/index.ts index 87485bb1c..be0da050b 100644 --- a/apps/overige-objecten-api/src/routers/preview/index.ts +++ b/apps/overige-objecten-api/src/routers/preview/index.ts @@ -1,7 +1,8 @@ -import express from 'express'; +import express, { type Router } from 'express'; + import { previewController } from '../../controllers'; -const router = express.Router({ mergeParams: true }); +const router: Router = express.Router({ mergeParams: true }); router.get('/preview', previewController); diff --git a/apps/overige-objecten-api/src/server.ts b/apps/overige-objecten-api/src/server.ts index c2df3bc4b..e4016055a 100644 --- a/apps/overige-objecten-api/src/server.ts +++ b/apps/overige-objecten-api/src/server.ts @@ -1,15 +1,16 @@ -/* eslint-disable no-undef */ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + import { envAvailability, ErrorHandler } from '@frameless/utils'; import type { CorsOptions } from 'cors'; import cors from 'cors'; import { config } from 'dotenv'; -import express from 'express'; -import { NextFunction, Request, Response } from 'express'; +import express, { type NextFunction, type Request, type Response, type Express } from 'express'; import * as OpenApiValidator from 'express-openapi-validator'; -import yaml from 'js-yaml'; -import fs from 'node:fs'; -import path from 'node:path'; +import { load } from 'js-yaml'; import swaggerUi from 'swagger-ui-express'; + import { objects, objecttypes, openapi, preview } from './routers'; config(); @@ -22,13 +23,19 @@ interface OpenApiValidationErrorTypes { errors: OpenOpenApiValidationError[]; } +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + // Validate environment variables envAvailability({ env: process.env, keys: ['STRAPI_PRIVATE_URL', 'OVERIGE_OBJECTEN_API_PORT'], }); -const swaggerDocument: any = yaml.load(fs.readFileSync(path.join(__dirname, './docs/openapi.yaml'), 'utf8')); +const swaggerDocument = load(fs.readFileSync(path.join(__dirname, './docs/openapi.yaml'), 'utf8')) as Record< + string, + unknown +>; const whitelist = process.env.OVERIGE_OBJECTEN_API_CORS?.split(', ') || []; const corsOption: CorsOptions = { origin: (origin, callback) => { @@ -44,11 +51,11 @@ const corsOption: CorsOptions = { }, optionsSuccessStatus: 200, }; -const apiSpec = path.join(__dirname, './docs/openapi.yaml'); -const app = express(); + +const app: Express = express(); app.use(express.json()); -app.use('/public/vendor', express.static(path.resolve(process.cwd(), 'public/vendor'))); +app.use('/public/vendor', express.static(path.resolve(__dirname, '../public/vendor'))); const port = process.env.OVERIGE_OBJECTEN_API_PORT; // Centralized error handler middleware @@ -72,12 +79,16 @@ const globalErrorHandler = (err: ErrorHandler, _req: Request, res: Response, _ne }); }; /** - * Swagger - * Serve the Swagger UI for testing and documentation - * This is only available in development mode + * Swagger UI Setup + * Type assertions needed because: + * - swaggerUi.serve is typed as RequestHandler[] which causes conflicts when passed as middleware + * - swaggerUi.setup() return type doesn't align perfectly with Express middleware expectations + * This is a known limitation with the swagger-ui-express type definitions */ + if (process.env.NODE_ENV === 'development') { - app.use('/api/v2/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); + const swaggerSetup = swaggerUi.setup(swaggerDocument as Record) as any; + app.use('/api/v2/api-docs', swaggerUi.serve as any, swaggerSetup); } /** @@ -102,7 +113,7 @@ app.use('/api/v2', openapi); */ app.use( OpenApiValidator.middleware({ - apiSpec, + apiSpec: swaggerDocument as any, validateResponses: { onError: (error, _body, _req) => { // Log the error from express-openapi-validator instead of returning the error and blocking the response. diff --git a/apps/overige-objecten-api/src/service/object.ts b/apps/overige-objecten-api/src/service/object.ts index 8a75519a5..029cadc9e 100644 --- a/apps/overige-objecten-api/src/service/object.ts +++ b/apps/overige-objecten-api/src/service/object.ts @@ -1,85 +1,133 @@ import { fetchData } from '@frameless/utils'; + import { GET_PRODUCT_BY_UUID, GET_VAC_ITEM_BY_UUID } from '../queries'; -import type { Attributes, Section, StrapiProductType, VACSData } from '../strapi-product-type'; import { KennisartikelObject, ObjectByUUID, VACObject } from '../types'; import { generateKennisartikelObject, getVacData } from '../utils'; +import type { GetProductByUuidOrDocumentIdQuery, GetVacItemByUuidOrDocumentIdQuery } from '../../gql/graphql'; +import { KennisartikelMetadata, PageSection, PriceItem } from '../shared-types'; -interface ModifiedSection extends Section { - categorie5?: string; -} +type GQLProduct = NonNullable[number]>; +type GQLVac = NonNullable[number]>; interface GetObjectByUUIDProps { apiToken?: string; serverURL: string; uuid?: string; + documentId?: string; locale?: string; - publicationState?: 'PREVIEW' | 'LIVE'; + status?: 'DRAFT' | 'PUBLISHED'; } +const isDefined = (argument: T | undefined | null): argument is T => argument !== null && argument !== undefined; + +const getStatus = (items: (GQLProduct | GQLVac | null | undefined)[]): 'DRAFT' | 'PUBLISHED' => + items.filter(isDefined)[0]?.publishedAt === null ? 'DRAFT' : 'PUBLISHED'; + +const formatKennisartikel = ( + product: GQLProduct, + serverURL: string, + publicationState: 'DRAFT' | 'PUBLISHED', +): KennisartikelObject => { + // Ensure we have fallback strings to satisfy template literal types + const safeId = product.id ?? 'unknown-id'; + const safeUuid = product.uuid ?? ''; + + const sections: PageSection[] = [ + { + component: 'ComponentComponentsUtrechtRichText' as const, + id: `${safeId}-intro`, + content: product.content, + kennisartikelCategorie: 'inleiding', + categorie5: 'inleiding', + }, + ...((product.sections?.filter(isDefined) ?? []) as PageSection[]), + ]; + + // We cast the result to KennisartikelObject because generateKennisartikelObject + // might return a generic 'string' for its 'type' property internally. + return generateKennisartikelObject({ + id: safeId, + url: serverURL, + uuid: safeUuid, + locale: product.locale ?? 'nl', + title: product.title ?? '', + updatedAt: product.updatedAt, + createdAt: product.createdAt, + publicationState, + sections, + metaTags: product.metaTags ?? null, + kennisartikelMetadata: (product.kennisartikelMetadata as KennisartikelMetadata) ?? null, + price: product.price ? { price: (product.price.price?.filter(isDefined) ?? []) as PriceItem[] } : null, + additional_information: { + content: { + uuid: product.additional_information?.content?.uuid ?? '', + contentBlock: (product.additional_information?.content?.contentBlock ?? []).filter(isDefined).map((block) => ({ + id: block.id, + content: block.content, + kennisartikelCategorie: block.categorie10 ?? 'onbekend', + categorie10: block.categorie10, + component: 'ComponentComponentsUtrechtRichText' as const, + })), + }, + }, + }) as KennisartikelObject; +}; + export const getObjectByUUID = async ({ apiToken, + documentId, serverURL, uuid, locale, - publicationState = 'LIVE', + status = 'PUBLISHED', }: GetObjectByUUIDProps): Promise => { if (!uuid) throw new Error('UUID not provided'); - const graphqlURL = new URL('/graphql', process.env.STRAPI_PRIVATE_URL).href; + // Ensure base URL is a valid string for the URL constructor + const baseUrl = process.env.STRAPI_PRIVATE_URL || 'http://localhost:1337'; + const graphqlURL = new URL('/graphql', baseUrl).href; const vacSchemaURL = new URL('api/v2/objecttypes/vac', serverURL).href; + const headers = { Authorization: `Bearer ${apiToken}` }; + + const [productRes, vacRes] = await Promise.all([ + fetchData<{ data: GetProductByUuidOrDocumentIdQuery }>({ + url: graphqlURL, + query: GET_PRODUCT_BY_UUID, + variables: { documentId, locale, uuid, status }, + headers, + }), + fetchData<{ data: GetVacItemByUuidOrDocumentIdQuery }>({ + url: graphqlURL, + query: GET_VAC_ITEM_BY_UUID, + variables: { documentId, uuid, status }, + headers, + }), + ]); - // Fetch product data - const { data } = await fetchData({ - url: graphqlURL, - query: GET_PRODUCT_BY_UUID, - variables: { locale, uuid, publicationState }, - headers: { Authorization: `Bearer ${apiToken}` }, - }); - const kennisartikelPublicationState = - data?.products?.data[0]?.attributes?.publishedAt === null ? 'DRAFT' : 'PUBLISHED'; - - // Fetch VAC data - const { data: vacData } = await fetchData<{ data: VACSData }>({ - url: graphqlURL, - query: GET_VAC_ITEM_BY_UUID, - variables: { uuid, publicationState }, - headers: { Authorization: `Bearer ${apiToken}` }, - }); - const vacPublicationState = vacData?.vacs?.data[0]?.attributes?.publishedAt === null ? 'DRAFT' : 'PUBLISHED'; + const products = productRes.data?.products?.filter(isDefined) ?? []; + const vacNodes = vacRes.data?.vacs?.filter(isDefined) ?? []; const objectPublicationState = - kennisartikelPublicationState === 'DRAFT' || vacPublicationState === 'DRAFT' ? 'DRAFT' : 'PUBLISHED'; - // Handle kennisartikel - const products = data?.products?.data || []; - const kennisartikel = products - .map(({ attributes, id }: { attributes: Attributes; id: string }) => { - const modifiedAttributes = { - ...attributes, - sections: [ - { - content: attributes?.content, - kennisartikelCategorie: 'inleiding', - component: 'ComponentComponentsUtrechtRichText', - categorie5: 'inleiding', - } as ModifiedSection, - ...attributes.sections, - ], - }; - return generateKennisartikelObject({ - attributes: modifiedAttributes, - url: serverURL, - id, - publicationState: objectPublicationState, - }); - }) - .find((item) => item.uuid === uuid) as KennisartikelObject; - - if (kennisartikel) return kennisartikel; - - // Handle VAC - if (Array.isArray(vacData?.vacs?.data) && vacData.vacs.data.length > 0) { - const vac = getVacData({ data: vacData, serverURL, vacSchemaURL, publicationState: objectPublicationState }); - return vac[0] as VACObject; + getStatus(products) === 'DRAFT' || getStatus(vacNodes) === 'DRAFT' ? 'DRAFT' : 'PUBLISHED'; + + const foundProduct = products.find((p) => p.uuid === uuid || p.id === uuid); + if (foundProduct) { + return formatKennisartikel(foundProduct, serverURL, objectPublicationState); + } + + if (vacNodes.length > 0) { + const vacItems = getVacData({ + data: { + vacs_connection: { + nodes: vacNodes, + pageInfo: { total: vacNodes.length, page: 1, pageSize: vacNodes.length, pageCount: 1 }, + }, + }, + serverURL, + vacSchemaURL, + publicationState: objectPublicationState, + }); + return vacItems[0] as VACObject; } throw new Error('Object not found'); diff --git a/apps/overige-objecten-api/src/shared-types.ts b/apps/overige-objecten-api/src/shared-types.ts new file mode 100644 index 000000000..e64442a8b --- /dev/null +++ b/apps/overige-objecten-api/src/shared-types.ts @@ -0,0 +1,245 @@ +export interface ImageFormat { + name: string; + hash: string; + ext: string; + mime: string; + path: string | null; + width: number; + height: number; + size: number; + sizeInBytes: number; + url: string; +} + +export interface ImageData { + name: string; + alternativeText: string | null; + caption: string | null; + width: number; + height: number; + formats: { + thumbnail: ImageFormat; + small: ImageFormat; + medium: ImageFormat; + large: ImageFormat; + }; + url: string; +} + +export interface AccordionItem { + body: string; + headingLevel: number; + id: string; + label: string; +} + +export interface ContentBlockSimple { + id: string; + content: string; +} + +export interface ContentBlockDetailed { + content: string; + kennisartikelCategorie: string | null; +} + +export interface ContactInformationInternal { + contentBlock: ContentBlockSimple[]; +} + +export interface ContactInformationPublicData { + contentBlock: ContentBlockSimple[]; +} + +export interface ContactInformationPublic { + component: 'ComponentComponentsContactInformationPublic'; + contact_information_public: ContactInformationPublicData | null; +} + +export interface InternalContent { + id: string; + uuid: string; + contentBlock: ContentBlockDetailed[]; + keywords: string; +} + +export interface InternalField { + contact_information_internal: ContactInformationInternal[] | null; + contact_information_public: ContactInformationPublicData | null; + content: InternalContent; + title: string; + id: string; +} + +export interface UtrechtRichText { + component: 'ComponentComponentsUtrechtRichText'; + id: string; + content?: string | null; + kennisartikelCategorie?: string | null; + categorie?: string | null; +} +export interface UtrechtRichText2 { + component: 'ComponentComponentsUtrechtRichText'; + id?: string; + content?: string | null; + kennisartikelCategorie?: string | null; + categorie5?: string | null; + categorie?: string | null; +} + +export interface UtrechtLogoButton { + component: 'ComponentComponentsUtrechtLogoButton'; + id?: string; + appearance: string; + href: string | null; + label: string | null; + logo?: string; + openFormsEmbed?: string; + textContent: string | null; + categorie?: string; + __typename?: string; +} + +export interface UtrechtSpotlight { + component: 'ComponentComponentsUtrechtSpotlight'; + content: string; + type: string; + logoButton: UtrechtLogoButton[]; + categorie: string; +} + +export interface UtrechtLink { + component: 'ComponentComponentsUtrechtLink'; + href: string; + textContent: string; + icon: string; + language: string | null; + categorie: string; +} + +export interface UtrechtAccordion { + component: 'ComponentComponentsUtrechtAccordion'; + item: AccordionItem[]; + categorie: string; +} + +export interface UtrechtImage { + component: 'ComponentComponentsUtrechtImage'; + imageData: ImageData; + categorie: string | null; +} + +export interface InternalBlockContent { + id: string; + component: 'ComponentComponentsInternalBlockContent'; + internal_field: InternalField; +} + +export interface FaqComponent { + component: 'ComponentComponentsFaq'; + pdc_faq: { + title: string; + faq: AccordionItem[]; + }; + categorie: string; +} + +export interface MultiColumnsButton { + component: 'ComponentComponentsUtrechtMultiColumnsButton'; + column: { + id: string; + title: string; + logoButton: UtrechtLogoButton[]; + }[]; + categorie: string; +} + +export type PageSection = + | UtrechtRichText + | UtrechtLogoButton + | UtrechtSpotlight + | UtrechtLink + | UtrechtAccordion + | UtrechtImage + | InternalBlockContent + | FaqComponent + | MultiColumnsButton + | ContactInformationPublic + | UtrechtRichText2 + | ContentBlock; + +export type PageData = PageSection[]; + +export interface PriceItem { + currency: string; + id: string; + label: string; + uuid: string; + value: number; +} + +export type Sections = PageSection[]; + +export interface Content { + id?: string; + uuid: string; + contentBlock: ContentBlock[]; +} + +export interface ContentBlock { + id?: string; + content?: string | null; + kennisartikelCategorie?: string | null; + categorie10?: string | null; + component: 'ComponentComponentsUtrechtRichText'; +} +export interface AdditionalInformation { + content?: Content | null; +} + +export interface MetaTags { + keymatch: string; + title: string; + description: string; +} + +// + +export interface KennisartikelMetadata { + uuid: string; + doelgroep: string; + productAanwezig: boolean; + productValtOnder: string | null; + afdelingen: Afdelingen[]; + verantwoordelijkeOrganisatie: VerantwoordelijkeOrganisatie; + upnUri: string; +} + +export interface Afdelingen { + afdelingId: string; + afdelingNaam: string; +} + +export interface VerantwoordelijkeOrganisatie { + owmsIdentifier: string; + owmsPrefLabel: string; + owmsEndDate: string; +} + +export interface Kennisartikel { + title?: string | null; + uuid?: string | null; + locale?: string | null; + updatedAt?: string | null; + createdAt?: string | null; + metaTags: MetaTags | null; + sections: Sections | null; + kennisartikelMetadata: KennisartikelMetadata | null; + price: { + price: PriceItem[]; + } | null; + additional_information: AdditionalInformation; + url: string; + id?: string; + publicationState: 'PUBLISHED' | 'DRAFT'; +} diff --git a/apps/overige-objecten-api/src/strapi-product-type.ts b/apps/overige-objecten-api/src/strapi-product-type.ts deleted file mode 100644 index 2d1cccb32..000000000 --- a/apps/overige-objecten-api/src/strapi-product-type.ts +++ /dev/null @@ -1,274 +0,0 @@ -export type Status = 'actief' | 'non-actief' | 'te-verwijderen'; -export type Doelgroep = 'eu-burger' | 'eu-bedrijf' | 'eu-burger-bedrijf'; -export type Afdeling = { - afdelingId?: string; - afdelingNaam: string; -}; -export type Trefwoorden = { - trefwoord: string; -}; -export type VacRecordData = { - uuid: string; - vraag?: string; - antwoord: string; - status?: Status; - doelgroep?: Doelgroep; - afdelingen?: Afdeling[]; - toelichting?: string; - trefwoorden?: Trefwoorden[]; - gerelateerdeVACs?: { VAC?: string }[]; - gerelateerdeProducten: { product?: string }[]; - url: string; -}; -export interface CreateInternalField { - data: { - createInternalField: { - data: { - id: string; - attributes: InternalFieldAttributes; - }; - }; - }; -} -export interface InternalFieldQuery { - internalFields: { - data: { - id: string; - attributes: InternalFieldAttributes; - }[]; - }; -} -export interface CreateProductData { - data: { - id: string; - attributes: Attributes; - }; -} -export interface CreateProduct { - createProduct: CreateProductData; -} -export interface Antwoord { - content: string; - kennisartikelCategorie?: string; -} -export interface VacItem { - uuid: string; - vraag?: string; - antwoord: Antwoord[]; - status: Status; - doelgroep?: Doelgroep; - afdelingen?: Afdeling[]; - toelichting?: string; - keywords?: string; -} -export interface RelatedVACs { - data: { - attributes: { - vac: VacItem; - }; - }[]; -} -export interface RelatedProducts { - data: { - attributes: { - uuid: string; - }; - }[]; -} -export interface ContactInformationContentBlock { - id: string; - content: string; -} -export interface ContactInformationAttributes { - attributes: { - contentBlock: ContactInformationContentBlock[]; - }; -} - -export interface ContactInformationInternalData { - data: ContactInformationAttributes[]; -} -export interface ContactInformationPublicData { - data: ContactInformationAttributes; -} -export interface AttributesVacItem { - createdAt: string; - publishedAt?: string | null; - updatedAt: string; - vac: VacItem; - title: string; - relatedVACs?: RelatedVACs; - relatedProducts?: RelatedProducts; - contact_information_internal: ContactInformationInternalData; - contact_information_public: ContactInformationPublicData; -} - -export interface DataVacItem { - attributes: AttributesVacItem; - id: string; -} - -export interface RootObjectVacItem { - data: DataVacItem[]; -} - -export interface VACSData { - vacs: RootObjectVacItem; - meta?: Meta; -} -export interface StrapiProductType { - data: Data; -} -export interface Meta { - pagination: Pagination; -} -export interface Pagination { - total: number; - page: number; - pageSize: number; - pageCount: number; -} -export interface Data { - products: Products; -} - -export interface Products { - data: ProductData[]; - meta: Meta; -} - -export interface ProductData { - id: string; - attributes: Attributes; -} -export interface Price { - currency: string; - label: string; - value: string; - uuid: string; -} - -interface PriceAttributes { - price: Price[]; -} -export interface PriceData { - data: PriceDataAttributes; -} -export interface PriceDataAttributes { - attributes: PriceAttributes; -} -export interface Attributes { - publishedAt?: string | null; - content?: string; - title: string; - slug: string; - uuid: string; - locale: 'nl' | 'en'; - updatedAt: string; - createdAt: string; - metaTags: MetaTags; - sections: Section[]; - kennisartikelMetadata: KennisartikelMetadata; - kennisartikel: Kennisartikel; - vac: RootObjectVacItem; - price: PriceData; - additional_information: AdditionalInformationField; -} -export interface InternalField { - data: InternalFieldData; -} -export interface AdditionalInformationFieldData { - id: string; - attributes: AdditionalInformationFieldAttributes; -} -export interface AdditionalInformationFieldAttributes { - title: string; - content: AdditionalInformationFieldAttributesContent; -} -export interface AdditionalInformationFieldAttributesContent { - id: string; - uuid: string; - contentBlock: AdditionalInformationFieldAttributesContentContentBlock[]; -} -export interface AdditionalInformationFieldAttributesContentContentBlock { - content: string; - categorie10: string; - id: string; - component?: string; -} -export interface AdditionalInformationField { - data: AdditionalInformationFieldData; -} - -export interface InternalFieldData { - id: string; - attributes: InternalFieldAttributes; -} -export interface InternalFieldAttributes { - title: string; - content: InternalFieldAttributesContent; - contact_information_internal?: ContactInformationInternalData; - contact_information_public?: ContactInformationPublicData; -} -export interface InternalFieldAttributesContent { - id: string; - uuid: string; - contentBlock: InternalFieldAttributesContentContentBlock[]; - keywords?: string; -} -export interface InternalFieldAttributesContentContentBlock { - content: string; - kennisartikelCategorie: string; -} - -export interface Kennisartikel { - data: { - attributes: { - internalSections: Section[]; - }; - }; -} -export interface KennisartikelMetadata { - uuid: string; - doelgroep: 'eu-burger' | 'eu-bedrijf'; - productAanwezig: boolean; - productValtOnder: null; - afdelingen: Afdelingen[]; - verantwoordelijkeOrganisatie: VerantwoordelijkeOrganisatie; - upnUri: string; -} - -export interface Afdelingen { - afdelingId: string; - afdelingNaam: string; -} - -export interface VerantwoordelijkeOrganisatie { - owmsIdentifier: string; - owmsPrefLabel: string; - owmsEndDate: string; -} - -export interface MetaTags { - keymatch: string; - title: string; - description: string; -} - -export interface Section { - id?: string; - content?: string; - kennisartikelCategorie?: null | string; - component?: string; - internal_field: InternalField; - contact_information_public?: ContactInformationPublicData; - [key: string]: any; -} - -export type CreateVacResponse = { - data: { - createVac: { - data: DataVacItem; - }; - }; -}; diff --git a/apps/overige-objecten-api/src/tests/jest.setup.ts b/apps/overige-objecten-api/src/tests/jest.setup.ts deleted file mode 100644 index 9e92f7c1b..000000000 --- a/apps/overige-objecten-api/src/tests/jest.setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import fetchMock from 'jest-fetch-mock'; - -fetchMock.enableMocks(); diff --git a/apps/overige-objecten-api/src/tests/vitest.d.ts b/apps/overige-objecten-api/src/tests/vitest.d.ts new file mode 100644 index 000000000..2275e9c5a --- /dev/null +++ b/apps/overige-objecten-api/src/tests/vitest.d.ts @@ -0,0 +1,5 @@ +import type { FetchMock } from 'vitest-fetch-mock'; + +declare global { + const fetchMock: FetchMock; +} diff --git a/apps/overige-objecten-api/src/tests/vitest.setup.ts b/apps/overige-objecten-api/src/tests/vitest.setup.ts new file mode 100644 index 000000000..307284a3a --- /dev/null +++ b/apps/overige-objecten-api/src/tests/vitest.setup.ts @@ -0,0 +1,16 @@ +import { TextEncoder, TextDecoder } from 'util'; + +import { vi } from 'vitest'; +import createFetchMock from 'vitest-fetch-mock'; + +const fetchMock = createFetchMock(vi); +vi.stubGlobal('fetch', fetchMock); +vi.stubGlobal('fetchMock', fetchMock); +global.TextDecoder = TextDecoder as typeof global.TextDecoder; +global.TextEncoder = TextEncoder as typeof global.TextEncoder; + +process.env.STRAPI_PRIVATE_URL = process.env.STRAPI_PRIVATE_URL || 'https://localhost:1337'; +process.env.STRAPI_API_TOKEN = process.env.STRAPI_API_TOKEN || 'test-token'; +process.env.KISS_PREVIEW_TOKEN = process.env.KISS_PREVIEW_TOKEN || '54E00590-62B6-4AC0-86CB-7B8B41309D0F'; +process.env.OVERIGE_OBJECTEN_API_PORT = process.env.OVERIGE_OBJECTEN_API_PORT || '3000'; +process.env.NODE_ENV = process.env.NODE_ENV || 'test'; diff --git a/apps/overige-objecten-api/src/utils/buildImageURL.ts b/apps/overige-objecten-api/src/utils/buildImageURL.ts index 218a9cef6..74cac94d8 100644 --- a/apps/overige-objecten-api/src/utils/buildImageURL.ts +++ b/apps/overige-objecten-api/src/utils/buildImageURL.ts @@ -4,6 +4,7 @@ export const buildImageURL = (url: string, src: string): string | undefined => { try { const imageSrc = new URL(src, url); return imageSrc.toString(); + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars } catch (error) { return undefined; } diff --git a/apps/overige-objecten-api/src/utils/concatenateFieldValues.ts b/apps/overige-objecten-api/src/utils/concatenateFieldValues.ts index 8a58896bc..69af12c4b 100644 --- a/apps/overige-objecten-api/src/utils/concatenateFieldValues.ts +++ b/apps/overige-objecten-api/src/utils/concatenateFieldValues.ts @@ -1,6 +1,6 @@ export interface ConcatenateFieldValuesDataTypes { content: string; - kennisartikelCategorie?: string; + kennisartikelCategorie?: string | null; } export const concatenateFieldValues = (data: ConcatenateFieldValuesDataTypes[]): string => data?.reduce((result, item) => { diff --git a/apps/overige-objecten-api/src/utils/convertImageToHTML.tsx b/apps/overige-objecten-api/src/utils/convertImageToHTML.tsx index 3efb0ea3c..b85326e38 100644 --- a/apps/overige-objecten-api/src/utils/convertImageToHTML.tsx +++ b/apps/overige-objecten-api/src/utils/convertImageToHTML.tsx @@ -1,27 +1,12 @@ import { renderToString } from 'react-dom/server'; -import { buildImageURL } from './buildImageURL'; -export type Attributes = { - name: string; - alternativeText?: string; - caption?: string | null; - width: number; - height: number; - url: string; -}; +import { ImageData } from '../shared-types'; -export type ImageDataType = { - attributes: Attributes; -}; - -export interface ConvertImageToHTMLProps { - data: ImageDataType; - url: string; -} +import { buildImageURL } from './buildImageURL'; -export const convertImageToHTML = (imageData: ConvertImageToHTMLProps, url: string) => { - const src = buildImageURL(url, imageData?.data?.attributes?.url); - const alt = imageData?.data?.attributes?.alternativeText; +export const convertImageToHTML = (imageData: ImageData, url: string) => { + const src = buildImageURL(url, imageData.url); + const alt = imageData?.alternativeText; if (!src) return null; - return renderToString({alt}); + return renderToString({alt); }; diff --git a/apps/overige-objecten-api/src/utils/convertLogoButtonToHTML.tsx b/apps/overige-objecten-api/src/utils/convertLogoButtonToHTML.tsx index c04f3ed53..d7bc50a45 100644 --- a/apps/overige-objecten-api/src/utils/convertLogoButtonToHTML.tsx +++ b/apps/overige-objecten-api/src/utils/convertLogoButtonToHTML.tsx @@ -1,115 +1,182 @@ -import { ButtonLink, Heading } from '@utrecht/component-library-react'; +import { ButtonLink, Heading, type ButtonLinkProps } from '@utrecht/component-library-react'; import { UtrechtDigidLogo, UtrechtEherkenningLogo, UtrechtEidasLogo } from '@utrecht/web-component-library-react'; import kebabCase from 'lodash.kebabcase'; -import React from 'react'; +import React, { useMemo } from 'react'; import { renderToString } from 'react-dom/server'; +type LogoType = 'eidas' | 'digid' | 'eherkenning' | 'without_logo'; + +const VALID_LOGOS = new Set(['eidas', 'digid', 'eherkenning', 'without_logo']); + +const isValidLogo = (logo: unknown): logo is LogoType => { + return typeof logo === 'string' && VALID_LOGOS.has(logo); +}; + interface IconProps { logo?: string; } -export const Icon = ({ logo }: IconProps) => { - switch (logo) { - case 'eidas': - return ; - case 'digid': - return ; - case 'eherkenning': - return ; - default: - return null; - } -}; export type LogoButtonItemType = { logo?: string; - href?: string; + href: string | null; appearance?: string; - label?: string; + label: string | null; openFormsEmbed?: string | null; textContent?: string | null; }; + export interface LogoButtonProps { item: LogoButtonItemType; headingLevel?: number; withDesignSystem?: boolean; } + export interface BasicLogoButtonProps { item: LogoButtonItemType; headingLevel?: number; } + +const DEFAULT_HEADING_LEVEL = 3; + +const LOGO_LABEL_MAP: Record = { + eidas: 'eIDAS', + digid: 'DigiD', + eherkenning: 'eHerkenning', + without_logo: null, +}; + +/** + * Renders the appropriate logo icon based on the logo type + */ +export const Icon = ({ logo }: IconProps) => { + // Type-safe rendering with validation + if (!isValidLogo(logo)) { + return null; + } + + switch (logo) { + case 'eidas': + return ; + case 'digid': + return ; + case 'eherkenning': + return ; + case 'without_logo': + default: + return null; + } +}; + +/** + * Parses OpenForms embed string into structured data + * Extracts slug, label, and embed_url from URL parameters + */ +const parseOpenFormsEmbed = ( + openFormsEmbed: string | null | undefined, +): { href: string; textContent: string | null } | null => { + if (!openFormsEmbed) return null; + + try { + const params = new URLSearchParams(openFormsEmbed); + const slug = params.get('slug'); + const label = params.get('label'); + const embed_url = params.get('embed_url'); + + // Validate required fields before using + if (!slug || !embed_url) return null; + + return { + href: new URL(`/form/${slug}`, embed_url).href, + textContent: label, + }; + } catch (error) { + // eslint-disable-next-line no-console, no-undef + console.error('Failed to parse openFormsEmbed:', error); + return null; + } +}; + +/** + * Basic version without design system components + * Renders semantic HTML with minimal styling + */ export const BasicLogoButton = ({ item, headingLevel }: BasicLogoButtonProps) => { - const HeadingComponent = `h${headingLevel || 3}` as keyof React.JSX.IntrinsicElements; - const mappingIcon = { - eidas: 'eIDAS', - digid: 'DigiD', - eherkenning: 'eHerkenning', - without_logo: null, - }; + const resolvedHeadingLevel = headingLevel || DEFAULT_HEADING_LEVEL; + const HeadingComponent = `h${resolvedHeadingLevel}` as keyof React.JSX.IntrinsicElements; + const logoLabel = item?.logo ? LOGO_LABEL_MAP[item.logo] : null; + return (
{item?.label && {item.label}}
- {item?.logo && {mappingIcon[item?.logo as keyof typeof mappingIcon]}}{' '} + {logoLabel && {logoLabel}}{' '} {item?.href && item?.textContent && {item.textContent}}
); }; + +/** + * Logo button component with design system support + * Supports both OpenForms embed and direct href configurations + */ export const LogoButton = ({ item, headingLevel, withDesignSystem = false }: LogoButtonProps) => { - const getOpenFormsEmbed = (openFormsEmbed: any) => { - if (!openFormsEmbed) return null; - const parsOpenFormsEmbedData = new URLSearchParams(openFormsEmbed); - const slug = parsOpenFormsEmbedData.get('slug'); - const label = parsOpenFormsEmbedData.get('label'); - const embed_url = parsOpenFormsEmbedData.get('embed_url'); - return { - href: embed_url ? new URL(`/form/${slug}`, embed_url).href : '', - textContent: label, - }; - }; - const openFormsEmbed = getOpenFormsEmbed(item?.openFormsEmbed); + const resolvedHeadingLevel = headingLevel || DEFAULT_HEADING_LEVEL; + + // Memoize the parsing to avoid recalculation on every render + const openFormsData = useMemo(() => parseOpenFormsEmbed(item?.openFormsEmbed), [item?.openFormsEmbed]); + + // Compute final values once + const finalHref = openFormsData?.href || item?.href; + const finalTextContent = item?.textContent || openFormsData?.textContent; + if (withDesignSystem) { - if (openFormsEmbed) { + // Only render design system version if we have required content + if (finalHref && finalTextContent) { return (
- {item?.label} + {item?.label}
- - {item?.textContent || openFormsEmbed.textContent} + + {finalTextContent}
); } - return ( -
- {item?.label} -
- - - {item?.textContent} - -
-
- ); + // Fallback to basic rendering if missing required props + return ; } - if (openFormsEmbed) { + + // Non-design-system version + if (openFormsData) { return ( ); } - return ; + + return ; }; -export const convertLogoButtonToHTML = (item: any) => { - return renderToString(); +/** + * Converts a LogoButton to static HTML string + * Useful for server-side rendering or email generation + */ +export const convertLogoButtonToHTML = (item: LogoButtonItemType): string => { + try { + return renderToString(); + } catch (error) { + // eslint-disable-next-line no-console, no-undef + console.error('Failed to convert LogoButton to HTML:', error); + return ''; + } }; diff --git a/apps/overige-objecten-api/src/utils/convertMultiColumnsButtonToHTML.tsx b/apps/overige-objecten-api/src/utils/convertMultiColumnsButtonToHTML.tsx index 6f7557120..87631ad24 100644 --- a/apps/overige-objecten-api/src/utils/convertMultiColumnsButtonToHTML.tsx +++ b/apps/overige-objecten-api/src/utils/convertMultiColumnsButtonToHTML.tsx @@ -1,5 +1,8 @@ import { Heading } from '@utrecht/component-library-react'; import { renderToString } from 'react-dom/server'; + +import type { MultiColumnsButton as MultiColumnsButtonTypes } from '../shared-types'; + import type { LogoButtonItemType } from './convertLogoButtonToHTML'; import { BasicLogoButton, LogoButton } from './convertLogoButtonToHTML'; @@ -33,9 +36,7 @@ const MultiColumnsButton = ({ item, withDesignSystem }: MultiColumnsButtonProps) ); }; -export const convertMultiColumnsButtonToHTML = (item: any, withDesignSystem?: boolean) => +export const convertMultiColumnsButtonToHTML = (item: MultiColumnsButtonTypes, withDesignSystem?: boolean) => item.column - .map((col: any) => - renderToString(), - ) + .map((col) => renderToString()) .join(''); diff --git a/apps/overige-objecten-api/src/utils/convertSpotlightToHTML.tsx b/apps/overige-objecten-api/src/utils/convertSpotlightToHTML.tsx index 321b6506c..b374b8202 100644 --- a/apps/overige-objecten-api/src/utils/convertSpotlightToHTML.tsx +++ b/apps/overige-objecten-api/src/utils/convertSpotlightToHTML.tsx @@ -1,18 +1,15 @@ import { renderToString } from 'react-dom/server'; -import { BasicLogoButton, LogoButtonItemType } from './convertLogoButtonToHTML'; + import { Markdown } from '../components/Markdown'; -interface convertSpotlightToHTMLProps { - item: { - content: string; - logoButton: LogoButtonItemType[]; - }; -} +import { UtrechtSpotlight } from '../shared-types'; + +import { BasicLogoButton } from './convertLogoButtonToHTML'; /* Using
to get a default border since CSS is not allowed in the receiving system. This is technically a semantic misuse of
, which is normally for self-contained media or illustrations. Adding role="group" improves accessibility by indicating this is a related group of content and interactive elements. */ -export const convertSpotlightToHTML = (item: convertSpotlightToHTMLProps['item']) => { +export const convertSpotlightToHTML = (item: UtrechtSpotlight) => { return renderToString(
{item?.content} diff --git a/apps/overige-objecten-api/src/utils/createComponentGuard.ts b/apps/overige-objecten-api/src/utils/createComponentGuard.ts new file mode 100644 index 000000000..c12e9c185 --- /dev/null +++ b/apps/overige-objecten-api/src/utils/createComponentGuard.ts @@ -0,0 +1,11 @@ +import type { PageSection } from '../shared-types'; + +/** + * Creates a reusable type guard for a specific Strapi component. + * This is the "Best Practice" for use in .filter() and .find() + */ +export const createComponentGuard = (componentName: K) => { + return (section: PageSection): section is Extract => { + return section.component === componentName; + }; +}; diff --git a/apps/overige-objecten-api/src/utils/createHTMLFiles.tsx b/apps/overige-objecten-api/src/utils/createHTMLFiles.tsx index a8d9fa289..d1fdc6e12 100644 --- a/apps/overige-objecten-api/src/utils/createHTMLFiles.tsx +++ b/apps/overige-objecten-api/src/utils/createHTMLFiles.tsx @@ -1,9 +1,11 @@ -import { Button, Document, Heading, Page, PageContent, Separator } from '@utrecht/component-library-react'; import fs from 'node:fs'; import path from 'node:path'; + +import { Button, Document, Heading, Page, PageContent, Separator } from '@utrecht/component-library-react'; import { renderToString } from 'react-dom/server'; + import { Markdown } from '../components/Markdown'; -import type { Price } from '../strapi-product-type'; +import type { PriceItem } from '../shared-types'; interface CategoryTypes { [key: string]: string; @@ -11,7 +13,7 @@ interface CategoryTypes { interface CategoryProps { data: CategoryTypes; - priceData?: Price[]; + priceData?: PriceItem[]; } const Category = ({ data, priceData }: CategoryProps) => { @@ -99,9 +101,7 @@ const Category = ({ data, priceData }: CategoryProps) => { ); }; -interface PageComponentProps extends CategoryProps {} - -const PageComponent = ({ data, priceData }: PageComponentProps) => { +const PageComponent = ({ data, priceData }: CategoryProps) => { return ( @@ -170,7 +170,7 @@ const PageComponent = ({ data, priceData }: PageComponentProps) => { ); }; -export const createHTMLFiles = (data: CategoryTypes, priceData: Price[]) => { +export const createHTMLFiles = (data: CategoryTypes, priceData?: PriceItem[]) => { const outputDir = './tmp/output-html'; if (!fs.existsSync(outputDir)) { diff --git a/apps/overige-objecten-api/src/utils/generateKennisartikelObject.ts b/apps/overige-objecten-api/src/utils/generateKennisartikelObject.ts index f0e749bef..fe5f2b5eb 100644 --- a/apps/overige-objecten-api/src/utils/generateKennisartikelObject.ts +++ b/apps/overige-objecten-api/src/utils/generateKennisartikelObject.ts @@ -1,4 +1,8 @@ import { addHeadingOncePerCategory } from '@frameless/utils'; + +import type { components } from '../types/openapi'; +import { ContentBlock, Kennisartikel, PageData } from '../shared-types'; + import { combineSimilarCategories, createHTMLFiles, @@ -6,108 +10,129 @@ import { getDeskMemo, getVerantwoordelijkeOrganisatie, getVertalingen, + createComponentGuard, normalizeCategories, processData, + uuidToIndex, } from './index'; -import type { Attributes } from '../strapi-product-type'; -import type { components } from '../types/openapi'; -interface GenerateKennisartikelObjectTypes { - attributes: Attributes; - url: string; - id: string; - publicationState?: 'DRAFT' | 'PUBLISHED'; -} export const generateKennisartikelObject = ({ - attributes, + title, + uuid, + locale, + updatedAt, + createdAt, + metaTags, + kennisartikelMetadata, + sections, + price, + additional_information, url, id, publicationState, -}: GenerateKennisartikelObjectTypes) => { - const metaTags = attributes?.metaTags; +}: Kennisartikel) => { const trefwoorden = generateKeywords(metaTags?.keymatch); - const getInternalField = attributes.sections?.find( - ({ component }) => component === 'ComponentComponentsInternalBlockContent', - )?.internal_field?.data?.attributes; - + const isInternalBlock = createComponentGuard('ComponentComponentsInternalBlockContent'); + const internalBlock = sections?.find(isInternalBlock); + const getInternalField = internalBlock?.internal_field; const internalTrefwoorden = generateKeywords(getInternalField?.content?.keywords ?? ''); - const kennisartikelMetadata = attributes.kennisartikelMetadata; - const publicatieDatum = new Date(attributes.createdAt).toISOString().split('T')[0]; + const publicatieDatum = new Date(createdAt ?? Date.now()).toISOString().split('T')[0]; + const hasContent = (item: ContentBlock): item is ContentBlock & { content: string; id: string } => + item.content !== null; const additionalInformation = addHeadingOncePerCategory({ - contentBlocks: attributes?.additional_information?.data?.attributes?.content?.contentBlock ?? [], + contentBlocks: additional_information?.content?.contentBlock?.filter(hasContent) ?? [], title: 'Aanvullende informatie', categoryKey: 'categorie10', }); - const mergedContactInformationInternal = getInternalField?.contact_information_internal?.data?.flatMap( - (item) => item.attributes.contentBlock, + const mergedContactInformationInternal = getInternalField?.contact_information_internal?.flatMap( + (item) => item.contentBlock, ); const contactInformationInternal = mergedContactInformationInternal; - const contactInformationPublic = getInternalField?.contact_information_public?.data?.attributes?.contentBlock; + const contactInformationPublic = getInternalField?.contact_information_public?.contentBlock; // merge contactInformationInternal and contactInformationPublic const contactInformation = [...(contactInformationPublic ?? []), ...(contactInformationInternal ?? [])]; - const priceData = attributes?.price?.data?.attributes?.price; - const deskMemo = getDeskMemo(attributes?.sections, contactInformation); + const priceData = price?.price; + const deskMemo = getDeskMemo(sections ?? [], contactInformation); + const isContactInfoPublic = createComponentGuard('ComponentComponentsContactInformationPublic'); + + const contactInformationPublicBlocks = (sections ?? []) + .flatMap((block) => { + // Scenario A: It's the new standalone component + if (isContactInfoPublic(block)) { + return block.contact_information_public?.contentBlock; + } - const contactInformationPublicBlocks = attributes.sections - .filter((block) => block.component === 'ComponentComponentsContactInformationPublic') - .flatMap((block) => block.contact_information_public?.data?.attributes?.contentBlock ?? []) + // Scenario B: It's nested inside the internal block + if (isInternalBlock(block)) { + return block.internal_field.contact_information_public?.contentBlock ?? []; + } + + return []; + }) .map((inner) => ({ - component: 'ComponentComponentsUtrechtRichText', + component: 'ComponentComponentsUtrechtRichText' as const, kennisartikelCategorie: 'contact', id: inner?.id, content: inner?.content, categorie11: 'contact', })); - const regularSections = attributes.sections.filter( - (block) => block.component !== 'ComponentComponentsContactInformationPublic', - ); + const regularSections = (sections ?? []).filter((block) => !isContactInfoPublic(block)); - const sections = combineSimilarCategories( + const combineSections = combineSimilarCategories( processData({ - data: normalizeCategories([...regularSections, ...contactInformationPublicBlocks, ...additionalInformation]), + data: normalizeCategories([ + ...(regularSections ?? []), + ...(contactInformationPublicBlocks ?? []), + ...(additionalInformation ?? []), + ] as PageData), priceData, }), ); - const bothContentBlock = { ...sections, deskMemo }; + const bothContentBlock = { ...combineSections, deskMemo }; createHTMLFiles(bothContentBlock, priceData); const vertalingen = getVertalingen({ bothContentBlock, deskMemo, priceData, - attributes, + locale: locale ?? 'nl', + updatedAt: updatedAt!, + title: title!, trefwoorden: [...trefwoorden, ...(internalTrefwoorden ?? [])], }); const data: components['schemas']['ObjectData'] & { publicationState?: 'DRAFT' | 'PUBLISHED' } = { - url: `${url}/api/v2/objects/${attributes.uuid}`, - uuid: attributes.uuid, + url: `${url}/api/v2/objects/${uuid}`, + uuid: uuid ?? id, publicationState, type: new URL('api/v2/objecttypes/kennisartikel', url).href, record: { - index: parseInt(id, 10), - startAt: attributes.createdAt, + index: uuidToIndex(id ?? uuid), + startAt: createdAt!, typeVersion: 3, data: { - url: `${url}/api/v2/objects/${attributes.uuid}`, - uuid: attributes.uuid, - upnUri: kennisartikelMetadata?.upnUri, + url: `${url}/api/v2/objects/${uuid}`, + uuid: uuid!, + upnUri: kennisartikelMetadata?.upnUri ?? '', publicatieDatum, - productAanwezig: kennisartikelMetadata?.productAanwezig, - productValtOnder: kennisartikelMetadata?.productValtOnder, // we need an extra field for this + productAanwezig: kennisartikelMetadata?.productAanwezig ?? false, + productValtOnder: kennisartikelMetadata?.productValtOnder ?? null, // we need an extra field for this verantwoordelijkeOrganisatie: getVerantwoordelijkeOrganisatie({ - metadata: kennisartikelMetadata?.verantwoordelijkeOrganisatie, + metadata: kennisartikelMetadata?.verantwoordelijkeOrganisatie ?? { + owmsEndDate: '', + owmsIdentifier: '', + }, url, }), locaties: null, //Een lijst met locaties waarop dit product beschikbaar is. Deze is nog niet nodig voor KISS en mag null zijn. Dit obecjt is dus nog niet opgenomen in dit schema doelgroep: kennisartikelMetadata?.doelgroep?.replace('_', '-') as 'eu-burger' | 'eu-bedrijf', afdelingen: kennisartikelMetadata?.afdelingen, - beschikbareTalen: [attributes?.locale], + beschikbareTalen: [locale ?? 'nl'], vertalingen, }, geometry: null, endAt: null, - registrationAt: attributes.createdAt, + registrationAt: createdAt!, }, }; diff --git a/apps/overige-objecten-api/src/utils/generateKeywords.ts b/apps/overige-objecten-api/src/utils/generateKeywords.ts index 663b5ed3b..ad3e82659 100644 --- a/apps/overige-objecten-api/src/utils/generateKeywords.ts +++ b/apps/overige-objecten-api/src/utils/generateKeywords.ts @@ -1,4 +1,6 @@ -import { Trefwoorden } from '../strapi-product-type'; +export interface ReturnType { + trefwoord: string; +} -export const generateKeywords = (keywords: string): Trefwoorden[] | [] => +export const generateKeywords = (keywords?: string): ReturnType[] => keywords ? keywords.split(', ').map((keyword: string) => ({ trefwoord: keyword })) : []; diff --git a/apps/overige-objecten-api/src/utils/getCurrentTypeParam.ts b/apps/overige-objecten-api/src/utils/getCurrentTypeParam.ts index 0267ac10f..f8bf20fd6 100644 --- a/apps/overige-objecten-api/src/utils/getCurrentTypeParam.ts +++ b/apps/overige-objecten-api/src/utils/getCurrentTypeParam.ts @@ -7,7 +7,7 @@ export const getCurrentTypeParam = (url?: string) => { const isKennisartikel = isURL && typeUrl.pathname.split('/').includes('kennisartikel'); return { isVac, isKennisartikel }; } catch (error) { - // eslint-disable-next-line no-console + // eslint-disable-next-line no-console, no-undef console.error(error); return { isVac: false, isKennisartikel: false }; } diff --git a/apps/overige-objecten-api/src/utils/getDeskMemo.test.ts b/apps/overige-objecten-api/src/utils/getDeskMemo.test.ts index cd3b94638..d1a516931 100644 --- a/apps/overige-objecten-api/src/utils/getDeskMemo.test.ts +++ b/apps/overige-objecten-api/src/utils/getDeskMemo.test.ts @@ -1,80 +1,81 @@ +import { Sections } from '../shared-types'; + import { getDeskMemo } from './getDeskMemo'; -import type { Section } from '../strapi-product-type'; describe('getDeskMemo', () => { it('should return the desk memo', () => { - const sections: Section[] = [ + const sections: Sections | null = [ { component: 'ComponentComponentsInternalBlockContent', internal_field: { - data: { - attributes: { - content: { - contentBlock: [ - { - kennisartikelCategorie: 'inleiding', - content: '

Inleiding - interne kop

Inhoud

', - }, - ], - id: '1', - uuid: 'C8C15769-A9F2-4F2C-89DB-544B98E91D2D', + id: 'e51318b2-ddb3-4e85-b746-5f29f3762a82', + contact_information_internal: null, + contact_information_public: null, + content: { + id: 'e51318b2-ddb3-4e85-b746-5f29f3762a82', + uuid: '75A60558-A9AF-44A7-A7F1-89F7A3B788ED', + keywords: 'test,desk memo', + contentBlock: [ + { + kennisartikelCategorie: 'inleiding', + content: '

Inleiding - interne kop

Inhoud

', }, - title: 'Test Interne Content', - }, - id: '1', + ], }, + title: 'Test Interne Content', }, + id: '1', }, ]; expect(getDeskMemo(sections)).toBe('

Inleiding - interne kop

Inhoud

'); }); it('should return an empty string if no desk memo is found', () => { - const sections: Section[] = [ + const sections: Sections | null = [ { component: 'ComponentComponentsInternalBlockContent', internal_field: { - data: { - attributes: { - content: { - contentBlock: [], - id: '1', - uuid: '17B314FC-BDE5-4B5D-AEBA-7EEC6116AEEC', - }, - title: 'Test Interne Content', - }, + contact_information_internal: null, + contact_information_public: null, + content: { id: '1', + keywords: 'test,desk memo', + contentBlock: [], + uuid: '17B314FC-BDE5-4B5D-AEBA-7EEC6116AEEC', }, + title: 'Test Interne Content', + id: '1', }, + id: '1', }, ]; expect(getDeskMemo(sections)).toBe(''); }); it('should return concatenated values when provided multiple internal-fields', () => { - const sections: Section[] = [ + const sections: Sections | null = [ { component: 'ComponentComponentsInternalBlockContent', internal_field: { - data: { - attributes: { - content: { - contentBlock: [ - { - kennisartikelCategorie: 'inleiding', - content: '

Inleiding - interne kop - 1

Inhoud

', - }, - { - kennisartikelCategorie: 'inleiding', - content: '

Inleiding - interne kop - 2

Inhoud

', - }, - ], - id: '1', - uuid: '75A60558-A9AF-44A7-A7F1-89F7A3B788ED', + contact_information_internal: null, + contact_information_public: null, + content: { + id: '2', + uuid: '75A60558-A9AF-44A7-A7F1-89F7A3B788ED', + keywords: 'test,desk memo', + contentBlock: [ + { + kennisartikelCategorie: 'inleiding', + content: '

Inleiding - interne kop - 1

Inhoud

', }, - title: 'Test Interne Content', - }, - id: '1', + { + kennisartikelCategorie: 'inleiding', + content: '

Inleiding - interne kop - 2

Inhoud

', + }, + ], }, + title: 'Test Interne Content', + id: '2', }, + id: '2', }, ]; expect(getDeskMemo(sections)).toBe( @@ -82,27 +83,27 @@ describe('getDeskMemo', () => { ); }); it('should return an desk memo even if the kennisartikelCategorie is not provided', () => { - const sections: Section[] = [ + const sections: Sections | null = [ { component: 'ComponentComponentsInternalBlockContent', internal_field: { - data: { - attributes: { - content: { - contentBlock: [ - { - kennisartikelCategorie: '', - content: '

Inleiding - interne kop

Inhoud

', - }, - ], - id: '1', - uuid: 'C8C15769-A9F2-4F2C-89DB-544B98E91D2D', + id: '3', + contact_information_internal: null, + contact_information_public: null, + content: { + id: '3', + uuid: 'C8C15769-A9F2-4F2C-89DB-544B98E91D2D', + keywords: 'test,desk memo', + contentBlock: [ + { + kennisartikelCategorie: null, + content: '

Inleiding - interne kop

Inhoud

', }, - title: 'Test Interne Content', - }, - id: '1', + ], }, + title: 'Test Interne Content', }, + id: '3', }, ]; expect(getDeskMemo(sections)).toBe('

Inleiding - interne kop

Inhoud

'); diff --git a/apps/overige-objecten-api/src/utils/getDeskMemo.ts b/apps/overige-objecten-api/src/utils/getDeskMemo.ts index d0a6756b2..56ebcb324 100644 --- a/apps/overige-objecten-api/src/utils/getDeskMemo.ts +++ b/apps/overige-objecten-api/src/utils/getDeskMemo.ts @@ -1,12 +1,12 @@ +import { Sections, ContentBlockSimple } from '../shared-types'; + import { concatenateFieldValues } from './concatenateFieldValues'; -import type { Section } from '../strapi-product-type'; +import { createComponentGuard } from './createComponentGuard'; -export const getDeskMemo = (sections: Section[], contactInformation?: { id: string; content: string }[]) => { - const internalBlock = sections.find(({ component }) => component === 'ComponentComponentsInternalBlockContent'); - const contentBlock = [ - ...(internalBlock?.internal_field?.data?.attributes?.content?.contentBlock ?? []), - ...(contactInformation ?? []), - ]; +export const getDeskMemo = (sections?: Sections | null, contactInformation?: ContentBlockSimple[]) => { + const isInternalBlock = createComponentGuard('ComponentComponentsInternalBlockContent'); + const internalBlock = sections?.find(isInternalBlock); + const contentBlock = [...(internalBlock?.internal_field?.content?.contentBlock ?? []), ...(contactInformation ?? [])]; - return contentBlock ? concatenateFieldValues(contentBlock) : ''; + return contentBlock.length > 0 ? concatenateFieldValues(contentBlock) : ''; }; diff --git a/apps/overige-objecten-api/src/utils/getPaginatedResponse.ts b/apps/overige-objecten-api/src/utils/getPaginatedResponse.ts index 8b324ab54..eb2ac7dc5 100644 --- a/apps/overige-objecten-api/src/utils/getPaginatedResponse.ts +++ b/apps/overige-objecten-api/src/utils/getPaginatedResponse.ts @@ -1,5 +1,4 @@ import type { Request } from 'express'; -import type { Products, VACSData } from '../strapi-product-type'; export type PaginationType = { page?: number; @@ -10,29 +9,27 @@ export type PaginationType = { previous?: string | null; }; +type ConnectionResponse = { page: number; pageSize: number; pageCount: number; total: number }; + export const getPaginatedResponse = async ( req: Request, - strapiResponse: Products | VACSData, + strapiResponse: ConnectionResponse | null | undefined, ): Promise => { - if (!strapiResponse?.meta?.pagination) return {}; - // Get pagination info from Strapi response - const { page, pageSize, pageCount, total } = strapiResponse.meta.pagination; + const pageInfo = (strapiResponse as ConnectionResponse) ?? {}; + if (!pageInfo) return {}; - // Get current URL and base path - const baseUrl = `${req.protocol}://${req.get('host')}${req.baseUrl}${req.path}`; + const { page, pageSize, pageCount, total } = pageInfo; - // Get existing query parameters - const queryParams = new URLSearchParams(req.query as any); + const baseUrl = `${req.protocol}://${req.get('host')}${req.baseUrl}${req.path}`; + const queryParams = new URLSearchParams(req.query as Record); - // Generate URL with updated page const generatePageUrl = (pageNum: number) => { queryParams.set('page', pageNum.toString()); queryParams.set('pageSize', pageSize.toString()); return `${baseUrl}?${queryParams.toString()}`; }; - // Build pagination object - const pagination = { + return { page, pageSize, count: pageCount, @@ -40,8 +37,4 @@ export const getPaginatedResponse = async ( next: page < pageCount ? generatePageUrl(page + 1) : null, previous: page > 1 ? generatePageUrl(page - 1) : null, }; - - return { - ...pagination, - }; }; diff --git a/apps/overige-objecten-api/src/utils/getVacData.test.ts b/apps/overige-objecten-api/src/utils/getVacData.test.ts index b7b7f2a89..d518c0036 100644 --- a/apps/overige-objecten-api/src/utils/getVacData.test.ts +++ b/apps/overige-objecten-api/src/utils/getVacData.test.ts @@ -1,184 +1,59 @@ +import { getStrapiVacData } from '../__mocks__'; + import { getVacData } from './getVacData'; -import type { VACSData } from '../strapi-product-type'; -describe('getVacData', () => { - const serverURL = 'http://localhost:4001'; - const vacSchemaURL = 'http://localhost:4001/api/v2/objecttypes/vac'; +const serverURL = 'http://localhost:4001'; +const vacSchemaURL = 'http://localhost:4001/api/v2/objecttypes/vac'; +describe('getVacData', () => { it('should include contact_information_internal in antwoord when available', () => { - const mockData: VACSData = { - vacs: { - data: [ - { - id: '1', - attributes: { - createdAt: '2024-11-05T16:03:50.975Z', - updatedAt: '2024-11-05T16:03:50.975Z', - title: 'Test VAC', - contact_information_internal: { - data: [ - { - attributes: { - contentBlock: [ - { - id: '1', - content: 'Contact info: 123-456789', - }, - ], - }, - }, - { - attributes: { - contentBlock: [ - { - id: '2', - content: ' ', - }, - ], - }, - }, - ], - }, - vac: { - uuid: 'test-uuid', - antwoord: [ - { - content: 'Main answer content', - kennisartikelCategorie: undefined, - }, - ], - status: 'actief', - doelgroep: 'eu-burger', - afdelingen: [], - toelichting: undefined, - keywords: 'test', - }, - contact_information_public: { - data: { - attributes: { - contentBlock: [], - }, - }, - }, + const { data } = getStrapiVacData({ + contact_information_internal: [ + { + contentBlock: [ + { + id: '1', + content: 'Contact info: 123-456789', }, - }, - ], - }, - }; - - const result = getVacData({ data: mockData, serverURL, vacSchemaURL }); - - expect(result).toHaveLength(1); - expect(result[0].record.data.antwoord).toContain('Main answer content'); - expect(result[0].record.data.antwoord).toContain('Contact info: 123-456789'); + ], + }, + ], + }); + const [result] = getVacData({ data, serverURL, vacSchemaURL }); + expect(result.record.data.antwoord).toContain('U moet een afspraak maken'); + expect(result.record.data.antwoord).toContain('Contact info: 123-456789'); }); it('should handle null contact_information_internal gracefully', () => { - const mockData: VACSData = { - vacs: { - data: [ - { - id: '1', - attributes: { - createdAt: '2024-11-05T16:03:50.975Z', - updatedAt: '2024-11-05T16:03:50.975Z', - title: 'Test VAC', - contact_information_internal: { - data: [], - }, - vac: { - uuid: 'test-uuid', - antwoord: [ - { - content: 'Main answer content', - kennisartikelCategorie: '', - }, - ], - status: 'actief', - doelgroep: 'eu-bedrijf', - afdelingen: [], - toelichting: undefined, - keywords: 'test', - }, - contact_information_public: { - data: { - attributes: { - contentBlock: [], - }, - }, - }, - }, - }, - ], - }, - }; + const { data } = getStrapiVacData(); + const [result] = getVacData({ data, serverURL, vacSchemaURL }); - const result = getVacData({ data: mockData, serverURL, vacSchemaURL }); - - expect(result).toHaveLength(1); - expect(result[0].record.data.antwoord).toBe('Main answer content'); + expect(result.record.data.antwoord).toContain('U moet een afspraak maken'); }); it('should include contact_information_public in antwoord when available', () => { - const mockData: VACSData = { - vacs: { - data: [ + const { data } = getStrapiVacData({ + contact_information_public: { + contentBlock: [ { id: '1', - attributes: { - createdAt: '2024-11-05T16:03:50.975Z', - updatedAt: '2024-11-05T16:03:50.975Z', - title: 'Test VAC', - contact_information_internal: { - data: [], - }, - vac: { - uuid: 'test-uuid', - antwoord: [ - { - content: 'Main answer content', - kennisartikelCategorie: undefined, - }, - ], - status: 'actief', - doelgroep: 'eu-burger', - afdelingen: [], - toelichting: undefined, - keywords: 'test', - }, - contact_information_public: { - data: { - attributes: { - contentBlock: [ - { - id: '1', - content: 'Public contact: info@example.com', - }, - ], - }, - }, - }, - }, + content: 'Public contact: info@example.com', }, ], }, - }; - - const result = getVacData({ data: mockData, serverURL, vacSchemaURL }); + }); + const [result] = getVacData({ data, serverURL, vacSchemaURL }); - expect(result).toHaveLength(1); - expect(result[0].record.data.antwoord).toContain('Main answer content'); - expect(result[0].record.data.antwoord).toContain('info@example.com'); + expect(result.record.data.antwoord).toContain('U moet een afspraak maken'); + expect(result.record.data.antwoord).toContain('info@example.com'); }); it('should return empty array when no VAC data', () => { - const mockData: VACSData = { - vacs: { - data: [], - }, - }; - - const result = getVacData({ data: mockData, serverURL, vacSchemaURL }); + const result = getVacData({ + data: { vacs_connection: { nodes: [], pageInfo: { total: 0, page: 1, pageSize: 1, pageCount: 0 } } }, + serverURL, + vacSchemaURL, + }); expect(result).toEqual([]); }); diff --git a/apps/overige-objecten-api/src/utils/getVacData.ts b/apps/overige-objecten-api/src/utils/getVacData.ts index b7229b75a..aa7a077d5 100644 --- a/apps/overige-objecten-api/src/utils/getVacData.ts +++ b/apps/overige-objecten-api/src/utils/getVacData.ts @@ -1,74 +1,89 @@ import kebabCase from 'lodash.kebabcase'; + +import type { GetAllVacItemsQuery } from '../../gql/graphql'; +import { components } from '../types/openapi'; + import { concatenateFieldValues } from './concatenateFieldValues'; import { generateKeywords } from './generateKeywords'; -import type { Antwoord, DataVacItem, Doelgroep, VacRecordData, VACSData } from '../strapi-product-type'; +import { uuidToIndex } from './uuidToIndex'; + +type GetKennisartikelReturnData = components['schemas']['vacObject']; export interface createVacRecordReturnTypes { index: number; startAt: string; typeVersion: number; - data: VacRecordData; + data: GetKennisartikelReturnData & { uuid: string }; geometry: null; endAt: null; registrationAt: string; } +export type VacNode = NonNullable['nodes'][number]>; +export interface VACData { + vacs_connection?: GetAllVacItemsQuery['vacs_connection'] | null; +} interface GetVacDataProps { - data: VACSData; + data: VACData; vacSchemaURL: string; serverURL: string; publicationState?: 'DRAFT' | 'PUBLISHED'; } interface MapVacItemProps extends Pick { - item: DataVacItem; + item: VacNode; publicationState?: 'DRAFT' | 'PUBLISHED'; } -const getAntwoord = (antwoord: Antwoord[]): string => (Array.isArray(antwoord) ? concatenateFieldValues(antwoord) : ''); +const getAntwoord = (antwoord: { content?: string | null }[]): string => + Array.isArray(antwoord) ? concatenateFieldValues(antwoord.map((a) => ({ content: a.content ?? '' }))) : ''; -const createVacRecord = (item: DataVacItem, vacUrl: string, antwoord: string): createVacRecordReturnTypes => ({ - index: parseInt(item.id, 10), - startAt: item.attributes.createdAt, +const createVacRecord = (item: VacNode, vacUrl: string, antwoord: string): createVacRecordReturnTypes => ({ + index: uuidToIndex(item.id ?? item?.vac?.uuid), + startAt: item.createdAt, typeVersion: 1, data: { - uuid: item.attributes.vac.uuid, - vraag: item.attributes?.title, + uuid: item.vac?.uuid ?? item.id, + vraag: item.title ?? undefined, antwoord, - status: item?.attributes?.vac?.status, - doelgroep: kebabCase(item?.attributes?.vac?.doelgroep ?? undefined) as Doelgroep, - afdelingen: item?.attributes?.vac?.afdelingen, - toelichting: item?.attributes?.vac?.toelichting, - trefwoorden: generateKeywords(item?.attributes?.vac?.keywords ?? ''), + status: (item.vac?.status?.replace('_', '-') as GetKennisartikelReturnData['status']) ?? undefined, + doelgroep: item.vac?.doelgroep + ? (kebabCase(item.vac?.doelgroep) as GetKennisartikelReturnData['doelgroep']) + : undefined, + afdelingen: item.vac?.afdelingen + ?.filter(Boolean) + .map((a) => ({ afdelingId: a!.afdelingId, afdelingNaam: a!.afdelingNaam })), + toelichting: item.vac?.toelichting ?? '', + trefwoorden: generateKeywords(item.vac?.keywords ?? ''), url: vacUrl, gerelateerdeVACs: - item?.attributes?.relatedVACs?.data?.map((vac) => ({ - VAC: new URL(`/api/v2/objects/${vac.attributes.vac.uuid}`, vacUrl).href, + item.relatedVACs?.map((vac) => ({ + VAC: new URL(`/api/v2/objects/${vac?.vac?.uuid}`, vacUrl).href, })) ?? [], gerelateerdeProducten: - item?.attributes?.relatedProducts?.data?.map((product) => ({ - product: new URL(`/api/v2/objects/${product.attributes.uuid}`, vacUrl).href, + item.relatedProducts?.map((product) => ({ + product: new URL(`/api/v2/objects/${product?.uuid}`, vacUrl).href, + productNaam: product?.title ?? '', })) ?? [], }, geometry: null, endAt: null, - registrationAt: item.attributes.createdAt, + registrationAt: item.createdAt, }); const mapVacItem = ({ item, serverURL, vacSchemaURL, publicationState }: MapVacItemProps) => { - const vacUrl = new URL(`/api/v2/objects/${item.attributes.vac.uuid}`, serverURL).href; + const vacUrl = new URL(`/api/v2/objects/${item.vac?.uuid}`, serverURL).href; - const mergedContactInformationInternal = item.attributes?.contact_information_internal.data?.flatMap( - (item) => item?.attributes?.contentBlock, - ); + const mergedContactInformationInternal = item.contact_information_internal?.flatMap((ci) => ci?.contentBlock ?? []); const antwoord = getAntwoord([ - ...(item.attributes.vac.antwoord ?? []), - ...(item.attributes?.contact_information_public?.data?.attributes?.contentBlock ?? []), - ...(mergedContactInformationInternal ?? []), - ]); + ...(item.vac?.antwoord?.filter(Boolean) ?? []), + ...(item.contact_information_public?.contentBlock?.filter(Boolean) ?? []), + ...(mergedContactInformationInternal?.filter(Boolean) ?? []), + ] as { content?: string | null }[]); + return { - uuid: item.attributes.vac.uuid, + uuid: item.vac?.uuid, type: vacSchemaURL, url: vacUrl, record: createVacRecord(item, vacUrl, antwoord), @@ -77,6 +92,7 @@ const mapVacItem = ({ item, serverURL, vacSchemaURL, publicationState }: MapVacI }; export const getVacData = ({ data, vacSchemaURL, serverURL, publicationState }: GetVacDataProps) => { - if (!data?.vacs?.data?.length) return []; - return data.vacs.data.map((item) => mapVacItem({ item, serverURL, vacSchemaURL, publicationState })); + const nodes = data?.vacs_connection?.nodes; + if (!nodes?.length) return []; + return nodes.map((item) => mapVacItem({ item: item as VacNode, serverURL, vacSchemaURL, publicationState })); }; diff --git a/apps/overige-objecten-api/src/utils/getVerantwoordelijkeOrganisatie.ts b/apps/overige-objecten-api/src/utils/getVerantwoordelijkeOrganisatie.ts index d959639d5..b60fe9b0b 100644 --- a/apps/overige-objecten-api/src/utils/getVerantwoordelijkeOrganisatie.ts +++ b/apps/overige-objecten-api/src/utils/getVerantwoordelijkeOrganisatie.ts @@ -1,4 +1,4 @@ -import { components } from '../types/openapi'; +import type { components } from '../types/openapi'; export type ReturnedGetVerantwoordelijkeOrganisatieValue = components['schemas']['kennisartikel']['verantwoordelijkeOrganisatie']; diff --git a/apps/overige-objecten-api/src/utils/getVertalingen.test.ts b/apps/overige-objecten-api/src/utils/getVertalingen.test.ts index 3c25f0c33..0cb26af7a 100644 --- a/apps/overige-objecten-api/src/utils/getVertalingen.test.ts +++ b/apps/overige-objecten-api/src/utils/getVertalingen.test.ts @@ -5,69 +5,18 @@ describe('getVertalingen', () => { const result = getVertalingen({ bothContentBlock: { content: 'content' }, deskMemo: 'deskMemo', - priceData: [{ uuid: '01C87F1D-2F84-4768-98D9-90BA10263B1D', currency: 'EUR', label: 'label', value: '10' }], - attributes: { - title: 'title', - slug: 'test', - uuid: 'uuid', - createdAt: 'createdAt', - metaTags: { - keymatch: 'test', - title: 'title', - description: 'description', - }, - locale: 'nl', - updatedAt: 'updatedAt', - sections: [], - kennisartikelMetadata: { - afdelingen: [ - { - afdelingId: '7A6703DD-A49D-4D20-B98A-E0D807EBB4CD', - afdelingNaam: 'Demo afdeling', - }, - ], - doelgroep: 'eu-bedrijf', - productAanwezig: false, - productValtOnder: null, - upnUri: 'https://example.com', - uuid: '', - verantwoordelijkeOrganisatie: { - owmsIdentifier: 'http://standaarden.overheid.nl/owms/terms/Utrecht_(gemeente)', - owmsPrefLabel: 'Gemeente Utrecht', - owmsEndDate: '2025-02-10T23:00:00.000Z', - }, - }, - kennisartikel: { - data: { - attributes: { - internalSections: [], - }, - }, - }, - vac: { - data: [], - }, - price: { - data: { - attributes: { - price: [], - }, - }, - }, - additional_information: { - data: { - attributes: { - title: '', - content: { - id: '', - uuid: '', - contentBlock: [], - }, - }, - id: '1', - }, - }, - }, + priceData: [ + { + uuid: '01C87F1D-2F84-4768-98D9-90BA10263B1D', + currency: 'EUR', + label: 'label', + value: 10, + id: '1', + }, + ], + locale: 'nl', + title: 'title', + updatedAt: 'updatedAt', trefwoorden: [{ trefwoord: 'trefwoord' }], }); expect(result).toEqual([ @@ -87,68 +36,9 @@ describe('getVertalingen', () => { const result = getVertalingen({ bothContentBlock: { content: 'content' }, deskMemo: 'deskMemo', - attributes: { - title: 'title', - slug: 'test', - uuid: 'uuid', - createdAt: 'createdAt', - metaTags: { - keymatch: 'test', - title: 'title', - description: 'description', - }, - locale: 'nl', - updatedAt: 'updatedAt', - sections: [], - kennisartikelMetadata: { - afdelingen: [ - { - afdelingId: '7A6703DD-A49D-4D20-B98A-E0D807EBB4CD', - afdelingNaam: 'Demo afdeling', - }, - ], - doelgroep: 'eu-bedrijf', - productAanwezig: false, - productValtOnder: null, - upnUri: 'https://example.com', - uuid: '', - verantwoordelijkeOrganisatie: { - owmsIdentifier: 'http://standaarden.overheid.nl/owms/terms/Utrecht_(gemeente)', - owmsPrefLabel: 'Gemeente Utrecht', - owmsEndDate: '2025-02-10T23:00:00.000Z', - }, - }, - kennisartikel: { - data: { - attributes: { - internalSections: [], - }, - }, - }, - vac: { - data: [], - }, - price: { - data: { - attributes: { - price: [], - }, - }, - }, - additional_information: { - data: { - attributes: { - title: '', - content: { - id: '', - uuid: '', - contentBlock: [], - }, - }, - id: '1', - }, - }, - }, + locale: 'nl', + title: 'title', + updatedAt: 'updatedAt', }); expect(result).toEqual([ { @@ -166,68 +56,9 @@ describe('getVertalingen', () => { const result = getVertalingen({ bothContentBlock: {}, deskMemo: 'deskMemo', - attributes: { - title: 'title', - slug: 'test', - uuid: 'uuid', - createdAt: 'createdAt', - metaTags: { - keymatch: 'test', - title: 'title', - description: 'description', - }, - locale: 'nl', - updatedAt: 'updatedAt', - sections: [], - kennisartikelMetadata: { - afdelingen: [ - { - afdelingId: '7A6703DD-A49D-4D20-B98A-E0D807EBB4CD', - afdelingNaam: 'Demo afdeling', - }, - ], - doelgroep: 'eu-bedrijf', - productAanwezig: false, - productValtOnder: null, - upnUri: 'https://example.com', - uuid: '', - verantwoordelijkeOrganisatie: { - owmsIdentifier: 'http://standaarden.overheid.nl/owms/terms/Utrecht_(gemeente)', - owmsPrefLabel: 'Gemeente Utrecht', - owmsEndDate: '2025-02-10T23:00:00.000Z', - }, - }, - kennisartikel: { - data: { - attributes: { - internalSections: [], - }, - }, - }, - vac: { - data: [], - }, - price: { - data: { - attributes: { - price: [], - }, - }, - }, - additional_information: { - data: { - attributes: { - title: '', - content: { - id: '', - uuid: '', - contentBlock: [], - }, - }, - id: '1', - }, - }, - }, + locale: 'nl', + title: 'title', + updatedAt: 'updatedAt', }); expect(result).toEqual([ { @@ -244,16 +75,15 @@ describe('getVertalingen', () => { const result = getVertalingen({ bothContentBlock: { content: 'content' }, deskMemo: 'deskMemo', - attributes: {} as any, }); expect(result).toEqual([ { content: 'content', deskMemo: '

deskMemo

', trefwoorden: undefined, - taal: undefined, + taal: 'nl', titel: undefined, - datumWijziging: undefined, + datumWijziging: '', }, ]); }); diff --git a/apps/overige-objecten-api/src/utils/getVertalingen.ts b/apps/overige-objecten-api/src/utils/getVertalingen.ts index 3584ee72f..7c1a19a54 100644 --- a/apps/overige-objecten-api/src/utils/getVertalingen.ts +++ b/apps/overige-objecten-api/src/utils/getVertalingen.ts @@ -1,5 +1,9 @@ +import type { PriceItem } from '../shared-types'; +import type { components } from '../types/openapi'; + import { renderMarkdownToString } from './renderMarkdownToString'; -import type { Attributes, Price } from '../strapi-product-type'; + +type Vertaling = NonNullable[number]; type Trefwoorden = { trefwoord: string; @@ -10,8 +14,10 @@ type BothContentBlock = { export interface GetVertalingenProps { bothContentBlock: BothContentBlock; deskMemo: string; - priceData?: Price[]; - attributes: Attributes; + priceData?: PriceItem[]; + locale?: string; + title?: string; + updatedAt?: string; trefwoorden?: Trefwoorden[]; } @@ -19,15 +25,17 @@ export const getVertalingen = ({ bothContentBlock, deskMemo, priceData, - attributes, + locale, + title, + updatedAt, trefwoorden, -}: GetVertalingenProps) => [ +}: GetVertalingenProps): Vertaling[] => [ { ...bothContentBlock, deskMemo: renderMarkdownToString({ priceData, children: deskMemo }), trefwoorden, - taal: attributes?.locale, - titel: attributes?.title, - datumWijziging: attributes.updatedAt, + taal: (locale ?? 'nl') as 'nl' | 'en', + titel: title, + datumWijziging: updatedAt ?? '', }, ]; diff --git a/apps/overige-objecten-api/src/utils/index.ts b/apps/overige-objecten-api/src/utils/index.ts index e0b4935b3..283995a38 100644 --- a/apps/overige-objecten-api/src/utils/index.ts +++ b/apps/overige-objecten-api/src/utils/index.ts @@ -5,6 +5,7 @@ export { convertImageToHTML } from './convertImageToHTML'; export { convertLogoButtonToHTML } from './convertLogoButtonToHTML'; export { convertMultiColumnsButtonToHTML } from './convertMultiColumnsButtonToHTML'; export { convertSpotlightToHTML } from './convertSpotlightToHTML'; +export { createComponentGuard } from './createComponentGuard'; export { createHTMLFiles } from './createHTMLFiles'; export { ErrorHandler } from './errorHandler'; export { generateKennisartikelObject } from './generateKennisartikelObject'; @@ -21,7 +22,9 @@ export { normalizeCategories } from './normalizeCategories'; export { processData } from './processData'; export { readFile } from './readFile'; export { renderMarkdownToString } from './renderMarkdownToString'; +export { resolveDoc } from './resolveDoc'; export { sanitizeHTML } from './sanitizeHTML'; +export { uuidToIndex } from './uuidToIndex'; export type { CombineSimilarCategoriesProps } from './combineSimilarCategories'; export type { ConcatenateFieldValuesDataTypes } from './concatenateFieldValues'; export type { PaginationType } from './getPaginatedResponse'; diff --git a/apps/overige-objecten-api/src/utils/normalizeCategories.test.ts b/apps/overige-objecten-api/src/utils/normalizeCategories.test.ts index 868434929..5a36980ca 100644 --- a/apps/overige-objecten-api/src/utils/normalizeCategories.test.ts +++ b/apps/overige-objecten-api/src/utils/normalizeCategories.test.ts @@ -1,3 +1,5 @@ +import { PageSection } from '../shared-types'; + import { normalizeCategories } from './normalizeCategories'; describe('normalizeCategories', () => { @@ -13,7 +15,7 @@ describe('normalizeCategories', () => { categorie2: 'aanvraag', content: '

Aanvraag content

', }, - ]; + ] as unknown as PageSection[]; const expectedOutput = [ { @@ -26,14 +28,14 @@ describe('normalizeCategories', () => { categorie: 'aanvraag', content: '

Aanvraag content

', }, - ]; + ] as PageSection[]; const output = normalizeCategories(input); expect(output).toEqual(expectedOutput); }); it('should handle empty input', () => { - const input: any[] = []; - const expectedOutput: any[] = []; + const input: PageSection[] = []; + const expectedOutput: PageSection[] = []; const output = normalizeCategories(input); expect(output).toEqual(expectedOutput); }); @@ -47,7 +49,7 @@ describe('normalizeCategories', () => { id: '2', content: '

Aanvraag content

', }, - ]; + ] as PageSection[]; const expectedOutput = [ { @@ -58,7 +60,7 @@ describe('normalizeCategories', () => { id: '2', content: '

Aanvraag content

', }, - ]; + ] as PageSection[]; const output = normalizeCategories(input); expect(output).toEqual(expectedOutput); diff --git a/apps/overige-objecten-api/src/utils/normalizeCategories.ts b/apps/overige-objecten-api/src/utils/normalizeCategories.ts index 3587e496a..f9c2d92a6 100644 --- a/apps/overige-objecten-api/src/utils/normalizeCategories.ts +++ b/apps/overige-objecten-api/src/utils/normalizeCategories.ts @@ -1,13 +1,16 @@ -export const normalizeCategories = (data: any) => { - return data.map((item: any) => { - // Find the key that starts with 'categorie' - const categorieKey = Object.keys(item).find((key) => key.startsWith('categorie')); +import { PageData, PageSection } from '../shared-types'; + +export const normalizeCategories = (data: PageData): PageData => { + return data.map((item): PageSection => { + // Cast locally just for dynamic key access — outer types remain strict + const record = item as unknown as Record; + const categorieKey = Object.keys(record).find((key) => key.startsWith('categorie')); + if (categorieKey) { - const { [categorieKey]: categorieValue, ...rest } = item; - return { ...rest, categorie: categorieValue }; + const { [categorieKey]: categorieValue, ...rest } = record; + return { ...rest, categorie: categorieValue } as PageSection; } - // Return the item unchanged if no 'categorieX' field is found return item; }); }; diff --git a/apps/overige-objecten-api/src/utils/processData.test.ts b/apps/overige-objecten-api/src/utils/processData.test.ts index ec2622d6d..90e9a566b 100644 --- a/apps/overige-objecten-api/src/utils/processData.test.ts +++ b/apps/overige-objecten-api/src/utils/processData.test.ts @@ -1,6 +1,17 @@ import { JSDOM } from 'jsdom'; + +import { + FaqComponent, + PriceItem, + UtrechtAccordion, + UtrechtImage, + UtrechtLink, + UtrechtLogoButton, + UtrechtRichText, + UtrechtSpotlight, +} from '../shared-types'; + import { processData } from './processData'; -import type { Price } from '../strapi-product-type'; describe('processData', () => { describe('ComponentComponentsUtrechtRichText', () => { @@ -13,17 +24,17 @@ describe('processData', () => { kennisartikelCategorie: 'inleiding', component: 'ComponentComponentsUtrechtRichText', categorie: 'inleiding', - }, + } as UtrechtRichText, ]; const result = processData({ data }); const outputHtml = result[0].tekst; const dom = new JSDOM(outputHtml); - const h2Element = dom.window.document.querySelector('h2') as any; + const h2Element = dom.window.document.querySelector('h2'); expect(h2Element).not.toBeNull(); - expect(h2Element.textContent).toBe('Contentblok'); - const pElement = dom.window.document.querySelector('p') as any; + expect(h2Element?.textContent).toBe('Contentblok'); + const pElement = dom.window.document.querySelector('p'); expect(pElement).not.toBeNull(); - expect(pElement.textContent).toBe('Lorem Ipsum is simply dummy text of the printing and typesetting industry.'); + expect(pElement?.textContent).toBe('Lorem Ipsum is simply dummy text of the printing and typesetting industry.'); }); it('should render price widget with the correct category when it provided', () => { const data = [ @@ -34,15 +45,16 @@ describe('processData', () => { kennisartikelCategorie: 'kosten', component: 'ComponentComponentsUtrechtRichText', categorie: 'kosten', - }, + } as UtrechtRichText, ]; - const priceData: Price[] = [ + const priceData = [ { currency: 'EUR', + id: '1', label: 'Example-1', uuid: '7395d0a3-c3b3-4951-9fd5-1c8e654ba391', - value: '10', - }, + value: 10, + } as PriceItem, ]; const result = processData({ data, priceData }); @@ -50,11 +62,11 @@ describe('processData', () => { // Parse the HTML using JSDOM const dom = new JSDOM(outputHtml); - const spanElement = dom.window.document.querySelector('span') as any; + const spanElement = dom.window.document.querySelector('span'); expect(spanElement).not.toBeNull(); - expect(spanElement.getAttribute('dataStrapiCategory')).toBe('price'); - expect(spanElement.getAttribute('dataStrapiIdref')).toBe('7395d0a3-c3b3-4951-9fd5-1c8e654ba391'); - expect(spanElement.textContent.trim()).toMatch(/€\s?10,00/); + expect(spanElement?.getAttribute('dataStrapiCategory')).toBe('price'); + expect(spanElement?.getAttribute('dataStrapiIdref')).toBe('7395d0a3-c3b3-4951-9fd5-1c8e654ba391'); + expect(spanElement?.textContent.trim()).toMatch(/€\s?10,00/); }); it('should render Embed YouTube when provided', () => { const data = [ @@ -63,21 +75,21 @@ describe('processData', () => { categorie: 'inleiding', content: '
', - }, + } as UtrechtRichText, ]; const result = processData({ data }); const outputHtml = result[0].tekst; // Parse the HTML using JSDOM const dom = new JSDOM(outputHtml); - const iframeElement = dom.window.document.querySelector('iframe') as HTMLIFrameElement; + const iframeElement = dom.window.document.querySelector('iframe'); expect(iframeElement).not.toBeNull(); - expect(iframeElement.getAttribute('src')).toBe( + expect(iframeElement?.getAttribute('src')).toBe( 'https://www.youtube.com/embed/OEIplofZ0bQ?disablekb=1&loop=false', ); - expect(iframeElement.getAttribute('aria-label')).toBe('Test'); - expect(iframeElement.getAttribute('width')).toBe('640'); - expect(iframeElement.getAttribute('height')).toBe('480'); + expect(iframeElement?.getAttribute('aria-label')).toBe('Test'); + expect(iframeElement?.getAttribute('width')).toBe('640'); + expect(iframeElement?.getAttribute('height')).toBe('480'); }); it('should render when provided', () => { const data = [ @@ -85,17 +97,17 @@ describe('processData', () => { component: 'ComponentComponentsUtrechtRichText', categorie: 'inleiding', content: '

Example image

', - }, + } as UtrechtRichText, ]; const result = processData({ data }); const outputHtml = result[0].tekst; // Parse the HTML using JSDOM const dom = new JSDOM(outputHtml); - const imgElement = dom.window.document.querySelector('img') as HTMLImageElement; + const imgElement = dom.window.document.querySelector('img'); expect(imgElement).not.toBeNull(); - expect(imgElement.getAttribute('src')).toBe('https://example.com/image.jpg'); - expect(imgElement.getAttribute('alt')).toBe('Example image'); + expect(imgElement?.getAttribute('src')).toBe('https://example.com/image.jpg'); + expect(imgElement?.getAttribute('alt')).toBe('Example image'); }); }); describe('ComponentComponentsUtrechtLogoButton', () => { @@ -105,21 +117,22 @@ describe('processData', () => { component: 'ComponentComponentsUtrechtLogoButton', appearance: 'primary_action_button', href: 'https://example.com', - openFormsEmbed: null, + label: null, + openFormsEmbed: undefined, textContent: 'Inloggen me DigiD', categorie: 'contact', - }, + } as UtrechtLogoButton, ]; const result = processData({ data }); const outputHtml = result[0].contact; // Parse the HTML using JSDOM const dom = new JSDOM(outputHtml); - const anchorElement = dom.window.document.querySelector('a') as HTMLAnchorElement; + const anchorElement = dom.window.document.querySelector('a'); expect(anchorElement).not.toBeNull(); - expect(anchorElement.getAttribute('href')).toBe('https://example.com'); - expect(anchorElement.textContent).toBe('Inloggen me DigiD'); - const spanElement = dom.window.document.querySelector('span') as HTMLSpanElement; + expect(anchorElement?.getAttribute('href')).toBe('https://example.com'); + expect(anchorElement?.textContent).toBe('Inloggen me DigiD'); + const spanElement = dom.window.document.querySelector('span'); expect(spanElement).toBeNull(); }); it('renders the logo button with a logo when a logo is provided', () => { @@ -130,24 +143,24 @@ describe('processData', () => { href: 'https://example.com', label: 'DigiD', logo: 'digid', - openFormsEmbed: null, + openFormsEmbed: undefined, textContent: 'Inloggen me DigiD', categorie: 'contact', - }, + } as UtrechtLogoButton, ]; const result = processData({ data }); const outputHtml = result[0].contact; // Parse the HTML using JSDOM const dom = new JSDOM(outputHtml); - const anchorElement = dom.window.document.querySelector('a') as HTMLAnchorElement; + const anchorElement = dom.window.document.querySelector('a'); expect(anchorElement).not.toBeNull(); - expect(anchorElement.getAttribute('href')).toBe('https://example.com'); - const spanElement = dom.window.document.querySelector('span') as HTMLSpanElement; + expect(anchorElement?.getAttribute('href')).toBe('https://example.com'); + const spanElement = dom.window.document.querySelector('span'); expect(spanElement).not.toBeNull(); - expect(spanElement.textContent).toBe('DigiD'); - const h3Element = dom.window.document.querySelector('h3') as HTMLHeadingElement; + expect(spanElement?.textContent).toBe('DigiD'); + const h3Element = dom.window.document.querySelector('h3'); expect(h3Element).not.toBeNull(); - expect(h3Element.textContent).toBe('DigiD'); + expect(h3Element?.textContent).toBe('DigiD'); }); it('should render logo button with openFormsEmbed when the value is provided', () => { const data = [ @@ -161,19 +174,19 @@ describe('processData', () => { 'uuid=7e6cc160-a3b5-4cca-9d88-f8a361df2e3f&slug=paspoort-aanvraag&label=Paspoort+aanvraag&embed_url=http%3A%2F%2Flocalhost%3A3000', textContent: null, categorie: 'contact', - }, + } as UtrechtLogoButton, ]; const result = processData({ data }); const outputHtml = result[0].contact; // Parse the HTML using JSDOM const dom = new JSDOM(outputHtml); - const anchorElement = dom.window.document.querySelector('a') as HTMLAnchorElement; + const anchorElement = dom.window.document.querySelector('a'); expect(anchorElement).not.toBeNull(); - expect(anchorElement.getAttribute('href')).toBe('http://localhost:3000/form/paspoort-aanvraag'); - expect(anchorElement.textContent).toBe('Paspoort aanvraag'); - const spanElement = dom.window.document.querySelector('span') as HTMLSpanElement; + expect(anchorElement?.getAttribute('href')).toBe('http://localhost:3000/form/paspoort-aanvraag'); + expect(anchorElement?.textContent).toBe('Paspoort aanvraag'); + const spanElement = dom.window.document.querySelector('span'); expect(spanElement).not.toBeNull(); - expect(spanElement.textContent).toBe('DigiD'); + expect(spanElement?.textContent).toBe('DigiD'); }); }); @@ -192,13 +205,13 @@ describe('processData', () => { href: 'https://example.com', label: 'DigiD', logo: 'digid', - openFormsEmbed: null, + openFormsEmbed: undefined, textContent: 'Inloggen me DigiD', categorie: 'bewijs', }, ], categorie: 'bewijs', - }, + } as UtrechtSpotlight, ]; const result = processData({ data }); const outputHtml = result[0].bewijs; @@ -206,12 +219,12 @@ describe('processData', () => { const dom = new JSDOM(outputHtml); const sectionElement = dom.window.document.querySelector('figure'); expect(sectionElement).not.toBeNull(); - const h2Element = dom.window.document.querySelector('h2') as HTMLHeadingElement; + const h2Element = dom.window.document.querySelector('h2'); expect(h2Element).not.toBeNull(); - expect(h2Element.textContent).toBe('Spotlightblok '); - const pElement = dom.window.document.querySelector('p') as HTMLParagraphElement; + expect(h2Element?.textContent).toBe('Spotlightblok '); + const pElement = dom.window.document.querySelector('p'); expect(pElement).not.toBeNull(); - expect(pElement.textContent).toBe('Lorem Ipsum is simply dummy text of the printing and typesetting industry.'); + expect(pElement?.textContent).toBe('Lorem Ipsum is simply dummy text of the printing and typesetting industry.'); }); it('should render spotlight component with logo button', () => { const data = [ @@ -227,13 +240,13 @@ describe('processData', () => { href: 'https://example.com', label: 'DigiD', logo: 'digid', - openFormsEmbed: null, + openFormsEmbed: undefined, textContent: 'Inloggen me DigiD', categorie: 'bewijs', }, ], categorie: 'bewijs', - }, + } as UtrechtSpotlight, ]; const result = processData({ data }); const outputHtml = result[0].bewijs; @@ -241,18 +254,18 @@ describe('processData', () => { const dom = new JSDOM(outputHtml); const sectionElement = dom.window.document.querySelector('figure'); expect(sectionElement).not.toBeNull(); - const h2Element = dom.window.document.querySelector('h2') as HTMLHeadingElement; + const h2Element = dom.window.document.querySelector('h2'); expect(h2Element).not.toBeNull(); - expect(h2Element.textContent).toBe('Spotlightblok '); - const pElement = dom.window.document.querySelector('p') as HTMLParagraphElement; + expect(h2Element?.textContent).toBe('Spotlightblok '); + const pElement = dom.window.document.querySelector('p'); expect(pElement).not.toBeNull(); - expect(pElement.textContent).toBe('Lorem Ipsum is simply dummy text of the printing and typesetting industry.'); - const spanElement = dom.window.document.querySelector('span') as HTMLSpanElement; + expect(pElement?.textContent).toBe('Lorem Ipsum is simply dummy text of the printing and typesetting industry.'); + const spanElement = dom.window.document.querySelector('span'); expect(spanElement).not.toBeNull(); - expect(spanElement.textContent).toBe('DigiD'); - const aElement = dom.window.document.querySelector('a') as HTMLAnchorElement; + expect(spanElement?.textContent).toBe('DigiD'); + const aElement = dom.window.document.querySelector('a'); expect(aElement).not.toBeNull(); - expect(aElement.textContent).toBe('Inloggen me DigiD'); + expect(aElement?.textContent).toBe('Inloggen me DigiD'); }); }); @@ -261,30 +274,26 @@ describe('processData', () => { { component: 'ComponentComponentsUtrechtImage', imageData: { - data: { - attributes: { - name: 'alex-dudar-5k_nosY4vIQ-unsplash.jpg', - alternativeText: 'Test Alternative text', - caption: null, - width: 1920, - height: 2856, - url: '/uploads/alex_dudar_5k_nos_Y4v_IQ_unsplash_0a859bed10.jpg', - }, - }, + name: 'alex-dudar-5k_nosY4vIQ-unsplash.jpg', + alternativeText: 'Test Alternative text', + caption: null, + width: 1920, + height: 2856, + url: '/uploads/alex_dudar_5k_nos_Y4v_IQ_unsplash_0a859bed10.jpg', }, categorie: 'contact', - }, + } as UtrechtImage, ]; process.env.STRAPI_PRIVATE_URL = 'http://example.com'; const result = processData({ data }); const outputHtml = result[0].contact; const dom = new JSDOM(outputHtml); - const imgElement = dom.window.document.querySelector('img') as HTMLImageElement; + const imgElement = dom.window.document.querySelector('img'); expect(imgElement).not.toBeNull(); - expect(imgElement.getAttribute('src')).toBe( + expect(imgElement?.getAttribute('src')).toBe( 'http://example.com/uploads/alex_dudar_5k_nos_Y4v_IQ_unsplash_0a859bed10.jpg', ); - expect(imgElement.getAttribute('alt')).toBe('Test Alternative text'); + expect(imgElement?.getAttribute('alt')).toBe('Test Alternative text'); }); it('should process ComponentComponentsFaq component', () => { @@ -292,22 +301,18 @@ describe('processData', () => { { component: 'ComponentComponentsFaq', pdc_faq: { - data: { - attributes: { - title: 'Demo FAQ ', - faq: [ - { - body: '

FAQ Inhoud

', - headingLevel: 2, - id: 1, - label: 'FAQ Title', - }, - ], + title: 'Demo FAQ ', + faq: [ + { + body: '

FAQ Inhoud

', + headingLevel: 2, + id: '1', + label: 'FAQ Title', }, - }, + ], }, categorie: 'bijzonderheden', - }, + } as FaqComponent, ]; const result = processData({ data }); const outputHtml = result[0].notice; @@ -333,17 +338,17 @@ describe('processData', () => { textContent: 'Click here', icon: 'arrow', categorie: 'wat_te_doen_bij_geen_reactie', - }, + } as UtrechtLink, ]; const result = processData({ data }); const outputHtml = result[0].wtdBijGeenReactie; const dom = new JSDOM(outputHtml); - const aElement = dom.window.document.querySelector('a') as HTMLAnchorElement; + const aElement = dom.window.document.querySelector('a'); expect(aElement).not.toBeNull(); - expect(aElement.getAttribute('href')).toBe('https://example.com'); - expect(aElement.textContent).toBe('Click here'); - expect(aElement.getAttribute('dir')).toBe(null); - expect(aElement.getAttribute('lang')).toBe(null); + expect(aElement?.getAttribute('href')).toBe('https://example.com'); + expect(aElement?.textContent).toBe('Click here'); + expect(aElement?.getAttribute('dir')).toBe(null); + expect(aElement?.getAttribute('lang')).toBe(null); }); it('should render anchor tag from right to left when the language is arabic', () => { const data = [ @@ -353,17 +358,17 @@ describe('processData', () => { textContent: 'انقر هنا', language: 'ar', categorie: 'wat_te_doen_bij_geen_reactie', - }, + } as UtrechtLink, ]; const result = processData({ data }); const outputHtml = result[0].wtdBijGeenReactie; const dom = new JSDOM(outputHtml); - const aElement = dom.window.document.querySelector('a') as HTMLAnchorElement; + const aElement = dom.window.document.querySelector('a'); expect(aElement).not.toBeNull(); - expect(aElement.getAttribute('href')).toBe('https://example.com'); - expect(aElement.textContent).toBe('انقر هنا'); - expect(aElement.getAttribute('dir')).toBe('rtl'); - expect(aElement.getAttribute('lang')).toBe('ar'); + expect(aElement?.getAttribute('href')).toBe('https://example.com'); + expect(aElement?.textContent).toBe('انقر هنا'); + expect(aElement?.getAttribute('dir')).toBe('rtl'); + expect(aElement?.getAttribute('lang')).toBe('ar'); }); }); describe('ComponentComponentsUtrechtAccordion', () => { @@ -384,7 +389,7 @@ describe('processData', () => { }, ], categorie: 'voorwaarden', - }, + } as UtrechtAccordion, ]; const result = processData({ data }); const outputHtml = result[0].vereisten; diff --git a/apps/overige-objecten-api/src/utils/processData.tsx b/apps/overige-objecten-api/src/utils/processData.tsx index 25c6f75a7..32cf78d67 100644 --- a/apps/overige-objecten-api/src/utils/processData.tsx +++ b/apps/overige-objecten-api/src/utils/processData.tsx @@ -1,5 +1,24 @@ +/* eslint-disable no-undef */ import { getDirectionFromLanguageCode } from '@frameless/utils'; import { renderToString } from 'react-dom/server'; +import { ReactElement } from 'react'; + +import { AccordionSection } from '../components/AccordionSection'; +import { Markdown } from '../components/Markdown'; +import { + FaqComponent, + MultiColumnsButton, + PageData, + PriceItem, + UtrechtAccordion, + UtrechtImage, + UtrechtLink, + UtrechtLogoButton, + UtrechtRichText, + UtrechtRichText2, + UtrechtSpotlight, +} from '../shared-types'; + import { convertImageToHTML, convertLogoButtonToHTML, @@ -7,97 +26,126 @@ import { convertSpotlightToHTML, mapContentByCategory, } from './index'; -import { AccordionSection, type AccordionSectionProps } from '../components/AccordionSection'; -import { Markdown } from '../components/Markdown'; -import type { Price } from '../strapi-product-type'; + +export type PriceData = PriceItem[]; + +// ─── Helpers ────────────────────────────────────────────────────────────────── + +/** + * Safely renders a React element to an HTML string. + * Returns null if rendering fails, so callers can decide how to handle it. + */ +const safeRenderToString = (element: ReactElement): string | null => { + try { + return renderToString(element); + } catch (error) { + // eslint-disable-next-line no-console + console.error('[processData] renderToString failed:', error); + return null; + } +}; + +/** + * Wraps mapContentByCategory, skipping the call when html is null + * so a failed render does not produce a broken content block. + */ +const mapContent = (categorie: string, html: string | null): Record => { + if (html === null) return {}; + return mapContentByCategory(categorie, html); +}; + +const renderRichText = (item: UtrechtRichText | UtrechtRichText2, priceData?: PriceData): Record => { + const categorie = 'categorie' in item ? (item.categorie ?? '') : ''; + return mapContent(categorie, safeRenderToString({item.content})); +}; + +const renderLogoButton = (item: UtrechtLogoButton): Record => + mapContent(item.categorie ?? '', convertLogoButtonToHTML(item)); + +const renderSpotlight = (item: UtrechtSpotlight): Record => + mapContent(item.categorie, convertSpotlightToHTML(item)); + +const renderImage = (item: UtrechtImage): Record => { + if (!item.imageData?.url || !item.categorie) return {}; + const strapiUrl = process.env.STRAPI_PRIVATE_URL; + if (!strapiUrl) { + // eslint-disable-next-line no-console + console.warn('[processData] STRAPI_PRIVATE_URL is not set; skipping image render.'); + return {}; + } + return mapContent(item.categorie, convertImageToHTML(item.imageData, strapiUrl)); +}; + +const renderMultiColumnsButton = (item: MultiColumnsButton): Record => + mapContent(item.categorie, convertMultiColumnsButtonToHTML(item)); + +const renderFaq = (item: FaqComponent): Record => { + const html = safeRenderToString( + <> + {item.pdc_faq.faq.map((faq, index) => ( + + ))} + , + ); + return mapContent(item.categorie, html); +}; + +const renderLink = (item: UtrechtLink): Record => { + const html = safeRenderToString( + + {item.textContent} + , + ); + return mapContent(item.categorie, html); +}; + +const renderAccordion = (item: UtrechtAccordion): Record => { + const html = safeRenderToString( + <> + {item.item.map((accordionItem) => ( + + ))} + , + ); + return mapContent(item.categorie, html); +}; interface ProcessDataParams { - data: any; - priceData?: Price[]; + data: PageData; + priceData?: PriceData; } -export const processData = ({ data, priceData }: ProcessDataParams) => - data?.map((item: any) => { - if (item.component === 'ComponentComponentsUtrechtRichText') { - return mapContentByCategory( - item.categorie, - renderToString({item?.content}), - ); - } - if (item.component === 'ComponentComponentsUtrechtLogoButton') { - const mappedContent = mapContentByCategory(item.categorie, convertLogoButtonToHTML(item)); - return mappedContent; - } - if (item.component === 'ComponentComponentsUtrechtSpotlight') { - const mappedContent = mapContentByCategory(item.categorie, convertSpotlightToHTML(item)); - return mappedContent; - } - if (item.component === 'ComponentComponentsUtrechtImage') { - const mappedContent = mapContentByCategory( - item.categorie, - convertImageToHTML(item?.imageData, process.env.STRAPI_PRIVATE_URL as string), - ); - return mappedContent; - } - if (item.component === 'ComponentComponentsUtrechtMultiColumnsButton') { - const mappedContent = mapContentByCategory(item.categorie, convertMultiColumnsButtonToHTML(item)); - return mappedContent; - } - if (item.component === 'ComponentComponentsUtrechtImage') { - const imageUrl = item?.imageData?.data?.attributes.url; - - if (!imageUrl) return {}; - if (!item.categorie) return {}; - - const mappedContent = mapContentByCategory( - item.categorie, - renderToString( - {item?.imageData?.data?.attributes?.alternativeText, - ), - ); - return mappedContent; - } - if (item.component === 'ComponentComponentsFaq') { - const FAQs = item?.pdc_faq?.data?.attributes?.faq.map((faq: AccordionSectionProps, index: number) => ( - - )); - const mappedContent = mapContentByCategory(item.categorie, renderToString(FAQs)); - return mappedContent; - } - if (item.component === 'ComponentComponentsUtrechtLink') { - if (!item.categorie) return {}; - const mappedContent = mapContentByCategory( - item.categorie, - renderToString( - - {item.textContent} - , - ), - ); - return mappedContent; - } - if (item.component === 'ComponentComponentsUtrechtAccordion') { - if (!item.categorie) return {}; - - const mappedContent = mapContentByCategory( - item.categorie, - renderToString( - Array.isArray(item.item) && - item.item.map((accordionItem: AccordionSectionProps) => ( - - )), - ), - ); - if (Object.keys(mappedContent).length > 0) { - return mappedContent; - } +export const processData = ({ data, priceData }: ProcessDataParams): Record[] => { + if (!data?.length) return []; + + return data.map((item): Record => { + switch (item.component) { + case 'ComponentComponentsUtrechtRichText': + return renderRichText(item, priceData); + case 'ComponentComponentsUtrechtLogoButton': + return renderLogoButton(item); + case 'ComponentComponentsUtrechtSpotlight': + return renderSpotlight(item); + case 'ComponentComponentsUtrechtImage': + return renderImage(item); + case 'ComponentComponentsUtrechtMultiColumnsButton': + return renderMultiColumnsButton(item); + case 'ComponentComponentsFaq': + return renderFaq(item); + case 'ComponentComponentsUtrechtLink': + return renderLink(item); + case 'ComponentComponentsUtrechtAccordion': + return renderAccordion(item); + default: + return {}; } - return {}; }); +}; diff --git a/apps/overige-objecten-api/src/utils/readFile.ts b/apps/overige-objecten-api/src/utils/readFile.ts index f353f92bb..21a61b209 100644 --- a/apps/overige-objecten-api/src/utils/readFile.ts +++ b/apps/overige-objecten-api/src/utils/readFile.ts @@ -4,7 +4,7 @@ export const readFile = (filePath: string) => { try { return fs.readFileSync(filePath, 'utf8'); } catch (error) { - // eslint-disable-next-line no-console + // eslint-disable-next-line no-console, no-undef console.error(error); return undefined; } diff --git a/apps/overige-objecten-api/src/utils/renderMarkdownToString.tsx b/apps/overige-objecten-api/src/utils/renderMarkdownToString.tsx index 06a204fe3..3d38ecbb9 100644 --- a/apps/overige-objecten-api/src/utils/renderMarkdownToString.tsx +++ b/apps/overige-objecten-api/src/utils/renderMarkdownToString.tsx @@ -1,7 +1,6 @@ import { renderToString } from 'react-dom/server'; -import { Markdown, type MarkdownProps } from '../components/Markdown'; -export interface RenderMarkdownToStringProps extends MarkdownProps {} +import { Markdown, type MarkdownProps } from '../components/Markdown'; -export const renderMarkdownToString = ({ children, priceData }: RenderMarkdownToStringProps) => +export const renderMarkdownToString = ({ children, priceData }: MarkdownProps) => renderToString({children}); diff --git a/apps/overige-objecten-api/src/utils/resolveDoc.ts b/apps/overige-objecten-api/src/utils/resolveDoc.ts new file mode 100644 index 000000000..4a277b1b4 --- /dev/null +++ b/apps/overige-objecten-api/src/utils/resolveDoc.ts @@ -0,0 +1,20 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export const resolveDoc = (fileName: string) => { + const candidates = [ + path.join(__dirname, './docs', fileName), // current folder (dist / server) + path.join(__dirname, '../../docs', fileName), // dev / source + path.join(__dirname, '../docs', fileName), // maybe tests folder + ]; + + for (const p of candidates) { + if (fs.existsSync(p)) return p; + } + + throw new Error(`Cannot find doc file: ${fileName}`); +}; diff --git a/apps/overige-objecten-api/src/utils/sanitizeHTML.ts b/apps/overige-objecten-api/src/utils/sanitizeHTML.ts index 120487e4a..1f0b367a2 100644 --- a/apps/overige-objecten-api/src/utils/sanitizeHTML.ts +++ b/apps/overige-objecten-api/src/utils/sanitizeHTML.ts @@ -1,13 +1,18 @@ import DOMPurify from 'dompurify'; import { JSDOM } from 'jsdom'; -import { memoize } from 'lodash'; // For memoization of sanitize function -const createDOMPurify = memoize(() => { - const { window } = new JSDOM(); - return DOMPurify(window); -}); -const domPurify = createDOMPurify(); + +const getPurify = () => { + if (typeof window !== 'undefined') { + return DOMPurify; + } + const { window: jsdomWindow } = new JSDOM(''); + return DOMPurify(jsdomWindow); +}; + +const purify = getPurify(); + export const sanitizeHTML = (html: string) => - domPurify.sanitize(html, { + purify.sanitize(html, { FORBID_ATTR: ['style'], ADD_TAGS: ['iframe'], }); diff --git a/apps/overige-objecten-api/src/utils/uuidToIndex.ts b/apps/overige-objecten-api/src/utils/uuidToIndex.ts new file mode 100644 index 000000000..9edad1ea1 --- /dev/null +++ b/apps/overige-objecten-api/src/utils/uuidToIndex.ts @@ -0,0 +1,24 @@ +const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + +const fnv1a32 = (str: string): number => + [...str].reduce( + // Multiply by FNV prime (0x01000193), keep to 32 bits + (hash, char) => ((hash ^ char.charCodeAt(0)) * 0x01000193) >>> 0, + 0x811c9dc5, + ); + +/** + * Derives a stable numeric index from either a UUID or a Strapi 5 documentId. + * + * - Valid UUID → first 8 hex chars parsed as a hex integer (original behaviour) + * - Strapi documentId / any other string → FNV-1a 32-bit hash + * + * Both paths produce a consistent positive integer ≤ 4,294,967,295 for the + * same input, so switching from uuid to documentId at a call site is safe as + * long as you're consistent — don't mix the two for the same record type. + */ + +export const uuidToIndex = (id: string | null | undefined): number => { + if (!id) throw new Error('uuidToIndex: id is required'); + return UUID_RE.test(id) ? parseInt(id.replace(/-/g, '').slice(0, 8), 16) : fnv1a32(id); +}; diff --git a/apps/overige-objecten-api/tsconfig.json b/apps/overige-objecten-api/tsconfig.json index a556dccf7..24b8e14a2 100644 --- a/apps/overige-objecten-api/tsconfig.json +++ b/apps/overige-objecten-api/tsconfig.json @@ -1,20 +1,28 @@ { "compilerOptions": { "jsx": "react-jsx", - "moduleResolution": "node", + "moduleResolution": "bundler", "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "esModuleInterop": true, + "target": "es2022", "resolveJsonModule": true, "skipLibCheck": true, "declaration": true, - "module": "commonjs", + "module": "es2022", "outDir": "dist", "lib": ["ES2021", "DOM"], "strict": true }, - "include": ["src/**/*", "./jest.config.ts", "./global.d.ts", "./vite.config.ts"], + "include": [ + "src/**/*", + "./jest.config.ts", + "./global.d.ts", + "./vite.config.ts", + "./esm-loader.mjs", + "./register-loader.mjs" + ], "exclude": ["node_modules", "**/*.test.ts", "./src/types/openapi.ts"] } diff --git a/apps/overige-objecten-api/tsconfig.test.json b/apps/overige-objecten-api/tsconfig.test.json index 4199027a3..f5ce405b2 100644 --- a/apps/overige-objecten-api/tsconfig.test.json +++ b/apps/overige-objecten-api/tsconfig.test.json @@ -2,14 +2,18 @@ "compilerOptions": { "jsx": "react-jsx", "target": "ES2020", - "module": "ESNext", + "module": "ES2022", "moduleResolution": "node", "esModuleInterop": true, "skipLibCheck": true, "allowImportingTsExtensions": true, "strict": true, - "types": ["jest", "node"], - "resolveJsonModule": true + "types": ["vitest/globals", "node"], + "resolveJsonModule": true, + "baseUrl": ".", + "paths": { + "@utrecht/*": ["../../node_modules/@utrecht/*"] + } }, "include": ["**/*.test.tsx", "**/*.test.ts", "tests"] } diff --git a/apps/overige-objecten-api/tsup.config.ts b/apps/overige-objecten-api/tsup.config.ts new file mode 100644 index 000000000..d840c68f4 --- /dev/null +++ b/apps/overige-objecten-api/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/server.ts'], + outDir: 'dist', + format: ['esm'], + platform: 'node', + target: 'node18', + sourcemap: true, + clean: false, + splitting: false, + external: ['@frameless/ui', 'react', 'react-dom', 'react-markdown', 'jsdom', 'path', 'fs', 'lodash.kebabcase'], +}); diff --git a/apps/overige-objecten-api/vercel.json b/apps/overige-objecten-api/vercel.json new file mode 100644 index 000000000..0a61009c6 --- /dev/null +++ b/apps/overige-objecten-api/vercel.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://openapi.vercel.sh/vercel.json", + "buildCommand": "cd ../.. && pnpm run build", + "framework": "vite", + "installCommand": "cd ../.. && pnpm install --frozen-lockfile", + "relatedProjects": ["prj_Kvn4W8zKiyR07V4aPYZCgLAQu2d9", "prj_8J3yBLJmsotvT5j3zolPrhTZNRgO"] +} diff --git a/apps/overige-objecten-api/vite.config.ts b/apps/overige-objecten-api/vite.config.ts index 4cac7f36e..9ee30e3a3 100644 --- a/apps/overige-objecten-api/vite.config.ts +++ b/apps/overige-objecten-api/vite.config.ts @@ -1,8 +1,13 @@ +import path from 'node:path'; + import react from '@vitejs/plugin-react'; import { defineConfig } from 'vite'; export default defineConfig({ plugins: [react()], + resolve: { + dedupe: ['react', 'react-dom'], + }, build: { outDir: 'public/vendor', rollupOptions: { @@ -12,4 +17,31 @@ export default defineConfig({ }, }, }, + test: { + globals: true, + environment: 'jsdom', + setupFiles: ['src/tests/vitest.setup.ts'], + pool: 'forks', + testTimeout: 30000, + teardownTimeout: 10000, + alias: { + uuid: path.resolve(__dirname, './src/__mocks__/uuid.ts'), + '@frameless/ui': path.resolve(__dirname, '../../packages/ui/src'), + '@frameless/utils': path.resolve(__dirname, '../../packages/utils/src'), + }, + server: { + deps: { + inline: [ + '@utrecht/component-library-react', + '@utrecht/web-component-library-react', + '@frameless/ui', + '@frameless/utils', + ], + }, + }, + coverage: { + provider: 'v8', + reporter: ['text', 'json', 'html'], + }, + }, }); diff --git a/apps/pdc-dashboard/README.md b/apps/pdc-dashboard/README.md index ad964a948..355bd38f1 100644 --- a/apps/pdc-dashboard/README.md +++ b/apps/pdc-dashboard/README.md @@ -9,7 +9,7 @@ Start your Strapi application with autoReload enabled. [Learn more](https://docs ```shell npm run dev # or -yarn dev +pnpm dev ``` ### `start` @@ -19,7 +19,7 @@ Start your Strapi application with autoReload disabled. [Learn more](https://doc ```shell npm run start # or -yarn start +pnpm start ``` ### `build` @@ -29,5 +29,5 @@ Build your admin panel. [Learn more](https://docs.strapi.io/developer-docs/lates ```shell npm run build # or -yarn build +pnpm build ``` diff --git a/apps/pdc-dashboard/config/admin.ts b/apps/pdc-dashboard/config/admin.ts index 894637602..e5fdb4cf4 100644 --- a/apps/pdc-dashboard/config/admin.ts +++ b/apps/pdc-dashboard/config/admin.ts @@ -1,3 +1,10 @@ +const CONTENT_TYPE_MAP: Record = { + 'api::product.product': { + path: 'products', + slugField: 'slug', + }, +}; + export default ({ env }) => ({ watchIgnoredFiles: ['**/config/sync/**'], auth: { @@ -11,4 +18,47 @@ export default ({ env }) => ({ salt: env('TRANSFER_TOKEN_SALT'), }, }, + secrets: { + encryptionKey: env('ENCRYPTION_KEY'), + }, + flags: { + nps: false, // disable the Net Promoter Score popup + promoteEE: false, // disable the promotion of Strapi Enterprise features + }, + preview: { + enabled: true, + config: { + allowedOrigins: [env('FRONTEND_PUBLIC_URL')], // Single string + + async handler(uid, { documentId, locale, status }) { + const config = CONTENT_TYPE_MAP[uid]; + if (!config || !documentId) return null; + + const secret = env('PREVIEW_SECRET_TOKEN'); + if (!secret) { + // eslint-disable-next-line no-console + console.error('PREVIEW_SECRET_TOKEN is not defined'); + return null; + } + + const document = await strapi.documents(uid).findOne({ + documentId, + fields: [config.slugField], + status: status === 'published' ? 'published' : 'draft', + }); + + if (!document?.[config.slugField]) return null; + + const params = new URLSearchParams({ + secret, + slug: document[config.slugField], + type: config.path, + locale, + status, + }); + + return `${env('FRONTEND_PUBLIC_URL')}/api/preview?${params}`; + }, + }, + }, }); diff --git a/apps/pdc-dashboard/config/plugins.ts b/apps/pdc-dashboard/config/plugins.ts index cdfb86376..7ed523de0 100644 --- a/apps/pdc-dashboard/config/plugins.ts +++ b/apps/pdc-dashboard/config/plugins.ts @@ -1,5 +1,3 @@ -const { apolloPrometheusPlugin } = require('strapi-prometheus'); - export default ({ env }) => { const isProd = env('NODE_ENV') === 'production'; return { @@ -15,44 +13,33 @@ export default ({ env }) => { 'entity-notes': { enabled: true, }, - 'strapi-tiptap-editor': { - enabled: true, - }, - 'strapi-prometheus': { - enabled: true, - graphql: { - enabled: true, - config: { - apolloServer: { - plugins: [apolloPrometheusPlugin], // add the plugin to get apollo metrics - tracing: true, // this must be true to get some of the data needed to create the metrics - }, - }, - }, - }, - slugify: { + prometheus: { enabled: true, config: { - shouldUpdateSlug: true, - contentTypes: { - product: { - field: 'slug', - references: 'title', - }, + collectDefaultMetrics: false, + + server: { + port: parseInt(env('METRICS_PORT', '9001'), 10), + host: '0.0.0.0', + path: '/metrics', }, + + normalize: [ + [/\/(?:[a-z0-9]{24,25}|\d+)(?=\/|$)/, '/:id'], + [/\/uploads\/[^\\/]+\.[a-zA-Z0-9]+/, '/uploads/:file'], + ], }, }, 'preview-button': { enabled: true, config: { + domain: env('KISS_PREVIEW_URL'), + preview_secret_token: env('KISS_PREVIEW_TOKEN'), contentTypes: [ { uid: 'api::product.product', query: { - type: 'products', - }, - preview: { - type: 'both', + type: 'kennisartikelen', }, }, { @@ -60,40 +47,8 @@ export default ({ env }) => { query: { type: 'vac', }, - preview: { - type: 'dialog', - }, - }, - { - uid: 'api::internal-field.internal-field', - query: { - type: 'internal-field', - }, - preview: { - type: 'dialog', - }, - }, - { - uid: 'api::additional-information.additional-information', - query: { - type: 'additional-information', - }, - preview: { - type: 'dialog', - }, - }, - { - uid: 'api::additional-information.additional-information', - query: { - type: 'additional-information', - }, - dialog: { - enabled: true, - }, }, ], - domain: env('FRONTEND_PUBLIC_URL'), - token: env('PREVIEW_SECRET_TOKEN'), }, }, 'open-forms-embed': { @@ -120,44 +75,6 @@ export default ({ env }) => { }, }, }, - 'import-export-entries': { - enabled: true, - }, - publisher: { - enabled: true, - config: { - components: { - dateTimePicker: { - step: 15, - }, - }, - }, - }, - 'entity-relationship-chart': { - enabled: true, - config: { - exclude: [ - 'admin::api-token-permission', - 'admin::api-token', - 'admin::permission', - 'admin::role', - 'admin::transfer-token-permission', - 'admin::transfer-token', - 'admin::user', - 'plugin::entity-notes.note', - 'plugin::i18n.locale', - 'plugin::publisher.action', - 'plugin::slugify.slug', - 'plugin::upload.file', - 'plugin::upload.folder', - 'plugin::users-permissions.permission', - 'plugin::users-permissions.role', - 'plugin::users-permissions.user', - 'strapi::core-store', - 'webhook', - ], - }, - }, graphql: { config: { // Only enable in development; disable in production for security diff --git a/apps/pdc-dashboard/config/sync/admin-role.beheerder-m5uxzjc8.json b/apps/pdc-dashboard/config/sync/admin-role.beheerder-m5uxzjc8.json index 9d39621a1..115b1e9cf 100644 --- a/apps/pdc-dashboard/config/sync/admin-role.beheerder-m5uxzjc8.json +++ b/apps/pdc-dashboard/config/sync/admin-role.beheerder-m5uxzjc8.json @@ -2,6 +2,8 @@ "name": "Beheerder", "code": "beheerder-m5uxzjc8", "description": "Functioneel beheerder kan alle inhoud zien en aanpassen en gebruikers ook toevoegen en verwijderen. Volledige toegang tot Enkele Types.", + "documentId": "m4s7ei0fmre14q4odk5gqlh6", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.read", @@ -17,7 +19,9 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "g9pqimosnhn3rlusjg164d6a", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -33,7 +37,9 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "howg5e5xnc6kkd200hid0ada", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -42,7 +48,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "mef1rkn5z82c07yi40loouxu", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -51,7 +59,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "ostmh606qci1v91gvq4jkakx", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -60,7 +70,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "l0k0fbe1duuhl8h1ufy9uhb2", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -69,7 +81,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "pe8v2ep02oeonrihtk31v1t1", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -88,7 +102,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "pdrdaa9zdcwv9v7jxywqty0f", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -107,7 +123,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "cqoq7qrxm7beqt9r1psrwk2i", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -117,7 +135,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "z2r3bhs2uyue8je1ca48lv7j", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -126,7 +146,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "ln2qkxkp5mfqlr9wuo6hkehx", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -135,7 +157,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "i2xeieeqdgs0ck9sfst41555", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -145,7 +169,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "mw456lkqur9fkpzjmxdwc4v7", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -155,7 +181,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "ayn7dkx5gr5398awm95kxak5", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -165,7 +193,9 @@ "fields": ["title", "body", "type"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "twcmcfslmphfnbewuq85a4nz", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -175,7 +205,9 @@ "fields": ["title", "body", "type"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "ft7z2r2cmmz5uxop1zfsr0v9", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -184,7 +216,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "diry3799ykodx2q8gig0ipli", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -193,7 +227,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "yzk3o8ylm9uyj0li66admjmq", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -203,7 +239,9 @@ "fields": ["title", "faq.label", "faq.body", "faq.headingLevel", "faq.kennisartikelCategorie"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "w4yyi5xt1ogx6wnm8ibhg42d", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -213,7 +251,9 @@ "fields": ["title", "faq.label", "faq.body", "faq.headingLevel", "faq.kennisartikelCategorie"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "fhyvaeb0n6uk5vzjw62hrif2", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -223,7 +263,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "ri2tmlu12wojsclkr9egromj", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -232,7 +274,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "iltenapohwo2ejjhd3d2ksgy", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -241,7 +285,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "yyin30u17v33tqgw18el7vc4", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -251,7 +297,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "kov1efd051s17htragtgx4aa", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -261,7 +309,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "lcjitg37mywp01pm78w0fp9o", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -270,7 +320,9 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "ffyrtvxdmv86q6kp3f1n0av7", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -279,7 +331,9 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "hbb8u114lj3p6palt0ujyc6m", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -289,7 +343,9 @@ "fields": ["sections"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "rcardv6f94kdpw12uusm8zcu", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -298,7 +354,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "qoxv6r6jf3jjjbugqpw1o7dt", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -307,7 +365,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "c12bc55ozfipawzc0t6cegp8", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -317,7 +377,9 @@ "fields": ["sections"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "jxinyh13ye88sop5qgxorwsj", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -327,7 +389,9 @@ "fields": ["sections"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "viulljk79tu5e8aey3wyzm3y", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -336,7 +400,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "gy9y0j7tk1llkesji3y76oan", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -345,7 +411,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "j02d67r0c43r2u11rxaeq6kr", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -416,7 +484,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "bh970oj90hczxfx1zutj5kb8", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -487,7 +557,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "h196fzrp5w3ttfxi1lkey7ez", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -510,7 +582,9 @@ "referentieCatalogus" ] }, - "conditions": [] + "conditions": [], + "documentId": "ibx5hld16klpy5wqoi4ixayi", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -533,7 +607,9 @@ "referentieCatalogus" ] }, - "conditions": [] + "conditions": [], + "documentId": "tze93a9l6gpg2na4m4o9szae", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -562,7 +638,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "cw0wz98j425himadfoxkcfc2", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -591,7 +669,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "dsnep8p54lzafox3asfjay6j", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -604,21 +684,27 @@ "triggerMatomoScript.trackingScripts.enabled" ] }, - "conditions": [] + "conditions": [], + "documentId": "ifpu6l95ni1dwgiqcwse3053", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::website-setting.website-setting", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "mnd6cbk6817wqn7mpq52pc77", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::website-setting.website-setting", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "efjq8vfivw2lnevr2ubiqdz2", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -631,7 +717,9 @@ "triggerMatomoScript.trackingScripts.enabled" ] }, - "conditions": [] + "conditions": [], + "documentId": "q9gwpyuat4wypxolksyity6q", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -644,133 +732,171 @@ "triggerMatomoScript.trackingScripts.enabled" ] }, - "conditions": [] + "conditions": [], + "documentId": "f11puzzulryos7sctas3bsuf", + "locale": null }, { "action": "admin::api-tokens.access", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "vaslx9d7c1i4i5wqjp1fimqo", + "locale": null }, { "action": "admin::api-tokens.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "po8jt25rs3a55vqle0pgy9g5", + "locale": null }, { "action": "admin::api-tokens.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "m8a29f3kunbkdk7mnbymfoj3", + "locale": null }, { "action": "admin::api-tokens.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "lj1y3sehnbjmnbnsuwz3f7m7", + "locale": null }, { "action": "admin::api-tokens.regenerate", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ev5jxryzh2et4k0g845hjq2c", + "locale": null }, { "action": "admin::api-tokens.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "kp1d2o59cxj75ued12mx2tzq", + "locale": null }, { "action": "admin::roles.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "nqhzppw9y0mqly8o0ja69gbo", + "locale": null }, { "action": "admin::roles.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "dwz6ye7l73xanps98tswi5c7", + "locale": null }, { "action": "admin::roles.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "tye7nsb37wbqeftiql8byu9h", + "locale": null }, { "action": "admin::roles.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "raozoxlueex56m1wyrn8i3yk", + "locale": null }, { "action": "admin::users.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ptn0cg67dkt96oop391cz1uw", + "locale": null }, { "action": "admin::users.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "xp7xkl36nke7lp4berbj10gh", + "locale": null }, { "action": "admin::users.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "dhlj4a78omlinifubgybvoqg", + "locale": null }, { "action": "admin::users.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "wowjmt7k3a3zaa6flk0eomzw", + "locale": null }, { "action": "plugin::config-sync.menu-link", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "wgwryyj36c59zvl9p1rkade7", + "locale": null }, { "action": "plugin::config-sync.settings.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "rlasdfptlu80k5fqokmqe8g0", + "locale": null }, { "action": "plugin::content-manager.collection-types.configure-view", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "t9yebpsisstmvo8voxwvr145", + "locale": null }, { "action": "plugin::content-manager.components.configure-layout", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "vtapsmk5772pn86vrjgbnojc", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -789,14 +915,18 @@ "role" ] }, - "conditions": [] + "conditions": [], + "documentId": "n5ng0dc8rzt8c2slg4vqrsez", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "plugin::users-permissions.user", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "w4yk4k2jonn0wqyl9e6pdu7a", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -815,7 +945,9 @@ "role" ] }, - "conditions": [] + "conditions": [], + "documentId": "ev2d037n8cle9ky7b8ur77cj", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -834,161 +966,189 @@ "role" ] }, - "conditions": [] + "conditions": [], + "documentId": "g7lfb4u5q467sy8lk3y1k891", + "locale": null }, { "action": "plugin::content-manager.single-types.configure-view", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "aonsbkrvllyv2iuu6ldf80r9", + "locale": null }, { "action": "plugin::content-type-builder.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "yrsyavipcxnhwgait48zy99o", + "locale": null }, { "action": "plugin::i18n.locale.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "hqcyiif0t5o78y6amleltkjt", + "locale": null }, { "action": "plugin::i18n.locale.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "rc36tcat005rxjxdq4yza6ul", + "locale": null }, { "action": "plugin::i18n.locale.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "zrmphr78qgnrdtjjpfc9bypx", + "locale": null }, { "action": "plugin::i18n.locale.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] - }, - { - "action": "plugin::import-export-entries.export", - "actionParameters": {}, - "subject": null, - "properties": {}, - "conditions": [] - }, - { - "action": "plugin::import-export-entries.import", - "actionParameters": {}, - "subject": null, - "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "f9722tkrsd3kfnrxg9pkmpeo", + "locale": null }, { "action": "plugin::upload.assets.copy-link", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "kxqlk9ip5cncn1x0b0tjtyt5", + "locale": null }, { "action": "plugin::upload.assets.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "am314vkd5hg8jcli3ms29ati", + "locale": null }, { "action": "plugin::upload.assets.download", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "s4xxepj4s90ysb8p7p09dknl", + "locale": null }, { "action": "plugin::upload.assets.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "zy2ywagqdumwy3k4o6nhwep5", + "locale": null }, { "action": "plugin::upload.configure-view", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "sqngrcws1bv0a63z6axtvomb", + "locale": null }, { "action": "plugin::upload.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "m5iz11pq6t6pp2tbpb9u61z4", + "locale": null }, { "action": "plugin::users-permissions.email-templates.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "c31muhjajlv1hrdouq2pi0wy", + "locale": null }, { "action": "plugin::users-permissions.email-templates.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "vvz42z3f2biiaz07t6b9baez", + "locale": null }, { "action": "plugin::users-permissions.providers.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "tgnn7kdxcpq4020nzl7xjybm", + "locale": null }, { "action": "plugin::users-permissions.providers.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "anzuget804xd8aqr7ncrzx4n", + "locale": null }, { "action": "plugin::users-permissions.roles.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "elkjrv5kpvqe4ux26d16npt8", + "locale": null }, { "action": "plugin::users-permissions.roles.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "neqyfjnaa6ifxmeeovy9z6zv", + "locale": null }, { "action": "plugin::users-permissions.roles.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "cr8q831aqcpdix2s0oxt73qu", + "locale": null }, { "action": "plugin::users-permissions.roles.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "zhg1rb1flk7xlbbzgvirn96r", + "locale": null } ] } diff --git a/apps/pdc-dashboard/config/sync/admin-role.kennisbank-schrijver-m5uxgzkp.json b/apps/pdc-dashboard/config/sync/admin-role.kennisbank-schrijver-m5uxgzkp.json index 447ab6380..432c16c16 100644 --- a/apps/pdc-dashboard/config/sync/admin-role.kennisbank-schrijver-m5uxgzkp.json +++ b/apps/pdc-dashboard/config/sync/admin-role.kennisbank-schrijver-m5uxgzkp.json @@ -2,6 +2,8 @@ "name": "Kennisbank Redacteur", "code": "kennisbank-schrijver-m5uxgzkp", "description": "Kennisbank Redacteur kan aanvullende en interne informatie volledig bewerken en producten en andere collecties zien. Geen toegang tot gebruikers of Enkele Types.", + "documentId": "nc43cco25bb9mb0vfmr5a7ob", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.create", @@ -17,21 +19,27 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "calq8vapd320iibp4pidqec6", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::additional-information.additional-information", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "w0rndaa4adbunmu51ef3q4ow", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::additional-information.additional-information", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "n9mcxtwzgwf5q81ljsvyyq4n", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -47,7 +55,9 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "vxqbd53mnwh3g5g97r9vcpo1", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -63,7 +73,9 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "raqkcoxcb9qo34vpzzw58pck", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -72,21 +84,27 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "gb100gnl9rkl72hn1wx3w8jj", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::contact-information-internal.contact-information-internal", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "t204pd78ckwug54h921js2l2", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::contact-information-internal.contact-information-internal", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "lyuqunuq7esvd6hw73qvfjxq", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -95,7 +113,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "oqpqnke33ktjtifokg50arl0", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -104,7 +124,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "kib4y34ooq48c90nowdccg56", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -113,21 +135,27 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "cb6eox58hq2ysp1jw42h1osp", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::contact-information-public.contact-information-public", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "rq5z3jd04xvyvc8r6fxknbx7", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::contact-information-public.contact-information-public", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "cozlpkn1v5szkaahmn6ojnfb", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -136,7 +164,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "x3oi5aq8k0dcbqeg0cw0g3ca", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -145,7 +175,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "pzdjt2lthk3gb874t316vu4v", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -164,21 +196,27 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "yyikis0l1yrweonx6uu098fo", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::internal-field.internal-field", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "m3at8mtx6884z1a1jp5qo2xl", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::internal-field.internal-field", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "a4gbegi2dcl5scwfl499wc0m", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -197,7 +235,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "wu5j5obcojvr3hq52rzyism3", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -216,7 +256,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "lr68kh4vz1clsy4ig2bksceb", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -225,21 +267,27 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "ga2gjnziufsx9f82sk12djpu", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::pdc-category.pdc-category", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "rhqfkd4razzagnic3krexcth", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::pdc-category.pdc-category", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "w46yfi10ne6r1oknpq9cb10s", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -248,7 +296,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "mdlz6t5u47xpou6so7oss3n9", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -257,7 +307,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "mnbtef7ds66tfm4jkdot61gi", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -266,21 +318,27 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "mjxy2rxuv4ddpr0enep2klkz", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::pdc-subcategory.pdc-subcategory", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "p9posn8nejso1hr14gt5ju6l", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::pdc-subcategory.pdc-subcategory", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "hti6yl8be5yr28gcr3p0c50l", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -289,7 +347,9 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "i0u26316qdkm8edo8985cv57", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -298,7 +358,9 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "u5ltt1i0ajkp51qse29azysj", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -307,7 +369,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "sekarzddfxl88uehf4e7877w", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -378,7 +442,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "qcas6ta6yexmorqihz2dp7dp", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -407,21 +473,27 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "zun5zshgtw4pcda7uq3stcg4", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::vac.vac", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "kzgnpv5wy1rgcuizt92fccfh", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::vac.vac", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "kzrb988atikirkcunwxxesbw", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -450,7 +522,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "jwlmw8l6bpeo8dudzq4d2ojj", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -479,7 +553,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "g7djox5u5630pmovqzag1h7l", + "locale": null } ] } diff --git a/apps/pdc-dashboard/config/sync/admin-role.pdc-lezer-m5uuxokf.json b/apps/pdc-dashboard/config/sync/admin-role.pdc-lezer-m5uuxokf.json index 9bc87efd5..91a6b45bd 100644 --- a/apps/pdc-dashboard/config/sync/admin-role.pdc-lezer-m5uuxokf.json +++ b/apps/pdc-dashboard/config/sync/admin-role.pdc-lezer-m5uuxokf.json @@ -2,6 +2,8 @@ "name": "Lezer", "code": "pdc-lezer-m5uuxokf", "description": "Een rol met alleen leesrechten op alle verzamelingen behalve gebruikers.", + "documentId": "hgg4rdett9uunrze9b11m6ea", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.read", @@ -17,7 +19,9 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "xiziooqv9h2dz7ry4u6yu4ij", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -26,7 +30,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "h3azpvsdnmt86upv61yefqs1", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -35,7 +41,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "uzr27t0gonf9pjetes2ectg4", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -53,7 +61,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "pz9th8yg95ddk0dlj5tlvuxg", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -62,7 +72,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "oxljonb170ey41bmtow2gu8f", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -71,7 +83,9 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "t0bg7tyjadfez7zvmgzdg2rg", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -80,7 +94,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "va79ax27gsr0svpm6pb8joqy", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -151,7 +167,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "qg8wkqa6vjlvc073f7un4iau", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -180,7 +198,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "brmbp5j4x7ea2cm8xlvob3n1", + "locale": null } ] } diff --git a/apps/pdc-dashboard/config/sync/admin-role.pdc-lq539osz.json b/apps/pdc-dashboard/config/sync/admin-role.pdc-lq539osz.json index a47d156f8..9809d91b5 100644 --- a/apps/pdc-dashboard/config/sync/admin-role.pdc-lq539osz.json +++ b/apps/pdc-dashboard/config/sync/admin-role.pdc-lq539osz.json @@ -2,6 +2,8 @@ "name": "PDC", "code": "pdc-lq539osz", "description": "Deze rol verleent toegang tot de Strapi API-eindpunten voor het beheren van PDC. ", + "documentId": "xqf5nwttn2jrhzm5kv4kvvn4", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.create", @@ -11,7 +13,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "zobocr17onox649v3jty64j8", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -20,7 +24,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "a0nqll1qlnga7mkucj7srusk", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -29,7 +35,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "o7qg5ouxuphmjndp20u0s2p6", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -39,7 +47,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "j9m3ctnab7ax1orjfa2t6b9c", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -49,7 +59,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "c9oj0pflfbijb86whbf88x1e", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -58,21 +70,27 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "wke3j0p08n41sjl7qxp4oomo", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::pdc-category.pdc-category", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "m8tsm6f846g8i0aqn8vlao87", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::pdc-category.pdc-category", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "wmktjpu2ja3rynsq2dcah7u3", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -81,7 +99,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "b1v5azbwbgeowoyrxz98ld7n", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -90,7 +110,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "vz15msdgvd9xi7aqtukoor8w", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -100,7 +122,9 @@ "fields": ["title", "faq.label", "faq.body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "ok8zqno2gmeaooy4vnjs4kf1", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -109,7 +133,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "nn11l7kqykaqjgk1hw731tvk", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -118,7 +144,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "xo7atbzjx28a7lt4le6exokn", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -128,7 +156,9 @@ "fields": ["title", "faq.label", "faq.body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "telk5ctxcfokjzxqfap14jj0", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -138,7 +168,9 @@ "fields": ["title", "faq.label", "faq.body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "kf592nwpuv9sotcrg25donpq", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -148,7 +180,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "ss72h782ynw3q8x8fleo07ei", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -157,7 +191,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "mps6kbrtlpt05kxmw944amt8", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -166,7 +202,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "q48weaazm3xxfd9b36a1k2tv", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -176,7 +214,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "j4q9a9kdjq7xt34ix0v23xw0", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -186,7 +226,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "phrtfa20r7828bfyfeywiwz7", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -195,21 +237,27 @@ "properties": { "fields": ["title", "pdc_category", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "fk3m55dd88i0uxws14wcgqhg", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::pdc-subcategory.pdc-subcategory", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "w0lrwrk2rpqb53x1qa0v0u58", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::pdc-subcategory.pdc-subcategory", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "hnl77ildcjivozmptrfn3r1s", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -218,7 +266,9 @@ "properties": { "fields": ["title", "pdc_category", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "ex92ym5rmujkf92ci6hwrx0q", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -227,7 +277,9 @@ "properties": { "fields": ["title", "pdc_category", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "d1do44moppyo8pg71dx0po1s", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -237,7 +289,9 @@ "fields": ["sections"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "v1owabylmgh14361tqd2yaqc", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -246,7 +300,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "yr9wh027xm36ph4yp1arzkxv", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -255,7 +311,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "ppzcy2gwxa87hk89pz89z44x", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -265,7 +323,9 @@ "fields": ["sections"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "d08qnwgyagvwjgk8prf2hgzw", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -275,7 +335,9 @@ "fields": ["sections"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "o5eeaoxisyjqahinvcx0yrpa", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -284,21 +346,27 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "title", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "eqg8p1mlhveecgtb8xjrggz4", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::price.price", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "cn6l6iuz1yumfx4lr423azq5", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::price.price", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "z1ptzkjwhc5s043bzrttszat", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -307,7 +375,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "title", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "pyin7hwwcpgisn8sq9dnmf0g", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -316,7 +386,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "title", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "lw7jjdr9fjzirnhr9gptoq75", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -369,7 +441,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "kvzyf07z52rf762xnpcky24s", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -378,7 +452,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "a4ain50vqmd9ptqxgoobf1dn", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -387,7 +463,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "rnchp8ruh0j7z70xks6zme32", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -440,7 +518,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "yh3ojkik0k2h3l1jdjyutboh", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -493,7 +573,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "cc4r2h19ebeuu1bhrj9neodb", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -516,21 +598,27 @@ "referentieCatalogus" ] }, - "conditions": [] + "conditions": [], + "documentId": "d28w4dyty5qresv6s66ynqv4", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::productencatalogus.productencatalogus", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ulw1n4ko6j7s492xow16ulmo", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::productencatalogus.productencatalogus", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "xhwjxokwamuz3bk8ti7cwm3z", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -553,7 +641,9 @@ "referentieCatalogus" ] }, - "conditions": [] + "conditions": [], + "documentId": "pmt44qokhusy48m5sf0v6qop", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -576,49 +666,63 @@ "referentieCatalogus" ] }, - "conditions": [] + "conditions": [], + "documentId": "jbse5z8y8guzy9g8d9kflero", + "locale": null }, { "action": "plugin::upload.assets.copy-link", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "z1ezw2zkzpyved6l15ijxcs3", + "locale": null }, { "action": "plugin::upload.assets.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "td7q3lbdlqg8arj8bn5t6usm", + "locale": null }, { "action": "plugin::upload.assets.download", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "zzofzk3c6justocta8djhglg", + "locale": null }, { "action": "plugin::upload.assets.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "kne279gzf5s4hv9xeolh82f8", + "locale": null }, { "action": "plugin::upload.configure-view", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "zar4dodpyz7kuoyl8jwt03t0", + "locale": null }, { "action": "plugin::upload.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "weqkm0f8sowm358j4y5prwsp", + "locale": null } ] } diff --git a/apps/pdc-dashboard/config/sync/admin-role.pdc-schrijver-m5uxb98h.json b/apps/pdc-dashboard/config/sync/admin-role.pdc-schrijver-m5uxb98h.json index b485de6ab..ad5f629e4 100644 --- a/apps/pdc-dashboard/config/sync/admin-role.pdc-schrijver-m5uxb98h.json +++ b/apps/pdc-dashboard/config/sync/admin-role.pdc-schrijver-m5uxb98h.json @@ -2,6 +2,8 @@ "name": "PDC Redacteur", "code": "pdc-schrijver-m5uxb98h", "description": "PDC Redacteur kan producten volledig bewerken en aanvullende en interne informatie zien. Geen toegang tot gebruikers wel LUP rechten op Enkele Types.", + "documentId": "luz9hs86hltj4rcfxqrszkql", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.read", @@ -17,7 +19,9 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "zj329d0qhe9vkrm9tycodi8i", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -26,21 +30,27 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "fbcaw27ugzul5ip4yf7n10gh", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::contact-information-internal.contact-information-internal", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "s3ubid2oba0bark037xr2xd6", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::contact-information-internal.contact-information-internal", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "f3lvmgwipvkd6fnujs3ctzop", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -49,7 +59,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "wpnyj6cgp9x47v5jn90lycti", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -58,7 +70,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "sl21aq686b8qa84nc45mhrfz", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -67,21 +81,27 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "m8dydvln3ejhwlqzcgc4s0kt", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::contact-information-public.contact-information-public", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "gmy87qq1aq57qo0nvodx6z2b", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::contact-information-public.contact-information-public", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "kh1gf8bix3k9gxact6lxgnq2", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -90,7 +110,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "uc5mts3tef8o4a8lj7vdyqzt", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -99,7 +121,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "f28wuxyn8t0923qv1620kjru", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -118,7 +142,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "ek66z449jg2qpwtfqevc6o6r", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -127,7 +153,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "s1l4o59a4f9a545hhmffez6z", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -137,7 +165,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "azjv7j48e179gq0sy3a33201", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -147,7 +177,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "fnn97prxmcbfahrqg75z60ml", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -156,21 +188,27 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "ccgdiedeyb5wk5y7507smge5", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::pdc-category.pdc-category", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "p9sivsyjdgdte61h0mh4xum6", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::pdc-category.pdc-category", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "kmbxzadi2mrsp60pll3qw3to", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -179,7 +217,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "sx8shs0vev3gahke8gjlnz2i", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -188,7 +228,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "n21gblbx6fqtfyexwszagqnd", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -197,7 +239,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "wjdk5302rc3iwxz1f247uwp8", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -207,7 +251,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "yz274no407tjgcs8hqzwe7t1", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -217,7 +263,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "j71iu6e9wqj3ftce2tiwso2m", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -226,21 +274,27 @@ "properties": { "fields": ["title", "pdc_category", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "wmpsrso53hbvq40v7z3e447e", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::pdc-subcategory.pdc-subcategory", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "gacgalmmi4johsi04jiayjk5", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::pdc-subcategory.pdc-subcategory", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ef6ulxpa8niyv999uelkhjl2", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -249,7 +303,9 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "gjam37rx4buu7fs61x880xrf", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -258,7 +314,9 @@ "properties": { "fields": ["title", "pdc_category", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "et1nnk2q0gox4hyg4zuo5fp3", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -267,21 +325,27 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "lavvg8yygimteezaij9cmk50", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::price.price", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "wxhgxif1gbrmj45xh2o8uf4x", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::price.price", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ia4yndnd9zs1hxihmig4knyd", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -290,7 +354,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "g3tovi798oljnjgzk6ej09wy", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -299,7 +365,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "l8jkgiqwz4tsq1ezwd3z9eb7", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -369,7 +437,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "efhsm2bby5peka6ogps5w0zd", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -378,7 +448,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "nr12xgdlz9yeyoavgxpq5iur", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -387,7 +459,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "fsc602px0heo7vwe38y66ird", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -458,7 +532,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "vx5rlytpg8c21ejxupc8bj3z", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -528,7 +604,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "iz47s1cawamjxsjm3dj0dhzt", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -557,7 +635,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "pj3labztp3itvkw0qmzyzh07", + "locale": null } ] } diff --git a/apps/pdc-dashboard/config/sync/admin-role.strapi-author.json b/apps/pdc-dashboard/config/sync/admin-role.strapi-author.json index f8c3c4daa..0e5cfedfa 100644 --- a/apps/pdc-dashboard/config/sync/admin-role.strapi-author.json +++ b/apps/pdc-dashboard/config/sync/admin-role.strapi-author.json @@ -2,6 +2,8 @@ "name": "Author", "code": "strapi-author", "description": "Authors can manage the content they have created.", + "documentId": "urlouw803jglqaanshzw84m9", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.create", @@ -11,7 +13,9 @@ "fields": ["title", "body"], "locales": ["nl", "en"] }, - "conditions": ["admin::is-creator"] + "conditions": ["admin::is-creator"], + "documentId": "bhto9zlfrqrs6mk4a73d2sbg", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -20,7 +24,9 @@ "properties": { "locales": ["nl", "en"] }, - "conditions": [] + "conditions": [], + "documentId": "lybpheqgemc3hu57xbh2gp5e", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -29,7 +35,9 @@ "properties": { "locales": ["nl", "en"] }, - "conditions": [] + "conditions": [], + "documentId": "um87iyzx23c2fmt3ytatz9jd", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -39,7 +47,9 @@ "fields": ["title", "body"], "locales": ["nl", "en"] }, - "conditions": ["admin::is-creator"] + "conditions": ["admin::is-creator"], + "documentId": "i8sjctvngde9g9s6y9lkp0ld", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -49,49 +59,63 @@ "fields": ["title", "body"], "locales": ["nl", "en"] }, - "conditions": ["admin::is-creator"] + "conditions": ["admin::is-creator"], + "documentId": "vpg01de1oj1z014oib4pmgow", + "locale": null }, { "action": "plugin::upload.assets.copy-link", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "e6nj2utjcdat8f8ssrk1s0u2", + "locale": null }, { "action": "plugin::upload.assets.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "nth5rzyftu935izcg4y1upqh", + "locale": null }, { "action": "plugin::upload.assets.download", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "gg2hqta6fhpklh1habg17w22", + "locale": null }, { "action": "plugin::upload.assets.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": ["admin::is-creator"] + "conditions": ["admin::is-creator"], + "documentId": "m66pa1oakgqokgyc1edbooyv", + "locale": null }, { "action": "plugin::upload.configure-view", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ql0xrsyo11ymeebe5khwi5ou", + "locale": null }, { "action": "plugin::upload.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": ["admin::is-creator"] + "conditions": ["admin::is-creator"], + "documentId": "kll38lx1amiffmkdch7e6rzr", + "locale": null } ] } diff --git a/apps/pdc-dashboard/config/sync/admin-role.strapi-editor.json b/apps/pdc-dashboard/config/sync/admin-role.strapi-editor.json index a4592dce9..b61a0223f 100644 --- a/apps/pdc-dashboard/config/sync/admin-role.strapi-editor.json +++ b/apps/pdc-dashboard/config/sync/admin-role.strapi-editor.json @@ -2,6 +2,8 @@ "name": "Editor", "code": "strapi-editor", "description": "Editors can manage and publish contents including those of other users.", + "documentId": "vtkqqonognrdljws19wzip27", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.create", @@ -11,7 +13,9 @@ "fields": ["title", "body"], "locales": ["nl", "en"] }, - "conditions": [] + "conditions": [], + "documentId": "l0wvff57p2gmwpgnesruj1nz", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -20,7 +24,9 @@ "properties": { "locales": ["nl", "en"] }, - "conditions": [] + "conditions": [], + "documentId": "aj99ofevfxqbujddd4f6y2st", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -29,7 +35,9 @@ "properties": { "locales": ["nl", "en"] }, - "conditions": [] + "conditions": [], + "documentId": "k59n8nsvi5xzv0tkwb56elan", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -39,7 +47,9 @@ "fields": ["title", "body"], "locales": ["nl", "en"] }, - "conditions": [] + "conditions": [], + "documentId": "xm8vfv9ueugcm5b14leatv6j", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -49,49 +59,63 @@ "fields": ["title", "body"], "locales": ["nl", "en"] }, - "conditions": [] + "conditions": [], + "documentId": "qk8vch9cbkzhtzb4rtfsk207", + "locale": null }, { "action": "plugin::upload.assets.copy-link", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "si5phjx844c0c89npyxt0tts", + "locale": null }, { "action": "plugin::upload.assets.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ak4s91lt8tyretkunk81522m", + "locale": null }, { "action": "plugin::upload.assets.download", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "bxj9ihu886p99w66tbd5b7je", + "locale": null }, { "action": "plugin::upload.assets.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "j5860hma2cqmooymywwz9a5s", + "locale": null }, { "action": "plugin::upload.configure-view", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "g2mruuqg8coz3i3o93khdkva", + "locale": null }, { "action": "plugin::upload.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "g6izg39sok8qaw8b5rtezizo", + "locale": null } ] } diff --git a/apps/pdc-dashboard/config/sync/admin-role.strapi-super-admin.json b/apps/pdc-dashboard/config/sync/admin-role.strapi-super-admin.json index 3c832e53c..69459f8e2 100644 --- a/apps/pdc-dashboard/config/sync/admin-role.strapi-super-admin.json +++ b/apps/pdc-dashboard/config/sync/admin-role.strapi-super-admin.json @@ -2,6 +2,8 @@ "name": "Super Admin", "code": "strapi-super-admin", "description": "Super Admins can access and manage all features and settings.", + "documentId": "av28rozkkhih2yh3h33k3udq", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.create", @@ -17,21 +19,27 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "i90c6antpcq4iuh8xbdip1sj", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::additional-information.additional-information", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "r1vqvr2x0e0zsefegfm69yai", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::additional-information.additional-information", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "jvnrfuscyhmpul66vic9ypo0", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -47,7 +55,9 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "lef7f7z61uyhgz4wsgiqyf8o", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -63,7 +73,9 @@ "product" ] }, - "conditions": [] + "conditions": [], + "documentId": "liz08vgmedxt42dp2jbfh1ub", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -72,21 +84,27 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "lf5q3fhgw8v9mguntclk6dpo", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::contact-information-internal.contact-information-internal", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ns1xtwwuoai5zbr1debd8yx0", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::contact-information-internal.contact-information-internal", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "cmqasrnlbifhupqv1prvgoy8", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -95,7 +113,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "n46uapm358q6ow0baflffzmh", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -104,7 +124,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "ewxbzkq4gljlwp7yd47qrprq", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -113,21 +135,27 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "gdzit5c8vqtk7greduwoy470", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::contact-information-public.contact-information-public", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "j1iti0d1y1zwds44albi0a46", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::contact-information-public.contact-information-public", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "dovkd8y28xp82r8dnb3degjo", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -136,7 +164,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "qud1eyqa5cp638ieybh3fa61", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -145,7 +175,9 @@ "properties": { "fields": ["title", "contentBlock.content", "contentBlock.label", "internal_information", "vacs", "products"] }, - "conditions": [] + "conditions": [], + "documentId": "en5u61razvkg2iuigag97i3g", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -164,21 +196,27 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "li0bpsuyg7uut825azbx1bjf", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::internal-field.internal-field", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "hosluj3ckb50625y16tg7yd6", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::internal-field.internal-field", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "mipsnkcvqrqhel8z32jekg2v", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -197,7 +235,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "ppl6ggq2oz3bv65smfain1h7", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -216,7 +256,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "shhrdps9djqio2wj3iynf71l", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -226,7 +268,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "jwwhgj4168exn5ufa0un5iy6", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -235,7 +279,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "hob9guygrvitrhmy0adodtm7", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -244,7 +290,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "apcmh8q4exptfzgst0r1au0b", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -254,7 +302,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "woxggq3xxpaxyaggrsryl1s7", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -264,7 +314,9 @@ "fields": ["title", "body"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "xixx3i070je8aeya317n53fq", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -274,7 +326,9 @@ "fields": ["title", "body", "type"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "w03emsmcwdfxrd4s21surxup", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -283,7 +337,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "zphviajb85llpghp91ohx6tu", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -292,7 +348,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "r2dnsx36bml12mxmxetigsn2", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -302,7 +360,9 @@ "fields": ["title", "body", "type"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "hzajwrd3z73x3ccelhhwpjcn", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -312,7 +372,9 @@ "fields": ["title", "body", "type"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "mo7gs4k44l29ehef4379i9in", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -321,21 +383,27 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "omdgy3so7yyxh7l47522ahdw", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::pdc-category.pdc-category", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "sjs7qklu6luh6k539fob4zjt", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::pdc-category.pdc-category", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "qx5pzjjokcwl9jn69lpxgrea", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -344,7 +412,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "ua5kxybur2p8xwcpksv7vgb9", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -353,7 +423,9 @@ "properties": { "fields": ["title", "pdc_subcategories"] }, - "conditions": [] + "conditions": [], + "documentId": "tfuh924zcimgdjko75ffb7yd", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -363,7 +435,9 @@ "fields": ["title", "faq.label", "faq.body", "faq.headingLevel", "faq.kennisartikelCategorie"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "wla7oaumr5rrk7o47z5alkd6", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -372,7 +446,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "n0amcubynerfekmn7464s3sr", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -381,7 +457,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "lwmyfc8xji8nuxtte75i9oyl", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -391,7 +469,9 @@ "fields": ["title", "faq.label", "faq.body", "faq.headingLevel", "faq.kennisartikelCategorie"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "xq9qn4n21dhqu3w8s8gja4be", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -401,7 +481,9 @@ "fields": ["title", "faq.label", "faq.body", "faq.headingLevel", "faq.kennisartikelCategorie"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "h6w8y0m882jvqbeob5kqkyv2", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -411,7 +493,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "r63t6kajdmkzgrj2bilkyepj", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -420,7 +504,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "ol2hgvb4bxz3q1f1ad9kkish", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -429,7 +515,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "pjw02vp320j9kncxq6oqp3l6", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -439,7 +527,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "gl7jveln8xp88neyj44zzpxe", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -449,7 +539,9 @@ "fields": ["components"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "hwwrimjme72913zo6tliqq3f", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -458,21 +550,27 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "jt4fy8p8c1kyg1k5ujtcfzdv", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::pdc-subcategory.pdc-subcategory", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "oa0eiw6ii6tmpk5560bdjw6o", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::pdc-subcategory.pdc-subcategory", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "lpg0hu1gamg6n3ahh14pgu83", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -481,7 +579,9 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "wu5y5ejzszoda1wm4e383b5g", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -490,7 +590,9 @@ "properties": { "fields": ["title", "pdc_category", "products", "vacs"] }, - "conditions": [] + "conditions": [], + "documentId": "me7f37qkqa6kz6uot1wm65p8", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -500,7 +602,9 @@ "fields": ["sections"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "ah07mi0m7tagm4pmoxalbf8l", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -509,7 +613,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "rndt5phjsxoxn6cxqfo84aal", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -518,7 +624,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "qwn5qc9iog74kqosposgthfu", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -528,7 +636,9 @@ "fields": ["sections"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "jxnl0td3n6w8lbxq2j2g0w1i", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -538,7 +648,9 @@ "fields": ["sections"], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "g80i49ctoiut9hfk5gvhzpxp", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -547,21 +659,27 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "b281uur9aogzz7hnhhml3nfe", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::price.price", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "s0ufkxccnvguga7v3c2a5g3t", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::price.price", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "vgtismz6t6izzskc7co0mahj", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -570,7 +688,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "o2u8hprt05ghazhqbfsgbkok", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -579,7 +699,9 @@ "properties": { "fields": ["price.label", "price.currency", "price.value", "price.uuid", "title", "products", "uuid"] }, - "conditions": [] + "conditions": [], + "documentId": "x0n07yidh1ilyhs7vu5pbcrb", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -588,6 +710,7 @@ "properties": { "fields": [ "title", + "slug", "content", "sections", "price", @@ -607,7 +730,6 @@ "metadata.contact.name", "metadata.contact.email", "metadata.eForm.linkedEForm", - "slug", "pdc_subcategories", "pdc_metadata.productCode", "pdc_metadata.beoogdResultaat", @@ -650,7 +772,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "y5q6axwsk961hv9dystlzewe", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", @@ -659,7 +783,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "oooi3007ofq56174sye477gl", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", @@ -668,7 +794,9 @@ "properties": { "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "j8b1zqxrkizv7j2muyzprlf4", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -677,6 +805,7 @@ "properties": { "fields": [ "title", + "slug", "content", "sections", "price", @@ -696,7 +825,6 @@ "metadata.contact.name", "metadata.contact.email", "metadata.eForm.linkedEForm", - "slug", "pdc_subcategories", "pdc_metadata.productCode", "pdc_metadata.beoogdResultaat", @@ -739,7 +867,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "cos42yfdq4bkf4fxr13hedpu", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -748,6 +878,7 @@ "properties": { "fields": [ "title", + "slug", "content", "sections", "price", @@ -767,7 +898,6 @@ "metadata.contact.name", "metadata.contact.email", "metadata.eForm.linkedEForm", - "slug", "pdc_subcategories", "pdc_metadata.productCode", "pdc_metadata.beoogdResultaat", @@ -810,7 +940,9 @@ ], "locales": ["en", "nl"] }, - "conditions": [] + "conditions": [], + "documentId": "p5e0etgwvslwwnk00qnwxvl0", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -833,21 +965,27 @@ "referentieCatalogus" ] }, - "conditions": [] + "conditions": [], + "documentId": "zj0f4w7tgnpu3ir7t23bnu3e", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::productencatalogus.productencatalogus", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "s1ffq7t6drg6lmgxwsa0fraf", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::productencatalogus.productencatalogus", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "h3nw7a4gyqefjlenzlnyofl9", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -870,7 +1008,9 @@ "referentieCatalogus" ] }, - "conditions": [] + "conditions": [], + "documentId": "of3vqntpvmv248tmnsc4xthr", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -893,7 +1033,9 @@ "referentieCatalogus" ] }, - "conditions": [] + "conditions": [], + "documentId": "g3brdtqdbfp3dg9jljpu4prq", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -922,21 +1064,27 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "kl1bq7dcnegg4xy5c5z9l6gt", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::vac.vac", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ta1utymw59lnfixjioyibkca", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::vac.vac", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ltpte3b8mu7iz1oila59nomw", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -965,7 +1113,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "tmuveyubqfovbwf1qfbx0lp5", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -994,7 +1144,9 @@ "contact_information_internal" ] }, - "conditions": [] + "conditions": [], + "documentId": "dq0pw2cf4ts9an3y4svmav8n", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -1007,21 +1159,27 @@ "triggerMatomoScript.trackingScripts.enabled" ] }, - "conditions": [] + "conditions": [], + "documentId": "rfnvjdv9kewcuy7jeecy00iq", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "api::website-setting.website-setting", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ghh97wxc4rzcfdi5mpbr8mcf", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "actionParameters": {}, "subject": "api::website-setting.website-setting", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "c8yfn3d24qd0fi1nqcn5jtea", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -1034,7 +1192,9 @@ "triggerMatomoScript.trackingScripts.enabled" ] }, - "conditions": [] + "conditions": [], + "documentId": "kra9b8xgg2fj8877386nbvjv", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -1047,224 +1207,288 @@ "triggerMatomoScript.trackingScripts.enabled" ] }, - "conditions": [] + "conditions": [], + "documentId": "qtre2b4rt2wlo3epuquyxs61", + "locale": null }, { "action": "admin::api-tokens.access", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "tpvarrxk6cbsrpiotezv7kxl", + "locale": null }, { "action": "admin::api-tokens.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "rxziy6thq72tdv2iduxtob10", + "locale": null }, { "action": "admin::api-tokens.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ib3g7z69pu4gvk9anysqscer", + "locale": null }, { "action": "admin::api-tokens.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "symrvaojks750azq4h9zd35m", + "locale": null }, { "action": "admin::api-tokens.regenerate", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "r977bat8iegk3g15tec99dgd", + "locale": null }, { "action": "admin::api-tokens.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "j5sd3d7ekqelhp8qlxruxm4o", + "locale": null }, { "action": "admin::marketplace.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ebb62y59hhkxoixs2bjzsf9o", + "locale": null }, { "action": "admin::project-settings.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "cej94bf0awchhh6xfq55xofr", + "locale": null }, { "action": "admin::project-settings.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "fuul4i9hxlhb5akz0jwy3hww", + "locale": null }, { "action": "admin::roles.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "am7zy6tlbkqguj060nylw9uf", + "locale": null }, { "action": "admin::roles.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "mxasduc0atxed5r8zrxjmwkr", + "locale": null }, { "action": "admin::roles.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "lms1ctxsqh0cnf0i60ycetxo", + "locale": null }, { "action": "admin::roles.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "jmm5x1a0hac65jeembslnpr5", + "locale": null }, { "action": "admin::transfer.tokens.access", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "jlmhhymuttqgfyrjiujokddr", + "locale": null }, { "action": "admin::transfer.tokens.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "xy4nwmaw4wuunygyllqt6lq4", + "locale": null }, { "action": "admin::transfer.tokens.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "t219vretloo4af3f7vkj9h2k", + "locale": null }, { "action": "admin::transfer.tokens.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "xdmmzswav20q8z992zajqbc1", + "locale": null }, { "action": "admin::transfer.tokens.regenerate", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "auvgtbqxoinjh8is6809h7k2", + "locale": null }, { "action": "admin::transfer.tokens.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "vyeqpiovbvxumegwxur3tw7r", + "locale": null }, { "action": "admin::users.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "fn1oau9mvmy2kt6tr17mhwzn", + "locale": null }, { "action": "admin::users.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "mm15s0yr54fuzlep2x8gtt5g", + "locale": null }, { "action": "admin::users.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "h78hkfozaynd61mboq4sn94l", + "locale": null }, { "action": "admin::users.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "adk08ampgh6sfb8ieyo3h5p5", + "locale": null }, { "action": "admin::webhooks.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "c2dea1ct0g3jqkcsn5z4872t", + "locale": null }, { "action": "admin::webhooks.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "jjchtjpvswjcpezaz0x3wpc9", + "locale": null }, { "action": "admin::webhooks.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "cwiagnam227k9btdyk1b0whq", + "locale": null }, { "action": "admin::webhooks.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ewrdeqj7tx4twsghukgqxxki", + "locale": null }, { "action": "plugin::config-sync.menu-link", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "qz2ymimjppmm9fnzsznqsxze", + "locale": null }, { "action": "plugin::config-sync.settings.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "rq0ucj22tokjz1mp10f4aaml", + "locale": null }, { "action": "plugin::content-manager.collection-types.configure-view", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "mwq5vztqf1qmll7qr7wtafjc", + "locale": null }, { "action": "plugin::content-manager.components.configure-layout", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "jn3v2po1y4uu7siaz37sxcf0", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -1283,14 +1507,27 @@ "role" ] }, - "conditions": [] + "conditions": [], + "documentId": "bjtvv0abmz785lr8luaiwkmc", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "actionParameters": {}, "subject": "plugin::users-permissions.user", "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "p6lq3o2gt6mgw9c0w8hr7tca", + "locale": null + }, + { + "action": "plugin::content-manager.explorer.publish", + "actionParameters": {}, + "subject": "plugin::users-permissions.user", + "properties": {}, + "conditions": [], + "documentId": "ebuqcm3thrgd4dqdwzf0di2i", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -1309,7 +1546,9 @@ "role" ] }, - "conditions": [] + "conditions": [], + "documentId": "remddp6qd8k0yny7f7w6e4lw", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -1328,189 +1567,243 @@ "role" ] }, - "conditions": [] + "conditions": [], + "documentId": "y1zxuoaqez0wzes3n6l7ky11", + "locale": null }, { "action": "plugin::content-manager.single-types.configure-view", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "sb7f2gy69ycms17ohhd16cd7", + "locale": null }, { "action": "plugin::content-type-builder.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ct5xgdiejox9olau1ntrye3m", + "locale": null }, { "action": "plugin::email.settings.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "pe5x5u0p8kw0pnhx2tprg2q4", + "locale": null }, { "action": "plugin::i18n.locale.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "hun8qoto63m4mwbft5a4k7le", + "locale": null }, { "action": "plugin::i18n.locale.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "lgkjsm0k11w7bp8zp1ergumv", + "locale": null }, { "action": "plugin::i18n.locale.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "qsukq5ct8qgf91gc0re3fvbq", + "locale": null }, { "action": "plugin::i18n.locale.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "yf1hfn5woedrfav9ozhmsl7z", + "locale": null }, { - "action": "plugin::import-export-entries.export", + "action": "plugin::strapi-tiptap-editor.settings.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ojapsh7tgtwkws3w79m72f80", + "locale": null }, { - "action": "plugin::import-export-entries.import", + "action": "plugin::strapi-tiptap-editor.settings.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "cfjpp850u173quglr7s6wk9g", + "locale": null }, { "action": "plugin::upload.assets.copy-link", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "sht32z5s1sqlfvycib20kxt6", + "locale": null }, { "action": "plugin::upload.assets.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "uionxvq6sjut4a72hci3s9el", + "locale": null }, { "action": "plugin::upload.assets.download", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "jghdskagv1bqs04cl6773obo", + "locale": null }, { "action": "plugin::upload.assets.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ld8ons4p7hg4ovtsk42sjyxu", + "locale": null }, { "action": "plugin::upload.configure-view", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "gb3s53e8s9bx1bw8n2lag1gs", + "locale": null }, { "action": "plugin::upload.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "p2hzl901w7otra2wfzlezlnt", + "locale": null }, { "action": "plugin::upload.settings.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "y0ft9k2ufpyc9xo9rd038o3d", + "locale": null }, { "action": "plugin::users-permissions.advanced-settings.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "mibyyri4hxv92bc86o8mg5v3", + "locale": null }, { "action": "plugin::users-permissions.advanced-settings.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "sywkat3axi878nrnnext76ro", + "locale": null }, { "action": "plugin::users-permissions.email-templates.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "a8ew3p4k7dpijcnah1n1xyit", + "locale": null }, { "action": "plugin::users-permissions.email-templates.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "ysca9maxrsabmjxecsl0eem4", + "locale": null }, { "action": "plugin::users-permissions.providers.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "klns9w4au4spuv8ch9qze65r", + "locale": null }, { "action": "plugin::users-permissions.providers.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "xmq5ob6c76ti1a33x5505knv", + "locale": null }, { "action": "plugin::users-permissions.roles.create", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "lmzuyl4thdjtbh3o1fss17xu", + "locale": null }, { "action": "plugin::users-permissions.roles.delete", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "rywesz39my9ngsyozu3dyi9u", + "locale": null }, { "action": "plugin::users-permissions.roles.read", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "tf2aioftolu7ihjfucep688d", + "locale": null }, { "action": "plugin::users-permissions.roles.update", "actionParameters": {}, "subject": null, "properties": {}, - "conditions": [] + "conditions": [], + "documentId": "fzoaa6csludhrph5yxkqxhx9", + "locale": null } ] } diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.additional-information-field.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.additional-information-field.json index d1a31fc07..8513a078c 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.additional-information-field.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.additional-information-field.json @@ -46,10 +46,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "uuid", "contentBlock"], + "list": ["id", "uuid", "contentBlock", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.additional-information.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.additional-information.json index e250e98fa..eaa3e9835 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.additional-information.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.additional-information.json @@ -6,7 +6,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "additional_information"], + "list": ["id", "additional_information", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.afdelingen.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.afdelingen.json index 0f9a040fc..6cc914dc0 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.afdelingen.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.afdelingen.json @@ -60,6 +60,14 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.antwoord.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.antwoord.json index 83146c0b4..2982e2fcb 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.antwoord.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.antwoord.json @@ -60,10 +60,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "kennisartikelCategorie", "label"], + "list": ["id", "kennisartikelCategorie", "label", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.audience.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.audience.json index d1e3b02d5..edde090fd 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.audience.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.audience.json @@ -33,10 +33,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "type"], + "list": ["id", "type", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.catalogi-meta.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.catalogi-meta.json index 3a1c5240a..ac1cc20ad 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.catalogi-meta.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.catalogi-meta.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -89,6 +89,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-aspect-beschrijving.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-aspect-beschrijving.json index 6d91a5ec8..d8a2fa56a 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-aspect-beschrijving.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-aspect-beschrijving.json @@ -47,10 +47,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "onderwerp", "uitleg"], + "list": ["id", "onderwerp", "uitleg", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-beschrijving.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-beschrijving.json index d30c47e30..148df6b71 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-beschrijving.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-beschrijving.json @@ -89,6 +89,14 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-metadata.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-metadata.json index 411a6ab40..7cafa39dd 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-metadata.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.cim-pdc-product-metadata.json @@ -215,6 +215,14 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact-information-public.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact-information-public.json index cc2296a2b..b48da20da 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact-information-public.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact-information-public.json @@ -6,7 +6,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "contact_information_public"], + "list": ["id", "contact_information_public", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact-information-rich-text.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact-information-rich-text.json index 481094a29..0b92883e4 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact-information-rich-text.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact-information-rich-text.json @@ -46,10 +46,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "label"], + "list": ["id", "label", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact.json index cabc2719f..2c797561c 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.contact.json @@ -47,10 +47,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "name", "email"], + "list": ["id", "name", "email", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.e-form.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.e-form.json index 6b2a26ae8..26b1fb614 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.e-form.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.e-form.json @@ -33,10 +33,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "linkedEForm"], + "list": ["id", "linkedEForm", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.faq.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.faq.json index 54e3c1dd4..abf5997b5 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.faq.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.faq.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -48,10 +48,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "pdc_faq", "kennisartikelCategorie"], + "list": ["id", "pdc_faq", "kennisartikelCategorie", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.flo-legal-form.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.flo-legal-form.json index 4862a29ef..94f0ba23a 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.flo-legal-form.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.flo-legal-form.json @@ -32,10 +32,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "floLegalFormSelector"], + "list": ["id", "floLegalFormSelector", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-block-content.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-block-content.json index 936a546eb..d29c92ef2 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-block-content.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-block-content.json @@ -6,7 +6,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "internal_field"], + "list": ["id", "internal_field", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-content-block-component.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-content-block-component.json index f24c5a8ab..613906571 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-content-block-component.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-content-block-component.json @@ -46,10 +46,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "kennisartikelCategorie"], + "list": ["id", "kennisartikelCategorie", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-content-block.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-content-block.json index cc57658eb..16da93386 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-content-block.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-content-block.json @@ -6,7 +6,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -18,10 +18,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id"], + "list": ["id", "documentId"], "edit": [] }, "uid": "components.internal-content-block", diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-field.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-field.json index 6f28f8631..53ff743f1 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-field.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.internal-field.json @@ -60,6 +60,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.kennisartikel.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.kennisartikel.json index 9bb1f8a3d..9f6e21c6a 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.kennisartikel.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.kennisartikel.json @@ -116,6 +116,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.metadata.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.metadata.json index d3d351f5a..d235991a3 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.metadata.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.metadata.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -75,10 +75,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "singleDigitalGateway", "attachementAdded"], + "list": ["id", "singleDigitalGateway", "attachementAdded", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.online-request.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.online-request.json index 7247d1a42..a2b2b2fe8 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.online-request.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.online-request.json @@ -33,10 +33,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "type"], + "list": ["id", "type", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.price.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.price.json index dc6bd7552..48f99f259 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.price.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.price.json @@ -75,6 +75,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.spatial.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.spatial.json index b44cf5725..10df490d0 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.spatial.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.spatial.json @@ -47,10 +47,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "resourceIdentifier", "scheme"], + "list": ["id", "resourceIdentifier", "scheme", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.tracking-scripts.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.tracking-scripts.json index 93e68d353..6dcb5a0b9 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.tracking-scripts.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.tracking-scripts.json @@ -46,10 +46,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "slug", "enabled"], + "list": ["id", "slug", "enabled", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.trefwoorden.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.trefwoorden.json index 351c7a2e2..842163fc1 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.trefwoorden.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.trefwoorden.json @@ -32,10 +32,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "trefwoord"], + "list": ["id", "trefwoord", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.trigger-matomo-script.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.trigger-matomo-script.json index 485f099d7..eea49193b 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.trigger-matomo-script.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.trigger-matomo-script.json @@ -46,10 +46,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "title"], + "list": ["id", "title", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.url.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.url.json index 0e3482d2f..add6a7ebf 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.url.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.url.json @@ -33,10 +33,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "value"], + "list": ["id", "value", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion-section.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion-section.json index 93b21d3d1..b4416da90 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion-section.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion-section.json @@ -75,6 +75,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion.json index 09db5353e..957c55f2d 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -47,10 +47,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "item", "kennisartikelCategorie"], + "list": ["id", "item", "kennisartikelCategorie", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-link.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-link.json index a59bf9f0d..8ab62c1ee 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-link.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-link.json @@ -47,10 +47,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "href", "textContent"], + "list": ["id", "href", "textContent", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-list-item.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-list-item.json index a425f0a28..e5937e394 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-list-item.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-list-item.json @@ -47,10 +47,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "link", "title"], + "list": ["id", "link", "title", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-list.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-list.json index b5b3bf67f..69ebab2ec 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-list.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer-list.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "listItem"], + "list": ["id", "listItem", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer.json index b8376383d..9525443b1 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-footer.json @@ -75,6 +75,14 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-image.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-image.json index 41c9172ca..34861faed 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-image.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-image.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -47,10 +47,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "imageData", "kennisartikelCategorie"], + "list": ["id", "imageData", "kennisartikelCategorie", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-link.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-link.json index 6b8b05380..3d6efa30d 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-link.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-link.json @@ -89,6 +89,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-logo-button.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-logo-button.json index 7f93e38fb..1b8ae7a8f 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-logo-button.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-logo-button.json @@ -117,6 +117,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-multi-columns-button-item.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-multi-columns-button-item.json index 3eb776ff7..2dfe5ef68 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-multi-columns-button-item.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-multi-columns-button-item.json @@ -61,6 +61,14 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-multi-columns-button.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-multi-columns-button.json index 0bd260871..77b89ed16 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-multi-columns-button.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-multi-columns-button.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -47,10 +47,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "column", "kennisartikelCategorie"], + "list": ["id", "column", "kennisartikelCategorie", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-navigation-link.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-navigation-link.json index da3b2b7e4..2dba8cf87 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-navigation-link.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-navigation-link.json @@ -47,10 +47,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "textContent", "href"], + "list": ["id", "textContent", "href", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-navigation.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-navigation.json index 26f17bdca..493042362 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-navigation.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-navigation.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "navigationList"], + "list": ["id", "navigationList", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-rich-text.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-rich-text.json index 25f3cb086..054a614a8 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-rich-text.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-rich-text.json @@ -61,10 +61,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "kennisartikelCategorie", "label"], + "list": ["id", "kennisartikelCategorie", "label", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-social-media-link.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-social-media-link.json index b7a86c114..0031efda5 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-social-media-link.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-social-media-link.json @@ -61,6 +61,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-social-media-list.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-social-media-list.json index e8ddbd4d2..c07cbd8fc 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-social-media-list.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-social-media-list.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "link"], + "list": ["id", "link", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-spotlight.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-spotlight.json index 1bc01e36e..e0834793d 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-spotlight.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-spotlight.json @@ -75,6 +75,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-top-task-link.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-top-task-link.json index 1dfff562f..22dce70e9 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-top-task-link.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-top-task-link.json @@ -61,6 +61,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-top-tasks.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-top-tasks.json index 54f62aa26..3255fa506 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-top-tasks.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-top-tasks.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "link"], + "list": ["id", "link", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.vac-uitklapmenu.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.vac-uitklapmenu.json index 4606f4a31..b1f0b92b0 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.vac-uitklapmenu.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.vac-uitklapmenu.json @@ -144,6 +144,14 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.vac.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.vac.json index 4c320b42e..5d846c1ea 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.vac.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.vac.json @@ -130,6 +130,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.verantwoordelijke-organisatie.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.verantwoordelijke-organisatie.json index 3d4d450db..b43144d7c 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.verantwoordelijke-organisatie.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.verantwoordelijke-organisatie.json @@ -60,6 +60,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##seo.meta.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##seo.meta.json index 39e48a122..9197552b4 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##seo.meta.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##seo.meta.json @@ -75,6 +75,14 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token-permission.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token-permission.json index 4d40209f7..540f85c4e 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token-permission.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token-permission.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::admin::api-token-permission", "value": { - "uid": "admin::api-token-permission", "settings": { "bulkable": true, "filterable": true, @@ -106,6 +105,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -122,7 +129,8 @@ } ] ] - } + }, + "uid": "admin::api-token-permission" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json index 1444a41ff..a783ee1c7 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::admin::api-token", "value": { - "uid": "admin::api-token", "settings": { "bulkable": true, "filterable": true, @@ -76,6 +75,20 @@ "sortable": true } }, + "encryptedKey": { + "edit": { + "label": "encryptedKey", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "encryptedKey", + "searchable": true, + "sortable": true + } + }, "lastUsedAt": { "edit": { "label": "lastUsedAt", @@ -190,6 +203,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -234,9 +255,16 @@ "name": "lifespan", "size": 4 } + ], + [ + { + "name": "encryptedKey", + "size": 6 + } ] ] - } + }, + "uid": "admin::api-token" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json index 02c3be216..cc332ff43 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json @@ -162,6 +162,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json index 20143cfd5..c5ce01351 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::admin::role", "value": { - "uid": "admin::role", "settings": { "bulkable": true, "filterable": true, @@ -149,6 +148,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -181,7 +188,8 @@ } ] ] - } + }, + "uid": "admin::role" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##session.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##session.json new file mode 100644 index 000000000..c920aaac4 --- /dev/null +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##session.json @@ -0,0 +1,272 @@ +{ + "key": "plugin_content_manager_configuration_content_types::admin::session", + "value": { + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "relationOpenMode": "modal", + "mainField": "userId", + "defaultSortBy": "userId", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "id", + "searchable": true, + "sortable": true + } + }, + "userId": { + "edit": { + "label": "userId", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "userId", + "searchable": true, + "sortable": true + } + }, + "sessionId": { + "edit": { + "label": "sessionId", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "sessionId", + "searchable": true, + "sortable": true + } + }, + "childId": { + "edit": { + "label": "childId", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "childId", + "searchable": true, + "sortable": true + } + }, + "deviceId": { + "edit": { + "label": "deviceId", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "deviceId", + "searchable": true, + "sortable": true + } + }, + "origin": { + "edit": { + "label": "origin", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "origin", + "searchable": true, + "sortable": true + } + }, + "expiresAt": { + "edit": { + "label": "expiresAt", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "expiresAt", + "searchable": true, + "sortable": true + } + }, + "absoluteExpiresAt": { + "edit": { + "label": "absoluteExpiresAt", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "absoluteExpiresAt", + "searchable": true, + "sortable": true + } + }, + "status": { + "edit": { + "label": "status", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "status", + "searchable": true, + "sortable": true + } + }, + "type": { + "edit": { + "label": "type", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "type", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "createdAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "createdAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "updatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "updatedAt", + "searchable": true, + "sortable": true + } + }, + "createdBy": { + "edit": { + "label": "createdBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "createdBy", + "searchable": true, + "sortable": true + } + }, + "updatedBy": { + "edit": { + "label": "updatedBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "updatedBy", + "searchable": true, + "sortable": true + } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": ["id", "userId", "sessionId", "childId"], + "edit": [ + [ + { + "name": "userId", + "size": 6 + }, + { + "name": "sessionId", + "size": 6 + } + ], + [ + { + "name": "childId", + "size": 6 + }, + { + "name": "deviceId", + "size": 6 + } + ], + [ + { + "name": "origin", + "size": 6 + }, + { + "name": "expiresAt", + "size": 6 + } + ], + [ + { + "name": "absoluteExpiresAt", + "size": 6 + }, + { + "name": "status", + "size": 6 + } + ], + [ + { + "name": "type", + "size": 6 + } + ] + ] + }, + "uid": "admin::session" + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token-permission.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token-permission.json index 56b0bbfe2..8a75f80a4 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token-permission.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token-permission.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::admin::transfer-token-permission", "value": { - "uid": "admin::transfer-token-permission", "settings": { "bulkable": true, "filterable": true, @@ -106,6 +105,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -122,7 +129,8 @@ } ] ] - } + }, + "uid": "admin::transfer-token-permission" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token.json index 6a700c881..fe7b33569 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::admin::transfer-token", "value": { - "uid": "admin::transfer-token", "settings": { "bulkable": true, "filterable": true, @@ -176,6 +175,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -218,7 +225,8 @@ } ] ] - } + }, + "uid": "admin::transfer-token" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json index aaab3201e..0dd39a4b7 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json @@ -232,6 +232,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##additional-information.additional-information.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##additional-information.additional-information.json index 44badb1f2..1bec58afb 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##additional-information.additional-information.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##additional-information.additional-information.json @@ -119,9 +119,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "title", "createdAt", "updatedAt"], "edit": [ [ { @@ -141,8 +150,7 @@ "size": 6 } ] - ], - "list": ["id", "title", "createdAt", "updatedAt"] + ] }, "uid": "api::additional-information.additional-information" }, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##contact-information-internal.contact-information-internal.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##contact-information-internal.contact-information-internal.json index 2f36e2818..16a8d2d37 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##contact-information-internal.contact-information-internal.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##contact-information-internal.contact-information-internal.json @@ -134,9 +134,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "title", "contentBlock", "internal_information"], "edit": [ [ { @@ -160,8 +169,7 @@ "size": 6 } ] - ], - "list": ["id", "title", "contentBlock", "internal_information"] + ] }, "uid": "api::contact-information-internal.contact-information-internal" }, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##contact-information-public.contact-information-public.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##contact-information-public.contact-information-public.json index a24080264..51524c4ef 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##contact-information-public.contact-information-public.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##contact-information-public.contact-information-public.json @@ -149,9 +149,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "title", "contentBlock", "internal_information"], "edit": [ [ { @@ -181,8 +190,7 @@ "size": 12 } ] - ], - "list": ["id", "title", "contentBlock", "internal_information"] + ] }, "uid": "api::contact-information-public.contact-information-public" }, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##internal-field.internal-field.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##internal-field.internal-field.json index 2d4e266db..7aeef92e0 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##internal-field.internal-field.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##internal-field.internal-field.json @@ -149,9 +149,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "title", "content", "product"], "edit": [ [ { @@ -181,8 +190,7 @@ "size": 6 } ] - ], - "list": ["id", "title", "content", "product"] + ] }, "uid": "api::internal-field.internal-field" }, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##not-found-page.not-found-page.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##not-found-page.not-found-page.json index 8d15acb9a..fd4a80ae7 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##not-found-page.not-found-page.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##not-found-page.not-found-page.json @@ -105,6 +105,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##open-forms-error-page.open-forms-error-page.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##open-forms-error-page.open-forms-error-page.json index f843df124..7ee48cb1c 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##open-forms-error-page.open-forms-error-page.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##open-forms-error-page.open-forms-error-page.json @@ -118,9 +118,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "createdAt", "updatedAt", "title"], "edit": [ [ { @@ -138,8 +147,7 @@ "size": 12 } ] - ], - "list": ["id", "createdAt", "updatedAt", "title"] + ] }, "uid": "api::open-forms-error-page.open-forms-error-page" }, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-category.pdc-category.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-category.pdc-category.json index 7882e59a1..6a5b1b9b2 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-category.pdc-category.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-category.pdc-category.json @@ -106,9 +106,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "title", "createdAt", "updatedAt"], "edit": [ [ { @@ -120,8 +129,7 @@ "size": 6 } ] - ], - "list": ["id", "title", "createdAt", "updatedAt"] + ] } }, "type": "object", diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-faq.pdc-faq.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-faq.pdc-faq.json index cbcedf82f..0015c385b 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-faq.pdc-faq.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-faq.pdc-faq.json @@ -105,9 +105,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "title", "faq", "createdAt"], "edit": [ [ { @@ -121,8 +130,7 @@ "size": 12 } ] - ], - "list": ["id", "title", "faq", "createdAt"] + ] } }, "type": "object", diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-home-page.pdc-home-page.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-home-page.pdc-home-page.json index a2b4082e9..4ad50bfa5 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-home-page.pdc-home-page.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-home-page.pdc-home-page.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::api::pdc-home-page.pdc-home-page", "value": { - "uid": "api::pdc-home-page.pdc-home-page", "settings": { "bulkable": true, "filterable": true, @@ -91,6 +90,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -103,7 +110,8 @@ } ] ] - } + }, + "uid": "api::pdc-home-page.pdc-home-page" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-subcategory.pdc-subcategory.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-subcategory.pdc-subcategory.json index e73699a32..f14b7afca 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-subcategory.pdc-subcategory.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-subcategory.pdc-subcategory.json @@ -136,9 +136,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "title", "createdAt", "updatedBy"], "edit": [ [ { @@ -162,8 +171,7 @@ "size": 6 } ] - ], - "list": ["id", "title", "createdAt", "updatedBy"] + ] } }, "type": "object", diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-template.pdc-template.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-template.pdc-template.json index b3e803d07..0844d1724 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-template.pdc-template.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##pdc-template.pdc-template.json @@ -91,10 +91,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "createdAt", "updatedAt"], + "list": ["id", "createdAt", "updatedAt", "documentId"], "edit": [ [ { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##price.price.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##price.price.json index 12bc49d6d..30837bc95 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##price.price.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##price.price.json @@ -134,9 +134,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "price", "title", "products"], "edit": [ [ { @@ -160,8 +169,7 @@ "size": 6 } ] - ], - "list": ["id", "price", "title", "products"] + ] } }, "type": "object", diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##product.product.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##product.product.json index df2b1a3e1..d0f021817 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##product.product.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##product.product.json @@ -9,7 +9,8 @@ "pageSize": 10, "mainField": "title", "defaultSortBy": "title", - "defaultSortOrder": "ASC" + "defaultSortOrder": "ASC", + "relationOpenMode": "modal" }, "metadatas": { "id": { @@ -34,6 +35,20 @@ "sortable": true } }, + "slug": { + "edit": { + "label": "Slug", + "description": "Slug wordt automatisch gegenereerd op basis van de titel. Bij een nieuwe of aangepaste titel klik je op het update-icoon (ronde ververs-pijl) om de slug te genereren of bij te werken.", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "slug", + "searchable": true, + "sortable": true + } + }, "content": { "edit": { "label": "Inleiding content", @@ -119,20 +134,6 @@ "sortable": false } }, - "slug": { - "edit": { - "label": "Slug", - "description": "Een automatisch gegenereerde URL-vriendelijke versie van de titel voor een betere SEO en leesbaarheid.", - "placeholder": "", - "visible": true, - "editable": false - }, - "list": { - "label": "slug", - "searchable": true, - "sortable": true - } - }, "pdc_subcategories": { "edit": { "label": "Datasubcategorie", @@ -335,14 +336,27 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["title", "metaTags", "price", "uuid", "additional_information"], "edit": [ [ { "name": "title", "size": 6 + }, + { + "name": "slug", + "size": 6 } ], [ @@ -398,10 +412,6 @@ } ], [ - { - "name": "slug", - "size": 6 - }, { "name": "pdc_subcategories", "size": 4 @@ -437,8 +447,7 @@ "size": 6 } ] - ], - "list": ["title", "metaTags", "price", "uuid", "additional_information"] + ] } }, "type": "object", diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##productencatalogus.productencatalogus.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##productencatalogus.productencatalogus.json index 3650d4e03..27e1cd914 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##productencatalogus.productencatalogus.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##productencatalogus.productencatalogus.json @@ -261,9 +261,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["naam", "domein", "doelgroep", "documentId"], "edit": [ [ { @@ -333,8 +342,7 @@ "size": 6 } ] - ], - "list": ["naam", "domein", "doelgroep"] + ] } }, "type": "object", diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##vac.vac.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##vac.vac.json index 1715f11e7..3166d2b8a 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##vac.vac.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##vac.vac.json @@ -179,9 +179,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["title", "id", "createdAt", "relatedVACs"], "edit": [ [ { @@ -221,8 +230,7 @@ "size": 6 } ] - ], - "list": ["title", "id", "createdAt", "relatedVACs"] + ] }, "uid": "api::vac.vac" }, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##website-setting.website-setting.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##website-setting.website-setting.json index 11e99a493..954171643 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##website-setting.website-setting.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##website-setting.website-setting.json @@ -90,9 +90,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "triggerMatomoScript", "createdAt", "updatedAt"], "edit": [ [ { @@ -100,8 +109,7 @@ "size": 12 } ] - ], - "list": ["id", "triggerMatomoScript", "createdAt", "updatedAt"] + ] }, "uid": "api::website-setting.website-setting" }, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release-action.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release-action.json index e9b2ca03b..a800fb796 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release-action.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release-action.json @@ -47,16 +47,16 @@ "sortable": true } }, - "locale": { + "entryDocumentId": { "edit": { - "label": "locale", + "label": "entryDocumentId", "description": "", "placeholder": "", "visible": true, "editable": true }, "list": { - "label": "locale", + "label": "entryDocumentId", "searchable": true, "sortable": true } @@ -147,10 +147,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "type", "contentType", "locale"], + "list": ["id", "type", "contentType", "entryDocumentId"], "edit": [ [ { @@ -163,10 +171,6 @@ } ], [ - { - "name": "locale", - "size": 6 - }, { "name": "release", "size": 6 @@ -176,6 +180,10 @@ { "name": "isEntryValid", "size": 4 + }, + { + "name": "entryDocumentId", + "size": 6 } ] ] diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release.json index ac0ba087f..012ae34cd 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release.json @@ -161,6 +161,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##entity-notes.note.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##entity-notes.note.json index 6647b8b8a..672ba55c4 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##entity-notes.note.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##entity-notes.note.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::plugin::entity-notes.note", "value": { - "uid": "plugin::entity-notes.note", "settings": { "bulkable": true, "filterable": true, @@ -48,30 +47,30 @@ "sortable": true } }, - "entityId": { + "entitySlug": { "edit": { - "label": "entityId", + "label": "entitySlug", "description": "", "placeholder": "", "visible": true, "editable": true }, "list": { - "label": "entityId", + "label": "entitySlug", "searchable": true, "sortable": true } }, - "entitySlug": { + "entityId": { "edit": { - "label": "entitySlug", + "label": "entityId", "description": "", "placeholder": "", "visible": true, "editable": true }, "list": { - "label": "entitySlug", + "label": "entityId", "searchable": true, "sortable": true } @@ -133,6 +132,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -159,7 +166,8 @@ } ] ] - } + }, + "uid": "plugin::entity-notes.note" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json index 617fa5b5b..f6c86519e 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::plugin::i18n.locale", "value": { - "uid": "plugin::i18n.locale", "settings": { "bulkable": true, "filterable": true, @@ -105,6 +104,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -121,7 +128,8 @@ } ] ] - } + }, + "uid": "plugin::i18n.locale" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##publisher.action.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##publisher.action.json index b3e4dfd90..8e6e337cf 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##publisher.action.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##publisher.action.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::plugin::publisher.action", "value": { - "uid": "plugin::publisher.action", "settings": { "bulkable": true, "filterable": true, @@ -133,6 +132,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -159,7 +166,8 @@ } ] ] - } + }, + "uid": "plugin::publisher.action" }, "type": "object", "environment": null, diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##slugify.slug.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow-stage.json similarity index 61% rename from apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##slugify.slug.json rename to apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow-stage.json index 705acd962..e125a86ce 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##slugify.slug.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow-stage.json @@ -1,14 +1,14 @@ { - "key": "plugin_content_manager_configuration_content_types::plugin::slugify.slug", + "key": "plugin_content_manager_configuration_content_types::plugin::review-workflows.workflow-stage", "value": { - "uid": "plugin::slugify.slug", "settings": { "bulkable": true, "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", - "defaultSortBy": "id", + "relationOpenMode": "modal", + "mainField": "name", + "defaultSortBy": "name", "defaultSortOrder": "ASC" }, "metadatas": { @@ -20,34 +20,64 @@ "sortable": true } }, - "slug": { + "name": { "edit": { - "label": "slug", + "label": "name", "description": "", "placeholder": "", "visible": true, "editable": true }, "list": { - "label": "slug", + "label": "name", "searchable": true, "sortable": true } }, - "count": { + "color": { "edit": { - "label": "count", + "label": "color", "description": "", "placeholder": "", "visible": true, "editable": true }, "list": { - "label": "count", + "label": "color", "searchable": true, "sortable": true } }, + "workflow": { + "edit": { + "label": "workflow", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "workflow", + "searchable": true, + "sortable": true + } + }, + "permissions": { + "edit": { + "label": "permissions", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "action" + }, + "list": { + "label": "permissions", + "searchable": false, + "sortable": false + } + }, "createdAt": { "edit": { "label": "createdAt", @@ -105,23 +135,42 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "slug", "count", "createdAt"], + "list": ["id", "name", "color", "workflow"], "edit": [ [ { - "name": "slug", + "name": "name", "size": 6 }, { - "name": "count", - "size": 4 + "name": "color", + "size": 6 + } + ], + [ + { + "name": "workflow", + "size": 6 + }, + { + "name": "permissions", + "size": 6 } ] ] - } + }, + "uid": "plugin::review-workflows.workflow-stage" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow.json new file mode 100644 index 000000000..8411780cc --- /dev/null +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow.json @@ -0,0 +1,180 @@ +{ + "key": "plugin_content_manager_configuration_content_types::plugin::review-workflows.workflow", + "value": { + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "relationOpenMode": "modal", + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "name", + "searchable": true, + "sortable": true + } + }, + "stages": { + "edit": { + "label": "stages", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "stages", + "searchable": false, + "sortable": false + } + }, + "stageRequiredToPublish": { + "edit": { + "label": "stageRequiredToPublish", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "stageRequiredToPublish", + "searchable": true, + "sortable": true + } + }, + "contentTypes": { + "edit": { + "label": "contentTypes", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "contentTypes", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "createdAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "createdAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "updatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "updatedAt", + "searchable": true, + "sortable": true + } + }, + "createdBy": { + "edit": { + "label": "createdBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "createdBy", + "searchable": true, + "sortable": true + } + }, + "updatedBy": { + "edit": { + "label": "updatedBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "updatedBy", + "searchable": true, + "sortable": true + } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": ["id", "name", "stages", "stageRequiredToPublish"], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "stages", + "size": 6 + } + ], + [ + { + "name": "stageRequiredToPublish", + "size": 6 + } + ], + [ + { + "name": "contentTypes", + "size": 12 + } + ] + ] + }, + "uid": "plugin::review-workflows.workflow" + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json index 168c8f03a..eafe9d516 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::plugin::upload.file", "value": { - "uid": "plugin::upload.file", "settings": { "bulkable": true, "filterable": true, @@ -62,6 +61,20 @@ "sortable": true } }, + "focalPoint": { + "edit": { + "label": "focalPoint", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "focalPoint", + "searchable": false, + "sortable": false + } + }, "width": { "edit": { "label": "width", @@ -302,6 +315,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -390,9 +411,16 @@ "name": "folderPath", "size": 6 } + ], + [ + { + "name": "focalPoint", + "size": 12 + } ] ] - } + }, + "uid": "plugin::upload.file" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.folder.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.folder.json index 7a0d1d839..bcfe49768 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.folder.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.folder.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::plugin::upload.folder", "value": { - "uid": "plugin::upload.folder", "settings": { "bulkable": true, "filterable": true, @@ -164,6 +163,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -200,7 +207,8 @@ } ] ] - } + }, + "uid": "plugin::upload.folder" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json index abb849e94..a67498721 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::plugin::users-permissions.permission", "value": { - "uid": "plugin::users-permissions.permission", "settings": { "bulkable": true, "filterable": true, @@ -106,6 +105,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -122,7 +129,8 @@ } ] ] - } + }, + "uid": "plugin::users-permissions.permission" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json index b06d50c96..65843cc43 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::plugin::users-permissions.role", "value": { - "uid": "plugin::users-permissions.role", "settings": { "bulkable": true, "filterable": true, @@ -149,6 +148,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -181,7 +188,8 @@ } ] ] - } + }, + "uid": "plugin::users-permissions.role" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json index 45a804c0a..1e92b6b2d 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json @@ -1,7 +1,6 @@ { "key": "plugin_content_manager_configuration_content_types::plugin::users-permissions.user", "value": { - "uid": "plugin::users-permissions.user", "settings": { "bulkable": true, "filterable": true, @@ -204,6 +203,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -240,7 +247,8 @@ } ] ] - } + }, + "uid": "plugin::users-permissions.user" }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_upload_settings.json b/apps/pdc-dashboard/config/sync/core-store.plugin_upload_settings.json index 617c140a2..ff362f4fb 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_upload_settings.json +++ b/apps/pdc-dashboard/config/sync/core-store.plugin_upload_settings.json @@ -3,7 +3,8 @@ "value": { "sizeOptimization": true, "responsiveDimensions": true, - "autoOrientation": false + "autoOrientation": false, + "aiMetadata": false }, "type": "object", "environment": null, diff --git a/apps/pdc-dashboard/config/sync/core-store.strapi_unidirectional-join-table-repair-ran.json b/apps/pdc-dashboard/config/sync/core-store.strapi_unidirectional-join-table-repair-ran.json new file mode 100644 index 000000000..6daaf5206 --- /dev/null +++ b/apps/pdc-dashboard/config/sync/core-store.strapi_unidirectional-join-table-repair-ran.json @@ -0,0 +1,7 @@ +{ + "key": "strapi_unidirectional-join-table-repair-ran", + "value": true, + "type": "boolean", + "environment": null, + "tag": null +} diff --git a/apps/pdc-dashboard/config/sync/i18n-locale.en.json b/apps/pdc-dashboard/config/sync/i18n-locale.en.json index 968687a99..b9facb90a 100644 --- a/apps/pdc-dashboard/config/sync/i18n-locale.en.json +++ b/apps/pdc-dashboard/config/sync/i18n-locale.en.json @@ -1,4 +1,6 @@ { "name": "English (en)", - "code": "en" + "code": "en", + "documentId": "bub1yjy8st8nr9xb4herj56t", + "locale": null } diff --git a/apps/pdc-dashboard/config/sync/i18n-locale.nl.json b/apps/pdc-dashboard/config/sync/i18n-locale.nl.json index 3b81a8ea5..ed1ff3cee 100644 --- a/apps/pdc-dashboard/config/sync/i18n-locale.nl.json +++ b/apps/pdc-dashboard/config/sync/i18n-locale.nl.json @@ -1,4 +1,6 @@ { "name": "Dutch (nl)", - "code": "nl" + "code": "nl", + "documentId": "ukwwklkvdwfdq4dh8toncu7w", + "locale": null } diff --git a/apps/pdc-dashboard/config/sync/user-role.authenticated.json b/apps/pdc-dashboard/config/sync/user-role.authenticated.json index 10a2eddee..b86fe5f4c 100644 --- a/apps/pdc-dashboard/config/sync/user-role.authenticated.json +++ b/apps/pdc-dashboard/config/sync/user-role.authenticated.json @@ -2,12 +2,18 @@ "name": "Authenticated", "description": "Default role given to authenticated user.", "type": "authenticated", + "documentId": "bbkonrh3icg19dh5wbk3v2s8", + "locale": null, "permissions": [ { - "action": "plugin::users-permissions.auth.changePassword" + "action": "plugin::users-permissions.auth.changePassword", + "documentId": "lxkeief19w2m09yyuw3e1zqg", + "locale": null }, { - "action": "plugin::users-permissions.user.me" + "action": "plugin::users-permissions.user.me", + "documentId": "sbbhqp4665dibxnjsypivffa", + "locale": null } ] } diff --git a/apps/pdc-dashboard/config/sync/user-role.public.json b/apps/pdc-dashboard/config/sync/user-role.public.json index 95db022ab..61a817024 100644 --- a/apps/pdc-dashboard/config/sync/user-role.public.json +++ b/apps/pdc-dashboard/config/sync/user-role.public.json @@ -2,90 +2,133 @@ "name": "Public", "description": "Default role given to unauthenticated user.", "type": "public", + "documentId": "jzmsovccg6cv2sq1lnx491sl", + "locale": null, "permissions": [ { - "action": "api::not-found-page.not-found-page.find" + "action": "api::not-found-page.not-found-page.find", + "documentId": "be8kx2zajtb5nf9znl7rhkae", + "locale": null }, { - "action": "api::open-forms-error-page.open-forms-error-page.find" + "action": "api::open-forms-error-page.open-forms-error-page.find", + "documentId": "ov4iyvtbjijldlazqh0ckb8y", + "locale": null }, { - "action": "api::open-forms-error-page.open-forms-error-page.findOne" + "action": "api::open-forms-error-page.open-forms-error-page.findOne", + "documentId": "cu44tcuhjbjma4tx7aex5cdn", + "locale": null }, { - "action": "api::pdc-category.pdc-category.find" + "action": "api::pdc-category.pdc-category.find", + "documentId": "k6xl0msyi2s8dicum398ccdf", + "locale": null }, { - "action": "api::pdc-category.pdc-category.findOne" + "action": "api::pdc-category.pdc-category.findOne", + "documentId": "jt5meql0nx5ltrdl7zol8mik", + "locale": null }, { - "action": "api::pdc-faq.pdc-faq.find" + "action": "api::pdc-faq.pdc-faq.find", + "documentId": "bkj9kpa2ceeinpbw83lwua30", + "locale": null }, { - "action": "api::pdc-faq.pdc-faq.findOne" + "action": "api::pdc-faq.pdc-faq.findOne", + "documentId": "fuykxmkb6uy9k6nxj2rh9hok", + "locale": null }, { - "action": "api::pdc-home-page.pdc-home-page.find" + "action": "api::pdc-home-page.pdc-home-page.find", + "documentId": "ly8lsqpc71825kr7w1z7smvv", + "locale": null }, { - "action": "api::pdc-subcategory.pdc-subcategory.find" + "action": "api::pdc-subcategory.pdc-subcategory.find", + "documentId": "jelo8rnui9j9bsconrgcp18c", + "locale": null }, { - "action": "api::pdc-subcategory.pdc-subcategory.findOne" + "action": "api::pdc-subcategory.pdc-subcategory.findOne", + "documentId": "od5kduawnnro41s73rh83dnf", + "locale": null }, { - "action": "api::pdc-template.pdc-template.find" + "action": "api::pdc-template.pdc-template.find", + "documentId": "v6xwkobjredmbum9o3qxcsgv", + "locale": null }, { - "action": "api::price.price.find" + "action": "api::price.price.find", + "documentId": "rxkotnhuxo198gjx0y3d14wy", + "locale": null }, { - "action": "api::price.price.findOne" + "action": "api::price.price.findOne", + "documentId": "hlecph0x5ddv0moisg5zlesz", + "locale": null }, { - "action": "api::product.product.find" + "action": "api::product.product.find", + "documentId": "pgthnm7j42mxjwy7hzfbzlmt", + "locale": null }, { - "action": "api::product.product.findOne" + "action": "api::product.product.findOne", + "documentId": "d9hl0lk83kibi50pgj39uxtg", + "locale": null }, { - "action": "api::website-setting.website-setting.find" + "action": "api::website-setting.website-setting.find", + "documentId": "tn06z6oaix6zjx6w95g0tq1x", + "locale": null }, { - "action": "plugin::i18n.locales.listLocales" + "action": "plugin::i18n.locales.listLocales", + "documentId": "p8qwjxhkivxpril3qidn4rye", + "locale": null }, { - "action": "plugin::publisher.actionController.find" + "action": "plugin::publisher.actionController.find", + "documentId": "pf7eh7np3ohnro5ap4yd60vk", + "locale": null }, { - "action": "plugin::slugify.slugController.findSlug" + "action": "plugin::users-permissions.auth.callback", + "documentId": "i3aimdt77kdovyhhbkax2vxx", + "locale": null }, { - "action": "plugin::strapi-prometheus.prometheus.find" + "action": "plugin::users-permissions.auth.connect", + "documentId": "f3l6iyofhp0m4c004l5au2h2", + "locale": null }, { - "action": "plugin::strapi-prometheus.prometheus.findOne" + "action": "plugin::users-permissions.auth.emailConfirmation", + "documentId": "vx9d3m0ho71ktww9dxzu5tio", + "locale": null }, { - "action": "plugin::users-permissions.auth.callback" + "action": "plugin::users-permissions.auth.forgotPassword", + "documentId": "yz4uews5v5p4ch47r01uddhl", + "locale": null }, { - "action": "plugin::users-permissions.auth.connect" + "action": "plugin::users-permissions.auth.register", + "documentId": "m24pkaal44dvu3z3hpywm4fs", + "locale": null }, { - "action": "plugin::users-permissions.auth.emailConfirmation" + "action": "plugin::users-permissions.auth.resetPassword", + "documentId": "jfoh4314mxfqslsoy0ibkwzd", + "locale": null }, { - "action": "plugin::users-permissions.auth.forgotPassword" - }, - { - "action": "plugin::users-permissions.auth.register" - }, - { - "action": "plugin::users-permissions.auth.resetPassword" - }, - { - "action": "plugin::users-permissions.auth.sendEmailConfirmation" + "action": "plugin::users-permissions.auth.sendEmailConfirmation", + "documentId": "vk94izh3dzslp0y5cxld6o0a", + "locale": null } ] } diff --git a/apps/pdc-dashboard/declarations.d.ts b/apps/pdc-dashboard/declarations.d.ts new file mode 100644 index 000000000..446b4d75d --- /dev/null +++ b/apps/pdc-dashboard/declarations.d.ts @@ -0,0 +1,9 @@ +declare module '*.svg' { + const content: string; + export default content; +} + +declare module '*.ico' { + const content: string; + export default content; +} diff --git a/apps/pdc-dashboard/eslint.config.mjs b/apps/pdc-dashboard/eslint.config.mjs new file mode 100644 index 000000000..3a12f60e9 --- /dev/null +++ b/apps/pdc-dashboard/eslint.config.mjs @@ -0,0 +1,4 @@ +import { reactConfig } from '@frameless/eslint-config/react-internal'; + +/** @type {import("eslint").Linter.Config} */ +export default reactConfig; diff --git a/apps/pdc-dashboard/package.json b/apps/pdc-dashboard/package.json index fc3fb1c7a..d9e807d5d 100644 --- a/apps/pdc-dashboard/package.json +++ b/apps/pdc-dashboard/package.json @@ -11,59 +11,59 @@ "prebuild": "npm run clean", "build": "strapi build", "strapi": "strapi", - "lint": "eslint --ext .js src", - "lint:fix": "eslint --ext .js src --fix", + "env": "node src/env-init.mjs", + "lint": "eslint --report-unused-disable-directives .", + "lint:fix": "eslint --fix .", "lint-build": "tsc --noEmit --project tsconfig.json", - "clean": "rimraf build .cache dist", + "clean": "rimraf build .cache dist .strapi", "config-sync-export": "config-sync export", "config-sync-import": "config-sync import" }, "dependencies": { - "@frameless/preview-button": "1.2.0", - "@frameless/strapi-plugin-env-label": "0.0.0", - "@frameless/strapi-plugin-flo-legal-embed": "1.0.0", - "@frameless/strapi-plugin-language": "0.0.0", - "@frameless/strapi-plugin-gemeente-select": "0.0.0", - "@frameless/strapi-plugin-open-forms-embed": "0.0.0", - "@frameless/strapi-plugin-scheme-select": "0.0.0", - "@frameless/strapi-plugin-uniform-product-name": "0.0.0", - "@frameless/strapi-plugin-uuid-field": "0.0.0", - "@frameless/strapi-tiptap-editor": "0.3.2", - "@frameless/strapi-plugin-old-slugs": "1.0.0", - "@frameless/content-compliance-checker": "0.0.0", - "@strapi/plugin-graphql": "4.25.23", - "@strapi/plugin-i18n": "4.25.23", - "@strapi/plugin-users-permissions": "4.25.23", - "@strapi/strapi": "4.25.23", - "better-sqlite3": "12.2.0", - "pg": "8.11.3", - "slugify": "1.6.6", - "strapi-plugin-config-sync": "1.2.6", - "strapi-plugin-entity-relationship-chart": "4.14.6", - "strapi-plugin-import-export-entries": "1.23.1", - "strapi-plugin-notes": "1.1.3", - "strapi-plugin-publisher": "1.5.7", - "strapi-plugin-slugify": "2.3.8", - "strapi-prometheus": "1.9.1", + "@frameless/content-compliance-checker": "1.0.1", + "@frameless/preview-button": "2.1.0", + "@frameless/strapi-plugin-env-label": "1.0.1", + "@frameless/strapi-plugin-flo-legal-embed": "2.0.0", + "@frameless/strapi-plugin-language": "1.0.0", + "@frameless/strapi-plugin-nl-government-fields": "1.0.0", + "@frameless/strapi-plugin-notes": "1.0.0", + "@frameless/strapi-plugin-old-slugs": "2.0.0", + "@frameless/strapi-plugin-open-forms-embed": "1.0.0", + "@frameless/strapi-tiptap-editor": "1.0.3", + "@strapi/admin": "5.44.0", + "@strapi/design-system": "2.2.0", + "@strapi/icons": "2.2.0", + "@strapi/plugin-graphql": "5.44.0", + "@strapi/plugin-users-permissions": "5.44.0", + "@strapi/strapi": "5.44.0", + "better-sqlite3": "12.6.2", + "mime-types": "3.0.2", + "pg": "8.20.0", + "prom-client": "15.1.3", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "5.3.4", - "styled-components": "5.3.11" + "react-router-dom": "6.30.3", + "strapi-advanced-uuid": "2.1.1", + "strapi-plugin-config-sync": "3.2.0", + "strapi-plugin-publisher": "2.0.9", + "strapi-prometheus": "2.6.0", + "styled-components": "6.3.11" }, "author": { - "name": "" + "name": "Frameless" }, "strapi": { "uuid": "3d9f46d7-679c-4633-8821-761d8bbb5bea" }, "engines": { - "node": "20.x.x" + "node": "24.x.x", + "pnpm": "10.23.0" }, "license": "EUPL-1.2", "devDependencies": { - "node-sass": "8.0.0", - "sass-loader": "13.2.2", - "scss": "0.2.4" + "@frameless/eslint-config": "1.2.0", + "node-gyp": "12.2.0", + "sass": "1.98.0" }, "repository": { "type": "git+ssh", diff --git a/apps/pdc-dashboard/src/admin/app.ts b/apps/pdc-dashboard/src/admin/app.ts index 7c8628989..28bf9303f 100644 --- a/apps/pdc-dashboard/src/admin/app.ts +++ b/apps/pdc-dashboard/src/admin/app.ts @@ -1,5 +1,5 @@ -const UtrechtFavicon = require('./extensions/favicon.ico'); -const UtrechtLogo = require('./extensions/logo.svg'); +import UtrechtFavicon from './extensions/favicon.ico'; +import UtrechtLogo from './extensions/logo.svg'; const config = { locales: ['nl'], @@ -20,6 +20,7 @@ const config = { }, translations: { en: { + 'preview-button.button.pagePreview': 'Kiss Preview', 'app.components.HomePage.welcome': 'Welcome to the Utrecht PDC dashboard 👋', 'primary-action-button': 'Primary', 'secondary-action-button': 'Secondary', @@ -58,6 +59,7 @@ const config = { 'content-manager.components.empty-repeatable': 'Nog geen items. Klik op de + om iets toe te voegen.', 'content-manager.relation.publicationState.published': 'Gepubliceerd', 'content-manager.relation.publicationState.draft': 'Concept', + 'preview-button.button.pagePreview': 'Kiss-voorbeeld', 'Not Found Page': 'Pagina niet gevonden', 'primary-action-button': 'Inwoners (blauw)', 'secondary-action-button': 'Aanvullende knop (wit)', diff --git a/apps/pdc-dashboard/src/admin/tsconfig.json b/apps/pdc-dashboard/src/admin/tsconfig.json index 843155d34..11fa2920f 100644 --- a/apps/pdc-dashboard/src/admin/tsconfig.json +++ b/apps/pdc-dashboard/src/admin/tsconfig.json @@ -1,5 +1,5 @@ { "extends": "@strapi/typescript-utils/tsconfigs/admin", - "include": ["./"], + "include": ["./", "../../declarations.d.ts"], "exclude": ["node_modules/", "build/", "dist/", "**/*.test.ts"] } diff --git a/apps/pdc-dashboard/src/admin/vite.config.ts b/apps/pdc-dashboard/src/admin/vite.config.ts new file mode 100644 index 000000000..28e132fed --- /dev/null +++ b/apps/pdc-dashboard/src/admin/vite.config.ts @@ -0,0 +1,15 @@ +import { mergeConfig, type UserConfig } from 'vite'; + +export default (config: UserConfig) => { + return mergeConfig(config, { + resolve: { + alias: { + 'tippy.js': 'tippy.js/dist/tippy-bundle.umd.min.js', + }, + }, + + server: { + port: process.env.WATCH_PORT ? parseInt(process.env.WATCH_PORT, 10) : 4000, + }, + }); +}; diff --git a/apps/pdc-dashboard/src/admin/webpack.config.js b/apps/pdc-dashboard/src/admin/webpack.config.js deleted file mode 100644 index a4f1e046e..000000000 --- a/apps/pdc-dashboard/src/admin/webpack.config.js +++ /dev/null @@ -1,32 +0,0 @@ -const { NormalModuleReplacementPlugin } = require('webpack'); - -// eslint-disable-next-line no-undef -module.exports = (config) => { - config.plugins.push(new NormalModuleReplacementPlugin(/^tippy\.js$/, 'tippy.js/dist/tippy-bundle.umd.min.js')); - // Allow scss modules - config.resolve = { - ...config.resolve, - extensions: [...config.resolve.extensions, '.scss'], - }; - - // Configure a SASS loader - config.module.rules.push({ - test: /\.s[ac]ss$/i, - use: [ - 'style-loader', - 'css-loader', - 'sass-loader', - { - loader: 'sass-loader', - }, - ], - }); - // Make it possible to configure the watch server, particularly when using `strapi develop --watch-admin`. - // This is essential, especially considering that the openForms server is using port 8000. - config.devServer = { - ...config.devServer, - port: process.env.WATCH_PORT || 4000, - }; - - return config; -}; diff --git a/apps/pdc-dashboard/src/api/contact-information-public/content-types/contact-information-public/schema.json b/apps/pdc-dashboard/src/api/contact-information-public/content-types/contact-information-public/schema.json index 7205985a7..2189a3bf1 100644 --- a/apps/pdc-dashboard/src/api/contact-information-public/content-types/contact-information-public/schema.json +++ b/apps/pdc-dashboard/src/api/contact-information-public/content-types/contact-information-public/schema.json @@ -16,10 +16,9 @@ "type": "string" }, "contentBlock": { - "displayName": "rich-text", "type": "component", - "repeatable": true, - "component": "components.contact-information-rich-text" + "component": "components.contact-information-rich-text", + "repeatable": true }, "internal_information": { "type": "relation", diff --git a/apps/pdc-dashboard/src/api/not-found-page/content-types/not-found-page/schema.json b/apps/pdc-dashboard/src/api/not-found-page/content-types/not-found-page/schema.json index 7d37647e4..6f97aa595 100644 --- a/apps/pdc-dashboard/src/api/not-found-page/content-types/not-found-page/schema.json +++ b/apps/pdc-dashboard/src/api/not-found-page/content-types/not-found-page/schema.json @@ -30,7 +30,8 @@ "localized": true } }, - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" } } } diff --git a/apps/pdc-dashboard/src/api/open-forms-error-page/content-types/open-forms-error-page/schema.json b/apps/pdc-dashboard/src/api/open-forms-error-page/content-types/open-forms-error-page/schema.json index f36b96886..c87a4bb91 100644 --- a/apps/pdc-dashboard/src/api/open-forms-error-page/content-types/open-forms-error-page/schema.json +++ b/apps/pdc-dashboard/src/api/open-forms-error-page/content-types/open-forms-error-page/schema.json @@ -27,7 +27,8 @@ "unique": false }, "body": { - "type": "richtext", + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor", "pluginOptions": { "i18n": { "localized": true diff --git a/apps/pdc-dashboard/src/api/price/content-types/price/schema.json b/apps/pdc-dashboard/src/api/price/content-types/price/schema.json index 3508b098e..65ccc53ca 100644 --- a/apps/pdc-dashboard/src/api/price/content-types/price/schema.json +++ b/apps/pdc-dashboard/src/api/price/content-types/price/schema.json @@ -31,7 +31,7 @@ }, "uuid": { "type": "customField", - "customField": "plugin::uuid-field.uuid-field" + "customField": "plugin::strapi-advanced-uuid.uuid" } } } diff --git a/apps/pdc-dashboard/src/api/price/controllers/price.js b/apps/pdc-dashboard/src/api/price/controllers/price.js deleted file mode 100644 index bb7c64bc2..000000000 --- a/apps/pdc-dashboard/src/api/price/controllers/price.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -/** - * price controller - */ - -const { createCoreController } = require('@strapi/strapi').factories; - -module.exports = createCoreController('api::price.price'); diff --git a/apps/pdc-dashboard/src/api/price/controllers/price.ts b/apps/pdc-dashboard/src/api/price/controllers/price.ts new file mode 100644 index 000000000..b2bc86355 --- /dev/null +++ b/apps/pdc-dashboard/src/api/price/controllers/price.ts @@ -0,0 +1,7 @@ +/** + * price controller + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreController('api::price.price'); diff --git a/apps/pdc-dashboard/src/api/price/routes/price.js b/apps/pdc-dashboard/src/api/price/routes/price.js deleted file mode 100644 index 1280a12f8..000000000 --- a/apps/pdc-dashboard/src/api/price/routes/price.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -/** - * price router - */ - -const { createCoreRouter } = require('@strapi/strapi').factories; - -module.exports = createCoreRouter('api::price.price'); diff --git a/apps/pdc-dashboard/src/api/price/routes/price.ts b/apps/pdc-dashboard/src/api/price/routes/price.ts new file mode 100644 index 000000000..fad1bfc30 --- /dev/null +++ b/apps/pdc-dashboard/src/api/price/routes/price.ts @@ -0,0 +1,7 @@ +/** + * price router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::price.price'); diff --git a/apps/pdc-dashboard/src/api/price/services/price.js b/apps/pdc-dashboard/src/api/price/services/price.js deleted file mode 100644 index dcc12587b..000000000 --- a/apps/pdc-dashboard/src/api/price/services/price.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -/** - * price service - */ - -const { createCoreService } = require('@strapi/strapi').factories; - -module.exports = createCoreService('api::price.price'); diff --git a/apps/pdc-dashboard/src/api/price/services/price.ts b/apps/pdc-dashboard/src/api/price/services/price.ts new file mode 100644 index 000000000..fae089c4a --- /dev/null +++ b/apps/pdc-dashboard/src/api/price/services/price.ts @@ -0,0 +1,7 @@ +/** + * price service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::price.price'); diff --git a/apps/pdc-dashboard/src/api/product/content-types/product/schema.json b/apps/pdc-dashboard/src/api/product/content-types/product/schema.json index 607efe304..faf20bd10 100644 --- a/apps/pdc-dashboard/src/api/product/content-types/product/schema.json +++ b/apps/pdc-dashboard/src/api/product/content-types/product/schema.json @@ -18,30 +18,41 @@ "attributes": { "title": { "type": "string", + "pluginOptions": { + "i18n": { + "localized": true + } + }, "required": true, - "unique": true, + "unique": true + }, + "slug": { + "type": "uid", "pluginOptions": { "i18n": { "localized": true } - } + }, + "targetField": "title", + "required": true }, "content": { + "type": "customField", "pluginOptions": { "i18n": { "localized": true } }, - "type": "richtext", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor", "required": false }, "sections": { + "type": "dynamiczone", "pluginOptions": { "i18n": { "localized": true } }, - "type": "dynamiczone", "components": [ "components.utrecht-rich-text", "components.utrecht-logo-button", @@ -65,44 +76,35 @@ }, "metaTags": { "type": "component", - "repeatable": false, "pluginOptions": { "i18n": { "localized": true } }, - "component": "seo.meta" + "component": "seo.meta", + "repeatable": false }, "catalogiMeta": { "type": "component", - "repeatable": false, "pluginOptions": { "i18n": { "localized": true } }, "component": "components.catalogi-meta", + "repeatable": false, "required": false }, "metadata": { "type": "component", - "repeatable": false, + "private": true, "pluginOptions": { "i18n": { "localized": true } }, "component": "components.metadata", - "private": true - }, - "slug": { - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "type": "string", - "required": true + "repeatable": false }, "pdc_subcategories": { "type": "relation", @@ -112,13 +114,13 @@ }, "pdc_metadata": { "type": "component", - "repeatable": false, "pluginOptions": { "i18n": { "localized": true } }, - "component": "components.cim-pdc-product-metadata" + "component": "components.cim-pdc-product-metadata", + "repeatable": false }, "productencatalogus": { "type": "relation", @@ -127,23 +129,23 @@ "mappedBy": "producten" }, "uuid": { + "type": "customField", "pluginOptions": { "i18n": { "localized": true } }, - "type": "customField", - "customField": "plugin::uuid-field.uuid-field" + "customField": "plugin::strapi-advanced-uuid.uuid" }, "kennisartikelMetadata": { "type": "component", - "repeatable": false, "pluginOptions": { "i18n": { "localized": true } }, - "component": "components.kennisartikel" + "component": "components.kennisartikel", + "repeatable": false }, "additional_information": { "type": "relation", @@ -152,12 +154,12 @@ "mappedBy": "product" }, "oldSlugs": { + "type": "json", "pluginOptions": { "i18n": { "localized": true } - }, - "type": "json" + } }, "vacs": { "type": "relation", @@ -166,12 +168,12 @@ "inversedBy": "relatedProducts" }, "enable_kcm_survey": { + "type": "boolean", "pluginOptions": { "i18n": { "localized": true } }, - "type": "boolean", "default": true }, "contact_information_public": { diff --git a/apps/pdc-dashboard/src/components/components/additional-information-field.json b/apps/pdc-dashboard/src/components/components/additional-information-field.json index 6451f5c33..4a59c7d0c 100644 --- a/apps/pdc-dashboard/src/components/components/additional-information-field.json +++ b/apps/pdc-dashboard/src/components/components/additional-information-field.json @@ -7,7 +7,7 @@ "attributes": { "uuid": { "type": "customField", - "customField": "plugin::uuid-field.uuid-field" + "customField": "plugin::strapi-advanced-uuid.uuid" }, "contentBlock": { "type": "component", diff --git a/apps/pdc-dashboard/src/components/components/afdelingen.json b/apps/pdc-dashboard/src/components/components/afdelingen.json index f489c33c6..73088d4f1 100644 --- a/apps/pdc-dashboard/src/components/components/afdelingen.json +++ b/apps/pdc-dashboard/src/components/components/afdelingen.json @@ -8,7 +8,7 @@ "attributes": { "afdelingId": { "type": "customField", - "customField": "plugin::uuid-field.uuid-field", + "customField": "plugin::strapi-advanced-uuid.uuid", "required": true }, "afdelingNaam": { diff --git a/apps/pdc-dashboard/src/components/components/antwoord.json b/apps/pdc-dashboard/src/components/components/antwoord.json index bb2625e23..e8417b596 100644 --- a/apps/pdc-dashboard/src/components/components/antwoord.json +++ b/apps/pdc-dashboard/src/components/components/antwoord.json @@ -8,7 +8,8 @@ "options": {}, "attributes": { "content": { - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" }, "kennisartikelCategorie": { "type": "enumeration", diff --git a/apps/pdc-dashboard/src/components/components/cim-pdc-product-metadata.json b/apps/pdc-dashboard/src/components/components/cim-pdc-product-metadata.json index 65c243940..27ce6db4a 100644 --- a/apps/pdc-dashboard/src/components/components/cim-pdc-product-metadata.json +++ b/apps/pdc-dashboard/src/components/components/cim-pdc-product-metadata.json @@ -48,7 +48,7 @@ }, "uplProductNaam": { "type": "customField", - "customField": "plugin::uniform-product-name.uniform-product-name" + "customField": "plugin::nl-government-fields.uniform-product-name" }, "cimPdcProductBeschrijving": { "displayName": "CimPDC product beschrijving", diff --git a/apps/pdc-dashboard/src/components/components/contact-information-rich-text.json b/apps/pdc-dashboard/src/components/components/contact-information-rich-text.json index cc13b980f..acbc54491 100644 --- a/apps/pdc-dashboard/src/components/components/contact-information-rich-text.json +++ b/apps/pdc-dashboard/src/components/components/contact-information-rich-text.json @@ -6,7 +6,8 @@ "options": {}, "attributes": { "content": { - "type": "richtext", + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor", "required": true }, "label": { diff --git a/apps/pdc-dashboard/src/components/components/internal-content-block-component.json b/apps/pdc-dashboard/src/components/components/internal-content-block-component.json index 01c430bd9..8a6ba38e2 100644 --- a/apps/pdc-dashboard/src/components/components/internal-content-block-component.json +++ b/apps/pdc-dashboard/src/components/components/internal-content-block-component.json @@ -6,7 +6,8 @@ "options": {}, "attributes": { "content": { - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" }, "kennisartikelCategorie": { "type": "enumeration", diff --git a/apps/pdc-dashboard/src/components/components/internal-field.json b/apps/pdc-dashboard/src/components/components/internal-field.json index 5dbcdfad1..e3560bfc1 100644 --- a/apps/pdc-dashboard/src/components/components/internal-field.json +++ b/apps/pdc-dashboard/src/components/components/internal-field.json @@ -8,7 +8,7 @@ "attributes": { "uuid": { "type": "customField", - "customField": "plugin::uuid-field.uuid-field" + "customField": "plugin::strapi-advanced-uuid.uuid" }, "contentBlock": { "type": "component", diff --git a/apps/pdc-dashboard/src/components/components/kennisartikel.json b/apps/pdc-dashboard/src/components/components/kennisartikel.json index a1806f8f5..1cad9d1d5 100644 --- a/apps/pdc-dashboard/src/components/components/kennisartikel.json +++ b/apps/pdc-dashboard/src/components/components/kennisartikel.json @@ -30,11 +30,11 @@ }, "uuid": { "type": "customField", - "customField": "plugin::uuid-field.uuid-field" + "customField": "plugin::strapi-advanced-uuid.uuid" }, "upnUri": { "type": "customField", - "customField": "plugin::uniform-product-name.uniform-product-name", + "customField": "plugin::nl-government-fields.uniform-product-name", "required": true } } diff --git a/apps/pdc-dashboard/src/components/components/metadata.json b/apps/pdc-dashboard/src/components/components/metadata.json index 9616ae99d..86f1199b1 100644 --- a/apps/pdc-dashboard/src/components/components/metadata.json +++ b/apps/pdc-dashboard/src/components/components/metadata.json @@ -9,7 +9,6 @@ "singleDigitalGateway": { "type": "enumeration", "enum": ["ja", "nee"], - "required": true, "private": true }, "attachementAdded": { diff --git a/apps/pdc-dashboard/src/components/components/price.json b/apps/pdc-dashboard/src/components/components/price.json index 5b1b79ccd..f66513160 100644 --- a/apps/pdc-dashboard/src/components/components/price.json +++ b/apps/pdc-dashboard/src/components/components/price.json @@ -24,7 +24,7 @@ }, "uuid": { "type": "customField", - "customField": "plugin::uuid-field.uuid-field" + "customField": "plugin::strapi-advanced-uuid.uuid" } } } diff --git a/apps/pdc-dashboard/src/components/components/spatial.json b/apps/pdc-dashboard/src/components/components/spatial.json index 832571335..51e4d92b3 100644 --- a/apps/pdc-dashboard/src/components/components/spatial.json +++ b/apps/pdc-dashboard/src/components/components/spatial.json @@ -8,12 +8,12 @@ "attributes": { "resourceIdentifier": { "type": "customField", - "customField": "plugin::gemeente-select.gemeente", + "customField": "plugin::nl-government-fields.gemeente-select", "default": "http://standaarden.overheid.nl/owms/terms/Utrecht_(gemeente)" }, "scheme": { "type": "customField", - "customField": "plugin::scheme-select.scheme", + "customField": "plugin::nl-government-fields.authority-select", "required": true, "default": "{http://standaarden.overheid.nl/owms/terms/}Gemeente" } diff --git a/apps/pdc-dashboard/src/components/components/utrecht-accordion-section.json b/apps/pdc-dashboard/src/components/components/utrecht-accordion-section.json index 37dbf9e9d..c5a22a4d0 100644 --- a/apps/pdc-dashboard/src/components/components/utrecht-accordion-section.json +++ b/apps/pdc-dashboard/src/components/components/utrecht-accordion-section.json @@ -10,7 +10,8 @@ "type": "string" }, "body": { - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" }, "headingLevel": { "type": "integer", diff --git a/apps/pdc-dashboard/src/components/components/utrecht-footer.json b/apps/pdc-dashboard/src/components/components/utrecht-footer.json index 846e5af69..3d7236e04 100644 --- a/apps/pdc-dashboard/src/components/components/utrecht-footer.json +++ b/apps/pdc-dashboard/src/components/components/utrecht-footer.json @@ -15,7 +15,8 @@ "component": "components.utrecht-footer-list" }, "address": { - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" }, "socialMediaList": { "displayName": "social Media List", diff --git a/apps/pdc-dashboard/src/components/components/utrecht-rich-text.json b/apps/pdc-dashboard/src/components/components/utrecht-rich-text.json index adc66e9b6..bfc0c5cb7 100644 --- a/apps/pdc-dashboard/src/components/components/utrecht-rich-text.json +++ b/apps/pdc-dashboard/src/components/components/utrecht-rich-text.json @@ -7,7 +7,8 @@ "options": {}, "attributes": { "content": { - "type": "richtext", + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor", "required": true }, "kennisartikelCategorie": { diff --git a/apps/pdc-dashboard/src/components/components/utrecht-spotlight.json b/apps/pdc-dashboard/src/components/components/utrecht-spotlight.json index 66adba9d1..f2ed8f278 100644 --- a/apps/pdc-dashboard/src/components/components/utrecht-spotlight.json +++ b/apps/pdc-dashboard/src/components/components/utrecht-spotlight.json @@ -7,7 +7,8 @@ "options": {}, "attributes": { "content": { - "type": "richtext", + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor", "required": true }, "type": { diff --git a/apps/pdc-dashboard/src/components/components/vac-uitklapmenu.json b/apps/pdc-dashboard/src/components/components/vac-uitklapmenu.json index 297e5bd9d..a119a6b1d 100644 --- a/apps/pdc-dashboard/src/components/components/vac-uitklapmenu.json +++ b/apps/pdc-dashboard/src/components/components/vac-uitklapmenu.json @@ -10,7 +10,8 @@ "type": "string" }, "body": { - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" }, "headingLevel": { "type": "integer", @@ -31,10 +32,11 @@ }, "uuid": { "type": "customField", - "customField": "plugin::uuid-field.uuid-field" + "customField": "plugin::strapi-advanced-uuid.uuid" }, "toelichting": { - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" }, "trefwoorden": { "type": "component", diff --git a/apps/pdc-dashboard/src/components/components/vac.json b/apps/pdc-dashboard/src/components/components/vac.json index 13cc933ac..7a92db7d9 100644 --- a/apps/pdc-dashboard/src/components/components/vac.json +++ b/apps/pdc-dashboard/src/components/components/vac.json @@ -29,10 +29,11 @@ }, "uuid": { "type": "customField", - "customField": "plugin::uuid-field.uuid-field" + "customField": "plugin::strapi-advanced-uuid.uuid" }, "toelichting": { - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" }, "keywords": { "type": "text" diff --git a/apps/pdc-dashboard/src/components/components/verantwoordelijke-organisatie.json b/apps/pdc-dashboard/src/components/components/verantwoordelijke-organisatie.json index 8ca4ab08c..6c0d377bc 100644 --- a/apps/pdc-dashboard/src/components/components/verantwoordelijke-organisatie.json +++ b/apps/pdc-dashboard/src/components/components/verantwoordelijke-organisatie.json @@ -8,7 +8,7 @@ "attributes": { "owmsIdentifier": { "type": "customField", - "customField": "plugin::gemeente-select.gemeente", + "customField": "plugin::nl-government-fields.gemeente-select", "default": "http://standaarden.overheid.nl/owms/terms/Utrecht_(gemeente)", "required": true }, diff --git a/apps/pdc-dashboard/src/env-init.mjs b/apps/pdc-dashboard/src/env-init.mjs new file mode 100644 index 000000000..c1ac96828 --- /dev/null +++ b/apps/pdc-dashboard/src/env-init.mjs @@ -0,0 +1,32 @@ +import { config } from 'dotenv'; + +import envrc from '../../../.envrc.json' with { type: 'json' }; +import { initEnv, subsetConfig } from '../../../scripts/env-lib.mjs'; + +const variables = [ + 'ADMIN_JWT_SECRET', + 'API_TOKEN_SALT', + 'APP_KEYS', + 'FLO_LEGAL_API_TOKEN', + 'FLO_LEGAL_API_URL', + 'FRONTEND_PUBLIC_URL', + 'HOST', + 'JWT_SECRET', + 'NODE_ENV', + 'OPEN_FORMS_API_TOKEN', + 'OPEN_FORMS_API_URL', + 'PGADMIN_DEFAULT_EMAIL', + 'PGADMIN_DEFAULT_PASSWORD', + 'PORT', + 'PREVIEW_SECRET_TOKEN', + 'STRAPI_ENV_LABEL', + 'STRAPI_PRIVATE_URL', + 'STRAPI_PUBLIC_URL', + 'TRANSFER_TOKEN_SALT', +]; + +const init = () => { + initEnv('./.env', subsetConfig(envrc, variables), config().parsed); +}; + +init(); diff --git a/apps/pdc-dashboard/src/index.ts b/apps/pdc-dashboard/src/index.ts index 506999637..75f055ea9 100644 --- a/apps/pdc-dashboard/src/index.ts +++ b/apps/pdc-dashboard/src/index.ts @@ -8,7 +8,7 @@ export default { * This gives you an opportunity to extend code. */ - register(/*{ strapi }: { strapi: Strapi }*/) {}, + async register(/*{ strapi }: { strapi: Strapi }*/) {}, /** * An asynchronous bootstrap function that runs before @@ -17,5 +17,5 @@ export default { * This gives you an opportunity to set up your data model, * run jobs, or perform some special logic. */ - bootstrap(/* { strapi } */) {}, + async bootstrap(/* { strapi } */) {}, }; diff --git a/apps/pdc-dashboard/tsconfig.json b/apps/pdc-dashboard/tsconfig.json index c0a45b6a9..21089174f 100644 --- a/apps/pdc-dashboard/tsconfig.json +++ b/apps/pdc-dashboard/tsconfig.json @@ -6,5 +6,15 @@ "allowJs": true }, "include": ["./", "src/**/*.json"], - "exclude": ["node_modules/", "build/", "dist/", ".cache/", ".tmp/", "src/admin/", "**/*.test.ts", "src/plugins/**"] + "exclude": [ + "node_modules/", + "build/", + "dist/", + ".cache/", + ".tmp/", + "src/admin/", + "**/*.test.ts", + "src/plugins/**", + "src/env-init.mjs" + ] } diff --git a/apps/pdc-dashboard/vercel.json b/apps/pdc-dashboard/vercel.json new file mode 100644 index 000000000..fd1fe6b7a --- /dev/null +++ b/apps/pdc-dashboard/vercel.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://openapi.vercel.sh/vercel.json", + "buildCommand": "cd ../.. && pnpm run build", + "installCommand": "cd ../.. && pnpm install --frozen-lockfile", + "relatedProjects": ["prj_Kvn4W8zKiyR07V4aPYZCgLAQu2d9", "prj_Kvn4W8zKiyR07V4aPYZCgLAQu2d9"] +} diff --git a/apps/pdc-frontend/.eslintrc.json b/apps/pdc-frontend/.eslintrc.json deleted file mode 100644 index 1b12c0b1b..000000000 --- a/apps/pdc-frontend/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "next/core-web-vitals", - "settings": { - "next": { - "rootDir": "../pdc-frontend" - } - }, - "rules": { - "@next/next/no-html-link-for-pages": "off" - } -} diff --git a/apps/pdc-frontend/custom.d.ts b/apps/pdc-frontend/custom.d.ts index 5c1c18f6c..9dd3223b4 100644 --- a/apps/pdc-frontend/custom.d.ts +++ b/apps/pdc-frontend/custom.d.ts @@ -1 +1,3 @@ +declare module '@utrecht/component-library-css'; declare module '*.md'; +declare module '*.css'; diff --git a/apps/pdc-frontend/eslint.config.mjs b/apps/pdc-frontend/eslint.config.mjs new file mode 100644 index 000000000..3cf16a81b --- /dev/null +++ b/apps/pdc-frontend/eslint.config.mjs @@ -0,0 +1,26 @@ +import next from 'eslint-config-next'; +import nextCoreWebVitals from 'eslint-config-next/core-web-vitals'; +import nextTypescript from 'eslint-config-next/typescript'; +/* eslint-disable import/no-unresolved */ +import { nextJsConfig } from '@frameless/eslint-config/next-js'; + +const customConfig = { + languageOptions: { + globals: { + URL: 'readonly', + process: 'readonly', + __dirname: 'readonly', + }, + }, +}; + +export default [ + ...next, + ...nextCoreWebVitals, + ...nextTypescript, + ...nextJsConfig, + customConfig, + { + ignores: ['node_modules/**', '.next/**', 'out/**', 'build/**', 'next-env.d.ts'], + }, +]; diff --git a/apps/pdc-frontend/global.d.ts b/apps/pdc-frontend/global.d.ts deleted file mode 100644 index 0f8c4069c..000000000 --- a/apps/pdc-frontend/global.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ReactNode, Ref } from 'react'; - -declare module 'react' { - function experimental_useOptimistic( - passthrough: State, - ): [State, (action: State | ((pendingState: State) => State)) => void]; - function experimental_useOptimistic( - passthrough: State, - reducer: (state: State, action: Action) => State, - ): [State, (action: Action) => void]; -} diff --git a/apps/pdc-frontend/gql/fragment-masking.ts b/apps/pdc-frontend/gql/fragment-masking.ts index 2ba06f10b..961ae2dba 100644 --- a/apps/pdc-frontend/gql/fragment-masking.ts +++ b/apps/pdc-frontend/gql/fragment-masking.ts @@ -1,5 +1,6 @@ import { ResultOf, DocumentTypeDecoration, TypedDocumentNode } from '@graphql-typed-document-node/core'; import { FragmentDefinitionNode } from 'graphql'; + import { Incremental } from './graphql'; diff --git a/apps/pdc-frontend/gql/gql.ts b/apps/pdc-frontend/gql/gql.ts index 8535c3ecc..778e2d89c 100644 --- a/apps/pdc-frontend/gql/gql.ts +++ b/apps/pdc-frontend/gql/gql.ts @@ -13,19 +13,19 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ * Therefore it is highly recommended to use the babel or swc plugin for production. */ const documents = { - "\nquery getPDCHomePage($locale: I18NLocaleCode, $pageMode: PublicationState) {\n pdcHomePage(publicationState: $pageMode, locale: $locale) {\n data {\n attributes {\n components {\n ... on ComponentComponentsUtrechtTopTasks {\n __typename\n link {\n id\n textContent\n href\n topTaskIcons\n }\n }\n }\n }\n }\n }\n}\n": types.GetPdcHomePageDocument, - "\n query getAllProductsSlugQuery($locale: I18NLocaleCode, $page: Int, $pageSize: Int) {\n products(locale: $locale, pagination:{ page: $page, pageSize: $pageSize }, sort: \"title\") {\n meta {\n pagination {\n total\n page\n pageSize\n pageCount\n }\n }\n data {\n attributes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n }\n }\n": types.GetAllProductsSlugQueryDocument, - "\n query getAllProductsSitemap {\n products(locale: \"all\", pagination:{ start: 0, limit: -1}) {\n data {\n attributes {\n slug\n locale\n updatedAt\n }\n }\n }\n }\n": types.GetAllProductsSitemapDocument, - "\n query getAlphabeticallyProductsByLetterQuery($locale: I18NLocaleCode, $page: Int, $pageSize: Int, $startsWith: String) {\n products(locale: $locale, pagination:{ page: $page, pageSize: $pageSize }, filters: { title: { startsWith: $startsWith } }, sort: \"title\") {\n meta {\n pagination {\n total\n page\n pageSize\n pageCount\n }\n }\n data {\n attributes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n }\n }\n": types.GetAlphabeticallyProductsByLetterQueryDocument, - "\n query checkAlphabeticallyProductsAvailability($locale: I18NLocaleCode, $startsWith: String) {\n products(locale: $locale, filters: { title: { startsWith: $startsWith } }) {\n data {\n attributes {\n title\n }\n }\n }\n }\n": types.CheckAlphabeticallyProductsAvailabilityDocument, - "\n query getProductBySlug(\n $slug: String\n $locale: I18NLocaleCode\n $pageMode: PublicationState\n) {\n products(\n filters: { slug: { eq: $slug } }\n locale: $locale\n publicationState: $pageMode\n ) {\n data {\n id\n attributes {\n title\n slug\n metaTags {\n title\n description\n keymatch\n ogImage {\n data {\n attributes {\n url\n }\n }\n }\n }\n content\n enable_kcm_survey\n sections {\n ... on ComponentComponentsContactInformationPublic {\n __typename\n contact_information_public {\n data {\n attributes {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n }\n }\n }\n ... on ComponentComponentsUtrechtImage {\n __typename\n imageData {\n data {\n attributes {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsFloLegalForm {\n __typename\n id\n floLegalFormSelector\n }\n ... on ComponentComponentsUtrechtSpotlight {\n __typename\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n __typename\n }\n }\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n __typename\n column {\n id\n title\n logoButton {\n __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n __typename\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n __typename\n pdc_faq {\n data {\n attributes {\n title\n faq (pagination: {start: 0, limit: -1}) {\n body\n headingLevel\n id\n label\n }\n }\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item (pagination: {start: 0, limit: -1}) {\n body\n headingLevel\n id\n label\n }\n }\n }\n price {\n data {\n attributes {\n price( pagination: {start: 0, limit: -1} ) {\n currency\n id\n label\n uuid\n value\n }\n }\n }\n }\n localizations {\n data {\n attributes {\n locale\n slug\n }\n }\n }\n locale\n }\n }\n }\n}\n\n": types.GetProductBySlugDocument, - "\nquery getProductsOldSlugs($locale: I18NLocaleCode) {\n products(\n pagination: { start: 0, limit: -1 }\n filters: { oldSlugs: { ne: null } }\n locale: $locale\n ) {\n data {\n attributes {\n slug\n oldSlugs\n }\n }\n }\n}\n": types.GetProductsOldSlugsDocument, - "\n query getProductBySlugAndLocale($slug: String, $locale: I18NLocaleCode, $pageMode: PublicationState) {\n products(filters: { slug: { eq: $slug } }, locale: $locale, publicationState: $pageMode) {\n data {\n attributes {\n slug\n locale\n }\n }\n }\n }\n": types.GetProductBySlugAndLocaleDocument, - "\nquery getNotFoundPage($locale: I18NLocaleCode){\n notFoundPage(locale: $locale) {\n data {\n attributes {\n title\n body\n }\n }\n }\n}\n": types.GetNotFoundPageDocument, - "\nquery getTemplateData($locale: I18NLocaleCode, $pageMode: PublicationState) {\n pdcTemplate(publicationState: $pageMode, locale: $locale) {\n data {\n attributes {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n socialMediaList {\n id\n link {\n id\n textContent\n href\n icon\n }\n }\n }\n }\n }\n }\n }\n}\n\n": types.GetTemplateDataDocument, - "\nquery getOpenFormsTemplateData($locale: I18NLocaleCode, $pageMode: PublicationState) {\n pdcTemplate(publicationState: $pageMode, locale: $locale) {\n data {\n attributes {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n }\n }\n }\n }\n }\n}\n\n": types.GetOpenFormsTemplateDataDocument, - "\n query getOpenFormsErrorPage($locale: I18NLocaleCode, $pageMode: PublicationState, $type: String) {\n openFormsErrorPages(publicationState: $pageMode, locale: $locale, filters: { type: { eq: $type } }) {\n data {\n id\n attributes {\n title\n body\n type\n }\n }\n }\n }\n": types.GetOpenFormsErrorPageDocument, - "\n query getWebsiteSettings {\n websiteSetting {\n data {\n attributes {\n triggerMatomoScript {\n trackingScripts(pagination: { start: 0, limit: -1 }) {\n id\n title\n slug\n enabled\n }\n }\n }\n }\n }\n}\n": types.GetWebsiteSettingsDocument, + "\nquery getPDCHomePage($locale: I18NLocaleCode, $status: PublicationStatus) {\n pdcHomePage(status: $status, locale: $locale) {\n components {\n ... on ComponentComponentsUtrechtTopTasks {\n __typename\n link {\n id\n textContent\n href\n topTaskIcons\n }\n }\n }\n }\n}\n": types.GetPdcHomePageDocument, + "\nquery getAllProductsSlugQuery(\n $locale: I18NLocaleCode\n $page: Int\n $pageSize: Int\n) {\n products_connection(\n locale: $locale\n pagination: { page: $page, pageSize: $pageSize }\n sort: \"title\"\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n}\n": types.GetAllProductsSlugQueryDocument, + "\nquery getAllProductsSitemap {\n products(locale: \"nl\", pagination: { start: 0, limit: -1 }) {\n slug\n locale\n updatedAt\n }\n}\n": types.GetAllProductsSitemapDocument, + "\nquery getAlphabeticallyProductsByLetterQuery(\n $locale: I18NLocaleCode\n $page: Int\n $pageSize: Int\n $startsWith: String\n) {\n products_connection(\n locale: $locale\n pagination: { page: $page, pageSize: $pageSize }\n filters: { title: { startsWith: $startsWith } }\n sort: \"title\"\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n}\n": types.GetAlphabeticallyProductsByLetterQueryDocument, + "\n query checkAlphabeticallyProductsAvailability($locale: I18NLocaleCode, $startsWith: String) {\n products(locale: $locale, filters: { title: { startsWith: $startsWith } }) {\n title\n }\n }\n": types.CheckAlphabeticallyProductsAvailabilityDocument, + "\nquery getProductBySlug(\n $slug: String\n $locale: I18NLocaleCode\n $status: PublicationStatus\n) {\n products(\n filters: { slug: { eq: $slug } }\n locale: $locale\n status: $status # Note: publicationState is often changed to status in v5\n ) {\n documentId # Use documentId instead of id\n title\n slug\n metaTags {\n title\n description\n keymatch\n ogImage {\n url # Flattened: no more data > attributes\n }\n }\n content\n enable_kcm_survey\n sections {\n __typename\n ... on ComponentComponentsContactInformationPublic {\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n }\n ... on ComponentComponentsUtrechtImage {\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsFloLegalForm {\n id\n floLegalFormSelector\n }\n ... on ComponentComponentsUtrechtSpotlight {\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n }\n }\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n column {\n id\n title\n logoButton {\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n pdc_faq {\n title\n faq(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n item(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n price {\n price(pagination: { start: 0, limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n localizations {\n locale\n slug\n }\n locale\n }\n}\n\n": types.GetProductBySlugDocument, + "\nquery getProductsOldSlugs($locale: I18NLocaleCode) {\n products(\n pagination: { start: 0, limit: -1 }\n filters: { oldSlugs: { ne: null } }\n locale: $locale\n ) {\n slug\n oldSlugs\n }\n}\n": types.GetProductsOldSlugsDocument, + "\nquery getProductBySlugAndLocale(\n $slug: String\n $locale: I18NLocaleCode\n $status: PublicationStatus\n) {\n products(\n filters: { slug: { eq: $slug } }\n locale: $locale\n status: $status\n ) {\n slug\n locale\n }\n}\n": types.GetProductBySlugAndLocaleDocument, + "\nquery getNotFoundPage($locale: I18NLocaleCode) {\n notFoundPage(locale: $locale) {\n title\n body\n }\n}\n": types.GetNotFoundPageDocument, + "\nquery getTemplateData($locale: I18NLocaleCode, $status: PublicationStatus) {\n pdcTemplate(status: $status, locale: $locale) {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n socialMediaList {\n id\n link {\n id\n textContent\n href\n icon\n }\n }\n }\n }\n }\n}\n": types.GetTemplateDataDocument, + "\nquery getOpenFormsTemplateData(\n $locale: I18NLocaleCode\n $status: PublicationStatus\n) {\n pdcTemplate(status: $status, locale: $locale) {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n }\n }\n }\n}\n": types.GetOpenFormsTemplateDataDocument, + "\nquery getOpenFormsErrorPage(\n $locale: I18NLocaleCode\n $status: PublicationStatus\n $type: String\n) {\n openFormsErrorPages(\n status: $status\n locale: $locale\n filters: { type: { eq: $type } }\n ) {\n documentId\n title\n body\n type\n }\n}\n": types.GetOpenFormsErrorPageDocument, + "\nquery getWebsiteSettings {\n websiteSetting {\n triggerMatomoScript {\n trackingScripts(pagination: { start: 0, limit: -1 }) {\n id\n slug\n enabled\n }\n }\n }\n}\n": types.GetWebsiteSettingsDocument, }; /** @@ -45,55 +45,55 @@ export function graphql(source: string): unknown; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\nquery getPDCHomePage($locale: I18NLocaleCode, $pageMode: PublicationState) {\n pdcHomePage(publicationState: $pageMode, locale: $locale) {\n data {\n attributes {\n components {\n ... on ComponentComponentsUtrechtTopTasks {\n __typename\n link {\n id\n textContent\n href\n topTaskIcons\n }\n }\n }\n }\n }\n }\n}\n"): (typeof documents)["\nquery getPDCHomePage($locale: I18NLocaleCode, $pageMode: PublicationState) {\n pdcHomePage(publicationState: $pageMode, locale: $locale) {\n data {\n attributes {\n components {\n ... on ComponentComponentsUtrechtTopTasks {\n __typename\n link {\n id\n textContent\n href\n topTaskIcons\n }\n }\n }\n }\n }\n }\n}\n"]; +export function graphql(source: "\nquery getPDCHomePage($locale: I18NLocaleCode, $status: PublicationStatus) {\n pdcHomePage(status: $status, locale: $locale) {\n components {\n ... on ComponentComponentsUtrechtTopTasks {\n __typename\n link {\n id\n textContent\n href\n topTaskIcons\n }\n }\n }\n }\n}\n"): (typeof documents)["\nquery getPDCHomePage($locale: I18NLocaleCode, $status: PublicationStatus) {\n pdcHomePage(status: $status, locale: $locale) {\n components {\n ... on ComponentComponentsUtrechtTopTasks {\n __typename\n link {\n id\n textContent\n href\n topTaskIcons\n }\n }\n }\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getAllProductsSlugQuery($locale: I18NLocaleCode, $page: Int, $pageSize: Int) {\n products(locale: $locale, pagination:{ page: $page, pageSize: $pageSize }, sort: \"title\") {\n meta {\n pagination {\n total\n page\n pageSize\n pageCount\n }\n }\n data {\n attributes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query getAllProductsSlugQuery($locale: I18NLocaleCode, $page: Int, $pageSize: Int) {\n products(locale: $locale, pagination:{ page: $page, pageSize: $pageSize }, sort: \"title\") {\n meta {\n pagination {\n total\n page\n pageSize\n pageCount\n }\n }\n data {\n attributes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n }\n }\n"]; +export function graphql(source: "\nquery getAllProductsSlugQuery(\n $locale: I18NLocaleCode\n $page: Int\n $pageSize: Int\n) {\n products_connection(\n locale: $locale\n pagination: { page: $page, pageSize: $pageSize }\n sort: \"title\"\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n}\n"): (typeof documents)["\nquery getAllProductsSlugQuery(\n $locale: I18NLocaleCode\n $page: Int\n $pageSize: Int\n) {\n products_connection(\n locale: $locale\n pagination: { page: $page, pageSize: $pageSize }\n sort: \"title\"\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getAllProductsSitemap {\n products(locale: \"all\", pagination:{ start: 0, limit: -1}) {\n data {\n attributes {\n slug\n locale\n updatedAt\n }\n }\n }\n }\n"): (typeof documents)["\n query getAllProductsSitemap {\n products(locale: \"all\", pagination:{ start: 0, limit: -1}) {\n data {\n attributes {\n slug\n locale\n updatedAt\n }\n }\n }\n }\n"]; +export function graphql(source: "\nquery getAllProductsSitemap {\n products(locale: \"nl\", pagination: { start: 0, limit: -1 }) {\n slug\n locale\n updatedAt\n }\n}\n"): (typeof documents)["\nquery getAllProductsSitemap {\n products(locale: \"nl\", pagination: { start: 0, limit: -1 }) {\n slug\n locale\n updatedAt\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getAlphabeticallyProductsByLetterQuery($locale: I18NLocaleCode, $page: Int, $pageSize: Int, $startsWith: String) {\n products(locale: $locale, pagination:{ page: $page, pageSize: $pageSize }, filters: { title: { startsWith: $startsWith } }, sort: \"title\") {\n meta {\n pagination {\n total\n page\n pageSize\n pageCount\n }\n }\n data {\n attributes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query getAlphabeticallyProductsByLetterQuery($locale: I18NLocaleCode, $page: Int, $pageSize: Int, $startsWith: String) {\n products(locale: $locale, pagination:{ page: $page, pageSize: $pageSize }, filters: { title: { startsWith: $startsWith } }, sort: \"title\") {\n meta {\n pagination {\n total\n page\n pageSize\n pageCount\n }\n }\n data {\n attributes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n }\n }\n"]; +export function graphql(source: "\nquery getAlphabeticallyProductsByLetterQuery(\n $locale: I18NLocaleCode\n $page: Int\n $pageSize: Int\n $startsWith: String\n) {\n products_connection(\n locale: $locale\n pagination: { page: $page, pageSize: $pageSize }\n filters: { title: { startsWith: $startsWith } }\n sort: \"title\"\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n}\n"): (typeof documents)["\nquery getAlphabeticallyProductsByLetterQuery(\n $locale: I18NLocaleCode\n $page: Int\n $pageSize: Int\n $startsWith: String\n) {\n products_connection(\n locale: $locale\n pagination: { page: $page, pageSize: $pageSize }\n filters: { title: { startsWith: $startsWith } }\n sort: \"title\"\n ) {\n pageInfo {\n total\n page\n pageSize\n pageCount\n }\n nodes {\n slug\n title\n locale\n updatedAt\n metaTags {\n description\n }\n }\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query checkAlphabeticallyProductsAvailability($locale: I18NLocaleCode, $startsWith: String) {\n products(locale: $locale, filters: { title: { startsWith: $startsWith } }) {\n data {\n attributes {\n title\n }\n }\n }\n }\n"): (typeof documents)["\n query checkAlphabeticallyProductsAvailability($locale: I18NLocaleCode, $startsWith: String) {\n products(locale: $locale, filters: { title: { startsWith: $startsWith } }) {\n data {\n attributes {\n title\n }\n }\n }\n }\n"]; +export function graphql(source: "\n query checkAlphabeticallyProductsAvailability($locale: I18NLocaleCode, $startsWith: String) {\n products(locale: $locale, filters: { title: { startsWith: $startsWith } }) {\n title\n }\n }\n"): (typeof documents)["\n query checkAlphabeticallyProductsAvailability($locale: I18NLocaleCode, $startsWith: String) {\n products(locale: $locale, filters: { title: { startsWith: $startsWith } }) {\n title\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getProductBySlug(\n $slug: String\n $locale: I18NLocaleCode\n $pageMode: PublicationState\n) {\n products(\n filters: { slug: { eq: $slug } }\n locale: $locale\n publicationState: $pageMode\n ) {\n data {\n id\n attributes {\n title\n slug\n metaTags {\n title\n description\n keymatch\n ogImage {\n data {\n attributes {\n url\n }\n }\n }\n }\n content\n enable_kcm_survey\n sections {\n ... on ComponentComponentsContactInformationPublic {\n __typename\n contact_information_public {\n data {\n attributes {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n }\n }\n }\n ... on ComponentComponentsUtrechtImage {\n __typename\n imageData {\n data {\n attributes {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsFloLegalForm {\n __typename\n id\n floLegalFormSelector\n }\n ... on ComponentComponentsUtrechtSpotlight {\n __typename\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n __typename\n }\n }\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n __typename\n column {\n id\n title\n logoButton {\n __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n __typename\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n __typename\n pdc_faq {\n data {\n attributes {\n title\n faq (pagination: {start: 0, limit: -1}) {\n body\n headingLevel\n id\n label\n }\n }\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item (pagination: {start: 0, limit: -1}) {\n body\n headingLevel\n id\n label\n }\n }\n }\n price {\n data {\n attributes {\n price( pagination: {start: 0, limit: -1} ) {\n currency\n id\n label\n uuid\n value\n }\n }\n }\n }\n localizations {\n data {\n attributes {\n locale\n slug\n }\n }\n }\n locale\n }\n }\n }\n}\n\n"): (typeof documents)["\n query getProductBySlug(\n $slug: String\n $locale: I18NLocaleCode\n $pageMode: PublicationState\n) {\n products(\n filters: { slug: { eq: $slug } }\n locale: $locale\n publicationState: $pageMode\n ) {\n data {\n id\n attributes {\n title\n slug\n metaTags {\n title\n description\n keymatch\n ogImage {\n data {\n attributes {\n url\n }\n }\n }\n }\n content\n enable_kcm_survey\n sections {\n ... on ComponentComponentsContactInformationPublic {\n __typename\n contact_information_public {\n data {\n attributes {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n }\n }\n }\n ... on ComponentComponentsUtrechtImage {\n __typename\n imageData {\n data {\n attributes {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsFloLegalForm {\n __typename\n id\n floLegalFormSelector\n }\n ... on ComponentComponentsUtrechtSpotlight {\n __typename\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n __typename\n }\n }\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n __typename\n column {\n id\n title\n logoButton {\n __typename\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n __typename\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n __typename\n pdc_faq {\n data {\n attributes {\n title\n faq (pagination: {start: 0, limit: -1}) {\n body\n headingLevel\n id\n label\n }\n }\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item (pagination: {start: 0, limit: -1}) {\n body\n headingLevel\n id\n label\n }\n }\n }\n price {\n data {\n attributes {\n price( pagination: {start: 0, limit: -1} ) {\n currency\n id\n label\n uuid\n value\n }\n }\n }\n }\n localizations {\n data {\n attributes {\n locale\n slug\n }\n }\n }\n locale\n }\n }\n }\n}\n\n"]; +export function graphql(source: "\nquery getProductBySlug(\n $slug: String\n $locale: I18NLocaleCode\n $status: PublicationStatus\n) {\n products(\n filters: { slug: { eq: $slug } }\n locale: $locale\n status: $status # Note: publicationState is often changed to status in v5\n ) {\n documentId # Use documentId instead of id\n title\n slug\n metaTags {\n title\n description\n keymatch\n ogImage {\n url # Flattened: no more data > attributes\n }\n }\n content\n enable_kcm_survey\n sections {\n __typename\n ... on ComponentComponentsContactInformationPublic {\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n }\n ... on ComponentComponentsUtrechtImage {\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsFloLegalForm {\n id\n floLegalFormSelector\n }\n ... on ComponentComponentsUtrechtSpotlight {\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n }\n }\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n column {\n id\n title\n logoButton {\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n pdc_faq {\n title\n faq(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n item(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n price {\n price(pagination: { start: 0, limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n localizations {\n locale\n slug\n }\n locale\n }\n}\n\n"): (typeof documents)["\nquery getProductBySlug(\n $slug: String\n $locale: I18NLocaleCode\n $status: PublicationStatus\n) {\n products(\n filters: { slug: { eq: $slug } }\n locale: $locale\n status: $status # Note: publicationState is often changed to status in v5\n ) {\n documentId # Use documentId instead of id\n title\n slug\n metaTags {\n title\n description\n keymatch\n ogImage {\n url # Flattened: no more data > attributes\n }\n }\n content\n enable_kcm_survey\n sections {\n __typename\n ... on ComponentComponentsContactInformationPublic {\n contact_information_public {\n contentBlock(pagination: { start: 0, limit: -1 }) {\n id\n content\n }\n }\n }\n ... on ComponentComponentsUtrechtImage {\n imageData {\n name\n alternativeText\n caption\n width\n height\n formats\n url\n }\n }\n ... on ComponentComponentsUtrechtLogoButton {\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n ... on ComponentComponentsFloLegalForm {\n id\n floLegalFormSelector\n }\n ... on ComponentComponentsUtrechtSpotlight {\n content\n type\n logoButton {\n id\n label\n href\n textContent\n logo\n appearance\n }\n }\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtMultiColumnsButton {\n column {\n id\n title\n logoButton {\n appearance\n href\n label\n logo\n openFormsEmbed\n textContent\n }\n }\n }\n ... on ComponentComponentsUtrechtLink {\n href\n textContent\n icon\n language\n }\n ... on ComponentComponentsFaq {\n pdc_faq {\n title\n faq(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n ... on ComponentComponentsUtrechtAccordion {\n item(pagination: { start: 0, limit: -1 }) {\n body\n headingLevel\n id\n label\n }\n }\n }\n price {\n price(pagination: { start: 0, limit: -1 }) {\n currency\n id\n label\n uuid\n value\n }\n }\n localizations {\n locale\n slug\n }\n locale\n }\n}\n\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\nquery getProductsOldSlugs($locale: I18NLocaleCode) {\n products(\n pagination: { start: 0, limit: -1 }\n filters: { oldSlugs: { ne: null } }\n locale: $locale\n ) {\n data {\n attributes {\n slug\n oldSlugs\n }\n }\n }\n}\n"): (typeof documents)["\nquery getProductsOldSlugs($locale: I18NLocaleCode) {\n products(\n pagination: { start: 0, limit: -1 }\n filters: { oldSlugs: { ne: null } }\n locale: $locale\n ) {\n data {\n attributes {\n slug\n oldSlugs\n }\n }\n }\n}\n"]; +export function graphql(source: "\nquery getProductsOldSlugs($locale: I18NLocaleCode) {\n products(\n pagination: { start: 0, limit: -1 }\n filters: { oldSlugs: { ne: null } }\n locale: $locale\n ) {\n slug\n oldSlugs\n }\n}\n"): (typeof documents)["\nquery getProductsOldSlugs($locale: I18NLocaleCode) {\n products(\n pagination: { start: 0, limit: -1 }\n filters: { oldSlugs: { ne: null } }\n locale: $locale\n ) {\n slug\n oldSlugs\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getProductBySlugAndLocale($slug: String, $locale: I18NLocaleCode, $pageMode: PublicationState) {\n products(filters: { slug: { eq: $slug } }, locale: $locale, publicationState: $pageMode) {\n data {\n attributes {\n slug\n locale\n }\n }\n }\n }\n"): (typeof documents)["\n query getProductBySlugAndLocale($slug: String, $locale: I18NLocaleCode, $pageMode: PublicationState) {\n products(filters: { slug: { eq: $slug } }, locale: $locale, publicationState: $pageMode) {\n data {\n attributes {\n slug\n locale\n }\n }\n }\n }\n"]; +export function graphql(source: "\nquery getProductBySlugAndLocale(\n $slug: String\n $locale: I18NLocaleCode\n $status: PublicationStatus\n) {\n products(\n filters: { slug: { eq: $slug } }\n locale: $locale\n status: $status\n ) {\n slug\n locale\n }\n}\n"): (typeof documents)["\nquery getProductBySlugAndLocale(\n $slug: String\n $locale: I18NLocaleCode\n $status: PublicationStatus\n) {\n products(\n filters: { slug: { eq: $slug } }\n locale: $locale\n status: $status\n ) {\n slug\n locale\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\nquery getNotFoundPage($locale: I18NLocaleCode){\n notFoundPage(locale: $locale) {\n data {\n attributes {\n title\n body\n }\n }\n }\n}\n"): (typeof documents)["\nquery getNotFoundPage($locale: I18NLocaleCode){\n notFoundPage(locale: $locale) {\n data {\n attributes {\n title\n body\n }\n }\n }\n}\n"]; +export function graphql(source: "\nquery getNotFoundPage($locale: I18NLocaleCode) {\n notFoundPage(locale: $locale) {\n title\n body\n }\n}\n"): (typeof documents)["\nquery getNotFoundPage($locale: I18NLocaleCode) {\n notFoundPage(locale: $locale) {\n title\n body\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\nquery getTemplateData($locale: I18NLocaleCode, $pageMode: PublicationState) {\n pdcTemplate(publicationState: $pageMode, locale: $locale) {\n data {\n attributes {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n socialMediaList {\n id\n link {\n id\n textContent\n href\n icon\n }\n }\n }\n }\n }\n }\n }\n}\n\n"): (typeof documents)["\nquery getTemplateData($locale: I18NLocaleCode, $pageMode: PublicationState) {\n pdcTemplate(publicationState: $pageMode, locale: $locale) {\n data {\n attributes {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n socialMediaList {\n id\n link {\n id\n textContent\n href\n icon\n }\n }\n }\n }\n }\n }\n }\n}\n\n"]; +export function graphql(source: "\nquery getTemplateData($locale: I18NLocaleCode, $status: PublicationStatus) {\n pdcTemplate(status: $status, locale: $locale) {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n socialMediaList {\n id\n link {\n id\n textContent\n href\n icon\n }\n }\n }\n }\n }\n}\n"): (typeof documents)["\nquery getTemplateData($locale: I18NLocaleCode, $status: PublicationStatus) {\n pdcTemplate(status: $status, locale: $locale) {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n socialMediaList {\n id\n link {\n id\n textContent\n href\n icon\n }\n }\n }\n }\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\nquery getOpenFormsTemplateData($locale: I18NLocaleCode, $pageMode: PublicationState) {\n pdcTemplate(publicationState: $pageMode, locale: $locale) {\n data {\n attributes {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n }\n }\n }\n }\n }\n}\n\n"): (typeof documents)["\nquery getOpenFormsTemplateData($locale: I18NLocaleCode, $pageMode: PublicationState) {\n pdcTemplate(publicationState: $pageMode, locale: $locale) {\n data {\n attributes {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n }\n }\n }\n }\n }\n}\n\n"]; +export function graphql(source: "\nquery getOpenFormsTemplateData(\n $locale: I18NLocaleCode\n $status: PublicationStatus\n) {\n pdcTemplate(status: $status, locale: $locale) {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n }\n }\n }\n}\n"): (typeof documents)["\nquery getOpenFormsTemplateData(\n $locale: I18NLocaleCode\n $status: PublicationStatus\n) {\n pdcTemplate(status: $status, locale: $locale) {\n sections {\n ... on ComponentComponentsUtrechtNavigation {\n __typename\n navigationList {\n id\n textContent\n href\n }\n }\n ... on ComponentComponentsUtrechtFooter {\n __typename\n title\n list {\n id\n listItem {\n id\n title\n link {\n id\n textContent\n href\n }\n }\n }\n address\n }\n }\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getOpenFormsErrorPage($locale: I18NLocaleCode, $pageMode: PublicationState, $type: String) {\n openFormsErrorPages(publicationState: $pageMode, locale: $locale, filters: { type: { eq: $type } }) {\n data {\n id\n attributes {\n title\n body\n type\n }\n }\n }\n }\n"): (typeof documents)["\n query getOpenFormsErrorPage($locale: I18NLocaleCode, $pageMode: PublicationState, $type: String) {\n openFormsErrorPages(publicationState: $pageMode, locale: $locale, filters: { type: { eq: $type } }) {\n data {\n id\n attributes {\n title\n body\n type\n }\n }\n }\n }\n"]; +export function graphql(source: "\nquery getOpenFormsErrorPage(\n $locale: I18NLocaleCode\n $status: PublicationStatus\n $type: String\n) {\n openFormsErrorPages(\n status: $status\n locale: $locale\n filters: { type: { eq: $type } }\n ) {\n documentId\n title\n body\n type\n }\n}\n"): (typeof documents)["\nquery getOpenFormsErrorPage(\n $locale: I18NLocaleCode\n $status: PublicationStatus\n $type: String\n) {\n openFormsErrorPages(\n status: $status\n locale: $locale\n filters: { type: { eq: $type } }\n ) {\n documentId\n title\n body\n type\n }\n}\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getWebsiteSettings {\n websiteSetting {\n data {\n attributes {\n triggerMatomoScript {\n trackingScripts(pagination: { start: 0, limit: -1 }) {\n id\n title\n slug\n enabled\n }\n }\n }\n }\n }\n}\n"): (typeof documents)["\n query getWebsiteSettings {\n websiteSetting {\n data {\n attributes {\n triggerMatomoScript {\n trackingScripts(pagination: { start: 0, limit: -1 }) {\n id\n title\n slug\n enabled\n }\n }\n }\n }\n }\n}\n"]; +export function graphql(source: "\nquery getWebsiteSettings {\n websiteSetting {\n triggerMatomoScript {\n trackingScripts(pagination: { start: 0, limit: -1 }) {\n id\n slug\n enabled\n }\n }\n }\n}\n"): (typeof documents)["\nquery getWebsiteSettings {\n websiteSetting {\n triggerMatomoScript {\n trackingScripts(pagination: { start: 0, limit: -1 }) {\n id\n slug\n enabled\n }\n }\n }\n}\n"]; export function graphql(source: string) { return (documents as any)[source] ?? {}; diff --git a/apps/pdc-frontend/gql/graphql.ts b/apps/pdc-frontend/gql/graphql.ts index 2bd817b41..9652be7c5 100644 --- a/apps/pdc-frontend/gql/graphql.ts +++ b/apps/pdc-frontend/gql/graphql.ts @@ -25,42 +25,30 @@ export type Scalars = { PdcHomePageComponentsDynamicZoneInput: { input: any; output: any; } PdcTemplateSectionsDynamicZoneInput: { input: any; output: any; } ProductSectionsDynamicZoneInput: { input: any; output: any; } - /** The `Upload` scalar type represents a file upload. */ - Upload: { input: any; output: any; } }; export type AdditionalInformation = { __typename?: 'AdditionalInformation'; content?: Maybe; createdAt?: Maybe; - product?: Maybe; + documentId: Scalars['ID']['output']; + product?: Maybe; publishedAt?: Maybe; title: Scalars['String']['output']; updatedAt?: Maybe; }; -export type AdditionalInformationEntity = { - __typename?: 'AdditionalInformationEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type AdditionalInformationEntityResponse = { - __typename?: 'AdditionalInformationEntityResponse'; - data?: Maybe; -}; - export type AdditionalInformationEntityResponseCollection = { __typename?: 'AdditionalInformationEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type AdditionalInformationFiltersInput = { and?: InputMaybe>>; content?: InputMaybe; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; product?: InputMaybe; @@ -103,7 +91,7 @@ export type BooleanFilterInput = { export type ComponentComponentsAdditionalInformation = { __typename?: 'ComponentComponentsAdditionalInformation'; - additional_information?: Maybe; + additional_information?: Maybe; id: Scalars['ID']['output']; }; @@ -146,7 +134,6 @@ export type ComponentComponentsAfdelingenFiltersInput = { afdelingId?: InputMaybe; afdelingNaam?: InputMaybe; and?: InputMaybe>>; - contact?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; }; @@ -154,7 +141,6 @@ export type ComponentComponentsAfdelingenFiltersInput = { export type ComponentComponentsAfdelingenInput = { afdelingId?: InputMaybe; afdelingNaam?: InputMaybe; - contact?: InputMaybe>>; id?: InputMaybe; }; @@ -364,17 +350,9 @@ export type ComponentComponentsContact = { id: Scalars['ID']['output']; }; -export type ComponentComponentsContactFiltersInput = { - and?: InputMaybe>>; - email?: InputMaybe; - name?: InputMaybe; - not?: InputMaybe; - or?: InputMaybe>>; -}; - export type ComponentComponentsContactInformationPublic = { __typename?: 'ComponentComponentsContactInformationPublic'; - contact_information_public?: Maybe; + contact_information_public?: Maybe; id: Scalars['ID']['output']; }; @@ -399,34 +377,16 @@ export type ComponentComponentsContactInformationRichTextInput = { label?: InputMaybe; }; -export type ComponentComponentsContactInput = { - email?: InputMaybe; - id?: InputMaybe; - name?: InputMaybe; -}; - export type ComponentComponentsEForm = { __typename?: 'ComponentComponentsEForm'; id: Scalars['ID']['output']; }; -export type ComponentComponentsEFormFiltersInput = { - and?: InputMaybe>>; - linkedEForm?: InputMaybe; - not?: InputMaybe; - or?: InputMaybe>>; -}; - -export type ComponentComponentsEFormInput = { - id?: InputMaybe; - linkedEForm?: InputMaybe; -}; - export type ComponentComponentsFaq = { __typename?: 'ComponentComponentsFaq'; id: Scalars['ID']['output']; kennisartikelCategorie?: Maybe; - pdc_faq?: Maybe; + pdc_faq?: Maybe; }; export type ComponentComponentsFloLegalForm = { @@ -438,7 +398,7 @@ export type ComponentComponentsFloLegalForm = { export type ComponentComponentsInternalBlockContent = { __typename?: 'ComponentComponentsInternalBlockContent'; id: Scalars['ID']['output']; - internal_field?: Maybe; + internal_field?: Maybe; }; export type ComponentComponentsInternalContentBlock = { @@ -533,24 +493,6 @@ export type ComponentComponentsMetadata = { id: Scalars['ID']['output']; }; -export type ComponentComponentsMetadataFiltersInput = { - and?: InputMaybe>>; - attachementAdded?: InputMaybe; - contact?: InputMaybe; - eForm?: InputMaybe; - not?: InputMaybe; - or?: InputMaybe>>; - singleDigitalGateway?: InputMaybe; -}; - -export type ComponentComponentsMetadataInput = { - attachementAdded?: InputMaybe; - contact?: InputMaybe>>; - eForm?: InputMaybe; - id?: InputMaybe; - singleDigitalGateway?: InputMaybe; -}; - export type ComponentComponentsOnlineRequest = { __typename?: 'ComponentComponentsOnlineRequest'; id: Scalars['ID']['output']; @@ -622,7 +564,6 @@ export type ComponentComponentsTrackingScripts = { enabled?: Maybe; id: Scalars['ID']['output']; slug?: Maybe; - title?: Maybe; }; export type ComponentComponentsTrackingScriptsFiltersInput = { @@ -631,14 +572,12 @@ export type ComponentComponentsTrackingScriptsFiltersInput = { not?: InputMaybe; or?: InputMaybe>>; slug?: InputMaybe; - title?: InputMaybe; }; export type ComponentComponentsTrackingScriptsInput = { enabled?: InputMaybe; id?: InputMaybe; slug?: InputMaybe; - title?: InputMaybe; }; export type ComponentComponentsTrefwoorden = { @@ -783,7 +722,7 @@ export type ComponentComponentsUtrechtFooterListItemFiltersInput = { export type ComponentComponentsUtrechtImage = { __typename?: 'ComponentComponentsUtrechtImage'; id: Scalars['ID']['output']; - imageData?: Maybe; + imageData?: Maybe; kennisartikelCategorie?: Maybe; }; @@ -1098,7 +1037,7 @@ export type ComponentSeoMeta = { description: Scalars['String']['output']; id: Scalars['ID']['output']; keymatch: Scalars['String']['output']; - ogImage?: Maybe; + ogImage?: Maybe; title: Scalars['String']['output']; }; @@ -1123,11 +1062,14 @@ export type ContactInformationInternal = { __typename?: 'ContactInformationInternal'; contentBlock?: Maybe>>; createdAt?: Maybe; - internal_information?: Maybe; + documentId: Scalars['ID']['output']; + internal_information: Array>; + internal_information_connection?: Maybe; publishedAt?: Maybe; title?: Maybe; updatedAt?: Maybe; - vacs?: Maybe; + vacs: Array>; + vacs_connection?: Maybe; }; @@ -1141,7 +1083,13 @@ export type ContactInformationInternalContentBlockArgs = { export type ContactInformationInternalInternal_InformationArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationInternalInternal_Information_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; sort?: InputMaybe>>; }; @@ -1149,32 +1097,27 @@ export type ContactInformationInternalInternal_InformationArgs = { export type ContactInformationInternalVacsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type ContactInformationInternalEntity = { - __typename?: 'ContactInformationInternalEntity'; - attributes?: Maybe; - id?: Maybe; -}; -export type ContactInformationInternalEntityResponse = { - __typename?: 'ContactInformationInternalEntityResponse'; - data?: Maybe; +export type ContactInformationInternalVacs_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type ContactInformationInternalEntityResponseCollection = { __typename?: 'ContactInformationInternalEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type ContactInformationInternalFiltersInput = { and?: InputMaybe>>; contentBlock?: InputMaybe; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; internal_information?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; @@ -1192,16 +1135,25 @@ export type ContactInformationInternalInput = { vacs?: InputMaybe>>; }; +export type ContactInformationInternalRelationResponseCollection = { + __typename?: 'ContactInformationInternalRelationResponseCollection'; + nodes: Array; +}; + export type ContactInformationPublic = { __typename?: 'ContactInformationPublic'; contentBlock?: Maybe>>; createdAt?: Maybe; - internal_information?: Maybe; - products?: Maybe; + documentId: Scalars['ID']['output']; + internal_information: Array>; + internal_information_connection?: Maybe; + products: Array>; + products_connection?: Maybe; publishedAt?: Maybe; title?: Maybe; updatedAt?: Maybe; - vacs?: Maybe; + vacs: Array>; + vacs_connection?: Maybe; }; @@ -1215,7 +1167,13 @@ export type ContactInformationPublicContentBlockArgs = { export type ContactInformationPublicInternal_InformationArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationPublicInternal_Information_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; sort?: InputMaybe>>; }; @@ -1223,7 +1181,13 @@ export type ContactInformationPublicInternal_InformationArgs = { export type ContactInformationPublicProductsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ContactInformationPublicProducts_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; sort?: InputMaybe>>; }; @@ -1231,32 +1195,27 @@ export type ContactInformationPublicProductsArgs = { export type ContactInformationPublicVacsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type ContactInformationPublicEntity = { - __typename?: 'ContactInformationPublicEntity'; - attributes?: Maybe; - id?: Maybe; -}; -export type ContactInformationPublicEntityResponse = { - __typename?: 'ContactInformationPublicEntityResponse'; - data?: Maybe; +export type ContactInformationPublicVacs_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type ContactInformationPublicEntityResponseCollection = { __typename?: 'ContactInformationPublicEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type ContactInformationPublicFiltersInput = { and?: InputMaybe>>; contentBlock?: InputMaybe; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; internal_information?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; @@ -1326,6 +1285,11 @@ export type DateTimeFilterInput = { startsWith?: InputMaybe; }; +export type DeleteMutationResponse = { + __typename?: 'DeleteMutationResponse'; + documentId: Scalars['ID']['output']; +}; + export enum Enum_Componentcomponentsantwoord_Kennisartikelcategorie { Aanvraag = 'aanvraag', Bewijs = 'bewijs', @@ -1364,11 +1328,6 @@ export enum Enum_Componentcomponentscimpdcproductmetadata_Soortbevoegdgezag { Waterschap = 'waterschap' } -export enum Enum_Componentcomponentseform_Linkedeform { - Ja = 'ja', - Nee = 'nee' -} - export enum Enum_Componentcomponentsfaq_Kennisartikelcategorie { Aanvraag = 'aanvraag', Bewijs = 'bewijs', @@ -1400,16 +1359,6 @@ export enum Enum_Componentcomponentskennisartikel_Doelgroep { EuBurger = 'eu_burger' } -export enum Enum_Componentcomponentsmetadata_Attachementadded { - Ja = 'ja', - Nee = 'nee' -} - -export enum Enum_Componentcomponentsmetadata_Singledigitalgateway { - Ja = 'ja', - Nee = 'nee' -} - export enum Enum_Componentcomponentsonlinerequest_Type { Digid = 'digid', Ja = 'ja', @@ -1642,46 +1591,39 @@ export type EntityNotesNote = { __typename?: 'EntityNotesNote'; content?: Maybe; createdAt?: Maybe; - entityId?: Maybe; + documentId: Scalars['ID']['output']; + entityId?: Maybe; entitySlug?: Maybe; + publishedAt?: Maybe; title?: Maybe; updatedAt?: Maybe; }; -export type EntityNotesNoteEntity = { - __typename?: 'EntityNotesNoteEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type EntityNotesNoteEntityResponse = { - __typename?: 'EntityNotesNoteEntityResponse'; - data?: Maybe; -}; - export type EntityNotesNoteEntityResponseCollection = { __typename?: 'EntityNotesNoteEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type EntityNotesNoteFiltersInput = { and?: InputMaybe>>; content?: InputMaybe; createdAt?: InputMaybe; - entityId?: InputMaybe; + documentId?: InputMaybe; + entityId?: InputMaybe; entitySlug?: InputMaybe; - id?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; + publishedAt?: InputMaybe; title?: InputMaybe; updatedAt?: InputMaybe; }; export type EntityNotesNoteInput = { content?: InputMaybe; - entityId?: InputMaybe; + entityId?: InputMaybe; entitySlug?: InputMaybe; + publishedAt?: InputMaybe; title?: InputMaybe; }; @@ -1697,9 +1639,6 @@ export type FileInfoInput = { name?: InputMaybe; }; -/** Union Type of all registered slug content types */ -export type FindSlugResponse = ProductEntityResponse; - export type FloatFilterInput = { and?: InputMaybe>>; between?: InputMaybe>>; @@ -1725,41 +1664,33 @@ export type FloatFilterInput = { startsWith?: InputMaybe; }; -export type GenericMorph = AdditionalInformation | ComponentComponentsAdditionalInformation | ComponentComponentsAdditionalInformationField | ComponentComponentsAfdelingen | ComponentComponentsAntwoord | ComponentComponentsAudience | ComponentComponentsCatalogiMeta | ComponentComponentsCimPdcProductAspectBeschrijving | ComponentComponentsCimPdcProductBeschrijving | ComponentComponentsCimPdcProductMetadata | ComponentComponentsContact | ComponentComponentsContactInformationPublic | ComponentComponentsContactInformationRichText | ComponentComponentsEForm | ComponentComponentsFaq | ComponentComponentsFloLegalForm | ComponentComponentsInternalBlockContent | ComponentComponentsInternalContentBlock | ComponentComponentsInternalContentBlockComponent | ComponentComponentsInternalField | ComponentComponentsKennisartikel | ComponentComponentsMetadata | ComponentComponentsOnlineRequest | ComponentComponentsPrice | ComponentComponentsSpatial | ComponentComponentsTrackingScripts | ComponentComponentsTrefwoorden | ComponentComponentsTriggerMatomoScript | ComponentComponentsUrl | ComponentComponentsUtrechtAccordion | ComponentComponentsUtrechtAccordionSection | ComponentComponentsUtrechtFooter | ComponentComponentsUtrechtFooterLink | ComponentComponentsUtrechtFooterList | ComponentComponentsUtrechtFooterListItem | ComponentComponentsUtrechtImage | ComponentComponentsUtrechtLink | ComponentComponentsUtrechtLogoButton | ComponentComponentsUtrechtMultiColumnsButton | ComponentComponentsUtrechtMultiColumnsButtonItem | ComponentComponentsUtrechtNavigation | ComponentComponentsUtrechtNavigationLink | ComponentComponentsUtrechtRichText | ComponentComponentsUtrechtSocialMediaLink | ComponentComponentsUtrechtSocialMediaList | ComponentComponentsUtrechtSpotlight | ComponentComponentsUtrechtTopTaskLink | ComponentComponentsUtrechtTopTasks | ComponentComponentsVac | ComponentComponentsVacUitklapmenu | ComponentComponentsVerantwoordelijkeOrganisatie | ComponentSeoMeta | ContactInformationInternal | ContactInformationPublic | EntityNotesNote | I18NLocale | InternalField | NotFoundPage | OpenFormsErrorPage | PdcCategory | PdcFaq | PdcHomePage | PdcSubcategory | PdcTemplate | Price | Product | Productencatalogus | PublisherAction | SlugifySlug | UploadFile | UploadFolder | UsersPermissionsPermission | UsersPermissionsRole | UsersPermissionsUser | Vac | WebsiteSetting; +export type GenericMorph = AdditionalInformation | ComponentComponentsAdditionalInformation | ComponentComponentsAdditionalInformationField | ComponentComponentsAfdelingen | ComponentComponentsAntwoord | ComponentComponentsAudience | ComponentComponentsCatalogiMeta | ComponentComponentsCimPdcProductAspectBeschrijving | ComponentComponentsCimPdcProductBeschrijving | ComponentComponentsCimPdcProductMetadata | ComponentComponentsContact | ComponentComponentsContactInformationPublic | ComponentComponentsContactInformationRichText | ComponentComponentsEForm | ComponentComponentsFaq | ComponentComponentsFloLegalForm | ComponentComponentsInternalBlockContent | ComponentComponentsInternalContentBlock | ComponentComponentsInternalContentBlockComponent | ComponentComponentsInternalField | ComponentComponentsKennisartikel | ComponentComponentsMetadata | ComponentComponentsOnlineRequest | ComponentComponentsPrice | ComponentComponentsSpatial | ComponentComponentsTrackingScripts | ComponentComponentsTrefwoorden | ComponentComponentsTriggerMatomoScript | ComponentComponentsUrl | ComponentComponentsUtrechtAccordion | ComponentComponentsUtrechtAccordionSection | ComponentComponentsUtrechtFooter | ComponentComponentsUtrechtFooterLink | ComponentComponentsUtrechtFooterList | ComponentComponentsUtrechtFooterListItem | ComponentComponentsUtrechtImage | ComponentComponentsUtrechtLink | ComponentComponentsUtrechtLogoButton | ComponentComponentsUtrechtMultiColumnsButton | ComponentComponentsUtrechtMultiColumnsButtonItem | ComponentComponentsUtrechtNavigation | ComponentComponentsUtrechtNavigationLink | ComponentComponentsUtrechtRichText | ComponentComponentsUtrechtSocialMediaLink | ComponentComponentsUtrechtSocialMediaList | ComponentComponentsUtrechtSpotlight | ComponentComponentsUtrechtTopTaskLink | ComponentComponentsUtrechtTopTasks | ComponentComponentsVac | ComponentComponentsVacUitklapmenu | ComponentComponentsVerantwoordelijkeOrganisatie | ComponentSeoMeta | ContactInformationInternal | ContactInformationPublic | EntityNotesNote | I18NLocale | InternalField | NotFoundPage | OpenFormsErrorPage | PdcCategory | PdcFaq | PdcHomePage | PdcSubcategory | PdcTemplate | Price | Product | Productencatalogus | PublisherAction | ReviewWorkflowsWorkflow | ReviewWorkflowsWorkflowStage | UploadFile | UsersPermissionsPermission | UsersPermissionsRole | UsersPermissionsUser | Vac | WebsiteSetting; export type I18NLocale = { __typename?: 'I18NLocale'; code?: Maybe; createdAt?: Maybe; + documentId: Scalars['ID']['output']; name?: Maybe; + publishedAt?: Maybe; updatedAt?: Maybe; }; -export type I18NLocaleEntity = { - __typename?: 'I18NLocaleEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type I18NLocaleEntityResponse = { - __typename?: 'I18NLocaleEntityResponse'; - data?: Maybe; -}; - export type I18NLocaleEntityResponseCollection = { __typename?: 'I18NLocaleEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type I18NLocaleFiltersInput = { and?: InputMaybe>>; code?: InputMaybe; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; name?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; + publishedAt?: InputMaybe; updatedAt?: InputMaybe; }; @@ -1815,31 +1746,36 @@ export type IntFilterInput = { export type InternalField = { __typename?: 'InternalField'; - contact_information_internal?: Maybe; - contact_information_public?: Maybe; + contact_information_internal: Array>; + contact_information_internal_connection?: Maybe; + contact_information_public?: Maybe; content?: Maybe; createdAt?: Maybe; - product?: Maybe; + documentId: Scalars['ID']['output']; + product?: Maybe; publishedAt?: Maybe; title: Scalars['String']['output']; updatedAt?: Maybe; }; -export type InternalFieldEntity = { - __typename?: 'InternalFieldEntity'; - attributes?: Maybe; - id?: Maybe; + +export type InternalFieldContact_Information_InternalArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; -export type InternalFieldEntityResponse = { - __typename?: 'InternalFieldEntityResponse'; - data?: Maybe; + +export type InternalFieldContact_Information_Internal_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type InternalFieldEntityResponseCollection = { __typename?: 'InternalFieldEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type InternalFieldFiltersInput = { @@ -1848,7 +1784,7 @@ export type InternalFieldFiltersInput = { contact_information_public?: InputMaybe; content?: InputMaybe; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; product?: InputMaybe; @@ -1858,7 +1794,7 @@ export type InternalFieldFiltersInput = { }; export type InternalFieldInput = { - contact_information_internal?: InputMaybe; + contact_information_internal?: InputMaybe>>; contact_information_public?: InputMaybe; content?: InputMaybe; product?: InputMaybe; @@ -1868,7 +1804,7 @@ export type InternalFieldInput = { export type InternalFieldRelationResponseCollection = { __typename?: 'InternalFieldRelationResponseCollection'; - data: Array; + nodes: Array; }; export type JsonFilterInput = { @@ -1900,96 +1836,85 @@ export type Mutation = { __typename?: 'Mutation'; /** Change user password. Confirm with the current password. */ changePassword?: Maybe; - createAdditionalInformation?: Maybe; - createContactInformationInternal?: Maybe; - createContactInformationPublic?: Maybe; - createEntityNotesNote?: Maybe; - createInternalField?: Maybe; - createNotFoundPageLocalization?: Maybe; - createOpenFormsErrorPage?: Maybe; - createOpenFormsErrorPageLocalization?: Maybe; - createPdcCategory?: Maybe; - createPdcFaq?: Maybe; - createPdcFaqLocalization?: Maybe; - createPdcHomePageLocalization?: Maybe; - createPdcSubcategory?: Maybe; - createPdcTemplateLocalization?: Maybe; - createPrice?: Maybe; - createProduct?: Maybe; - createProductLocalization?: Maybe; - createProductencatalogus?: Maybe; - createPublisherAction?: Maybe; - createSlugifySlug?: Maybe; - createUploadFile?: Maybe; - createUploadFolder?: Maybe; + createAdditionalInformation?: Maybe; + createContactInformationInternal?: Maybe; + createContactInformationPublic?: Maybe; + createEntityNotesNote?: Maybe; + createInternalField?: Maybe; + createOpenFormsErrorPage?: Maybe; + createPdcCategory?: Maybe; + createPdcFaq?: Maybe; + createPdcSubcategory?: Maybe; + createPrice?: Maybe; + createProduct?: Maybe; + createProductencatalogus?: Maybe; + createPublisherAction?: Maybe; + createReviewWorkflowsWorkflow?: Maybe; + createReviewWorkflowsWorkflowStage?: Maybe; /** Create a new role */ createUsersPermissionsRole?: Maybe; /** Create a new user */ createUsersPermissionsUser: UsersPermissionsUserEntityResponse; - createVac?: Maybe; - deleteAdditionalInformation?: Maybe; - deleteContactInformationInternal?: Maybe; - deleteContactInformationPublic?: Maybe; - deleteEntityNotesNote?: Maybe; - deleteInternalField?: Maybe; - deleteNotFoundPage?: Maybe; - deleteOpenFormsErrorPage?: Maybe; - deletePdcCategory?: Maybe; - deletePdcFaq?: Maybe; - deletePdcHomePage?: Maybe; - deletePdcSubcategory?: Maybe; - deletePdcTemplate?: Maybe; - deletePrice?: Maybe; - deleteProduct?: Maybe; - deleteProductencatalogus?: Maybe; - deletePublisherAction?: Maybe; - deleteSlugifySlug?: Maybe; - deleteUploadFile?: Maybe; - deleteUploadFolder?: Maybe; + createVac?: Maybe; + deleteAdditionalInformation?: Maybe; + deleteContactInformationInternal?: Maybe; + deleteContactInformationPublic?: Maybe; + deleteEntityNotesNote?: Maybe; + deleteInternalField?: Maybe; + deleteNotFoundPage?: Maybe; + deleteOpenFormsErrorPage?: Maybe; + deletePdcCategory?: Maybe; + deletePdcFaq?: Maybe; + deletePdcHomePage?: Maybe; + deletePdcSubcategory?: Maybe; + deletePdcTemplate?: Maybe; + deletePrice?: Maybe; + deleteProduct?: Maybe; + deleteProductencatalogus?: Maybe; + deletePublisherAction?: Maybe; + deleteReviewWorkflowsWorkflow?: Maybe; + deleteReviewWorkflowsWorkflowStage?: Maybe; + deleteUploadFile?: Maybe; /** Delete an existing role */ deleteUsersPermissionsRole?: Maybe; /** Delete an existing user */ deleteUsersPermissionsUser: UsersPermissionsUserEntityResponse; - deleteVac?: Maybe; - deleteWebsiteSetting?: Maybe; + deleteVac?: Maybe; + deleteWebsiteSetting?: Maybe; /** Confirm an email users email address */ emailConfirmation?: Maybe; /** Request a reset password token */ forgotPassword?: Maybe; login: UsersPermissionsLoginPayload; - multipleUpload: Array>; /** Register a user */ register: UsersPermissionsLoginPayload; - removeFile?: Maybe; /** Reset user password. Confirm with a code (resetToken from forgotPassword) */ resetPassword?: Maybe; - updateAdditionalInformation?: Maybe; - updateContactInformationInternal?: Maybe; - updateContactInformationPublic?: Maybe; - updateEntityNotesNote?: Maybe; - updateFileInfo: UploadFileEntityResponse; - updateInternalField?: Maybe; - updateNotFoundPage?: Maybe; - updateOpenFormsErrorPage?: Maybe; - updatePdcCategory?: Maybe; - updatePdcFaq?: Maybe; - updatePdcHomePage?: Maybe; - updatePdcSubcategory?: Maybe; - updatePdcTemplate?: Maybe; - updatePrice?: Maybe; - updateProduct?: Maybe; - updateProductencatalogus?: Maybe; - updatePublisherAction?: Maybe; - updateSlugifySlug?: Maybe; - updateUploadFile?: Maybe; - updateUploadFolder?: Maybe; + updateAdditionalInformation?: Maybe; + updateContactInformationInternal?: Maybe; + updateContactInformationPublic?: Maybe; + updateEntityNotesNote?: Maybe; + updateInternalField?: Maybe; + updateNotFoundPage?: Maybe; + updateOpenFormsErrorPage?: Maybe; + updatePdcCategory?: Maybe; + updatePdcFaq?: Maybe; + updatePdcHomePage?: Maybe; + updatePdcSubcategory?: Maybe; + updatePdcTemplate?: Maybe; + updatePrice?: Maybe; + updateProduct?: Maybe; + updateProductencatalogus?: Maybe; + updatePublisherAction?: Maybe; + updateReviewWorkflowsWorkflow?: Maybe; + updateReviewWorkflowsWorkflowStage?: Maybe; + updateUploadFile: UploadFile; /** Update an existing role */ updateUsersPermissionsRole?: Maybe; /** Update an existing user */ updateUsersPermissionsUser: UsersPermissionsUserEntityResponse; - updateVac?: Maybe; - updateWebsiteSetting?: Maybe; - upload: UploadFileEntityResponse; + updateVac?: Maybe; + updateWebsiteSetting?: Maybe; }; @@ -2002,126 +1927,94 @@ export type MutationChangePasswordArgs = { export type MutationCreateAdditionalInformationArgs = { data: AdditionalInformationInput; + status?: InputMaybe; }; export type MutationCreateContactInformationInternalArgs = { data: ContactInformationInternalInput; + status?: InputMaybe; }; export type MutationCreateContactInformationPublicArgs = { data: ContactInformationPublicInput; + status?: InputMaybe; }; export type MutationCreateEntityNotesNoteArgs = { data: EntityNotesNoteInput; + status?: InputMaybe; }; export type MutationCreateInternalFieldArgs = { data: InternalFieldInput; -}; - - -export type MutationCreateNotFoundPageLocalizationArgs = { - data?: InputMaybe; - id?: InputMaybe; - locale?: InputMaybe; + status?: InputMaybe; }; export type MutationCreateOpenFormsErrorPageArgs = { data: OpenFormsErrorPageInput; locale?: InputMaybe; -}; - - -export type MutationCreateOpenFormsErrorPageLocalizationArgs = { - data?: InputMaybe; - id?: InputMaybe; - locale?: InputMaybe; + status?: InputMaybe; }; export type MutationCreatePdcCategoryArgs = { data: PdcCategoryInput; + status?: InputMaybe; }; export type MutationCreatePdcFaqArgs = { data: PdcFaqInput; locale?: InputMaybe; -}; - - -export type MutationCreatePdcFaqLocalizationArgs = { - data?: InputMaybe; - id?: InputMaybe; - locale?: InputMaybe; -}; - - -export type MutationCreatePdcHomePageLocalizationArgs = { - data?: InputMaybe; - id?: InputMaybe; - locale?: InputMaybe; + status?: InputMaybe; }; export type MutationCreatePdcSubcategoryArgs = { data: PdcSubcategoryInput; -}; - - -export type MutationCreatePdcTemplateLocalizationArgs = { - data?: InputMaybe; - id?: InputMaybe; - locale?: InputMaybe; + status?: InputMaybe; }; export type MutationCreatePriceArgs = { data: PriceInput; + status?: InputMaybe; }; export type MutationCreateProductArgs = { data: ProductInput; locale?: InputMaybe; -}; - - -export type MutationCreateProductLocalizationArgs = { - data?: InputMaybe; - id?: InputMaybe; - locale?: InputMaybe; + status?: InputMaybe; }; export type MutationCreateProductencatalogusArgs = { data: ProductencatalogusInput; + status?: InputMaybe; }; export type MutationCreatePublisherActionArgs = { data: PublisherActionInput; + status?: InputMaybe; }; -export type MutationCreateSlugifySlugArgs = { - data: SlugifySlugInput; +export type MutationCreateReviewWorkflowsWorkflowArgs = { + data: ReviewWorkflowsWorkflowInput; + status?: InputMaybe; }; -export type MutationCreateUploadFileArgs = { - data: UploadFileInput; -}; - - -export type MutationCreateUploadFolderArgs = { - data: UploadFolderInput; +export type MutationCreateReviewWorkflowsWorkflowStageArgs = { + data: ReviewWorkflowsWorkflowStageInput; + status?: InputMaybe; }; @@ -2137,31 +2030,32 @@ export type MutationCreateUsersPermissionsUserArgs = { export type MutationCreateVacArgs = { data: VacInput; + status?: InputMaybe; }; export type MutationDeleteAdditionalInformationArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; export type MutationDeleteContactInformationInternalArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; export type MutationDeleteContactInformationPublicArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; export type MutationDeleteEntityNotesNoteArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; export type MutationDeleteInternalFieldArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; @@ -2171,18 +2065,18 @@ export type MutationDeleteNotFoundPageArgs = { export type MutationDeleteOpenFormsErrorPageArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; locale?: InputMaybe; }; export type MutationDeletePdcCategoryArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; export type MutationDeletePdcFaqArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; locale?: InputMaybe; }; @@ -2193,7 +2087,7 @@ export type MutationDeletePdcHomePageArgs = { export type MutationDeletePdcSubcategoryArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; @@ -2203,37 +2097,37 @@ export type MutationDeletePdcTemplateArgs = { export type MutationDeletePriceArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; export type MutationDeleteProductArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; locale?: InputMaybe; }; export type MutationDeleteProductencatalogusArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; export type MutationDeletePublisherActionArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; -export type MutationDeleteSlugifySlugArgs = { - id: Scalars['ID']['input']; +export type MutationDeleteReviewWorkflowsWorkflowArgs = { + documentId: Scalars['ID']['input']; }; -export type MutationDeleteUploadFileArgs = { - id: Scalars['ID']['input']; +export type MutationDeleteReviewWorkflowsWorkflowStageArgs = { + documentId: Scalars['ID']['input']; }; -export type MutationDeleteUploadFolderArgs = { +export type MutationDeleteUploadFileArgs = { id: Scalars['ID']['input']; }; @@ -2249,7 +2143,7 @@ export type MutationDeleteUsersPermissionsUserArgs = { export type MutationDeleteVacArgs = { - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; }; @@ -2268,24 +2162,11 @@ export type MutationLoginArgs = { }; -export type MutationMultipleUploadArgs = { - field?: InputMaybe; - files: Array>; - ref?: InputMaybe; - refId?: InputMaybe; -}; - - export type MutationRegisterArgs = { input: UsersPermissionsRegisterInput; }; -export type MutationRemoveFileArgs = { - id: Scalars['ID']['input']; -}; - - export type MutationResetPasswordArgs = { code: Scalars['String']['input']; password: Scalars['String']['input']; @@ -2295,124 +2176,136 @@ export type MutationResetPasswordArgs = { export type MutationUpdateAdditionalInformationArgs = { data: AdditionalInformationInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdateContactInformationInternalArgs = { data: ContactInformationInternalInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdateContactInformationPublicArgs = { data: ContactInformationPublicInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdateEntityNotesNoteArgs = { data: EntityNotesNoteInput; - id: Scalars['ID']['input']; -}; - - -export type MutationUpdateFileInfoArgs = { - id: Scalars['ID']['input']; - info?: InputMaybe; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdateInternalFieldArgs = { data: InternalFieldInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdateNotFoundPageArgs = { data: NotFoundPageInput; locale?: InputMaybe; + status?: InputMaybe; }; export type MutationUpdateOpenFormsErrorPageArgs = { data: OpenFormsErrorPageInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; locale?: InputMaybe; + status?: InputMaybe; }; export type MutationUpdatePdcCategoryArgs = { data: PdcCategoryInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdatePdcFaqArgs = { data: PdcFaqInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; locale?: InputMaybe; + status?: InputMaybe; }; export type MutationUpdatePdcHomePageArgs = { data: PdcHomePageInput; locale?: InputMaybe; + status?: InputMaybe; }; export type MutationUpdatePdcSubcategoryArgs = { data: PdcSubcategoryInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdatePdcTemplateArgs = { data: PdcTemplateInput; locale?: InputMaybe; + status?: InputMaybe; }; export type MutationUpdatePriceArgs = { data: PriceInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdateProductArgs = { data: ProductInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; locale?: InputMaybe; + status?: InputMaybe; }; export type MutationUpdateProductencatalogusArgs = { data: ProductencatalogusInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdatePublisherActionArgs = { data: PublisherActionInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; -export type MutationUpdateSlugifySlugArgs = { - data: SlugifySlugInput; - id: Scalars['ID']['input']; +export type MutationUpdateReviewWorkflowsWorkflowArgs = { + data: ReviewWorkflowsWorkflowInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; -export type MutationUpdateUploadFileArgs = { - data: UploadFileInput; - id: Scalars['ID']['input']; +export type MutationUpdateReviewWorkflowsWorkflowStageArgs = { + data: ReviewWorkflowsWorkflowStageInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; -export type MutationUpdateUploadFolderArgs = { - data: UploadFolderInput; +export type MutationUpdateUploadFileArgs = { id: Scalars['ID']['input']; + info?: InputMaybe; }; @@ -2430,50 +2323,29 @@ export type MutationUpdateUsersPermissionsUserArgs = { export type MutationUpdateVacArgs = { data: VacInput; - id: Scalars['ID']['input']; + documentId: Scalars['ID']['input']; + status?: InputMaybe; }; export type MutationUpdateWebsiteSettingArgs = { data: WebsiteSettingInput; -}; - - -export type MutationUploadArgs = { - field?: InputMaybe; - file: Scalars['Upload']['input']; - info?: InputMaybe; - ref?: InputMaybe; - refId?: InputMaybe; + status?: InputMaybe; }; export type NotFoundPage = { __typename?: 'NotFoundPage'; body?: Maybe; createdAt?: Maybe; + documentId: Scalars['ID']['output']; locale?: Maybe; - localizations?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; publishedAt?: Maybe; title?: Maybe; updatedAt?: Maybe; }; - -export type NotFoundPageLocalizationsArgs = { - publicationState?: InputMaybe; -}; - -export type NotFoundPageEntity = { - __typename?: 'NotFoundPageEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type NotFoundPageEntityResponse = { - __typename?: 'NotFoundPageEntityResponse'; - data?: Maybe; -}; - export type NotFoundPageInput = { body?: InputMaybe; publishedAt?: InputMaybe; @@ -2482,15 +2354,17 @@ export type NotFoundPageInput = { export type NotFoundPageRelationResponseCollection = { __typename?: 'NotFoundPageRelationResponseCollection'; - data: Array; + nodes: Array; }; export type OpenFormsErrorPage = { __typename?: 'OpenFormsErrorPage'; body?: Maybe; createdAt?: Maybe; + documentId: Scalars['ID']['output']; locale?: Maybe; - localizations?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; publishedAt?: Maybe; title: Scalars['String']['output']; type: Enum_Openformserrorpage_Type; @@ -2501,32 +2375,27 @@ export type OpenFormsErrorPage = { export type OpenFormsErrorPageLocalizationsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type OpenFormsErrorPageEntity = { - __typename?: 'OpenFormsErrorPageEntity'; - attributes?: Maybe; - id?: Maybe; -}; -export type OpenFormsErrorPageEntityResponse = { - __typename?: 'OpenFormsErrorPageEntityResponse'; - data?: Maybe; +export type OpenFormsErrorPageLocalizations_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type OpenFormsErrorPageEntityResponseCollection = { __typename?: 'OpenFormsErrorPageEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type OpenFormsErrorPageFiltersInput = { and?: InputMaybe>>; body?: InputMaybe; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; locale?: InputMaybe; localizations?: InputMaybe; not?: InputMaybe; @@ -2546,7 +2415,7 @@ export type OpenFormsErrorPageInput = { export type OpenFormsErrorPageRelationResponseCollection = { __typename?: 'OpenFormsErrorPageRelationResponseCollection'; - data: Array; + nodes: Array; }; export type Pagination = { @@ -2567,7 +2436,9 @@ export type PaginationArg = { export type PdcCategory = { __typename?: 'PdcCategory'; createdAt?: Maybe; - pdc_subcategories?: Maybe; + documentId: Scalars['ID']['output']; + pdc_subcategories: Array>; + pdc_subcategories_connection?: Maybe; publishedAt?: Maybe; title?: Maybe; updatedAt?: Maybe; @@ -2577,31 +2448,26 @@ export type PdcCategory = { export type PdcCategoryPdc_SubcategoriesArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type PdcCategoryEntity = { - __typename?: 'PdcCategoryEntity'; - attributes?: Maybe; - id?: Maybe; -}; -export type PdcCategoryEntityResponse = { - __typename?: 'PdcCategoryEntityResponse'; - data?: Maybe; +export type PdcCategoryPdc_Subcategories_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type PdcCategoryEntityResponseCollection = { __typename?: 'PdcCategoryEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type PdcCategoryFiltersInput = { and?: InputMaybe>>; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; pdc_subcategories?: InputMaybe; @@ -2619,9 +2485,11 @@ export type PdcCategoryInput = { export type PdcFaq = { __typename?: 'PdcFaq'; createdAt?: Maybe; + documentId: Scalars['ID']['output']; faq?: Maybe>>; locale?: Maybe; - localizations?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; publishedAt?: Maybe; title?: Maybe; updatedAt?: Maybe; @@ -2638,32 +2506,27 @@ export type PdcFaqFaqArgs = { export type PdcFaqLocalizationsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type PdcFaqEntity = { - __typename?: 'PdcFaqEntity'; - attributes?: Maybe; - id?: Maybe; -}; -export type PdcFaqEntityResponse = { - __typename?: 'PdcFaqEntityResponse'; - data?: Maybe; +export type PdcFaqLocalizations_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type PdcFaqEntityResponseCollection = { __typename?: 'PdcFaqEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type PdcFaqFiltersInput = { and?: InputMaybe>>; createdAt?: InputMaybe; + documentId?: InputMaybe; faq?: InputMaybe; - id?: InputMaybe; locale?: InputMaybe; localizations?: InputMaybe; not?: InputMaybe; @@ -2681,37 +2544,23 @@ export type PdcFaqInput = { export type PdcFaqRelationResponseCollection = { __typename?: 'PdcFaqRelationResponseCollection'; - data: Array; + nodes: Array; }; export type PdcHomePage = { __typename?: 'PdcHomePage'; components?: Maybe>>; createdAt?: Maybe; + documentId: Scalars['ID']['output']; locale?: Maybe; - localizations?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; publishedAt?: Maybe; updatedAt?: Maybe; }; - -export type PdcHomePageLocalizationsArgs = { - publicationState?: InputMaybe; -}; - export type PdcHomePageComponentsDynamicZone = ComponentComponentsUtrechtTopTasks | Error; -export type PdcHomePageEntity = { - __typename?: 'PdcHomePageEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type PdcHomePageEntityResponse = { - __typename?: 'PdcHomePageEntityResponse'; - data?: Maybe; -}; - export type PdcHomePageInput = { components?: InputMaybe>; publishedAt?: InputMaybe; @@ -2719,48 +2568,61 @@ export type PdcHomePageInput = { export type PdcHomePageRelationResponseCollection = { __typename?: 'PdcHomePageRelationResponseCollection'; - data: Array; + nodes: Array; }; export type PdcSubcategory = { __typename?: 'PdcSubcategory'; createdAt?: Maybe; - pdc_category?: Maybe; - products?: Maybe; + documentId: Scalars['ID']['output']; + pdc_category?: Maybe; + products: Array>; + products_connection?: Maybe; publishedAt?: Maybe; title?: Maybe; updatedAt?: Maybe; + vacs: Array>; + vacs_connection?: Maybe; }; export type PdcSubcategoryProductsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type PdcSubcategoryEntity = { - __typename?: 'PdcSubcategoryEntity'; - attributes?: Maybe; - id?: Maybe; + +export type PdcSubcategoryProducts_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type PdcSubcategoryVacsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; -export type PdcSubcategoryEntityResponse = { - __typename?: 'PdcSubcategoryEntityResponse'; - data?: Maybe; + +export type PdcSubcategoryVacs_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type PdcSubcategoryEntityResponseCollection = { __typename?: 'PdcSubcategoryEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type PdcSubcategoryFiltersInput = { and?: InputMaybe>>; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; pdc_category?: InputMaybe; @@ -2768,6 +2630,7 @@ export type PdcSubcategoryFiltersInput = { publishedAt?: InputMaybe; title?: InputMaybe; updatedAt?: InputMaybe; + vacs?: InputMaybe; }; export type PdcSubcategoryInput = { @@ -2775,39 +2638,26 @@ export type PdcSubcategoryInput = { products?: InputMaybe>>; publishedAt?: InputMaybe; title?: InputMaybe; + vacs?: InputMaybe>>; }; export type PdcSubcategoryRelationResponseCollection = { __typename?: 'PdcSubcategoryRelationResponseCollection'; - data: Array; + nodes: Array; }; export type PdcTemplate = { __typename?: 'PdcTemplate'; createdAt?: Maybe; + documentId: Scalars['ID']['output']; locale?: Maybe; - localizations?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; publishedAt?: Maybe; sections?: Maybe>>; updatedAt?: Maybe; }; - -export type PdcTemplateLocalizationsArgs = { - publicationState?: InputMaybe; -}; - -export type PdcTemplateEntity = { - __typename?: 'PdcTemplateEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type PdcTemplateEntityResponse = { - __typename?: 'PdcTemplateEntityResponse'; - data?: Maybe; -}; - export type PdcTemplateInput = { publishedAt?: InputMaybe; sections?: InputMaybe>; @@ -2815,7 +2665,7 @@ export type PdcTemplateInput = { export type PdcTemplateRelationResponseCollection = { __typename?: 'PdcTemplateRelationResponseCollection'; - data: Array; + nodes: Array; }; export type PdcTemplateSectionsDynamicZone = ComponentComponentsUtrechtFooter | ComponentComponentsUtrechtNavigation | Error; @@ -2823,8 +2673,10 @@ export type PdcTemplateSectionsDynamicZone = ComponentComponentsUtrechtFooter | export type Price = { __typename?: 'Price'; createdAt?: Maybe; + documentId: Scalars['ID']['output']; price?: Maybe>>; - products?: Maybe; + products: Array>; + products_connection?: Maybe; publishedAt?: Maybe; title: Scalars['String']['output']; updatedAt?: Maybe; @@ -2842,31 +2694,26 @@ export type PricePriceArgs = { export type PriceProductsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type PriceEntity = { - __typename?: 'PriceEntity'; - attributes?: Maybe; - id?: Maybe; -}; -export type PriceEntityResponse = { - __typename?: 'PriceEntityResponse'; - data?: Maybe; +export type PriceProducts_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type PriceEntityResponseCollection = { __typename?: 'PriceEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type PriceFiltersInput = { and?: InputMaybe>>; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; price?: InputMaybe; @@ -2887,35 +2734,44 @@ export type PriceInput = { export type Product = { __typename?: 'Product'; - additional_information?: Maybe; + additional_information?: Maybe; catalogiMeta?: Maybe; - contact_information_public?: Maybe; + contact_information_public?: Maybe; content?: Maybe; createdAt?: Maybe; + documentId: Scalars['ID']['output']; enable_kcm_survey?: Maybe; kennisartikelMetadata?: Maybe; locale?: Maybe; - localizations?: Maybe; + localizations: Array>; + localizations_connection?: Maybe; metaTags?: Maybe; oldSlugs?: Maybe; pdc_metadata?: Maybe; - pdc_subcategories?: Maybe; - price?: Maybe; - productencatalogus?: Maybe; + pdc_subcategories: Array>; + pdc_subcategories_connection?: Maybe; + price?: Maybe; + productencatalogus?: Maybe; publishedAt?: Maybe; sections?: Maybe>>; slug: Scalars['String']['output']; title: Scalars['String']['output']; updatedAt?: Maybe; uuid?: Maybe; - vacs?: Maybe; + vacs?: Maybe; }; export type ProductLocalizationsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ProductLocalizations_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; sort?: InputMaybe>>; }; @@ -2923,25 +2779,20 @@ export type ProductLocalizationsArgs = { export type ProductPdc_SubcategoriesArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type ProductEntity = { - __typename?: 'ProductEntity'; - attributes?: Maybe; - id?: Maybe; -}; -export type ProductEntityResponse = { - __typename?: 'ProductEntityResponse'; - data?: Maybe; +export type ProductPdc_Subcategories_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type ProductEntityResponseCollection = { __typename?: 'ProductEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type ProductFiltersInput = { @@ -2951,13 +2802,12 @@ export type ProductFiltersInput = { contact_information_public?: InputMaybe; content?: InputMaybe; createdAt?: InputMaybe; + documentId?: InputMaybe; enable_kcm_survey?: InputMaybe; - id?: InputMaybe; kennisartikelMetadata?: InputMaybe; locale?: InputMaybe; localizations?: InputMaybe; metaTags?: InputMaybe; - metadata?: InputMaybe; not?: InputMaybe; oldSlugs?: InputMaybe; or?: InputMaybe>>; @@ -2981,7 +2831,6 @@ export type ProductInput = { enable_kcm_survey?: InputMaybe; kennisartikelMetadata?: InputMaybe; metaTags?: InputMaybe; - metadata?: InputMaybe; oldSlugs?: InputMaybe; pdc_metadata?: InputMaybe; pdc_subcategories?: InputMaybe>>; @@ -2997,7 +2846,7 @@ export type ProductInput = { export type ProductRelationResponseCollection = { __typename?: 'ProductRelationResponseCollection'; - data: Array; + nodes: Array; }; export type ProductSectionsDynamicZone = ComponentComponentsContactInformationPublic | ComponentComponentsFaq | ComponentComponentsFloLegalForm | ComponentComponentsInternalBlockContent | ComponentComponentsUtrechtAccordion | ComponentComponentsUtrechtImage | ComponentComponentsUtrechtLink | ComponentComponentsUtrechtLogoButton | ComponentComponentsUtrechtMultiColumnsButton | ComponentComponentsUtrechtRichText | ComponentComponentsUtrechtSpotlight | Error; @@ -3009,13 +2858,15 @@ export type Productencatalogus = { contactpersoonBeheerEmail?: Maybe; contactpersoonBeheerNaam: Scalars['String']['output']; createdAt?: Maybe; + documentId: Scalars['ID']['output']; doelgroep: Enum_Productencatalogus_Doelgroep; domein: Scalars['String']['output']; naam: Scalars['String']['output']; organisatieIdentificatie?: Maybe; - producten?: Maybe; + producten?: Maybe; publishedAt?: Maybe; - referentieCatalogus?: Maybe; + referentieCatalogus: Array>; + referentieCatalogus_connection?: Maybe; referentiePDC: Scalars['Boolean']['output']; toelichting?: Maybe; updatedAt?: Maybe; @@ -3026,25 +2877,20 @@ export type Productencatalogus = { export type ProductencatalogusReferentieCatalogusArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type ProductencatalogusEntity = { - __typename?: 'ProductencatalogusEntity'; - attributes?: Maybe; - id?: Maybe; -}; -export type ProductencatalogusEntityResponse = { - __typename?: 'ProductencatalogusEntityResponse'; - data?: Maybe; +export type ProductencatalogusReferentieCatalogus_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type ProductencatalogusEntityResponseCollection = { __typename?: 'ProductencatalogusEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type ProductencatalogusFiltersInput = { @@ -3054,9 +2900,9 @@ export type ProductencatalogusFiltersInput = { contactpersoonBeheerEmail?: InputMaybe; contactpersoonBeheerNaam?: InputMaybe; createdAt?: InputMaybe; + documentId?: InputMaybe; doelgroep?: InputMaybe; domein?: InputMaybe; - id?: InputMaybe; naam?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; @@ -3089,153 +2935,201 @@ export type ProductencatalogusInput = { export type ProductencatalogusRelationResponseCollection = { __typename?: 'ProductencatalogusRelationResponseCollection'; - data: Array; + nodes: Array; }; -export enum PublicationState { - Live = 'LIVE', - Preview = 'PREVIEW' +export enum PublicationStatus { + Draft = 'DRAFT', + Published = 'PUBLISHED' } export type PublisherAction = { __typename?: 'PublisherAction'; createdAt?: Maybe; - entityId?: Maybe; - entitySlug?: Maybe; - executeAt?: Maybe; - mode?: Maybe; + documentId: Scalars['ID']['output']; + entityId: Scalars['String']['output']; + entitySlug: Scalars['String']['output']; + executeAt: Scalars['DateTime']['output']; + mode: Scalars['String']['output']; + publishedAt?: Maybe; updatedAt?: Maybe; }; -export type PublisherActionEntity = { - __typename?: 'PublisherActionEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type PublisherActionEntityResponse = { - __typename?: 'PublisherActionEntityResponse'; - data?: Maybe; -}; - export type PublisherActionEntityResponseCollection = { __typename?: 'PublisherActionEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type PublisherActionFiltersInput = { and?: InputMaybe>>; createdAt?: InputMaybe; - entityId?: InputMaybe; + documentId?: InputMaybe; + entityId?: InputMaybe; entitySlug?: InputMaybe; executeAt?: InputMaybe; - id?: InputMaybe; mode?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; + publishedAt?: InputMaybe; updatedAt?: InputMaybe; }; export type PublisherActionInput = { - entityId?: InputMaybe; + entityId?: InputMaybe; entitySlug?: InputMaybe; executeAt?: InputMaybe; mode?: InputMaybe; + publishedAt?: InputMaybe; }; export type Query = { __typename?: 'Query'; - additionalInformation?: Maybe; - additionalInformations?: Maybe; - contactInformationInternal?: Maybe; - contactInformationInternals?: Maybe; - contactInformationPublic?: Maybe; - contactInformationPublics?: Maybe; - entityNotesNote?: Maybe; - entityNotesNotes?: Maybe; - findSlug?: Maybe; - i18NLocale?: Maybe; - i18NLocales?: Maybe; - internalField?: Maybe; - internalFields?: Maybe; + additionalInformation?: Maybe; + additionalInformations: Array>; + additionalInformations_connection?: Maybe; + contactInformationInternal?: Maybe; + contactInformationInternals: Array>; + contactInformationInternals_connection?: Maybe; + contactInformationPublic?: Maybe; + contactInformationPublics: Array>; + contactInformationPublics_connection?: Maybe; + entityNotesNote?: Maybe; + entityNotesNotes: Array>; + entityNotesNotes_connection?: Maybe; + i18NLocale?: Maybe; + i18NLocales: Array>; + i18NLocales_connection?: Maybe; + internalField?: Maybe; + internalFields: Array>; + internalFields_connection?: Maybe; me?: Maybe; - notFoundPage?: Maybe; - openFormsErrorPage?: Maybe; - openFormsErrorPages?: Maybe; - pdcCategories?: Maybe; - pdcCategory?: Maybe; - pdcFaq?: Maybe; - pdcFaqs?: Maybe; - pdcHomePage?: Maybe; - pdcSubcategories?: Maybe; - pdcSubcategory?: Maybe; - pdcTemplate?: Maybe; - price?: Maybe; - prices?: Maybe; - product?: Maybe; - productencatalogus?: Maybe; - productencataloguses?: Maybe; - products?: Maybe; - publisherAction?: Maybe; - publisherActions?: Maybe; - slugifySlug?: Maybe; - slugifySlugs?: Maybe; - uploadFile?: Maybe; - uploadFiles?: Maybe; - uploadFolder?: Maybe; - uploadFolders?: Maybe; - usersPermissionsRole?: Maybe; - usersPermissionsRoles?: Maybe; - usersPermissionsUser?: Maybe; - usersPermissionsUsers?: Maybe; - vac?: Maybe; - vacs?: Maybe; - websiteSetting?: Maybe; + notFoundPage?: Maybe; + openFormsErrorPage?: Maybe; + openFormsErrorPages: Array>; + openFormsErrorPages_connection?: Maybe; + pdcCategories: Array>; + pdcCategories_connection?: Maybe; + pdcCategory?: Maybe; + pdcFaq?: Maybe; + pdcFaqs: Array>; + pdcFaqs_connection?: Maybe; + pdcHomePage?: Maybe; + pdcSubcategories: Array>; + pdcSubcategories_connection?: Maybe; + pdcSubcategory?: Maybe; + pdcTemplate?: Maybe; + price?: Maybe; + prices: Array>; + prices_connection?: Maybe; + product?: Maybe; + productencatalogus?: Maybe; + productencataloguses: Array>; + productencataloguses_connection?: Maybe; + products: Array>; + products_connection?: Maybe; + publisherAction?: Maybe; + publisherActions: Array>; + publisherActions_connection?: Maybe; + reviewWorkflowsWorkflow?: Maybe; + reviewWorkflowsWorkflowStage?: Maybe; + reviewWorkflowsWorkflowStages: Array>; + reviewWorkflowsWorkflowStages_connection?: Maybe; + reviewWorkflowsWorkflows: Array>; + reviewWorkflowsWorkflows_connection?: Maybe; + uploadFile?: Maybe; + uploadFiles: Array>; + uploadFiles_connection?: Maybe; + usersPermissionsRole?: Maybe; + usersPermissionsRoles: Array>; + usersPermissionsRoles_connection?: Maybe; + usersPermissionsUser?: Maybe; + usersPermissionsUsers: Array>; + usersPermissionsUsers_connection?: Maybe; + vac?: Maybe; + vacs: Array>; + vacs_connection?: Maybe; + websiteSetting?: Maybe; }; export type QueryAdditionalInformationArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; }; export type QueryAdditionalInformationsArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; }; -export type QueryContactInformationInternalArgs = { - id?: InputMaybe; -}; - +export type QueryAdditionalInformations_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryContactInformationInternalArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + export type QueryContactInformationInternalsArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryContactInformationInternals_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryContactInformationPublicArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; }; export type QueryContactInformationPublicsArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryContactInformationPublics_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryEntityNotesNoteArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; }; @@ -3246,15 +3140,15 @@ export type QueryEntityNotesNotesArgs = { }; -export type QueryFindSlugArgs = { - modelName?: InputMaybe; - publicationState?: InputMaybe; - slug?: InputMaybe; +export type QueryEntityNotesNotes_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type QueryI18NLocaleArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; }; @@ -3265,136 +3159,245 @@ export type QueryI18NLocalesArgs = { }; +export type QueryI18NLocales_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + export type QueryInternalFieldArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; }; export type QueryInternalFieldsArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryInternalFields_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryNotFoundPageArgs = { + hasPublishedVersion?: InputMaybe; locale?: InputMaybe; - publicationState?: InputMaybe; + status?: InputMaybe; }; export type QueryOpenFormsErrorPageArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; locale?: InputMaybe; + status?: InputMaybe; }; export type QueryOpenFormsErrorPagesArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryOpenFormsErrorPages_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; locale?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryPdcCategoriesArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcCategories_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryPdcCategoryArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; }; export type QueryPdcFaqArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; locale?: InputMaybe; + status?: InputMaybe; }; export type QueryPdcFaqsArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; locale?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcFaqs_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryPdcHomePageArgs = { + hasPublishedVersion?: InputMaybe; locale?: InputMaybe; - publicationState?: InputMaybe; + status?: InputMaybe; }; export type QueryPdcSubcategoriesArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPdcSubcategories_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryPdcSubcategoryArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; }; export type QueryPdcTemplateArgs = { + hasPublishedVersion?: InputMaybe; locale?: InputMaybe; - publicationState?: InputMaybe; + status?: InputMaybe; }; export type QueryPriceArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; }; export type QueryPricesArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryPrices_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryProductArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; locale?: InputMaybe; + status?: InputMaybe; }; export type QueryProductencatalogusArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; }; export type QueryProductencatalogusesArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryProductencataloguses_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryProductsArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + locale?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryProducts_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; locale?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; }; export type QueryPublisherActionArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; }; @@ -3405,44 +3408,72 @@ export type QueryPublisherActionsArgs = { }; -export type QuerySlugifySlugArgs = { - id?: InputMaybe; +export type QueryPublisherActions_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; -export type QuerySlugifySlugsArgs = { - filters?: InputMaybe; +export type QueryReviewWorkflowsWorkflowArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryReviewWorkflowsWorkflowStageArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryReviewWorkflowsWorkflowStagesArgs = { + filters?: InputMaybe; pagination?: InputMaybe; sort?: InputMaybe>>; }; -export type QueryUploadFileArgs = { - id?: InputMaybe; +export type QueryReviewWorkflowsWorkflowStages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; -export type QueryUploadFilesArgs = { - filters?: InputMaybe; +export type QueryReviewWorkflowsWorkflowsArgs = { + filters?: InputMaybe; pagination?: InputMaybe; sort?: InputMaybe>>; }; -export type QueryUploadFolderArgs = { - id?: InputMaybe; +export type QueryReviewWorkflowsWorkflows_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUploadFileArgs = { + documentId: Scalars['ID']['input']; }; -export type QueryUploadFoldersArgs = { - filters?: InputMaybe; +export type QueryUploadFilesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUploadFiles_ConnectionArgs = { + filters?: InputMaybe; pagination?: InputMaybe; sort?: InputMaybe>>; }; export type QueryUsersPermissionsRoleArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; }; @@ -3453,8 +3484,15 @@ export type QueryUsersPermissionsRolesArgs = { }; +export type QueryUsersPermissionsRoles_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + export type QueryUsersPermissionsUserArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; }; @@ -3465,67 +3503,138 @@ export type QueryUsersPermissionsUsersArgs = { }; +export type QueryUsersPermissionsUsers_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + export type QueryVacArgs = { - id?: InputMaybe; + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; }; export type QueryVacsArgs = { filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; + status?: InputMaybe; }; -export type QueryWebsiteSettingArgs = { - publicationState?: InputMaybe; +export type QueryVacs_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; }; -export type ResponseCollectionMeta = { - __typename?: 'ResponseCollectionMeta'; - pagination: Pagination; + +export type QueryWebsiteSettingArgs = { + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; }; -export type SlugifySlug = { - __typename?: 'SlugifySlug'; - count?: Maybe; +export type ReviewWorkflowsWorkflow = { + __typename?: 'ReviewWorkflowsWorkflow'; + contentTypes: Scalars['JSON']['output']; createdAt?: Maybe; - slug?: Maybe; + documentId: Scalars['ID']['output']; + name: Scalars['String']['output']; + publishedAt?: Maybe; + stageRequiredToPublish?: Maybe; + stages: Array>; + stages_connection?: Maybe; updatedAt?: Maybe; }; -export type SlugifySlugEntity = { - __typename?: 'SlugifySlugEntity'; - attributes?: Maybe; - id?: Maybe; + +export type ReviewWorkflowsWorkflowStagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; -export type SlugifySlugEntityResponse = { - __typename?: 'SlugifySlugEntityResponse'; - data?: Maybe; + +export type ReviewWorkflowsWorkflowStages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; -export type SlugifySlugEntityResponseCollection = { - __typename?: 'SlugifySlugEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; +export type ReviewWorkflowsWorkflowEntityResponseCollection = { + __typename?: 'ReviewWorkflowsWorkflowEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; }; -export type SlugifySlugFiltersInput = { - and?: InputMaybe>>; - count?: InputMaybe; +export type ReviewWorkflowsWorkflowFiltersInput = { + and?: InputMaybe>>; + contentTypes?: InputMaybe; createdAt?: InputMaybe; - id?: InputMaybe; - not?: InputMaybe; - or?: InputMaybe>>; - slug?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + stageRequiredToPublish?: InputMaybe; + stages?: InputMaybe; updatedAt?: InputMaybe; }; -export type SlugifySlugInput = { - count?: InputMaybe; - slug?: InputMaybe; +export type ReviewWorkflowsWorkflowInput = { + contentTypes?: InputMaybe; + name?: InputMaybe; + publishedAt?: InputMaybe; + stageRequiredToPublish?: InputMaybe; + stages?: InputMaybe>>; +}; + +export type ReviewWorkflowsWorkflowStage = { + __typename?: 'ReviewWorkflowsWorkflowStage'; + color?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + name?: Maybe; + publishedAt?: Maybe; + updatedAt?: Maybe; + workflow?: Maybe; +}; + +export type ReviewWorkflowsWorkflowStageEntityResponseCollection = { + __typename?: 'ReviewWorkflowsWorkflowStageEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type ReviewWorkflowsWorkflowStageFiltersInput = { + and?: InputMaybe>>; + color?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + updatedAt?: InputMaybe; + workflow?: InputMaybe; +}; + +export type ReviewWorkflowsWorkflowStageInput = { + color?: InputMaybe; + name?: InputMaybe; + publishedAt?: InputMaybe; + workflow?: InputMaybe; +}; + +export type ReviewWorkflowsWorkflowStageRelationResponseCollection = { + __typename?: 'ReviewWorkflowsWorkflowStageRelationResponseCollection'; + nodes: Array; }; export type StringFilterInput = { @@ -3558,7 +3667,9 @@ export type UploadFile = { alternativeText?: Maybe; caption?: Maybe; createdAt?: Maybe; + documentId: Scalars['ID']['output']; ext?: Maybe; + focalPoint?: Maybe; formats?: Maybe; hash: Scalars['String']['output']; height?: Maybe; @@ -3567,6 +3678,7 @@ export type UploadFile = { previewUrl?: Maybe; provider: Scalars['String']['output']; provider_metadata?: Maybe; + publishedAt?: Maybe; related?: Maybe>>; size: Scalars['Float']['output']; updatedAt?: Maybe; @@ -3574,21 +3686,10 @@ export type UploadFile = { width?: Maybe; }; -export type UploadFileEntity = { - __typename?: 'UploadFileEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type UploadFileEntityResponse = { - __typename?: 'UploadFileEntityResponse'; - data?: Maybe; -}; - export type UploadFileEntityResponseCollection = { __typename?: 'UploadFileEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type UploadFileFiltersInput = { @@ -3596,13 +3697,12 @@ export type UploadFileFiltersInput = { and?: InputMaybe>>; caption?: InputMaybe; createdAt?: InputMaybe; + documentId?: InputMaybe; ext?: InputMaybe; - folder?: InputMaybe; - folderPath?: InputMaybe; + focalPoint?: InputMaybe; formats?: InputMaybe; hash?: InputMaybe; height?: InputMaybe; - id?: InputMaybe; mime?: InputMaybe; name?: InputMaybe; not?: InputMaybe; @@ -3610,108 +3710,13 @@ export type UploadFileFiltersInput = { previewUrl?: InputMaybe; provider?: InputMaybe; provider_metadata?: InputMaybe; + publishedAt?: InputMaybe; size?: InputMaybe; updatedAt?: InputMaybe; url?: InputMaybe; width?: InputMaybe; }; -export type UploadFileInput = { - alternativeText?: InputMaybe; - caption?: InputMaybe; - ext?: InputMaybe; - folder?: InputMaybe; - folderPath?: InputMaybe; - formats?: InputMaybe; - hash?: InputMaybe; - height?: InputMaybe; - mime?: InputMaybe; - name?: InputMaybe; - previewUrl?: InputMaybe; - provider?: InputMaybe; - provider_metadata?: InputMaybe; - size?: InputMaybe; - url?: InputMaybe; - width?: InputMaybe; -}; - -export type UploadFileRelationResponseCollection = { - __typename?: 'UploadFileRelationResponseCollection'; - data: Array; -}; - -export type UploadFolder = { - __typename?: 'UploadFolder'; - children?: Maybe; - createdAt?: Maybe; - files?: Maybe; - name: Scalars['String']['output']; - parent?: Maybe; - path: Scalars['String']['output']; - pathId: Scalars['Int']['output']; - updatedAt?: Maybe; -}; - - -export type UploadFolderChildrenArgs = { - filters?: InputMaybe; - pagination?: InputMaybe; - sort?: InputMaybe>>; -}; - - -export type UploadFolderFilesArgs = { - filters?: InputMaybe; - pagination?: InputMaybe; - sort?: InputMaybe>>; -}; - -export type UploadFolderEntity = { - __typename?: 'UploadFolderEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type UploadFolderEntityResponse = { - __typename?: 'UploadFolderEntityResponse'; - data?: Maybe; -}; - -export type UploadFolderEntityResponseCollection = { - __typename?: 'UploadFolderEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; -}; - -export type UploadFolderFiltersInput = { - and?: InputMaybe>>; - children?: InputMaybe; - createdAt?: InputMaybe; - files?: InputMaybe; - id?: InputMaybe; - name?: InputMaybe; - not?: InputMaybe; - or?: InputMaybe>>; - parent?: InputMaybe; - path?: InputMaybe; - pathId?: InputMaybe; - updatedAt?: InputMaybe; -}; - -export type UploadFolderInput = { - children?: InputMaybe>>; - files?: InputMaybe>>; - name?: InputMaybe; - parent?: InputMaybe; - path?: InputMaybe; - pathId?: InputMaybe; -}; - -export type UploadFolderRelationResponseCollection = { - __typename?: 'UploadFolderRelationResponseCollection'; - data: Array; -}; - export type UsersPermissionsCreateRolePayload = { __typename?: 'UsersPermissionsCreateRolePayload'; ok: Scalars['Boolean']['output']; @@ -3738,6 +3743,7 @@ export type UsersPermissionsMe = { __typename?: 'UsersPermissionsMe'; blocked?: Maybe; confirmed?: Maybe; + documentId: Scalars['ID']['output']; email?: Maybe; id: Scalars['ID']['output']; role?: Maybe; @@ -3761,30 +3767,27 @@ export type UsersPermissionsPermission = { __typename?: 'UsersPermissionsPermission'; action: Scalars['String']['output']; createdAt?: Maybe; - role?: Maybe; + documentId: Scalars['ID']['output']; + publishedAt?: Maybe; + role?: Maybe; updatedAt?: Maybe; }; -export type UsersPermissionsPermissionEntity = { - __typename?: 'UsersPermissionsPermissionEntity'; - attributes?: Maybe; - id?: Maybe; -}; - export type UsersPermissionsPermissionFiltersInput = { action?: InputMaybe; and?: InputMaybe>>; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; + publishedAt?: InputMaybe; role?: InputMaybe; updatedAt?: InputMaybe; }; export type UsersPermissionsPermissionRelationResponseCollection = { __typename?: 'UsersPermissionsPermissionRelationResponseCollection'; - data: Array; + nodes: Array; }; export type UsersPermissionsRegisterInput = { @@ -3797,11 +3800,15 @@ export type UsersPermissionsRole = { __typename?: 'UsersPermissionsRole'; createdAt?: Maybe; description?: Maybe; + documentId: Scalars['ID']['output']; name: Scalars['String']['output']; - permissions?: Maybe; + permissions: Array>; + permissions_connection?: Maybe; + publishedAt?: Maybe; type?: Maybe; updatedAt?: Maybe; - users?: Maybe; + users: Array>; + users_connection?: Maybe; }; @@ -3812,38 +3819,42 @@ export type UsersPermissionsRolePermissionsArgs = { }; +export type UsersPermissionsRolePermissions_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + export type UsersPermissionsRoleUsersArgs = { filters?: InputMaybe; pagination?: InputMaybe; sort?: InputMaybe>>; }; -export type UsersPermissionsRoleEntity = { - __typename?: 'UsersPermissionsRoleEntity'; - attributes?: Maybe; - id?: Maybe; -}; -export type UsersPermissionsRoleEntityResponse = { - __typename?: 'UsersPermissionsRoleEntityResponse'; - data?: Maybe; +export type UsersPermissionsRoleUsers_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type UsersPermissionsRoleEntityResponseCollection = { __typename?: 'UsersPermissionsRoleEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type UsersPermissionsRoleFiltersInput = { and?: InputMaybe>>; createdAt?: InputMaybe; description?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; name?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; permissions?: InputMaybe; + publishedAt?: InputMaybe; type?: InputMaybe; updatedAt?: InputMaybe; users?: InputMaybe; @@ -3853,6 +3864,7 @@ export type UsersPermissionsRoleInput = { description?: InputMaybe; name?: InputMaybe; permissions?: InputMaybe>>; + publishedAt?: InputMaybe; type?: InputMaybe; users?: InputMaybe>>; }; @@ -3867,43 +3879,37 @@ export type UsersPermissionsUser = { blocked?: Maybe; confirmed?: Maybe; createdAt?: Maybe; + documentId: Scalars['ID']['output']; email: Scalars['String']['output']; provider?: Maybe; - role?: Maybe; + publishedAt?: Maybe; + role?: Maybe; updatedAt?: Maybe; username: Scalars['String']['output']; }; -export type UsersPermissionsUserEntity = { - __typename?: 'UsersPermissionsUserEntity'; - attributes?: Maybe; - id?: Maybe; -}; - export type UsersPermissionsUserEntityResponse = { __typename?: 'UsersPermissionsUserEntityResponse'; - data?: Maybe; + data?: Maybe; }; export type UsersPermissionsUserEntityResponseCollection = { __typename?: 'UsersPermissionsUserEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type UsersPermissionsUserFiltersInput = { and?: InputMaybe>>; blocked?: InputMaybe; - confirmationToken?: InputMaybe; confirmed?: InputMaybe; createdAt?: InputMaybe; + documentId?: InputMaybe; email?: InputMaybe; - id?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; - password?: InputMaybe; provider?: InputMaybe; - resetPasswordToken?: InputMaybe; + publishedAt?: InputMaybe; role?: InputMaybe; updatedAt?: InputMaybe; username?: InputMaybe; @@ -3911,39 +3917,64 @@ export type UsersPermissionsUserFiltersInput = { export type UsersPermissionsUserInput = { blocked?: InputMaybe; - confirmationToken?: InputMaybe; confirmed?: InputMaybe; email?: InputMaybe; password?: InputMaybe; provider?: InputMaybe; - resetPasswordToken?: InputMaybe; + publishedAt?: InputMaybe; role?: InputMaybe; username?: InputMaybe; }; export type UsersPermissionsUserRelationResponseCollection = { __typename?: 'UsersPermissionsUserRelationResponseCollection'; - data: Array; + nodes: Array; }; export type Vac = { __typename?: 'Vac'; - contact_information_internal?: Maybe; - contact_information_public?: Maybe; + contact_information_internal: Array>; + contact_information_internal_connection?: Maybe; + contact_information_public?: Maybe; createdAt?: Maybe; + documentId: Scalars['ID']['output']; publishedAt?: Maybe; - relatedProducts?: Maybe; - relatedVACs?: Maybe; + relatedProducts: Array>; + relatedProducts_connection?: Maybe; + relatedVACs: Array>; + relatedVACs_connection?: Maybe; + subcategories: Array>; + subcategories_connection?: Maybe; title?: Maybe; updatedAt?: Maybe; vac?: Maybe; }; +export type VacContact_Information_InternalArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacContact_Information_Internal_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + export type VacRelatedProductsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacRelatedProducts_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; sort?: InputMaybe>>; }; @@ -3951,25 +3982,34 @@ export type VacRelatedProductsArgs = { export type VacRelatedVaCsArgs = { filters?: InputMaybe; pagination?: InputMaybe; - publicationState?: InputMaybe; sort?: InputMaybe>>; }; -export type VacEntity = { - __typename?: 'VacEntity'; - attributes?: Maybe; - id?: Maybe; + +export type VacRelatedVaCs_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; -export type VacEntityResponse = { - __typename?: 'VacEntityResponse'; - data?: Maybe; + +export type VacSubcategoriesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type VacSubcategories_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; }; export type VacEntityResponseCollection = { __typename?: 'VacEntityResponseCollection'; - data: Array; - meta: ResponseCollectionMeta; + nodes: Array; + pageInfo: Pagination; }; export type VacFiltersInput = { @@ -3977,51 +4017,43 @@ export type VacFiltersInput = { contact_information_internal?: InputMaybe; contact_information_public?: InputMaybe; createdAt?: InputMaybe; - id?: InputMaybe; + documentId?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; publishedAt?: InputMaybe; relatedProducts?: InputMaybe; relatedVACs?: InputMaybe; + subcategories?: InputMaybe; title?: InputMaybe; updatedAt?: InputMaybe; vac?: InputMaybe; }; export type VacInput = { - contact_information_internal?: InputMaybe; + contact_information_internal?: InputMaybe>>; contact_information_public?: InputMaybe; publishedAt?: InputMaybe; relatedProducts?: InputMaybe>>; relatedVACs?: InputMaybe>>; + subcategories?: InputMaybe>>; title?: InputMaybe; vac?: InputMaybe; }; export type VacRelationResponseCollection = { __typename?: 'VacRelationResponseCollection'; - data: Array; + nodes: Array; }; export type WebsiteSetting = { __typename?: 'WebsiteSetting'; createdAt?: Maybe; + documentId: Scalars['ID']['output']; publishedAt?: Maybe; triggerMatomoScript?: Maybe; updatedAt?: Maybe; }; -export type WebsiteSettingEntity = { - __typename?: 'WebsiteSettingEntity'; - attributes?: Maybe; - id?: Maybe; -}; - -export type WebsiteSettingEntityResponse = { - __typename?: 'WebsiteSettingEntityResponse'; - data?: Maybe; -}; - export type WebsiteSettingInput = { publishedAt?: InputMaybe; triggerMatomoScript?: InputMaybe; @@ -4029,11 +4061,11 @@ export type WebsiteSettingInput = { export type GetPdcHomePageQueryVariables = Exact<{ locale?: InputMaybe; - pageMode?: InputMaybe; + status?: InputMaybe; }>; -export type GetPdcHomePageQuery = { __typename?: 'Query', pdcHomePage?: { __typename?: 'PdcHomePageEntityResponse', data?: { __typename?: 'PdcHomePageEntity', attributes?: { __typename?: 'PdcHomePage', components?: Array<{ __typename: 'ComponentComponentsUtrechtTopTasks', link?: Array<{ __typename?: 'ComponentComponentsUtrechtTopTaskLink', id: string, textContent?: string | null, href?: string | null, topTaskIcons: Enum_Componentcomponentsutrechttoptasklink_Toptaskicons } | null> | null } | { __typename?: 'Error' } | null> | null } | null } | null } | null }; +export type GetPdcHomePageQuery = { __typename?: 'Query', pdcHomePage?: { __typename?: 'PdcHomePage', components?: Array<{ __typename: 'ComponentComponentsUtrechtTopTasks', link?: Array<{ __typename?: 'ComponentComponentsUtrechtTopTaskLink', id: string, textContent?: string | null, href?: string | null, topTaskIcons: Enum_Componentcomponentsutrechttoptasklink_Toptaskicons } | null> | null } | { __typename?: 'Error' } | null> | null } | null }; export type GetAllProductsSlugQueryQueryVariables = Exact<{ locale?: InputMaybe; @@ -4042,12 +4074,12 @@ export type GetAllProductsSlugQueryQueryVariables = Exact<{ }>; -export type GetAllProductsSlugQueryQuery = { __typename?: 'Query', products?: { __typename?: 'ProductEntityResponseCollection', meta: { __typename?: 'ResponseCollectionMeta', pagination: { __typename?: 'Pagination', total: number, page: number, pageSize: number, pageCount: number } }, data: Array<{ __typename?: 'ProductEntity', attributes?: { __typename?: 'Product', slug: string, title: string, locale?: string | null, updatedAt?: any | null, metaTags?: { __typename?: 'ComponentSeoMeta', description: string } | null } | null }> } | null }; +export type GetAllProductsSlugQueryQuery = { __typename?: 'Query', products_connection?: { __typename?: 'ProductEntityResponseCollection', pageInfo: { __typename?: 'Pagination', total: number, page: number, pageSize: number, pageCount: number }, nodes: Array<{ __typename?: 'Product', slug: string, title: string, locale?: string | null, updatedAt?: any | null, metaTags?: { __typename?: 'ComponentSeoMeta', description: string } | null }> } | null }; export type GetAllProductsSitemapQueryVariables = Exact<{ [key: string]: never; }>; -export type GetAllProductsSitemapQuery = { __typename?: 'Query', products?: { __typename?: 'ProductEntityResponseCollection', data: Array<{ __typename?: 'ProductEntity', attributes?: { __typename?: 'Product', slug: string, locale?: string | null, updatedAt?: any | null } | null }> } | null }; +export type GetAllProductsSitemapQuery = { __typename?: 'Query', products: Array<{ __typename?: 'Product', slug: string, locale?: string | null, updatedAt?: any | null } | null> }; export type GetAlphabeticallyProductsByLetterQueryQueryVariables = Exact<{ locale?: InputMaybe; @@ -4057,7 +4089,7 @@ export type GetAlphabeticallyProductsByLetterQueryQueryVariables = Exact<{ }>; -export type GetAlphabeticallyProductsByLetterQueryQuery = { __typename?: 'Query', products?: { __typename?: 'ProductEntityResponseCollection', meta: { __typename?: 'ResponseCollectionMeta', pagination: { __typename?: 'Pagination', total: number, page: number, pageSize: number, pageCount: number } }, data: Array<{ __typename?: 'ProductEntity', attributes?: { __typename?: 'Product', slug: string, title: string, locale?: string | null, updatedAt?: any | null, metaTags?: { __typename?: 'ComponentSeoMeta', description: string } | null } | null }> } | null }; +export type GetAlphabeticallyProductsByLetterQueryQuery = { __typename?: 'Query', products_connection?: { __typename?: 'ProductEntityResponseCollection', pageInfo: { __typename?: 'Pagination', total: number, page: number, pageSize: number, pageCount: number }, nodes: Array<{ __typename?: 'Product', slug: string, title: string, locale?: string | null, updatedAt?: any | null, metaTags?: { __typename?: 'ComponentSeoMeta', description: string } | null }> } | null }; export type CheckAlphabeticallyProductsAvailabilityQueryVariables = Exact<{ locale?: InputMaybe; @@ -4065,81 +4097,81 @@ export type CheckAlphabeticallyProductsAvailabilityQueryVariables = Exact<{ }>; -export type CheckAlphabeticallyProductsAvailabilityQuery = { __typename?: 'Query', products?: { __typename?: 'ProductEntityResponseCollection', data: Array<{ __typename?: 'ProductEntity', attributes?: { __typename?: 'Product', title: string } | null }> } | null }; +export type CheckAlphabeticallyProductsAvailabilityQuery = { __typename?: 'Query', products: Array<{ __typename?: 'Product', title: string } | null> }; export type GetProductBySlugQueryVariables = Exact<{ slug?: InputMaybe; locale?: InputMaybe; - pageMode?: InputMaybe; + status?: InputMaybe; }>; -export type GetProductBySlugQuery = { __typename?: 'Query', products?: { __typename?: 'ProductEntityResponseCollection', data: Array<{ __typename?: 'ProductEntity', id?: string | null, attributes?: { __typename?: 'Product', title: string, slug: string, content?: string | null, enable_kcm_survey?: boolean | null, locale?: string | null, metaTags?: { __typename?: 'ComponentSeoMeta', title: string, description: string, keymatch: string, ogImage?: { __typename?: 'UploadFileEntityResponse', data?: { __typename?: 'UploadFileEntity', attributes?: { __typename?: 'UploadFile', url: string } | null } | null } | null } | null, sections?: Array<{ __typename: 'ComponentComponentsContactInformationPublic', contact_information_public?: { __typename?: 'ContactInformationPublicEntityResponse', data?: { __typename?: 'ContactInformationPublicEntity', attributes?: { __typename?: 'ContactInformationPublic', contentBlock?: Array<{ __typename?: 'ComponentComponentsContactInformationRichText', id: string, content: string } | null> | null } | null } | null } | null } | { __typename: 'ComponentComponentsFaq', pdc_faq?: { __typename?: 'PdcFaqEntityResponse', data?: { __typename?: 'PdcFaqEntity', attributes?: { __typename?: 'PdcFaq', title?: string | null, faq?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', body?: string | null, headingLevel?: number | null, id: string, label?: string | null } | null> | null } | null } | null } | null } | { __typename: 'ComponentComponentsFloLegalForm', id: string, floLegalFormSelector?: string | null } | { __typename?: 'ComponentComponentsInternalBlockContent' } | { __typename: 'ComponentComponentsUtrechtAccordion', item?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', body?: string | null, headingLevel?: number | null, id: string, label?: string | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtImage', imageData?: { __typename?: 'UploadFileEntityResponse', data?: { __typename?: 'UploadFileEntity', attributes?: { __typename?: 'UploadFile', name: string, alternativeText?: string | null, caption?: string | null, width?: number | null, height?: number | null, formats?: any | null, url: string } | null } | null } | null } | { __typename: 'ComponentComponentsUtrechtLink', href?: string | null, textContent?: string | null, icon?: Enum_Componentcomponentsutrechtlink_Icon | null, language?: string | null } | { __typename: 'ComponentComponentsUtrechtLogoButton', appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null } | { __typename: 'ComponentComponentsUtrechtMultiColumnsButton', column?: Array<{ __typename?: 'ComponentComponentsUtrechtMultiColumnsButtonItem', id: string, title?: string | null, logoButton?: Array<{ __typename: 'ComponentComponentsUtrechtLogoButton', appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null } | null> | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', content: string } | { __typename: 'ComponentComponentsUtrechtSpotlight', content: string, type?: Enum_Componentcomponentsutrechtspotlight_Type | null, logoButton?: Array<{ __typename: 'ComponentComponentsUtrechtLogoButton', id: string, label?: string | null, href?: string | null, textContent?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null } | null> | null } | { __typename?: 'Error' } | null> | null, price?: { __typename?: 'PriceEntityResponse', data?: { __typename?: 'PriceEntity', attributes?: { __typename?: 'Price', price?: Array<{ __typename?: 'ComponentComponentsPrice', currency: Enum_Componentcomponentsprice_Currency, id: string, label: string, uuid?: string | null, value: number } | null> | null } | null } | null } | null, localizations?: { __typename?: 'ProductRelationResponseCollection', data: Array<{ __typename?: 'ProductEntity', attributes?: { __typename?: 'Product', locale?: string | null, slug: string } | null }> } | null } | null }> } | null }; +export type GetProductBySlugQuery = { __typename?: 'Query', products: Array<{ __typename?: 'Product', documentId: string, title: string, slug: string, content?: string | null, enable_kcm_survey?: boolean | null, locale?: string | null, metaTags?: { __typename?: 'ComponentSeoMeta', title: string, description: string, keymatch: string, ogImage?: { __typename?: 'UploadFile', url: string } | null } | null, sections?: Array<{ __typename: 'ComponentComponentsContactInformationPublic', contact_information_public?: { __typename?: 'ContactInformationPublic', contentBlock?: Array<{ __typename?: 'ComponentComponentsContactInformationRichText', id: string, content: string } | null> | null } | null } | { __typename: 'ComponentComponentsFaq', pdc_faq?: { __typename?: 'PdcFaq', title?: string | null, faq?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', body?: string | null, headingLevel?: number | null, id: string, label?: string | null } | null> | null } | null } | { __typename: 'ComponentComponentsFloLegalForm', id: string, floLegalFormSelector?: string | null } | { __typename: 'ComponentComponentsInternalBlockContent' } | { __typename: 'ComponentComponentsUtrechtAccordion', item?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', body?: string | null, headingLevel?: number | null, id: string, label?: string | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtImage', imageData?: { __typename?: 'UploadFile', name: string, alternativeText?: string | null, caption?: string | null, width?: number | null, height?: number | null, formats?: any | null, url: string } | null } | { __typename: 'ComponentComponentsUtrechtLink', href?: string | null, textContent?: string | null, icon?: Enum_Componentcomponentsutrechtlink_Icon | null, language?: string | null } | { __typename: 'ComponentComponentsUtrechtLogoButton', appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null } | { __typename: 'ComponentComponentsUtrechtMultiColumnsButton', column?: Array<{ __typename?: 'ComponentComponentsUtrechtMultiColumnsButtonItem', id: string, title?: string | null, logoButton?: Array<{ __typename?: 'ComponentComponentsUtrechtLogoButton', appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null, href?: string | null, label?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, openFormsEmbed?: string | null, textContent?: string | null } | null> | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', content: string } | { __typename: 'ComponentComponentsUtrechtSpotlight', content: string, type?: Enum_Componentcomponentsutrechtspotlight_Type | null, logoButton?: Array<{ __typename?: 'ComponentComponentsUtrechtLogoButton', id: string, label?: string | null, href?: string | null, textContent?: string | null, logo?: Enum_Componentcomponentsutrechtlogobutton_Logo | null, appearance?: Enum_Componentcomponentsutrechtlogobutton_Appearance | null } | null> | null } | { __typename: 'Error' } | null> | null, price?: { __typename?: 'Price', price?: Array<{ __typename?: 'ComponentComponentsPrice', currency: Enum_Componentcomponentsprice_Currency, id: string, label: string, uuid?: string | null, value: number } | null> | null } | null, localizations: Array<{ __typename?: 'Product', locale?: string | null, slug: string } | null> } | null> }; export type GetProductsOldSlugsQueryVariables = Exact<{ locale?: InputMaybe; }>; -export type GetProductsOldSlugsQuery = { __typename?: 'Query', products?: { __typename?: 'ProductEntityResponseCollection', data: Array<{ __typename?: 'ProductEntity', attributes?: { __typename?: 'Product', slug: string, oldSlugs?: any | null } | null }> } | null }; +export type GetProductsOldSlugsQuery = { __typename?: 'Query', products: Array<{ __typename?: 'Product', slug: string, oldSlugs?: any | null } | null> }; export type GetProductBySlugAndLocaleQueryVariables = Exact<{ slug?: InputMaybe; locale?: InputMaybe; - pageMode?: InputMaybe; + status?: InputMaybe; }>; -export type GetProductBySlugAndLocaleQuery = { __typename?: 'Query', products?: { __typename?: 'ProductEntityResponseCollection', data: Array<{ __typename?: 'ProductEntity', attributes?: { __typename?: 'Product', slug: string, locale?: string | null } | null }> } | null }; +export type GetProductBySlugAndLocaleQuery = { __typename?: 'Query', products: Array<{ __typename?: 'Product', slug: string, locale?: string | null } | null> }; export type GetNotFoundPageQueryVariables = Exact<{ locale?: InputMaybe; }>; -export type GetNotFoundPageQuery = { __typename?: 'Query', notFoundPage?: { __typename?: 'NotFoundPageEntityResponse', data?: { __typename?: 'NotFoundPageEntity', attributes?: { __typename?: 'NotFoundPage', title?: string | null, body?: string | null } | null } | null } | null }; +export type GetNotFoundPageQuery = { __typename?: 'Query', notFoundPage?: { __typename?: 'NotFoundPage', title?: string | null, body?: string | null } | null }; export type GetTemplateDataQueryVariables = Exact<{ locale?: InputMaybe; - pageMode?: InputMaybe; + status?: InputMaybe; }>; -export type GetTemplateDataQuery = { __typename?: 'Query', pdcTemplate?: { __typename?: 'PdcTemplateEntityResponse', data?: { __typename?: 'PdcTemplateEntity', attributes?: { __typename?: 'PdcTemplate', sections?: Array<{ __typename: 'ComponentComponentsUtrechtFooter', title?: string | null, address?: string | null, list?: { __typename?: 'ComponentComponentsUtrechtFooterList', id: string, listItem?: Array<{ __typename?: 'ComponentComponentsUtrechtFooterListItem', id: string, title?: string | null, link?: Array<{ __typename?: 'ComponentComponentsUtrechtFooterLink', id: string, textContent?: string | null, href?: string | null } | null> | null } | null> | null } | null, socialMediaList?: { __typename?: 'ComponentComponentsUtrechtSocialMediaList', id: string, link?: Array<{ __typename?: 'ComponentComponentsUtrechtSocialMediaLink', id: string, textContent?: string | null, href?: string | null, icon: Enum_Componentcomponentsutrechtsocialmedialink_Icon } | null> | null } | null } | { __typename: 'ComponentComponentsUtrechtNavigation', navigationList?: Array<{ __typename?: 'ComponentComponentsUtrechtNavigationLink', id: string, textContent?: string | null, href?: string | null } | null> | null } | { __typename?: 'Error' } | null> | null } | null } | null } | null }; +export type GetTemplateDataQuery = { __typename?: 'Query', pdcTemplate?: { __typename?: 'PdcTemplate', sections?: Array<{ __typename: 'ComponentComponentsUtrechtFooter', title?: string | null, address?: string | null, list?: { __typename?: 'ComponentComponentsUtrechtFooterList', id: string, listItem?: Array<{ __typename?: 'ComponentComponentsUtrechtFooterListItem', id: string, title?: string | null, link?: Array<{ __typename?: 'ComponentComponentsUtrechtFooterLink', id: string, textContent?: string | null, href?: string | null } | null> | null } | null> | null } | null, socialMediaList?: { __typename?: 'ComponentComponentsUtrechtSocialMediaList', id: string, link?: Array<{ __typename?: 'ComponentComponentsUtrechtSocialMediaLink', id: string, textContent?: string | null, href?: string | null, icon: Enum_Componentcomponentsutrechtsocialmedialink_Icon } | null> | null } | null } | { __typename: 'ComponentComponentsUtrechtNavigation', navigationList?: Array<{ __typename?: 'ComponentComponentsUtrechtNavigationLink', id: string, textContent?: string | null, href?: string | null } | null> | null } | { __typename?: 'Error' } | null> | null } | null }; export type GetOpenFormsTemplateDataQueryVariables = Exact<{ locale?: InputMaybe; - pageMode?: InputMaybe; + status?: InputMaybe; }>; -export type GetOpenFormsTemplateDataQuery = { __typename?: 'Query', pdcTemplate?: { __typename?: 'PdcTemplateEntityResponse', data?: { __typename?: 'PdcTemplateEntity', attributes?: { __typename?: 'PdcTemplate', sections?: Array<{ __typename: 'ComponentComponentsUtrechtFooter', title?: string | null, address?: string | null, list?: { __typename?: 'ComponentComponentsUtrechtFooterList', id: string, listItem?: Array<{ __typename?: 'ComponentComponentsUtrechtFooterListItem', id: string, title?: string | null, link?: Array<{ __typename?: 'ComponentComponentsUtrechtFooterLink', id: string, textContent?: string | null, href?: string | null } | null> | null } | null> | null } | null } | { __typename: 'ComponentComponentsUtrechtNavigation', navigationList?: Array<{ __typename?: 'ComponentComponentsUtrechtNavigationLink', id: string, textContent?: string | null, href?: string | null } | null> | null } | { __typename?: 'Error' } | null> | null } | null } | null } | null }; +export type GetOpenFormsTemplateDataQuery = { __typename?: 'Query', pdcTemplate?: { __typename?: 'PdcTemplate', sections?: Array<{ __typename: 'ComponentComponentsUtrechtFooter', title?: string | null, address?: string | null, list?: { __typename?: 'ComponentComponentsUtrechtFooterList', id: string, listItem?: Array<{ __typename?: 'ComponentComponentsUtrechtFooterListItem', id: string, title?: string | null, link?: Array<{ __typename?: 'ComponentComponentsUtrechtFooterLink', id: string, textContent?: string | null, href?: string | null } | null> | null } | null> | null } | null } | { __typename: 'ComponentComponentsUtrechtNavigation', navigationList?: Array<{ __typename?: 'ComponentComponentsUtrechtNavigationLink', id: string, textContent?: string | null, href?: string | null } | null> | null } | { __typename?: 'Error' } | null> | null } | null }; export type GetOpenFormsErrorPageQueryVariables = Exact<{ locale?: InputMaybe; - pageMode?: InputMaybe; + status?: InputMaybe; type?: InputMaybe; }>; -export type GetOpenFormsErrorPageQuery = { __typename?: 'Query', openFormsErrorPages?: { __typename?: 'OpenFormsErrorPageEntityResponseCollection', data: Array<{ __typename?: 'OpenFormsErrorPageEntity', id?: string | null, attributes?: { __typename?: 'OpenFormsErrorPage', title: string, body?: string | null, type: Enum_Openformserrorpage_Type } | null }> } | null }; +export type GetOpenFormsErrorPageQuery = { __typename?: 'Query', openFormsErrorPages: Array<{ __typename?: 'OpenFormsErrorPage', documentId: string, title: string, body?: string | null, type: Enum_Openformserrorpage_Type } | null> }; export type GetWebsiteSettingsQueryVariables = Exact<{ [key: string]: never; }>; -export type GetWebsiteSettingsQuery = { __typename?: 'Query', websiteSetting?: { __typename?: 'WebsiteSettingEntityResponse', data?: { __typename?: 'WebsiteSettingEntity', attributes?: { __typename?: 'WebsiteSetting', triggerMatomoScript?: { __typename?: 'ComponentComponentsTriggerMatomoScript', trackingScripts?: Array<{ __typename?: 'ComponentComponentsTrackingScripts', id: string, title?: string | null, slug?: Enum_Componentcomponentstrackingscripts_Slug | null, enabled?: boolean | null } | null> | null } | null } | null } | null } | null }; +export type GetWebsiteSettingsQuery = { __typename?: 'Query', websiteSetting?: { __typename?: 'WebsiteSetting', triggerMatomoScript?: { __typename?: 'ComponentComponentsTriggerMatomoScript', trackingScripts?: Array<{ __typename?: 'ComponentComponentsTrackingScripts', id: string, slug?: Enum_Componentcomponentstrackingscripts_Slug | null, enabled?: boolean | null } | null> | null } | null } | null }; -export const GetPdcHomePageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getPDCHomePage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationState"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pdcHomePage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"publicationState"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"components"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtTopTasks"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"link"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"topTaskIcons"}}]}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetAllProductsSlugQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAllProductsSlugQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"page"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"page"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"pageSize"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}}}]}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"StringValue","value":"title","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"meta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pagination"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"page"}},{"kind":"Field","name":{"kind":"Name","value":"pageSize"}},{"kind":"Field","name":{"kind":"Name","value":"pageCount"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"description"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetAllProductsSitemapDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAllProductsSitemap"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"StringValue","value":"all","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetAlphabeticallyProductsByLetterQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAlphabeticallyProductsByLetterQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"page"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"startsWith"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"page"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"pageSize"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"title"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"startsWith"},"value":{"kind":"Variable","name":{"kind":"Name","value":"startsWith"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"StringValue","value":"title","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"meta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pagination"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"page"}},{"kind":"Field","name":{"kind":"Name","value":"pageSize"}},{"kind":"Field","name":{"kind":"Name","value":"pageCount"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"description"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const CheckAlphabeticallyProductsAvailabilityDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"checkAlphabeticallyProductsAvailability"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"startsWith"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"title"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"startsWith"},"value":{"kind":"Variable","name":{"kind":"Name","value":"startsWith"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetProductBySlugDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProductBySlug"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationState"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"publicationState"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"keymatch"}},{"kind":"Field","name":{"kind":"Name","value":"ogImage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"enable_kcm_survey"}},{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsContactInformationPublic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtImage"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"imageData"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}},{"kind":"Field","name":{"kind":"Name","value":"caption"}},{"kind":"Field","name":{"kind":"Name","value":"width"}},{"kind":"Field","name":{"kind":"Name","value":"height"}},{"kind":"Field","name":{"kind":"Name","value":"formats"}},{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLogoButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsFloLegalForm"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"floLegalFormSelector"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtSpotlight"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"__typename"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtMultiColumnsButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"column"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLink"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"language"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsFaq"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"pdc_faq"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"faq"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"item"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"price"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currency"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"localizations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"locale"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetProductsOldSlugsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProductsOldSlugs"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"oldSlugs"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"ne"},"value":{"kind":"NullValue"}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"oldSlugs"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetProductBySlugAndLocaleDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProductBySlugAndLocale"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationState"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"publicationState"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetNotFoundPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getNotFoundPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"notFoundPage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"body"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetTemplateDataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getTemplateData"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationState"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pdcTemplate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"publicationState"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtNavigation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"navigationList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtFooter"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"listItem"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"link"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"address"}},{"kind":"Field","name":{"kind":"Name","value":"socialMediaList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"link"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}}]}}]}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetOpenFormsTemplateDataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getOpenFormsTemplateData"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationState"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pdcTemplate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"publicationState"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtNavigation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"navigationList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtFooter"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"listItem"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"link"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"address"}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetOpenFormsErrorPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getOpenFormsErrorPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationState"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"type"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"openFormsErrorPages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"publicationState"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"type"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"type"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"type"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetWebsiteSettingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getWebsiteSettings"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"websiteSetting"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"triggerMatomoScript"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"trackingScripts"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file +export const GetPdcHomePageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getPDCHomePage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pdcHomePage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"components"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtTopTasks"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"link"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"topTaskIcons"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetAllProductsSlugQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAllProductsSlugQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"page"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"page"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"pageSize"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}}}]}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"StringValue","value":"title","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"page"}},{"kind":"Field","name":{"kind":"Name","value":"pageSize"}},{"kind":"Field","name":{"kind":"Name","value":"pageCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"description"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetAllProductsSitemapDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAllProductsSitemap"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"StringValue","value":"nl","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; +export const GetAlphabeticallyProductsByLetterQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAlphabeticallyProductsByLetterQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"page"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"startsWith"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"page"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"pageSize"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageSize"}}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"title"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"startsWith"},"value":{"kind":"Variable","name":{"kind":"Name","value":"startsWith"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"StringValue","value":"title","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"page"}},{"kind":"Field","name":{"kind":"Name","value":"pageSize"}},{"kind":"Field","name":{"kind":"Name","value":"pageCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"description"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const CheckAlphabeticallyProductsAvailabilityDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"checkAlphabeticallyProductsAvailability"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"startsWith"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"title"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"startsWith"},"value":{"kind":"Variable","name":{"kind":"Name","value":"startsWith"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}}]} as unknown as DocumentNode; +export const GetProductBySlugDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProductBySlug"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"metaTags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"keymatch"}},{"kind":"Field","name":{"kind":"Name","value":"ogImage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"enable_kcm_survey"}},{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsContactInformationPublic"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contact_information_public"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtImage"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"imageData"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}},{"kind":"Field","name":{"kind":"Name","value":"caption"}},{"kind":"Field","name":{"kind":"Name","value":"width"}},{"kind":"Field","name":{"kind":"Name","value":"height"}},{"kind":"Field","name":{"kind":"Name","value":"formats"}},{"kind":"Field","name":{"kind":"Name","value":"url"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLogoButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsFloLegalForm"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"floLegalFormSelector"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtSpotlight"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"appearance"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtMultiColumnsButton"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"column"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"logoButton"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"appearance"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"openFormsEmbed"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtLink"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"language"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsFaq"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pdc_faq"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"faq"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"item"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"price"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currency"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"uuid"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"localizations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}},{"kind":"Field","name":{"kind":"Name","value":"locale"}}]}}]}}]} as unknown as DocumentNode; +export const GetProductsOldSlugsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProductsOldSlugs"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"oldSlugs"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"ne"},"value":{"kind":"NullValue"}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"oldSlugs"}}]}}]}}]} as unknown as DocumentNode; +export const GetProductBySlugAndLocaleDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProductBySlugAndLocale"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"products"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}}]}}]}}]} as unknown as DocumentNode; +export const GetNotFoundPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getNotFoundPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"notFoundPage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"body"}}]}}]}}]} as unknown as DocumentNode; +export const GetTemplateDataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getTemplateData"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pdcTemplate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtNavigation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"navigationList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtFooter"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"listItem"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"link"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"address"}},{"kind":"Field","name":{"kind":"Name","value":"socialMediaList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"link"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetOpenFormsTemplateDataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getOpenFormsTemplateData"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pdcTemplate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"sections"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtNavigation"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"navigationList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}}]}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtFooter"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"listItem"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"link"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"textContent"}},{"kind":"Field","name":{"kind":"Name","value":"href"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"address"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetOpenFormsErrorPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getOpenFormsErrorPage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"locale"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"I18NLocaleCode"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"status"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"type"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"openFormsErrorPages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"status"}}},{"kind":"Argument","name":{"kind":"Name","value":"locale"},"value":{"kind":"Variable","name":{"kind":"Name","value":"locale"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"type"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"type"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"type"}}]}}]}}]} as unknown as DocumentNode; +export const GetWebsiteSettingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getWebsiteSettings"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"websiteSetting"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"triggerMatomoScript"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"trackingScripts"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}}]}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/apps/pdc-frontend/jest.config.ts b/apps/pdc-frontend/jest.config.ts index 5c4e23e4a..2a2289e74 100644 --- a/apps/pdc-frontend/jest.config.ts +++ b/apps/pdc-frontend/jest.config.ts @@ -13,6 +13,9 @@ const config: Config = { testPathIgnorePatterns: ['/node_modules/', '/test/e2e/'], // Add more setup options before each test is run // setupFilesAfterEnv: ['/jest.setup.ts'], + moduleNameMapper: { + '^@frameless/utils$': '/../../packages/utils/src', + }, }; // createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async diff --git a/apps/pdc-frontend/next.config.js b/apps/pdc-frontend/next.config.mjs similarity index 67% rename from apps/pdc-frontend/next.config.js rename to apps/pdc-frontend/next.config.mjs index 16a548f29..9147794bb 100644 --- a/apps/pdc-frontend/next.config.js +++ b/apps/pdc-frontend/next.config.mjs @@ -1,8 +1,10 @@ -const { URL } = require('url'); +import { URL } from 'node:url'; + const { hostname, protocol, port } = new URL(process.env.STRAPI_PRIVATE_URL || 'http://localhost:1337'); /** @type {import('next').NextConfig} */ const nextConfig = { + transpilePackages: ['@frameless/ui', '@utrecht/component-library-react', '@utrecht/web-component-library-react'], async rewrites() { return [ { @@ -33,6 +35,9 @@ const nextConfig = { ]; }, images: { + // Allow localhost images in dev only (blocked in production for security) + // https://nextjs.org/docs/app/api-reference/components/image#dangerouslyallowlocalip + dangerouslyAllowLocalIP: process.env.NODE_ENV === 'development', remotePatterns: [ { protocol: protocol.replace(/:$/, ''), @@ -41,18 +46,14 @@ const nextConfig = { }, ], }, - webpack: (config) => { - config.module.rules.push({ - test: /\.md$/, - // This is the asset module. - type: 'asset/source', - }); - return config; - }, - - experimental: { - serverActions: true, + turbopack: { + rules: { + '*.md': { + loaders: ['raw-loader'], + as: '*.js', + }, + }, }, }; -module.exports = nextConfig; +export default nextConfig; diff --git a/apps/pdc-frontend/package.json b/apps/pdc-frontend/package.json index 48e6079ad..9378dff5e 100644 --- a/apps/pdc-frontend/package.json +++ b/apps/pdc-frontend/package.json @@ -7,19 +7,21 @@ "license": "EUPL-1.2", "keywords": [], "scripts": { - "copy-flo-legal-decision-tree-client-script": "cp ../../node_modules/@utrecht/flo-legal-decision-tree-client/dist/assets/flo-client-plugin.js ./public && cp ../../node_modules/@utrecht/flo-legal-decision-tree-client/dist/assets/flo-client-plugin-polyfills.js ./public", + "copy-flo-legal-decision-tree-client-script": "mkdir -p ./public && cp ../../node_modules/@utrecht/flo-legal-decision-tree-client/dist/assets/flo-client-plugin.js ./public && cp ../../node_modules/@utrecht/flo-legal-decision-tree-client/dist/assets/flo-client-plugin-polyfills.js ./public", "dev": "next dev -p 3000", "development-env": "STRAPI_PRIVATE_URL=https://pdc-api.cg-intern.ont.utrecht.nl/graphql STRAPI_PUBLIC_URL=https://pdc-api.cg-intern.ont.utrecht.nl next dev -p 9000", "acceptance-env": "STRAPI_PRIVATE_URL=https://pdc-api.cg-intern.acc.utrecht.nl/graphql STRAPI_PUBLIC_URL=https://pdc-api.cg-intern.acc.utrecht.nl next dev -p 8000", "prod-env": "STRAPI_PRIVATE_URL=https://pdc-api.cg-intern.utrecht.nl/graphql STRAPI_PUBLIC_URL=https://pdc-api.cg-intern.utrecht.nl next dev -p 3000", - "prebuild": "yarn clean", + "prebuild": "pnpm clean", "codegen": "wait-on http://localhost:1337 && graphql-codegen", "codegen:docker": "graphql-codegen", "clean": "rimraf build .next", "build": "next build", "start": "next start -p 3000", + "env": "node src/env-init.mjs", "install-test-browsers": "playwright install", - "lint": "next lint", + "lint": "eslint --report-unused-disable-directives .", + "lint:fix": "eslint --fix .", "lint-build": "tsc --noEmit --project tsconfig.json", "test": "jest --coverage", "test:e2e": "playwright test test/e2e/", @@ -27,60 +29,69 @@ "watch:e2e": "playwright --help test test/e2e/" }, "dependencies": { - "@frameless/editoria11y": "0.1.0", - "@frameless/ui": "0.1.2", - "@frameless/utils": "0.1.0", + "@frameless/editoria11y": "workspace:*", + "@frameless/ui": "workspace:*", + "@frameless/utils": "workspace:*", "@nl-design-system-unstable/documentation": "1.1.0", "@open-formulieren/sdk": "3.4.2", - "@playwright/test": "1.45.3", "@tanstack/react-query": "4.29.25", "@utrecht/component-library-css": "9.0.0", - "@utrecht/component-library-react": "10.3.9", + "@utrecht/component-library-react": "14.0.0", "@utrecht/design-tokens": "5.0.1", - "@utrecht/web-component-library-react": "3.0.12", - "@utrecht/open-forms-container-react": "1.0.5", - "@utrecht/open-forms-container-css": "2.0.1", "@utrecht/flo-legal-decision-tree-client": "1.0.3", "@utrecht/flolegal-decision-tree-css": "2.1.2", - "accept-language": "3.0.18", + "@utrecht/open-forms-container-css": "2.0.1", + "@utrecht/open-forms-container-react": "1.0.5", + "@utrecht/web-component-library-react": "4.0.4", + "accept-language": "3.0.20", "classnames": "2.3.3", "csp-header": "5.2.1", "downshift": "7.6.2", - "i18next": "22.5.1", - "i18next-browser-languagedetector": "7.0.2", - "i18next-resources-to-backend": "1.1.4", - "is-absolute-url": "4.0.1", + "i18next": "26.1.0", + "i18next-browser-languagedetector": "8.2.1", + "i18next-resources-to-backend": "1.2.1", + "is-absolute-url": "5.0.0", "lodash.mergewith": "4.6.2", - "next": "13.5.6", - "react": "18.3.1", - "react-dom": "18.3.1", - "react-i18next": "12.3.1", - "react-loading-skeleton": "3.3.1", - "sharp": "0.32.6" + "next": "16.2.6", + "react": "19.2.6", + "react-dom": "19.2.6", + "react-i18next": "17.0.7", + "react-loading-skeleton": "3.5.0", + "react-markdown": "10.1.0", + "rehype-raw": "7.0.0", + "sharp": "0.34.5" }, "devDependencies": { + "@frameless/eslint-config": "1.2.0", "@graphql-codegen/cli": "5.0.2", "@graphql-codegen/client-preset": "4.1.0", + "@playwright/test": "1.45.3", "@testing-library/jest-dom": "6.4.5", "@testing-library/react": "15.0.7", "@types/jest": "29.5.12", "@types/lodash.mergewith": "4.6.9", "@utrecht/focus-ring-css": "3.0.1", "@utrecht/form-label-css": "2.0.1", - "@utrecht/spotlight-section-css": "2.0.1", "@utrecht/multiline-data-css": "2.0.1", + "@utrecht/spotlight-section-css": "2.0.1", "@utrecht/textbox-css": "3.0.1", - "eslint": "8.35.0", - "eslint-config-next": "13.2.4", + "eslint": "9.39.4", + "eslint-config-next": "16.2.6", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", - "sass": "1.63.6", + "raw-loader": "4.0.2", + "rimraf": "6.1.3", + "sass": "1.99.0", "ts-node": "10.9.2", - "wait-on": "7.2.0" + "wait-on": "9.0.10" }, "repository": { "type": "git+ssh", "url": "git@github.com:frameless/strapi.git", "directory": "apps/pdc-frontend" + }, + "engines": { + "node": "24.x.x", + "pnpm": "10.23.0" } } diff --git a/apps/pdc-frontend/playwright.config.ts b/apps/pdc-frontend/playwright.config.ts index b1ad8c40f..78294bef2 100644 --- a/apps/pdc-frontend/playwright.config.ts +++ b/apps/pdc-frontend/playwright.config.ts @@ -80,7 +80,7 @@ export default defineConfig({ /* Run your local dev server before starting the tests */ // Run your local dev server before starting the tests. webServer: { - command: 'yarn prod-env', + command: 'pnpm prod-env', url: 'http://127.0.0.1:3000', reuseExistingServer: !process.env.CI, }, diff --git a/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/error.tsx b/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/error.tsx index 486db2347..4455154b9 100644 --- a/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/error.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/error.tsx @@ -1,12 +1,13 @@ 'use client'; -import Link from 'next/link'; import { useParams } from 'next/navigation'; -import { forwardRef, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import type { PropsWithChildren } from 'react'; -import { Breadcrumbs, Button, Heading, Paragraph } from '@/components'; + import { useTranslation } from '../../i18n/client'; import { fallbackLng } from '../../i18n/settings'; + +import { Breadcrumbs, Button, Heading, Paragraph } from '@/components'; interface ErrorPageProps { error: Error; reset: () => void; @@ -17,12 +18,12 @@ interface ErrorPageContentProps { message?: string; } -const ErrorPageContent = forwardRef(({ title, message }: PropsWithChildren) => ( +const ErrorPageContent = ({ title, message }: PropsWithChildren) => ( <> {title && {title}} {message && {message}} -)); +); ErrorPageContent.displayName = 'ErrorPageContent'; @@ -59,7 +60,6 @@ export default function Error({ error, reset }: ErrorPageProps) { label: t('components.breadcrumbs.label.online-loket'), current: false, }} - Link={Link} />
; }; -const FormPage = async ({ - params: { +const FormPage = async (props: FormPageProps) => { + const params = await props.params; + const { locale, slug: [formId], - }, -}: FormPageProps) => { + } = params; const { t } = await useTranslation(locale, 'common'); - const nonce = headers().get('x-nonce') || ''; + const nonce = (await headers()).get('x-nonce') || ''; const formInfo = await openFormValidator({ formId }); return ( @@ -49,14 +49,11 @@ const FormPage = async ({ label: t('components.breadcrumbs.label.products'), current: false, }} - Link={Link} />
{formInfo.name} : null} diff --git a/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/form/error/[errorKey]/page.tsx b/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/form/error/[errorKey]/page.tsx index 2fbb97fbf..c75402390 100644 --- a/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/form/error/[errorKey]/page.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/form/error/[errorKey]/page.tsx @@ -1,9 +1,9 @@ -import Link from 'next/link'; +import { GetOpenFormsErrorPageQuery } from '../../../../../../../gql/graphql'; + import { useTranslation } from '@/app/i18n'; import { Breadcrumbs, Heading, Markdown } from '@/components'; import { GET_OPEN_FORMS_ERROR_PAGE } from '@/query'; import { fetchData, getStrapiGraphqlURL } from '@/util'; -import { GetOpenFormsErrorPageQuery } from '../../../../../../../gql/graphql'; type ParamsType = { locale: string; @@ -11,8 +11,8 @@ type ParamsType = { }; interface OpenFormsErrorPageProps { - params: ParamsType; - searchParams: { [key: string]: string | undefined }; + params: Promise; + searchParams: Promise<{ [key: string]: string | undefined }>; } type ErrorKey = 'formulier-niet-gevonden' | 'formulier-server-is-offline' | 'form-not-found' | 'form-server-down'; @@ -28,7 +28,9 @@ const getMappedError = (key: string): NormalizedError => { return mappedErrorKies[normalized]; }; -const OpenFormsErrorPage = async ({ params: { errorKey, locale } }: OpenFormsErrorPageProps) => { +const OpenFormsErrorPage = async (props: OpenFormsErrorPageProps) => { + const params = await props.params; + const { errorKey, locale } = params; const { t } = await useTranslation(locale, ['open-forms-error-pages', 'common']); const type = getMappedError(errorKey); const { data } = await fetchData<{ data: GetOpenFormsErrorPageQuery }>({ @@ -36,7 +38,7 @@ const OpenFormsErrorPage = async ({ params: { errorKey, locale } }: OpenFormsErr query: GET_OPEN_FORMS_ERROR_PAGE, variables: { locale, type }, }); - const openFromsErrorPageData = data?.openFormsErrorPages?.data[0]?.attributes; + const openFormsErrorPageData = data?.openFormsErrorPages[0]; return (
@@ -63,11 +65,10 @@ const OpenFormsErrorPage = async ({ params: { errorKey, locale } }: OpenFormsErr label: t('components.breadcrumbs.label.online-loket'), current: false, }} - Link={Link} />
- {openFromsErrorPageData?.title} - {openFromsErrorPageData?.body && {openFromsErrorPageData.body}} + {openFormsErrorPageData?.title} + {openFormsErrorPageData?.body && {openFormsErrorPageData.body}}
); diff --git a/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/layout.tsx b/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/layout.tsx index 3b85436fb..f818c4dff 100644 --- a/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/layout.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(openFormsLayout)/layout.tsx @@ -7,6 +7,13 @@ import { draftMode, headers } from 'next/headers'; import Link from 'next/link'; import Script from 'next/script'; import React from 'react'; + +import type { + ComponentComponentsUtrechtNavigation, + GetTemplateDataQuery, + GetWebsiteSettingsQuery, +} from '../../../../gql/graphql'; + import { QueryClientProvider } from '@/client'; import { Footer, @@ -16,7 +23,6 @@ import { Logo, LogoImage, MatomoTagManager, - Navigation, NavigationListType, Page, PageContent, @@ -27,6 +33,7 @@ import { Surface, } from '@/components'; // import { ClientLanguageSwitcher } from '@/components/ClientLanguageSwitcher'; +import { Navigation } from '@/components/Navigation'; import '@utrecht/component-library-css'; import '@utrecht/design-tokens/dist/index.css'; import '@utrecht/design-tokens/dist/font-family'; @@ -37,11 +44,7 @@ import 'react-loading-skeleton/dist/skeleton.css'; import { Editoria11yWrapper } from '@/lib/stencil-client'; import { GET_OPEN_FORMS_TEMPLATE, GET_WEBSITE_SETTINGS } from '@/query'; import { buildAlternateLinks, config, fetchData, getStrapiGraphqlURL } from '@/util'; -import type { - ComponentComponentsUtrechtNavigation, - GetTemplateDataQuery, - GetWebsiteSettingsQuery, -} from '../../../../gql/graphql'; + import { getLiveSuggestions, onSearchSubmitAction } from '../../actions'; import { useTranslation } from '../../i18n/index'; import { languages } from '../../i18n/settings'; @@ -50,21 +53,23 @@ import '../../../styles/globals.css'; interface LayoutProps { children: React.ReactNode; - params: { + params: Promise<{ locale: string; - }; + }>; } type Params = { - params: { + params: Promise<{ locale: string; - }; + }>; }; -export async function generateMetadata({ params: { locale } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, 'common'); - const nonce = headers().get('x-nonce') || ''; + const nonce = (await headers()).get('x-nonce') || ''; const url = buildURL({ env: process.env, key: 'FRONTEND_PUBLIC_URL', @@ -131,18 +136,21 @@ export async function generateMetadata({ params: { locale } }: Params): Promise< }; } -const RootLayout = async ({ children, params: { locale } }: LayoutProps) => { - const nonce = headers().get('x-nonce') || ''; +const RootLayout = async (props: LayoutProps) => { + const params = await props.params; + const { locale } = params; + const { children } = props; + const nonce = (await headers()).get('x-nonce') || ''; + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['layout', 'common']); - const { isEnabled } = draftMode(); - + const { isEnabled } = await draftMode(); const { data } = await fetchData<{ data: GetTemplateDataQuery }>({ url: getStrapiGraphqlURL(), query: GET_OPEN_FORMS_TEMPLATE, variables: { locale }, }); - const navigationData = data.pdcTemplate?.data?.attributes?.sections?.find( + const navigationData = data.pdcTemplate?.sections?.find( (component) => component?.__typename === 'ComponentComponentsUtrechtNavigation', ) as ComponentComponentsUtrechtNavigation; @@ -182,9 +190,15 @@ const RootLayout = async ({ children, params: { locale } }: LayoutProps) => { query: GET_WEBSITE_SETTINGS, }); - const matomoScripts = websiteSettingData.websiteSetting?.data?.attributes?.triggerMatomoScript; + const matomoScripts = websiteSettingData.websiteSetting?.triggerMatomoScript; return ( - + { }) as string } list={navigationData.navigationList as NavigationListType[]} - mobileBreakpoint={961} toggleButton={{ openText: 'Menu', closeText: 'Sluiten', diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/[...not-found]/page.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/[...not-found]/page.tsx index 307bb5644..5166df5bf 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/[...not-found]/page.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/[...not-found]/page.tsx @@ -1,12 +1,17 @@ import Link from 'next/link'; + +import { GetNotFoundPageQuery } from '../../../../../gql/graphql'; + import { useTranslation } from '@/app/i18n'; import { Breadcrumbs, Heading, Markdown } from '@/components'; import { GET_NOT_FOUND_PAGE } from '@/query'; import { getImageBaseUrl, getStrapiGraphqlURL } from '@/util'; import { fetchData } from '@/util/fetchData'; -import { GetNotFoundPageQuery } from '../../../../../gql/graphql'; -const NotFoundPage = async ({ params: { locale } }: { params: { locale: string } }) => { +const NotFoundPage = async (props: { params: Promise<{ locale: string }> }) => { + const params = await props.params; + const { locale } = params; + new Response(null, { status: 404 }); const { t } = await useTranslation(locale, ['common']); const { data } = await fetchData<{ data: GetNotFoundPageQuery }>({ @@ -35,13 +40,12 @@ const NotFoundPage = async ({ params: { locale } }: { params: { locale: string } label: t('components.breadcrumbs.label.online-loket'), current: false, }} - Link={Link} />
- {data?.notFoundPage?.data?.attributes?.title} - {data?.notFoundPage?.data?.attributes?.body && ( + {data?.notFoundPage?.title} + {data?.notFoundPage?.body && ( - {data.notFoundPage.data.attributes.body} + {data.notFoundPage?.body} )}
diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/error.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/error.tsx index 29733a08f..d074ab9e3 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/error.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/error.tsx @@ -1,11 +1,13 @@ 'use client'; -import Link from 'next/link'; import { useParams } from 'next/navigation'; import { useEffect, useState } from 'react'; -import { Breadcrumbs, Button, Heading, Paragraph } from '@/components'; + import { useTranslation } from '../../i18n/client'; import { fallbackLng } from '../../i18n/settings'; + +import { Button, Heading, Paragraph } from '@/components'; +import { Breadcrumbs } from '@/components/Breadcrumbs'; interface ErrorPageProps { error: Error; reset: () => void; @@ -44,7 +46,6 @@ export default function Error({ error, reset }: ErrorPageProps) { label: t('components.breadcrumbs.label.online-loket'), current: false, }} - Link={Link} />
{t('common.title')} diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/layout.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/layout.tsx index ba7f6d416..9166b86aa 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/layout.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/layout.tsx @@ -7,6 +7,18 @@ import { draftMode, headers } from 'next/headers'; import Link from 'next/link'; import Script from 'next/script'; import React from 'react'; + +import type { + ComponentComponentsUtrechtFooter, + ComponentComponentsUtrechtNavigation, + GetTemplateDataQuery, + GetWebsiteSettingsQuery, +} from '../../../../gql/graphql'; +import { MatomoScript } from '../../../components/MatomoScript'; +import { getLiveSuggestions, onSearchSubmitAction } from '../../actions'; +import { useTranslation } from '../../i18n/index'; +import { languages } from '../../i18n/settings'; + import { QueryClientProvider } from '@/client'; import { Footer, @@ -16,7 +28,6 @@ import { Logo, LogoImage, MatomoTagManager, - Navigation, NavigationListType, Page, PageContent, @@ -26,6 +37,7 @@ import { SkipLink, Surface, } from '@/components'; +import { Navigation } from '@/components/Navigation'; // import { ClientLanguageSwitcher } from '@/components/ClientLanguageSwitcher'; import { GoogleTranslate } from '@/components/GoogleTranslate'; import { Main } from '@/components/Main'; @@ -33,16 +45,6 @@ import { SearchBar } from '@/components/SearchBar'; import { Editoria11yWrapper } from '@/lib/stencil-client'; import { GET_TEMPLATE, GET_WEBSITE_SETTINGS } from '@/query'; import { buildAlternateLinks, config, fetchData, getStrapiGraphqlURL } from '@/util'; -import type { - ComponentComponentsUtrechtFooter, - ComponentComponentsUtrechtNavigation, - GetTemplateDataQuery, - GetWebsiteSettingsQuery, -} from '../../../../gql/graphql'; -import { MatomoScript } from '../../../components/MatomoScript'; -import { getLiveSuggestions, onSearchSubmitAction } from '../../actions'; -import { useTranslation } from '../../i18n/index'; -import { languages } from '../../i18n/settings'; import '@frameless/ui/dist/bundle.css'; import '@utrecht/component-library-css'; import '@utrecht/design-tokens/dist/index.css'; @@ -52,21 +54,23 @@ import '../../../styles/globals.css'; interface LayoutProps { children: React.ReactNode; - params: { + params: Promise<{ locale: string; - }; + }>; } type Params = { - params: { + params: Promise<{ locale: string; - }; + }>; }; -export async function generateMetadata({ params: { locale } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, 'common'); - const nonce = headers().get('x-nonce') || ''; + const nonce = (await headers()).get('x-nonce') || ''; const url = buildURL({ env: process.env, key: 'FRONTEND_PUBLIC_URL', @@ -127,20 +131,23 @@ export async function generateMetadata({ params: { locale } }: Params): Promise< }; } -const RootLayout = async ({ children, params: { locale } }: LayoutProps) => { - const nonce = headers().get('x-nonce') || ''; +const RootLayout = async (props: LayoutProps) => { + const params = await props.params; + const { locale } = params; + const { children } = props; + const nonce = (await headers()).get('x-nonce') || ''; const { t } = await useTranslation(locale, ['layout', 'common']); - const { isEnabled } = draftMode(); + const { isEnabled } = await draftMode(); const { data } = await fetchData<{ data: GetTemplateDataQuery }>({ url: getStrapiGraphqlURL(), query: GET_TEMPLATE, variables: { locale }, }); - const navigationData = data.pdcTemplate?.data?.attributes?.sections?.find( + const navigationData = data.pdcTemplate?.sections?.find( (component) => component?.__typename === 'ComponentComponentsUtrechtNavigation', ) as ComponentComponentsUtrechtNavigation; - const footerData = data.pdcTemplate?.data?.attributes?.sections?.find( + const footerData = data.pdcTemplate?.sections?.find( (component) => component?.__typename === 'ComponentComponentsUtrechtFooter', ) as ComponentComponentsUtrechtFooter; @@ -154,10 +161,16 @@ const RootLayout = async ({ children, params: { locale } }: LayoutProps) => { query: GET_WEBSITE_SETTINGS, }); - const matomoScripts = websiteSettingData.websiteSetting?.data?.attributes?.triggerMatomoScript; + const matomoScripts = websiteSettingData.websiteSetting?.triggerMatomoScript; return ( - + { }) as string } list={navigationData.navigationList as NavigationListType[]} - mobileBreakpoint={961} toggleButton={{ openText: 'Menu', closeText: 'Sluiten', diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/not-found.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/not-found.tsx index 2963292a0..2abcccff0 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/not-found.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/not-found.tsx @@ -1,16 +1,17 @@ import { cookies } from 'next/headers'; -import Link from 'next/link'; -import { Heading, Markdown } from '@/components'; -import { Breadcrumbs } from '@/components'; -import { GET_NOT_FOUND_PAGE } from '@/query'; -import { fetchData, getImageBaseUrl, getStrapiGraphqlURL } from '@/util'; + import { GetNotFoundPageQuery } from '../../../../gql/graphql'; import { useTranslation } from '../../i18n'; import { fallbackLng } from '../../i18n/settings'; +import { Heading, Markdown } from '@/components'; +import { Breadcrumbs } from '@/components/Breadcrumbs'; +import { GET_NOT_FOUND_PAGE } from '@/query'; +import { fetchData, getImageBaseUrl, getStrapiGraphqlURL } from '@/util'; + const NotFoundPage = async () => { new Response(null, { status: 404 }); - const locale = cookies().get('i18next')?.value; + const locale = (await cookies()).get('i18next')?.value; const { t } = await useTranslation(locale || fallbackLng, ['common']); const { data } = await fetchData<{ data: GetNotFoundPageQuery }>({ url: getStrapiGraphqlURL(), @@ -38,13 +39,10 @@ const NotFoundPage = async () => { label: t('components.breadcrumbs.label.online-loket'), current: false, }} - Link={Link} />
- {data?.notFoundPage?.data?.attributes?.title} - {data?.notFoundPage?.data?.attributes?.body && ( - {data.notFoundPage.data.attributes.body} - )} + {data?.notFoundPage?.title} + {data?.notFoundPage?.body && {data.notFoundPage.body}}
); diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/page.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/page.tsx index 8b63f7dd7..0abe2c329 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/page.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/page.tsx @@ -1,24 +1,7 @@ import { buildURL, getPathAndSearchParams } from '@frameless/utils'; import { Metadata } from 'next'; import { headers } from 'next/headers'; -import Link from 'next/link'; -import React from 'react'; -import { - Breadcrumbs, - Grid, - GridCell, - Heading, - Heading2, - IndexCharNav, - IndexCharNavLink, - ScrollToTopButton, - UtrechtIconChevronUp, -} from '@/components'; -import { KCMSurvey } from '@/components/KCMSurvey'; -import { TopTask, TopTaskDataTypes } from '@/components/Toptask'; -import { CHECK_ALPHABETICALLY_PRODUCTS_AVAILABILITY, GET_PDC_HOME_PAGE } from '@/query'; -import { alphabet, getStrapiGraphqlURL } from '@/util'; -import { fetchData } from '@/util/fetchData'; + import { CheckAlphabeticallyProductsAvailabilityQuery, ComponentComponentsUtrechtTopTasks, @@ -26,18 +9,29 @@ import { } from '../../../../gql/graphql'; import { useTranslation } from '../../i18n'; +import { Grid, GridCell, Heading, Heading2, IndexCharNav, IndexCharNavLink } from '@/components'; +import { ScrollToTopButton } from '@/components/ScrollToTopButton'; +import { Breadcrumbs } from '@/components/Breadcrumbs'; +import { KCMSurvey } from '@/components/KCMSurvey'; +import { TopTask, TopTaskDataTypes } from '@/components/Toptask'; +import { CHECK_ALPHABETICALLY_PRODUCTS_AVAILABILITY, GET_PDC_HOME_PAGE } from '@/query'; +import { alphabet, getStrapiGraphqlURL } from '@/util'; +import { fetchData } from '@/util/fetchData'; + export interface Fields { title: string; body: string; } type Params = { - params: { + params: Promise<{ locale: string; - }; + }>; }; -export async function generateMetadata({ params: { locale } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['home-page', 'common']); const title = t('seo.title'); @@ -64,16 +58,18 @@ export async function generateMetadata({ params: { locale } }: Params): Promise< }; } -const Home = async ({ params: { locale } }: { params: any }) => { +const Home = async (props: { params: Promise }) => { + const params = await props.params; + const { locale } = params; const { t } = await useTranslation(locale, ['home-page', 'common']); - const nonce = headers().get('x-nonce') || ''; + const nonce = (await headers()).get('x-nonce') || ''; const { data } = await fetchData<{ data: GetPdcHomePageQuery }>({ url: getStrapiGraphqlURL(), query: GET_PDC_HOME_PAGE, variables: { locale }, }); - const topTasksData = data.pdcHomePage?.data?.attributes?.components?.find( + const topTasksData = data.pdcHomePage?.components?.find( (component) => component?.__typename === 'ComponentComponentsUtrechtTopTasks', ) as ComponentComponentsUtrechtTopTasks; @@ -84,7 +80,7 @@ const Home = async ({ params: { locale } }: { params: any }) => { variables: { locale, startsWith: letter }, }); - const isAvailable = data.products?.data && data.products?.data.length > 0; + const isAvailable = data.products && data.products?.length > 0; const { pathSegments } = getPathAndSearchParams({ translations: t, segments: ['segments.products', 'segments.alphabet', letter.toLocaleLowerCase()], @@ -125,7 +121,6 @@ const Home = async ({ params: { locale } }: { params: any }) => { label: t('components.breadcrumbs.label.home'), current: false, }} - Link={Link} />
{t('h1')} @@ -149,7 +144,7 @@ const Home = async ({ params: { locale } }: { params: any }) => { - {t('actions.scroll-to-top')} + {t('actions.scroll-to-top')}
diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/[slug]/page.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/[slug]/page.tsx index 6eee9c755..80c24f4a8 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/[slug]/page.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/[slug]/page.tsx @@ -1,14 +1,14 @@ import { buildURL, encodeHtmlEntities, getDirectionFromLanguageCode, getPathAndSearchParams } from '@frameless/utils'; -import { SpotlightSectionType } from '@utrecht/component-library-react/dist/SpotlightSection'; import type { TFunction } from 'i18next'; import isAbsoluteUrl from 'is-absolute-url'; import { Metadata } from 'next'; import { draftMode, headers } from 'next/headers'; import Image from 'next/image'; -import Link from 'next/link'; import { notFound } from 'next/navigation'; import Script from 'next/script'; -import React from 'react'; + +import { GetProductBySlugQuery, ProductSectionsDynamicZone } from '../../../../../../gql/graphql'; + import { useTranslation } from '@/app/i18n'; import { languages } from '@/app/i18n/settings'; import { @@ -17,6 +17,7 @@ import { Alert, Article, Breadcrumbs, + ButtonAppearance, ButtonGroup, FloLegalDecisionTree, Grid, @@ -27,12 +28,11 @@ import { Markdown, MultiColumnsButton, RichText, - ScrollToTopButton, SpotlightSection, - UtrechtIconChevronUp, } from '@/components'; import { ContactCard } from '@/components/ContactCard'; import { KCMSurvey } from '@/components/KCMSurvey'; +import { ScrollToTopButton } from '@/components/ScrollToTopButton'; import { GET_PRODUCT_BY_SLUG } from '@/query'; import { buildAlternateLinks, @@ -42,25 +42,25 @@ import { getImageBaseUrl, getStrapiGraphqlURL, } from '@/util'; -import { GetProductBySlugQuery, ProductSectionsDynamicZone } from '../../../../../../gql/graphql'; import '@/styles/print.css'; +type SpotlightSectionType = 'info' | 'warning' | 'error' | 'ok'; const getAllProducts = async (locale: string, slug: string) => { - const { isEnabled } = draftMode(); + const { isEnabled } = await draftMode(); const { data } = await fetchData<{ data: GetProductBySlugQuery }>({ url: getStrapiGraphqlURL(), query: GET_PRODUCT_BY_SLUG, variables: { slug, locale, - pageMode: isEnabled ? 'PREVIEW' : 'LIVE', + status: isEnabled ? 'DRAFT' : 'PUBLISHED', }, }); - if (!data || data?.products?.data?.length === 0) notFound(); + if (!data || data?.products?.length === 0) notFound(); return { - product: data?.products?.data[0], + product: data?.products?.[0], }; }; @@ -70,11 +70,12 @@ type ParamsType = { }; interface ProductProps { - params: ParamsType; - searchParams: { [key: string]: string | undefined }; + params: Promise; + searchParams: Promise<{ [key: string]: string | undefined }>; } -export async function generateMetadata({ params }: { params: ParamsType }): Promise { +export async function generateMetadata(props: { params: Promise }): Promise { + const params = await props.params; const locale = params?.locale; const slug = params?.slug; // eslint-disable-next-line react-hooks/rules-of-hooks @@ -89,15 +90,15 @@ export async function generateMetadata({ params }: { params: ParamsType }): Prom locale, }); - const title = product?.attributes?.metaTags?.title; - const description = product?.attributes?.metaTags?.description; - const openGraphImage = getImageBaseUrl(product?.attributes?.metaTags?.ogImage?.data?.attributes?.url); + const title = product?.metaTags?.title; + const description = product?.metaTags?.description; + const openGraphImage = getImageBaseUrl(product?.metaTags?.ogImage?.url); return { title, description, other: { - keymatch: product?.attributes?.metaTags?.keymatch as string, + keymatch: product?.metaTags?.keymatch as string, }, openGraph: { title: `${title} | ${t('website-setting.website-name')}`, @@ -121,7 +122,7 @@ interface SectionsProps { sections: ProductSectionsDynamicZone[]; priceData: any; locale: string; - t: TFunction; + t: TFunction; nonce?: string; } @@ -134,8 +135,8 @@ const Sections = ({ sections, locale, priceData, t, nonce }: SectionsProps) => ( return ( - {Array.isArray(component?.contact_information_public?.data?.attributes?.contentBlock) && - component?.contact_information_public?.data?.attributes?.contentBlock?.map( + {Array.isArray(component?.contact_information_public?.contentBlock) && + component?.contact_information_public?.contentBlock?.map( (block) => block?.content && ( @@ -197,7 +198,7 @@ const Sections = ({ sections, locale, priceData, t, nonce }: SectionsProps) => ( @@ -210,7 +211,7 @@ const Sections = ({ sections, locale, priceData, t, nonce }: SectionsProps) => ( @@ -220,14 +221,10 @@ const Sections = ({ sections, locale, priceData, t, nonce }: SectionsProps) => ( } return <>; case 'ComponentComponentsFaq': - if ( - component.pdc_faq?.data?.attributes && - component.pdc_faq.data.attributes.faq && - component.pdc_faq.data.attributes.faq.length > 0 - ) { + if (component.pdc_faq && component.pdc_faq?.faq && component.pdc_faq?.faq.length > 0) { return ( ({ + sections={component.pdc_faq.faq.map((faqItem) => ({ id: faqItem?.id, label: faqItem?.label as string, headingLevel: faqItem?.headingLevel || 2, @@ -260,21 +257,19 @@ const Sections = ({ sections, locale, priceData, t, nonce }: SectionsProps) => ( } return <>; case 'ComponentComponentsUtrechtImage': - if ( - component.imageData?.data?.attributes?.width && - component.imageData?.data?.attributes?.height && - component?.imageData?.data?.attributes?.url - ) { - const imageURL = getImageBaseUrl(component?.imageData?.data?.attributes?.url); + if (component.imageData?.width && component.imageData?.height && component?.imageData?.url) { + const imageURL = getImageBaseUrl(component?.imageData?.url); return ( {component?.imageData?.data?.attributes?.alternativeText ); } @@ -294,7 +289,7 @@ const Sections = ({ sections, locale, priceData, t, nonce }: SectionsProps) => ( @@ -332,13 +327,13 @@ const Sections = ({ sections, locale, priceData, t, nonce }: SectionsProps) => ( ); -const Product = async ({ params: { locale, slug } }: ProductProps) => { +const Product = async (props: ProductProps) => { + const params = await props.params; + const { locale, slug } = params; const { product } = await getAllProducts(locale, slug); - const nonce = headers().get('x-nonce') || ''; - const priceData: any = product?.attributes?.price && product?.attributes?.price?.data?.attributes?.price; - + const nonce = (await headers()).get('x-nonce') || ''; + const priceData: any = product?.price && product?.price?.price; const { t } = await useTranslation(locale, 'common'); - const { pathSegments: productsSegment } = getPathAndSearchParams({ locale, translations: t, @@ -375,22 +370,21 @@ const Product = async ({ params: { locale, slug } }: ProductProps) => { label: t('components.breadcrumbs.label.products'), current: false, }} - Link={Link} />
- {product?.attributes?.title} - {product?.attributes?.content && ( + {product?.title} + {product?.content && ( - {product?.attributes?.content} + {product.content} )} - {product?.attributes?.sections && product.attributes.sections.length > 0 && ( + {product?.sections && product.sections.length > 0 && ( {
- {(product?.attributes?.enable_kcm_survey ?? true) && } + {(product?.enable_kcm_survey ?? true) && } - - {t('actions.scroll-to-top')} - + {t('actions.scroll-to-top')}
diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/alphabet/[q]/page.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/alphabet/[q]/page.tsx index e8cdc2057..3e49a1bd7 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/alphabet/[q]/page.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/alphabet/[q]/page.tsx @@ -1,21 +1,14 @@ import { buildURL, getPathAndSearchParams } from '@frameless/utils'; import type { Metadata } from 'next'; import { headers } from 'next/headers'; -import Link from 'next/link'; + +import { CheckAlphabeticallyProductsAvailabilityQuery, Product } from '../../../../../../../gql/graphql'; + import { useTranslation } from '@/app/i18n'; import { languages } from '@/app/i18n/settings'; -import { - Breadcrumbs, - Grid, - GridCell, - Heading, - IndexCharNav, - IndexCharNavLink, - Paragraph, - ScrollToTopButton, - UtrechtIconChevronUp, -} from '@/components'; +import { Breadcrumbs, Grid, GridCell, Heading, IndexCharNav, IndexCharNavLink, Paragraph } from '@/components'; import { KCMSurvey } from '@/components/KCMSurvey'; +import { ScrollToTopButton } from '@/components/ScrollToTopButton'; import { ProductListContainer } from '@/components/ProductListContainer'; import { CHECK_ALPHABETICALLY_PRODUCTS_AVAILABILITY } from '@/query'; import { @@ -24,18 +17,16 @@ import { getAlphabeticallyProductsByLetter, getStrapiGraphqlURL, mappingProducts, - MappingProductsProps, + buildAlternateLinks, } from '@/util'; -import { buildAlternateLinks } from '@/util'; import { fetchData } from '@/util/fetchData'; -import { CheckAlphabeticallyProductsAvailabilityQuery } from '../../../../../../../gql/graphql'; export const revalidate = 3600; // revalidate the data at most every hour type Params = { - params: { + params: Promise<{ locale: string; q: string; - }; + }>; }; export interface Fields { @@ -43,7 +34,9 @@ export interface Fields { body: string; } -export async function generateMetadata({ params: { locale, q } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale, q } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['alphabet-page', 'common']); const title = t('seo.title'); @@ -77,10 +70,13 @@ export async function generateMetadata({ params: { locale, q } }: Params): Promi }; } -const ProductsAlphabetPage = async ({ params: { locale, q } }: Params) => { +const ProductsAlphabetPage = async (props: Params) => { + const params = await props.params; + const { locale, q } = params; + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['alphabet-page', 'common']); - const nonce = headers().get('x-nonce') || ''; - const { products } = await getAlphabeticallyProductsByLetter({ + const nonce = (await headers()).get('x-nonce') || ''; + const { products_connection } = await getAlphabeticallyProductsByLetter({ locale, page: 1, pageSize: apiSettings.pagination.pageAlphabetSize, @@ -94,7 +90,7 @@ const ProductsAlphabetPage = async ({ params: { locale, q } }: Params) => { variables: { locale, startsWith: letter }, }); - const isAvailable = data.products?.data && data.products?.data.length > 0; + const isAvailable = data.products.length > 0; return { char: letter, disabled: !isAvailable, @@ -113,7 +109,7 @@ const ProductsAlphabetPage = async ({ params: { locale, q } }: Params) => { }); const alphabetAvailability = await Promise.all(productsAvailability); - const mappedProduct = mappingProducts(products?.data as MappingProductsProps[], productSegment); + const mappedProduct = mappingProducts(products_connection?.nodes as Product[], productSegment); return ( <> @@ -150,7 +146,6 @@ const ProductsAlphabetPage = async ({ params: { locale, q } }: Params) => { label: t('components.breadcrumbs.label.products'), current: false, }} - Link={Link} />
{t('h1')} @@ -164,7 +159,7 @@ const ProductsAlphabetPage = async ({ params: { locale, q } }: Params) => { {mappedProduct && mappedProduct.length > 0 ? ( @@ -176,7 +171,7 @@ const ProductsAlphabetPage = async ({ params: { locale, q } }: Params) => { - {t('actions.scroll-to-top')} + {t('actions.scroll-to-top')}
diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/page.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/page.tsx index d3a4ef267..d18a999d4 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/page.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/products/page.tsx @@ -1,25 +1,26 @@ import { buildURL, getPathAndSearchParams } from '@frameless/utils'; import { Metadata } from 'next'; import { headers } from 'next/headers'; -import Link from 'next/link'; + +import { GetAllProductsSlugQueryQuery, Product } from '../../../../../gql/graphql'; +import { GET_ALL_PRODUCTS_SLUG } from '../../../../query'; +import { useTranslation } from '../../../i18n'; + import { languages } from '@/app/i18n/settings'; -import { Breadcrumbs, Grid, GridCell, Heading, ScrollToTopButton, UtrechtIconChevronUp } from '@/components'; +import { Breadcrumbs, Grid, GridCell, Heading } from '@/components'; import { KCMSurvey } from '@/components/KCMSurvey'; import { ProductListContainer } from '@/components/ProductListContainer'; -import { apiSettings, getStrapiGraphqlURL, mappingProducts, MappingProductsProps } from '@/util'; -import { buildAlternateLinks, fetchData } from '@/util'; -import { GetAllProductsSlugQueryQuery } from '../../../../../gql/graphql'; -import { GET_ALL_PRODUCTS_SLUG } from '../../../../query'; -import { useTranslation } from '../../../i18n'; +import { ScrollToTopButton } from '@/components/ScrollToTopButton'; +import { apiSettings, getStrapiGraphqlURL, mappingProducts, buildAlternateLinks, fetchData } from '@/util'; export interface Fields { title: string; body: string; } type Params = { - params: { + params: Promise<{ locale: string; - }; + }>; }; const fetchAllProducts = async ({ locale }: { locale: string }) => { @@ -31,7 +32,9 @@ const fetchAllProducts = async ({ locale }: { locale: string }) => { return data; }; -export async function generateMetadata({ params: { locale } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['products-page', 'common']); const title = t('seo.title'); @@ -65,17 +68,20 @@ export async function generateMetadata({ params: { locale } }: Params): Promise< }; } -const Products = async ({ params: { locale } }: { params: { locale: string } }) => { +const Products = async (props: { params: Promise<{ locale: string }> }) => { + const params = await props.params; + const { locale } = params; + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['products-page', 'common']); - const nonce = headers().get('x-nonce') || ''; + const nonce = (await headers()).get('x-nonce') || ''; const { pathSegments: productSegment } = getPathAndSearchParams({ translations: t, segments: ['segments.products'], locale, }); - const { products } = await fetchAllProducts({ locale }); - const mappedProduct = mappingProducts(products?.data as MappingProductsProps[], productSegment); + const { products_connection } = await fetchAllProducts({ locale }); + const mappedProduct = mappingProducts(products_connection?.nodes as Product[], productSegment); return ( <> @@ -107,7 +113,6 @@ const Products = async ({ params: { locale } }: { params: { locale: string } }) label: t('components.breadcrumbs.label.online-loket'), current: false, }} - Link={Link} />
{t('h1')} @@ -115,7 +120,7 @@ const Products = async ({ params: { locale } }: { params: { locale: string } }) )} @@ -124,7 +129,7 @@ const Products = async ({ params: { locale } }: { params: { locale: string } }) - {t('actions.scroll-to-top')} + {t('actions.scroll-to-top')} {' '}
diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/search/[query]/page.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/search/[query]/page.tsx index b1ea475c6..6ef91019b 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/search/[query]/page.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/search/[query]/page.tsx @@ -1,32 +1,37 @@ import { buildURL, getPathAndSearchParams } from '@frameless/utils'; import { Metadata } from 'next'; import { headers } from 'next/headers'; -import Link from 'next/link'; import { redirect } from 'next/navigation'; + +import { useTranslation } from '../../../../i18n/index'; + import { getSuggestedSearch } from '@/app/actions'; import { languages } from '@/app/i18n/settings'; -import { Breadcrumbs, Grid, GridCell, Heading, ScrollToTopButton, UtrechtIconChevronUp } from '@/components'; +import { Grid, GridCell, Heading } from '@/components'; +import { Breadcrumbs } from '@/components/Breadcrumbs'; +import { ScrollToTopButton } from '@/components/ScrollToTopButton'; import { KCMSurvey } from '@/components/KCMSurvey'; import { ProductListContainer } from '@/components/ProductListContainer'; import { buildAlternateLinks } from '@/util'; -import { useTranslation } from '../../../../i18n/index'; type ParamsType = { locale: string; query: string; }; interface SearchProps { - params: ParamsType; + params: Promise; } type Params = { - params: { + params: Promise<{ locale: string; query: string; - }; + }>; }; -export async function generateMetadata({ params: { locale, query } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale, query } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['search-page', 'common']); const decodeQuery = decodeURIComponent(query)?.trim(); @@ -62,9 +67,11 @@ export async function generateMetadata({ params: { locale, query } }: Params): P }; } -const Search = async ({ params: { locale, query } }: SearchProps) => { +const Search = async (props: SearchProps) => { + const params = await props.params; + const { locale, query } = params; const { t } = await useTranslation(locale, ['search-page', 'common']); - const nonce = headers().get('x-nonce') || ''; + const nonce = (await headers()).get('x-nonce') || ''; const decodeQuery = decodeURIComponent(query)?.trim(); const searchResults = await getSuggestedSearch(locale, decodeQuery); @@ -119,7 +126,6 @@ const Search = async ({ params: { locale, query } }: SearchProps) => { label: t('components.breadcrumbs.label.online-loket'), current: false, }} - Link={Link} />
{t('page-title', { query: decodeQuery, interpolation: { escapeValue: false } })} @@ -137,7 +143,7 @@ const Search = async ({ params: { locale, query } }: SearchProps) => { - {t('actions.scroll-to-top')} + {t('actions.scroll-to-top')}
diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/search/tips/page.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/search/tips/page.tsx index 8d0f3b83a..7b4d9f99a 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/search/tips/page.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/search/tips/page.tsx @@ -1,19 +1,21 @@ import { getPathAndSearchParams } from '@frameless/utils'; import { Metadata } from 'next'; import { headers } from 'next/headers'; -import Link from 'next/link'; + import { useTranslation } from '@/app/i18n'; import { Breadcrumbs, Heading, UnorderedList, UnorderedListItem } from '@/components'; import { KCMSurvey } from '@/components/KCMSurvey'; type Params = { - params: { + params: Promise<{ locale: string; query: string; - }; + }>; }; -export async function generateMetadata({ params: { locale, query } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale, query } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['tips-page']); return { @@ -25,9 +27,12 @@ export async function generateMetadata({ params: { locale, query } }: Params): P }; } -const SearchTips = async ({ params: { locale }, searchParams }: any) => { +const SearchTips = async (props: any) => { + const searchParams = await props.searchParams; + const params = await props.params; + const { locale } = params; const { t } = await useTranslation(locale, ['tips-page', 'common']); - const nonce = headers().get('x-nonce') || ''; + const nonce = (await headers()).get('x-nonce') || ''; const query = searchParams?.query; const tipsList = t('body.section.unordered-list', { returnObjects: true }) as string[]; const decodeQuery = decodeURIComponent(query); @@ -63,7 +68,6 @@ const SearchTips = async ({ params: { locale }, searchParams }: any) => { label: t('components.breadcrumbs.label.online-loket'), current: false, }} - Link={Link} />
diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/index.css b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/index.css new file mode 100644 index 000000000..bd1d93b28 --- /dev/null +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/index.css @@ -0,0 +1,24 @@ +.utrecht-data-list { + display: flex; + flex-direction: column; + row-gap: 1em; +} + +.utrecht-audit-report { + --utrecht-heading-group-margin-block-start: 1em; +} + +.utrecht-audit-report .utrecht-heading-group--level-4 { + --utrecht-heading-group-margin-block-start: 5em; +} + +.utrecht-audit-report .utrecht-heading-group { + --utrecht-badge-padding-block: 0.25ex; + --utrecht-badge-padding-inline: 0.75ch; + --utrecht-badge-background-color: #eee; + --utrecht-badge-color: #444; +} + +.utrecht-audit-report .utrecht-spotlight-section > :first-child { + --utrecht-space-around: 1; +} diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/index.scss b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/index.scss deleted file mode 100644 index 9730a8c99..000000000 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/index.scss +++ /dev/null @@ -1,1779 +0,0 @@ -.utrecht-data-list { - display: flex; - flex-direction: column; - row-gap: 1em; -} - -.utrecht-audit-report { - --utrecht-heading-group-margin-block-start: 1em; - - .utrecht-heading-group--level-4 { - --utrecht-heading-group-margin-block-start: 5em; - } - - .utrecht-heading-group { - --utrecht-badge-padding-block: 0.25ex; - --utrecht-badge-padding-inline: 0.75ch; - --utrecht-badge-background-color: #eee; - --utrecht-badge-color: #444; - } - - .utrecht-spotlight-section > :first-child { - --utrecht-space-around: 1; - } - .utrecht-rich-text .utrecht-heading-1:first-child { - --utrecht-heading-1-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-heading-2) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-accordion) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-alert) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-badge-list) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-blockquote) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-button) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-button-group) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-data-list) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-form-field) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-img) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-link) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-ordered-list) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-pagination) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-paragraph) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-separator) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-badge-status) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-table) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-1:has(> .utrecht-unordered-list) { - --utrecht-heading-1-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:first-child { - --utrecht-heading-2-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-heading-3) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-accordion) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-alert) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-badge-list) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-blockquote) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-button) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-button-group) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-data-list) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-figure) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-form-field) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-img) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-link) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-ordered-list) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-pagination) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-paragraph) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-separator) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-sidenav) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-badge-status) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-table) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-2:has(> .utrecht-unordered-list) { - --utrecht-heading-2-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:first-child { - --utrecht-heading-3-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-heading-4) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-accordion) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-alert) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-badge-list) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-blockquote) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-button) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-button-group) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-data-list) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-figure) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-form-field) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-img) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-link) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-ordered-list) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-pagination) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-paragraph) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-separator) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-sidenav) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-badge-status) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-table) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-3:has(> .utrecht-unordered-list) { - --utrecht-heading-3-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:first-child { - --utrecht-heading-4-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-heading-5) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-accordion) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-alert) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-badge-list) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-blockquote) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-button) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-button-group) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-data-list) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-figure) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-form-field) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-img) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-link) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-ordered-list) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-pagination) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-paragraph) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-separator) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-sidenav) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-badge-status) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-table) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-4:has(> .utrecht-unordered-list) { - --utrecht-heading-4-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:first-child { - --utrecht-heading-5-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-heading-6) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-accordion) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-alert) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-badge-list) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-blockquote) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-button) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-button-group) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-data-list) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-figure) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-form-field) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-img) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-link) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-ordered-list) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-pagination) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-paragraph) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-separator) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-sidenav) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-badge-status) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-table) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-5:has(> .utrecht-unordered-list) { - --utrecht-heading-5-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:first-child { - --utrecht-heading-6-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-accordion) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-alert) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-badge-list) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-blockquote) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-button) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-button-group) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-data-list) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-figure) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-form-field) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-img) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-link) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-ordered-list) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-pagination) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-paragraph) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-separator) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-sidenav) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-badge-status) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-table) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-heading-6:has(> .utrecht-unordered-list) { - --utrecht-heading-6-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:first-child { - --utrecht-accordion-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-heading-2) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-heading-3) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-heading-4) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-heading-5) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-heading-6) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-accordion) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-alert) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-badge-list) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-blockquote) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-button) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-button-group) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-data-list) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-figure) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-form-field) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-img) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-link) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-ordered-list) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-paragraph) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-separator) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-sidenav) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-table) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-accordion:has(> .utrecht-unordered-list) { - --utrecht-accordion-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:first-child { - --utrecht-alert-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-heading-1) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-heading-2) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-heading-3) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-heading-4) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-heading-5) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-heading-6) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-accordion) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-alert) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-badge-list) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-blockquote) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-button) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-button-group) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-data-list) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-figure) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-form-field) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-img) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-link) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-ordered-list) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-pagination) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-paragraph) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-separator) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-badge-status) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-table) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-alert:has(> .utrecht-unordered-list) { - --utrecht-alert-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:first-child { - --utrecht-badge-list-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-heading-1) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-heading-2) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-heading-3) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-heading-4) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-heading-5) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-heading-6) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-accordion) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-alert) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-blockquote) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-button) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-button-group) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-data-list) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-figure) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-form-field) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-img) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-link) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-ordered-list) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-paragraph) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-separator) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-table) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-list:has(> .utrecht-unordered-list) { - --utrecht-badge-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:first-child { - --utrecht-blockquote-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-heading-2) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-heading-3) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-heading-4) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-heading-5) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-heading-6) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-accordion) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-alert) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-badge-list) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-blockquote) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-button) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-button-group) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-data-list) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-figure) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-form-field) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-img) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-link) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-ordered-list) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-pagination) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-paragraph) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-separator) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-table) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-blockquote:has(> .utrecht-unordered-list) { - --utrecht-blockquote-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:first-child { - --utrecht-breadcrumb-nav-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-heading-1) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-heading-2) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-heading-3) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-heading-4) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-heading-5) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-heading-6) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-accordion) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-alert) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-badge-list) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-blockquote) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-button) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-button-group) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-data-list) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-figure) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-form-field) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-img) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-link) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-ordered-list) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-pagination) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-paragraph) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-separator) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-sidenav) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-badge-status) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-table) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-breadcrumb-nav:has(> .utrecht-unordered-list) { - --utrecht-breadcrumb-nav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button:first-child { - --utrecht-button-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-heading-2) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-heading-3) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-heading-4) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-heading-5) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-heading-6) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-accordion) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-alert) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-badge-list) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-blockquote) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-button) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-button-group) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-data-list) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-figure) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-img) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-link) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-ordered-list) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-paragraph) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-separator) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-sidenav) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-table) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button:has(> .utrecht-unordered-list) { - --utrecht-button-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:first-child { - --utrecht-button-group-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-heading-2) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-heading-3) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-heading-4) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-heading-5) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-heading-6) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-accordion) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-alert) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-badge-list) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-blockquote) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-button) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-button-group) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-data-list) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-figure) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-img) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-link) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-ordered-list) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-paragraph) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-separator) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-sidenav) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-table) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-button-group:has(> .utrecht-unordered-list) { - --utrecht-button-group-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:first-child { - --utrecht-data-list-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-heading-2) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-heading-3) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-heading-4) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-heading-5) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-heading-6) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-accordion) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-alert) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-badge-list) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-blockquote) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-button) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-button-group) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-data-list) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-figure) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-form-field) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-img) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-link) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-ordered-list) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-pagination) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-paragraph) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-separator) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-table) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-data-list:has(> .utrecht-unordered-list) { - --utrecht-data-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:first-child { - --utrecht-figure-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-heading-2) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-heading-3) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-heading-4) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-heading-5) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-heading-6) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-accordion) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-alert) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-badge-list) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-blockquote) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-button) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-button-group) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-data-list) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-form-field) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-img) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-link) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-ordered-list) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-pagination) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-paragraph) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-separator) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-table) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-figure:has(> .utrecht-unordered-list) { - --utrecht-figure-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:first-child { - --utrecht-form-field-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-heading-2) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-heading-3) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-heading-4) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-heading-5) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-heading-6) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-accordion) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-alert) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-badge-list) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-blockquote) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-button) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-button-group) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-data-list) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-figure) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-form-field) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-img) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-link) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-ordered-list) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-paragraph) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-separator) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-table) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field:has(> .utrecht-unordered-list) { - --utrecht-form-field-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field-description:first-child { - --utrecht-form-field-description-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-form-field-description:has(> .utrecht-form-field-error-message) { - --utrecht-form-field-description-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field-description:has(> .utrecht-select) { - --utrecht-form-field-description-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field-description:has(> .utrecht-textarea) { - --utrecht-form-field-description-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field-description:has(> .utrecht-textbox) { - --utrecht-form-field-description-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field-error-message:first-child { - --utrecht-form-field-error-message-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-form-field-error-message:has(> .utrecht-form-field-description) { - --utrecht-form-field-error-message-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field-error-message:has(> .utrecht-form-field-error-message) { - --utrecht-form-field-error-message-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field-error-message:has(> .utrecht-select) { - --utrecht-form-field-error-message-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field-error-message:has(> .utrecht-textarea) { - --utrecht-form-field-error-message-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-field-error-message:has(> .utrecht-textbox) { - --utrecht-form-field-error-message-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-label:first-child { - --utrecht-form-label-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-form-label:has(> .utrecht-form-field-description) { - --utrecht-form-label-margin-block-end: var(--utrecht-rich-text-confidant-margin-block-end); - } - .utrecht-rich-text .utrecht-form-label:has(> .utrecht-form-field-error-message) { - --utrecht-form-label-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-label:has(> .utrecht-select) { - --utrecht-form-label-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-label:has(> .utrecht-textarea) { - --utrecht-form-label-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-form-label:has(> .utrecht-textbox) { - --utrecht-form-label-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:first-child { - --utrecht-img-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-heading-2) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-heading-3) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-heading-4) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-heading-5) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-heading-6) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-accordion) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-alert) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-badge-list) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-blockquote) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-button) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-button-group) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-data-list) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-form-field) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-img) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-link) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-ordered-list) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-pagination) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-paragraph) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-separator) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-table) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-img:has(> .utrecht-unordered-list) { - --utrecht-img-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:first-child { - --utrecht-link-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-heading-2) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-heading-3) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-heading-4) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-heading-5) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-heading-6) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-accordion) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-alert) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-badge-list) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-blockquote) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-button) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-button-group) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-data-list) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-form-field) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-img) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-link) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-ordered-list) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-paragraph) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-separator) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-sidenav) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-table) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-link:has(> .utrecht-unordered-list) { - --utrecht-link-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:first-child { - --utrecht-ordered-list-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-heading-2) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-heading-3) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-heading-4) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-heading-5) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-heading-6) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-accordion) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-alert) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-badge-list) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-blockquote) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-button) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-button-group) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-data-list) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-form-field) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-img) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-link) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-ordered-list) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-pagination) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-paragraph) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-separator) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-table) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-ordered-list:has(> .utrecht-unordered-list) { - --utrecht-ordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:first-child { - --utrecht-pagination-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-heading-2) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-heading-3) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-heading-4) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-heading-5) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-heading-6) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-accordion) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-alert) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-badge-list) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-blockquote) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-button) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-button-group) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-data-list) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-form-field) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-img) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-link) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-ordered-list) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-paragraph) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-separator) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-table) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-pagination:has(> .utrecht-unordered-list) { - --utrecht-pagination-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:first-child { - --utrecht-paragraph-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-heading-2) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-heading-3) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-heading-4) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-heading-5) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-heading-6) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-accordion) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-alert) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-badge-list) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-blockquote) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-button) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-button-group) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-data-list) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-form-field) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-img) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-link) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-ordered-list) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-pagination) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-paragraph) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-separator) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-table) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-paragraph:has(> .utrecht-unordered-list) { - --utrecht-paragraph-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-select:first-child { - --utrecht-select-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-select:has(> .utrecht-form-field-description) { - --utrecht-select-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-select:has(> .utrecht-form-field-error-message) { - --utrecht-select-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:first-child { - --utrecht-separator-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-heading-1) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-heading-2) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-heading-3) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-heading-4) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-heading-5) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-heading-6) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-accordion) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-alert) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-badge-list) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-blockquote) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-button) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-button-group) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-data-list) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-form-field) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-img) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-link) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-ordered-list) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-pagination) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-paragraph) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-separator) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-sidenav) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-table) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-separator:has(> .utrecht-unordered-list) { - --utrecht-separator-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:first-child { - --utrecht-sidenav-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-heading-1) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-heading-2) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-heading-3) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-heading-4) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-heading-5) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-heading-6) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-accordion) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-alert) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-badge-list) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-blockquote) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-button) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-button-group) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-data-list) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-form-field) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-img) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-link) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-ordered-list) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-pagination) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-separator) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-table) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-sidenav:has(> .utrecht-unordered-list) { - --utrecht-sidenav-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-status:first-child { - --utrecht-badge-status-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-badge-status:has(> .utrecht-heading-2) { - --utrecht-badge-status-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-status:has(> .utrecht-heading-3) { - --utrecht-badge-status-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-status:has(> .utrecht-heading-4) { - --utrecht-badge-status-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-status:has(> .utrecht-heading-5) { - --utrecht-badge-status-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-status:has(> .utrecht-heading-6) { - --utrecht-badge-status-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-badge-status:has(> .utrecht-badge-status) { - --utrecht-badge-status-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:first-child { - --utrecht-table-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-heading-2) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-heading-3) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-heading-4) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-heading-5) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-heading-6) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-accordion) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-alert) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-badge-list) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-blockquote) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-button) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-button-group) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-data-list) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-form-field) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-img) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-link) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-ordered-list) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-pagination) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-paragraph) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-separator) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-table) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-table:has(> .utrecht-unordered-list) { - --utrecht-table-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-textarea:first-child { - --utrecht-textarea-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-textarea:has(> .utrecht-form-field-description) { - --utrecht-textarea-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-textarea:has(> .utrecht-form-field-error-message) { - --utrecht-textarea-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-textbox:first-child { - --utrecht-textbox-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-textbox:has(> .utrecht-form-field-description) { - --utrecht-textbox-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-textbox:has(> .utrecht-form-field-error-message) { - --utrecht-textbox-margin-block-end: var(--utrecht-rich-text-best-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:first-child { - --utrecht-unordered-list-margin-block-start: 0; - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-heading-2) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-heading-3) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-heading-4) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-heading-5) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-heading-6) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-accordion) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-alert) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-badge-list) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-blockquote) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-acquaintance-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-button) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-button-group) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-data-list) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-form-field) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-img) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-link) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-ordered-list) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-pagination) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-paragraph) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-separator) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-stranger-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-table) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } - .utrecht-rich-text .utrecht-unordered-list:has(> .utrecht-unordered-list) { - --utrecht-unordered-list-margin-block-end: var(--utrecht-rich-text-friend-margin-block-end); - } -} diff --git a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/page.tsx b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/page.tsx index 077309f2c..5c4a5b9a7 100644 --- a/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/page.tsx +++ b/apps/pdc-frontend/src/app/[locale]/(rootLayout)/toegankelijkheid/page.tsx @@ -1,7 +1,9 @@ import { Metadata } from 'next'; -import { AuditRapport } from '@/components/AuditRapport'; + import wcagEmJSON from '../../../../../wcag-evaluation.json'; -import './index.scss'; + +import { AuditRapport } from '@/components/AuditRapport'; +import './index.css'; export async function generateMetadata(): Promise { return { diff --git a/apps/pdc-frontend/src/app/[locale]/sitemap.ts b/apps/pdc-frontend/src/app/[locale]/sitemap.ts index 066e3e35c..b4e849b1f 100644 --- a/apps/pdc-frontend/src/app/[locale]/sitemap.ts +++ b/apps/pdc-frontend/src/app/[locale]/sitemap.ts @@ -1,11 +1,13 @@ import { buildURL } from '@frameless/utils'; import { MetadataRoute } from 'next'; import { cookies } from 'next/headers'; -import { GET_ALL_PRODUCTS_SITEMAP } from '@/query'; -import { fetchData, getStrapiGraphqlURL } from '@/util'; + import { GetAllProductsSitemapQuery } from '../../../gql/graphql'; import { useTranslation } from '../i18n'; +import { GET_ALL_PRODUCTS_SITEMAP } from '@/query'; +import { fetchData, getStrapiGraphqlURL } from '@/util'; + const generateStaticPagesPath = (paths: string[]) => { return paths.map((url) => { return { @@ -15,7 +17,7 @@ const generateStaticPagesPath = (paths: string[]) => { }); }; export default async function sitemap(): Promise { - const locale = cookies().get('i18nextLng')?.value || 'nl'; + const locale = (await cookies()).get('i18nextLng')?.value || 'nl'; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, 'common'); const productsUrl = buildURL({ @@ -38,18 +40,18 @@ export default async function sitemap(): Promise { query: GET_ALL_PRODUCTS_SITEMAP, }); - const products = data?.products?.data?.map((product) => { + const products = data?.products?.map((product) => { const url = buildURL({ translations: t, env: process.env, key: 'FRONTEND_PUBLIC_URL', - segments: ['segments.products', product.attributes?.slug as string], - locale: product.attributes?.locale || 'nl', + segments: ['segments.products', product?.slug as string], + locale: product?.locale || 'nl', }); return { url: url?.href, - lastModified: product.attributes?.updatedAt, + lastModified: product?.updatedAt, }; }); diff --git a/apps/pdc-frontend/src/app/actions/index.ts b/apps/pdc-frontend/src/app/actions/index.ts index f55cf1424..f9b1ed0eb 100644 --- a/apps/pdc-frontend/src/app/actions/index.ts +++ b/apps/pdc-frontend/src/app/actions/index.ts @@ -1,16 +1,13 @@ 'use server'; import { buildURL, getPathAndSearchParams } from '@frameless/utils'; import { redirect } from 'next/navigation'; -import { GetLiveSuggestionsData, SearchResult } from '@/types'; -import { - apiSettings, - fetchData, - getAlphabeticallyProductsByLetter, - mappingProducts, - MappingProductsProps, -} from '@/util'; + +import { Product as ProductType } from '../../../gql/graphql'; import { useTranslation } from '../i18n'; +import { GetLiveSuggestionsData, SearchResult } from '@/types'; +import { apiSettings, fetchData, getAlphabeticallyProductsByLetter, mappingProducts } from '@/util'; + type Params = { pageSize?: number; page?: number; @@ -125,7 +122,7 @@ export const setPageIndex = async (pageIndex: string, currentQuery: string, loca }; } - const { products } = await getAlphabeticallyProductsByLetter({ + const { products_connection } = await getAlphabeticallyProductsByLetter({ locale, page: Number(pageIndex) + 1, pageSize: apiSettings.pagination.pageSize, @@ -133,7 +130,7 @@ export const setPageIndex = async (pageIndex: string, currentQuery: string, loca }); return { - data: mappingProducts(products?.data as MappingProductsProps[], productSegment), - pagination: products?.meta.pagination, + data: mappingProducts(products_connection?.nodes as ProductType[], productSegment), + pagination: products_connection?.pageInfo, }; }; diff --git a/apps/pdc-frontend/src/app/api/clear-preview/route.ts b/apps/pdc-frontend/src/app/api/clear-preview/route.ts index 63ee2430a..2c6e12932 100644 --- a/apps/pdc-frontend/src/app/api/clear-preview/route.ts +++ b/apps/pdc-frontend/src/app/api/clear-preview/route.ts @@ -2,6 +2,6 @@ import { draftMode } from 'next/headers'; import { redirect } from 'next/navigation'; export async function GET(_request: Request) { - draftMode().disable(); + (await draftMode()).disable(); redirect('/'); } diff --git a/apps/pdc-frontend/src/app/api/current-pathname/route.ts b/apps/pdc-frontend/src/app/api/current-pathname/route.ts index d199e1d8c..7def728e4 100644 --- a/apps/pdc-frontend/src/app/api/current-pathname/route.ts +++ b/apps/pdc-frontend/src/app/api/current-pathname/route.ts @@ -1,8 +1,10 @@ import { cookies } from 'next/headers'; import { NextResponse } from 'next/server'; + +import { GetProductBySlugQuery } from '../../../../gql/graphql'; + import { GET_PRODUCT_BY_SLUG } from '@/query'; import { fetchData, getStrapiGraphqlURL } from '@/util'; -import { GetProductBySlugQuery } from '../../../../gql/graphql'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); @@ -14,7 +16,7 @@ export async function GET(request: Request) { return NextResponse.json({ localizations: [] }); } - const cookieStore = cookies(); + const cookieStore = await cookies(); cookieStore.set('slug', slug); const { data } = await fetchData<{ data: GetProductBySlugQuery }>({ url: getStrapiGraphqlURL(), @@ -22,18 +24,17 @@ export async function GET(request: Request) { variables: { slug: slug, locale: locale, - pageMode: 'LIVE', + status: 'PUBLISHED', }, }); - if (!data || data?.products?.data?.length === 0) { + if (!data || data?.products?.length === 0) { return NextResponse.json({ localizations: [] }); } - const localizations = - data.products?.data[0]?.attributes?.localizations?.data.map(({ attributes }) => attributes) || []; + const localizations = data.products[0]?.localizations?.map((localization) => localization) || []; localizations.push({ - locale: data.products?.data[0]?.attributes?.locale, - slug: data.products?.data[0]?.attributes?.slug as string, + locale: data.products[0]?.locale, + slug: data.products[0]?.slug as string, }); const routeData = localizations.map((product) => ({ diff --git a/apps/pdc-frontend/src/app/api/open-forms-mock/[...path]/route.ts b/apps/pdc-frontend/src/app/api/open-forms-mock/[...path]/route.ts new file mode 100644 index 000000000..6bcf388aa --- /dev/null +++ b/apps/pdc-frontend/src/app/api/open-forms-mock/[...path]/route.ts @@ -0,0 +1,284 @@ +'use server'; + +import { type NextRequest, NextResponse } from 'next/server'; + +// Fixed UUIDs (consistent across requests) + +const FORM_UUID = 'e450890a-4166-410e-8d64-0a54ad30ba01'; +const FORM_STEP_UUID = '9e6eb3c5-e5a4-4abf-b64a-73d3243f2bf5'; +const SUB_STEP_ID = '58aad9c3-29c7-4568-9047-3ac7ceb0f0ff'; + +// In-memory submission store (dev only, resets on server restart) + +interface StoredSubmission { + stepData: Record; + completed: boolean; +} +const store = new Map(); + +// Demo form fields + +const COMPONENTS = [ + { id: 'f1', type: 'textfield', key: 'firstName', label: 'Voornaam', validate: { required: true } }, + { id: 'f2', type: 'textfield', key: 'lastName', label: 'Achternaam', validate: { required: true } }, + { id: 'f3', type: 'email', key: 'email', label: 'E-mailadres', validate: { required: false } }, +]; + +const DEMO_FORM = { + uuid: FORM_UUID, + name: 'Demo formulier', + slug: 'demo-form', + url: '/api/open-forms-mock/forms/demo-form', + loginRequired: false, + loginOptions: [], + showProgressIndicator: true, + showSummaryProgress: false, + maintenanceMode: false, + active: true, + submissionAllowed: 'yes', + submissionLimitReached: false, + suspensionAllowed: false, + sendConfirmationEmail: false, + displayMainWebsiteLink: false, + submissionStatementsConfiguration: [], + appointmentOptions: { isAppointment: false, supportsMultipleProducts: null }, + literals: { + beginText: { resolved: 'Begin', value: '' }, + changeText: { resolved: 'Wijzig', value: '' }, + confirmText: { resolved: 'Bevestig', value: '' }, + previousText: { resolved: 'Vorige', value: '' }, + }, + steps: [ + { + uuid: FORM_STEP_UUID, + slug: 'step-1', + formDefinition: 'Stap 1', + index: 0, + literals: { + previousText: { resolved: 'Vorige', value: '' }, + saveText: { resolved: 'Opslaan', value: '' }, + nextText: { resolved: 'Volgende', value: '' }, + }, + url: `/api/open-forms-mock/forms/demo-form/steps/${FORM_STEP_UUID}`, + }, + ], + introductionPageContent: '', + explanationTemplate: '', + requiredFieldsWithAsterisk: true, + resumeLinkLifetime: 7, + autoLoginAuthenticationBackend: '', + translationEnabled: false, + hideNonApplicableSteps: false, + cosignLoginOptions: [], + cosignHasLinkInEmail: false, + paymentRequired: false, + submissionReportDownloadLinkTitle: '', + newRendererEnabled: false, + communicationPreferencesPortalUrl: '', +}; + +// Helpers + +function ok(data: unknown, status = 200) { + return NextResponse.json(data, { + status, + headers: { 'Content-Language': 'nl' }, + }); +} + +function buildSubmission(uuid: string, state?: StoredSubmission) { + return { + id: uuid, + url: `/api/open-forms-mock/submissions/${uuid}`, + form: '/api/open-forms-mock/forms/demo-form', + formUrl: `http://localhost:3000/nl/formulier/demo-form`, + initialDataReference: '', + steps: [ + { + id: SUB_STEP_ID, + name: 'Stap 1', + url: `/api/open-forms-mock/submissions/${uuid}/steps/${FORM_STEP_UUID}`, + formStep: `/api/open-forms-mock/forms/demo-form/steps/${FORM_STEP_UUID}`, + isApplicable: true, + completed: state?.completed ?? false, + canSubmit: true, + }, + ], + submissionAllowed: 'yes', + isAuthenticated: false, + payment: { isRequired: false, amount: null, hasPaid: false }, + }; +} + +function buildStep(uuid: string, state?: StoredSubmission) { + return { + id: SUB_STEP_ID, + slug: 'step-1', + formStep: { + index: 0, + configuration: { components: COMPONENTS }, + }, + data: state?.stepData ?? null, + isApplicable: true, + completed: state?.completed ?? false, + canSubmit: true, + }; +} + +// Route handlers + +type Params = { params: Promise<{ path: string[] }> }; + +export async function GET(req: NextRequest, { params }: Params) { + const { path } = await params; + const [p0, p1, p2, p3] = path; + + // GET /forms/{slug} + if (p0 === 'forms' && path.length === 2) { + return ok(DEMO_FORM); + } + + // GET /i18n/info + if (p0 === 'i18n' && p1 === 'info') { + return ok({ + languages: [ + { code: 'nl', name: 'Nederlands' }, + { code: 'en', name: 'English' }, + ], + current: 'nl', + }); + } + + // GET /i18n/formio/{lang} or /i18n/compiled-messages/{lang}.json + if (p0 === 'i18n') return ok({}); + + // GET /analytics/analytics-tools-config-info + if (p0 === 'analytics') { + return ok({ govmetricSourceId: '', govmetricSecureGuid: '', enableGovmetricAnalytics: false }); + } + + // GET /submissions/{uuid} + if (p0 === 'submissions' && path.length === 2) { + const state = store.get(p1); + if (!state) return ok({ detail: 'Not found.' }, 404); + return ok(buildSubmission(p1, state)); + } + + // GET /submissions/{uuid}/steps/{stepUuid} + if (p0 === 'submissions' && p2 === 'steps' && path.length === 4) { + const state = store.get(p1); + if (!state) return ok({ detail: 'Not found.' }, 404); + return ok(buildStep(p1, state)); + } + + // GET /submissions/{uuid}/summary + if (p0 === 'submissions' && p2 === 'summary') { + const state = store.get(p1); + if (!state) return ok({ detail: 'Not found.' }, 404); + const data = (state?.stepData ?? {}) as Record; + return ok([ + { + slug: 'step-1', + name: 'Stap 1', + data: COMPONENTS.map((c) => ({ + name: c.label, + value: data[c.key] ?? '', + component: c, + })), + }, + ]); + } + + // GET /submissions/{uuid}/status (polled after _complete) + if (p0 === 'submissions' && p2 === 'status') { + return ok({ + status: 'done', + result: 'success', + publicReference: 'MOCK-001', + confirmationPageTitle: 'Bedankt', + confirmationPageContent: '

Uw formulier is ontvangen. Referentie: MOCK-001.

', + reportDownloadUrl: '', + paymentUrl: '', + mainWebsiteUrl: '', + }); + } + + return ok({ detail: 'Not found.' }, 404); +} + +export async function POST(req: NextRequest, { params }: Params) { + const { path } = await params; + const [p0, p1, p2, p3, p4] = path; + const body = await req.json().catch(() => ({})); + + // POST /submissions + if (p0 === 'submissions' && path.length === 1) { + const uuid = crypto.randomUUID(); + store.set(uuid, { stepData: {}, completed: false }); + return ok(buildSubmission(uuid), 201); + } + + // POST /submissions/{uuid}/_complete + if (p0 === 'submissions' && p2 === '_complete') { + return ok({ statusUrl: `/api/open-forms-mock/submissions/${p1}/status` }); + } + + // POST /submissions/{uuid}/steps/{stepUuid}/validate + if (p0 === 'submissions' && p2 === 'steps' && p4 === 'validate') { + return ok({}); + } + + // POST /submissions/{uuid}/steps/{stepUuid}/_check-logic + if (p0 === 'submissions' && p2 === 'steps' && p4 === '_check-logic') { + const state = store.get(p1); + const merged = { ...(state?.stepData ?? {}), ...(body.data ?? {}) }; + return ok({ + submission: buildSubmission(p1, state), + step: { + ...buildStep(p1, state), + data: merged, + }, + }); + } + + return ok({ detail: 'Not found.' }, 404); +} + +export async function PUT(req: NextRequest, { params }: Params) { + const { path } = await params; + const [p0, p1, p2] = path; + const body = await req.json().catch(() => ({})); + + // PUT /submissions/{uuid}/steps/{stepUuid} + if (p0 === 'submissions' && p2 === 'steps' && path.length === 4) { + const existing = store.get(p1) ?? { stepData: {}, completed: false }; + const updated = { ...existing, stepData: body.data ?? {}, completed: true }; + store.set(p1, updated); + return ok(buildStep(p1, updated)); + } + + return ok({ detail: 'Not found.' }, 404); +} + +export async function PATCH(req: NextRequest, ctx: Params) { + return PUT(req, ctx); +} + +export async function DELETE(_req: NextRequest, { params }: Params) { + const { path } = await params; + const [p0, p1, p2] = path; + + // DELETE /submissions/{uuid} + if (p0 === 'submissions' && path.length === 2) { + store.delete(p1); + return new NextResponse(null, { status: 204 }); + } + + // DELETE /authentication/{submissionId}/session (triggered by "Annuleren" button) + if (p0 === 'authentication' && p2 === 'session') { + store.delete(p1); + return new NextResponse(null, { status: 204 }); + } + + return ok({ detail: 'Not found.' }, 404); +} diff --git a/apps/pdc-frontend/src/app/api/preview/route.ts b/apps/pdc-frontend/src/app/api/preview/route.ts index e991ecda2..282606db3 100644 --- a/apps/pdc-frontend/src/app/api/preview/route.ts +++ b/apps/pdc-frontend/src/app/api/preview/route.ts @@ -1,5 +1,6 @@ import { draftMode } from 'next/headers'; import { redirect } from 'next/navigation'; + import { GET_PRODUCT_BY_SLUG_AND_LOCALE } from '@/query'; import { fetchData, getStrapiGraphqlURL } from '@/util'; @@ -35,7 +36,7 @@ export async function GET(request: Request) { url: getStrapiGraphqlURL(), query: getCurrentPage(type).query, variables: { - pageMode: 'PREVIEW', + status: 'DRAFT', }, }); @@ -46,7 +47,7 @@ export async function GET(request: Request) { const path = getCurrentPage(type).path; // Enable Draft Mode by setting the cookie - draftMode().enable(); + (await draftMode()).enable(); // Redirect to the path from the fetched post // We don't redirect to searchParams.slug as that might lead to open redirect vulnerabilities redirect(path ? path : '/'); diff --git a/apps/pdc-frontend/src/app/i18n/client.ts b/apps/pdc-frontend/src/app/i18n/client.ts index 55a20f62b..c1a284d50 100644 --- a/apps/pdc-frontend/src/app/i18n/client.ts +++ b/apps/pdc-frontend/src/app/i18n/client.ts @@ -5,6 +5,7 @@ import LanguageDetector from 'i18next-browser-languagedetector'; import resourcesToBackend from 'i18next-resources-to-backend'; import { useEffect } from 'react'; import { initReactI18next, useTranslation as useTranslationOrg } from 'react-i18next'; + import { getOptions } from './settings'; // on client side the normal singleton is ok diff --git a/apps/pdc-frontend/src/app/i18n/index.ts b/apps/pdc-frontend/src/app/i18n/index.ts index a202de7fc..e9b2b2d99 100644 --- a/apps/pdc-frontend/src/app/i18n/index.ts +++ b/apps/pdc-frontend/src/app/i18n/index.ts @@ -3,6 +3,7 @@ import { createInstance, InitOptions } from 'i18next'; import resourcesToBackend from 'i18next-resources-to-backend'; import { initReactI18next } from 'react-i18next/initReactI18next'; + import { getOptions } from './settings'; const initI18next = async (locale: string, ns: string | string[]) => { diff --git a/apps/pdc-frontend/src/components/AuditRapport/index.tsx b/apps/pdc-frontend/src/components/AuditRapport/index.tsx index d897a1e00..cdcff22ce 100644 --- a/apps/pdc-frontend/src/components/AuditRapport/index.tsx +++ b/apps/pdc-frontend/src/components/AuditRapport/index.tsx @@ -1,5 +1,3 @@ -/* eslint-disable @next/next/no-head-element */ -/* eslint-disable react/no-unescaped-entities */ import { Article, DataBadge, @@ -23,11 +21,14 @@ import { UnorderedListItem, } from '@utrecht/component-library-react'; import { groupBy } from 'lodash'; -import { Markdown, UtrechtIconChevronRight } from '@/components'; -import { wcagIntro } from './intro'; -import { successCriteria, successCriteriaMap } from './wcag22'; + import wcagJSON from '../../../wcag-evaluation.json'; import { DigiToegankelijkStatus } from '../DigiToegankelijkStatus'; + +import { wcagIntro } from './intro'; +import { successCriteria, successCriteriaMap } from './wcag22'; + +import { Markdown, UtrechtIconChevronRight } from '@/components'; type WcagEmJson = typeof wcagJSON; interface WcagSpotlightSectionProps { diff --git a/apps/pdc-frontend/src/components/AuditRapport/intro.ts b/apps/pdc-frontend/src/components/AuditRapport/intro.ts index dea8187b2..87995ef0d 100644 --- a/apps/pdc-frontend/src/components/AuditRapport/intro.ts +++ b/apps/pdc-frontend/src/components/AuditRapport/intro.ts @@ -50,6 +50,7 @@ import wcag334intro from '@nl-design-system-unstable/documentation/wcag/summarie import wcag411intro from '@nl-design-system-unstable/documentation/wcag/summaries/_4.1.1-summary.md'; import wcag412intro from '@nl-design-system-unstable/documentation/wcag/summaries/_4.1.2-summary.md'; import wcag413intro from '@nl-design-system-unstable/documentation/wcag/summaries/_4.1.3-summary.md'; + import wcag126intro from './_wcag-1.2.6-intro-frameless.md'; export const wcagIntro: { [index: string]: string } = { diff --git a/apps/pdc-frontend/src/components/Breadcrumbs.tsx b/apps/pdc-frontend/src/components/Breadcrumbs.tsx new file mode 100644 index 000000000..883a30ed1 --- /dev/null +++ b/apps/pdc-frontend/src/components/Breadcrumbs.tsx @@ -0,0 +1,16 @@ +'use client'; + +import { Breadcrumbs as UIBreadcrumbs } from '@frameless/ui'; +import type { BreadcrumbNavProps } from '@utrecht/component-library-react'; +import Link from 'next/link'; +import { ComponentType } from 'react'; + +type BreadcrumbLinkType = { href: string; label: string; current: boolean }; + +interface BreadcrumbsProps extends BreadcrumbNavProps { + links: BreadcrumbLinkType[]; + backLink?: BreadcrumbLinkType; + label?: string; +} + +export const Breadcrumbs = (props: BreadcrumbsProps) => } />; diff --git a/apps/pdc-frontend/src/components/ClientLanguageSwitcher.tsx b/apps/pdc-frontend/src/components/ClientLanguageSwitcher.tsx index f23f9799a..bbb7c485b 100644 --- a/apps/pdc-frontend/src/components/ClientLanguageSwitcher.tsx +++ b/apps/pdc-frontend/src/components/ClientLanguageSwitcher.tsx @@ -5,9 +5,11 @@ import { useQuery } from '@tanstack/react-query'; import Link from 'next/link'; import { useParams, usePathname, useSelectedLayoutSegment } from 'next/navigation'; import React from 'react'; + +import { fallbackLng, languages } from '../app/i18n/settings'; + import { LanguageSwitcher, LanguageSwitcherSkeleton } from '@/components'; import { fetchData } from '@/util/fetchData'; -import { fallbackLng, languages } from '../app/i18n/settings'; export interface Localizations { locale: string; diff --git a/apps/pdc-frontend/src/components/ContactCard/index.module.scss b/apps/pdc-frontend/src/components/ContactCard/index.module.css similarity index 100% rename from apps/pdc-frontend/src/components/ContactCard/index.module.scss rename to apps/pdc-frontend/src/components/ContactCard/index.module.css diff --git a/apps/pdc-frontend/src/components/ContactCard/index.tsx b/apps/pdc-frontend/src/components/ContactCard/index.tsx index b26866863..6a4bbc6f7 100644 --- a/apps/pdc-frontend/src/components/ContactCard/index.tsx +++ b/apps/pdc-frontend/src/components/ContactCard/index.tsx @@ -1,6 +1,7 @@ import classnames from 'classnames/bind'; import { type DetailedHTMLProps, forwardRef, type HTMLAttributes } from 'react'; -import styles from './index.module.scss'; + +import styles from './index.module.css'; const css = classnames.bind(styles); diff --git a/apps/pdc-frontend/src/components/KCMSurvey/index.scss b/apps/pdc-frontend/src/components/KCMSurvey/index.css similarity index 100% rename from apps/pdc-frontend/src/components/KCMSurvey/index.scss rename to apps/pdc-frontend/src/components/KCMSurvey/index.css diff --git a/apps/pdc-frontend/src/components/KCMSurvey/index.tsx b/apps/pdc-frontend/src/components/KCMSurvey/index.tsx index 649bf685e..078a4a457 100644 --- a/apps/pdc-frontend/src/components/KCMSurvey/index.tsx +++ b/apps/pdc-frontend/src/components/KCMSurvey/index.tsx @@ -1,7 +1,7 @@ import { buildURL } from '@frameless/utils'; import Script from 'next/script'; import React from 'react'; -import './index.scss'; +import './index.css'; interface KCMSurveyProps { nonce: string; } @@ -32,8 +32,8 @@ export const KCMSurvey = ({ nonce }: KCMSurveyProps) => { return ( <> - {/* - crossOrigin="anonymous" is required to securely load the external KCM survey script + {/* + crossOrigin="anonymous" is required to securely load the external KCM survey script and to ensure proper handling of CORS and CSP policies. */} - - diff --git a/apps/tiptap-sandbox/package.json b/apps/tiptap-sandbox/package.json deleted file mode 100644 index 76fcab2e7..000000000 --- a/apps/tiptap-sandbox/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@frameless/tiptap-sandbox", - "private": true, - "version": "0.0.1", - "type": "module", - "author": "@frameless", - "description": "", - "license": "EUPL-1.2", - "keywords": [], - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "preview": "vite preview" - }, - "dependencies": { - "@frameless/tiptap-editor": "0.0.1", - "@strapi/design-system": "1.12.2", - "react": "18.3.1", - "react-dom": "18.3.1" - }, - "devDependencies": { - "@types/react": "18.3.12", - "@types/react-dom": "18.3.1", - "@vitejs/plugin-react": "4.3.1", - "typescript": "5.5.2", - "vite": "5.3.2", - "vite-plugin-require": "1.2.14" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "apps/tiptap-sandbox" - } -} diff --git a/apps/tiptap-sandbox/public/vite.svg b/apps/tiptap-sandbox/public/vite.svg deleted file mode 100644 index e7b8dfb1b..000000000 --- a/apps/tiptap-sandbox/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/tiptap-sandbox/src/App.tsx b/apps/tiptap-sandbox/src/App.tsx deleted file mode 100644 index fac224be0..000000000 --- a/apps/tiptap-sandbox/src/App.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { Editor } from '@frameless/tiptap-editor'; -import { useState } from 'react'; -import '@utrecht/component-library-css'; -import '@utrecht/component-library-css/dist/html.css'; -import '@utrecht/design-tokens/dist/index.css'; -import '@frameless/tiptap-editor/dist/tiptap.css'; -import 'tippy.js/dist/tippy.css'; -import '@frameless/ui/dist/bundle.css'; - -const App = () => { - const [locale, setLocale] = useState('en'); - - return ( -
- - { - localStorage.setItem('content', content ?? ''); - }} - value={localStorage.getItem('content') ?? ''} - intlLabel={'Label'} - labelAction={undefined} - className="utrecht-theme utrecht-theme--media-query-color-scheme utrecht-html utrecht-document" - error={'Error'} - description={undefined} - required={false} - settings={{ - price: { - enabled: true, - data: { - title: 'Product prices list', - price: [ - { - currency: 'EUR', - label: 'Product 1', - uuid: 'C68FC92B-A3CD-43BF-947A-09A04AFBF990', - value: 20, - }, - { - currency: 'EUR', - label: 'Product 2', - uuid: 'C7F8F7DC-9205-4A33-A2E2-9B49379E2E1F', - value: 30, - }, - { - currency: 'EUR', - label: 'Product 3', - uuid: '899CFE0A-A98A-43E6-96CC-9A23F8B2B874', - value: 40, - }, - { - currency: 'EUR', - label: 'Product 4', - uuid: '3FE0CCB9-C8FC-404E-B714-59A17155DE08', - value: 50, - }, - { - currency: 'EUR', - label: 'Product 5', - uuid: '40200BAB-F296-49DA-9861-57449840C4F8', - value: 60, - }, - ], - }, - }, - headings: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'], - bold: true, - italic: true, - strikethrough: true, - underline: true, - code: true, - blockquote: true, - highlight: true, - align: ['center', 'left', 'right'], - lists: ['ul', 'ol'], - disableOrderedListShorthand: false, - table: true, - horizontal: true, - links: { - enabled: true, - autolink: false, - openOnClick: false, - linkOnPaste: true, - relAttribute: false, - HTMLAttributes: { - rel: '', - }, - }, - image: { - enabled: true, - inline: true, - allowBase64: true, - }, - other: { - wordcount: true, //TODO test this option after integrate the Editor - language: { - enabled: true, - default: [ - { - name: 'Engles', - code: 'en', - }, - { - name: 'Arabisch', - code: 'ar', - }, - { - name: 'Ukrainisch', - code: 'uk', - }, - { - name: 'Turks', - code: 'tr', - }, - { - name: 'Nederlandse', - code: 'nl', - }, - ], - }, - }, - youtube: { - enabled: true, - height: 400, - width: 400, - }, - }} - /> -
- ); -}; -export default App; diff --git a/apps/tiptap-sandbox/src/assets/react.svg b/apps/tiptap-sandbox/src/assets/react.svg deleted file mode 100644 index 6c87de9bb..000000000 --- a/apps/tiptap-sandbox/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/tiptap-sandbox/src/custom.d.ts b/apps/tiptap-sandbox/src/custom.d.ts deleted file mode 100644 index 321f3c0d1..000000000 --- a/apps/tiptap-sandbox/src/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; diff --git a/apps/tiptap-sandbox/src/index.css b/apps/tiptap-sandbox/src/index.css deleted file mode 100644 index 5d1f81b31..000000000 --- a/apps/tiptap-sandbox/src/index.css +++ /dev/null @@ -1,19 +0,0 @@ -:root { - /* background-color: #242424; */ - - /* color: rgb(255 255 255 / 87%); */ - - /* color: black; */ - color-scheme: light dark; - font-family: "Inter", system-ui, "Avenir", "Helvetica", "Arial", sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-synthesis: none; - font-weight: 400; - line-height: 1.5; - text-rendering: optimizeLegibility; -} -.utrecht-app { - padding-block: 1.5rem; - padding-inline: 1.5rem; -} diff --git a/apps/tiptap-sandbox/src/main.tsx b/apps/tiptap-sandbox/src/main.tsx deleted file mode 100644 index 9bb419d3d..000000000 --- a/apps/tiptap-sandbox/src/main.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import App from './App.tsx'; -import './index.css'; - -ReactDOM.createRoot(document.getElementById('root')!).render( - - - , -); diff --git a/apps/tiptap-sandbox/src/vite-env.d.ts b/apps/tiptap-sandbox/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a..000000000 --- a/apps/tiptap-sandbox/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/apps/tiptap-sandbox/tsconfig.json b/apps/tiptap-sandbox/tsconfig.json deleted file mode 100644 index 3934b8f6d..000000000 --- a/apps/tiptap-sandbox/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/apps/tiptap-sandbox/tsconfig.node.json b/apps/tiptap-sandbox/tsconfig.node.json deleted file mode 100644 index 97ede7ee6..000000000 --- a/apps/tiptap-sandbox/tsconfig.node.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, - "strict": true - }, - "include": ["vite.config.ts"] -} diff --git a/apps/tiptap-sandbox/vercel.json b/apps/tiptap-sandbox/vercel.json deleted file mode 100644 index c73478f08..000000000 --- a/apps/tiptap-sandbox/vercel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "github": { - "enabled": false, - "silent": true - } -} diff --git a/apps/tiptap-sandbox/vite.config.ts b/apps/tiptap-sandbox/vite.config.ts deleted file mode 100644 index 28e1eb3e7..000000000 --- a/apps/tiptap-sandbox/vite.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import react from '@vitejs/plugin-react'; -import { defineConfig } from 'vite'; -import vitePluginRequire from 'vite-plugin-require'; - -// https://vitejs.dev/config/ -export default defineConfig({ - // @ts-expect-error - plugins: [vitePluginRequire.default(), react()], - build: { - commonjsOptions: { - include: [/@strapi\/design-system/, /@frameless\/tiptap-editor/, /node_modules/], - }, - }, -}); diff --git a/apps/vth-dashboard/README.md b/apps/vth-dashboard/README.md index ad964a948..355bd38f1 100644 --- a/apps/vth-dashboard/README.md +++ b/apps/vth-dashboard/README.md @@ -9,7 +9,7 @@ Start your Strapi application with autoReload enabled. [Learn more](https://docs ```shell npm run dev # or -yarn dev +pnpm dev ``` ### `start` @@ -19,7 +19,7 @@ Start your Strapi application with autoReload disabled. [Learn more](https://doc ```shell npm run start # or -yarn start +pnpm start ``` ### `build` @@ -29,5 +29,5 @@ Build your admin panel. [Learn more](https://docs.strapi.io/developer-docs/lates ```shell npm run build # or -yarn build +pnpm build ``` diff --git a/apps/vth-dashboard/config/admin.ts b/apps/vth-dashboard/config/admin.ts index 894637602..3168ad2a2 100644 --- a/apps/vth-dashboard/config/admin.ts +++ b/apps/vth-dashboard/config/admin.ts @@ -1,3 +1,22 @@ +const CONTENT_TYPE_MAP: Record = { + 'api::homepage.homepage': { + path: 'Homepage', + // Homepage has no slug field + }, + 'api::navigation-page.navigation-page': { + path: 'Hoofditem', + slugField: 'slug', + }, + 'api::article-page.article-page': { + path: 'ThemaContent', + slugField: 'slug', + }, + 'api::theme-page.theme-page': { + path: 'Thema', + slugField: 'slug', + }, +}; + export default ({ env }) => ({ watchIgnoredFiles: ['**/config/sync/**'], auth: { @@ -11,4 +30,50 @@ export default ({ env }) => ({ salt: env('TRANSFER_TOKEN_SALT'), }, }, + flags: { + nps: false, // disable the Net Promoter Score popup + promoteEE: false, // disable the promotion of Strapi Enterprise features + }, + preview: { + enabled: true, + config: { + allowedOrigins: env('FRONTEND_PUBLIC_URL'), + async handler(uid, { documentId, locale, status }) { + const config = CONTENT_TYPE_MAP[uid]; + if (!config || !documentId) return null; + + const secret = env('PREVIEW_SECRET_TOKEN'); + if (!secret) return null; + + // Handle homepage separately (no slug field) + if (!config.slugField) { + const params = new URLSearchParams({ + secret, + type: config.path, + locale, + status, + }); + return `${env('FRONTEND_PUBLIC_URL')}/api/preview?${params}`; + } + + const document = await strapi.documents(uid).findOne({ + documentId, + fields: [config.slugField], + status: status === 'published' ? 'published' : 'draft', + }); + + if (!document?.[config.slugField]) return null; + + const params = new URLSearchParams({ + secret, + slug: document[config.slugField], + type: config.path, + locale, + status, + }); + + return `${env('FRONTEND_PUBLIC_URL')}/api/preview?${params}`; + }, + }, + }, }); diff --git a/apps/vth-dashboard/config/plugins.ts b/apps/vth-dashboard/config/plugins.ts index 8015b5a53..96c384612 100644 --- a/apps/vth-dashboard/config/plugins.ts +++ b/apps/vth-dashboard/config/plugins.ts @@ -1,5 +1,3 @@ -const { apolloPrometheusPlugin } = require('strapi-prometheus'); - export default ({ env }) => { const isProd = env('NODE_ENV') === 'production'; return { @@ -9,72 +7,20 @@ export default ({ env }) => { env_label: env('STRAPI_ENV_LABEL'), }, }, - 'preview-button': { - enabled: true, - config: { - contentTypes: [ - { - uid: 'api::homepage.homepage', - query: { - type: 'Homepage', - }, - }, - { - uid: 'api::navigation-page.navigation-page', - query: { - type: 'Hoofditem', - }, - }, - { - uid: 'api::article-page.article-page', - query: { - type: 'ThemaContent', - }, - }, - { - uid: 'api::theme-page.theme-page', - query: { - type: 'Thema', - }, - }, - ], - domain: env('FRONTEND_PUBLIC_URL'), - token: env('PREVIEW_SECRET_TOKEN'), - }, - }, - 'strapi-tiptap-editor': { - enabled: true, - }, - 'strapi-prometheus': { - enabled: true, - graphql: { - enabled: true, - config: { - apolloServer: { - plugins: [apolloPrometheusPlugin], // add the plugin to get apollo metrics - tracing: true, // this must be true to get some of the data needed to create the metrics - }, - }, - }, - }, - slugify: { + prometheus: { enabled: true, config: { - shouldUpdateSlug: true, - contentTypes: { - 'navigation-page': { - field: 'slug', - references: 'title', - }, - 'theme-page': { - field: 'slug', - references: 'title', - }, - 'article-page': { - field: 'slug', - references: 'title', - }, + collectDefaultMetrics: false, + server: { + port: parseInt(env('METRICS_PORT', '9001'), 10), + host: '0.0.0.0', + path: '/metrics', }, + + normalize: [ + [/\/(?:[a-z0-9]{24,25}|\d+)(?=\/|$)/, '/:id'], + [/\/uploads\/[^\\/]+\.[a-zA-Z0-9]+/, '/uploads/:file'], + ], }, }, upload: { @@ -86,9 +32,6 @@ export default ({ env }) => { }, }, }, - 'import-export-entries': { - enabled: true, - }, publisher: { enabled: true, config: { diff --git a/apps/vth-dashboard/config/sync/admin-role.strapi-author.json b/apps/vth-dashboard/config/sync/admin-role.strapi-author.json index 1487a76fe..9b181ac50 100644 --- a/apps/vth-dashboard/config/sync/admin-role.strapi-author.json +++ b/apps/vth-dashboard/config/sync/admin-role.strapi-author.json @@ -2,6 +2,8 @@ "name": "Redacteur", "code": "strapi-author", "description": "Redacteur kan content aanmaken, verwijderen en wijzigingen", + "documentId": "dyklrgpiq51yya33fe9cclp5", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.create", @@ -10,21 +12,27 @@ "fields": ["title", "slug", "description", "previewImage", "content", "navigation_pages", "theme_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "b4eg7abom6v9juqcmjzz5msx", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "api::article-page.article-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "tqog543coixm4k450s95lpn0", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "subject": "api::article-page.article-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "zqm6h6aj3ex9pmbrfrdrr58v", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -33,7 +41,9 @@ "fields": ["title", "slug", "description", "previewImage", "content", "navigation_pages", "theme_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ysdqjn1uqwlzhoyiypuhgn34", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -42,7 +52,9 @@ "fields": ["title", "slug", "description", "previewImage", "content", "navigation_pages", "theme_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ebgl7mhjr94b1ykazcw9sb9y", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -51,7 +63,9 @@ "fields": ["title", "content", "description", "bannerImage"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "dgfomq4bwup9d5pumcoxna6h", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -60,7 +74,9 @@ "fields": ["title", "content", "description", "bannerImage"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "bff7gs4gah0doahp50ypatlb", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -69,7 +85,9 @@ "fields": ["title", "content", "description", "bannerImage"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ixedsizlwdxlqsrz3boted3y", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -78,21 +96,27 @@ "fields": ["title", "slug", "content", "description", "previewImage", "article_pages", "theme_pages", "order"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "uv8nbffdy8qghewz2pdx2rv0", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "api::navigation-page.navigation-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "rlmxy1obg75twbq6w6qdqkcl", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "subject": "api::navigation-page.navigation-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "li9ie3ol46162ojdu0w7jp2g", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -101,7 +125,9 @@ "fields": ["title", "slug", "content", "description", "previewImage", "article_pages", "theme_pages", "order"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "kfmumabfqeb5zc89gssbuqlg", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -110,7 +136,9 @@ "fields": ["title", "slug", "content", "description", "previewImage", "article_pages", "theme_pages", "order"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ox131bjhc0d93ep3ks9j9ttw", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -119,7 +147,9 @@ "fields": ["title", "body"] }, "conditions": ["admin::is-creator"], - "actionParameters": {} + "actionParameters": {}, + "documentId": "lauh06kxks9755fi4nuhtmsw", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -128,7 +158,9 @@ "fields": ["title", "body"] }, "conditions": ["admin::is-creator"], - "actionParameters": {} + "actionParameters": {}, + "documentId": "c391m9qun7u01oqxaqxu2bu5", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -137,7 +169,9 @@ "fields": ["title", "body"] }, "conditions": ["admin::is-creator"], - "actionParameters": {} + "actionParameters": {}, + "documentId": "th2q5kdaeuhegeh72a0u7v0c", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -146,21 +180,27 @@ "fields": ["title", "slug", "navigation_pages", "description", "previewImage", "content", "article_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "rqd6jpm0a8w33hjtplfwbuj5", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "api::theme-page.theme-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "kysqgjxts7bbjz37958h46k4", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "subject": "api::theme-page.theme-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "oses8pnqm3ibnoiibijo62me", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -169,7 +209,9 @@ "fields": ["title", "slug", "navigation_pages", "description", "previewImage", "content", "article_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "auen24r563hxc7erm1mj59ze", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -178,49 +220,63 @@ "fields": ["title", "slug", "navigation_pages", "description", "previewImage", "content", "article_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "yz9sh42kf8qnkcp8stbgp1e1", + "locale": null }, { "action": "plugin::upload.assets.copy-link", "subject": null, "properties": {}, "conditions": ["admin::is-creator", "admin::has-same-role-as-creator"], - "actionParameters": {} + "actionParameters": {}, + "documentId": "u61il94f4sn3bofx9f7dkzo6", + "locale": null }, { "action": "plugin::upload.assets.create", "subject": null, "properties": {}, "conditions": ["admin::is-creator", "admin::has-same-role-as-creator"], - "actionParameters": {} + "actionParameters": {}, + "documentId": "l8jo386sj1w6ltizvru5wr1j", + "locale": null }, { "action": "plugin::upload.assets.download", "subject": null, "properties": {}, "conditions": ["admin::is-creator", "admin::has-same-role-as-creator"], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ypl6oio3ekn9vzif7faocar7", + "locale": null }, { "action": "plugin::upload.assets.update", "subject": null, "properties": {}, "conditions": ["admin::is-creator", "admin::has-same-role-as-creator"], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ucsvg5k426hhx5kuucjevwcm", + "locale": null }, { "action": "plugin::upload.configure-view", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "i8kdzu11nqte9md95wryj72g", + "locale": null }, { "action": "plugin::upload.read", "subject": null, "properties": {}, "conditions": ["admin::is-creator", "admin::has-same-role-as-creator"], - "actionParameters": {} + "actionParameters": {}, + "documentId": "lnxx3nn2bs5xevobitkmcbqc", + "locale": null } ] } diff --git a/apps/vth-dashboard/config/sync/admin-role.strapi-editor.json b/apps/vth-dashboard/config/sync/admin-role.strapi-editor.json index 5a86ba8f5..e2b61ebea 100644 --- a/apps/vth-dashboard/config/sync/admin-role.strapi-editor.json +++ b/apps/vth-dashboard/config/sync/admin-role.strapi-editor.json @@ -2,6 +2,8 @@ "name": "Editor", "code": "strapi-editor", "description": "Editors can manage and publish contents including those of other users.", + "documentId": "c1qi9iypwzklcr87edgbwnkg", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.create", @@ -10,7 +12,9 @@ "fields": ["title", "body"] }, "conditions": [], - "actionParameters": null + "actionParameters": null, + "documentId": "ipcwvt6cq6cft7knt7nlibjx", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -19,7 +23,9 @@ "fields": ["title", "body"] }, "conditions": [], - "actionParameters": null + "actionParameters": null, + "documentId": "fqeh7h6ncgisp8fl9kjerm9l", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -28,49 +34,63 @@ "fields": ["title", "body"] }, "conditions": [], - "actionParameters": null + "actionParameters": null, + "documentId": "drppbkvm1ve1c0gw5uztsby5", + "locale": null }, { "action": "plugin::upload.assets.copy-link", "subject": null, "properties": {}, "conditions": [], - "actionParameters": null + "actionParameters": null, + "documentId": "chko273hpnskwb9f0x5htu1l", + "locale": null }, { "action": "plugin::upload.assets.create", "subject": null, "properties": {}, "conditions": [], - "actionParameters": null + "actionParameters": null, + "documentId": "jw6fdn055qgx4o5nlyj4rtnb", + "locale": null }, { "action": "plugin::upload.assets.download", "subject": null, "properties": {}, "conditions": [], - "actionParameters": null + "actionParameters": null, + "documentId": "qwb0eka82k24l7tp1p6stwdd", + "locale": null }, { "action": "plugin::upload.assets.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": null + "actionParameters": null, + "documentId": "npvy7pnb1adtwbeg3fu74fdk", + "locale": null }, { "action": "plugin::upload.configure-view", "subject": null, "properties": {}, "conditions": [], - "actionParameters": null + "actionParameters": null, + "documentId": "by12n6ceci3zxs3wubp6n43g", + "locale": null }, { "action": "plugin::upload.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": null + "actionParameters": null, + "documentId": "wqglodgsbv12i13ftegl515o", + "locale": null } ] } diff --git a/apps/vth-dashboard/config/sync/admin-role.strapi-super-admin.json b/apps/vth-dashboard/config/sync/admin-role.strapi-super-admin.json index 1a6b21681..624721fb5 100644 --- a/apps/vth-dashboard/config/sync/admin-role.strapi-super-admin.json +++ b/apps/vth-dashboard/config/sync/admin-role.strapi-super-admin.json @@ -2,6 +2,8 @@ "name": "Super Admin", "code": "strapi-super-admin", "description": "Super Admins can access and manage all features and settings.", + "documentId": "wdb068ep2ci9254p5yfrihwt", + "locale": null, "permissions": [ { "action": "plugin::content-manager.explorer.create", @@ -10,21 +12,27 @@ "fields": ["title", "slug", "description", "previewImage", "content", "navigation_pages", "theme_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ldi03umy4pzhpmcey2t011gg", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "api::article-page.article-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ezbmidhrqz723p4zgkm6yxh3", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "subject": "api::article-page.article-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "c7u1n89u8xr1110reemp9ujp", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -33,7 +41,9 @@ "fields": ["title", "slug", "description", "previewImage", "content", "navigation_pages", "theme_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "snenbpc0p1rzmk12marsss45", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -42,7 +52,9 @@ "fields": ["title", "slug", "description", "previewImage", "content", "navigation_pages", "theme_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ia11hgpibsar6opgxvltec31", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -51,21 +63,27 @@ "fields": ["title", "content", "description", "bannerImage"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "j2erlva6vaokahdakb3uc9er", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "api::homepage.homepage", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ox4cih2lp7hsfohcvmd01nb6", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "subject": "api::homepage.homepage", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ag2l34t7gpwk9in0ucsiuj7e", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -74,7 +92,9 @@ "fields": ["title", "content", "description", "bannerImage"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "n7k76b3mjfbnzaibnpz1axey", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -83,7 +103,9 @@ "fields": ["title", "content", "description", "bannerImage"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "q233v881g2dzrancd6v2rvr8", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -92,21 +114,27 @@ "fields": ["title", "slug", "content", "description", "previewImage", "article_pages", "theme_pages", "order"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "vm8w3ako5mc31rwvpr8tac08", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "api::navigation-page.navigation-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "fep3vvpnzfoizr2rbmzr4q0a", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "subject": "api::navigation-page.navigation-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "oumglw4w7pvremq6yl0ovx2i", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -115,7 +143,9 @@ "fields": ["title", "slug", "content", "description", "previewImage", "article_pages", "theme_pages", "order"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "vi7ri5i889jngjc6sypszznh", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -124,7 +154,9 @@ "fields": ["title", "slug", "content", "description", "previewImage", "article_pages", "theme_pages", "order"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "tbz1mcv1gt5tx3jox1ft8dpx", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -133,21 +165,27 @@ "fields": ["title", "body"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "jyrxkq8d7mgrk1dh98vccbhe", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "api::not-found-page.not-found-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "uey3003jvmr8l5tipuw1cfpe", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "subject": "api::not-found-page.not-found-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ewr6chqn0u0zxzv4s9gh6ryi", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -156,7 +194,9 @@ "fields": ["title", "body"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "yfdqeni4jff7tix3wu1a036t", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -165,7 +205,9 @@ "fields": ["title", "body"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "yv1xyh1v3gfmukmq08cu273u", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -174,21 +216,27 @@ "fields": ["versiondate", "title", "introductionBody"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "sqb3vjwsj8rhn7nowln833ei", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "api::print-page.print-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "l0x3wi2l9r5pywdjtioe2skr", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "subject": "api::print-page.print-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "x4w5r5hb7ctcbjq8bi0daa6a", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -197,7 +245,9 @@ "fields": ["versiondate", "title", "introductionBody"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "z2nt4l8eu55mp51q97zl0tet", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -206,7 +256,9 @@ "fields": ["versiondate", "title", "introductionBody"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "qpr8bulpexcb5kfcjgy20bw0", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -215,21 +267,27 @@ "fields": ["title", "slug", "navigation_pages", "description", "previewImage", "content", "article_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "wysff1fnbw79a14wf6sl4xe9", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "api::theme-page.theme-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "cure6q0m2ji3d0gz3fjqd82x", + "locale": null }, { "action": "plugin::content-manager.explorer.publish", "subject": "api::theme-page.theme-page", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "p66c60mb6zx606vlwyjtjrvb", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -238,7 +296,9 @@ "fields": ["title", "slug", "navigation_pages", "description", "previewImage", "content", "article_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "i23z1ocjl03wn5pe1xad1yyd", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -247,224 +307,288 @@ "fields": ["title", "slug", "navigation_pages", "description", "previewImage", "content", "article_pages"] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "fyvqdg77ynjx21lk0ysopfn0", + "locale": null }, { "action": "admin::api-tokens.access", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "qm6ocs6uxxgkzf6zkvy5y2fk", + "locale": null }, { "action": "admin::api-tokens.create", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "e4yaab3x4a25siwn8qww242z", + "locale": null }, { "action": "admin::api-tokens.delete", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "vn5xttgtjjcbtzx7u1dlihqd", + "locale": null }, { "action": "admin::api-tokens.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "c78cayi9kgrcadhocp109m4e", + "locale": null }, { "action": "admin::api-tokens.regenerate", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "shtsqc89iicc1w03ruq1lwkc", + "locale": null }, { "action": "admin::api-tokens.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "po8ndus0kf694181t1xqlp3p", + "locale": null }, { "action": "admin::marketplace.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ha28993nkz79sapg7x8pbu3a", + "locale": null }, { "action": "admin::project-settings.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "edkw8kvsjdr310904s6vzq0k", + "locale": null }, { "action": "admin::project-settings.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "yfyydbl4gs33ug54es29rtjl", + "locale": null }, { "action": "admin::roles.create", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ifcaivr52g98eos01yndcgvs", + "locale": null }, { "action": "admin::roles.delete", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "b8sb03crpnrr7zr64fywp5vy", + "locale": null }, { "action": "admin::roles.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ukxtuhw62uatam46r9m6k1my", + "locale": null }, { "action": "admin::roles.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "eflwp9hnlxsejbavfxvbgy48", + "locale": null }, { "action": "admin::transfer.tokens.access", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "jvcz0kdvhpnedxg26q5u7lxv", + "locale": null }, { "action": "admin::transfer.tokens.create", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "nai2afxid5qhx0gz6lmdmiy1", + "locale": null }, { "action": "admin::transfer.tokens.delete", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "v35629954duqkzgvlwjqxw4n", + "locale": null }, { "action": "admin::transfer.tokens.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "j4a1x8vkhuao2am9fn3e3n1a", + "locale": null }, { "action": "admin::transfer.tokens.regenerate", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "mlmzq1f50yasppi305su6s9h", + "locale": null }, { "action": "admin::transfer.tokens.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "gfk4k95fh5q3do771zxvi20c", + "locale": null }, { "action": "admin::users.create", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "v5tyab3f6hb8x1nh5wxytmw8", + "locale": null }, { "action": "admin::users.delete", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "acc2z1suigmjh6wbb7b0iabc", + "locale": null }, { "action": "admin::users.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "woq51yki69bx6oeh8ql6qmx3", + "locale": null }, { "action": "admin::users.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "s27zopfvxw4qbrdd8vynw1df", + "locale": null }, { "action": "admin::webhooks.create", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "olgwsykycz67klay4y09r01o", + "locale": null }, { "action": "admin::webhooks.delete", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "my2njiaxsby5wfa9gsykmf24", + "locale": null }, { "action": "admin::webhooks.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "xkb5flich1emijei6meibgtz", + "locale": null }, { "action": "admin::webhooks.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "o6y0wh7t6lds85sgbpwalofn", + "locale": null }, { "action": "plugin::config-sync.menu-link", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "d2cw8d9ghoo4tsa3rjaavc2w", + "locale": null }, { "action": "plugin::config-sync.settings.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "b4xlbr7kjlc3xx6vjvbtemfo", + "locale": null }, { "action": "plugin::content-manager.collection-types.configure-view", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "vakfnoiwt93nmxgj2y07oy7w", + "locale": null }, { "action": "plugin::content-manager.components.configure-layout", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "fjsjng3qq734ro46fsf91xof", + "locale": null }, { "action": "plugin::content-manager.explorer.create", @@ -483,14 +607,27 @@ ] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "nb8ouo9kc3t46wdirz8juq9h", + "locale": null }, { "action": "plugin::content-manager.explorer.delete", "subject": "plugin::users-permissions.user", "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "v1w01nlq19b82jtq5l9y4ik6", + "locale": null + }, + { + "action": "plugin::content-manager.explorer.publish", + "subject": "plugin::users-permissions.user", + "properties": {}, + "conditions": [], + "actionParameters": {}, + "documentId": "pr2lwv2mfeo5g4iyim0pes4n", + "locale": null }, { "action": "plugin::content-manager.explorer.read", @@ -509,7 +646,9 @@ ] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "b63i2qzj3bvwfv9gv8rpcx7g", + "locale": null }, { "action": "plugin::content-manager.explorer.update", @@ -528,189 +667,243 @@ ] }, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "yk61k2kljlc2y4prnjotzqyz", + "locale": null }, { "action": "plugin::content-manager.single-types.configure-view", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "dxjl1yos1eq6tm507bnmhbiy", + "locale": null }, { "action": "plugin::content-type-builder.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "b82wsjzv3ev30x6om415z8qv", + "locale": null }, { "action": "plugin::email.settings.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "plkrv6gj3dysynt64bv4qzkd", + "locale": null }, { "action": "plugin::i18n.locale.create", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "po78gkhe9jslvyw8i8h8f7f9", + "locale": null }, { "action": "plugin::i18n.locale.delete", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "q535vmd2oi6uv7q6d1emnn7v", + "locale": null }, { "action": "plugin::i18n.locale.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "lyp1ytgdb2greiwmlglwzcm0", + "locale": null }, { "action": "plugin::i18n.locale.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "vjcaqbulrpnopavofu6k9ydd", + "locale": null }, { - "action": "plugin::import-export-entries.export", + "action": "plugin::strapi-tiptap-editor.settings.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ri06ntmfpvn90989uduiwoll", + "locale": null }, { - "action": "plugin::import-export-entries.import", + "action": "plugin::strapi-tiptap-editor.settings.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "kgqtwyv6wbopyn76cal1z6vu", + "locale": null }, { "action": "plugin::upload.assets.copy-link", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "c949grwihnwk92prkitfjh71", + "locale": null }, { "action": "plugin::upload.assets.create", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "ofyfyvqc0hbmqryjhco4ukb8", + "locale": null }, { "action": "plugin::upload.assets.download", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "y1mk49p66qd9hfwktaii774q", + "locale": null }, { "action": "plugin::upload.assets.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "mc7419ybbbvbf8lgpblgj889", + "locale": null }, { "action": "plugin::upload.configure-view", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "nn6xf3ptttmcjj117pzcbov4", + "locale": null }, { "action": "plugin::upload.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "boh1t5tzixc8hzvofjf1lwfu", + "locale": null }, { "action": "plugin::upload.settings.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "aek2ffjubp4ewr6rjsx2g0rm", + "locale": null }, { "action": "plugin::users-permissions.advanced-settings.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "p4zfpk3pp8p0bw4ddc7idtya", + "locale": null }, { "action": "plugin::users-permissions.advanced-settings.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "yqggk7nmd0fzb5qu9sqh4axm", + "locale": null }, { "action": "plugin::users-permissions.email-templates.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "adun4y6leeeh1roued3rqr7n", + "locale": null }, { "action": "plugin::users-permissions.email-templates.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "u7qrlbxn6znp7uyfcncehl5s", + "locale": null }, { "action": "plugin::users-permissions.providers.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "c2bmbq12q26z2331t9rpp2vm", + "locale": null }, { "action": "plugin::users-permissions.providers.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "f6jp3h1c5a458491g1lhsxqb", + "locale": null }, { "action": "plugin::users-permissions.roles.create", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "g790l1cki3m0rqtibsg74ipw", + "locale": null }, { "action": "plugin::users-permissions.roles.delete", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "t0wsrrg88yb4ex2ree7wl43y", + "locale": null }, { "action": "plugin::users-permissions.roles.read", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "y5rl2nvx2ki2oisqm3kg4jgb", + "locale": null }, { "action": "plugin::users-permissions.roles.update", "subject": null, "properties": {}, "conditions": [], - "actionParameters": {} + "actionParameters": {}, + "documentId": "o7ghku9ka43ril5xi6x67b3f", + "locale": null } ] } diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.image.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.image.json index 2444f3feb..0bea9adb1 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.image.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.image.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "imageData"], + "list": ["id", "imageData", "documentId"], "edit": [ [ { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion-section.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion-section.json index d1c15f90c..c92c3c914 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion-section.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion-section.json @@ -61,10 +61,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "label", "headingLevel"], + "list": ["id", "label", "headingLevel", "documentId"], "edit": [ [ { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion.json index b7e3aa26f..6ad7889f4 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-accordion.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "item"], + "list": ["id", "item", "documentId"], "edit": [ [ { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-rich-text.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-rich-text.json index 5f2688c12..6997a1f3e 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-rich-text.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##components.utrecht-rich-text.json @@ -7,7 +7,7 @@ "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", + "mainField": "documentId", "defaultSortBy": "id", "defaultSortOrder": "ASC" }, @@ -33,10 +33,18 @@ "searchable": false, "sortable": false } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id"], + "list": ["id", "documentId"], "edit": [ [ { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##seo.meta.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##seo.meta.json index 13929fa11..fce7d1c06 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##seo.meta.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_components##seo.meta.json @@ -61,6 +61,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token-permission.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token-permission.json index 4d40209f7..9d20a90c4 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token-permission.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token-permission.json @@ -106,6 +106,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json index 1444a41ff..c074a9b1f 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##api-token.json @@ -76,6 +76,20 @@ "sortable": true } }, + "encryptedKey": { + "edit": { + "label": "encryptedKey", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "encryptedKey", + "searchable": true, + "sortable": true + } + }, "lastUsedAt": { "edit": { "label": "lastUsedAt", @@ -190,6 +204,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -234,6 +256,12 @@ "name": "lifespan", "size": 4 } + ], + [ + { + "name": "encryptedKey", + "size": 6 + } ] ] } diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json index 02c3be216..cc332ff43 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##permission.json @@ -162,6 +162,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json index 20143cfd5..5c67d7f42 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##role.json @@ -149,6 +149,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##session.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##session.json new file mode 100644 index 000000000..c920aaac4 --- /dev/null +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##session.json @@ -0,0 +1,272 @@ +{ + "key": "plugin_content_manager_configuration_content_types::admin::session", + "value": { + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "relationOpenMode": "modal", + "mainField": "userId", + "defaultSortBy": "userId", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "id", + "searchable": true, + "sortable": true + } + }, + "userId": { + "edit": { + "label": "userId", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "userId", + "searchable": true, + "sortable": true + } + }, + "sessionId": { + "edit": { + "label": "sessionId", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "sessionId", + "searchable": true, + "sortable": true + } + }, + "childId": { + "edit": { + "label": "childId", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "childId", + "searchable": true, + "sortable": true + } + }, + "deviceId": { + "edit": { + "label": "deviceId", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "deviceId", + "searchable": true, + "sortable": true + } + }, + "origin": { + "edit": { + "label": "origin", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "origin", + "searchable": true, + "sortable": true + } + }, + "expiresAt": { + "edit": { + "label": "expiresAt", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "expiresAt", + "searchable": true, + "sortable": true + } + }, + "absoluteExpiresAt": { + "edit": { + "label": "absoluteExpiresAt", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "absoluteExpiresAt", + "searchable": true, + "sortable": true + } + }, + "status": { + "edit": { + "label": "status", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "status", + "searchable": true, + "sortable": true + } + }, + "type": { + "edit": { + "label": "type", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "type", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "createdAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "createdAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "updatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "updatedAt", + "searchable": true, + "sortable": true + } + }, + "createdBy": { + "edit": { + "label": "createdBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "createdBy", + "searchable": true, + "sortable": true + } + }, + "updatedBy": { + "edit": { + "label": "updatedBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "updatedBy", + "searchable": true, + "sortable": true + } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": ["id", "userId", "sessionId", "childId"], + "edit": [ + [ + { + "name": "userId", + "size": 6 + }, + { + "name": "sessionId", + "size": 6 + } + ], + [ + { + "name": "childId", + "size": 6 + }, + { + "name": "deviceId", + "size": 6 + } + ], + [ + { + "name": "origin", + "size": 6 + }, + { + "name": "expiresAt", + "size": 6 + } + ], + [ + { + "name": "absoluteExpiresAt", + "size": 6 + }, + { + "name": "status", + "size": 6 + } + ], + [ + { + "name": "type", + "size": 6 + } + ] + ] + }, + "uid": "admin::session" + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token-permission.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token-permission.json index 56b0bbfe2..7ae8ed80d 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token-permission.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token-permission.json @@ -106,6 +106,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token.json index 6a700c881..6eb4dc5b1 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##transfer-token.json @@ -176,6 +176,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json index aaab3201e..0dd39a4b7 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##admin##user.json @@ -232,6 +232,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##article-page.article-page.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##article-page.article-page.json index 0cc57b168..4a330db5e 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##article-page.article-page.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##article-page.article-page.json @@ -9,7 +9,8 @@ "pageSize": 50, "mainField": "title", "defaultSortBy": "title", - "defaultSortOrder": "ASC" + "defaultSortOrder": "ASC", + "relationOpenMode": "modal" }, "metadatas": { "id": { @@ -37,7 +38,7 @@ "slug": { "edit": { "label": "URL segment", - "description": "Leeg laten om automatisch in te vullen.", + "description": "Slug wordt automatisch gegenereerd op basis van de titel. Bij een nieuwe of aangepaste titel klik je op het update-icoon (ronde ververs-pijl) om de slug te genereren of bij te werken.", "placeholder": "", "visible": true, "editable": true @@ -177,6 +178,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##homepage.homepage.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##homepage.homepage.json index 5aede79a7..3146b88b5 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##homepage.homepage.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##homepage.homepage.json @@ -133,9 +133,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "createdAt", "updatedAt", "title"], "edit": [ [ { @@ -159,8 +168,7 @@ "size": 6 } ] - ], - "list": ["id", "createdAt", "updatedAt", "title"] + ] } }, "type": "object", diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##navigation-page.navigation-page.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##navigation-page.navigation-page.json index cafe1134a..a8a83b4aa 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##navigation-page.navigation-page.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##navigation-page.navigation-page.json @@ -9,7 +9,8 @@ "pageSize": 50, "mainField": "title", "defaultSortBy": "title", - "defaultSortOrder": "ASC" + "defaultSortOrder": "ASC", + "relationOpenMode": "modal" }, "metadatas": { "id": { @@ -37,7 +38,7 @@ "slug": { "edit": { "label": "URL segment", - "description": "Leeg laten om automatisch in te vullen.", + "description": "Slug wordt automatisch gegenereerd op basis van de titel. Bij een nieuwe of aangepaste titel klik je op het update-icoon (ronde ververs-pijl) om de slug te genereren of bij te werken.", "placeholder": "", "visible": true, "editable": true @@ -191,6 +192,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##not-found-page.not-found-page.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##not-found-page.not-found-page.json index a63cfbef6..0b915190f 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##not-found-page.not-found-page.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##not-found-page.not-found-page.json @@ -105,9 +105,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "title", "createdAt", "updatedAt"], "edit": [ [ { @@ -121,8 +130,7 @@ "size": 12 } ] - ], - "list": ["id", "title", "createdAt", "updatedAt"] + ] } }, "type": "object", diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##print-page.print-page.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##print-page.print-page.json index 5e666655b..b6981d390 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##print-page.print-page.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##print-page.print-page.json @@ -119,9 +119,18 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { + "list": ["id", "createdAt", "versiondate", "title"], "edit": [ [ { @@ -141,8 +150,7 @@ "size": 12 } ] - ], - "list": ["id", "createdAt", "versiondate", "title"] + ] } }, "type": "object", diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##theme-page.theme-page.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##theme-page.theme-page.json index e8af9a925..468de183a 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##theme-page.theme-page.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##api##theme-page.theme-page.json @@ -9,7 +9,8 @@ "pageSize": 50, "mainField": "title", "defaultSortBy": "title", - "defaultSortOrder": "ASC" + "defaultSortOrder": "ASC", + "relationOpenMode": "modal" }, "metadatas": { "id": { @@ -37,7 +38,7 @@ "slug": { "edit": { "label": "URL segment", - "description": "Leeg laten om automatisch in te vullen.", + "description": "Slug wordt automatisch gegenereerd op basis van de titel. Bij een nieuwe of aangepaste titel klik je op het update-icoon (ronde ververs-pijl) om de slug te genereren of bij te werken.", "placeholder": "", "visible": true, "editable": true @@ -177,6 +178,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release-action.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release-action.json new file mode 100644 index 000000000..a800fb796 --- /dev/null +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release-action.json @@ -0,0 +1,196 @@ +{ + "key": "plugin_content_manager_configuration_content_types::plugin::content-releases.release-action", + "value": { + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "contentType", + "defaultSortBy": "contentType", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "id", + "searchable": true, + "sortable": true + } + }, + "type": { + "edit": { + "label": "type", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "type", + "searchable": true, + "sortable": true + } + }, + "contentType": { + "edit": { + "label": "contentType", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "contentType", + "searchable": true, + "sortable": true + } + }, + "entryDocumentId": { + "edit": { + "label": "entryDocumentId", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "entryDocumentId", + "searchable": true, + "sortable": true + } + }, + "release": { + "edit": { + "label": "release", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "release", + "searchable": true, + "sortable": true + } + }, + "isEntryValid": { + "edit": { + "label": "isEntryValid", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "isEntryValid", + "searchable": true, + "sortable": true + } + }, + "createdAt": { + "edit": { + "label": "createdAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "createdAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "updatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "updatedAt", + "searchable": true, + "sortable": true + } + }, + "createdBy": { + "edit": { + "label": "createdBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "createdBy", + "searchable": true, + "sortable": true + } + }, + "updatedBy": { + "edit": { + "label": "updatedBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "updatedBy", + "searchable": true, + "sortable": true + } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": ["id", "type", "contentType", "entryDocumentId"], + "edit": [ + [ + { + "name": "type", + "size": 6 + }, + { + "name": "contentType", + "size": 6 + } + ], + [ + { + "name": "release", + "size": 6 + } + ], + [ + { + "name": "isEntryValid", + "size": 4 + }, + { + "name": "entryDocumentId", + "size": 6 + } + ] + ] + }, + "uid": "plugin::content-releases.release-action" + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release.json new file mode 100644 index 000000000..012ae34cd --- /dev/null +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##content-releases.release.json @@ -0,0 +1,214 @@ +{ + "key": "plugin_content_manager_configuration_content_types::plugin::content-releases.release", + "value": { + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "name", + "searchable": true, + "sortable": true + } + }, + "releasedAt": { + "edit": { + "label": "releasedAt", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "releasedAt", + "searchable": true, + "sortable": true + } + }, + "scheduledAt": { + "edit": { + "label": "scheduledAt", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "scheduledAt", + "searchable": true, + "sortable": true + } + }, + "timezone": { + "edit": { + "label": "timezone", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "timezone", + "searchable": true, + "sortable": true + } + }, + "status": { + "edit": { + "label": "status", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "status", + "searchable": true, + "sortable": true + } + }, + "actions": { + "edit": { + "label": "actions", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "contentType" + }, + "list": { + "label": "actions", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "createdAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "createdAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "updatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "updatedAt", + "searchable": true, + "sortable": true + } + }, + "createdBy": { + "edit": { + "label": "createdBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "createdBy", + "searchable": true, + "sortable": true + } + }, + "updatedBy": { + "edit": { + "label": "updatedBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "updatedBy", + "searchable": true, + "sortable": true + } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": ["id", "name", "releasedAt", "scheduledAt"], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "releasedAt", + "size": 6 + } + ], + [ + { + "name": "scheduledAt", + "size": 6 + }, + { + "name": "timezone", + "size": 6 + } + ], + [ + { + "name": "status", + "size": 6 + }, + { + "name": "actions", + "size": 6 + } + ] + ] + }, + "uid": "plugin::content-releases.release" + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json index 617fa5b5b..5611113a6 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##i18n.locale.json @@ -105,6 +105,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##publisher.action.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##publisher.action.json index b3e4dfd90..940faa3a6 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##publisher.action.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##publisher.action.json @@ -133,6 +133,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##slugify.slug.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow-stage.json similarity index 61% rename from apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##slugify.slug.json rename to apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow-stage.json index 705acd962..e125a86ce 100644 --- a/apps/pdc-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##slugify.slug.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow-stage.json @@ -1,14 +1,14 @@ { - "key": "plugin_content_manager_configuration_content_types::plugin::slugify.slug", + "key": "plugin_content_manager_configuration_content_types::plugin::review-workflows.workflow-stage", "value": { - "uid": "plugin::slugify.slug", "settings": { "bulkable": true, "filterable": true, "searchable": true, "pageSize": 10, - "mainField": "id", - "defaultSortBy": "id", + "relationOpenMode": "modal", + "mainField": "name", + "defaultSortBy": "name", "defaultSortOrder": "ASC" }, "metadatas": { @@ -20,34 +20,64 @@ "sortable": true } }, - "slug": { + "name": { "edit": { - "label": "slug", + "label": "name", "description": "", "placeholder": "", "visible": true, "editable": true }, "list": { - "label": "slug", + "label": "name", "searchable": true, "sortable": true } }, - "count": { + "color": { "edit": { - "label": "count", + "label": "color", "description": "", "placeholder": "", "visible": true, "editable": true }, "list": { - "label": "count", + "label": "color", "searchable": true, "sortable": true } }, + "workflow": { + "edit": { + "label": "workflow", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "workflow", + "searchable": true, + "sortable": true + } + }, + "permissions": { + "edit": { + "label": "permissions", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "action" + }, + "list": { + "label": "permissions", + "searchable": false, + "sortable": false + } + }, "createdAt": { "edit": { "label": "createdAt", @@ -105,23 +135,42 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { - "list": ["id", "slug", "count", "createdAt"], + "list": ["id", "name", "color", "workflow"], "edit": [ [ { - "name": "slug", + "name": "name", "size": 6 }, { - "name": "count", - "size": 4 + "name": "color", + "size": 6 + } + ], + [ + { + "name": "workflow", + "size": 6 + }, + { + "name": "permissions", + "size": 6 } ] ] - } + }, + "uid": "plugin::review-workflows.workflow-stage" }, "type": "object", "environment": null, diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow.json new file mode 100644 index 000000000..8411780cc --- /dev/null +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##review-workflows.workflow.json @@ -0,0 +1,180 @@ +{ + "key": "plugin_content_manager_configuration_content_types::plugin::review-workflows.workflow", + "value": { + "settings": { + "bulkable": true, + "filterable": true, + "searchable": true, + "pageSize": 10, + "relationOpenMode": "modal", + "mainField": "name", + "defaultSortBy": "name", + "defaultSortOrder": "ASC" + }, + "metadatas": { + "id": { + "edit": {}, + "list": { + "label": "id", + "searchable": true, + "sortable": true + } + }, + "name": { + "edit": { + "label": "name", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "name", + "searchable": true, + "sortable": true + } + }, + "stages": { + "edit": { + "label": "stages", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "stages", + "searchable": false, + "sortable": false + } + }, + "stageRequiredToPublish": { + "edit": { + "label": "stageRequiredToPublish", + "description": "", + "placeholder": "", + "visible": true, + "editable": true, + "mainField": "name" + }, + "list": { + "label": "stageRequiredToPublish", + "searchable": true, + "sortable": true + } + }, + "contentTypes": { + "edit": { + "label": "contentTypes", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "contentTypes", + "searchable": false, + "sortable": false + } + }, + "createdAt": { + "edit": { + "label": "createdAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "createdAt", + "searchable": true, + "sortable": true + } + }, + "updatedAt": { + "edit": { + "label": "updatedAt", + "description": "", + "placeholder": "", + "visible": false, + "editable": true + }, + "list": { + "label": "updatedAt", + "searchable": true, + "sortable": true + } + }, + "createdBy": { + "edit": { + "label": "createdBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "createdBy", + "searchable": true, + "sortable": true + } + }, + "updatedBy": { + "edit": { + "label": "updatedBy", + "description": "", + "placeholder": "", + "visible": false, + "editable": true, + "mainField": "firstname" + }, + "list": { + "label": "updatedBy", + "searchable": true, + "sortable": true + } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } + } + }, + "layouts": { + "list": ["id", "name", "stages", "stageRequiredToPublish"], + "edit": [ + [ + { + "name": "name", + "size": 6 + }, + { + "name": "stages", + "size": 6 + } + ], + [ + { + "name": "stageRequiredToPublish", + "size": 6 + } + ], + [ + { + "name": "contentTypes", + "size": 12 + } + ] + ] + }, + "uid": "plugin::review-workflows.workflow" + }, + "type": "object", + "environment": null, + "tag": null +} diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json index 168c8f03a..622fe1668 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.file.json @@ -62,6 +62,20 @@ "sortable": true } }, + "focalPoint": { + "edit": { + "label": "focalPoint", + "description": "", + "placeholder": "", + "visible": true, + "editable": true + }, + "list": { + "label": "focalPoint", + "searchable": false, + "sortable": false + } + }, "width": { "edit": { "label": "width", @@ -302,6 +316,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { @@ -390,6 +412,12 @@ "name": "folderPath", "size": 6 } + ], + [ + { + "name": "focalPoint", + "size": 12 + } ] ] } diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.folder.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.folder.json index 7a0d1d839..9eac3f05c 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.folder.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##upload.folder.json @@ -164,6 +164,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json index abb849e94..4e63bdd72 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.permission.json @@ -106,6 +106,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json index b06d50c96..fc5025e77 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.role.json @@ -149,6 +149,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json index 45a804c0a..8cfa9977a 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_content_manager_configuration_content_types##plugin##users-permissions.user.json @@ -204,6 +204,14 @@ "searchable": true, "sortable": true } + }, + "documentId": { + "edit": {}, + "list": { + "label": "documentId", + "searchable": true, + "sortable": true + } } }, "layouts": { diff --git a/apps/vth-dashboard/config/sync/core-store.plugin_upload_settings.json b/apps/vth-dashboard/config/sync/core-store.plugin_upload_settings.json index 617c140a2..ff362f4fb 100644 --- a/apps/vth-dashboard/config/sync/core-store.plugin_upload_settings.json +++ b/apps/vth-dashboard/config/sync/core-store.plugin_upload_settings.json @@ -3,7 +3,8 @@ "value": { "sizeOptimization": true, "responsiveDimensions": true, - "autoOrientation": false + "autoOrientation": false, + "aiMetadata": false }, "type": "object", "environment": null, diff --git a/apps/vth-dashboard/config/sync/core-store.strapi_unidirectional-join-table-repair-ran.json b/apps/vth-dashboard/config/sync/core-store.strapi_unidirectional-join-table-repair-ran.json new file mode 100644 index 000000000..6daaf5206 --- /dev/null +++ b/apps/vth-dashboard/config/sync/core-store.strapi_unidirectional-join-table-repair-ran.json @@ -0,0 +1,7 @@ +{ + "key": "strapi_unidirectional-join-table-repair-ran", + "value": true, + "type": "boolean", + "environment": null, + "tag": null +} diff --git a/apps/vth-dashboard/config/sync/i18n-locale.en.json b/apps/vth-dashboard/config/sync/i18n-locale.en.json index 968687a99..348e2763a 100644 --- a/apps/vth-dashboard/config/sync/i18n-locale.en.json +++ b/apps/vth-dashboard/config/sync/i18n-locale.en.json @@ -1,4 +1,6 @@ { "name": "English (en)", - "code": "en" + "code": "en", + "documentId": "uq1x3t0z9t8dg2mniwenakpf", + "locale": null } diff --git a/apps/vth-dashboard/config/sync/i18n-locale.nl.json b/apps/vth-dashboard/config/sync/i18n-locale.nl.json index 3b81a8ea5..303dc1199 100644 --- a/apps/vth-dashboard/config/sync/i18n-locale.nl.json +++ b/apps/vth-dashboard/config/sync/i18n-locale.nl.json @@ -1,4 +1,6 @@ { "name": "Dutch (nl)", - "code": "nl" + "code": "nl", + "documentId": "v45on3gg2rd0m22tkabi74w6", + "locale": null } diff --git a/apps/vth-dashboard/config/sync/user-role.authenticated.json b/apps/vth-dashboard/config/sync/user-role.authenticated.json index 10a2eddee..c25b49786 100644 --- a/apps/vth-dashboard/config/sync/user-role.authenticated.json +++ b/apps/vth-dashboard/config/sync/user-role.authenticated.json @@ -2,12 +2,18 @@ "name": "Authenticated", "description": "Default role given to authenticated user.", "type": "authenticated", + "documentId": "d3hs2k28cnv713e50b1l8t3a", + "locale": null, "permissions": [ { - "action": "plugin::users-permissions.auth.changePassword" + "action": "plugin::users-permissions.auth.changePassword", + "documentId": "jq8ga0764gs2hmzj0u8550ik", + "locale": null }, { - "action": "plugin::users-permissions.user.me" + "action": "plugin::users-permissions.user.me", + "documentId": "y6gihr0vntnc4hye3z0c7w99", + "locale": null } ] } diff --git a/apps/vth-dashboard/config/sync/user-role.public.json b/apps/vth-dashboard/config/sync/user-role.public.json index 476f90c75..7d1953530 100644 --- a/apps/vth-dashboard/config/sync/user-role.public.json +++ b/apps/vth-dashboard/config/sync/user-role.public.json @@ -2,57 +2,88 @@ "name": "Public", "description": "Default role given to unauthenticated user.", "type": "public", + "documentId": "c060ytx8icz7b8vnyf89gxai", + "locale": null, "permissions": [ { - "action": "api::article-page.article-page.find" + "action": "api::article-page.article-page.find", + "documentId": "i23heofot51umf31r2r6dapu", + "locale": null }, { - "action": "api::article-page.article-page.findOne" + "action": "api::article-page.article-page.findOne", + "documentId": "l7pelop2pdpzlqfxp3k5d2y2", + "locale": null }, { - "action": "api::homepage.homepage.find" + "action": "api::homepage.homepage.find", + "documentId": "jfyubdvnho041vh5c275ye8m", + "locale": null }, { - "action": "api::navigation-page.navigation-page.find" + "action": "api::navigation-page.navigation-page.find", + "documentId": "vii3o063hvtk8s9c3i4rn7jp", + "locale": null }, { - "action": "api::navigation-page.navigation-page.findOne" + "action": "api::navigation-page.navigation-page.findOne", + "documentId": "xt1m3ar53l3df1wb8p2248ki", + "locale": null }, { - "action": "api::not-found-page.not-found-page.find" + "action": "api::not-found-page.not-found-page.find", + "documentId": "urw6dxblrbio5op4dic9qumv", + "locale": null }, { - "action": "api::print-page.print-page.find" + "action": "api::print-page.print-page.find", + "documentId": "od38q1i3w4exzhlexid7ee8j", + "locale": null }, { - "action": "api::theme-page.theme-page.find" + "action": "api::theme-page.theme-page.find", + "documentId": "da7c8u64fy7g73nzqm9umvdg", + "locale": null }, { - "action": "api::theme-page.theme-page.findOne" + "action": "api::theme-page.theme-page.findOne", + "documentId": "qali3tq6b0fkr2h7bs6gaty2", + "locale": null }, { - "action": "plugin::slugify.slugController.findSlug" + "action": "plugin::users-permissions.auth.callback", + "documentId": "yz47da3vkaroydf1ipvckrxj", + "locale": null }, { - "action": "plugin::users-permissions.auth.callback" + "action": "plugin::users-permissions.auth.connect", + "documentId": "v5hxlr093x19cgjea19ttkzl", + "locale": null }, { - "action": "plugin::users-permissions.auth.connect" + "action": "plugin::users-permissions.auth.emailConfirmation", + "documentId": "aqr9jwqd013r52geqwqghyuc", + "locale": null }, { - "action": "plugin::users-permissions.auth.emailConfirmation" + "action": "plugin::users-permissions.auth.forgotPassword", + "documentId": "ch3ztq843n92k5wgdo1p9g3u", + "locale": null }, { - "action": "plugin::users-permissions.auth.forgotPassword" + "action": "plugin::users-permissions.auth.register", + "documentId": "hcwambbuy2yrx6ng1ys73270", + "locale": null }, { - "action": "plugin::users-permissions.auth.register" + "action": "plugin::users-permissions.auth.resetPassword", + "documentId": "syqloqv7u0brqxfx9zxza066", + "locale": null }, { - "action": "plugin::users-permissions.auth.resetPassword" - }, - { - "action": "plugin::users-permissions.auth.sendEmailConfirmation" + "action": "plugin::users-permissions.auth.sendEmailConfirmation", + "documentId": "ob3bf9lzdcv0dpucgtbabesw", + "locale": null } ] } diff --git a/apps/vth-dashboard/eslint.config.mjs b/apps/vth-dashboard/eslint.config.mjs new file mode 100644 index 000000000..3a12f60e9 --- /dev/null +++ b/apps/vth-dashboard/eslint.config.mjs @@ -0,0 +1,4 @@ +import { reactConfig } from '@frameless/eslint-config/react-internal'; + +/** @type {import("eslint").Linter.Config} */ +export default reactConfig; diff --git a/apps/vth-dashboard/package.json b/apps/vth-dashboard/package.json index eaacf8a59..90a6c9e44 100644 --- a/apps/vth-dashboard/package.json +++ b/apps/vth-dashboard/package.json @@ -11,46 +11,47 @@ "prebuild": "npm run clean", "build": "strapi build", "strapi": "strapi", - "lint": "eslint --ext .js src", - "lint:fix": "eslint --ext .js src --fix", + "lint": "eslint --report-unused-disable-directives .", + "lint:fix": "eslint --fix .", "lint-build": "tsc --noEmit --project tsconfig.json", "clean": "rimraf build .cache dist" }, "dependencies": { - "@frameless/preview-button": "1.2.0", - "@frameless/strapi-plugin-env-label": "0.0.0", - "@frameless/strapi-tiptap-editor": "0.3.2", - "@strapi/plugin-graphql": "4.25.23", - "@strapi/plugin-i18n": "4.25.23", - "@strapi/plugin-users-permissions": "4.25.23", - "strapi-plugin-import-export-entries": "1.23.1", - "@strapi/strapi": "4.25.23", - "better-sqlite3": "12.2.0", - "pg": "8.11.3", - "slugify": "1.6.6", - "strapi-plugin-config-sync": "1.2.6", - "strapi-plugin-publisher": "1.5.7", - "strapi-plugin-slugify": "2.3.8", - "strapi-prometheus": "1.9.1", + "@frameless/strapi-plugin-env-label": "1.0.1", + "@frameless/strapi-tiptap-editor": "1.0.3", + "@strapi/admin": "5.44.0", + "@strapi/design-system": "2.2.0", + "@strapi/icons": "2.2.0", + "@strapi/plugin-graphql": "5.44.0", + "@strapi/plugin-users-permissions": "5.44.0", + "@strapi/strapi": "5.44.0", + "better-sqlite3": "12.6.2", + "pg": "8.20.0", + "prom-client": "15.1.3", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "5.3.4", - "styled-components": "5.3.11" + "react-router-dom": "6.30.3", + "strapi-plugin-config-sync": "3.2.0", + "strapi-plugin-publisher": "2.0.9", + "strapi-prometheus": "2.6.0", + "styled-components": "6.3.11" }, "author": { - "name": "" + "name": "Frameless" }, "strapi": { "uuid": "3d9f46d7-679c-4633-8821-761d8bbb5bea" }, "engines": { - "node": "20.x.x" + "node": "24.x.x", + "pnpm": "10.23.0" }, "license": "EUPL-1.2", "devDependencies": { - "node-sass": "8.0.0", - "sass-loader": "13.2.2", - "scss": "0.2.4" + "@frameless/eslint-config": "1.2.0", + "@strapi/typescript-utils": "5.44.0", + "node-gyp": "12.2.0", + "sass": "1.98.0" }, "repository": { "type": "git+ssh", diff --git a/apps/vth-dashboard/src/admin/vite.config.ts b/apps/vth-dashboard/src/admin/vite.config.ts new file mode 100644 index 000000000..94cf30fcb --- /dev/null +++ b/apps/vth-dashboard/src/admin/vite.config.ts @@ -0,0 +1,15 @@ +import { mergeConfig, type UserConfig } from 'vite'; + +export default (config: UserConfig) => { + return mergeConfig(config, { + resolve: { + alias: { + 'tippy.js': 'tippy.js/dist/tippy-bundle.umd.min.js', + }, + }, + + server: { + port: process.env.WATCH_PORT ? parseInt(process.env.WATCH_PORT, 10) : 4001, + }, + }); +}; diff --git a/apps/vth-dashboard/src/admin/webpack.config.js b/apps/vth-dashboard/src/admin/webpack.config.js deleted file mode 100644 index 5a5b486f1..000000000 --- a/apps/vth-dashboard/src/admin/webpack.config.js +++ /dev/null @@ -1,25 +0,0 @@ -const { NormalModuleReplacementPlugin } = require('webpack'); - -// eslint-disable-next-line no-undef -module.exports = (config) => { - config.plugins.push(new NormalModuleReplacementPlugin(/^tippy\.js$/, 'tippy.js/dist/tippy-bundle.umd.min.js')); - // Allow scss modules - config.resolve = { - ...config.resolve, - extensions: [...config.resolve.extensions, '.scss'], - }; - - // Configure a SASS loader - config.module.rules.push({ - test: /\.s[ac]ss$/i, - use: [ - 'style-loader', - 'css-loader', - 'sass-loader', - { - loader: 'sass-loader', - }, - ], - }); - return config; -}; diff --git a/apps/vth-dashboard/src/api/article-page/content-types/article-page/schema.json b/apps/vth-dashboard/src/api/article-page/content-types/article-page/schema.json index f2ffbc319..838a990a3 100644 --- a/apps/vth-dashboard/src/api/article-page/content-types/article-page/schema.json +++ b/apps/vth-dashboard/src/api/article-page/content-types/article-page/schema.json @@ -16,7 +16,8 @@ "type": "string" }, "slug": { - "type": "string", + "type": "uid", + "targetField": "title", "minLength": 2 }, "description": { diff --git a/apps/vth-dashboard/src/api/homepage/content-types/homepage/schema.json b/apps/vth-dashboard/src/api/homepage/content-types/homepage/schema.json index 689f33828..58f92ee3b 100644 --- a/apps/vth-dashboard/src/api/homepage/content-types/homepage/schema.json +++ b/apps/vth-dashboard/src/api/homepage/content-types/homepage/schema.json @@ -14,19 +14,20 @@ "attributes": { "title": { "type": "string", - "required": true, - "default": "Toezicht en Handhaving" + "default": "Toezicht en Handhaving", + "required": true }, "content": { - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" }, "description": { "type": "text" }, "bannerImage": { - "allowedTypes": ["images"], "type": "media", - "multiple": false + "multiple": false, + "allowedTypes": ["images"] } } } diff --git a/apps/vth-dashboard/src/api/navigation-page/content-types/navigation-page/schema.json b/apps/vth-dashboard/src/api/navigation-page/content-types/navigation-page/schema.json index f32abc74a..bebd36fd5 100644 --- a/apps/vth-dashboard/src/api/navigation-page/content-types/navigation-page/schema.json +++ b/apps/vth-dashboard/src/api/navigation-page/content-types/navigation-page/schema.json @@ -16,7 +16,8 @@ "type": "string" }, "slug": { - "type": "string" + "type": "uid", + "targetField": "title" }, "content": { "type": "dynamiczone", diff --git a/apps/vth-dashboard/src/api/not-found-page/content-types/not-found-page/schema.json b/apps/vth-dashboard/src/api/not-found-page/content-types/not-found-page/schema.json index 201638f67..1f7dba2fc 100644 --- a/apps/vth-dashboard/src/api/not-found-page/content-types/not-found-page/schema.json +++ b/apps/vth-dashboard/src/api/not-found-page/content-types/not-found-page/schema.json @@ -18,7 +18,8 @@ }, "body": { "pluginOptions": {}, - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" } } } diff --git a/apps/vth-dashboard/src/api/theme-page/content-types/theme-page/schema.json b/apps/vth-dashboard/src/api/theme-page/content-types/theme-page/schema.json index aaa997419..1af2cb79e 100644 --- a/apps/vth-dashboard/src/api/theme-page/content-types/theme-page/schema.json +++ b/apps/vth-dashboard/src/api/theme-page/content-types/theme-page/schema.json @@ -17,7 +17,8 @@ "required": true }, "slug": { - "type": "string", + "type": "uid", + "targetField": "title", "unique": true, "required": true }, diff --git a/apps/vth-dashboard/src/components/components/utrecht-accordion-section.json b/apps/vth-dashboard/src/components/components/utrecht-accordion-section.json index 65eaa5a63..44ab6211a 100644 --- a/apps/vth-dashboard/src/components/components/utrecht-accordion-section.json +++ b/apps/vth-dashboard/src/components/components/utrecht-accordion-section.json @@ -11,7 +11,8 @@ "type": "string" }, "body": { - "type": "richtext" + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor" }, "headingLevel": { "type": "integer", diff --git a/apps/vth-dashboard/src/components/components/utrecht-rich-text.json b/apps/vth-dashboard/src/components/components/utrecht-rich-text.json index 1d35ec8f4..100f48415 100644 --- a/apps/vth-dashboard/src/components/components/utrecht-rich-text.json +++ b/apps/vth-dashboard/src/components/components/utrecht-rich-text.json @@ -7,7 +7,8 @@ "options": {}, "attributes": { "content": { - "type": "richtext", + "type": "customField", + "customField": "plugin::strapi-tiptap-editor.strapi-tiptap-editor", "required": true } } diff --git a/apps/vth-frontend/.eslintrc.json b/apps/vth-frontend/.eslintrc.json deleted file mode 100644 index 78b6ae52e..000000000 --- a/apps/vth-frontend/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "next/core-web-vitals", - "settings": { - "next": { - "rootDir": "../vth-frontend" - } - }, - "rules": { - "@next/next/no-html-link-for-pages": "off" - } -} diff --git a/apps/vth-frontend/codegen.ts b/apps/vth-frontend/codegen.ts new file mode 100644 index 000000000..2305c503b --- /dev/null +++ b/apps/vth-frontend/codegen.ts @@ -0,0 +1,23 @@ +import { CodegenConfig } from '@graphql-codegen/cli'; +import { config } from 'dotenv'; + +config(); + +if (!process.env.STRAPI_PUBLIC_URL) { + throw new Error('`STRAPI_PUBLIC_URL` is required to start codegen'); +} + +const { origin } = new URL(process.env.STRAPI_PUBLIC_URL); + +const codegenConfig: CodegenConfig = { + schema: `${origin}/graphql`, + documents: ['src/query/index.ts'], + ignoreNoDocuments: true, // for better experience with the watcher + generates: { + './gql/': { + preset: 'client', + }, + }, +}; + +export default codegenConfig; diff --git a/apps/vth-frontend/eslint.config.mjs b/apps/vth-frontend/eslint.config.mjs new file mode 100644 index 000000000..3cf16a81b --- /dev/null +++ b/apps/vth-frontend/eslint.config.mjs @@ -0,0 +1,26 @@ +import next from 'eslint-config-next'; +import nextCoreWebVitals from 'eslint-config-next/core-web-vitals'; +import nextTypescript from 'eslint-config-next/typescript'; +/* eslint-disable import/no-unresolved */ +import { nextJsConfig } from '@frameless/eslint-config/next-js'; + +const customConfig = { + languageOptions: { + globals: { + URL: 'readonly', + process: 'readonly', + __dirname: 'readonly', + }, + }, +}; + +export default [ + ...next, + ...nextCoreWebVitals, + ...nextTypescript, + ...nextJsConfig, + customConfig, + { + ignores: ['node_modules/**', '.next/**', 'out/**', 'build/**', 'next-env.d.ts'], + }, +]; diff --git a/apps/vth-frontend/gql/fragment-masking.ts b/apps/vth-frontend/gql/fragment-masking.ts new file mode 100644 index 000000000..2ba06f10b --- /dev/null +++ b/apps/vth-frontend/gql/fragment-masking.ts @@ -0,0 +1,66 @@ +import { ResultOf, DocumentTypeDecoration, TypedDocumentNode } from '@graphql-typed-document-node/core'; +import { FragmentDefinitionNode } from 'graphql'; +import { Incremental } from './graphql'; + + +export type FragmentType> = TDocumentType extends DocumentTypeDecoration< + infer TType, + any +> + ? [TType] extends [{ ' $fragmentName'?: infer TKey }] + ? TKey extends string + ? { ' $fragmentRefs'?: { [key in TKey]: TType } } + : never + : never + : never; + +// return non-nullable if `fragmentType` is non-nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> +): TType; +// return nullable if `fragmentType` is nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> | null | undefined +): TType | null | undefined; +// return array of non-nullable if `fragmentType` is array of non-nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: ReadonlyArray>> +): ReadonlyArray; +// return array of nullable if `fragmentType` is array of nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: ReadonlyArray>> | null | undefined +): ReadonlyArray | null | undefined; +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> | ReadonlyArray>> | null | undefined +): TType | ReadonlyArray | null | undefined { + return fragmentType as any; +} + + +export function makeFragmentData< + F extends DocumentTypeDecoration, + FT extends ResultOf +>(data: FT, _fragment: F): FragmentType { + return data as FragmentType; +} +export function isFragmentReady( + queryNode: DocumentTypeDecoration, + fragmentNode: TypedDocumentNode, + data: FragmentType, any>> | null | undefined +): data is FragmentType { + const deferredFields = (queryNode as { __meta__?: { deferredFields: Record } }).__meta__ + ?.deferredFields; + + if (!deferredFields) return true; + + const fragDef = fragmentNode.definitions[0] as FragmentDefinitionNode | undefined; + const fragName = fragDef?.name?.value; + + const fields = (fragName && deferredFields[fragName]) || []; + return fields.length > 0 && fields.every(field => data && field in data); +} diff --git a/apps/vth-frontend/gql/gql.ts b/apps/vth-frontend/gql/gql.ts new file mode 100644 index 000000000..e8b16e853 --- /dev/null +++ b/apps/vth-frontend/gql/gql.ts @@ -0,0 +1,87 @@ +/* eslint-disable */ +import * as types from './graphql'; +import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; + +/** + * Map of all GraphQL operations in the project. + * + * This map has several performance disadvantages: + * 1. It is not tree-shakeable, so it will include all operations in the project. + * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle. + * 3. It does not support dead code elimination, so it will add unused operations. + * + * Therefore it is highly recommended to use the babel or swc plugin for production. + */ +const documents = { + "\nquery getNotFoundPage {\n notFoundPage {\n title\n body\n }\n}\n": types.GetNotFoundPageDocument, + "\nquery getHomepage($pageMode: PublicationStatus) {\n homepage(status: $pageMode) {\n title\n content\n bannerImage {\n url\n alternativeText\n }\n }\n\n navigationPages(\n status: $pageMode\n sort: [\"order:asc\", \"title:asc\"]\n ) {\n documentId\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n}\n": types.GetHomepageDocument, + "\nquery getNavigationPages($pageMode: PublicationStatus) {\n navigationPages(\n status: $pageMode\n sort: [\"order:asc\", \"title:asc\"]\n pagination: { start: 0, limit: -1 }\n ) {\n documentId\n title\n slug\n updatedAt\n }\n}\n": types.GetNavigationPagesDocument, + "\nquery GET_NAVIGATION_PAGE_BY_SLUG($slug: String, $pageMode: PublicationStatus) {\n navigationPages(\n filters: { slug: { eq: $slug } }\n status: $pageMode\n ) {\n documentId\n title\n description\n slug\n\n content {\n __typename\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n theme_pages {\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n\n article_pages {\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n }\n}\n": types.Get_Navigation_Page_By_SlugDocument, + "\nquery GET_THEME_BY_SLUG($slug: String, $pageMode: PublicationStatus) {\n themePages(\n filters: { slug: { eq: $slug } }\n status: $pageMode\n ) {\n documentId\n title\n description\n slug\n\n content {\n __typename\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n navigation_pages {\n title\n slug\n\n theme_pages {\n title\n slug\n }\n\n article_pages {\n title\n slug\n }\n }\n\n article_pages {\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n }\n}\n": types.Get_Theme_By_SlugDocument, + "\nquery getAllThemeSlugs {\n themePages(\n sort: [\"title:asc\"]\n pagination: { start: 0, limit: -1 }\n ) {\n documentId\n title\n slug\n updatedAt\n }\n}\n": types.GetAllThemeSlugsDocument, + "\nquery getAllAriclesSlugs {\n articlePages(\n pagination: { start: 0, limit: -1 }\n sort: [\"title:asc\"]\n ) {\n title\n slug\n updatedAt\n }\n}\n": types.GetAllAriclesSlugsDocument, + "\nquery GET_ARTICLE_BY_SLUG($slug: String, $pageMode: PublicationStatus) {\n articlePages(\n filters: { slug: { eq: $slug } }\n status: $pageMode\n ) {\n documentId\n title\n description\n slug\n\n content {\n __typename\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n theme_pages {\n title\n slug\n\n navigation_pages {\n title\n slug\n }\n\n article_pages {\n title\n slug\n }\n }\n\n navigation_pages {\n title\n slug\n\n article_pages {\n title\n slug\n }\n\n theme_pages {\n title\n slug\n }\n }\n }\n}\n": types.Get_Article_By_SlugDocument, + "\nquery GET_PRINT_PAGE {\n printPage {\n title\n versiondate\n introductionBody\n }\n\n navigationPages(sort: [\"order:asc\", \"title:asc\"]) {\n documentId\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n theme_pages {\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n }\n }\n }\n\n article_pages {\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n }\n }\n\n article_pages {\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n }\n }\n}\n": types.Get_Print_PageDocument, + "\nquery getNavigationData(\n $pageMode: PublicationStatus\n $themeSlug: String\n $articleSlug: String\n) {\n navigationPages(\n status: $pageMode\n sort: [\"order:asc\", \"title:asc\"]\n pagination: { start: 0, limit: -1 }\n ) {\n title\n slug\n\n theme_pages(\n filters: {\n slug: { eq: $themeSlug }\n article_pages: { slug: { eq: $articleSlug } }\n }\n ) {\n title\n slug\n\n article_pages {\n title\n slug\n }\n }\n\n article_pages(\n filters: {\n theme_pages: { slug: { eq: $themeSlug } }\n slug: { eq: $articleSlug }\n }\n ) {\n title\n slug\n\n theme_pages {\n title\n slug\n }\n }\n }\n\n currentLink: navigationPages(\n status: $pageMode\n filters: {\n theme_pages: { slug: { eq: $themeSlug } }\n article_pages: { slug: { eq: $articleSlug } }\n }\n ) {\n title\n slug\n order\n\n theme_pages {\n slug\n title\n\n article_pages {\n title\n slug\n }\n }\n\n article_pages {\n title\n slug\n\n theme_pages {\n title\n slug\n }\n }\n }\n}\n": types.GetNavigationDataDocument, +}; + +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + * + * + * @example + * ```ts + * const query = graphql(`query GetUser($id: ID!) { user(id: $id) { name } }`); + * ``` + * + * The query argument is unknown! + * Please regenerate the types. + */ +export function graphql(source: string): unknown; + +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getNotFoundPage {\n notFoundPage {\n title\n body\n }\n}\n"): (typeof documents)["\nquery getNotFoundPage {\n notFoundPage {\n title\n body\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getHomepage($pageMode: PublicationStatus) {\n homepage(status: $pageMode) {\n title\n content\n bannerImage {\n url\n alternativeText\n }\n }\n\n navigationPages(\n status: $pageMode\n sort: [\"order:asc\", \"title:asc\"]\n ) {\n documentId\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n}\n"): (typeof documents)["\nquery getHomepage($pageMode: PublicationStatus) {\n homepage(status: $pageMode) {\n title\n content\n bannerImage {\n url\n alternativeText\n }\n }\n\n navigationPages(\n status: $pageMode\n sort: [\"order:asc\", \"title:asc\"]\n ) {\n documentId\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getNavigationPages($pageMode: PublicationStatus) {\n navigationPages(\n status: $pageMode\n sort: [\"order:asc\", \"title:asc\"]\n pagination: { start: 0, limit: -1 }\n ) {\n documentId\n title\n slug\n updatedAt\n }\n}\n"): (typeof documents)["\nquery getNavigationPages($pageMode: PublicationStatus) {\n navigationPages(\n status: $pageMode\n sort: [\"order:asc\", \"title:asc\"]\n pagination: { start: 0, limit: -1 }\n ) {\n documentId\n title\n slug\n updatedAt\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery GET_NAVIGATION_PAGE_BY_SLUG($slug: String, $pageMode: PublicationStatus) {\n navigationPages(\n filters: { slug: { eq: $slug } }\n status: $pageMode\n ) {\n documentId\n title\n description\n slug\n\n content {\n __typename\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n theme_pages {\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n\n article_pages {\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n }\n}\n"): (typeof documents)["\nquery GET_NAVIGATION_PAGE_BY_SLUG($slug: String, $pageMode: PublicationStatus) {\n navigationPages(\n filters: { slug: { eq: $slug } }\n status: $pageMode\n ) {\n documentId\n title\n description\n slug\n\n content {\n __typename\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n theme_pages {\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n\n article_pages {\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery GET_THEME_BY_SLUG($slug: String, $pageMode: PublicationStatus) {\n themePages(\n filters: { slug: { eq: $slug } }\n status: $pageMode\n ) {\n documentId\n title\n description\n slug\n\n content {\n __typename\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n navigation_pages {\n title\n slug\n\n theme_pages {\n title\n slug\n }\n\n article_pages {\n title\n slug\n }\n }\n\n article_pages {\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n }\n}\n"): (typeof documents)["\nquery GET_THEME_BY_SLUG($slug: String, $pageMode: PublicationStatus) {\n themePages(\n filters: { slug: { eq: $slug } }\n status: $pageMode\n ) {\n documentId\n title\n description\n slug\n\n content {\n __typename\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n navigation_pages {\n title\n slug\n\n theme_pages {\n title\n slug\n }\n\n article_pages {\n title\n slug\n }\n }\n\n article_pages {\n title\n slug\n description\n previewImage {\n url\n alternativeText\n }\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getAllThemeSlugs {\n themePages(\n sort: [\"title:asc\"]\n pagination: { start: 0, limit: -1 }\n ) {\n documentId\n title\n slug\n updatedAt\n }\n}\n"): (typeof documents)["\nquery getAllThemeSlugs {\n themePages(\n sort: [\"title:asc\"]\n pagination: { start: 0, limit: -1 }\n ) {\n documentId\n title\n slug\n updatedAt\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getAllAriclesSlugs {\n articlePages(\n pagination: { start: 0, limit: -1 }\n sort: [\"title:asc\"]\n ) {\n title\n slug\n updatedAt\n }\n}\n"): (typeof documents)["\nquery getAllAriclesSlugs {\n articlePages(\n pagination: { start: 0, limit: -1 }\n sort: [\"title:asc\"]\n ) {\n title\n slug\n updatedAt\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery GET_ARTICLE_BY_SLUG($slug: String, $pageMode: PublicationStatus) {\n articlePages(\n filters: { slug: { eq: $slug } }\n status: $pageMode\n ) {\n documentId\n title\n description\n slug\n\n content {\n __typename\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n theme_pages {\n title\n slug\n\n navigation_pages {\n title\n slug\n }\n\n article_pages {\n title\n slug\n }\n }\n\n navigation_pages {\n title\n slug\n\n article_pages {\n title\n slug\n }\n\n theme_pages {\n title\n slug\n }\n }\n }\n}\n"): (typeof documents)["\nquery GET_ARTICLE_BY_SLUG($slug: String, $pageMode: PublicationStatus) {\n articlePages(\n filters: { slug: { eq: $slug } }\n status: $pageMode\n ) {\n documentId\n title\n description\n slug\n\n content {\n __typename\n ... on ComponentComponentsUtrechtRichText {\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n theme_pages {\n title\n slug\n\n navigation_pages {\n title\n slug\n }\n\n article_pages {\n title\n slug\n }\n }\n\n navigation_pages {\n title\n slug\n\n article_pages {\n title\n slug\n }\n\n theme_pages {\n title\n slug\n }\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery GET_PRINT_PAGE {\n printPage {\n title\n versiondate\n introductionBody\n }\n\n navigationPages(sort: [\"order:asc\", \"title:asc\"]) {\n documentId\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n theme_pages {\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n }\n }\n }\n\n article_pages {\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n }\n }\n\n article_pages {\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n }\n }\n}\n"): (typeof documents)["\nquery GET_PRINT_PAGE {\n printPage {\n title\n versiondate\n introductionBody\n }\n\n navigationPages(sort: [\"order:asc\", \"title:asc\"]) {\n documentId\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n\n theme_pages {\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n }\n }\n }\n\n article_pages {\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n }\n }\n\n article_pages {\n title\n\n content {\n ... on ComponentComponentsUtrechtRichText {\n __typename\n content\n }\n ... on ComponentComponentsUtrechtAccordion {\n __typename\n item {\n id\n label\n body\n headingLevel\n }\n }\n }\n }\n }\n}\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\nquery getNavigationData(\n $pageMode: PublicationStatus\n $themeSlug: String\n $articleSlug: String\n) {\n navigationPages(\n status: $pageMode\n sort: [\"order:asc\", \"title:asc\"]\n pagination: { start: 0, limit: -1 }\n ) {\n title\n slug\n\n theme_pages(\n filters: {\n slug: { eq: $themeSlug }\n article_pages: { slug: { eq: $articleSlug } }\n }\n ) {\n title\n slug\n\n article_pages {\n title\n slug\n }\n }\n\n article_pages(\n filters: {\n theme_pages: { slug: { eq: $themeSlug } }\n slug: { eq: $articleSlug }\n }\n ) {\n title\n slug\n\n theme_pages {\n title\n slug\n }\n }\n }\n\n currentLink: navigationPages(\n status: $pageMode\n filters: {\n theme_pages: { slug: { eq: $themeSlug } }\n article_pages: { slug: { eq: $articleSlug } }\n }\n ) {\n title\n slug\n order\n\n theme_pages {\n slug\n title\n\n article_pages {\n title\n slug\n }\n }\n\n article_pages {\n title\n slug\n\n theme_pages {\n title\n slug\n }\n }\n }\n}\n"): (typeof documents)["\nquery getNavigationData(\n $pageMode: PublicationStatus\n $themeSlug: String\n $articleSlug: String\n) {\n navigationPages(\n status: $pageMode\n sort: [\"order:asc\", \"title:asc\"]\n pagination: { start: 0, limit: -1 }\n ) {\n title\n slug\n\n theme_pages(\n filters: {\n slug: { eq: $themeSlug }\n article_pages: { slug: { eq: $articleSlug } }\n }\n ) {\n title\n slug\n\n article_pages {\n title\n slug\n }\n }\n\n article_pages(\n filters: {\n theme_pages: { slug: { eq: $themeSlug } }\n slug: { eq: $articleSlug }\n }\n ) {\n title\n slug\n\n theme_pages {\n title\n slug\n }\n }\n }\n\n currentLink: navigationPages(\n status: $pageMode\n filters: {\n theme_pages: { slug: { eq: $themeSlug } }\n article_pages: { slug: { eq: $articleSlug } }\n }\n ) {\n title\n slug\n order\n\n theme_pages {\n slug\n title\n\n article_pages {\n title\n slug\n }\n }\n\n article_pages {\n title\n slug\n\n theme_pages {\n title\n slug\n }\n }\n }\n}\n"]; + +export function graphql(source: string) { + return (documents as any)[source] ?? {}; +} + +export type DocumentType> = TDocumentNode extends DocumentNode< infer TType, any> ? TType : never; \ No newline at end of file diff --git a/apps/vth-frontend/gql/graphql.ts b/apps/vth-frontend/gql/graphql.ts new file mode 100644 index 000000000..e0ee50ecd --- /dev/null +++ b/apps/vth-frontend/gql/graphql.ts @@ -0,0 +1,1632 @@ +/* eslint-disable */ +import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type MakeEmpty = { [_ in K]?: never }; +export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string; } + String: { input: string; output: string; } + Boolean: { input: boolean; output: boolean; } + Int: { input: number; output: number; } + Float: { input: number; output: number; } + ArticlePageContentDynamicZoneInput: { input: any; output: any; } + /** A date string, such as 2007-12-03, compliant with the `full-date` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ + Date: { input: any; output: any; } + /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ + DateTime: { input: any; output: any; } + /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */ + JSON: { input: any; output: any; } + NavigationPageContentDynamicZoneInput: { input: any; output: any; } + ThemePageContentDynamicZoneInput: { input: any; output: any; } +}; + +export type ArticlePage = { + __typename?: 'ArticlePage'; + content?: Maybe>>; + createdAt?: Maybe; + description?: Maybe; + documentId: Scalars['ID']['output']; + navigation_pages: Array>; + navigation_pages_connection?: Maybe; + previewImage?: Maybe; + publishedAt?: Maybe; + slug?: Maybe; + theme_pages: Array>; + theme_pages_connection?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + + +export type ArticlePageNavigation_PagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ArticlePageNavigation_Pages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ArticlePageTheme_PagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ArticlePageTheme_Pages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ArticlePageContentDynamicZone = ComponentComponentsUtrechtAccordion | ComponentComponentsUtrechtRichText | Error; + +export type ArticlePageEntityResponseCollection = { + __typename?: 'ArticlePageEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type ArticlePageFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + description?: InputMaybe; + documentId?: InputMaybe; + navigation_pages?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + slug?: InputMaybe; + theme_pages?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type ArticlePageInput = { + content?: InputMaybe>; + description?: InputMaybe; + navigation_pages?: InputMaybe>>; + previewImage?: InputMaybe; + publishedAt?: InputMaybe; + slug?: InputMaybe; + theme_pages?: InputMaybe>>; + title?: InputMaybe; +}; + +export type ArticlePageRelationResponseCollection = { + __typename?: 'ArticlePageRelationResponseCollection'; + nodes: Array; +}; + +export type BooleanFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type ComponentComponentsImage = { + __typename?: 'ComponentComponentsImage'; + id: Scalars['ID']['output']; + imageData?: Maybe; +}; + +export type ComponentComponentsUtrechtAccordion = { + __typename?: 'ComponentComponentsUtrechtAccordion'; + id: Scalars['ID']['output']; + item?: Maybe>>; +}; + + +export type ComponentComponentsUtrechtAccordionItemArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtAccordionSection = { + __typename?: 'ComponentComponentsUtrechtAccordionSection'; + body?: Maybe; + headingLevel?: Maybe; + id: Scalars['ID']['output']; + label?: Maybe; +}; + +export type ComponentComponentsUtrechtAccordionSectionFiltersInput = { + and?: InputMaybe>>; + body?: InputMaybe; + headingLevel?: InputMaybe; + label?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ComponentComponentsUtrechtRichText = { + __typename?: 'ComponentComponentsUtrechtRichText'; + content: Scalars['String']['output']; + id: Scalars['ID']['output']; +}; + +export type ComponentSeoMeta = { + __typename?: 'ComponentSeoMeta'; + description: Scalars['String']['output']; + id: Scalars['ID']['output']; + keymatch: Scalars['String']['output']; + title: Scalars['String']['output']; +}; + +export type DateTimeFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type DeleteMutationResponse = { + __typename?: 'DeleteMutationResponse'; + documentId: Scalars['ID']['output']; +}; + +export type Error = { + __typename?: 'Error'; + code: Scalars['String']['output']; + message?: Maybe; +}; + +export type FileInfoInput = { + alternativeText?: InputMaybe; + caption?: InputMaybe; + name?: InputMaybe; +}; + +export type FloatFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type GenericMorph = ArticlePage | ComponentComponentsImage | ComponentComponentsUtrechtAccordion | ComponentComponentsUtrechtAccordionSection | ComponentComponentsUtrechtRichText | ComponentSeoMeta | Homepage | I18NLocale | NavigationPage | NotFoundPage | PrintPage | PublisherAction | ReviewWorkflowsWorkflow | ReviewWorkflowsWorkflowStage | ThemePage | UploadFile | UsersPermissionsPermission | UsersPermissionsRole | UsersPermissionsUser; + +export type Homepage = { + __typename?: 'Homepage'; + bannerImage?: Maybe; + content?: Maybe; + createdAt?: Maybe; + description?: Maybe; + documentId: Scalars['ID']['output']; + publishedAt?: Maybe; + title: Scalars['String']['output']; + updatedAt?: Maybe; +}; + +export type HomepageInput = { + bannerImage?: InputMaybe; + content?: InputMaybe; + description?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; +}; + +export type I18NLocale = { + __typename?: 'I18NLocale'; + code?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + name?: Maybe; + publishedAt?: Maybe; + updatedAt?: Maybe; +}; + +export type I18NLocaleEntityResponseCollection = { + __typename?: 'I18NLocaleEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type I18NLocaleFiltersInput = { + and?: InputMaybe>>; + code?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type IdFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type IntFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type JsonFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type Mutation = { + __typename?: 'Mutation'; + /** Change user password. Confirm with the current password. */ + changePassword?: Maybe; + createArticlePage?: Maybe; + createNavigationPage?: Maybe; + createPublisherAction?: Maybe; + createReviewWorkflowsWorkflow?: Maybe; + createReviewWorkflowsWorkflowStage?: Maybe; + createThemePage?: Maybe; + /** Create a new role */ + createUsersPermissionsRole?: Maybe; + /** Create a new user */ + createUsersPermissionsUser: UsersPermissionsUserEntityResponse; + deleteArticlePage?: Maybe; + deleteHomepage?: Maybe; + deleteNavigationPage?: Maybe; + deleteNotFoundPage?: Maybe; + deletePrintPage?: Maybe; + deletePublisherAction?: Maybe; + deleteReviewWorkflowsWorkflow?: Maybe; + deleteReviewWorkflowsWorkflowStage?: Maybe; + deleteThemePage?: Maybe; + deleteUploadFile?: Maybe; + /** Delete an existing role */ + deleteUsersPermissionsRole?: Maybe; + /** Delete an existing user */ + deleteUsersPermissionsUser: UsersPermissionsUserEntityResponse; + /** Confirm an email users email address */ + emailConfirmation?: Maybe; + /** Request a reset password token */ + forgotPassword?: Maybe; + login: UsersPermissionsLoginPayload; + /** Register a user */ + register: UsersPermissionsLoginPayload; + /** Reset user password. Confirm with a code (resetToken from forgotPassword) */ + resetPassword?: Maybe; + updateArticlePage?: Maybe; + updateHomepage?: Maybe; + updateNavigationPage?: Maybe; + updateNotFoundPage?: Maybe; + updatePrintPage?: Maybe; + updatePublisherAction?: Maybe; + updateReviewWorkflowsWorkflow?: Maybe; + updateReviewWorkflowsWorkflowStage?: Maybe; + updateThemePage?: Maybe; + updateUploadFile: UploadFile; + /** Update an existing role */ + updateUsersPermissionsRole?: Maybe; + /** Update an existing user */ + updateUsersPermissionsUser: UsersPermissionsUserEntityResponse; +}; + + +export type MutationChangePasswordArgs = { + currentPassword: Scalars['String']['input']; + password: Scalars['String']['input']; + passwordConfirmation: Scalars['String']['input']; +}; + + +export type MutationCreateArticlePageArgs = { + data: ArticlePageInput; + status?: InputMaybe; +}; + + +export type MutationCreateNavigationPageArgs = { + data: NavigationPageInput; + status?: InputMaybe; +}; + + +export type MutationCreatePublisherActionArgs = { + data: PublisherActionInput; + status?: InputMaybe; +}; + + +export type MutationCreateReviewWorkflowsWorkflowArgs = { + data: ReviewWorkflowsWorkflowInput; + status?: InputMaybe; +}; + + +export type MutationCreateReviewWorkflowsWorkflowStageArgs = { + data: ReviewWorkflowsWorkflowStageInput; + status?: InputMaybe; +}; + + +export type MutationCreateThemePageArgs = { + data: ThemePageInput; + status?: InputMaybe; +}; + + +export type MutationCreateUsersPermissionsRoleArgs = { + data: UsersPermissionsRoleInput; +}; + + +export type MutationCreateUsersPermissionsUserArgs = { + data: UsersPermissionsUserInput; +}; + + +export type MutationDeleteArticlePageArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteNavigationPageArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeletePublisherActionArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteReviewWorkflowsWorkflowArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteReviewWorkflowsWorkflowStageArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteThemePageArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type MutationDeleteUploadFileArgs = { + id: Scalars['ID']['input']; +}; + + +export type MutationDeleteUsersPermissionsRoleArgs = { + id: Scalars['ID']['input']; +}; + + +export type MutationDeleteUsersPermissionsUserArgs = { + id: Scalars['ID']['input']; +}; + + +export type MutationEmailConfirmationArgs = { + confirmation: Scalars['String']['input']; +}; + + +export type MutationForgotPasswordArgs = { + email: Scalars['String']['input']; +}; + + +export type MutationLoginArgs = { + input: UsersPermissionsLoginInput; +}; + + +export type MutationRegisterArgs = { + input: UsersPermissionsRegisterInput; +}; + + +export type MutationResetPasswordArgs = { + code: Scalars['String']['input']; + password: Scalars['String']['input']; + passwordConfirmation: Scalars['String']['input']; +}; + + +export type MutationUpdateArticlePageArgs = { + data: ArticlePageInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateHomepageArgs = { + data: HomepageInput; + status?: InputMaybe; +}; + + +export type MutationUpdateNavigationPageArgs = { + data: NavigationPageInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateNotFoundPageArgs = { + data: NotFoundPageInput; + status?: InputMaybe; +}; + + +export type MutationUpdatePrintPageArgs = { + data: PrintPageInput; + status?: InputMaybe; +}; + + +export type MutationUpdatePublisherActionArgs = { + data: PublisherActionInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateReviewWorkflowsWorkflowArgs = { + data: ReviewWorkflowsWorkflowInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateReviewWorkflowsWorkflowStageArgs = { + data: ReviewWorkflowsWorkflowStageInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateThemePageArgs = { + data: ThemePageInput; + documentId: Scalars['ID']['input']; + status?: InputMaybe; +}; + + +export type MutationUpdateUploadFileArgs = { + id: Scalars['ID']['input']; + info?: InputMaybe; +}; + + +export type MutationUpdateUsersPermissionsRoleArgs = { + data: UsersPermissionsRoleInput; + id: Scalars['ID']['input']; +}; + + +export type MutationUpdateUsersPermissionsUserArgs = { + data: UsersPermissionsUserInput; + id: Scalars['ID']['input']; +}; + +export type NavigationPage = { + __typename?: 'NavigationPage'; + article_pages: Array>; + article_pages_connection?: Maybe; + content?: Maybe>>; + createdAt?: Maybe; + description?: Maybe; + documentId: Scalars['ID']['output']; + order?: Maybe; + previewImage?: Maybe; + publishedAt?: Maybe; + slug?: Maybe; + theme_pages: Array>; + theme_pages_connection?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + + +export type NavigationPageArticle_PagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type NavigationPageArticle_Pages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type NavigationPageTheme_PagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type NavigationPageTheme_Pages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type NavigationPageContentDynamicZone = ComponentComponentsUtrechtAccordion | ComponentComponentsUtrechtRichText | Error; + +export type NavigationPageEntityResponseCollection = { + __typename?: 'NavigationPageEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type NavigationPageFiltersInput = { + and?: InputMaybe>>; + article_pages?: InputMaybe; + createdAt?: InputMaybe; + description?: InputMaybe; + documentId?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + order?: InputMaybe; + publishedAt?: InputMaybe; + slug?: InputMaybe; + theme_pages?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type NavigationPageInput = { + article_pages?: InputMaybe>>; + content?: InputMaybe>; + description?: InputMaybe; + order?: InputMaybe; + previewImage?: InputMaybe; + publishedAt?: InputMaybe; + slug?: InputMaybe; + theme_pages?: InputMaybe>>; + title?: InputMaybe; +}; + +export type NavigationPageRelationResponseCollection = { + __typename?: 'NavigationPageRelationResponseCollection'; + nodes: Array; +}; + +export type NotFoundPage = { + __typename?: 'NotFoundPage'; + body?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + publishedAt?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + +export type NotFoundPageInput = { + body?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; +}; + +export type Pagination = { + __typename?: 'Pagination'; + page: Scalars['Int']['output']; + pageCount: Scalars['Int']['output']; + pageSize: Scalars['Int']['output']; + total: Scalars['Int']['output']; +}; + +export type PaginationArg = { + limit?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + start?: InputMaybe; +}; + +export type PrintPage = { + __typename?: 'PrintPage'; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + introductionBody?: Maybe; + publishedAt?: Maybe; + title?: Maybe; + updatedAt?: Maybe; + versiondate: Scalars['Date']['output']; +}; + +export type PrintPageInput = { + introductionBody?: InputMaybe; + publishedAt?: InputMaybe; + title?: InputMaybe; + versiondate?: InputMaybe; +}; + +export enum PublicationStatus { + Draft = 'DRAFT', + Published = 'PUBLISHED' +} + +export type PublisherAction = { + __typename?: 'PublisherAction'; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + entityId: Scalars['String']['output']; + entitySlug: Scalars['String']['output']; + executeAt: Scalars['DateTime']['output']; + mode: Scalars['String']['output']; + publishedAt?: Maybe; + updatedAt?: Maybe; +}; + +export type PublisherActionEntityResponseCollection = { + __typename?: 'PublisherActionEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type PublisherActionFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + documentId?: InputMaybe; + entityId?: InputMaybe; + entitySlug?: InputMaybe; + executeAt?: InputMaybe; + mode?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type PublisherActionInput = { + entityId?: InputMaybe; + entitySlug?: InputMaybe; + executeAt?: InputMaybe; + mode?: InputMaybe; + publishedAt?: InputMaybe; +}; + +export type Query = { + __typename?: 'Query'; + articlePage?: Maybe; + articlePages: Array>; + articlePages_connection?: Maybe; + homepage?: Maybe; + i18NLocale?: Maybe; + i18NLocales: Array>; + i18NLocales_connection?: Maybe; + me?: Maybe; + navigationPage?: Maybe; + navigationPages: Array>; + navigationPages_connection?: Maybe; + notFoundPage?: Maybe; + printPage?: Maybe; + publisherAction?: Maybe; + publisherActions: Array>; + publisherActions_connection?: Maybe; + reviewWorkflowsWorkflow?: Maybe; + reviewWorkflowsWorkflowStage?: Maybe; + reviewWorkflowsWorkflowStages: Array>; + reviewWorkflowsWorkflowStages_connection?: Maybe; + reviewWorkflowsWorkflows: Array>; + reviewWorkflowsWorkflows_connection?: Maybe; + themePage?: Maybe; + themePages: Array>; + themePages_connection?: Maybe; + uploadFile?: Maybe; + uploadFiles: Array>; + uploadFiles_connection?: Maybe; + usersPermissionsRole?: Maybe; + usersPermissionsRoles: Array>; + usersPermissionsRoles_connection?: Maybe; + usersPermissionsUser?: Maybe; + usersPermissionsUsers: Array>; + usersPermissionsUsers_connection?: Maybe; +}; + + +export type QueryArticlePageArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryArticlePagesArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryArticlePages_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryHomepageArgs = { + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryI18NLocaleArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryI18NLocalesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryI18NLocales_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryNavigationPageArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryNavigationPagesArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryNavigationPages_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryNotFoundPageArgs = { + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryPrintPageArgs = { + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryPublisherActionArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryPublisherActionsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryPublisherActions_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryReviewWorkflowsWorkflowArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryReviewWorkflowsWorkflowStageArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryReviewWorkflowsWorkflowStagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryReviewWorkflowsWorkflowStages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryReviewWorkflowsWorkflowsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryReviewWorkflowsWorkflows_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryThemePageArgs = { + documentId: Scalars['ID']['input']; + hasPublishedVersion?: InputMaybe; + status?: InputMaybe; +}; + + +export type QueryThemePagesArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryThemePages_ConnectionArgs = { + filters?: InputMaybe; + hasPublishedVersion?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; + status?: InputMaybe; +}; + + +export type QueryUploadFileArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryUploadFilesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUploadFiles_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUsersPermissionsRoleArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryUsersPermissionsRolesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUsersPermissionsRoles_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUsersPermissionsUserArgs = { + documentId: Scalars['ID']['input']; +}; + + +export type QueryUsersPermissionsUsersArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type QueryUsersPermissionsUsers_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ReviewWorkflowsWorkflow = { + __typename?: 'ReviewWorkflowsWorkflow'; + contentTypes: Scalars['JSON']['output']; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + name: Scalars['String']['output']; + publishedAt?: Maybe; + stageRequiredToPublish?: Maybe; + stages: Array>; + stages_connection?: Maybe; + updatedAt?: Maybe; +}; + + +export type ReviewWorkflowsWorkflowStagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ReviewWorkflowsWorkflowStages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ReviewWorkflowsWorkflowEntityResponseCollection = { + __typename?: 'ReviewWorkflowsWorkflowEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type ReviewWorkflowsWorkflowFiltersInput = { + and?: InputMaybe>>; + contentTypes?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + stageRequiredToPublish?: InputMaybe; + stages?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type ReviewWorkflowsWorkflowInput = { + contentTypes?: InputMaybe; + name?: InputMaybe; + publishedAt?: InputMaybe; + stageRequiredToPublish?: InputMaybe; + stages?: InputMaybe>>; +}; + +export type ReviewWorkflowsWorkflowStage = { + __typename?: 'ReviewWorkflowsWorkflowStage'; + color?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + name?: Maybe; + publishedAt?: Maybe; + updatedAt?: Maybe; + workflow?: Maybe; +}; + +export type ReviewWorkflowsWorkflowStageEntityResponseCollection = { + __typename?: 'ReviewWorkflowsWorkflowStageEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type ReviewWorkflowsWorkflowStageFiltersInput = { + and?: InputMaybe>>; + color?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + updatedAt?: InputMaybe; + workflow?: InputMaybe; +}; + +export type ReviewWorkflowsWorkflowStageInput = { + color?: InputMaybe; + name?: InputMaybe; + publishedAt?: InputMaybe; + workflow?: InputMaybe; +}; + +export type ReviewWorkflowsWorkflowStageRelationResponseCollection = { + __typename?: 'ReviewWorkflowsWorkflowStageRelationResponseCollection'; + nodes: Array; +}; + +export type StringFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type ThemePage = { + __typename?: 'ThemePage'; + article_pages: Array>; + article_pages_connection?: Maybe; + content?: Maybe>>; + createdAt?: Maybe; + description?: Maybe; + documentId: Scalars['ID']['output']; + navigation_pages: Array>; + navigation_pages_connection?: Maybe; + previewImage?: Maybe; + publishedAt?: Maybe; + slug: Scalars['String']['output']; + title: Scalars['String']['output']; + updatedAt?: Maybe; +}; + + +export type ThemePageArticle_PagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ThemePageArticle_Pages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ThemePageNavigation_PagesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type ThemePageNavigation_Pages_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ThemePageContentDynamicZone = ComponentComponentsUtrechtAccordion | ComponentComponentsUtrechtRichText | Error; + +export type ThemePageEntityResponseCollection = { + __typename?: 'ThemePageEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type ThemePageFiltersInput = { + and?: InputMaybe>>; + article_pages?: InputMaybe; + createdAt?: InputMaybe; + description?: InputMaybe; + documentId?: InputMaybe; + navigation_pages?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + slug?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type ThemePageInput = { + article_pages?: InputMaybe>>; + content?: InputMaybe>; + description?: InputMaybe; + navigation_pages?: InputMaybe>>; + previewImage?: InputMaybe; + publishedAt?: InputMaybe; + slug?: InputMaybe; + title?: InputMaybe; +}; + +export type ThemePageRelationResponseCollection = { + __typename?: 'ThemePageRelationResponseCollection'; + nodes: Array; +}; + +export type UploadFile = { + __typename?: 'UploadFile'; + alternativeText?: Maybe; + caption?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + ext?: Maybe; + focalPoint?: Maybe; + formats?: Maybe; + hash: Scalars['String']['output']; + height?: Maybe; + mime: Scalars['String']['output']; + name: Scalars['String']['output']; + previewUrl?: Maybe; + provider: Scalars['String']['output']; + provider_metadata?: Maybe; + publishedAt?: Maybe; + related?: Maybe>>; + size: Scalars['Float']['output']; + updatedAt?: Maybe; + url: Scalars['String']['output']; + width?: Maybe; +}; + +export type UploadFileEntityResponseCollection = { + __typename?: 'UploadFileEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type UploadFileFiltersInput = { + alternativeText?: InputMaybe; + and?: InputMaybe>>; + caption?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + ext?: InputMaybe; + focalPoint?: InputMaybe; + formats?: InputMaybe; + hash?: InputMaybe; + height?: InputMaybe; + mime?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + previewUrl?: InputMaybe; + provider?: InputMaybe; + provider_metadata?: InputMaybe; + publishedAt?: InputMaybe; + size?: InputMaybe; + updatedAt?: InputMaybe; + url?: InputMaybe; + width?: InputMaybe; +}; + +export type UsersPermissionsCreateRolePayload = { + __typename?: 'UsersPermissionsCreateRolePayload'; + ok: Scalars['Boolean']['output']; +}; + +export type UsersPermissionsDeleteRolePayload = { + __typename?: 'UsersPermissionsDeleteRolePayload'; + ok: Scalars['Boolean']['output']; +}; + +export type UsersPermissionsLoginInput = { + identifier: Scalars['String']['input']; + password: Scalars['String']['input']; + provider?: Scalars['String']['input']; +}; + +export type UsersPermissionsLoginPayload = { + __typename?: 'UsersPermissionsLoginPayload'; + jwt?: Maybe; + user: UsersPermissionsMe; +}; + +export type UsersPermissionsMe = { + __typename?: 'UsersPermissionsMe'; + blocked?: Maybe; + confirmed?: Maybe; + documentId: Scalars['ID']['output']; + email?: Maybe; + id: Scalars['ID']['output']; + role?: Maybe; + username: Scalars['String']['output']; +}; + +export type UsersPermissionsMeRole = { + __typename?: 'UsersPermissionsMeRole'; + description?: Maybe; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; + type?: Maybe; +}; + +export type UsersPermissionsPasswordPayload = { + __typename?: 'UsersPermissionsPasswordPayload'; + ok: Scalars['Boolean']['output']; +}; + +export type UsersPermissionsPermission = { + __typename?: 'UsersPermissionsPermission'; + action: Scalars['String']['output']; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + publishedAt?: Maybe; + role?: Maybe; + updatedAt?: Maybe; +}; + +export type UsersPermissionsPermissionFiltersInput = { + action?: InputMaybe; + and?: InputMaybe>>; + createdAt?: InputMaybe; + documentId?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + role?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type UsersPermissionsPermissionRelationResponseCollection = { + __typename?: 'UsersPermissionsPermissionRelationResponseCollection'; + nodes: Array; +}; + +export type UsersPermissionsRegisterInput = { + email: Scalars['String']['input']; + password: Scalars['String']['input']; + username: Scalars['String']['input']; +}; + +export type UsersPermissionsRole = { + __typename?: 'UsersPermissionsRole'; + createdAt?: Maybe; + description?: Maybe; + documentId: Scalars['ID']['output']; + name: Scalars['String']['output']; + permissions: Array>; + permissions_connection?: Maybe; + publishedAt?: Maybe; + type?: Maybe; + updatedAt?: Maybe; + users: Array>; + users_connection?: Maybe; +}; + + +export type UsersPermissionsRolePermissionsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type UsersPermissionsRolePermissions_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type UsersPermissionsRoleUsersArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + + +export type UsersPermissionsRoleUsers_ConnectionArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type UsersPermissionsRoleEntityResponseCollection = { + __typename?: 'UsersPermissionsRoleEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type UsersPermissionsRoleFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + description?: InputMaybe; + documentId?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + permissions?: InputMaybe; + publishedAt?: InputMaybe; + type?: InputMaybe; + updatedAt?: InputMaybe; + users?: InputMaybe; +}; + +export type UsersPermissionsRoleInput = { + description?: InputMaybe; + name?: InputMaybe; + permissions?: InputMaybe>>; + publishedAt?: InputMaybe; + type?: InputMaybe; + users?: InputMaybe>>; +}; + +export type UsersPermissionsUpdateRolePayload = { + __typename?: 'UsersPermissionsUpdateRolePayload'; + ok: Scalars['Boolean']['output']; +}; + +export type UsersPermissionsUser = { + __typename?: 'UsersPermissionsUser'; + blocked?: Maybe; + confirmed?: Maybe; + createdAt?: Maybe; + documentId: Scalars['ID']['output']; + email: Scalars['String']['output']; + provider?: Maybe; + publishedAt?: Maybe; + role?: Maybe; + updatedAt?: Maybe; + username: Scalars['String']['output']; +}; + +export type UsersPermissionsUserEntityResponse = { + __typename?: 'UsersPermissionsUserEntityResponse'; + data?: Maybe; +}; + +export type UsersPermissionsUserEntityResponseCollection = { + __typename?: 'UsersPermissionsUserEntityResponseCollection'; + nodes: Array; + pageInfo: Pagination; +}; + +export type UsersPermissionsUserFiltersInput = { + and?: InputMaybe>>; + blocked?: InputMaybe; + confirmed?: InputMaybe; + createdAt?: InputMaybe; + documentId?: InputMaybe; + email?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + provider?: InputMaybe; + publishedAt?: InputMaybe; + role?: InputMaybe; + updatedAt?: InputMaybe; + username?: InputMaybe; +}; + +export type UsersPermissionsUserInput = { + blocked?: InputMaybe; + confirmed?: InputMaybe; + email?: InputMaybe; + password?: InputMaybe; + provider?: InputMaybe; + publishedAt?: InputMaybe; + role?: InputMaybe; + username?: InputMaybe; +}; + +export type UsersPermissionsUserRelationResponseCollection = { + __typename?: 'UsersPermissionsUserRelationResponseCollection'; + nodes: Array; +}; + +export type GetNotFoundPageQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetNotFoundPageQuery = { __typename?: 'Query', notFoundPage?: { __typename?: 'NotFoundPage', title?: string | null, body?: string | null } | null }; + +export type GetHomepageQueryVariables = Exact<{ + pageMode?: InputMaybe; +}>; + + +export type GetHomepageQuery = { __typename?: 'Query', homepage?: { __typename?: 'Homepage', title: string, content?: string | null, bannerImage?: { __typename?: 'UploadFile', url: string, alternativeText?: string | null } | null } | null, navigationPages: Array<{ __typename?: 'NavigationPage', documentId: string, title?: string | null, slug?: string | null, description?: string | null, previewImage?: { __typename?: 'UploadFile', url: string, alternativeText?: string | null } | null } | null> }; + +export type GetNavigationPagesQueryVariables = Exact<{ + pageMode?: InputMaybe; +}>; + + +export type GetNavigationPagesQuery = { __typename?: 'Query', navigationPages: Array<{ __typename?: 'NavigationPage', documentId: string, title?: string | null, slug?: string | null, updatedAt?: any | null } | null> }; + +export type Get_Navigation_Page_By_SlugQueryVariables = Exact<{ + slug?: InputMaybe; + pageMode?: InputMaybe; +}>; + + +export type Get_Navigation_Page_By_SlugQuery = { __typename?: 'Query', navigationPages: Array<{ __typename?: 'NavigationPage', documentId: string, title?: string | null, description?: string | null, slug?: string | null, content?: Array<{ __typename: 'ComponentComponentsUtrechtAccordion', item?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', id: string, label?: string | null, body?: string | null, headingLevel?: number | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', content: string } | { __typename: 'Error' } | null> | null, theme_pages: Array<{ __typename?: 'ThemePage', title: string, slug: string, description?: string | null, previewImage?: { __typename?: 'UploadFile', url: string, alternativeText?: string | null } | null } | null>, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null, description?: string | null, previewImage?: { __typename?: 'UploadFile', url: string, alternativeText?: string | null } | null } | null> } | null> }; + +export type Get_Theme_By_SlugQueryVariables = Exact<{ + slug?: InputMaybe; + pageMode?: InputMaybe; +}>; + + +export type Get_Theme_By_SlugQuery = { __typename?: 'Query', themePages: Array<{ __typename?: 'ThemePage', documentId: string, title: string, description?: string | null, slug: string, content?: Array<{ __typename: 'ComponentComponentsUtrechtAccordion', item?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', id: string, label?: string | null, body?: string | null, headingLevel?: number | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', content: string } | { __typename: 'Error' } | null> | null, navigation_pages: Array<{ __typename?: 'NavigationPage', title?: string | null, slug?: string | null, theme_pages: Array<{ __typename?: 'ThemePage', title: string, slug: string } | null>, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null } | null> } | null>, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null, description?: string | null, previewImage?: { __typename?: 'UploadFile', url: string, alternativeText?: string | null } | null } | null> } | null> }; + +export type GetAllThemeSlugsQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetAllThemeSlugsQuery = { __typename?: 'Query', themePages: Array<{ __typename?: 'ThemePage', documentId: string, title: string, slug: string, updatedAt?: any | null } | null> }; + +export type GetAllAriclesSlugsQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetAllAriclesSlugsQuery = { __typename?: 'Query', articlePages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null, updatedAt?: any | null } | null> }; + +export type Get_Article_By_SlugQueryVariables = Exact<{ + slug?: InputMaybe; + pageMode?: InputMaybe; +}>; + + +export type Get_Article_By_SlugQuery = { __typename?: 'Query', articlePages: Array<{ __typename?: 'ArticlePage', documentId: string, title?: string | null, description?: string | null, slug?: string | null, content?: Array<{ __typename: 'ComponentComponentsUtrechtAccordion', item?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', id: string, label?: string | null, body?: string | null, headingLevel?: number | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', content: string } | { __typename: 'Error' } | null> | null, theme_pages: Array<{ __typename?: 'ThemePage', title: string, slug: string, navigation_pages: Array<{ __typename?: 'NavigationPage', title?: string | null, slug?: string | null } | null>, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null } | null> } | null>, navigation_pages: Array<{ __typename?: 'NavigationPage', title?: string | null, slug?: string | null, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null } | null>, theme_pages: Array<{ __typename?: 'ThemePage', title: string, slug: string } | null> } | null> } | null> }; + +export type Get_Print_PageQueryVariables = Exact<{ [key: string]: never; }>; + + +export type Get_Print_PageQuery = { __typename?: 'Query', printPage?: { __typename?: 'PrintPage', title?: string | null, versiondate: any, introductionBody?: string | null } | null, navigationPages: Array<{ __typename?: 'NavigationPage', documentId: string, title?: string | null, content?: Array<{ __typename: 'ComponentComponentsUtrechtAccordion', item?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', id: string, label?: string | null, body?: string | null, headingLevel?: number | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', content: string } | { __typename?: 'Error' } | null> | null, theme_pages: Array<{ __typename?: 'ThemePage', title: string, content?: Array<{ __typename: 'ComponentComponentsUtrechtAccordion', item?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', id: string, label?: string | null, body?: string | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', content: string } | { __typename?: 'Error' } | null> | null, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, content?: Array<{ __typename: 'ComponentComponentsUtrechtAccordion', item?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', id: string, label?: string | null, body?: string | null, headingLevel?: number | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', content: string } | { __typename?: 'Error' } | null> | null } | null> } | null>, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, content?: Array<{ __typename: 'ComponentComponentsUtrechtAccordion', item?: Array<{ __typename?: 'ComponentComponentsUtrechtAccordionSection', id: string, label?: string | null, body?: string | null, headingLevel?: number | null } | null> | null } | { __typename: 'ComponentComponentsUtrechtRichText', content: string } | { __typename?: 'Error' } | null> | null } | null> } | null> }; + +export type GetNavigationDataQueryVariables = Exact<{ + pageMode?: InputMaybe; + themeSlug?: InputMaybe; + articleSlug?: InputMaybe; +}>; + + +export type GetNavigationDataQuery = { __typename?: 'Query', navigationPages: Array<{ __typename?: 'NavigationPage', title?: string | null, slug?: string | null, theme_pages: Array<{ __typename?: 'ThemePage', title: string, slug: string, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null } | null> } | null>, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null, theme_pages: Array<{ __typename?: 'ThemePage', title: string, slug: string } | null> } | null> } | null>, currentLink: Array<{ __typename?: 'NavigationPage', title?: string | null, slug?: string | null, order?: number | null, theme_pages: Array<{ __typename?: 'ThemePage', slug: string, title: string, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null } | null> } | null>, article_pages: Array<{ __typename?: 'ArticlePage', title?: string | null, slug?: string | null, theme_pages: Array<{ __typename?: 'ThemePage', title: string, slug: string } | null> } | null> } | null> }; + + +export const GetNotFoundPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getNotFoundPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"notFoundPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"body"}}]}}]}}]} as unknown as DocumentNode; +export const GetHomepageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getHomepage"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"homepage"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"bannerImage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"navigationPages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"ListValue","values":[{"kind":"StringValue","value":"order:asc","block":false},{"kind":"StringValue","value":"title:asc","block":false}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"previewImage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetNavigationPagesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getNavigationPages"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"navigationPages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"ListValue","values":[{"kind":"StringValue","value":"order:asc","block":false},{"kind":"StringValue","value":"title:asc","block":false}]}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; +export const Get_Navigation_Page_By_SlugDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GET_NAVIGATION_PAGE_BY_SLUG"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"navigationPages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"item"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"theme_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"previewImage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"previewImage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const Get_Theme_By_SlugDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GET_THEME_BY_SLUG"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"themePages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"item"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"navigation_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"theme_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"previewImage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url"}},{"kind":"Field","name":{"kind":"Name","value":"alternativeText"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetAllThemeSlugsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAllThemeSlugs"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"themePages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"ListValue","values":[{"kind":"StringValue","value":"title:asc","block":false}]}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; +export const GetAllAriclesSlugsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getAllAriclesSlugs"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"articlePages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"ListValue","values":[{"kind":"StringValue","value":"title:asc","block":false}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; +export const Get_Article_By_SlugDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GET_ARTICLE_BY_SLUG"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"articlePages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"content"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"item"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"theme_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"navigation_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"navigation_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}},{"kind":"Field","name":{"kind":"Name","value":"theme_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const Get_Print_PageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GET_PRINT_PAGE"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"printPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"versiondate"}},{"kind":"Field","name":{"kind":"Name","value":"introductionBody"}}]}},{"kind":"Field","name":{"kind":"Name","value":"navigationPages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"ListValue","values":[{"kind":"StringValue","value":"order:asc","block":false},{"kind":"StringValue","value":"title:asc","block":false}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"documentId"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"item"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"theme_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"item"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"body"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"item"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}}]}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"content"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtRichText"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"content"}}]}},{"kind":"InlineFragment","typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ComponentComponentsUtrechtAccordion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"__typename"}},{"kind":"Field","name":{"kind":"Name","value":"item"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"body"}},{"kind":"Field","name":{"kind":"Name","value":"headingLevel"}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetNavigationDataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getNavigationData"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PublicationStatus"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"themeSlug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"articleSlug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"navigationPages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"ListValue","values":[{"kind":"StringValue","value":"order:asc","block":false},{"kind":"StringValue","value":"title:asc","block":false}]}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"start"},"value":{"kind":"IntValue","value":"0"}},{"kind":"ObjectField","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"-1"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"theme_pages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"themeSlug"}}}]}},{"kind":"ObjectField","name":{"kind":"Name","value":"article_pages"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"articleSlug"}}}]}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"theme_pages"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"themeSlug"}}}]}}]}},{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"articleSlug"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"theme_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]}},{"kind":"Field","alias":{"kind":"Name","value":"currentLink"},"name":{"kind":"Name","value":"navigationPages"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pageMode"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"theme_pages"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"themeSlug"}}}]}}]}},{"kind":"ObjectField","name":{"kind":"Name","value":"article_pages"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slug"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"articleSlug"}}}]}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"order"}},{"kind":"Field","name":{"kind":"Name","value":"theme_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"article_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"theme_pages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/apps/vth-frontend/gql/index.ts b/apps/vth-frontend/gql/index.ts new file mode 100644 index 000000000..f51599168 --- /dev/null +++ b/apps/vth-frontend/gql/index.ts @@ -0,0 +1,2 @@ +export * from "./fragment-masking"; +export * from "./gql"; \ No newline at end of file diff --git a/apps/vth-frontend/index.d.ts b/apps/vth-frontend/index.d.ts index eae46f490..b06295dfa 100644 --- a/apps/vth-frontend/index.d.ts +++ b/apps/vth-frontend/index.d.ts @@ -1,3 +1,5 @@ +declare module '@utrecht/component-library-css'; + declare module 'editoria11y/dist/editoria11y.min.js' { export interface Ed11yTheme { bg: string; diff --git a/apps/vth-frontend/next.config.js b/apps/vth-frontend/next.config.js index 4530be87c..7df84e5ed 100644 --- a/apps/vth-frontend/next.config.js +++ b/apps/vth-frontend/next.config.js @@ -1,19 +1,26 @@ -const { URL } = require('url'); +import path from 'path'; +import { URL, fileURLToPath } from 'node:url'; + const { hostname, protocol, port } = new URL(process.env.STRAPI_PUBLIC_URL || 'http://localhost:1337'); +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + /** @type {import('next').NextConfig} */ const nextConfig = { + transpilePackages: ['@frameless/ui', '@utrecht/component-library-react', '@utrecht/web-component-library-react'], images: { + // Allow localhost images in dev only (blocked in production for security) + // https://nextjs.org/docs/app/api-reference/components/image#dangerouslyallowlocalip + dangerouslyAllowLocalIP: process.env.NODE_ENV === 'development', remotePatterns: [ { protocol: protocol.replace(/:$/, ''), - hostname: hostname, + hostname, port: port, }, ], }, - experimental: { - serverActions: true, - }, + turbopack: {}, }; -module.exports = nextConfig; +export default nextConfig; diff --git a/apps/vth-frontend/package.json b/apps/vth-frontend/package.json index 5656b5359..7c01dec19 100644 --- a/apps/vth-frontend/package.json +++ b/apps/vth-frontend/package.json @@ -5,46 +5,62 @@ "author": "@frameless", "description": "Utrecht VTH frontend application", "license": "EUPL-1.2", + "type": "module", "keywords": [], "scripts": { + "codegen": "wait-on http://localhost:1337 && graphql-codegen", + "codegen:docker": "graphql-codegen", "dev": "next dev -p 3000", "prebuild": "npm run clean", "clean": "rimraf build .next", "build": "next build", "start": "next start -p 3000", - "lint": "next lint", + "lint": "eslint --report-unused-disable-directives .", + "lint:fix": "eslint --fix .", "lint-build": "tsc --noEmit --project tsconfig.json" }, "dependencies": { - "@frameless/editoria11y": "0.1.0", - "@frameless/ui": "0.1.2", + "@frameless/editoria11y": "workspace:*", + "@frameless/ui": "workspace:*", + "@frameless/utils": "workspace:*", "@tanstack/react-query": "4.29.25", "@utrecht/component-library-css": "9.0.0", - "@utrecht/component-library-react": "10.3.9", + "@utrecht/component-library-react": "13.0.2", "@utrecht/design-tokens": "5.0.0", "@utrecht/web-component-library-react": "3.0.12", "accept-language": "3.0.18", "classnames": "2.3.3", - "i18next": "22.5.1", - "i18next-browser-languagedetector": "7.0.2", - "i18next-resources-to-backend": "1.1.4", - "is-absolute-url": "4.0.1", - "next": "13.5.6", - "next-sitemap": "4.1.8", - "react": "18.3.1", - "react-dom": "18.3.1", - "react-i18next": "12.3.1", - "react-loading-skeleton": "3.3.1", - "sharp": "0.32.6" + "i18next": "26.1.0", + "i18next-browser-languagedetector": "8.2.1", + "i18next-resources-to-backend": "1.2.1", + "is-absolute-url": "5.0.0", + "next": "16.2.6", + "next-sitemap": "4.2.3", + "react": "19.2.6", + "react-dom": "19.2.6", + "react-i18next": "17.0.6", + "react-loading-skeleton": "3.5.0", + "react-markdown": "10.1.0", + "rehype-raw": "7.0.0", + "sharp": "0.34.5" }, "devDependencies": { - "eslint": "8.35.0", - "eslint-config-next": "13.2.4", - "sass": "1.63.6" + "@frameless/eslint-config": "1.2.0", + "@graphql-codegen/cli": "5.0.2", + "@graphql-codegen/client-preset": "4.1.0", + "eslint": "9.39.3", + "eslint-config-next": "16.2.6", + "rimraf": "6.1.3", + "sass": "1.99.0", + "wait-on": "9.0.10" }, "repository": { "type": "git+ssh", "url": "git@github.com:frameless/strapi.git", "directory": "apps/vth-frontend" + }, + "engines": { + "node": "24.x.x", + "pnpm": "10.23.0" } } diff --git a/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/article/[articleSlug]/page.tsx b/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/article/[articleSlug]/page.tsx index f8a53ebc1..52de0e388 100644 --- a/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/article/[articleSlug]/page.tsx +++ b/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/article/[articleSlug]/page.tsx @@ -2,13 +2,13 @@ import { createStrapiURL } from '@frameless/vth-frontend/src/util/createStrapiUR import { fetchData } from '@frameless/vth-frontend/src/util/fetchData'; import { Metadata } from 'next'; import { draftMode } from 'next/headers'; -import Link from 'next/link'; import { notFound } from 'next/navigation'; -import React from 'react'; + +import { Get_Article_By_SlugQuery } from '../../../../../../gql/graphql'; + import { useTranslation } from '@/app/i18n'; import { AccordionProvider, - Breadcrumbs, Grid, GridCell, Header, @@ -17,72 +17,74 @@ import { Page, PageContent, RichText, - ScrollToTopButton, - UtrechtIconChevronUp, } from '@/components'; import { Main } from '@/components/Main'; import { Markdown } from '@/components/Markdown'; import { GET_ARTICLE_BY_SLUG } from '@/query'; -import { SiblingData } from '@/types'; import { config } from '@/util'; import { getImageBaseUrl } from '@/util/getImageBaseUrl'; import { getNavData } from '@/util/getNavData'; +import { Breadcrumbs } from '@/components/Breadcrumbs'; +import { ScrollToTopButton } from '@/components/ScrollToTopButton'; type Params = { - params: { + params: Promise<{ locale: string; articleSlug: string; - }; + }>; }; -export async function generateMetadata({ params: { locale, articleSlug } }: Params): Promise { - // eslint-disable-next-line react-hooks/rules-of-hooks - const { data } = await fetchData({ +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { articleSlug } = params; + const { data } = await fetchData({ url: createStrapiURL(), query: GET_ARTICLE_BY_SLUG, - variables: { slug: articleSlug, locale }, + variables: { slug: articleSlug, pageMode: 'PUBLISHED' }, }); return { - title: data.findSlug.data?.attributes?.title, - description: data.findSlug.data?.attributes?.description, + title: data.articlePages?.[0]?.title ?? '', + description: data.articlePages?.[0]?.description ?? '', }; } -const ArticlePage = async ({ params: { locale, articleSlug } }: Params) => { +const ArticlePage = async (props: Params) => { + const params = await props.params; + const { locale, articleSlug } = params; + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['common']); - const { isEnabled } = draftMode(); - const { data } = await fetchData({ + const { isEnabled } = await draftMode(); + const { data } = await fetchData({ url: createStrapiURL(), query: GET_ARTICLE_BY_SLUG, - variables: { slug: articleSlug, locale, pageMode: isEnabled ? 'preview' : 'live' }, + variables: { slug: articleSlug, pageMode: isEnabled ? 'DRAFT' : 'PUBLISHED' }, }); - const navList = await getNavData({ pageMode: isEnabled ? 'PREVIEW' : 'LIVE', articleSlug }); - if (!data.findSlug?.data) return notFound(); + const navList = await getNavData({ pageMode: isEnabled ? 'DRAFT' : 'PUBLISHED', articleSlug }); + if (!data.articlePages?.[0]) return notFound(); - const parentThemaSlug = data.findSlug.data?.attributes?.theme_pages?.data[0]?.attributes?.slug; - const parentHoofditemSlug = data.findSlug.data?.attributes?.navigation_pages?.data[0]?.attributes?.slug; + const article = data.articlePages?.[0]; + const parentThemaSlug = article?.theme_pages?.[0]?.slug; + const parentHoofditemSlug = article?.navigation_pages?.[0]?.slug; const hasHoofditemParentOnly = !parentThemaSlug && parentHoofditemSlug; - const siblingThemas: SiblingData[] = hasHoofditemParentOnly - ? data.findSlug.data?.attributes?.navigation_pages?.data[0]?.attributes?.theme_pages?.data - : []; - const siblingContent: SiblingData[] = hasHoofditemParentOnly - ? data.findSlug.data?.attributes?.navigation_pages?.data[0]?.attributes?.article_pages?.data - : data.findSlug.data?.attributes?.theme_pages?.data[0]?.attributes?.article_pages?.data; + const siblingThemas = hasHoofditemParentOnly ? (article?.navigation_pages?.[0]?.theme_pages ?? []) : []; + const siblingContent = hasHoofditemParentOnly + ? (article?.navigation_pages?.[0]?.article_pages ?? []) + : (article?.theme_pages?.[0]?.article_pages ?? []); const themasLinks = - siblingThemas?.map(({ attributes: { slug, title } }: SiblingData) => ({ - textContent: title, - href: `/${locale}/theme/${slug}`, - isCurrent: slug === articleSlug, + siblingThemas?.map((page) => ({ + textContent: page?.title ?? '', + href: `/${locale}/theme/${page?.slug}`, + isCurrent: page?.slug === articleSlug, })) || []; const contentLinks = - siblingContent?.map(({ attributes: { slug, title } }: SiblingData) => ({ - textContent: title, - href: `/${locale}/article/${slug}`, - isCurrent: slug === articleSlug, + siblingContent?.map((page) => ({ + textContent: page?.title ?? '', + href: `/${locale}/article/${page?.slug}`, + isCurrent: page?.slug === articleSlug, })) || []; const sideNavigationLinks = [...themasLinks, ...contentLinks]; @@ -95,23 +97,23 @@ const ArticlePage = async ({ params: { locale, articleSlug } }: Params) => { }, ]; - if (data.findSlug.data?.attributes?.theme_pages?.data[0]?.attributes?.navigation_pages?.data[0]) { + const parentNavPage = article?.theme_pages?.[0]?.navigation_pages?.[0]; + if (parentNavPage) { breadcrumbNavigationElements.push({ - label: - data.findSlug.data?.attributes?.theme_pages?.data[0]?.attributes?.navigation_pages?.data[0]?.attributes?.title, - href: `/${locale}/${data.findSlug.data?.attributes?.theme_pages?.data[0]?.attributes?.navigation_pages?.data[0]?.attributes?.slug}`, + label: parentNavPage.title ?? '', + href: `/${locale}/${parentNavPage.slug}`, current: false, }); } const parentElement = hasHoofditemParentOnly ? { - label: data.findSlug.data?.attributes?.navigation_pages?.data[0]?.attributes?.title, + label: article?.navigation_pages?.[0]?.title ?? '', href: `/${locale}/${parentHoofditemSlug}`, current: false, } : { - label: data.findSlug.data?.attributes?.theme_pages?.data[0]?.attributes?.title, + label: article?.theme_pages?.[0]?.title ?? '', href: `/theme/${parentThemaSlug}`, current: true, }; @@ -119,9 +121,9 @@ const ArticlePage = async ({ params: { locale, articleSlug } }: Params) => { breadcrumbNavigationElements.push(parentElement); const DynamicContent = () => - data.findSlug.data?.attributes?.content && - data.findSlug.data?.attributes?.content.length > 0 && - data.findSlug.data?.attributes?.content?.map((component: any, index: number) => { + article?.content && + article?.content.length > 0 && + article?.content?.map((component: any, index: number) => { switch (component?.__typename) { case 'ComponentComponentsUtrechtRichText': return component.content ? ( @@ -162,7 +164,6 @@ const ArticlePage = async ({ params: { locale, articleSlug } }: Params) => { {
- {data.findSlug.data?.attributes?.title} + {article?.title}
@@ -188,7 +189,7 @@ const ArticlePage = async ({ params: { locale, articleSlug } }: Params) => { - {t('actions.scroll-to-top')} + {t('actions.scroll-to-top')}
diff --git a/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/error.tsx b/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/error.tsx index 6de653f90..6ed8a03a9 100644 --- a/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/error.tsx +++ b/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/error.tsx @@ -2,6 +2,7 @@ import { useParams } from 'next/navigation'; import { useEffect, useState } from 'react'; + import { useTranslation } from '@/app/i18n/client'; import { fallbackLng } from '@/app/i18n/settings'; import { Button, Heading1, Page, PageContent, Paragraph } from '@/components'; diff --git a/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/layout.tsx b/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/layout.tsx index 07b5000a0..d129449d9 100644 --- a/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/layout.tsx +++ b/apps/vth-frontend/src/app/[locale]/(nestedNavLayout)/layout.tsx @@ -4,6 +4,7 @@ import type { Metadata } from 'next'; import { draftMode } from 'next/headers'; import Script from 'next/script'; import React from 'react'; + import { useTranslation } from '@/app/i18n'; import { QueryClientProvider } from '@/client'; import { Footer, FooterData, Page, PreviewAlert, Surface } from '@/components'; @@ -17,18 +18,20 @@ import { Editoria11yWrapper } from '@/lib/stencil-client'; interface LayoutProps { children: React.ReactNode; - params: { + params: Promise<{ locale: string; - }; + }>; } type Params = { - params: { + params: Promise<{ locale: string; - }; + }>; }; -export async function generateMetadata({ params: { locale } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, 'common'); return { @@ -39,10 +42,13 @@ export async function generateMetadata({ params: { locale } }: Params): Promise< }; } -const RootLayout = async ({ children, params: { locale } }: LayoutProps) => { +const RootLayout = async (props: LayoutProps) => { + const params = await props.params; + const { locale } = params; + const { children } = props; + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['layout', 'common']); - const { isEnabled } = draftMode(); - + const { isEnabled } = await draftMode(); const footerData = { title: t('footer.title'), list: { @@ -108,7 +114,13 @@ const RootLayout = async ({ children, params: { locale } }: LayoutProps) => { }; return ( - + { new Response(null, { status: 404 }); - const locale = cookies().get('i18next')?.value; + const locale = (await cookies()).get('i18next')?.value; + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale || fallbackLng, ['common']); - const { isEnabled } = draftMode(); + const { isEnabled } = await draftMode(); const { data } = await fetchData({ url: createStrapiURL(), query: GET_NOT_FOUND_PAGE, }); - const navList = await getNavData({ pageMode: isEnabled ? 'PREVIEW' : 'LIVE' }); + const navList = await getNavData({ pageMode: isEnabled ? 'DRAFT' : 'PUBLISHED' }); return ( <>
; }; -export async function generateMetadata({ params: { locale, themeSlug } }: Params): Promise { - // eslint-disable-next-line react-hooks/rules-of-hooks - const { data } = await fetchData({ +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { themeSlug } = params; + const { data } = await fetchData({ url: createStrapiURL(), query: GET_THEME_BY_SLUG, - variables: { slug: themeSlug, locale }, + variables: { slug: themeSlug, pageMode: 'PUBLISHED' }, }); return { - title: data.findSlug.data?.attributes?.title, - description: data.findSlug.data?.attributes?.description, + title: data.themePages?.[0]?.title ?? '', + description: data.themePages?.[0]?.description ?? '', }; } -const ThemePage = async ({ params: { locale, themeSlug } }: Params) => { +const ThemePage = async (props: Params) => { + const params = await props.params; + const { locale, themeSlug } = params; + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['common']); - const { isEnabled } = draftMode(); - const { data } = await fetchData({ + const { isEnabled } = await draftMode(); + const { data } = await fetchData({ url: createStrapiURL(), query: GET_THEME_BY_SLUG, - variables: { slug: themeSlug, locale, pageMode: isEnabled ? 'preview' : 'live' }, + variables: { slug: themeSlug, locale, pageMode: isEnabled ? 'DRAFT' : 'PUBLISHED' }, }); - if (!data.findSlug?.data) return notFound(); + if (!data.themePages?.[0]) return notFound(); - const navigationPageSlug = data.findSlug.data?.attributes.navigation_pages?.data[0]?.attributes?.slug; - const siblingThemes: SiblingData[] = - data.findSlug.data?.attributes?.navigation_pages?.data[0]?.attributes?.theme_pages?.data || []; - const siblingArticles: SiblingData[] = - data.findSlug.data?.attributes?.navigation_pages?.data[0]?.attributes?.contents?.data || []; + const theme = data.themePages?.[0]; + const navigationPageSlug = theme?.navigation_pages?.[0]?.slug; + const siblingThemes = theme?.navigation_pages?.[0]?.theme_pages ?? []; + const siblingArticles = theme?.navigation_pages?.[0]?.article_pages ?? []; const themasLinks = - siblingThemes?.map(({ attributes: { slug, title } }: SiblingData) => ({ - textContent: title, - href: `/${locale}/theme/${slug}`, - isCurrent: slug === themeSlug, + siblingThemes?.map((page) => ({ + textContent: page?.title ?? '', + href: `/${locale}/theme/${page?.slug}`, + isCurrent: page?.slug === themeSlug, })) || []; const contentLinks = - siblingArticles?.map(({ attributes: { slug, title } }: SiblingData) => ({ - textContent: title, - href: `/${locale}/article/${slug}`, - isCurrent: slug === themeSlug, + siblingArticles?.map((page) => ({ + textContent: page?.title ?? '', + href: `/${locale}/article/${page?.slug}`, + isCurrent: page?.slug === themeSlug, })) || []; const sideNavigationLinks = [...themasLinks, ...contentLinks]; @@ -90,9 +92,10 @@ const ThemePage = async ({ params: { locale, themeSlug } }: Params) => { }, ]; - const parentElement = data.findSlug.data?.attributes.navigation_pages?.data[0] && { - label: data.findSlug.data?.attributes?.navigation_pages?.data[0]?.attributes?.title, + const parentElement = theme.navigation_pages?.[0] && { + label: theme?.navigation_pages?.[0]?.title ?? '', href: `/${locale}/${navigationPageSlug}`, + current: false, }; if (parentElement) { @@ -100,9 +103,9 @@ const ThemePage = async ({ params: { locale, themeSlug } }: Params) => { } const DynamicContent = () => - data.findSlug.data?.attributes?.content && - data.findSlug.data?.attributes?.content.length > 0 && - data.findSlug.data?.attributes?.content?.map((component: any, index: number) => { + theme?.content && + theme?.content.length > 0 && + theme?.content?.map((component: any, index: number) => { switch (component?.__typename) { case 'ComponentComponentsUtrechtRichText': return component.content ? ( @@ -125,7 +128,7 @@ const ThemePage = async ({ params: { locale, themeSlug } }: Params) => { return null; } }); - const navList = await getNavData({ pageMode: isEnabled ? 'PREVIEW' : 'LIVE', themeSlug }); + const navList = await getNavData({ pageMode: isEnabled ? 'DRAFT' : 'PUBLISHED', themeSlug }); return ( @@ -142,7 +145,6 @@ const ThemePage = async ({ params: { locale, themeSlug } }: Params) => {
@@ -151,22 +153,26 @@ const ThemePage = async ({ params: { locale, themeSlug } }: Params) => { - {data.findSlug.data?.attributes?.title} + {theme.title} - {data.findSlug.data?.attributes?.article_pages.data && - data.findSlug.data?.attributes?.article_pages.data[0] && - data.findSlug.data?.attributes?.article_pages.data.map((content: any) => { - const { title, description, slug: contentSlug, previewImage: imageData } = content.attributes; - const imageUrl = imageData?.data?.attributes?.url; - const imageAlt = imageData?.data?.attributes?.alternativeText ?? ''; + {theme?.article_pages && + theme?.article_pages[0] && + theme?.article_pages.map((content) => { + if (!content) return null; + const { title, description, slug: contentSlug, previewImage } = content; + const imageUrl = previewImage?.url; + const imageAlt = previewImage?.alternativeText ?? ''; return ( @@ -185,7 +191,7 @@ const ThemePage = async ({ params: { locale, themeSlug } }: Params) => {
- {t('actions.scroll-to-top')} + {t('actions.scroll-to-top')}
diff --git a/apps/vth-frontend/src/app/[locale]/(rootLayout)/[navigationPageSlug]/page.tsx b/apps/vth-frontend/src/app/[locale]/(rootLayout)/[navigationPageSlug]/page.tsx index 2c7853243..6d200cb8a 100644 --- a/apps/vth-frontend/src/app/[locale]/(rootLayout)/[navigationPageSlug]/page.tsx +++ b/apps/vth-frontend/src/app/[locale]/(rootLayout)/[navigationPageSlug]/page.tsx @@ -2,60 +2,56 @@ import { createStrapiURL } from '@frameless/vth-frontend/src/util/createStrapiUR import { fetchData } from '@frameless/vth-frontend/src/util/fetchData'; import { Metadata } from 'next'; import { draftMode } from 'next/headers'; -import Link from 'next/link'; import { notFound } from 'next/navigation'; -import React from 'react'; + +import { Get_Navigation_Page_By_SlugQuery } from '../../../../../gql/graphql'; + import { useTranslation } from '@/app/i18n'; -import { - AccordionProvider, - Breadcrumbs, - Grid, - GridCell, - Heading1, - Markdown, - Page, - PageContent, - ScrollToTopButton, - UtrechtIconChevronUp, -} from '@/components'; +import { AccordionProvider, Grid, GridCell, Heading1, Markdown, Page, PageContent } from '@/components'; import { Card } from '@/components/Card'; import { GET_NAVIGATION_PAGE_BY_SLUG } from '@/query'; import { getImageBaseUrl } from '@/util/getImageBaseUrl'; +import { Breadcrumbs } from '@/components/Breadcrumbs'; +import { ScrollToTopButton } from '@/components/ScrollToTopButton'; type Params = { - params: { + params: Promise<{ locale: string; navigationPageSlug: string; - }; + }>; }; -export async function generateMetadata({ params: { locale, navigationPageSlug } }: Params): Promise { - // eslint-disable-next-line react-hooks/rules-of-hooks - const { data } = await fetchData({ +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { navigationPageSlug } = params; + const { data } = await fetchData({ url: createStrapiURL(), query: GET_NAVIGATION_PAGE_BY_SLUG, - variables: { slug: navigationPageSlug, locale }, + variables: { slug: navigationPageSlug, pageMode: 'PUBLISHED' }, }); return { - title: data.findSlug?.data?.attributes?.title, - description: data.findSlug?.data?.attributes?.description, + title: data.navigationPages?.[0]?.title ?? '', + description: data.navigationPages?.[0]?.description, }; } -const NavigationPage = async ({ params: { locale, navigationPageSlug } }: Params) => { - const { isEnabled } = draftMode(); +const NavigationPage = async (props: Params) => { + const params = await props.params; + const { locale, navigationPageSlug } = params; + const { isEnabled } = await draftMode(); + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['common']); - const { data } = await fetchData({ + const { data } = await fetchData({ url: createStrapiURL(), query: GET_NAVIGATION_PAGE_BY_SLUG, - variables: { slug: navigationPageSlug, locale, pageMode: isEnabled ? 'preview' : 'live' }, + variables: { slug: navigationPageSlug, locale, pageMode: isEnabled ? 'DRAFT' : 'PUBLISHED' }, }); - const navigationPage = data.findSlug?.data; + const navigationPage = data.navigationPages?.[0]; if (!navigationPage) return notFound(); - const content = navigationPage.attributes.content; - const title = navigationPage.attributes.title; - const articles = navigationPage.attributes.article_pages?.data; - const themes = navigationPage.attributes.theme_pages?.data; + const content = navigationPage.content; + const title = navigationPage.title; + const articles = navigationPage.article_pages; + const themes = navigationPage.theme_pages; const DynamicContent = () => content && @@ -88,7 +84,6 @@ const NavigationPage = async ({ params: { locale, navigationPageSlug } }: Params @@ -104,33 +99,36 @@ const NavigationPage = async ({ params: { locale, navigationPageSlug } }: Params {themes?.length > 0 && - themes.map((theme: any) => { - const { title, description, slug: childSlug, previewImage: imageData } = theme.attributes; - const imageUrl = imageData?.data?.attributes?.url; - const imageAlt = imageData?.data?.attributes?.alternativeText ?? ''; + themes.map((theme) => { + if (!theme) return null; + const { title, description, slug: childSlug, previewImage } = theme; + const imageUrl = previewImage?.url; + const imageAlt = previewImage?.alternativeText ?? ''; + return ( ); })} {articles?.length > 0 && - articles.map((article: any) => { - const { title, description, slug: articleSlug, previewImage: imageData } = article.attributes; - const imageUrl = imageData?.data?.attributes?.url; - const imageAlt = imageData?.data?.attributes?.alternativeText ?? ''; + articles.map((article) => { + if (!article) return null; + const { title, description, slug: articleSlug, previewImage } = article; + const imageUrl = previewImage?.url; + const imageAlt = previewImage?.alternativeText ?? ''; return ( @@ -141,7 +139,7 @@ const NavigationPage = async ({ params: { locale, navigationPageSlug } }: Params - {t('actions.scroll-to-top')} + {t('actions.scroll-to-top')} diff --git a/apps/vth-frontend/src/app/[locale]/(rootLayout)/error.tsx b/apps/vth-frontend/src/app/[locale]/(rootLayout)/error.tsx index 52ad863eb..491a0a535 100644 --- a/apps/vth-frontend/src/app/[locale]/(rootLayout)/error.tsx +++ b/apps/vth-frontend/src/app/[locale]/(rootLayout)/error.tsx @@ -2,6 +2,7 @@ import { useParams } from 'next/navigation'; import { useEffect, useState } from 'react'; + import { useTranslation } from '@/app/i18n/client'; import { fallbackLng } from '@/app/i18n/settings'; import { Button, Heading1, Page, PageContent, Paragraph } from '@/components'; diff --git a/apps/vth-frontend/src/app/[locale]/(rootLayout)/layout.tsx b/apps/vth-frontend/src/app/[locale]/(rootLayout)/layout.tsx index e202285df..bd772d259 100644 --- a/apps/vth-frontend/src/app/[locale]/(rootLayout)/layout.tsx +++ b/apps/vth-frontend/src/app/[locale]/(rootLayout)/layout.tsx @@ -4,6 +4,7 @@ import type { Metadata } from 'next'; import { draftMode } from 'next/headers'; import Script from 'next/script'; import React from 'react'; + import { useTranslation } from '@/app/i18n'; import { QueryClientProvider } from '@/client'; import { Footer, FooterData, Header, Page, PreviewAlert, Surface } from '@/components'; @@ -20,18 +21,20 @@ import '../../../styles/globals.css'; interface LayoutProps { children: React.ReactNode; - params: { + params: Promise<{ locale: string; - }; + }>; } type Params = { - params: { + params: Promise<{ locale: string; - }; + }>; }; -export async function generateMetadata({ params: { locale } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, 'common'); return { @@ -42,10 +45,14 @@ export async function generateMetadata({ params: { locale } }: Params): Promise< }; } -const RootLayout = async ({ children, params: { locale } }: LayoutProps) => { +const RootLayout = async (props: LayoutProps) => { + const params = await props.params; + const { locale } = params; + const { children } = props; + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['layout', 'common']); - const { isEnabled } = draftMode(); - const navList = await getNavData({ pageMode: isEnabled ? 'PREVIEW' : 'LIVE' }); + const { isEnabled } = await draftMode(); + const navList = await getNavData({ pageMode: isEnabled ? 'DRAFT' : 'PUBLISHED' }); const footerData = { title: t('footer.title'), @@ -112,7 +119,13 @@ const RootLayout = async ({ children, params: { locale } }: LayoutProps) => { }; return ( - + ; }; -export async function generateMetadata({ params: { locale } }: Params): Promise { +export async function generateMetadata(props: Params): Promise { + const params = await props.params; + const { locale } = params; // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, 'home-page'); return { @@ -41,28 +37,32 @@ export async function generateMetadata({ params: { locale } }: Params): Promise< }; } -const Home = async ({ params: { locale } }: { params: any }) => { - const { isEnabled } = draftMode(); +const Home = async (props: { params: Promise }) => { + const params = await props.params; + const { locale } = params; + const { isEnabled } = await draftMode(); + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['common']); - const { data } = await fetchData({ + const { data } = await fetchData({ url: createStrapiURL(), query: GET_HOMEPAGE, - variables: { locale: locale, pageMode: isEnabled ? 'PREVIEW' : 'LIVE' }, + variables: { locale: locale, pageMode: isEnabled ? 'DRAFT' : 'PUBLISHED' }, }); - const navigationPages = data?.navigationPages?.data; - const bannerAttributes = data?.homepage?.data?.attributes?.bannerImage?.data?.attributes; - if (!data.homepage.data) return notFound(); + if (!data?.homepage) return notFound(); + const navigationPages = data?.navigationPages; + const bannerImage = data?.homepage?.bannerImage; + return ( <> - {bannerAttributes?.url && ( + {bannerImage?.url && ( {bannerAttributes.alternativeText @@ -74,25 +74,26 @@ const Home = async ({ params: { locale } }: { params: any }) => { - {data?.homepage?.data?.attributes?.title} - {data?.homepage?.data?.attributes?.content} + {data?.homepage?.title} + {data?.homepage?.content ?? ''} {navigationPages && - navigationPages.map((navigationPage: any) => { - const { title, description, slug, previewImage: imageData } = navigationPage.attributes; - const imageUrl = imageData?.data?.attributes?.url; - const imageAlt = imageData?.data?.attributes?.alternativeText ?? ''; + navigationPages.map((navigationPage) => { + if (!navigationPage) return null; + const { title, description, slug, previewImage } = navigationPage; + const imageUrl = previewImage?.url; + const imageAlt = previewImage?.alternativeText ?? ''; return ( { - {t('actions.scroll-to-top')} + {t('actions.scroll-to-top')} diff --git a/apps/vth-frontend/src/app/[locale]/(rootLayout)/print/page.tsx b/apps/vth-frontend/src/app/[locale]/(rootLayout)/print/page.tsx index 413fad28b..cf4c0a473 100644 --- a/apps/vth-frontend/src/app/[locale]/(rootLayout)/print/page.tsx +++ b/apps/vth-frontend/src/app/[locale]/(rootLayout)/print/page.tsx @@ -8,85 +8,53 @@ import { RichText, } from '@utrecht/component-library-react'; import React from 'react'; + +import { Get_Print_PageQuery } from '../../../../../gql/graphql'; + import { useTranslation } from '@/app/i18n'; -import { AccordionProvider, Grid, GridCell, Markdown, ScrollToTopButton, UtrechtIconChevronUp } from '@/components'; -import { Page, PageContent } from '@/components'; +import { AccordionProvider, Grid, GridCell, Markdown, Page, PageContent } from '@/components'; import { PrintButton } from '@/components/PrintButton'; import { GET_PRINT_PAGE } from '@/query'; import { createStrapiURL } from '@/util/createStrapiURL'; import { fetchData } from '@/util/fetchData'; import { getImageBaseUrl } from '@/util/getImageBaseUrl'; +import { ScrollToTopButton } from '@/components/ScrollToTopButton'; import '@/styles/print.css'; import '@/styles/space.css'; -type PrintPageData = { - title: string; - versiondate: string; - introductionBody: string; -}; - -type ArticlePage = { - title: string; - content: any[]; -}; - -type ArticlePagesResponse = { - data: { - attributes: ArticlePage; - }[]; -}; - -type ThemePage = { - title: string; - content: any[]; - article_pages: ArticlePagesResponse; -}; - -type ThemePagesResponse = { - data: { - attributes: ThemePage; - }[]; -}; - -type NavigationPage = { - title: string; - content: any[]; - theme_pages: ThemePagesResponse; - article_pages: ArticlePagesResponse; -}; - -type NavigationPagesResponse = { - data: { - attributes: NavigationPage; - }[]; -}; - -const PrintPage = async ({ params: { locale } }: { params: { locale: string } }) => { +const PrintPage = async (props: { params: Promise<{ locale: string }> }) => { + const params = await props.params; + const { locale } = params; + // eslint-disable-next-line react-hooks/rules-of-hooks const { t } = await useTranslation(locale, ['common']); - const { data } = await fetchData({ + const { data } = await fetchData({ url: createStrapiURL(), query: GET_PRINT_PAGE, variables: { locale: locale }, }); - const printPageData: PrintPageData = data?.printPage?.data?.attributes; - const navigationPagesResponse: NavigationPagesResponse = data?.navigationPages; + const printPageData = data?.printPage; + const navigationPages = data?.navigationPages; - navigationPagesResponse?.data?.sort((a, b) => { - return a.attributes.title.localeCompare(b.attributes.title); + navigationPages?.sort((a, b) => { + return (a?.title ?? '').localeCompare(b?.title ?? ''); }); - navigationPagesResponse?.data?.forEach(({ attributes: navigationPage }) => { - navigationPage.theme_pages?.data?.sort((a, b) => { - return a.attributes.title.localeCompare(b.attributes.title); + navigationPages?.forEach((navigationPage) => { + if (!navigationPage) return; + + navigationPage.theme_pages?.sort((a, b) => { + return (a?.title ?? '').localeCompare(b?.title ?? ''); }); - navigationPage.article_pages?.data?.sort((a, b) => { - return a.attributes.title.localeCompare(b.attributes.title); + navigationPage.article_pages?.sort((a, b) => { + return (a?.title ?? '').localeCompare(b?.title ?? ''); }); - navigationPage.theme_pages?.data?.forEach(({ attributes: themePage }) => { - themePage.article_pages?.data?.sort((a, b) => { - return a.attributes.title.localeCompare(b.attributes.title); + navigationPage.theme_pages?.forEach((themePage) => { + if (!themePage) return; + + themePage.article_pages?.sort((a, b) => { + return (a?.title ?? '').localeCompare(b?.title ?? ''); }); }); }); @@ -105,13 +73,14 @@ const PrintPage = async ({ params: { locale } }: { params: { locale: string } })
Inhoudsopgave - +
- {navigationPagesResponse.data[0] && - navigationPagesResponse.data.map(({ attributes: navigationPage }, index) => { + {navigationPages?.[0] && + navigationPages.map((navigationPage, index) => { + if (!navigationPage) return null; return ( {NavigationPageDisplay(navigationPage, (index + 1).toString())} @@ -122,7 +91,7 @@ const PrintPage = async ({ params: { locale } }: { params: { locale: string } }) - {t('actions.scroll-to-top')} + {t('actions.scroll-to-top')} @@ -130,26 +99,26 @@ const PrintPage = async ({ params: { locale } }: { params: { locale: string } }) ); }; -const TableOfContents = ({ navigationPagesResponse }: { navigationPagesResponse: NavigationPagesResponse }) => { +const TableOfContents = ({ navigationPages }: { navigationPages: Get_Print_PageQuery['navigationPages'] }) => { return (
    - {navigationPagesResponse.data[0] && - navigationPagesResponse.data.map(({ attributes: navigationPage }, index) => { + {navigationPages?.[0] && + navigationPages?.map((navigationPage, index) => { return (
  1. - {navigationPage.title} + {navigationPage?.title}
      - {navigationPage.theme_pages.data && - navigationPage.theme_pages.data.map(({ attributes: themePage }, index) => { + {navigationPage?.theme_pages && + navigationPage.theme_pages.map((themePage, index) => { return (
    1. - {themePage.title} + {themePage?.title}
        - {themePage.article_pages.data && - themePage.article_pages.data.map(({ attributes: articlePage }, index) => { + {themePage?.article_pages && + themePage.article_pages.map((articlePage, index) => { return (
      1. - {articlePage.title} + {articlePage?.title}
      2. ); })} @@ -157,11 +126,11 @@ const TableOfContents = ({ navigationPagesResponse }: { navigationPagesResponse: ); })} - {navigationPage.article_pages.data && - navigationPage.article_pages.data.map(({ attributes: articlePage }, index) => { + {navigationPage?.article_pages && + navigationPage.article_pages.map((articlePage, index) => { return (
      3. - {articlePage.title} + {articlePage?.title}
      4. ); })} @@ -206,7 +175,10 @@ const DynamicContent: React.FC<{ ); -const NavigationPageDisplay = (navigationPage: NavigationPage, indexString: string) => { +const NavigationPageDisplay = ( + navigationPage: NonNullable, + indexString: string, +) => { let levelIndex = 0; return ( @@ -214,41 +186,51 @@ const NavigationPageDisplay = (navigationPage: NavigationPage, indexString: stri {indexString}. {navigationPage.title} - - {navigationPage.theme_pages.data && - navigationPage.theme_pages.data.map(({ attributes: themePage }) => { + + {navigationPage.theme_pages && + navigationPage.theme_pages?.map((themePage) => { + if (!themePage) return null; + return ThemePageDisplay(themePage, `${indexString}.${++levelIndex}`); })} - {navigationPage.article_pages.data && - navigationPage.article_pages.data.map(({ attributes: articlePage }) => { + {navigationPage.article_pages && + navigationPage.article_pages.map((articlePage) => { + if (!articlePage) return null; return ArticlePageDisplay(articlePage, `${indexString}.${++levelIndex}`); })} ); }; -const ThemePageDisplay = (themePage: ThemePage, indexString: string) => { +const ThemePageDisplay = ( + themePage: NonNullable['theme_pages'][number], + indexString: string, +) => { return ( - - {indexString}. {themePage.title} + + {indexString}. {themePage?.title} - - {themePage.article_pages.data && - themePage.article_pages.data.map(({ attributes: articlePage }, index) => { + + {themePage?.article_pages && + themePage.article_pages.map((articlePage, index) => { + if (!articlePage) return null; return ArticlePageDisplay(articlePage, `${indexString}.${index + 1}`); })} ); }; -const ArticlePageDisplay = (articlePage: ArticlePage, indexString: string) => { +const ArticlePageDisplay = ( + articlePage: NonNullable['article_pages'][number], + indexString: string, +) => { return ( - - {indexString}. {articlePage.title} + + {indexString}. {articlePage?.title} - + ); }; diff --git a/apps/vth-frontend/src/app/[locale]/sitemap.ts b/apps/vth-frontend/src/app/[locale]/sitemap.ts index cd2083867..6e5060ee0 100644 --- a/apps/vth-frontend/src/app/[locale]/sitemap.ts +++ b/apps/vth-frontend/src/app/[locale]/sitemap.ts @@ -1,22 +1,23 @@ import { MetadataRoute } from 'next'; import { cookies } from 'next/headers'; + +import { GetAllAriclesSlugsQuery, GetNavigationPagesQuery, GetAllThemeSlugsQuery } from '@/../../gql/graphql'; + import { GET_ALL_ARTICLES_SLUGS, GET_ALL_THEME_SLUGS, GET_NAVIGATION_PAGES } from '@/query'; import { createStrapiURL } from '@/util/createStrapiURL'; import { fetchData } from '@/util/fetchData'; const { origin } = new URL(process.env.FRONTEND_PUBLIC_URL || 'http://localhost:3000'); -export type Attributes = { + +export type UrlItem = { slug: string; updatedAt: string; }; -export type Urls = { - attributes: Attributes; -}; export interface GenerateUrlParameter { locale?: string; origin: string; segment?: string; - urls: Urls[]; + urls: UrlItem[]; } const constructHref = ({ segments, baseURL }: { segments: any[]; baseURL: string | URL }) => { const href = new URL( @@ -33,43 +34,69 @@ export const generateUrl = ({ locale, origin, segment, urls }: GenerateUrlParame return isURls ? urls.map((url) => ({ - url: constructHref({ segments: [origin, locale, segment, url.attributes.slug], baseURL: new URL(origin) }), - lastModified: url.attributes.updatedAt, + url: constructHref({ segments: [origin, locale, segment, url.slug], baseURL: new URL(origin) }), + lastModified: url.updatedAt, })) : []; }; export default async function sitemap(): Promise { - const locale = cookies().get('i18next')?.value; + const locale = (await cookies()).get('i18next')?.value; const staticPages = generateUrl({ locale, origin, urls: [ { - attributes: { slug: '', updatedAt: new Date().toISOString() }, // home page + slug: '', + updatedAt: new Date().toISOString(), }, ], }); - const { data: articleSlugsData } = await fetchData({ + const { data: articleSlugsData } = await fetchData({ url: createStrapiURL(), query: GET_ALL_ARTICLES_SLUGS, }); - const { data: navigationSlugsData } = await fetchData({ + const { data: navigationSlugsData } = await fetchData({ url: createStrapiURL(), query: GET_NAVIGATION_PAGES, }); - const { data: themeSlugsData } = await fetchData({ + const { data: themeSlugsData } = await fetchData({ url: createStrapiURL(), query: GET_ALL_THEME_SLUGS, }); - const articlePages = generateUrl({ locale, origin, segment: 'article', urls: articleSlugsData.articlePages.data }); + const articlePages = generateUrl({ + locale, + origin, + segment: 'article', + urls: articleSlugsData.articlePages + .filter((page) => page?.slug && page?.updatedAt) + .map((page) => ({ + slug: page!.slug!, + updatedAt: page!.updatedAt!, + })), + }); const navigationPages = generateUrl({ locale, origin, - urls: navigationSlugsData?.navigationPages?.data, + urls: navigationSlugsData?.navigationPages + .filter((page) => page?.slug && page?.updatedAt) + .map((page) => ({ + slug: page!.slug!, + updatedAt: page!.updatedAt!, + })), + }); + const themePages = generateUrl({ + locale, + origin, + segment: 'theme', + urls: themeSlugsData?.themePages + .filter((page) => page?.slug && page?.updatedAt) + .map((page) => ({ + slug: page!.slug!, + updatedAt: page!.updatedAt!, + })), }); - const themePages = generateUrl({ locale, origin, segment: 'theme', urls: themeSlugsData?.themePages?.data }); const fields = [...articlePages, ...themePages, ...staticPages, ...navigationPages]; diff --git a/apps/vth-frontend/src/app/api/clear-preview/route.ts b/apps/vth-frontend/src/app/api/clear-preview/route.ts index 63ee2430a..2c6e12932 100644 --- a/apps/vth-frontend/src/app/api/clear-preview/route.ts +++ b/apps/vth-frontend/src/app/api/clear-preview/route.ts @@ -2,6 +2,6 @@ import { draftMode } from 'next/headers'; import { redirect } from 'next/navigation'; export async function GET(_request: Request) { - draftMode().disable(); + (await draftMode()).disable(); redirect('/'); } diff --git a/apps/vth-frontend/src/app/api/preview/route.ts b/apps/vth-frontend/src/app/api/preview/route.ts index 083d09177..f753e37d4 100644 --- a/apps/vth-frontend/src/app/api/preview/route.ts +++ b/apps/vth-frontend/src/app/api/preview/route.ts @@ -1,5 +1,6 @@ import { draftMode } from 'next/headers'; import { redirect } from 'next/navigation'; + import { GET_ARTICLE_BY_SLUG, GET_HOMEPAGE, GET_NAVIGATION_PAGE_BY_SLUG, GET_THEME_BY_SLUG } from '@/query'; import { createStrapiURL } from '@/util/createStrapiURL'; import { fetchData } from '@/util/fetchData'; @@ -50,7 +51,7 @@ export async function GET(request: Request) { url: createStrapiURL(), query: getCurrentPage(type).query, variables: { - pageMode: 'PREVIEW', + pageMode: 'DRAFT', }, }); @@ -60,7 +61,7 @@ export async function GET(request: Request) { const path = getCurrentPage(type).path; // Enable Draft Mode by setting the cookie - draftMode().enable(); + (await draftMode()).enable(); // Redirect to the path from the fetched post // We don't redirect to searchParams.slug as that might lead to open redirect vulnerabilities redirect(path ? path : '/'); diff --git a/apps/vth-frontend/src/app/i18n/client.ts b/apps/vth-frontend/src/app/i18n/client.ts index 55a20f62b..c1a284d50 100644 --- a/apps/vth-frontend/src/app/i18n/client.ts +++ b/apps/vth-frontend/src/app/i18n/client.ts @@ -5,6 +5,7 @@ import LanguageDetector from 'i18next-browser-languagedetector'; import resourcesToBackend from 'i18next-resources-to-backend'; import { useEffect } from 'react'; import { initReactI18next, useTranslation as useTranslationOrg } from 'react-i18next'; + import { getOptions } from './settings'; // on client side the normal singleton is ok diff --git a/apps/vth-frontend/src/app/i18n/index.ts b/apps/vth-frontend/src/app/i18n/index.ts index a202de7fc..e9b2b2d99 100644 --- a/apps/vth-frontend/src/app/i18n/index.ts +++ b/apps/vth-frontend/src/app/i18n/index.ts @@ -3,6 +3,7 @@ import { createInstance, InitOptions } from 'i18next'; import resourcesToBackend from 'i18next-resources-to-backend'; import { initReactI18next } from 'react-i18next/initReactI18next'; + import { getOptions } from './settings'; const initI18next = async (locale: string, ns: string | string[]) => { diff --git a/apps/vth-frontend/src/client.tsx b/apps/vth-frontend/src/client.tsx index 8c6ae88f3..2e12daa75 100644 --- a/apps/vth-frontend/src/client.tsx +++ b/apps/vth-frontend/src/client.tsx @@ -4,6 +4,6 @@ import React from 'react'; const queryClient = new QueryClient(); -export const QueryClientProvider = ({ children }: any) => { +export const QueryClientProvider = ({ children }: React.PropsWithChildren) => { return {children}; }; diff --git a/apps/vth-frontend/src/components/Breadcrumbs.tsx b/apps/vth-frontend/src/components/Breadcrumbs.tsx new file mode 100644 index 000000000..883a30ed1 --- /dev/null +++ b/apps/vth-frontend/src/components/Breadcrumbs.tsx @@ -0,0 +1,16 @@ +'use client'; + +import { Breadcrumbs as UIBreadcrumbs } from '@frameless/ui'; +import type { BreadcrumbNavProps } from '@utrecht/component-library-react'; +import Link from 'next/link'; +import { ComponentType } from 'react'; + +type BreadcrumbLinkType = { href: string; label: string; current: boolean }; + +interface BreadcrumbsProps extends BreadcrumbNavProps { + links: BreadcrumbLinkType[]; + backLink?: BreadcrumbLinkType; + label?: string; +} + +export const Breadcrumbs = (props: BreadcrumbsProps) => } />; diff --git a/apps/vth-frontend/src/components/Card/index.module.scss b/apps/vth-frontend/src/components/Card/index.module.css similarity index 51% rename from apps/vth-frontend/src/components/Card/index.module.scss rename to apps/vth-frontend/src/components/Card/index.module.css index 7567d2c3a..eb0d9fee3 100644 --- a/apps/vth-frontend/src/components/Card/index.module.scss +++ b/apps/vth-frontend/src/components/Card/index.module.css @@ -3,17 +3,18 @@ block-size: 100%; inline-size: 100%; min-block-size: 312px; - &:not(:has(img)) { - padding-block-start: var(--utrecht-heading-2-margin-block-start); - } +} + +.utrecht-card:not(:has(img)) { + padding-block-start: var(--utrecht-heading-2-margin-block-start); +} - &:hover { - --utrecht-link-text-decoration: underline; - --utrecht-link-text-decoration-thickness: var(--utrecht-link-hover-text-decoration-thickness); +.utrecht-card:hover { + --utrecht-link-text-decoration: underline; + --utrecht-link-text-decoration-thickness: var(--utrecht-link-hover-text-decoration-thickness); - cursor: pointer; - text-decoration-skip-ink: none; - } + cursor: pointer; + text-decoration-skip-ink: none; } .utrecht-card__image { diff --git a/apps/vth-frontend/src/components/Card/index.tsx b/apps/vth-frontend/src/components/Card/index.tsx index 49d06d237..eb6d3e8cc 100644 --- a/apps/vth-frontend/src/components/Card/index.tsx +++ b/apps/vth-frontend/src/components/Card/index.tsx @@ -3,9 +3,11 @@ import classnames from 'classnames/bind'; import Image from 'next/image'; import Link from 'next/link'; -import React, { FC, HTMLAttributes } from 'react'; +import { type HTMLAttributes, useRef } from 'react'; + +import styles from './index.module.css'; + import { Heading2, Paragraph } from '@/components'; -import styles from './index.module.scss'; const css = classnames.bind(styles); @@ -21,12 +23,22 @@ interface CardProps extends Omit, 'children'> { }; } -export const Card: FC = ({ description, title, image: { url = '', alt }, link: { href }, ...props }) => { - const linkRef = React.useRef(null); +export const Card = ({ description, title, image: { url = '', alt }, link: { href }, ...props }: CardProps) => { + const linkRef = useRef(null); return (
        linkRef.current?.click()}> - {url && {alt}} + {url && ( + {alt} + )}
        diff --git a/apps/vth-frontend/src/components/ClientLanguageSwitcher.tsx b/apps/vth-frontend/src/components/ClientLanguageSwitcher.tsx index b9698a37f..320e84430 100644 --- a/apps/vth-frontend/src/components/ClientLanguageSwitcher.tsx +++ b/apps/vth-frontend/src/components/ClientLanguageSwitcher.tsx @@ -3,21 +3,25 @@ import { useQuery } from '@tanstack/react-query'; import { useParams, usePathname, useSelectedLayoutSegment } from 'next/navigation'; import React from 'react'; -import { createURL } from '@/util/create-url'; -import { fetchData } from '@/util/fetchData'; -import { LanguageSwitcher, LanguageSwitcherSkeleton } from './LanguageSwitcher'; + import { fallbackLng, languages } from '../app/i18n/settings'; -export interface Localizations { - locale: string; - slug: string; -} +import { LanguageSwitcher, LanguageSwitcherSkeleton } from './LanguageSwitcher'; +import { createURL } from '@/util/create-url'; +import { fetchData } from '@/util/fetchData'; export interface ClientLanguageSwitcherProps { localizations?: Localizations[]; locales: typeof languages; currentLocale: string; } +export interface Localizations { + locale: string; + slug: string; +} +export interface LocalizationsResponse { + localizations: Localizations[]; +} export const ClientLanguageSwitcher = ({ locales, currentLocale }: ClientLanguageSwitcherProps) => { const pathName = usePathname(); @@ -37,15 +41,26 @@ export const ClientLanguageSwitcher = ({ locales, currentLocale }: ClientLanguag locale: params.locale, segment: currentSegment, }; + const getSlugsURL = createURL('/api/current-pathname', getSlugsURLParams); const { data, isFetching } = useQuery({ queryKey: ['getSlugs'], enabled: !!params.slug, - queryFn: async () => fetchData({ url: getSlugsURL, method: 'GET' }), + queryFn: async () => fetchData({ url: getSlugsURL, method: 'GET' }), }); - if (!isFetching && data?.localizations.length > 0) { - return ; + if (!isFetching && data?.data?.localizations && data.data.localizations.length > 0) { + return ( + ({ + pathname: redirectedPathName(locale) + .replace(params.locale as string, locale) + .replace(/[^/]+$/, slug), + locale, + }))} + currentLocale={currentLocale} + /> + ); } return !isFetching ? ( diff --git a/apps/vth-frontend/src/components/Header/index.tsx b/apps/vth-frontend/src/components/Header/index.tsx index a6df33561..f344bd5cb 100644 --- a/apps/vth-frontend/src/components/Header/index.tsx +++ b/apps/vth-frontend/src/components/Header/index.tsx @@ -39,7 +39,6 @@ export const Header = ({ navList, logo: { ariaLabel, href } }: HeaderProps) => ( {navList && ( ) : null; }, diff --git a/apps/vth-frontend/src/components/ScrollToTopButton.tsx b/apps/vth-frontend/src/components/ScrollToTopButton.tsx new file mode 100644 index 000000000..47df48298 --- /dev/null +++ b/apps/vth-frontend/src/components/ScrollToTopButton.tsx @@ -0,0 +1,11 @@ +'use client'; + +import { ScrollToTopButton as UIScrollToTopButton, type ScrollToTopButtonProps } from '@frameless/ui'; +import { UtrechtIconChevronUp } from '@utrecht/web-component-library-react'; +import dynamic from 'next/dynamic'; + +const ScrollToTopButtonWithClient = (props: ScrollToTopButtonProps) => ( + +); + +export const ScrollToTopButton = dynamic(() => Promise.resolve(ScrollToTopButtonWithClient), { ssr: false }); diff --git a/apps/vth-frontend/src/components/index.tsx b/apps/vth-frontend/src/components/index.tsx index 30f99bb47..45bf8fcd0 100644 --- a/apps/vth-frontend/src/components/index.tsx +++ b/apps/vth-frontend/src/components/index.tsx @@ -1,16 +1,26 @@ 'use client'; -import dynamic from 'next/dynamic'; - export * from '@utrecht/component-library-react'; export * from '@utrecht/web-component-library-react'; -export * from '@frameless/ui'; +export { + AdvancedLink, + Footer, + Grid, + GridCell, + Img, + LanguageSwitcher, + LanguageSwitcherSkeleton, + Nav, + Navigation, + NavigationList, + PreviewAlert, + ScrollToTopButton, + type FooterData, + type HeadingLevel, + type LanguageSwitcherProps, + type NavigationListType, + type NavProps, + type PreviewAlertProps, +} from '@frameless/ui'; export { Markdown } from './Markdown'; export { Header } from './Header'; -export const Breadcrumbs = dynamic( - async () => { - const Component = (await import('@frameless/ui')).Breadcrumbs; - return { default: Component }; - }, - { ssr: false }, -); diff --git a/apps/vth-frontend/src/middleware.ts b/apps/vth-frontend/src/proxy.ts similarity index 91% rename from apps/vth-frontend/src/middleware.ts rename to apps/vth-frontend/src/proxy.ts index 376142a02..ed0d84549 100644 --- a/apps/vth-frontend/src/middleware.ts +++ b/apps/vth-frontend/src/proxy.ts @@ -1,6 +1,6 @@ import acceptLanguage from 'accept-language'; -import { NextResponse } from 'next/server'; -import { NextRequest } from 'next/server'; +import { NextResponse, NextRequest } from 'next/server'; + import { fallbackLng, languages } from './app/i18n/settings'; acceptLanguage.languages(languages); @@ -10,7 +10,7 @@ export const config = { const cookieName = 'i18next'; -export function middleware(req: NextRequest) { +export function proxy(req: NextRequest) { if (req.nextUrl.pathname.indexOf('icon') > -1 || req.nextUrl.pathname.indexOf('chrome') > -1) return NextResponse.next(); let lng; diff --git a/apps/vth-frontend/src/query/index.ts b/apps/vth-frontend/src/query/index.ts index 1ad6234cd..0cc38751d 100644 --- a/apps/vth-frontend/src/query/index.ts +++ b/apps/vth-frontend/src/query/index.ts @@ -1,324 +1,241 @@ const gql = (query: any) => query; export const GET_NOT_FOUND_PAGE = gql(` -query getNotFoundPage{ +query getNotFoundPage { notFoundPage { - data { - attributes { - title - body - } - } + title + body } } `); export const GET_HOMEPAGE = gql(` -query getHomepage($pageMode: PublicationState) { - homepage(publicationState: $pageMode) { - data { - attributes { - title - content - bannerImage { - data { - attributes { - url - alternativeText - } - } - } - } +query getHomepage($pageMode: PublicationStatus) { + homepage(status: $pageMode) { + title + content + bannerImage { + url + alternativeText } } - navigationPages(publicationState: $pageMode, sort: ["order:asc", "title:asc"]) { - data { - id - attributes { - title - slug - description - previewImage { - data { - attributes { - url - alternativeText - } - } - } - } + + navigationPages( + status: $pageMode + sort: ["order:asc", "title:asc"] + ) { + documentId + title + slug + description + previewImage { + url + alternativeText } } -}`); +} +`); export const GET_NAVIGATION_PAGES = gql(` -query getNavigationPages($pageMode: PublicationState) { +query getNavigationPages($pageMode: PublicationStatus) { navigationPages( - publicationState: $pageMode + status: $pageMode sort: ["order:asc", "title:asc"] pagination: { start: 0, limit: -1 } ) { - data { - id - attributes { - title - slug - updatedAt - } - } + documentId + title + slug + updatedAt } -}`); +} +`); export const GET_NAVIGATION_PAGE_BY_SLUG = gql(` -query GET_NAVIGATION_PAGE_BY_SLUG($slug: String, $pageMode: String) { - findSlug( - modelName: "navigation-page" - slug: $slug - publicationState: $pageMode +query GET_NAVIGATION_PAGE_BY_SLUG($slug: String, $pageMode: PublicationStatus) { + navigationPages( + filters: { slug: { eq: $slug } } + status: $pageMode ) { - ... on NavigationPageEntityResponse { - data { - id - attributes { - title - description - slug - content { - ... on ComponentComponentsUtrechtRichText { - __typename - content - } - ... on ComponentComponentsUtrechtAccordion { - __typename - item { - id - label - body - headingLevel - } - } - } - theme_pages { - data { - attributes { - title - slug - description - previewImage { - data { - attributes { - url - alternativeText - } - } - } - } - } - } - article_pages { - data { - attributes { - title - slug - description - previewImage { - data { - attributes { - url - alternativeText - } - } - } - } - } - } + documentId + title + description + slug + + content { + __typename + ... on ComponentComponentsUtrechtRichText { + content + } + ... on ComponentComponentsUtrechtAccordion { + item { + id + label + body + headingLevel } } } + + theme_pages { + title + slug + description + previewImage { + url + alternativeText + } + } + + article_pages { + title + slug + description + previewImage { + url + alternativeText + } + } } } `); export const GET_THEME_BY_SLUG = gql(` -query GET_THEME_BY_SLUG($slug: String, $pageMode: String) { - findSlug(modelName: "theme-page", slug: $slug, publicationState: $pageMode) { - ... on ThemePageEntityResponse { - data { - id - attributes { - title - description - content { - ... on ComponentComponentsUtrechtRichText{ - __typename - content - } - ... on ComponentComponentsUtrechtAccordion { - __typename - item { - id - label - body - headingLevel - } - } - } - navigation_pages { - data { - attributes { - title - slug - theme_pages { - data { - attributes { - title - slug - } - } - } - article_pages { - data { - attributes { - title - slug - } - } - } - } - } - } - article_pages { - data { - attributes { - title - slug - description - previewImage { - data { - attributes { - url - alternativeText - } - } - } - } - } - } +query GET_THEME_BY_SLUG($slug: String, $pageMode: PublicationStatus) { + themePages( + filters: { slug: { eq: $slug } } + status: $pageMode + ) { + documentId + title + description + slug + + content { + __typename + ... on ComponentComponentsUtrechtRichText { + content + } + ... on ComponentComponentsUtrechtAccordion { + item { + id + label + body + headingLevel } } } + + navigation_pages { + title + slug + + theme_pages { + title + slug + } + + article_pages { + title + slug + } + } + + article_pages { + title + slug + description + previewImage { + url + alternativeText + } + } } } `); export const GET_ALL_THEME_SLUGS = gql(` query getAllThemeSlugs { - themePages(sort: ["title:asc"], pagination: { start: 0, limit: -1 }) { - data { - id - attributes { - title - slug - updatedAt - } - } + themePages( + sort: ["title:asc"] + pagination: { start: 0, limit: -1 } + ) { + documentId + title + slug + updatedAt } } `); export const GET_ALL_ARTICLES_SLUGS = gql(` query getAllAriclesSlugs { - articlePages(pagination: { start: 0, limit: -1 }, sort: ["title:asc"]) { - data { - attributes { - title - slug - updatedAt - } - } + articlePages( + pagination: { start: 0, limit: -1 } + sort: ["title:asc"] + ) { + title + slug + updatedAt } } `); export const GET_ARTICLE_BY_SLUG = gql(` -query GET_ARTICLE_BY_SLUG($slug: String, $pageMode: String) { - findSlug( - modelName: "article-page" - slug: $slug - publicationState: $pageMode +query GET_ARTICLE_BY_SLUG($slug: String, $pageMode: PublicationStatus) { + articlePages( + filters: { slug: { eq: $slug } } + status: $pageMode ) { - ... on ArticlePageEntityResponse { - data { - id - attributes { - title - description - content { - ... on ComponentComponentsUtrechtRichText { - __typename - content - } - ... on ComponentComponentsUtrechtAccordion { - __typename - item { - id - label - body - headingLevel - } - } - } - theme_pages { - data { - attributes { - title - slug - navigation_pages { - data { - attributes { - title - slug - } - } - } - article_pages { - data { - attributes { - title - slug - } - } - } - } - } - } - navigation_pages { - data { - attributes { - title - slug - article_pages { - data { - attributes { - title - slug - } - } - } - theme_pages { - data { - attributes { - title - slug - } - } - } - } - } - } + documentId + title + description + slug + + content { + __typename + ... on ComponentComponentsUtrechtRichText { + content + } + ... on ComponentComponentsUtrechtAccordion { + item { + id + label + body + headingLevel } } } + + theme_pages { + title + slug + + navigation_pages { + title + slug + } + + article_pages { + title + slug + } + } + + navigation_pages { + title + slug + + article_pages { + title + slug + } + + theme_pages { + title + slug + } + } } } `); @@ -326,19 +243,52 @@ query GET_ARTICLE_BY_SLUG($slug: String, $pageMode: String) { export const GET_PRINT_PAGE = gql(` query GET_PRINT_PAGE { printPage { - data { - attributes { - title - versiondate - introductionBody + title + versiondate + introductionBody + } + + navigationPages(sort: ["order:asc", "title:asc"]) { + documentId + title + + content { + ... on ComponentComponentsUtrechtRichText { + __typename + content + } + ... on ComponentComponentsUtrechtAccordion { + __typename + item { + id + label + body + headingLevel + } } } - } - navigationPages(sort: ["order:asc", "title:asc"]){ - data { - id - attributes { + + theme_pages { + title + + content { + ... on ComponentComponentsUtrechtRichText { + __typename + content + } + ... on ComponentComponentsUtrechtAccordion { + __typename + item { + id + label + body + } + } + } + + article_pages { title + content { ... on ComponentComponentsUtrechtRichText { __typename @@ -354,199 +304,105 @@ query GET_PRINT_PAGE { } } } - theme_pages { - data { - attributes { - title - content { - ... on ComponentComponentsUtrechtRichText { - __typename - content - } - ... on ComponentComponentsUtrechtAccordion { - __typename - item { - id - label - body - } - } - } - article_pages { - data { - attributes { - title - content { - ... on ComponentComponentsUtrechtRichText { - __typename - content - } - ... on ComponentComponentsUtrechtAccordion { - __typename - item { - id - label - body - headingLevel - } - } - } - } - } - } - } - } + } + } + + article_pages { + title + + content { + ... on ComponentComponentsUtrechtRichText { + __typename + content } - article_pages { - data { - attributes { - title - content { - ... on ComponentComponentsUtrechtRichText { - __typename - content - } - ... on ComponentComponentsUtrechtAccordion { - __typename - item { - id - label - body - headingLevel - } - } - } - } + ... on ComponentComponentsUtrechtAccordion { + __typename + item { + id + label + body + headingLevel } } - } } } -}`); +} +`); export const GET_NAVIGATION_DATA = gql(` query getNavigationData( - $pageMode: PublicationState + $pageMode: PublicationStatus $themeSlug: String $articleSlug: String ) { navigationPages( - publicationState: $pageMode + status: $pageMode sort: ["order:asc", "title:asc"] pagination: { start: 0, limit: -1 } ) { - data { - attributes { + title + slug + + theme_pages( + filters: { + slug: { eq: $themeSlug } + article_pages: { slug: { eq: $articleSlug } } + } + ) { + title + slug + + article_pages { + title + slug + } + } + + article_pages( + filters: { + theme_pages: { slug: { eq: $themeSlug } } + slug: { eq: $articleSlug } + } + ) { + title + slug + + theme_pages { title slug - theme_pages( - filters: { - slug: { eq: $themeSlug } - article_pages: { slug: { eq: $articleSlug } } - } - ) { - data { - attributes { - title - slug - article_pages { - data { - attributes { - title - slug - } - } - } - } - } - } - article_pages( - filters: { - theme_pages: { slug: { eq: $themeSlug } } - slug: { eq: $articleSlug } - } - ) { - data { - attributes { - title - slug - theme_pages { - data { - attributes { - title - slug - } - } - } - } - } - } } } } + currentLink: navigationPages( - publicationState: $pageMode - sort: ["order:asc", "title:asc"] - pagination: { start: 0, limit: -1 } + status: $pageMode filters: { theme_pages: { slug: { eq: $themeSlug } } article_pages: { slug: { eq: $articleSlug } } } ) { - data { - attributes { + title + slug + order + + theme_pages { + slug + title + + article_pages { + title + slug + } + } + + article_pages { + title + slug + + theme_pages { title slug - order - theme_pages( - publicationState: $pageMode - sort: ["title:asc"] - pagination: { start: 0, limit: -1 } - ) { - data { - attributes { - slug - title - article_pages( - publicationState: $pageMode - sort: ["title:asc"] - pagination: { start: 0, limit: -1 } - ) { - data { - attributes { - title - slug - } - } - } - } - } - } - article_pages( - publicationState: $pageMode - sort: ["title:asc"] - pagination: { start: 0, limit: -1 } - ) { - data { - attributes { - title - slug - theme_pages( - publicationState: $pageMode - sort: ["title:asc"] - pagination: { start: 0, limit: -1 } - ) { - data { - attributes { - title - slug - } - } - } - } - } - } } } } diff --git a/apps/vth-frontend/src/styles/globals.css b/apps/vth-frontend/src/styles/globals.css index 458fdb0b9..69417d115 100644 --- a/apps/vth-frontend/src/styles/globals.css +++ b/apps/vth-frontend/src/styles/globals.css @@ -1,24 +1,29 @@ h1 { --utrecht-emphasis-strong-font-weight: var(--utrecht-heading-1-font-weight); } + h2 { --utrecht-emphasis-strong-font-weight: var(--utrecht-heading-2-font-weight); } + h3 { --utrecht-emphasis-strong-font-weight: var(--utrecht-heading-3-font-weight); } + h4 { --utrecht-emphasis-strong-font-weight: var(--utrecht-heading-4-font-weight); } + h5 { --utrecht-emphasis-strong-font-weight: var(--utrecht-heading-5-font-weight); } + h6 { --utrecht-emphasis-strong-font-weight: var(--utrecht-heading-6-font-weight); } /* mobile-verse */ -.utrecht-vth-theme { +.utrecht-theme.utrecht-vth-theme { --utrecht-space-around: 1; --utrecht-list-social-margin-block-start: 24px; --utrecht-page-header-background-color: var(--utrecht-color-white); @@ -87,11 +92,6 @@ h6 { padding-inline: 0; } -/* nav-open */ -.utrecht-vth-theme:has(.utrecht-drawer[open]) { - --utrecht-page-padding-inline-end: 8px; -} - /* --- navigation tokens end --- */ a { @@ -115,10 +115,6 @@ a { margin-inline-start: var(--utrecht-logo-wrapper-margin-block-start, 16px); } -.utrecht-navigation--mobile:has(button[aria-expanded="false"]) { - padding-inline-end: var(--utrecht-navigation-toggle-button-padding-end); -} - .utrecht-page-header { --utrecht-page-padding-inline-start: 0; --utrecht-page-padding-inline-end: 0; @@ -231,3 +227,10 @@ footer.utrecht-footer { padding-inline-end: 0; padding-inline-start: 0; } + +/* Preserve aspect ratio when resizing via CSS (Next.js 16) +https://nextjs.org/docs/app/api-reference/components/image */ +img { + block-size: 100%; + inline-size: 100%; +} diff --git a/apps/vth-frontend/src/styles/print.css b/apps/vth-frontend/src/styles/print.css index 83f5a11c5..aac068fad 100644 --- a/apps/vth-frontend/src/styles/print.css +++ b/apps/vth-frontend/src/styles/print.css @@ -29,5 +29,5 @@ ol ol > li::before { table, table tr td, table tr th { - page-break-inside: avoid; + break-inside: avoid; } diff --git a/apps/vth-frontend/src/util/fetchData.ts b/apps/vth-frontend/src/util/fetchData.ts index 240e7cf3e..22b5b4a87 100644 --- a/apps/vth-frontend/src/util/fetchData.ts +++ b/apps/vth-frontend/src/util/fetchData.ts @@ -5,7 +5,12 @@ interface FetchDataProps { method?: string; } -export const fetchData = async ({ url, query, variables, method = 'POST' }: FetchDataProps) => { +export const fetchData = async ({ + url, + query, + variables, + method = 'POST', +}: FetchDataProps): Promise<{ data: TData }> => { try { const response = await fetch(url, { method, diff --git a/apps/vth-frontend/src/util/getNavData.ts b/apps/vth-frontend/src/util/getNavData.ts index f1eda997d..ae5c07ebc 100644 --- a/apps/vth-frontend/src/util/getNavData.ts +++ b/apps/vth-frontend/src/util/getNavData.ts @@ -1,22 +1,13 @@ 'use server'; import { NavigationListType } from '@frameless/ui'; -import { GET_NAVIGATION_DATA } from '@/query'; -import { createStrapiURL } from './createStrapiURL'; -import { fetchData } from './fetchData'; -type NavAttributes = { - attributes: { - title: string; - slug: string; - theme_pages?: { data: NavAttributes[] }; - article_pages?: { data: NavAttributes[] }; - }; -}; +import { GetNavigationDataQuery } from '../../gql/graphql'; -interface NavTypes { - data: { navigationPages: { data: NavAttributes[] }; currentLink: { data: NavAttributes[] } }; -} +import { fetchData } from './fetchData'; +import { createStrapiURL } from './createStrapiURL'; + +import { GET_NAVIGATION_DATA } from '@/query'; interface GetNavDataType { pageMode?: string; @@ -29,55 +20,49 @@ export const getNavData = async ({ articleSlug, themeSlug, }: GetNavDataType): Promise => { - const { data }: NavTypes = await fetchData({ + const { data } = await fetchData({ url: createStrapiURL(), query: GET_NAVIGATION_DATA, variables: { pageMode, articleSlug, themeSlug }, }); - const navLink = data.navigationPages.data.map(({ attributes }) => { - if (attributes.slug === data.currentLink.data[0]?.attributes?.slug) { + const navLink = (data.navigationPages ?? []).map((navigationPage) => { + if (navigationPage?.slug === data.currentLink[0]?.slug) { return { - ...attributes, - theme_pages: data.currentLink.data[0].attributes.theme_pages, - article_pages: data.currentLink.data[0].attributes.article_pages, + ...navigationPage, + slug: data.currentLink[0]?.slug, + theme_pages: data.currentLink[0]?.theme_pages, + article_pages: data.currentLink[0]?.article_pages, }; } else { - return attributes; + return navigationPage; } }); const isNavList = Array.isArray(navLink); const navListData = isNavList ? (navLink.map((navigationPage) => { - const isThemeList = Array.isArray(navigationPage.theme_pages?.data); - const isArticleList = Array.isArray(navigationPage.article_pages?.data); - - const themeList = - isThemeList && - navigationPage.theme_pages?.data.map(({ attributes: { slug, title, article_pages } }) => ({ - textContent: title, - href: `/theme/${slug}`, - children: article_pages?.data.map(({ attributes: { slug: articleSlug, title: articleTitle } }) => ({ - textContent: articleTitle, - href: `/article/${articleSlug}`, - })), - })); + const themeList = navigationPage?.theme_pages?.map((theme) => ({ + textContent: theme?.title, + href: `/theme/${theme?.slug}`, + children: theme?.article_pages?.map((article) => ({ + textContent: article?.title, + href: `/article/${article?.slug}`, + })), + })); - const articleList = - isArticleList && - navigationPage.article_pages?.data.map(({ attributes: { slug, title, theme_pages } }) => ({ - textContent: title, - href: `/article/${slug}`, - children: theme_pages?.data.map(({ attributes: { slug: themeSlug, title: themeTitle } }) => ({ - textContent: themeTitle, - href: `/theme/${themeSlug}`, - })), - })); + const articleList = navigationPage?.article_pages?.map((article) => ({ + textContent: article?.title, + href: `/article/${article?.slug}`, + children: article?.theme_pages?.map((theme) => ({ + textContent: theme?.title, + href: `/theme/${theme?.slug}`, + })), + })); return { - textContent: navigationPage.title, - href: `/${navigationPage.slug}`, + textContent: navigationPage?.title, + href: `/${navigationPage?.slug}`, children: themeSlug || articleSlug ? [...(themeList || []), ...(articleList || [])] : [], }; }) as NavigationListType[]) diff --git a/apps/vth-frontend/tsconfig.json b/apps/vth-frontend/tsconfig.json index 0c7555fa7..7b1121094 100644 --- a/apps/vth-frontend/tsconfig.json +++ b/apps/vth-frontend/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "ES2022", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -9,10 +9,10 @@ "noEmit": true, "esModuleInterop": true, "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "incremental": true, "plugins": [ { @@ -23,6 +23,6 @@ "@/*": ["./src/*"] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", ".next/dev/types/**/*.ts"], + "exclude": ["node_modules", "gql"] } diff --git a/docker-compose.kennisbank.dev.yml b/docker-compose.kennisbank.dev.yml deleted file mode 100644 index ba582a5e1..000000000 --- a/docker-compose.kennisbank.dev.yml +++ /dev/null @@ -1,112 +0,0 @@ -version: "3" -services: - kennisbank_strapi: - container_name: kennisbank_strapi - build: - context: . - dockerfile: Dockerfile.dev - image: strapi:latest - restart: unless-stopped - volumes: - - ./package.json:/opt/app/package.json - - ./yarn.lock:/opt/app/yarn.lock - - ./apps/kennisbank-dashboard/config:/opt/app/apps/kennisbank-dashboard/config - - ./apps/kennisbank-dashboard/src:/opt/app/apps/kennisbank-dashboard/src - - ./apps/kennisbank-dashboard/package.json:/opt/app/apps/kennisbank-dashboard/package.json - - ./apps/kennisbank-dashboard/public/:/opt/app/apps/kennisbank-dashboard/public/ - entrypoint: ["/bin/sh", "-c"] - command: - - | - npm run dev --workspace @frameless/kennisbank-dashboard - environment: - HOST: ${HOST} - PORT: ${PORT} - APP_KEYS: ${APP_KEYS} - ADMIN_JWT_SECRET: ${ADMIN_JWT_SECRET} - JWT_SECRET: ${JWT_SECRET} - API_TOKEN_SALT: ${API_TOKEN_SALT} - PREVIEW_SECRET_TOKEN: ${PREVIEW_SECRET_TOKEN} - TRANSFER_TOKEN_SALT: ${TRANSFER_TOKEN_SALT} - DATABASE_CLIENT: ${DATABASE_CLIENT} - DATABASE_HOST: kennisbank_strapi_db - DATABASE_PORT: ${DATABASE_PORT} - DATABASE_NAME: ${DATABASE_NAME} - DATABASE_USERNAME: ${DATABASE_USERNAME} - DATABASE_PASSWORD: ${DATABASE_PASSWORD} - FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} - NODE_ENV: ${NODE_ENV} - ports: - - "1337:1337" - networks: - - kennisbank_strapi_network - depends_on: - - kennisbank_strapi_db - kennisbank_frontend: - container_name: kennisbank_frontend - build: - context: . - dockerfile: Dockerfile.dev - restart: unless-stopped - command: ./bin/wait-for-it.sh -s kennisbank_strapi:1337 -t 25 -- npm run dev --workspace @frameless/kennisbank-frontend - environment: - PREVIEW_SECRET_TOKEN: ${PREVIEW_SECRET_TOKEN} - STRAPI_PRIVATE_URL: ${STRAPI_PRIVATE_URL} - FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} - STRAPI_PUBLIC_URL: ${STRAPI_PUBLIC_URL} - volumes: # enable hot-reload - - ./apps/kennisbank-frontend/src:/opt/app/apps/kennisbank-frontend/src - - ./apps/kennisbank-frontend/public:/opt/app/apps/kennisbank-frontend/public - - ./apps/kennisbank-frontend/.next:/opt/app/apps/kennisbank-frontend/.next - - ./apps/kennisbank-frontend/package.json:/opt/app/apps/kennisbank-frontend/package.json - ports: - - "3000:3000" - networks: - - kennisbank_strapi_network - depends_on: - - kennisbank_strapi - - kennisbank_strapi_db - kennisbank_strapi_db: - container_name: kennisbank_strapi_db - platform: linux/amd64 #for platform error on Apple M1 chips - restart: unless-stopped - image: postgres:12.0-alpine - environment: - POSTGRES_USER: ${DATABASE_USERNAME} - POSTGRES_PASSWORD: ${DATABASE_PASSWORD} - POSTGRES_DB: ${DATABASE_NAME} - healthcheck: - test: - [ - "CMD-SHELL", - "sh -c 'pg_isready -U ${DATABASE_USERNAME} -d ${DATABASE_NAME}'", - ] - interval: 10s - timeout: 3s - retries: 3 - volumes: - - kennisbank-strapi-data:/var/lib/postgresql/data/ - ports: - - "5432:5432" - networks: - - kennisbank_strapi_network - kennisbank_pgadmin: - container_name: kennisbank_pgadmin - image: dpage/pgadmin4 - restart: always - environment: - PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL} - PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD} - ports: - - "8080:80" - networks: - - kennisbank_strapi_network - depends_on: - - kennisbank_strapi_db - -volumes: - kennisbank-strapi-data: - -networks: - kennisbank_strapi_network: - name: Strapi network - driver: bridge diff --git a/docker-compose.kennisbank.prod.yml b/docker-compose.kennisbank.prod.yml deleted file mode 100644 index e3e9e0a33..000000000 --- a/docker-compose.kennisbank.prod.yml +++ /dev/null @@ -1,98 +0,0 @@ -version: "3.8" -services: - kennisbank_strapi: - container_name: kennisbank_strapi - build: - context: . - dockerfile: Dockerfile.prod - image: strapi:latest - restart: unless-stopped - volumes: - - ./apps/kennisbank-dashboard/public/uploads:/opt/app/apps/kennisbank-dashboard/public/uploads - command: npm run start:kennisbank-dashboard - environment: - HOST: ${HOST} - PORT: ${PORT} - APP_KEYS: ${APP_KEYS} - ADMIN_JWT_SECRET: ${ADMIN_JWT_SECRET} - JWT_SECRET: ${JWT_SECRET} - API_TOKEN_SALT: ${API_TOKEN_SALT} - PREVIEW_SECRET_TOKEN: ${PREVIEW_SECRET_TOKEN} - TRANSFER_TOKEN_SALT: ${TRANSFER_TOKEN_SALT} - FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} - DATABASE_CLIENT: ${DATABASE_CLIENT} - DATABASE_HOST: kennisbank_strapi_db - DATABASE_PORT: ${DATABASE_PORT} - DATABASE_NAME: ${DATABASE_NAME} - DATABASE_USERNAME: ${DATABASE_USERNAME} - DATABASE_PASSWORD: ${DATABASE_PASSWORD} - NODE_ENV: ${NODE_ENV} - ports: - - "1337:1337" - networks: - - kennisbank_strapi_network - depends_on: - - kennisbank_strapi_db - kennisbank_frontend: - container_name: kennisbank_frontend - build: - context: . - dockerfile: Dockerfile.prod - restart: unless-stopped - command: ./bin/wait-for-it.sh kennisbank_strapi:1337 -- npm run start:kennisbank-frontend - environment: - PREVIEW_SECRET_TOKEN: ${PREVIEW_SECRET_TOKEN} - STRAPI_PRIVATE_URL: ${STRAPI_PRIVATE_URL} - FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} - STRAPI_PUBLIC_URL: ${STRAPI_PUBLIC_URL} - ports: - - "3000:3000" - networks: - - kennisbank_strapi_network - depends_on: - - kennisbank_strapi - - kennisbank_strapi_db - kennisbank_strapi_db: - container_name: kennisbank_strapi_db - platform: linux/amd64 #for platform error on Apple M1 chips - restart: unless-stopped - image: postgres:12.0-alpine - environment: - POSTGRES_USER: ${DATABASE_USERNAME} - POSTGRES_PASSWORD: ${DATABASE_PASSWORD} - POSTGRES_DB: ${DATABASE_NAME} - healthcheck: - test: - [ - "CMD-SHELL", - "sh -c 'pg_isready -U ${DATABASE_USERNAME} -d ${DATABASE_NAME}'", - ] - interval: 10s - timeout: 3s - retries: 3 - volumes: - - kennisbank-strapi-data:/var/lib/postgresql/data/ - ports: - - "5432:5432" - networks: - - kennisbank_strapi_network - kennisbank_pgadmin: - container_name: kennisbank_pgadmin - image: dpage/pgadmin4 - restart: always - environment: - PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL} - PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD} - ports: - - "9000:80" - networks: - - kennisbank_strapi_network - depends_on: - - kennisbank_strapi_db -volumes: - kennisbank-strapi-data: - -networks: - kennisbank_strapi_network: - name: Strapi network - driver: bridge diff --git a/docker-compose.pdc.dev.yml b/docker-compose.pdc.dev.yml index c76886849..d230bf297 100644 --- a/docker-compose.pdc.dev.yml +++ b/docker-compose.pdc.dev.yml @@ -1,23 +1,20 @@ -version: "3" +version: "3.8" + services: pdc_strapi: container_name: pdc_strapi build: context: . dockerfile: Dockerfile.dev - image: strapi:latest + args: + NODE_ENV: development + STRAPI_PUBLIC_URL: ${STRAPI_PUBLIC_URL} + image: pdc-strapi-dev:latest restart: unless-stopped volumes: - - ./package.json:/opt/app/package.json - - ./yarn.lock:/opt/app/yarn.lock - - ./apps/pdc-dashboard/config:/opt/app/apps/pdc-dashboard/config - - ./apps/pdc-dashboard/src:/opt/app/apps/pdc-dashboard/src - - ./apps/pdc-dashboard/package.json:/opt/app/apps/pdc-dashboard/package.json - - ./apps/pdc-dashboard/public/:/opt/app/apps/pdc-dashboard/public/ - entrypoint: ["/bin/sh", "-c"] - command: - - | - npm run dev --workspace @frameless/pdc-dashboard + - ./apps/pdc-dashboard/src:/app/apps/pdc-dashboard/src + - ./apps/pdc-dashboard/config:/app/apps/pdc-dashboard/config + - ./apps/pdc-dashboard/public:/app/apps/pdc-dashboard/public environment: ADMIN_JWT_SECRET: ${ADMIN_JWT_SECRET} API_TOKEN_SALT: ${API_TOKEN_SALT} @@ -33,7 +30,9 @@ services: FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} HOST: ${HOST} JWT_SECRET: ${JWT_SECRET} - NODE_ENV: ${NODE_ENV} + KISS_PREVIEW_TOKEN: ${KISS_PREVIEW_TOKEN} + KISS_PREVIEW_URL: ${KISS_PREVIEW_URL} + NODE_ENV: development OPEN_FORMS_API_TOKEN: ${OPEN_FORMS_API_TOKEN} OPEN_FORMS_API_URL: ${OPEN_FORMS_API_URL} PORT: ${PORT} @@ -43,16 +42,25 @@ services: ports: - "1337:1337" networks: - - pdc_strapi_network + - pdc_network depends_on: - - pdc_strapi_db + pdc_strapi_db: + condition: service_healthy + command: pnpm --filter @frameless/pdc-dashboard dev + pdc_frontend: container_name: pdc_frontend build: context: . dockerfile: Dockerfile.dev + args: + NODE_ENV: development + image: pdc-frontend-dev:latest restart: unless-stopped - command: ./bin/wait-for-it.sh -s pdc_strapi:1337 -t 25 -- yarn workspace @frameless/pdc-frontend dev + volumes: + - ./apps/pdc-frontend/src:/app/apps/pdc-frontend/src + - ./apps/pdc-frontend/public:/app/apps/pdc-frontend/public + - ./apps/pdc-frontend/.next:/app/apps/pdc-frontend/.next environment: CSP_CONNECT_SRC_URLS: ${CSP_CONNECT_SRC_URLS} CSP_FONT_SRC_URLS: ${CSP_FONT_SRC_URLS} @@ -81,75 +89,43 @@ services: PREVIEW_SECRET_TOKEN: ${PREVIEW_SECRET_TOKEN} STRAPI_PRIVATE_URL: ${STRAPI_PRIVATE_URL} STRAPI_PUBLIC_URL: ${STRAPI_PUBLIC_URL} - volumes: # enable hot-reload - - ./apps/pdc-frontend/src:/opt/app/apps/pdc-frontend/src - - ./apps/pdc-frontend/public:/opt/app/apps/pdc-frontend/public - - ./apps/pdc-frontend/.next:/opt/app/apps/pdc-frontend/.next - - ./apps/pdc-frontend/package.json:/opt/app/apps/pdc-frontend/package.json ports: - "3000:3000" networks: - - pdc_strapi_network + - pdc_network depends_on: - - pdc_strapi - - pdc_strapi_db + pdc_strapi: + condition: service_started + pdc_strapi_db: + condition: service_healthy + command: pnpm --filter @frameless/pdc-frontend dev + pdc_samenwerkende-catalogi: container_name: pdc_samenwerkende-catalogi build: context: . dockerfile: Dockerfile.dev + args: + NODE_ENV: development + image: pdc-sc-dev:latest restart: unless-stopped - command: npm run start:pdc-sc environment: STRAPI_PRIVATE_URL: ${STRAPI_PRIVATE_URL} FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} ports: - "4000:4000" networks: - - pdc_strapi_network - depends_on: - - pdc_strapi - - pdc_strapi_db - overige-objecten-api: - container_name: overige-objecten-api - build: - context: . - dockerfile: Dockerfile.dev - restart: unless-stopped - volumes: - - ./apps/overige-objecten-api/src/docs:/opt/app/apps/overige-objecten-api/dist/src/docs - command: yarn workspace @frameless/overige-objecten-api start - environment: - STRAPI_PRIVATE_URL: ${STRAPI_PRIVATE_URL} - OVERIGE_OBJECTEN_API_PORT: ${OVERIGE_OBJECTEN_API_PORT} - OVERIGE_OBJECTEN_API_CORS: ${OVERIGE_OBJECTEN_API_CORS} - STRAPI_API_TOKEN: ${STRAPI_API_TOKEN} - ports: - - "4001:4001" - networks: - - pdc_strapi_network + - pdc_network depends_on: - - pdc_strapi - - pdc_strapi_db - strapi-admin-extensions: - container_name: strapi-admin-extensions - build: - context: . - dockerfile: Dockerfile.dev - restart: unless-stopped - command: yarn workspace @frameless/strapi-admin-extensions start - environment: - OVERIGE_OBJECTEN_API_URL: ${OVERIGE_OBJECTEN_API_URL} - STRAPI_ADMIN_EXTENSIONS_PORT: ${STRAPI_ADMIN_EXTENSIONS_PORT} - ports: - - "4002:4002" - networks: - - pdc_strapi_network - depends_on: - - overige-objecten-api + pdc_strapi: + condition: service_started + pdc_strapi_db: + condition: service_healthy + command: pnpm --filter @frameless/samenwerkende-catalogi dev + pdc_strapi_db: container_name: pdc_strapi_db - platform: linux/amd64 #for platform error on Apple M1 chips + platform: linux/amd64 restart: unless-stopped image: postgres:12.0-alpine environment: @@ -170,7 +146,8 @@ services: ports: - "5432:5432" networks: - - pdc_strapi_network + - pdc_network + pdc_pgadmin: container_name: pdc_pgadmin image: dpage/pgadmin4 @@ -181,14 +158,49 @@ services: ports: - "8080:80" networks: - - pdc_strapi_network + - pdc_network depends_on: - pdc_strapi_db - + overige-objecten-api: + container_name: overige-objecten-api + build: + context: . + dockerfile: Dockerfile.prod + restart: unless-stopped + volumes: + - ./apps/overige-objecten-api/src/docs:/opt/app/apps/overige-objecten-api/dist/src/docs + command: pnpm start:overige-objecten-api + environment: + STRAPI_PRIVATE_URL: ${STRAPI_PRIVATE_URL} + OVERIGE_OBJECTEN_API_PORT: ${OVERIGE_OBJECTEN_API_PORT} + OVERIGE_OBJECTEN_API_CORS: ${OVERIGE_OBJECTEN_API_CORS} + STRAPI_API_TOKEN: ${STRAPI_API_TOKEN} + KISS_PREVIEW_TOKEN: ${KISS_PREVIEW_TOKEN} + ports: + - "4001:4001" + networks: + - pdc_network + depends_on: + - pdc_strapi + strapi-admin-extensions: + container_name: strapi-admin-extensions + build: + context: . + dockerfile: Dockerfile.dev + restart: unless-stopped + command: pnpm strapi-admin-extensions + environment: + OVERIGE_OBJECTEN_API_URL: ${OVERIGE_OBJECTEN_API_URL} + FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} + ports: + - "4002:4002" + networks: + - pdc_strapi_network + depends_on: + - overige-objecten-api volumes: pdc-strapi-data: networks: - pdc_strapi_network: - name: Strapi network + pdc_network: driver: bridge diff --git a/docker-compose.pdc.prod.yml b/docker-compose.pdc.prod.yml index ef8ad1b9b..c0a33c929 100644 --- a/docker-compose.pdc.prod.yml +++ b/docker-compose.pdc.prod.yml @@ -25,6 +25,8 @@ services: FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} HOST: ${HOST} JWT_SECRET: ${JWT_SECRET} + KISS_PREVIEW_TOKEN: ${KISS_PREVIEW_TOKEN} + KISS_PREVIEW_URL: ${KISS_PREVIEW_URL} NODE_ENV: ${NODE_ENV} OPEN_FORMS_API_TOKEN: ${OPEN_FORMS_API_TOKEN} OPEN_FORMS_API_URL: ${OPEN_FORMS_API_URL} @@ -105,12 +107,13 @@ services: restart: unless-stopped volumes: - ./apps/overige-objecten-api/src/docs:/opt/app/apps/overige-objecten-api/dist/src/docs - command: yarn start:overige-objecten-api + command: pnpm start:overige-objecten-api environment: STRAPI_PRIVATE_URL: ${STRAPI_PRIVATE_URL} OVERIGE_OBJECTEN_API_PORT: ${OVERIGE_OBJECTEN_API_PORT} OVERIGE_OBJECTEN_API_CORS: ${OVERIGE_OBJECTEN_API_CORS} STRAPI_API_TOKEN: ${STRAPI_API_TOKEN} + KISS_PREVIEW_TOKEN: ${KISS_PREVIEW_TOKEN} ports: - "4001:4001" networks: @@ -123,7 +126,7 @@ services: context: . dockerfile: Dockerfile.prod restart: unless-stopped - command: yarn strapi-admin-extensions + command: pnpm strapi-admin-extensions environment: OVERIGE_OBJECTEN_API_URL: ${OVERIGE_OBJECTEN_API_URL} FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} diff --git a/docker-compose.vth.dev.yml b/docker-compose.vth.dev.yml index 8bb44e34e..216275156 100644 --- a/docker-compose.vth.dev.yml +++ b/docker-compose.vth.dev.yml @@ -1,23 +1,23 @@ -version: "3" +version: "3.8" + services: vth_strapi: container_name: vth_strapi build: context: . dockerfile: Dockerfile.dev - image: vth-strapi:latest + args: + NODE_ENV: development + STRAPI_PUBLIC_URL: ${STRAPI_PUBLIC_URL} + image: vth-strapi-dev:latest restart: unless-stopped volumes: - - ./package.json:/opt/app/package.json - - ./yarn.lock:/opt/app/yarn.lock - - ./apps/vth-dashboard/config:/opt/app/apps/vth-dashboard/config - - ./apps/vth-dashboard/src:/opt/app/apps/vth-dashboard/src - - ./apps/vth-dashboard/package.json:/opt/app/apps/vth-dashboard/package.json - - ./apps/vth-dashboard/public/:/opt/app/apps/vth-dashboard/public/ - entrypoint: ["/bin/sh", "-c"] - command: - - | - npm run dev --workspace @frameless/vth-dashboard + - ./apps/vth-dashboard/src:/app/apps/vth-dashboard/src + - ./apps/vth-dashboard/config:/app/apps/vth-dashboard/config + - ./apps/vth-dashboard/public:/app/apps/vth-dashboard/public + - ./apps/vth-dashboard/dist:/app/apps/vth-dashboard/dist + - ./apps/vth-dashboard/.strapi:/app/apps/vth-dashboard/.strapi + - ./apps/vth-dashboard/.cache:/app/apps/vth-dashboard/.cache environment: HOST: ${HOST} PORT: ${PORT} @@ -35,40 +35,49 @@ services: DATABASE_PASSWORD: ${DATABASE_PASSWORD} FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} STRAPI_ENV_LABEL: ${STRAPI_ENV_LABEL} - NODE_ENV: ${NODE_ENV} + NODE_ENV: development ports: - "1337:1337" networks: - - vth_strapi_network + - vth_network depends_on: - - vth_strapi_db + vth_strapi_db: + condition: service_healthy + command: pnpm --filter @frameless/vth-dashboard dev + vth_frontend: container_name: vth_frontend build: context: . dockerfile: Dockerfile.dev + args: + NODE_ENV: development + image: vth-frontend-dev:latest restart: unless-stopped - command: ./bin/wait-for-it.sh -s vth_strapi:1337 -t 25 -- npm run dev --workspace @frameless/vth-frontend + volumes: + - ./apps/vth-frontend/src:/app/apps/vth-frontend/src + - ./apps/vth-frontend/public:/app/apps/vth-frontend/public + - ./apps/vth-frontend/.next:/app/apps/vth-frontend/.next environment: PREVIEW_SECRET_TOKEN: ${PREVIEW_SECRET_TOKEN} STRAPI_PRIVATE_URL: ${STRAPI_PRIVATE_URL} FRONTEND_PUBLIC_URL: ${FRONTEND_PUBLIC_URL} STRAPI_PUBLIC_URL: ${STRAPI_PUBLIC_URL} - volumes: # enable hot-reload - - ./apps/vth-frontend/src:/opt/app/apps/vth-frontend/src - - ./apps/vth-frontend/public:/opt/app/apps/vth-frontend/public - - ./apps/vth-frontend/.next:/opt/app/apps/vth-frontend/.next - - ./apps/vth-frontend/package.json:/opt/app/apps/vth-frontend/package.json + NODE_ENV: development ports: - "3000:3000" networks: - - vth_strapi_network + - vth_network depends_on: - - vth_strapi - - vth_strapi_db + vth_strapi: + condition: service_started + vth_strapi_db: + condition: service_healthy + command: ./bin/wait-for-it.sh vth_strapi:1337 -t 30 -- pnpm --filter @frameless/vth-frontend dev + vth_strapi_db: container_name: vth_strapi_db - platform: linux/amd64 #for platform error on Apple M1 chips + platform: linux/amd64 restart: unless-stopped image: postgres:12.0-alpine environment: @@ -89,7 +98,8 @@ services: ports: - "5432:5432" networks: - - vth_strapi_network + - vth_network + vth_pgadmin: container_name: vth_pgadmin image: dpage/pgadmin4 @@ -100,7 +110,7 @@ services: ports: - "8080:80" networks: - - vth_strapi_network + - vth_network depends_on: - vth_strapi_db @@ -108,6 +118,5 @@ volumes: vth-strapi-data: networks: - vth_strapi_network: - name: Strapi network + vth_network: driver: bridge diff --git a/docker-compose.vth.prod.yml b/docker-compose.vth.prod.yml index e03d6a70e..0a4eeff5e 100644 --- a/docker-compose.vth.prod.yml +++ b/docker-compose.vth.prod.yml @@ -9,7 +9,7 @@ services: restart: unless-stopped volumes: - ./apps/vth-dashboard/public/uploads:/opt/app/apps/vth-dashboard/public/uploads - command: npm run --workspace @frameless/vth-dashboard start + command: pnpm --filter @frameless/vth-dashboard start environment: HOST: ${HOST} PORT: ${PORT} @@ -40,7 +40,7 @@ services: context: . dockerfile: Dockerfile.prod restart: unless-stopped - command: ./bin/wait-for-it.sh vth_strapi:1337 -- yarn start:vth-frontend + command: ./bin/wait-for-it.sh vth_strapi:1337 -- pnpm start:vth-frontend environment: PREVIEW_SECRET_TOKEN: ${PREVIEW_SECRET_TOKEN} STRAPI_PRIVATE_URL: ${STRAPI_PRIVATE_URL} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..7a58847f0 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,25 @@ +import { createConfig } from '@frameless/eslint-config/base'; +const myAdditionalIgnores = [ + '**/.docusaurus/**', + '**/editoria11y/lib/**', + 'apps/pdc-frontend/public/flo-client-plugin-polyfills.js', + 'apps/pdc-frontend/public/flo-client-plugin.js', + 'apps/pdc-frontend/gql/**', + 'apps/vth-frontend/gql/**', + '**/loader/**', + '**/www/**', +]; + +const customConfig = { + languageOptions: { + globals: { + URL: 'readonly', + process: 'readonly', + __dirname: 'readonly', + }, + }, +}; + +const extendedConfig = createConfig(myAdditionalIgnores); + +export default [...extendedConfig, customConfig]; diff --git a/package.json b/package.json index 0cfb016b1..33884f444 100644 --- a/package.json +++ b/package.json @@ -3,123 +3,109 @@ "version": "0.0.0", "description": "", "private": true, - "workspaces": [ - "packages/ui", - "packages/upl", - "packages/strapi-plugin-uniform-product-name", - "packages/tiptap-editor", - "packages/strapi-tiptap-editor", - "packages/catalogi-data", - "packages/samenwerkende-catalogi", - "packages/provider-upload-vercel", - "packages/*", - "apps/*" - ], "repository": { "type": "git+ssh", "url": "git@github.com:frameless/strapi.git", "directory": "." }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, "keywords": [], "scripts": { - "start": "npm run --workspaces start --if-present", - "start:pdc-frontend": "npm run --workspace @frameless/pdc-frontend start", - "start:vth-frontend": "npm run --workspace @frameless/vth-frontend start", - "start:pdc-dashboard": "npm run --workspace @frameless/pdc-dashboard start", - "start:kennisbank-frontend": "npm run --workspace @frameless/kennisbank-frontend start", - "start:kennisbank-dashboard": "npm run --workspace @frameless/kennisbank-dashboard start", - "strapi-admin-extensions": "npm run --workspace @frameless/strapi-admin-extensions start", - "start:pdc-sc": "npm run --workspace @frameless/pdc-sc start", - "start:overige-objecten-api": "yarn workspace @frameless/overige-objecten-api start", - "build": "npm run --workspaces build --if-present", - "generate-env-docs": "node scripts/generate-env-docs.js", - "build:frontend": "npm run build --workspace @frameless/${APP}", - "build:strapi": "npm run build --workspace @frameless/${APP}", - "build:both": "npm run build --workspace @frameless/${APP1} && npm run build --workspace @frameless/${APP2}", - "dev:frontend": "npm run dev -w @frameless/${APP}", - "dev:strapi": "npm run dev -w @frameless/${APP}", - "dev:both": "concurrently \"npm run dev -w @frameless/${APP1}\" \"npm run codegen -w @frameless/${APP2} --if-present && npm run dev -w @frameless/${APP2}\"", - "development": "node scripts/start.js", - "start:frontend": "npm run start -w @frameless/${APP}", - "start:strapi": "npm run start -w @frameless/${APP}", - "start:both": "concurrently \"npm run start -w @frameless/${APP1}\" \"npm run start -w @frameless/${APP2}\"", - "test": "npm run test --workspaces --if-present", - "clean": "npm run --workspaces clean --if-present", - "clean-node_modules": "npm exec --workspaces --include-workspace-root -- rimraf node_modules", - "init:env": "node scripts/env-init.js", - "lint": "npm-run-all lint:*", - "lint:changeset": "changeset status", - "lint-fix": "npm-run-all lint-fix:*", + "start": "pnpm run --if-present --parallel --recursive start", + "turbo-start": "turbo start", + "start:pdc-frontend": "pnpm --filter @frameless/pdc-frontend start", + "start:vth-frontend": "pnpm --filter @frameless/vth-frontend start", + "start:pdc-dashboard": "pnpm --filter @frameless/pdc-dashboard start", + "start:kennisbank-frontend": "pnpm --filter @frameless/kennisbank-frontend start", + "start:kennisbank-dashboard": "pnpm --filter @frameless/kennisbank-dashboard start", + "strapi-admin-extensions": "pnpm --filter @frameless/strapi-admin-extensions start", + "start:pdc-sc": "pnpm --filter @frameless/pdc-sc start", + "start:overige-objecten-api": "pnpm --filter @frameless/overige-objecten-api start", + "build": "pnpm run --if-present --recursive build", + "turbo-build": "turbo build", + "generate-env-docs": "node scripts/generate-env-docs.mjs", + "build:frontend": "pnpm --filter @frameless/${APP} build", + "build:strapi": "pnpm --filter @frameless/${APP} build", + "build:both": "pnpm --filter @frameless/${APP1} --filter @frameless/${APP2} build", + "dev:frontend": "pnpm --filter @frameless/${APP} dev", + "dev:strapi": "pnpm --filter @frameless/${APP} dev", + "dev:both": "turbo dev --filter=@frameless/${APP1} --filter=@frameless/${APP2}", + "development": "node scripts/start.mjs", + "start:frontend": "pnpm --filter @frameless/${APP} start", + "start:strapi": "pnpm --filter @frameless/${APP} start", + "start:both": "turbo start --filter=@frameless/${APP1} --filter=@frameless/${APP2}", + "test": "pnpm run --if-present --parallel test", + "turbo-test": "turbo test", + "clean": "pnpm run --if-present --recursive clean", + "clean-node_modules": "pnpm -r exec rimraf node_modules && rimraf node_modules", + "env": "pnpm run --recursive env", + "lint": "npm-run-all --parallel lint:js lint:css lint:prettier lint:md", + "lint:js": "eslint --report-unused-disable-directives .", "lint:css": "stylelint '**/*.{css,scss}'", - "lint:env": "node scripts/env-lint.js", - "lint:md": "markdownlint '**/*.md'", - "lint:js": "NODE_OPTIONS=--max-old-space-size=16096 eslint --ext '.{js, json, jsx, ts, tsx}' --report-unused-disable-directives .", - "lint:package-json": "npmPkgJsonLint .", "lint:prettier": "prettier --check .", - "lint-fix:prettier": "prettier --write .", - "lint-fix:css": "stylelint --fix '**/*.{css,scss}'", - "lint-fix:js": "NODE_OPTIONS=--max-old-space-size=16096 eslint --ext '.{js, json, jsx, ts, tsx}' --fix --report-unused-disable-directives .", - "lint-fix:md": "markdownlint --fix '**/*.md'", - "lint-build": "npm run --workspaces lint-build --if-present", - "format:env": "node scripts/env-format.js", + "lint:md": "markdownlint '**/*.md'", + "lint:fix": "npm-run-all --parallel lint:fix:js lint:fix:css lint:fix:prettier lint:fix:md", + "lint:fix:js": "eslint --fix --report-unused-disable-directives .", + "lint:fix:css": "stylelint --fix '**/*.{css,scss}'", + "lint:fix:prettier": "prettier --write .", + "lint:fix:md": "markdownlint --fix '**/*.md'", + "lint-build": "pnpm -r run --if-present lint-build", + "format:env": "node scripts/env-format.mjs", "prettier": "prettier --list-different --write .", - "postinstall": "patch-package && yarn workspace @frameless/pdc-frontend copy-flo-legal-decision-tree-client-script", + "postinstall": "pnpm --filter @frameless/pdc-frontend copy-flo-legal-decision-tree-client-script", "publish": "changeset publish", - "test-update": "yarn lint && yarn build && yarn test", - "update-major": "npm-check-updates --configFileName .ncurc.major.js", - "update-minor": "npm-check-updates --configFileName .ncurc.minor.js", - "update-patch": "npm-check-updates --configFileName .ncurc.patch.js" + "test-update": "pnpm lint && pnpm build && pnpm test", + "update-major": "npm-check-updates --configFileName .ncurc.major.mjs", + "update-minor": "npm-check-updates --configFileName .ncurc.minor.mjs", + "update-patch": "npm-check-updates --configFileName .ncurc.patch.mjs" }, "author": "", "license": "EUPL-1.2", "engines": { - "node": "20.x.x", - "yarn": "^1.22" + "node": "^24.13.0", + "pnpm": "10.23.0" }, "devDependencies": { - "@changesets/cli": "2.27.7", - "@commitlint/cli": "17.6.7", - "@commitlint/config-conventional": "17.6.7", + "@changesets/cli": "2.30.0", + "@commitlint/cli": "20.4.3", + "@commitlint/config-conventional": "20.4.3", + "@frameless/eslint-config": "1.1.2", "@semantic-release/changelog": "6.0.3", "@semantic-release/git": "10.0.1", "@types/node": "20.1.7", - "@typescript-eslint/eslint-plugin": "6.4.1", - "@typescript-eslint/parser": "6.4.1", - "concurrently": "8.0.1", - "dotenv": "16.3.2", + "babel": "6.23.0", + "concurrently": "9.2.1", + "dotenv": "17.3.1", "enquirer": "2.4.1", - "eslint": "8.40.0", - "eslint-config-next": "13.4.19", - "eslint-config-prettier": "9.0.0", - "eslint-plugin-import": "2.27.5", - "eslint-plugin-jest": "27.2.3", - "eslint-plugin-json": "3.1.0", - "eslint-plugin-prettier": "5.0.1", - "eslint-plugin-react": "7.32.2", + "envalid": "8.1.1", + "eslint": "9.39.3", "husky": "9.1.7", - "lint-staged": "15.5.2", - "lodash": "4.17.21", - "markdownlint-cli": "0.34.0", - "multi-semantic-release": "3.0.2", - "npm-check-updates": "16.14.15", - "npm-package-json-lint": "7.0.0", + "lint-staged": "16.3.2", + "markdownlint-cli": "0.48.0", + "multi-semantic-release": "3.1.0", + "npm-check-updates": "19.6.3", + "npm-package-json-lint": "9.1.0", "npm-run-all": "4.1.5", - "patch-package": "8.0.0", - "prettier": "3.0.3", - "rimraf": "5.0.5", - "stylelint": "15.10.3", + "prettier": "3.8.1", + "rimraf": "6.1.3", + "stylelint": "17.4.0", "stylelint-config-prettier": "9.0.5", - "stylelint-config-standard-scss": "10.0.0", - "stylelint-order": "6.0.4", - "typescript": "5.0.4", - "envalid": "8.0.0", - "validator": "13.15.0" + "stylelint-config-standard-scss": "17.0.0", + "stylelint-order": "7.0.1", + "turbo": "2.8.13", + "typescript": "5.8.3", + "validator": "13.15.26" + }, + "pnpm": { + "overrides": { + "eslint": "^9.39.3" + }, + "patchedDependencies": { + "@strapi/database": "patches/@strapi__database.patch", + "@open-formulieren/sdk@3.4.2": "patches/@open-formulieren__sdk@3.4.2.patch" + } }, "resolutions": { "@types/minimatch": "5.1.2" }, - "packageManager": "yarn@1.22.19" + "packageManager": "pnpm@10.23.0+sha512.21c4e5698002ade97e4efe8b8b4a89a8de3c85a37919f957e7a0f30f38fbc5bbdd05980ffe29179b2fb6e6e691242e098d945d1601772cad0fef5fb6411e2a4b" } diff --git a/packages/catalogi-data/CHANGELOG.md b/packages/catalogi-data/CHANGELOG.md deleted file mode 100644 index 18ee8dae2..000000000 --- a/packages/catalogi-data/CHANGELOG.md +++ /dev/null @@ -1,13 +0,0 @@ -## @frameless/catalogi-data [1.0.1](https://github.com/frameless/strapi/compare/@frameless/catalogi-data@1.0.0...@frameless/catalogi-data@1.0.1) (2023-03-20) - - -### Bug Fixes - -* the docker network issue ([bf98b4e](https://github.com/frameless/strapi/commit/bf98b4efd365c22764b48898f9952b18daa7e6df)) - -# @frameless/catalogi-data 1.0.0 (2022-11-23) - - -### Features - -* create catalogi-data package ([e817b85](https://github.com/frameless/strapi/commit/e817b8555312809a75617ee4a19adecb3b071bea)) diff --git a/packages/catalogi-data/package.json b/packages/catalogi-data/package.json deleted file mode 100644 index 83610e771..000000000 --- a/packages/catalogi-data/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@frameless/catalogi-data", - "version": "0.0.0", - "private": false, - "main": "./dist/gemeente.json", - "keywords": [], - "author": "@frameless", - "description": "A Nodejs application that convert the catalogi XML to JSON formate", - "license": "EUPL-1.2", - "files": [ - "dist" - ], - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/catalogi-data" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "scripts": { - "prebuild": "npm run tsc", - "build": "node dist/index.js", - "tsc": "tsc", - "lint-build": "tsc --noEmit --project tsconfig.json" - }, - "peerDependencies": { - "xmlbuilder2": ">=3.0.2" - } -} diff --git a/packages/catalogi-data/src/gemeente.xml b/packages/catalogi-data/src/gemeente.xml deleted file mode 100644 index ab82b4600..000000000 --- a/packages/catalogi-data/src/gemeente.xml +++ /dev/null @@ -1,2795 +0,0 @@ - - - - 's-Graveland - http://standaarden.overheid.nl/owms/terms/'s-Graveland_(gemeente) - 2001-12-31 - - - 's-Gravendeel - http://standaarden.overheid.nl/owms/terms/'s-Gravendeel_(gemeente) - 2006-12-31 - - - 's-Gravenhage - http://standaarden.overheid.nl/owms/terms/'s-Gravenhage - - - 's-Gravenzande - http://standaarden.overheid.nl/owms/terms/'s-Gravenzande_(gemeente) - 2003-12-31 - - - 's-Hertogenbosch - http://standaarden.overheid.nl/owms/terms/'s-Hertogenbosch - - - Aa en Hunze - http://standaarden.overheid.nl/owms/terms/Aa_en_Hunze - - - Aalburg - http://standaarden.overheid.nl/owms/terms/Aalburg_(gemeente) - 2018-12-31 - - - Aalsmeer - http://standaarden.overheid.nl/owms/terms/Aalsmeer_(gemeente) - - - Aalten - http://standaarden.overheid.nl/owms/terms/Aalten_(gemeente) - - - Abcoude - http://standaarden.overheid.nl/owms/terms/Abcoude_(gemeente) - 2010-12-31 - - - Achtkarspelen - http://standaarden.overheid.nl/owms/terms/Achtkarspelen - - - Akersloot - http://standaarden.overheid.nl/owms/terms/Akersloot_(gemeente) - 2001-12-31 - - - Alblasserdam - http://standaarden.overheid.nl/owms/terms/Alblasserdam_(gemeente) - - - Albrandswaard - http://standaarden.overheid.nl/owms/terms/Albrandswaard - - - Alkemade - http://standaarden.overheid.nl/owms/terms/Alkemade_(gemeente) - 2008-12-31 - - - Alkmaar - http://standaarden.overheid.nl/owms/terms/Alkmaar_(gemeente) - - - Almelo - http://standaarden.overheid.nl/owms/terms/Almelo - - - Almere - http://standaarden.overheid.nl/owms/terms/Almere_(gemeente) - - - Alphen aan den Rijn - http://standaarden.overheid.nl/owms/terms/Alphen_aan_den_Rijn_(gemeente) - - - - Alphen-Chaam - http://standaarden.overheid.nl/owms/terms/Alphen-Chaam - - - Altena - http://standaarden.overheid.nl/owms/terms/Altena - 2019-01-01 - - - Ambt Delden - http://standaarden.overheid.nl/owms/terms/Ambt_Delden_(gemeente) - 2000-12-31 - - - Ambt Montfort - http://standaarden.overheid.nl/owms/terms/Ambt_Montfort - 2006-12-31 - - - Ameland - http://standaarden.overheid.nl/owms/terms/Ameland - - - Amerongen - http://standaarden.overheid.nl/owms/terms/Amerongen_(gemeente) - 2005-12-31 - - - Amersfoort - http://standaarden.overheid.nl/owms/terms/Amersfoort_(gemeente) - - - Amstelveen - http://standaarden.overheid.nl/owms/terms/Amstelveen_(gemeente) - - - Amsterdam - http://standaarden.overheid.nl/owms/terms/Amsterdam - - - Andijk - http://standaarden.overheid.nl/owms/terms/Andijk_(gemeente) - 2010-12-31 - - - Angerlo - http://standaarden.overheid.nl/owms/terms/Angerlo_(gemeente) - 2004-12-31 - - - Anna Paulowna - http://standaarden.overheid.nl/owms/terms/Anna_Paulowna_(gemeente) - 2011-12-31 - - - Apeldoorn - http://standaarden.overheid.nl/owms/terms/Apeldoorn_(gemeente) - - - Appingedam - http://standaarden.overheid.nl/owms/terms/Appingedam_(gemeente) - 2020-12-31 - - - Arcen en Velden - http://standaarden.overheid.nl/owms/terms/Arcen_en_Velden_(gemeente) - 2009-12-31 - - - Arnhem - http://standaarden.overheid.nl/owms/terms/Arnhem_(gemeente) - - - Assen - http://standaarden.overheid.nl/owms/terms/Assen_(gemeente) - - - Asten - http://standaarden.overheid.nl/owms/terms/Asten_(gemeente) - - - Avereest - http://standaarden.overheid.nl/owms/terms/Avereest_(gemeente) - 2000-12-31 - - - Axel - http://standaarden.overheid.nl/owms/terms/Axel_(gemeente) - 2002-12-31 - - - Baarle-Nassau - http://standaarden.overheid.nl/owms/terms/Baarle-Nassau_(gemeente) - - - Baarn - http://standaarden.overheid.nl/owms/terms/Baarn_(gemeente) - - - Barendrecht - http://standaarden.overheid.nl/owms/terms/Barendrecht_(gemeente) - - - Barneveld - http://standaarden.overheid.nl/owms/terms/Barneveld_(gemeente) - - - Bathmen - http://standaarden.overheid.nl/owms/terms/Bathmen_(gemeente) - 2004-12-31 - - - Bedum - http://standaarden.overheid.nl/owms/terms/Bedum_(gemeente) - 2018-12-31 - - - Beek - http://standaarden.overheid.nl/owms/terms/Beek_(gemeente) - - - Beekdaelen - http://standaarden.overheid.nl/owms/terms/Beekdaelen - 2019-01-01 - - - Beemster - http://standaarden.overheid.nl/owms/terms/Beemster_(gemeente) - 2021-12-31 - - - Beesel - http://standaarden.overheid.nl/owms/terms/Beesel_(gemeente) - - - Belfeld - http://standaarden.overheid.nl/owms/terms/Belfeld_(gemeente) - 2000-12-31 - - - Bellingwedde - http://standaarden.overheid.nl/owms/terms/Bellingwedde - 2017-12-31 - - - Bemmel - http://standaarden.overheid.nl/owms/terms/Bemmel_(gemeente) - 2001-01-01 - 2002-12-31 - - - Bennebroek - http://standaarden.overheid.nl/owms/terms/Bennebroek_(gemeente) - 2008-12-31 - - - Berg en Dal - http://standaarden.overheid.nl/owms/terms/Berg_en_Dal - 2016-01-01 - - - Bergambacht - http://standaarden.overheid.nl/owms/terms/Bergambacht_(gemeente) - 2014-12-31 - - - Bergeijk - http://standaarden.overheid.nl/owms/terms/Bergeijk_(gemeente) - - - Bergen (L) - http://standaarden.overheid.nl/owms/terms/Bergen_(Li) - - - Bergen (Li) - http://standaarden.overheid.nl/owms/terms/Bergen_oud - 1900-01-01 - - - Bergen (NH) - http://standaarden.overheid.nl/owms/terms/Bergen_(NH) - - - Bergen op Zoom - http://standaarden.overheid.nl/owms/terms/Bergen_op_Zoom_(gemeente) - - - Bergh - http://standaarden.overheid.nl/owms/terms/Bergh_(gemeente) - 2004-12-31 - - - Bergschenhoek - http://standaarden.overheid.nl/owms/terms/Bergschenhoek_(gemeente) - 2006-12-31 - - - Berkel en Rodenrijs - http://standaarden.overheid.nl/owms/terms/Berkel_en_Rodenrijs_(gemeente) - - 2006-12-31 - - - Berkelland - http://standaarden.overheid.nl/owms/terms/Berkelland - 2005-01-01 - - - Bernheze - http://standaarden.overheid.nl/owms/terms/Bernheze - - - Bernisse - http://standaarden.overheid.nl/owms/terms/Bernisse_(gemeente) - 2014-12-31 - - - Best - http://standaarden.overheid.nl/owms/terms/Best_(gemeente) - - - Beuningen - http://standaarden.overheid.nl/owms/terms/Beuningen_(gemeente) - - - Beverwijk - http://standaarden.overheid.nl/owms/terms/Beverwijk_(gemeente) - - - Binnenmaas - http://standaarden.overheid.nl/owms/terms/Binnenmaas - 2018-12-31 - - - Bladel - http://standaarden.overheid.nl/owms/terms/Bladel_(gemeente) - - - Blaricum - http://standaarden.overheid.nl/owms/terms/Blaricum_(gemeente) - - - Bleiswijk - http://standaarden.overheid.nl/owms/terms/Bleiswijk_(gemeente) - 2006-12-31 - - - Bloemendaal - http://standaarden.overheid.nl/owms/terms/Bloemendaal_(gemeente) - - - Boarnsterhim - http://standaarden.overheid.nl/owms/terms/Boarnsterhim - 2013-12-31 - - - Bodegraven - http://standaarden.overheid.nl/owms/terms/Bodegraven - 2010-12-31 - - - Bodegraven-Reeuwijk - http://standaarden.overheid.nl/owms/terms/Bodegraven-Reeuwijk - 2011-01-01 - - - Boekel - http://standaarden.overheid.nl/owms/terms/Boekel_(gemeente) - - - Bolsward - http://standaarden.overheid.nl/owms/terms/Bolsward_(gemeente) - 2010-12-31 - - - Borculo - http://standaarden.overheid.nl/owms/terms/Borculo_(gemeente) - 2004-12-31 - - - Borger-Odoorn - http://standaarden.overheid.nl/owms/terms/Borger-Odoorn - - - Born - http://standaarden.overheid.nl/owms/terms/Born_(gemeente) - 2000-12-31 - - - Borne - http://standaarden.overheid.nl/owms/terms/Borne_(gemeente) - - - Borsele - http://standaarden.overheid.nl/owms/terms/Borsele_(gemeente) - - - Boskoop - http://standaarden.overheid.nl/owms/terms/Boskoop_(gemeente) - 2013-12-31 - - - Boxmeer - http://standaarden.overheid.nl/owms/terms/Boxmeer_(gemeente) - 2021-12-31 - - - Boxtel - http://standaarden.overheid.nl/owms/terms/Boxtel_(gemeente) - - - Breda - http://standaarden.overheid.nl/owms/terms/Breda_(gemeente) - - - Brederwiede - http://standaarden.overheid.nl/owms/terms/Brederwiede_(gemeente) - 2000-12-31 - - - Breukelen - http://standaarden.overheid.nl/owms/terms/Breukelen_(gemeente) - 2010-12-31 - - - Brielle - http://standaarden.overheid.nl/owms/terms/Brielle_(gemeente) - 2022-12-31 - - - Broekhuizen - http://standaarden.overheid.nl/owms/terms/Broekhuizen_(gemeente) - 2000-12-31 - - - Bronckhorst - http://standaarden.overheid.nl/owms/terms/Bronckhorst - 2005-01-01 - - - Brummen - http://standaarden.overheid.nl/owms/terms/Brummen - - - Brunssum - http://standaarden.overheid.nl/owms/terms/Brunssum_(gemeente) - - - Bunnik - http://standaarden.overheid.nl/owms/terms/Bunnik_(gemeente) - - - Bunschoten - http://standaarden.overheid.nl/owms/terms/Bunschoten_(gemeente) - - - Buren - http://standaarden.overheid.nl/owms/terms/Buren_(gemeente) - - - Bussum - http://standaarden.overheid.nl/owms/terms/Bussum_(gemeente) - 2015-12-31 - - - Capelle aan den IJssel - http://standaarden.overheid.nl/owms/terms/Capelle_aan_den_IJssel_(gemeente) - - - - Castricum - http://standaarden.overheid.nl/owms/terms/Castricum_(gemeente) - - - Coevorden - http://standaarden.overheid.nl/owms/terms/Coevorden_(gemeente) - - - Cranendonck - http://standaarden.overheid.nl/owms/terms/Cranendonck - - - Cromstrijen - http://standaarden.overheid.nl/owms/terms/Cromstrijen - 2018-12-31 - - - Cuijk - http://standaarden.overheid.nl/owms/terms/Cuijk_(gemeente) - 2021-12-31 - - - Culemborg - http://standaarden.overheid.nl/owms/terms/Culemborg_(gemeente) - - - Dalfsen - http://standaarden.overheid.nl/owms/terms/Dalfsen_(gemeente) - - - Dantumadeel - http://standaarden.overheid.nl/owms/terms/Dantumadeel - 2008-12-31 - - - Dantumadiel - http://standaarden.overheid.nl/owms/terms/Dantumadiel - 2009-01-01 - - - De Bilt - http://standaarden.overheid.nl/owms/terms/De_Bilt_(gemeente) - - - De Friese Meren - http://standaarden.overheid.nl/owms/terms/Friese_Meren - 2014-01-01 - 2015-06-30 - - - De Fryske Marren - http://standaarden.overheid.nl/owms/terms/De_Fryske_Marren - 2015-07-01 - - - De Lier - http://standaarden.overheid.nl/owms/terms/De_Lier_(gemeente) - 2003-12-31 - - - De Marne - http://standaarden.overheid.nl/owms/terms/De_Marne - 2018-12-31 - - - De Ronde Venen - http://standaarden.overheid.nl/owms/terms/De_Ronde_Venen - - - De Wolden - http://standaarden.overheid.nl/owms/terms/De_Wolden - - - Delft - http://standaarden.overheid.nl/owms/terms/Delft_(gemeente) - - - Delfzijl - http://standaarden.overheid.nl/owms/terms/Delfzijl_(gemeente) - 2020-12-31 - - - Den Ham - http://standaarden.overheid.nl/owms/terms/Den_Ham_(gemeente) - 2000-12-31 - - - Den Helder - http://standaarden.overheid.nl/owms/terms/Den_Helder_(gemeente) - - - Denekamp - http://standaarden.overheid.nl/owms/terms/Denekamp_(gemeente) - 2002-05-31 - - - Deurne - http://standaarden.overheid.nl/owms/terms/Deurne_(gemeente) - - - Deventer - http://standaarden.overheid.nl/owms/terms/Deventer_(gemeente) - - - Didam - http://standaarden.overheid.nl/owms/terms/Didam_(gemeente) - 2004-12-31 - - - Diemen - http://standaarden.overheid.nl/owms/terms/Diemen_(gemeente) - - - Diepenheim - http://standaarden.overheid.nl/owms/terms/Diepenheim_(gemeente) - 2000-12-31 - - - Dijk en Waard - http://standaarden.overheid.nl/owms/terms/Dijk_en_Waard - 2022-01-01 - - - Dinkelland - http://standaarden.overheid.nl/owms/terms/Dinkelland - 2002-06-01 - - - Dinxperlo - http://standaarden.overheid.nl/owms/terms/Dinxperlo_(gemeente) - 2004-12-31 - - - Dirksland - http://standaarden.overheid.nl/owms/terms/Dirksland_(gemeente) - 2012-12-31 - - - Dodewaard - http://standaarden.overheid.nl/owms/terms/Dodewaard_(gemeente) - 2001-12-31 - - - Doesburg - http://standaarden.overheid.nl/owms/terms/Doesburg_(gemeente) - - - Doetinchem - http://standaarden.overheid.nl/owms/terms/Doetinchem - - - Dongen - http://standaarden.overheid.nl/owms/terms/Dongen_(gemeente) - - - Dongeradeel - http://standaarden.overheid.nl/owms/terms/Dongeradeel - 2018-12-31 - - - Doorn - http://standaarden.overheid.nl/owms/terms/Doorn_(gemeente) - 2005-12-31 - - - Dordrecht - http://standaarden.overheid.nl/owms/terms/Dordrecht_(gemeente) - - - Drechterland - http://standaarden.overheid.nl/owms/terms/Drechterland_(gemeente) - - - Driebergen-Rijsenburg - http://standaarden.overheid.nl/owms/terms/Driebergen-Rijsenburg_(gemeente) - - 2005-12-31 - - - Drimmelen - http://standaarden.overheid.nl/owms/terms/Drimmelen - - - Dronten - http://standaarden.overheid.nl/owms/terms/Dronten_(gemeente) - - - Druten - http://standaarden.overheid.nl/owms/terms/Druten_(gemeente) - - - Duiven - http://standaarden.overheid.nl/owms/terms/Duiven_(gemeente) - - - Echt - http://standaarden.overheid.nl/owms/terms/Echt_(gemeente) - 2002-12-31 - - - Echt-Susteren - http://standaarden.overheid.nl/owms/terms/Echt-Susteren - - - Echteld - http://standaarden.overheid.nl/owms/terms/Echteld_(gemeente) - 2001-12-31 - - - Edam-Volendam - http://standaarden.overheid.nl/owms/terms/Edam-Volendam - - - Ede - http://standaarden.overheid.nl/owms/terms/Ede_(gemeente) - - - Eemnes - http://standaarden.overheid.nl/owms/terms/Eemnes_(gemeente) - - - Eemsdelta - http://standaarden.overheid.nl/owms/terms/Eemsdelta - 2021-01-01 - - - Eemsmond - http://standaarden.overheid.nl/owms/terms/Eemsmond - 2018-12-31 - - - Eersel - http://standaarden.overheid.nl/owms/terms/Eersel_(gemeente) - - - Egmond - http://standaarden.overheid.nl/owms/terms/Egmond - 2000-12-31 - - - Eibergen - http://standaarden.overheid.nl/owms/terms/Eibergen_(gemeente) - 2004-12-31 - - - Eijsden - http://standaarden.overheid.nl/owms/terms/Eijsden_(gemeente) - 2010-12-31 - - - Eijsden-Margraten - http://standaarden.overheid.nl/owms/terms/Eijsden-Margraten - 2011-01-01 - - - Eindhoven - http://standaarden.overheid.nl/owms/terms/Eindhoven_(gemeente) - - - Elburg - http://standaarden.overheid.nl/owms/terms/Elburg_(gemeente) - - - Elst - http://standaarden.overheid.nl/owms/terms/Elst_(gemeente) - 2000-12-31 - - - Emmen - http://standaarden.overheid.nl/owms/terms/Emmen_(gemeente) - - - Enkhuizen - http://standaarden.overheid.nl/owms/terms/Enkhuizen_(gemeente) - - - Enschede - http://standaarden.overheid.nl/owms/terms/Enschede_(gemeente) - - - Epe - http://standaarden.overheid.nl/owms/terms/Epe - - - Ermelo - http://standaarden.overheid.nl/owms/terms/Ermelo_(gemeente) - - - Etten-Leur - http://standaarden.overheid.nl/owms/terms/Etten-Leur_(gemeente) - - - Ferwerderadiel - http://standaarden.overheid.nl/owms/terms/Ferwerderadiel - 2018-12-31 - - - Franekeradeel - http://standaarden.overheid.nl/owms/terms/Franekeradeel - 2017-12-31 - - - Gaasterlân-Sleat - http://standaarden.overheid.nl/owms/terms/Gaasterlan-Sleat - 2013-12-31 - - - Geertruidenberg - http://standaarden.overheid.nl/owms/terms/Geertruidenberg_(gemeente) - - - Geldermalsen - http://standaarden.overheid.nl/owms/terms/Geldermalsen_(gemeente) - 2018-12-31 - - - Geldrop - http://standaarden.overheid.nl/owms/terms/Geldrop_(gemeente) - 2003-12-31 - - - Geldrop-Mierlo - http://standaarden.overheid.nl/owms/terms/Geldrop-Mierlo - 2004-01-01 - - - Geleen - http://standaarden.overheid.nl/owms/terms/Geleen_(gemeente) - 2000-12-31 - - - Gemert-Bakel - http://standaarden.overheid.nl/owms/terms/Gemert-Bakel - - - Gendringen - http://standaarden.overheid.nl/owms/terms/Gendringen_(gemeente) - 2004-12-31 - - - Gendt - http://standaarden.overheid.nl/owms/terms/Gendt_(gemeente) - 2000-12-31 - - - Genemuiden - http://standaarden.overheid.nl/owms/terms/Genemuiden_(gemeente) - 2000-12-31 - - - Gennep - http://standaarden.overheid.nl/owms/terms/Gennep_(gemeente) - - - Giessenlanden - http://standaarden.overheid.nl/owms/terms/Giessenlanden - 2018-12-31 - - - Gilze en Rijen - http://standaarden.overheid.nl/owms/terms/Gilze_en_Rijen_(gemeente) - - - Goedereede - http://standaarden.overheid.nl/owms/terms/Goedereede_(gemeente) - 2012-12-31 - - - Goeree-Overflakkee - http://standaarden.overheid.nl/owms/terms/Goeree-Overflakkee - 2013-01-01 - - - Goes - http://standaarden.overheid.nl/owms/terms/Goes_(gemeente) - - - Goirle - http://standaarden.overheid.nl/owms/terms/Goirle_(gemeente) - - - Gooise Meren - http://standaarden.overheid.nl/owms/terms/Gooise_Meren - 2016-01-01 - - - Goor - http://standaarden.overheid.nl/owms/terms/Goor_(gemeente) - 2000-12-31 - - - Gorinchem - http://standaarden.overheid.nl/owms/terms/Gorinchem_(gemeente) - - - Gorssel - http://standaarden.overheid.nl/owms/terms/Gorssel_(gemeente) - 2004-12-31 - - - Gouda - http://standaarden.overheid.nl/owms/terms/Gouda_(gemeente) - - - Graafstroom - http://standaarden.overheid.nl/owms/terms/Graafstroom - 2012-12-31 - - - Graft-De Rijp - http://standaarden.overheid.nl/owms/terms/Graft-De_Rijp_(gemeente) - 2014-12-31 - - - Gramsbergen - http://standaarden.overheid.nl/owms/terms/Gramsbergen_(gemeente) - 2000-12-31 - - - Grave - http://standaarden.overheid.nl/owms/terms/Grave_(gemeente) - 2021-12-31 - - - Groenlo - http://standaarden.overheid.nl/owms/terms/Groenlo_(gemeente) - 2006-05-19 - - - Groesbeek - http://standaarden.overheid.nl/owms/terms/Groesbeek_(gemeente) - 2015-12-31 - - - Groningen - http://standaarden.overheid.nl/owms/terms/Groningen_(gemeente) - - - Groningen (Gr) - http://standaarden.overheid.nl/owms/terms/Groningen_oud - 1900-01-01 - - - Grootegast - http://standaarden.overheid.nl/owms/terms/Grootegast_(gemeente) - 2018-12-31 - - - Grubbenvorst - http://standaarden.overheid.nl/owms/terms/Grubbenvorst_(gemeente) - 2000-12-31 - - - Gulpen-Wittem - http://standaarden.overheid.nl/owms/terms/Gulpen-Wittem - 1999-01-01 - - - Haaksbergen - http://standaarden.overheid.nl/owms/terms/Haaksbergen_(gemeente) - - - Haaren - http://standaarden.overheid.nl/owms/terms/Haaren_(gemeente) - 2020-12-31 - - - Haarlem - http://standaarden.overheid.nl/owms/terms/Haarlem - - - Haarlemmerliede en Spaarnwoude - http://standaarden.overheid.nl/owms/terms/Haarlemmerliede_en_Spaarnwoude - - 2018-12-31 - - - Haarlemmermeer - http://standaarden.overheid.nl/owms/terms/Haarlemmermeer_(gemeente) - - - Haelen - http://standaarden.overheid.nl/owms/terms/Haelen_(gemeente) - 2006-12-31 - - - Halderberge - http://standaarden.overheid.nl/owms/terms/Halderberge - - - Hardenberg - http://standaarden.overheid.nl/owms/terms/Hardenberg - - - Harderwijk - http://standaarden.overheid.nl/owms/terms/Harderwijk_(gemeente) - - - Hardinxveld-Giessendam - http://standaarden.overheid.nl/owms/terms/Hardinxveld-Giessendam_(gemeente) - - - - Haren - http://standaarden.overheid.nl/owms/terms/Haren_(gemeente) - 2018-12-31 - - - Harenkarspel - http://standaarden.overheid.nl/owms/terms/Harenkarspel_(gemeente) - 2012-12-31 - - - Harlingen - http://standaarden.overheid.nl/owms/terms/Harlingen_(gemeente) - - - Harmelen - http://standaarden.overheid.nl/owms/terms/Harmelen_(gemeente) - 2000-12-31 - - - Hasselt - http://standaarden.overheid.nl/owms/terms/Hasselt_(gemeente) - 2000-12-31 - - - Hattem - http://standaarden.overheid.nl/owms/terms/Hattem_(gemeente) - - - Heel - http://standaarden.overheid.nl/owms/terms/Heel - 2006-12-31 - - - Heemskerk - http://standaarden.overheid.nl/owms/terms/Heemskerk_(gemeente) - - - Heemstede - http://standaarden.overheid.nl/owms/terms/Heemstede_(gemeente) - - - Heerde - http://standaarden.overheid.nl/owms/terms/Heerde_(gemeente) - - - Heerenveen - http://standaarden.overheid.nl/owms/terms/Heerenveen_(gemeente) - - - Heerhugowaard - http://standaarden.overheid.nl/owms/terms/Heerhugowaard_(gemeente) - 2021-12-31 - - - Heerjansdam - http://standaarden.overheid.nl/owms/terms/Heerjansdam_(gemeente) - 2002-12-31 - - - Heerlen - http://standaarden.overheid.nl/owms/terms/Heerlen_(gemeente) - - - Heeze-Leende - http://standaarden.overheid.nl/owms/terms/Heeze-Leende - - - Heiloo - http://standaarden.overheid.nl/owms/terms/Heiloo_(gemeente) - - - Heino - http://standaarden.overheid.nl/owms/terms/Heino_(gemeente) - 2000-12-31 - - - Helden - http://standaarden.overheid.nl/owms/terms/Helden_(gemeente) - 2009-12-31 - - - Hellendoorn - http://standaarden.overheid.nl/owms/terms/Hellendoorn_(gemeente) - - - Hellevoetsluis - http://standaarden.overheid.nl/owms/terms/Hellevoetsluis_(gemeente) - 2022-12-31 - - - Helmond - http://standaarden.overheid.nl/owms/terms/Helmond_(gemeente) - - - Hendrik-Ido-Ambacht - http://standaarden.overheid.nl/owms/terms/Hendrik-Ido-Ambacht_(gemeente) - - - - Hengelo - http://standaarden.overheid.nl/owms/terms/Hengelo - - - Het Bildt - http://standaarden.overheid.nl/owms/terms/Het_Bildt_oud - 1900-01-01 - - - Het Hogeland - http://standaarden.overheid.nl/owms/terms/Het_Hogeland - 2019-01-01 - - - Heteren - http://standaarden.overheid.nl/owms/terms/Heteren_(gemeente) - 2000-12-31 - - - Heumen - http://standaarden.overheid.nl/owms/terms/Heumen_(gemeente) - - - Heusden - http://standaarden.overheid.nl/owms/terms/Heusden_(gemeente) - - - Heythuysen - http://standaarden.overheid.nl/owms/terms/Heythuysen_(gemeente) - 2006-12-31 - - - Hillegom - http://standaarden.overheid.nl/owms/terms/Hillegom_(gemeente) - - - Hilvarenbeek - http://standaarden.overheid.nl/owms/terms/Hilvarenbeek_(gemeente) - - - Hilversum - http://standaarden.overheid.nl/owms/terms/Hilversum_(gemeente) - - - Hoeksche Waard - http://standaarden.overheid.nl/owms/terms/Hoeksche_Waard - 2019-01-01 - - - Hoevelaken - http://standaarden.overheid.nl/owms/terms/Hoevelaken_(gemeente) - 1999-12-31 - - - Hof van Twente - http://standaarden.overheid.nl/owms/terms/Hof_van_Twente - 2001-01-01 - - - Hollands Kroon - http://standaarden.overheid.nl/owms/terms/Hollands_Kroon - 2012-01-01 - - - Holten - http://standaarden.overheid.nl/owms/terms/Holten_(gemeente) - 2000-12-31 - - - Hontenisse - http://standaarden.overheid.nl/owms/terms/Hontenisse_(gemeente) - 2002-12-31 - - - Hoogeveen - http://standaarden.overheid.nl/owms/terms/Hoogeveen_(gemeente) - - - Hoogezand-Sappemeer - http://standaarden.overheid.nl/owms/terms/Hoogezand-Sappemeer - 2017-12-31 - - - Hoorn - http://standaarden.overheid.nl/owms/terms/Hoorn_(gemeente) - - - Horst - http://standaarden.overheid.nl/owms/terms/Horst_(gemeente) - 2000-12-31 - - - Horst aan de Maas - http://standaarden.overheid.nl/owms/terms/Horst_aan_de_Maas - 2001-01-01 - - - Houten - http://standaarden.overheid.nl/owms/terms/Houten_(gemeente) - - - Huissen - http://standaarden.overheid.nl/owms/terms/Huissen_(gemeente) - 2000-12-31 - - - Huizen - http://standaarden.overheid.nl/owms/terms/Huizen_(gemeente) - - - Hulst - http://standaarden.overheid.nl/owms/terms/Hulst_(gemeente) - - - Hummelo - http://standaarden.overheid.nl/owms/terms/Hummelo_en_Keppel_oud - 1900-01-01 - - - Hummelo en Keppel - http://standaarden.overheid.nl/owms/terms/Hummelo_en_Keppel - 2004-12-31 - - - Hunsel - http://standaarden.overheid.nl/owms/terms/Hunsel_(gemeente) - 2006-12-31 - - - IJsselham - http://standaarden.overheid.nl/owms/terms/IJsselham_(gemeente) - 2000-12-31 - - - IJsselmuiden - http://standaarden.overheid.nl/owms/terms/IJsselmuiden_(gemeente) - 2000-12-31 - - - IJsselstein - http://standaarden.overheid.nl/owms/terms/IJsselstein_(gemeente) - - - Jacobswoude - http://standaarden.overheid.nl/owms/terms/Jacobswoude - 2008-12-31 - - - Kaag en Braassem - http://standaarden.overheid.nl/owms/terms/Kaag_en_Braassem - 2009-01-01 - - - Kampen - http://standaarden.overheid.nl/owms/terms/Kampen_(gemeente) - - - Kapelle - http://standaarden.overheid.nl/owms/terms/Kapelle_(gemeente) - - - Katwijk - http://standaarden.overheid.nl/owms/terms/Katwijk_(gemeente) - - - Kerkrade - http://standaarden.overheid.nl/owms/terms/Kerkrade_(gemeente) - - - Kessel - http://standaarden.overheid.nl/owms/terms/Kessel_(gemeente) - 2009-12-31 - - - Kesteren - http://standaarden.overheid.nl/owms/terms/Kesteren_(gemeente) - 2003-03-31 - - - Koggenland - http://standaarden.overheid.nl/owms/terms/Koggenland - 2007-01-01 - - - Kollumerland en Nieuwkruisland - http://standaarden.overheid.nl/owms/terms/Kollumerland_en_Nieuwkruisland - - 2018-12-31 - - - Korendijk - http://standaarden.overheid.nl/owms/terms/Korendijk - 2018-12-31 - - - Krimpen aan den IJssel - http://standaarden.overheid.nl/owms/terms/Krimpen_aan_den_IJssel_(gemeente) - - - - Krimpenerwaard - http://standaarden.overheid.nl/owms/terms/Krimpenerwaard - 2015-01-01 - - - Laarbeek - http://standaarden.overheid.nl/owms/terms/Laarbeek - - - Land van Cuijk - http://standaarden.overheid.nl/owms/terms/Land_van_Cuijk - 2022-01-01 - - - Landerd - http://standaarden.overheid.nl/owms/terms/Landerd - 2021-12-31 - - - Landgraaf - http://standaarden.overheid.nl/owms/terms/Landgraaf_(gemeente) - - - Landsmeer - http://standaarden.overheid.nl/owms/terms/Landsmeer_(gemeente) - - - Langedijk - http://standaarden.overheid.nl/owms/terms/Langedijk_(gemeente) - 2021-12-31 - - - Lansingerland - http://standaarden.overheid.nl/owms/terms/Lansingerland - 2007-01-01 - - - Laren - http://standaarden.overheid.nl/owms/terms/Laren_(gemeente) - - - Leek - http://standaarden.overheid.nl/owms/terms/Leek_(gemeente) - 2018-12-31 - - - Leerdam - http://standaarden.overheid.nl/owms/terms/Leerdam_(gemeente) - 2018-12-31 - - - Leersum - http://standaarden.overheid.nl/owms/terms/Leersum_(gemeente) - 2005-12-31 - - - Leeuwarden - http://standaarden.overheid.nl/owms/terms/Leeuwarden_(gemeente) - - - Leeuwarderadeel - http://standaarden.overheid.nl/owms/terms/Leeuwarderadeel - 2017-12-31 - - - Leiden - http://standaarden.overheid.nl/owms/terms/Leiden_(gemeente) - - - Leiderdorp - http://standaarden.overheid.nl/owms/terms/Leiderdorp_(gemeente) - - - Leidschendam - http://standaarden.overheid.nl/owms/terms/Leidschendam - 2001-12-31 - - - Leidschendam-Voorburg - http://standaarden.overheid.nl/owms/terms/Leidschendam-Voorburg - 2002-01-01 - - - Lelystad - http://standaarden.overheid.nl/owms/terms/Lelystad_(gemeente) - - - Lemsterland - http://standaarden.overheid.nl/owms/terms/Lemsterland - 2013-12-31 - - - Leudal - http://standaarden.overheid.nl/owms/terms/Leudal - 2007-01-01 - - - Leusden - http://standaarden.overheid.nl/owms/terms/Leusden_(gemeente) - - - Lichtenvoorde - http://standaarden.overheid.nl/owms/terms/Lichtenvoorde - 2004-12-31 - - - Liemeer - http://standaarden.overheid.nl/owms/terms/Liemeer - 2006-12-31 - - - Liesveld - http://standaarden.overheid.nl/owms/terms/Liesveld - 2012-12-31 - - - Limmen - http://standaarden.overheid.nl/owms/terms/Limmen_(gemeente) - 2001-12-31 - - - Lingewaal - http://standaarden.overheid.nl/owms/terms/Lingewaal - 2018-12-31 - - - Lingewaard - http://standaarden.overheid.nl/owms/terms/Lingewaard - 2003-01-01 - - - Lisse - http://standaarden.overheid.nl/owms/terms/Lisse_(gemeente) - - - Lith - http://standaarden.overheid.nl/owms/terms/Lith_(gemeente) - 2010-12-31 - - - Littenseradiel - http://standaarden.overheid.nl/owms/terms/Littenseradiel - 2017-12-31 - - - Lochem - http://standaarden.overheid.nl/owms/terms/Lochem_(gemeente) - - - Loenen - http://standaarden.overheid.nl/owms/terms/Loenen_(gemeente) - 2010-12-31 - - - Loon op Zand - http://standaarden.overheid.nl/owms/terms/Loon_op_Zand_(gemeente) - - - Loosdrecht - http://standaarden.overheid.nl/owms/terms/Loosdrecht_(gemeente) - 2001-12-31 - - - Lopik - http://standaarden.overheid.nl/owms/terms/Lopik_(gemeente) - - - Loppersum - http://standaarden.overheid.nl/owms/terms/Loppersum_(gemeente) - 2020-12-31 - - - Losser - http://standaarden.overheid.nl/owms/terms/Losser_(gemeente) - - - Maarn - http://standaarden.overheid.nl/owms/terms/Maarn_(gemeente) - 2005-12-31 - - - Maarssen - http://standaarden.overheid.nl/owms/terms/Maarssen_(gemeente) - 2010-12-31 - - - Maartensdijk - http://standaarden.overheid.nl/owms/terms/Maartensdijk_(gemeente) - 2000-12-31 - - - Maasbracht - http://standaarden.overheid.nl/owms/terms/Maasbracht_(gemeente) - 2006-12-31 - - - Maasbree - http://standaarden.overheid.nl/owms/terms/Maasbree_(gemeente) - 2009-12-31 - - - Maasdonk - http://standaarden.overheid.nl/owms/terms/Maasdonk - 2014-12-31 - - - Maasdriel - http://standaarden.overheid.nl/owms/terms/Maasdriel_(gemeente) - - - Maasgouw - http://standaarden.overheid.nl/owms/terms/Maasgouw - 2007-01-01 - - - Maashorst - http://standaarden.overheid.nl/owms/terms/Maashorst - 2022-01-01 - - - Maasland - http://standaarden.overheid.nl/owms/terms/Maasland_(gemeente) - 2003-12-31 - - - Maassluis - http://standaarden.overheid.nl/owms/terms/Maassluis_(gemeente) - - - Maastricht - http://standaarden.overheid.nl/owms/terms/Maastricht_(gemeente) - - - Margraten - http://standaarden.overheid.nl/owms/terms/Margraten_(gemeente) - 2010-12-31 - - - Markelo - http://standaarden.overheid.nl/owms/terms/Markelo_(gemeente) - 2000-12-31 - - - Marum - http://standaarden.overheid.nl/owms/terms/Marum_(gemeente) - 2018-12-31 - - - Medemblik - http://standaarden.overheid.nl/owms/terms/Medemblik_(gemeente) - - - Meerlo-Wanssum - http://standaarden.overheid.nl/owms/terms/Meerlo-Wanssum - 2009-12-31 - - - Meerssen - http://standaarden.overheid.nl/owms/terms/Meerssen_(gemeente) - - - Meierijstad - http://standaarden.overheid.nl/owms/terms/Meierijstad - 2017-01-01 - - - Meijel - http://standaarden.overheid.nl/owms/terms/Meijel_(gemeente) - 2009-12-31 - - - Menaldumadeel - http://standaarden.overheid.nl/owms/terms/Menaldumadeel - 2010-12-31 - - - Menameradiel - http://standaarden.overheid.nl/owms/terms/Menameradiel - 2011-01-01 - 2017-12-31 - - - Menterwolde - http://standaarden.overheid.nl/owms/terms/Menterwolde - 2017-12-31 - - - Meppel - http://standaarden.overheid.nl/owms/terms/Meppel_(gemeente) - - - Middelburg - http://standaarden.overheid.nl/owms/terms/Middelburg_(gemeente) - - - Middelharnis - http://standaarden.overheid.nl/owms/terms/Middelharnis_(gemeente) - 2012-12-31 - - - Midden-Delfland - http://standaarden.overheid.nl/owms/terms/Midden-Delfland - 2004-01-01 - - - Midden-Drenthe - http://standaarden.overheid.nl/owms/terms/Midden-Drenthe - - - Midden-Groningen - http://standaarden.overheid.nl/owms/terms/Midden-Groningen - 2018-01-01 - - - Mierlo - http://standaarden.overheid.nl/owms/terms/Mierlo_(gemeente) - 2003-12-31 - - - Mill en Sint Hubert - http://standaarden.overheid.nl/owms/terms/Mill_en_Sint_Hubert - 2021-12-31 - - - Millingen aan de Rijn - http://standaarden.overheid.nl/owms/terms/Millingen_aan_de_Rijn - 2014-12-31 - - - Moerdijk - http://standaarden.overheid.nl/owms/terms/Moerdijk - - - Molenlanden - http://standaarden.overheid.nl/owms/terms/Molenlanden - 2019-01-01 - - - Molenwaard - http://standaarden.overheid.nl/owms/terms/Molenwaard - 2013-01-01 - 2018-12-31 - - - Monster - http://standaarden.overheid.nl/owms/terms/Monster_(gemeente) - 2003-12-31 - - - Montferland - http://standaarden.overheid.nl/owms/terms/Montferland - 2005-01-01 - - - Montfoort - http://standaarden.overheid.nl/owms/terms/Montfoort_(gemeente) - - - Mook en Middelaar - http://standaarden.overheid.nl/owms/terms/Mook_en_Middelaar_(gemeente) - - - Moordrecht - http://standaarden.overheid.nl/owms/terms/Moordrecht_(gemeente) - 2009-12-31 - - - Muiden - http://standaarden.overheid.nl/owms/terms/Muiden_(gemeente) - 2015-12-31 - - - Naaldwijk - http://standaarden.overheid.nl/owms/terms/Naaldwijk_(gemeente) - 2003-12-31 - - - Naarden - http://standaarden.overheid.nl/owms/terms/Naarden_(gemeente) - 2015-12-31 - - - Neder-Betuwe - http://standaarden.overheid.nl/owms/terms/Neder-Betuwe - 2003-04-01 - - - Nederhorst den Berg - http://standaarden.overheid.nl/owms/terms/Nederhorst_den_Berg_(gemeente) - - 2001-12-31 - - - Nederlek - http://standaarden.overheid.nl/owms/terms/Nederlek - 2014-12-31 - - - Nederweert - http://standaarden.overheid.nl/owms/terms/Nederweert_(gemeente) - - - Neede - http://standaarden.overheid.nl/owms/terms/Neede_(gemeente) - 2004-12-31 - - - Neerijnen - http://standaarden.overheid.nl/owms/terms/Neerijnen - 2018-12-31 - - - Niedorp - http://standaarden.overheid.nl/owms/terms/Niedorp_(gemeente) - 2011-12-31 - - - Nieuw-Lekkerland - http://standaarden.overheid.nl/owms/terms/Nieuw-Lekkerland - 2012-12-31 - - - Nieuwegein - http://standaarden.overheid.nl/owms/terms/Nieuwegein - - - Nieuwerkerk aan den IJssel - http://standaarden.overheid.nl/owms/terms/Nieuwerkerk_aan_den_IJssel - 2009-12-31 - - - Nieuwkoop - http://standaarden.overheid.nl/owms/terms/Nieuwkoop_(gemeente) - - - Nieuwleusen - http://standaarden.overheid.nl/owms/terms/Nieuwleusen_(gemeente) - 2000-12-31 - - - Nijefurd - http://standaarden.overheid.nl/owms/terms/Nijefurd - 2010-12-31 - - - Nijkerk - http://standaarden.overheid.nl/owms/terms/Nijkerk_(gemeente) - - - Nijmegen - http://standaarden.overheid.nl/owms/terms/Nijmegen_(gemeente) - - - Nissewaard - http://standaarden.overheid.nl/owms/terms/Nissewaard - 2015-01-01 - - - Noardeast-Fryslân - http://standaarden.overheid.nl/owms/terms/Noardeast-Fryslan - 2019-01-01 - - - Noord-Beveland - http://standaarden.overheid.nl/owms/terms/Noord-Beveland - - - Noordenveld - http://standaarden.overheid.nl/owms/terms/Noordenveld - - - Noorder-Koggenland - http://standaarden.overheid.nl/owms/terms/Noorder-Koggenland_(gemeente) - 2006-12-31 - - - Noordoostpolder - http://standaarden.overheid.nl/owms/terms/Noordoostpolder_(gemeente) - - - Noordwijk - http://standaarden.overheid.nl/owms/terms/Noordwijk_(gemeente) - - - Noordwijkerhout - http://standaarden.overheid.nl/owms/terms/Noordwijkerhout_(gemeente) - 2018-12-31 - - - Nootdorp - http://standaarden.overheid.nl/owms/terms/Nootdorp_(gemeente) - 2001-12-31 - - - Nuenen, Gerwen en Nederwetten - http://standaarden.overheid.nl/owms/terms/Nuenen,_Gerwen_en_Nederwetten - - - Nunspeet - http://standaarden.overheid.nl/owms/terms/Nunspeet_(gemeente) - - - Nuth - http://standaarden.overheid.nl/owms/terms/Nuth_(gemeente) - 2018-12-31 - - - Obdam - http://standaarden.overheid.nl/owms/terms/Obdam_(gemeente) - 2006-12-31 - - - Oegstgeest - http://standaarden.overheid.nl/owms/terms/Oegstgeest_(gemeente) - - - Oirschot - http://standaarden.overheid.nl/owms/terms/Oirschot_(gemeente) - - - Oisterwijk - http://standaarden.overheid.nl/owms/terms/Oisterwijk_(gemeente) - - - Oldambt - http://standaarden.overheid.nl/owms/terms/Oldambt - 2010-01-01 - - - Oldebroek - http://standaarden.overheid.nl/owms/terms/Oldebroek_(gemeente) - - - Oldenzaal - http://standaarden.overheid.nl/owms/terms/Oldenzaal_(gemeente) - - - Olst - http://standaarden.overheid.nl/owms/terms/Olst_(gemeente) - 2002-03-25 - - - Olst-Wijhe - http://standaarden.overheid.nl/owms/terms/Olst-Wijhe - 2002-03-26 - - - Ommen - http://standaarden.overheid.nl/owms/terms/Ommen - - - Onderbanken - http://standaarden.overheid.nl/owms/terms/Onderbanken - 2018-12-31 - - - Oost Gelre - http://standaarden.overheid.nl/owms/terms/Oost_Gelre - 2006-05-20 - - - Oostburg - http://standaarden.overheid.nl/owms/terms/Oostburg_(gemeente) - 2002-12-31 - - - Oosterhout - http://standaarden.overheid.nl/owms/terms/Oosterhout_(gemeente) - - - Oostflakkee - http://standaarden.overheid.nl/owms/terms/Oostflakkee_(gemeente) - 2012-12-31 - - - Ooststellingwerf - http://standaarden.overheid.nl/owms/terms/Ooststellingwerf - - - Oostzaan - http://standaarden.overheid.nl/owms/terms/Oostzaan_(gemeente) - - - Ootmarsum - http://standaarden.overheid.nl/owms/terms/Ootmarsum_(gemeente) - 2000-12-31 - - - Opmeer - http://standaarden.overheid.nl/owms/terms/Opmeer - - - Opsterland - http://standaarden.overheid.nl/owms/terms/Opsterland - - - Oss - http://standaarden.overheid.nl/owms/terms/Oss_(gemeente) - - - Oud-Beijerland - http://standaarden.overheid.nl/owms/terms/Oud-Beijerland_(gemeente) - 2018-12-31 - - - Oude IJsselstreek - http://standaarden.overheid.nl/owms/terms/Oude_IJsselstreek - 2005-01-01 - - - Ouder-Amstel - http://standaarden.overheid.nl/owms/terms/Ouder-Amstel_(gemeente) - - - Ouderkerk - http://standaarden.overheid.nl/owms/terms/Ouderkerk - 2014-12-31 - - - Oudewater - http://standaarden.overheid.nl/owms/terms/Oudewater_(gemeente) - - - Overbetuwe - http://standaarden.overheid.nl/owms/terms/Overbetuwe - 2001-01-01 - - - Papendrecht - http://standaarden.overheid.nl/owms/terms/Papendrecht_(gemeente) - - - Peel en Maas - http://standaarden.overheid.nl/owms/terms/Peel_en_Maas - 2010-01-01 - - - Pekela - http://standaarden.overheid.nl/owms/terms/Pekela - - - Pijnacker - http://standaarden.overheid.nl/owms/terms/Pijnacker_(gemeente) - 2001-12-31 - - - Pijnacker-Nootdorp - http://standaarden.overheid.nl/owms/terms/Pijnacker-Nootdorp - 2002-01-01 - - - Purmerend - http://standaarden.overheid.nl/owms/terms/Purmerend_(gemeente) - - - Putten - http://standaarden.overheid.nl/owms/terms/Putten_(gemeente) - - - Raalte - http://standaarden.overheid.nl/owms/terms/Raalte_(gemeente) - - - Ravenstein - http://standaarden.overheid.nl/owms/terms/Ravenstein_(gemeente) - 2002-12-31 - - - Reeuwijk - http://standaarden.overheid.nl/owms/terms/Reeuwijk_(gemeente) - 2010-12-31 - - - Reiderland - http://standaarden.overheid.nl/owms/terms/Reiderland - 2009-12-31 - - - Reimerswaal - http://standaarden.overheid.nl/owms/terms/Reimerswaal_(gemeente) - - - Renkum - http://standaarden.overheid.nl/owms/terms/Renkum_(gemeente) - - - Renswoude - http://standaarden.overheid.nl/owms/terms/Renswoude_(gemeente) - - - Reusel-De Mierden - http://standaarden.overheid.nl/owms/terms/Reusel-De_Mierden - - - Rheden - http://standaarden.overheid.nl/owms/terms/Rheden_(gemeente) - - - Rhenen - http://standaarden.overheid.nl/owms/terms/Rhenen_(gemeente) - - - Ridderkerk - http://standaarden.overheid.nl/owms/terms/Ridderkerk_(gemeente) - - - Rijnsburg - http://standaarden.overheid.nl/owms/terms/Rijnsburg_(gemeente) - 2005-12-31 - - - Rijnwaarden - http://standaarden.overheid.nl/owms/terms/Rijnwaarden - 2017-12-31 - - - Rijnwoude - http://standaarden.overheid.nl/owms/terms/Rijnwoude - 2013-12-31 - - - Rijssen - http://standaarden.overheid.nl/owms/terms/Rijssen_(gemeente) - 2003-03-14 - - - Rijssen-Holten - http://standaarden.overheid.nl/owms/terms/Rijssen-Holten - 2003-03-15 - - - Rijswijk - http://standaarden.overheid.nl/owms/terms/Rijswijk_(gemeente) - - - Roerdalen - http://standaarden.overheid.nl/owms/terms/Roerdalen - - - Roermond - http://standaarden.overheid.nl/owms/terms/Roermond_(gemeente) - - - Roggel en Neer - http://standaarden.overheid.nl/owms/terms/Roggel_en_Neer - 2006-12-31 - - - Roosendaal - http://standaarden.overheid.nl/owms/terms/Roosendaal - - - Rotterdam - http://standaarden.overheid.nl/owms/terms/Rotterdam - - - Rozenburg - http://standaarden.overheid.nl/owms/terms/Rozenburg_(gemeente) - 2010-03-17 - - - Rozendaal - http://standaarden.overheid.nl/owms/terms/Rozendaal_(gemeente) - - - Rucphen - http://standaarden.overheid.nl/owms/terms/Rucphen_(gemeente) - - - Ruurlo - http://standaarden.overheid.nl/owms/terms/Ruurlo_(gemeente) - 2004-12-31 - - - Sas van Gent - http://standaarden.overheid.nl/owms/terms/Sas_van_Gent_(gemeente) - 2002-12-31 - - - Sassenheim - http://standaarden.overheid.nl/owms/terms/Sassenheim_(gemeente) - 2005-12-31 - - - Schagen - http://standaarden.overheid.nl/owms/terms/Schagen_(gemeente) - - - Scheemda - http://standaarden.overheid.nl/owms/terms/Scheemda_(gemeente) - 2009-12-31 - - - Schermer - http://standaarden.overheid.nl/owms/terms/Schermer_(gemeente) - 2014-12-31 - - - Scherpenzeel - http://standaarden.overheid.nl/owms/terms/Scherpenzeel_(gemeente) - - - Schiedam - http://standaarden.overheid.nl/owms/terms/Schiedam_(gemeente) - - - Schiermonnikoog - http://standaarden.overheid.nl/owms/terms/Schiermonnikoog_(gemeente) - - - Schijndel - http://standaarden.overheid.nl/owms/terms/Schijndel_(gemeente) - 2016-12-31 - - - Schinnen - http://standaarden.overheid.nl/owms/terms/Schinnen_(gemeente) - 2018-12-31 - - - Schipluiden - http://standaarden.overheid.nl/owms/terms/Schipluiden_(gemeente) - 2003-12-31 - - - Schoonhoven - http://standaarden.overheid.nl/owms/terms/Schoonhoven_(gemeente) - 2014-12-31 - - - Schoorl - http://standaarden.overheid.nl/owms/terms/Schoorl_(gemeente) - 2000-12-31 - - - Schouwen-Duiveland - http://standaarden.overheid.nl/owms/terms/Schouwen-Duiveland - - - Sevenum - http://standaarden.overheid.nl/owms/terms/Sevenum_(gemeente) - 2009-12-31 - - - Simpelveld - http://standaarden.overheid.nl/owms/terms/Simpelveld_(gemeente) - - - Sint Anthonis - http://standaarden.overheid.nl/owms/terms/Sint_Anthonis - 2021-12-31 - - - Sint-Michielsgestel - http://standaarden.overheid.nl/owms/terms/Sint-Michielsgestel_(gemeente) - - - - Sint-Oedenrode - http://standaarden.overheid.nl/owms/terms/Sint-Oedenrode - 2016-12-31 - - - Sittard - http://standaarden.overheid.nl/owms/terms/Sittard_(gemeente) - 2000-12-31 - - - Sittard-Geleen - http://standaarden.overheid.nl/owms/terms/Sittard-Geleen - 2001-01-01 - - - Skarsterlân - http://standaarden.overheid.nl/owms/terms/Skarsterlan - 2013-12-31 - - - Sliedrecht - http://standaarden.overheid.nl/owms/terms/Sliedrecht_(gemeente) - - - Slochteren - http://standaarden.overheid.nl/owms/terms/Slochteren - 2017-12-31 - - - Sluis - http://standaarden.overheid.nl/owms/terms/Sluis_(gemeente) - - - Sluis-Aardenburg - http://standaarden.overheid.nl/owms/terms/Sluis-Aardenburg - 2002-12-31 - - - Smallingerland - http://standaarden.overheid.nl/owms/terms/Smallingerland - - - Sneek - http://standaarden.overheid.nl/owms/terms/Sneek_(gemeente) - 2010-12-31 - - - Soest - http://standaarden.overheid.nl/owms/terms/Soest_(gemeente) - - - Someren - http://standaarden.overheid.nl/owms/terms/Someren_(gemeente) - - - Son en Breugel - http://standaarden.overheid.nl/owms/terms/Son_en_Breugel_(gemeente) - - - Spijkenisse - http://standaarden.overheid.nl/owms/terms/Spijkenisse_(gemeente) - 2014-12-31 - - - Stad Delden - http://standaarden.overheid.nl/owms/terms/Stad_Delden_(gemeente) - 2000-12-31 - - - Stadskanaal - http://standaarden.overheid.nl/owms/terms/Stadskanaal - - - Staphorst - http://standaarden.overheid.nl/owms/terms/Staphorst_(gemeente) - - - Stede Broec - http://standaarden.overheid.nl/owms/terms/Stede_Broec_(gemeente) - - - Steenbergen - http://standaarden.overheid.nl/owms/terms/Steenbergen_(gemeente) - - - Steenderen - http://standaarden.overheid.nl/owms/terms/Steenderen_(gemeente) - 2004-12-31 - - - Steenwijk - http://standaarden.overheid.nl/owms/terms/Steenwijk_(gemeente) - 2002-12-31 - - - Steenwijkerland - http://standaarden.overheid.nl/owms/terms/Steenwijkerland - 2003-01-01 - - - Stein - http://standaarden.overheid.nl/owms/terms/Stein_(gemeente) - - - Stichtse Vecht - http://standaarden.overheid.nl/owms/terms/Stichtse_Vecht - 2011-01-01 - - - Strijen - http://standaarden.overheid.nl/owms/terms/Strijen_(gemeente) - 2018-12-31 - - - Susteren - http://standaarden.overheid.nl/owms/terms/Susteren_(gemeente) - 2002-12-31 - - - Swalmen - http://standaarden.overheid.nl/owms/terms/Swalmen_(gemeente) - 2006-12-31 - - - Súdwest Fryslân - http://standaarden.overheid.nl/owms/terms/Sudwest_Fryslan_oud - 1900-01-01 - - - Súdwest-Fryslân - http://standaarden.overheid.nl/owms/terms/Sudwest_Fryslan - 2011-01-01 - - - Tegelen - http://standaarden.overheid.nl/owms/terms/Tegelen_(gemeente) - 2000-12-31 - - - Ten Boer - http://standaarden.overheid.nl/owms/terms/Ten_Boer_(gemeente) - 2018-12-31 - - - Ter Aar - http://standaarden.overheid.nl/owms/terms/Ter_Aar_(gemeente) - 2006-12-31 - - - Terneuzen - http://standaarden.overheid.nl/owms/terms/Terneuzen - - - Terschelling - http://standaarden.overheid.nl/owms/terms/Terschelling_(gemeente) - - - Texel - http://standaarden.overheid.nl/owms/terms/Texel_(gemeente) - - - Teylingen - http://standaarden.overheid.nl/owms/terms/Teylingen - 2006-01-01 - - - Tholen - http://standaarden.overheid.nl/owms/terms/Tholen_(gemeente) - - - Thorn - http://standaarden.overheid.nl/owms/terms/Thorn_(gemeente) - 2006-12-31 - - - Tiel - http://standaarden.overheid.nl/owms/terms/Tiel_(gemeente) - - - Tilburg - http://standaarden.overheid.nl/owms/terms/Tilburg_(gemeente) - - - Tubbergen - http://standaarden.overheid.nl/owms/terms/Tubbergen_(gemeente) - - - Twenterand - http://standaarden.overheid.nl/owms/terms/Twenterand - 2002-06-01 - - - Tynaarlo - http://standaarden.overheid.nl/owms/terms/Tynaarlo - - - Tytsjerksteradiel - http://standaarden.overheid.nl/owms/terms/Tytsjerksteradiel - - - Ubbergen - http://standaarden.overheid.nl/owms/terms/Ubbergen_(gemeente) - 2014-12-31 - - - Uden - http://standaarden.overheid.nl/owms/terms/Uden_(gemeente) - 2021-12-31 - - - Uitgeest - http://standaarden.overheid.nl/owms/terms/Uitgeest_(gemeente) - - - Uithoorn - http://standaarden.overheid.nl/owms/terms/Uithoorn_(gemeente) - - - Urk - http://standaarden.overheid.nl/owms/terms/Urk_(gemeente) - - - Utrecht - http://standaarden.overheid.nl/owms/terms/Utrecht_(gemeente) - - - Utrecht (Utr) - http://standaarden.overheid.nl/owms/terms/Utrecht_oud - 1900-01-01 - - - Utrechtse Heuvelrug - http://standaarden.overheid.nl/owms/terms/Utrechtse_Heuvelrug - 2006-01-01 - - - Vaals - http://standaarden.overheid.nl/owms/terms/Vaals_(gemeente) - - - Valburg - http://standaarden.overheid.nl/owms/terms/Valburg_(gemeente) - 2000-12-31 - - - Valkenburg - http://standaarden.overheid.nl/owms/terms/Valkenburg - 2005-12-31 - - - Valkenburg aan de Geul - http://standaarden.overheid.nl/owms/terms/Valkenburg_aan_de_Geul - - - Valkenswaard - http://standaarden.overheid.nl/owms/terms/Valkenswaard_(gemeente) - - - Veendam - http://standaarden.overheid.nl/owms/terms/Veendam_(gemeente) - - - Veenendaal - http://standaarden.overheid.nl/owms/terms/Veenendaal_(gemeente) - - - Veere - http://standaarden.overheid.nl/owms/terms/Veere - - - Veghel - http://standaarden.overheid.nl/owms/terms/Veghel_(gemeente) - 2016-12-31 - - - Veldhoven - http://standaarden.overheid.nl/owms/terms/Veldhoven_(gemeente) - - - Velsen - http://standaarden.overheid.nl/owms/terms/Velsen_(gemeente) - - - Venhuizen - http://standaarden.overheid.nl/owms/terms/Venhuizen_(gemeente) - 2005-12-31 - - - Venlo - http://standaarden.overheid.nl/owms/terms/Venlo_(gemeente) - - - Venray - http://standaarden.overheid.nl/owms/terms/Venray_(gemeente) - - - Vianen - http://standaarden.overheid.nl/owms/terms/Vianen_(gemeente) - 2018-12-31 - - - Vijfheerenlanden - http://standaarden.overheid.nl/owms/terms/Vijfheerenlanden - 2019-01-01 - - - Vlaardingen - http://standaarden.overheid.nl/owms/terms/Vlaardingen_(gemeente) - - - Vlagtwedde - http://standaarden.overheid.nl/owms/terms/Vlagtwedde_(gemeente) - 2017-12-31 - - - Vleuten-De Meern - http://standaarden.overheid.nl/owms/terms/Vleuten-De_Meern - 2000-12-31 - - - Vlieland - http://standaarden.overheid.nl/owms/terms/Vlieland_(gemeente) - - - Vlissingen - http://standaarden.overheid.nl/owms/terms/Vlissingen_(gemeente) - - - Vlist - http://standaarden.overheid.nl/owms/terms/Vlist_(gemeente) - 2014-12-31 - - - Voerendaal - http://standaarden.overheid.nl/owms/terms/Voerendaal_(gemeente) - - - Voorburg - http://standaarden.overheid.nl/owms/terms/Voorburg_(gemeente) - 2001-12-31 - - - Voorhout - http://standaarden.overheid.nl/owms/terms/Voorhout_(gemeente) - 2005-12-31 - - - Voorne aan Zee - http://standaarden.overheid.nl/owms/terms/Voorne_aan_Zee - 2023-01-01 - - - Voorschoten - http://standaarden.overheid.nl/owms/terms/Voorschoten_(gemeente) - - - Voorst - http://standaarden.overheid.nl/owms/terms/Voorst_(gemeente) - - - Vorden - http://standaarden.overheid.nl/owms/terms/Vorden_(gemeente) - 2004-12-31 - - - Vriezenveen - http://standaarden.overheid.nl/owms/terms/Vriezenveen_(gemeente) - 2002-05-31 - - - Vught - http://standaarden.overheid.nl/owms/terms/Vught_(gemeente) - - - Waadhoeke - http://standaarden.overheid.nl/owms/terms/Waadhoeke - 2018-01-01 - - - Waalre - http://standaarden.overheid.nl/owms/terms/Waalre_(gemeente) - - - Waalwijk - http://standaarden.overheid.nl/owms/terms/Waalwijk_(gemeente) - - - Waddinxveen - http://standaarden.overheid.nl/owms/terms/Waddinxveen_(gemeente) - - - Wageningen - http://standaarden.overheid.nl/owms/terms/Wageningen_(gemeente) - - - Warmond - http://standaarden.overheid.nl/owms/terms/Warmond_(gemeente) - 2005-12-31 - - - Warnsveld - http://standaarden.overheid.nl/owms/terms/Warnsveld_(gemeente) - 2004-12-31 - - - Wassenaar - http://standaarden.overheid.nl/owms/terms/Wassenaar_(gemeente) - - - Wateringen - http://standaarden.overheid.nl/owms/terms/Wateringen_(gemeente) - 2003-12-31 - - - Waterland - http://standaarden.overheid.nl/owms/terms/Waterland_(gemeente) - - - Weerselo - http://standaarden.overheid.nl/owms/terms/Weerselo_(gemeente) - 2000-12-31 - - - Weert - http://standaarden.overheid.nl/owms/terms/Weert_(gemeente) - - - Weesp - http://standaarden.overheid.nl/owms/terms/Weesp_(gemeente) - 2022-03-23 - - - Wehl - http://standaarden.overheid.nl/owms/terms/Wehl_(gemeente) - 2004-12-31 - - - Werkendam - http://standaarden.overheid.nl/owms/terms/Werkendam_(gemeente) - 2018-12-31 - - - Wervershoof - http://standaarden.overheid.nl/owms/terms/Wervershoof_(gemeente) - 2010-12-31 - - - West Betuwe - http://standaarden.overheid.nl/owms/terms/West_Betuwe - 2019-01-01 - - - West Maas en Waal - http://standaarden.overheid.nl/owms/terms/West_Maas_en_Waal - - - Wester-Koggenland - http://standaarden.overheid.nl/owms/terms/Wester-Koggenland_(gemeente) - 2006-12-31 - - - Westerkwartier - http://standaarden.overheid.nl/owms/terms/Westerkwartier - 2019-01-01 - - - Westerveld - http://standaarden.overheid.nl/owms/terms/Westerveld - - - Westervoort - http://standaarden.overheid.nl/owms/terms/Westervoort_(gemeente) - - - Westerwolde - http://standaarden.overheid.nl/owms/terms/Westerwolde - 2018-01-01 - - - Westland - http://standaarden.overheid.nl/owms/terms/Westland - 2004-01-01 - - - Weststellingwerf - http://standaarden.overheid.nl/owms/terms/Weststellingwerf - - - Westvoorne - http://standaarden.overheid.nl/owms/terms/Westvoorne_(gemeente) - 2022-12-31 - - - Wierden - http://standaarden.overheid.nl/owms/terms/Wierden_(gemeente) - - - Wieringen - http://standaarden.overheid.nl/owms/terms/Wieringen_(gemeente) - 2011-12-31 - - - Wieringermeer - http://standaarden.overheid.nl/owms/terms/Wieringermeer_(gemeente) - 2011-12-31 - - - Wijchen - http://standaarden.overheid.nl/owms/terms/Wijchen_(gemeente) - - - Wijdemeren - http://standaarden.overheid.nl/owms/terms/Wijdemeren - 2002-01-01 - - - Wijhe - http://standaarden.overheid.nl/owms/terms/Wijhe_(gemeente) - 2000-12-31 - - - Wijk bij Duurstede - http://standaarden.overheid.nl/owms/terms/Wijk_bij_Duurstede_(gemeente) - - - Winschoten - http://standaarden.overheid.nl/owms/terms/Winschoten_(gemeente) - 2009-12-31 - - - Winsum - http://standaarden.overheid.nl/owms/terms/Winsum_(gemeente) - 2018-12-31 - - - Winterswijk - http://standaarden.overheid.nl/owms/terms/Winterswijk_(gemeente) - - - Wisch - http://standaarden.overheid.nl/owms/terms/Wisch_(gemeente) - 2004-12-31 - - - Woensdrecht - http://standaarden.overheid.nl/owms/terms/Woensdrecht_(gemeente) - - - Woerden - http://standaarden.overheid.nl/owms/terms/Woerden_(gemeente) - - - Wognum - http://standaarden.overheid.nl/owms/terms/Wognum_(gemeente) - 2006-12-31 - - - Wormerland - http://standaarden.overheid.nl/owms/terms/Wormerland - - - Woudenberg - http://standaarden.overheid.nl/owms/terms/Woudenberg_(gemeente) - - - Woudrichem - http://standaarden.overheid.nl/owms/terms/Woudrichem_(gemeente) - 2018-12-31 - - - Wymbritseradiel - http://standaarden.overheid.nl/owms/terms/Wymbritseradiel - 2010-12-31 - - - Wûnseradiel - http://standaarden.overheid.nl/owms/terms/Wunseradiel - 2010-12-31 - - - Zaanstad - http://standaarden.overheid.nl/owms/terms/Zaanstad - - - Zaltbommel - http://standaarden.overheid.nl/owms/terms/Zaltbommel_(gemeente) - - - Zandvoort - http://standaarden.overheid.nl/owms/terms/Zandvoort_(gemeente) - - - Zederik - http://standaarden.overheid.nl/owms/terms/Zederik_(gemeente) - 2018-12-31 - - - Zeevang - http://standaarden.overheid.nl/owms/terms/Zeevang - 2015-12-31 - - - Zeewolde - http://standaarden.overheid.nl/owms/terms/Zeewolde_(gemeente) - - - Zeist - http://standaarden.overheid.nl/owms/terms/Zeist_(gemeente) - - - Zelhem - http://standaarden.overheid.nl/owms/terms/Zelhem_(gemeente) - 2004-12-31 - - - Zevenaar - http://standaarden.overheid.nl/owms/terms/Zevenaar_(gemeente) - - - Zevenhuizen-Moerkapelle - http://standaarden.overheid.nl/owms/terms/Zevenhuizen-Moerkapelle - 2009-12-31 - - - Zijpe - http://standaarden.overheid.nl/owms/terms/Zijpe_(gemeente) - 2012-12-31 - - - Zoetermeer - http://standaarden.overheid.nl/owms/terms/Zoetermeer_(gemeente) - - - Zoeterwoude - http://standaarden.overheid.nl/owms/terms/Zoeterwoude_(gemeente) - - - Zuidhorn - http://standaarden.overheid.nl/owms/terms/Zuidhorn_(gemeente) - 2018-12-31 - - - Zuidplas - http://standaarden.overheid.nl/owms/terms/Zuidplas - 2010-01-01 - - - Zundert - http://standaarden.overheid.nl/owms/terms/Zundert_(gemeente) - - - Zutphen - http://standaarden.overheid.nl/owms/terms/Zutphen_(gemeente) - - - Zwartewaterland - http://standaarden.overheid.nl/owms/terms/Zwartewaterland - 2001-01-01 - - - Zwartsluis - http://standaarden.overheid.nl/owms/terms/Zwartsluis_(gemeente) - 2000-12-31 - - - Zwijndrecht - http://standaarden.overheid.nl/owms/terms/Zwijndrecht_(gemeente) - - - Zwolle - http://standaarden.overheid.nl/owms/terms/Zwolle_(gemeente) - - - het Bildt - http://standaarden.overheid.nl/owms/terms/Het_Bildt - 2017-12-31 - - \ No newline at end of file diff --git a/packages/catalogi-data/src/index.ts b/packages/catalogi-data/src/index.ts deleted file mode 100644 index dbc8efa2e..000000000 --- a/packages/catalogi-data/src/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; -import { create } from 'xmlbuilder2/lib'; - -const dir = './dist'; - -(function generateGemeenetJson() { - fs.readFile(require.resolve(path.resolve(process.cwd(), 'src/gemeente.xml')), (err, data) => { - if (err) { - // eslint-disable-next-line no-console - console.log(err); - } - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir, { - recursive: true, - }); - } - - const doc = create(data.toString()); - const gemeenteJson = doc.toObject(); - fs.writeFileSync(`${dir}/gemeente.json`, JSON.stringify(gemeenteJson)); - }); -})(); diff --git a/packages/catalogi-data/tsconfig.json b/packages/catalogi-data/tsconfig.json deleted file mode 100644 index 0bd5138da..000000000 --- a/packages/catalogi-data/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "commonjs", - "outDir": "dist/", - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "esModuleInterop": true, - "skipLibCheck": true - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "**/*.test.ts"] -} diff --git a/packages/content-compliance-checker/README.md b/packages/content-compliance-checker/README.md deleted file mode 100644 index 609ef2ecf..000000000 --- a/packages/content-compliance-checker/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Strapi plugin content-compliance-checker - -A quick description of content-compliance-checker. diff --git a/packages/content-compliance-checker/admin/src/components/ActionHeader.tsx b/packages/content-compliance-checker/admin/src/components/ActionHeader.tsx deleted file mode 100644 index 1364864a5..000000000 --- a/packages/content-compliance-checker/admin/src/components/ActionHeader.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Flex, Typography } from '@strapi/design-system'; -import { ButtonGroup } from '@utrecht/component-library-react/dist/css-module'; -import React, { type RefObject } from 'react'; -import { GoBackButton } from './GoBackButton'; -import { PrintButton } from './PrintButton'; -import { RedirectButton } from './RedirectButton'; - -interface ActionHeaderProps { - title: string; - contentRef: RefObject; - editLabel?: string; - backLabel?: string; - printLabel?: string; - redirectTo?: string; -} - -export const ActionHeader: React.FC = ({ - title, - contentRef, - editLabel, - backLabel, - printLabel, - redirectTo, -}) => { - return ( - - {title} - - {redirectTo && {editLabel}} - {backLabel && {backLabel}} - {contentRef && printLabel && {printLabel}} - - - ); -}; diff --git a/packages/content-compliance-checker/admin/src/components/BlockDetail/index.tsx b/packages/content-compliance-checker/admin/src/components/BlockDetail/index.tsx deleted file mode 100644 index 36d1b625e..000000000 --- a/packages/content-compliance-checker/admin/src/components/BlockDetail/index.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { Box, Flex, Status, Typography } from '@strapi/design-system'; -import type { PropsWithChildren } from 'react'; -import { useIntl } from 'react-intl'; -import getTrad from '../../utils/getTrad'; - -export const componentTypeMap: Record = { - 'components.utrecht-rich-text': 'Content Block', - 'components.utrecht-logo-button': 'Call to Action', - 'components.utrecht-spotlight': 'Spotlight', - 'components.faq': 'FAQ', - 'components.utrecht-multi-columns-button': 'Multi-Columns Button', - 'components.utrecht-accordion': 'Accordion', - 'components.utrecht-image': 'Image', - 'components.utrecht-link': 'Link', -}; -export interface BlockDetailProps { - component: string; - index: number; -} - -export const BlockDetail = ({ component, index, children }: PropsWithChildren) => { - const { formatMessage } = useIntl(); - return ( - - - - {formatMessage( - { id: getTrad('blockDetail.header'), defaultMessage: 'Blok {index} — Type: {type}' }, - { index: index + 1, type: componentTypeMap[component] }, - )} - - - {formatMessage({ - id: getTrad('blockDetail.missingCategory'), - defaultMessage: 'Ontbrekende kennisartikelcategorie', - })} - - - - {children} - - - ); -}; diff --git a/packages/content-compliance-checker/admin/src/components/EntityTable/index.tsx b/packages/content-compliance-checker/admin/src/components/EntityTable/index.tsx deleted file mode 100644 index 9f28f1719..000000000 --- a/packages/content-compliance-checker/admin/src/components/EntityTable/index.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { Box } from '@strapi/design-system/Box'; -import { Table, Tbody, Td, Th, Thead, Tr } from '@strapi/design-system/Table'; -import { Typography } from '@strapi/design-system/Typography'; -import React from 'react'; -import { RedirectButton } from '../RedirectButton'; // Adjust import path as needed - -const getNestedValue = (obj: any, path: string): any => path.split('.').reduce((acc, key) => acc?.[key], obj); - -interface EntityTableProps { - headers: string[]; - data: Array<{ id: string | number; [key: string]: any }>; - dataKeys: string[]; - redirectBasePath: string; - redirectLabel?: string; - actionHeader?: string; -} - -export const EntityTable: React.FC = ({ - headers, - data, - dataKeys, - redirectBasePath, - redirectLabel = 'Bekijk details', - actionHeader = 'Acties', -}) => { - return ( - - - - - {headers.map((header, index: number) => ( - - ))} - - - - - {data.map((item) => ( - - {dataKeys.map((key, index: number) => ( - - ))} - - - ))} - -
        {header}{actionHeader}
        - {getNestedValue(item, key)} - - {redirectLabel} -
        -
        - ); -}; diff --git a/packages/content-compliance-checker/admin/src/components/ErrorPage/index.tsx b/packages/content-compliance-checker/admin/src/components/ErrorPage/index.tsx deleted file mode 100644 index 53f79e9de..000000000 --- a/packages/content-compliance-checker/admin/src/components/ErrorPage/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Box, Button, Flex, Stack, Typography } from '@strapi/design-system'; -import type { DetailedHTMLProps, HTMLAttributes, PropsWithChildren } from 'react'; -import { GoBackButton } from '../GoBackButton'; - -interface ErrorPageProps extends DetailedHTMLProps, HTMLElement> { - buttonText?: string; -} - -export const ErrorPage = ({ children, buttonText, ...restProps }: PropsWithChildren) => ( -
        - - - {children} - - {buttonText && {buttonText}} - -
        -); diff --git a/packages/content-compliance-checker/admin/src/components/GoBackButton/index.tsx b/packages/content-compliance-checker/admin/src/components/GoBackButton/index.tsx deleted file mode 100644 index 723507c44..000000000 --- a/packages/content-compliance-checker/admin/src/components/GoBackButton/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Button } from '@strapi/design-system'; -import type { ReactNode } from 'react'; -import { useHistory } from 'react-router-dom'; - -interface GoBackButtonProps { - children?: ReactNode; -} - -export const GoBackButton = ({ children }: GoBackButtonProps) => { - const history = useHistory(); - return ( - - ); -}; diff --git a/packages/content-compliance-checker/admin/src/components/Initializer/index.tsx b/packages/content-compliance-checker/admin/src/components/Initializer/index.tsx deleted file mode 100644 index 572bdd306..000000000 --- a/packages/content-compliance-checker/admin/src/components/Initializer/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { useEffect, useRef } from 'react'; -import pluginId from '../../pluginId'; - -type InitializerProps = { - setPlugin: (id: string) => void; -}; - -const Initializer = ({ setPlugin }: InitializerProps) => { - const ref = useRef(setPlugin); - - useEffect(() => { - ref.current(pluginId); - }, []); - - return null; -}; - -export default Initializer; diff --git a/packages/content-compliance-checker/admin/src/components/LoadingPage/index.tsx b/packages/content-compliance-checker/admin/src/components/LoadingPage/index.tsx deleted file mode 100644 index 915191d15..000000000 --- a/packages/content-compliance-checker/admin/src/components/LoadingPage/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Box, Loader } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; -import getTrad from '../../utils/getTrad'; - -export const LoadingPage = () => { - const { formatMessage } = useIntl(); - - return ( -
        - - - - {formatMessage({ - id: getTrad('loadingPage.loadingText'), - defaultMessage: 'Bezig met laden, even geduld a.u.b.…', - })} - - -
        - ); -}; diff --git a/packages/content-compliance-checker/admin/src/components/Markdown/index.tsx b/packages/content-compliance-checker/admin/src/components/Markdown/index.tsx deleted file mode 100644 index aac7aa480..000000000 --- a/packages/content-compliance-checker/admin/src/components/Markdown/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Markdown as BaseMarkdown } from '@frameless/ui'; -import { Image, Link } from '@utrecht/component-library-react/dist/css-module'; -import isAbsoluteUrl from 'is-absolute-url'; - -type ImageProperties = { - src: string; - alt: string; - width: string; - height: string; -}; - -export const Markdown = ({ children }: { children: string }) => { - return ( - { - const { src, alt, width, height } = node?.properties as ImageProperties; - return ( - {alt - ); - }, - a: ({ children, node }) => { - const external = typeof node?.properties?.href === 'string' && isAbsoluteUrl(node?.properties?.href); - return external ? ( - - {children} - - ) : ( - - {children} - - ); - }, - }} - > - {children} - - ); -}; diff --git a/packages/content-compliance-checker/admin/src/components/PrintButton/index.tsx b/packages/content-compliance-checker/admin/src/components/PrintButton/index.tsx deleted file mode 100644 index 9331977ea..000000000 --- a/packages/content-compliance-checker/admin/src/components/PrintButton/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Button } from '@strapi/design-system'; -import type { ForwardedRef, PropsWithChildren, RefObject } from 'react'; -import { forwardRef } from 'react'; -import { useReactToPrint } from 'react-to-print'; - -interface PrintButtonProps { - contentRef: RefObject; -} - -export const PrintButton = forwardRef>( - ({ contentRef, children, ...restProps }, ref: ForwardedRef) => { - const reactToPrintFn = useReactToPrint({ contentRef }); - - return ( - - ); - }, -); - -PrintButton.displayName = 'PrintButton'; diff --git a/packages/content-compliance-checker/admin/src/components/RedirectButton/index.tsx b/packages/content-compliance-checker/admin/src/components/RedirectButton/index.tsx deleted file mode 100644 index 2f23864f3..000000000 --- a/packages/content-compliance-checker/admin/src/components/RedirectButton/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Button } from '@strapi/design-system'; -import type { ReactNode } from 'react'; -import { useHistory } from 'react-router-dom'; -interface RedirectButtonProps { - children?: ReactNode; - redirectTo: string; -} - -export const RedirectButton = ({ children, redirectTo }: RedirectButtonProps) => { - const history = useHistory(); - return ( - - ); -}; diff --git a/packages/content-compliance-checker/admin/src/components/Sections/index.tsx b/packages/content-compliance-checker/admin/src/components/Sections/index.tsx deleted file mode 100644 index b62c8bde1..000000000 --- a/packages/content-compliance-checker/admin/src/components/Sections/index.tsx +++ /dev/null @@ -1,155 +0,0 @@ -import { AdvancedLink, LogoButton, MultiColumnsButton } from '@frameless/ui'; -import { - AccordionProvider, - ButtonGroup, - Image, - SpotlightSection, -} from '@utrecht/component-library-react/dist/css-module'; -import { BlockDetail } from '../../components/BlockDetail'; -import { Markdown } from '../Markdown'; -export const Sections = ({ sections }: any) => ( - <> - {sections && - sections.map((component: any, index: number) => { - switch (component?.__component) { - case 'components.utrecht-rich-text': - return ( - component.content && ( - - {component.content} - - ) - ); - case 'components.utrecht-logo-button': - if (component.openFormsEmbed) { - const parsOpenFormsEmbedData = new URLSearchParams(component.openFormsEmbed); - const slug = parsOpenFormsEmbedData.get('slug'); - const label = parsOpenFormsEmbedData.get('label'); - return ( - - - {component.textContent || label} - - - ); - } - if (component && component.href && component.textContent) { - return ( - - - {component.textContent} - - - ); - } - return <>; - case 'components.faq': - if (Array.isArray(component.pdc_faq?.faq)) { - return ( - - ({ - id: faqItem?.id, - label: faqItem?.label as string, - headingLevel: faqItem?.headingLevel || 2, - body: faqItem?.body && {faqItem.body}, - }))} - /> - - ); - } - return <>; - case 'components.utrecht-accordion': - if (component?.item && component.item.length > 0) { - return ( - - ({ - id: accordionItem?.id, - label: accordionItem?.label as string, - headingLevel: accordionItem?.headingLevel || 2, - body: accordionItem?.body && {accordionItem.body}, - }))} - /> - - ); - } - return ; - case 'components.utrecht-image': - if (component.imageData?.width && component.imageData?.height && component?.imageData?.url) { - return ( - - {component?.imageData?.alternativeText - - ); - } - return ; - case 'components.utrecht-spotlight': - return ( - component.content && ( - - - {component.content} - {component?.logoButton && - component?.logoButton.length > 0 && - component?.logoButton?.map( - (button: any) => - button?.href && ( - - {button?.textContent} - - ), - )} - - - ) - ); - case 'components.utrecht-multi-columns-button': - return ; - case 'components.utrecht-link': - return ( - component?.href && - component?.textContent && ( - - - - {component?.textContent} - - - - ) - ); - default: - return <>; - } - })} - -); diff --git a/packages/content-compliance-checker/admin/src/index.tsx b/packages/content-compliance-checker/admin/src/index.tsx deleted file mode 100644 index 6a88a4d3d..000000000 --- a/packages/content-compliance-checker/admin/src/index.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import { TbFilterCheck } from 'react-icons/tb'; -import Initializer from './components/Initializer'; -import pluginId from './pluginId'; -import pluginPkg from '../../package.json'; -import './styles.css'; -import '@frameless/ui/dist/bundle.css'; -import '@utrecht/component-library-css'; -import '@utrecht/design-tokens/dist/index.css'; -const name = pluginPkg.strapi.name; - -export default { - register(app: any) { - app.addMenuLink({ - to: `/plugins/${pluginId}`, - icon: TbFilterCheck, - intlLabel: { - id: `${pluginId}.plugin.name`, - defaultMessage: 'Content compliance checker', - }, - Component: async () => { - const component = await import('./pages/App'); - - return component; - }, - permissions: [ - // Uncomment to set the permissions of the plugin here - // { - // action: '', // the action name should be plugin::plugin-name.actionType - // subject: null, - // }, - ], - }); - const plugin = { - id: pluginId, - initializer: Initializer, - isReady: false, - name, - }; - - app.registerPlugin(plugin); - }, - - bootstrap(app: any) {}, - - async registerTrads(app: { locales: string[] }) { - const { locales } = app; - - const importedTrads = await Promise.all( - (locales as any[]).map((locale) => { - return import(`./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/content-compliance-checker/admin/src/pages/AdditionalInformationDetailPage/index.tsx b/packages/content-compliance-checker/admin/src/pages/AdditionalInformationDetailPage/index.tsx deleted file mode 100644 index 9f61653c8..000000000 --- a/packages/content-compliance-checker/admin/src/pages/AdditionalInformationDetailPage/index.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { Box, Stack, Typography } from '@strapi/design-system'; -import { auth } from '@strapi/helper-plugin'; -import React, { useEffect, useRef, useState } from 'react'; -import { useParams } from 'react-router-dom'; -import { ActionHeader } from '../../components/ActionHeader'; -import { ErrorPage } from '../../components/ErrorPage'; -import { LoadingPage } from '../../components/LoadingPage'; -import { Sections } from '../../components/Sections'; -import { useIntl } from 'react-intl'; -import getTrad from '../../utils/getTrad'; - -type ProductWithFilteredBlocks = any; -const AdditionalInformationDetailPage = () => { - const contentRef = useRef(null); - const { id } = useParams<{ id: string }>(); - const token = auth.get('jwtToken'); - const [additionalInformation, setAdditionalInformation] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const { formatMessage } = useIntl(); - - useEffect(() => { - const fetchAdditionalInformation = async () => { - try { - const response = await fetch(`/content-compliance-checker/additional-information/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - if (!response.ok) - throw new Error( - formatMessage({ - id: getTrad('product.error'), - defaultMessage: 'Fout bij het ophalen van product', - }), - ); - const data: ProductWithFilteredBlocks = await response.json(); - setAdditionalInformation(data); - } catch (err) { - setError( - err instanceof Error - ? err.message - : formatMessage({ - id: getTrad('error.unknown'), - defaultMessage: 'Er is een onbekende fout opgetreden', - }), - ); - } finally { - setLoading(false); - } - }; - - fetchAdditionalInformation(); - }, [id]); - - if (loading) return ; - if (error) - return ( - - {formatMessage( - { - id: getTrad('errorPage.message'), - defaultMessage: 'Fout: {error}', - }, - { error }, - )} - - ); - if (!additionalInformation) - return ( - - {formatMessage({ - id: getTrad('additionalInformationDetailPage.notFound'), - defaultMessage: 'Aanvullende informatie niet gevonden', - })} - - ); - return ( -
        - - - - - {formatMessage( - { - id: getTrad('blocksWithoutCategory'), - defaultMessage: 'Blokken zonder "kennisartikelCategorie" ({count})', - }, - { count: additionalInformation?.content?.contentBlock?.length ?? 0 }, - )} - - - - ({ - ...block, - __component: 'components.utrecht-rich-text', - }))} - locale="nl" - /> - - - -
        - ); -}; - -export default AdditionalInformationDetailPage; diff --git a/packages/content-compliance-checker/admin/src/pages/AdditionalInformationFilterPage/index.tsx b/packages/content-compliance-checker/admin/src/pages/AdditionalInformationFilterPage/index.tsx deleted file mode 100644 index 86f5ee8a8..000000000 --- a/packages/content-compliance-checker/admin/src/pages/AdditionalInformationFilterPage/index.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { Box, Flex, Typography } from '@strapi/design-system'; -import { auth } from '@strapi/helper-plugin'; -import React, { useEffect, useState } from 'react'; -import { useRef } from 'react'; -import { EntityTable } from '../../components/EntityTable'; -import { ErrorPage } from '../../components/ErrorPage'; -import { LoadingPage } from '../../components/LoadingPage'; -import { PrintButton } from '../../components/PrintButton'; -import { useIntl } from 'react-intl'; -import getTrad from '../../utils/getTrad'; - -const AdditionalInformationFilterPage = () => { - const token = auth.get('jwtToken'); - const [additionalInformation, setAdditionalInformation] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const contentRef = useRef(null); - const { formatMessage } = useIntl(); - - useEffect(() => { - const fetchAdditionalInformation = async () => { - try { - const response = await fetch('/content-compliance-checker/additional-information', { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - if (!response.ok) - throw new Error( - formatMessage({ - id: getTrad('additionalInformationPage.error'), - defaultMessage: 'Fout bij het ophalen van aanvullende informatie', - }), - ); - const data: any[] = await response.json(); - setAdditionalInformation(data); - } catch (err) { - setError( - err instanceof Error - ? err.message - : formatMessage({ - id: getTrad('error.unknown'), - defaultMessage: 'Er is een onbekende fout opgetreden', - }), - ); - } finally { - setLoading(false); - } - }; - - fetchAdditionalInformation(); - }, [token]); - - if (loading) return ; - if (error) - return ( - - {formatMessage( - { - id: getTrad('errorPage.message'), - defaultMessage: 'Fout bij het ophalen van aanvullende informatie', - }, - { error }, - )} - - ); - - return ( -
        - - - - - {formatMessage({ - id: getTrad('filterDashboardPage.title'), - defaultMessage: 'Dashboard voor inhoud naleving', - })} - - - {formatMessage({ - id: getTrad('additionalInformationFilterPage.subtitle'), - defaultMessage: "Aanvullende informatie met blokken die niet gecategoriseerd zijn als 'kennisartikel'", - })} - - - - - {formatMessage({ id: getTrad('printButton.label'), defaultMessage: 'Afdrukken' })} - - - - - -
        - ); -}; - -export default AdditionalInformationFilterPage; diff --git a/packages/content-compliance-checker/admin/src/pages/App/index.tsx b/packages/content-compliance-checker/admin/src/pages/App/index.tsx deleted file mode 100644 index ded864369..000000000 --- a/packages/content-compliance-checker/admin/src/pages/App/index.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { Box, Layout, SubNav, SubNavHeader, SubNavLink, SubNavSection, SubNavSections } from '@strapi/design-system'; -import { AnErrorOccurred } from '@strapi/helper-plugin'; -import FilterIcon from '@strapi/icons/Filter'; -import InformationIcon from '@strapi/icons/Information'; -import React from 'react'; -import { Link, Route, Switch, useLocation } from 'react-router-dom'; -import { useIntl } from 'react-intl'; -import pluginId from '../../pluginId'; -import AdditionalInformationDetailPage from '../AdditionalInformationDetailPage'; -import AdditionalInformationFilterPage from '../AdditionalInformationFilterPage'; -import ProductDetailPage from '../ProductDetailPage'; -import ProductFilterPage from '../ProductFilterPage'; -import getTrad from '../../utils/getTrad'; - -const App = () => { - const location = useLocation(); - const { formatMessage } = useIntl(); - return ( -
        - - - - - } - className={location.pathname === `/plugins/${pluginId}` ? 'active' : ''} - > - {formatMessage({ - id: getTrad('navigation.link.productFilters'), - defaultMessage: 'Productfilters', - })} - - } - className={location.pathname.includes('additional-information-filter') ? 'active' : ''} - > - {formatMessage({ - id: getTrad('navigation.link.additionalInfoFilters'), - defaultMessage: 'Aanvullende informatiefilters', - })} - - - - - } - > - - - - - - - - - - -
        - ); -}; - -export default App; diff --git a/packages/content-compliance-checker/admin/src/pages/ProductDetailPage/index.tsx b/packages/content-compliance-checker/admin/src/pages/ProductDetailPage/index.tsx deleted file mode 100644 index dc4f82958..000000000 --- a/packages/content-compliance-checker/admin/src/pages/ProductDetailPage/index.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import { Box, Stack, Typography } from '@strapi/design-system'; -import { auth } from '@strapi/helper-plugin'; -import React, { useEffect, useRef, useState } from 'react'; -import { useParams } from 'react-router-dom'; -import { ActionHeader } from '../../components/ActionHeader'; -import { ErrorPage } from '../../components/ErrorPage'; -import { LoadingPage } from '../../components/LoadingPage'; -import { Sections } from '../../components/Sections'; -import { useIntl } from 'react-intl'; -import getTrad from '../../utils/getTrad'; - -type ProductWithFilteredBlocks = any; -const ProductDetailPage = () => { - const token = auth.get('jwtToken'); - const contentRef = useRef(null); - const { id } = useParams<{ id: string }>(); - const [product, setProduct] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const { formatMessage } = useIntl(); - - useEffect(() => { - const fetchProduct = async () => { - try { - const response = await fetch(`/content-compliance-checker/products/${id}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - if (!response.ok) - throw new Error( - formatMessage({ - id: getTrad('product.error'), - defaultMessage: 'Fout bij het ophalen van product', - }), - ); - const data: ProductWithFilteredBlocks = await response.json(); - setProduct(data); - } catch (err) { - setError( - err instanceof Error - ? err.message - : formatMessage({ - id: getTrad('error.unknown'), - defaultMessage: 'Er is een onbekende fout opgetreden', - }), - ); - } finally { - setLoading(false); - } - }; - - fetchProduct(); - }, [id]); - - if (loading) return ; - if (error) - return ( - - {formatMessage( - { - id: getTrad('errorPage.message'), - defaultMessage: 'Fout: {error}', - }, - { error }, - )} - - ); - if (!product) - return ( - - {formatMessage({ - id: getTrad('product.notFound'), - defaultMessage: 'Product niet gevonden', - })} - - ); - - return ( -
        - - - - - {formatMessage( - { - id: getTrad('blocksWithoutCategory'), - defaultMessage: 'Blokken zonder "kennisartikelCategorie" ({count})', - }, - { count: product?.sections?.length ?? 0 }, - )} - - - - - - - -
        - ); -}; - -export default ProductDetailPage; diff --git a/packages/content-compliance-checker/admin/src/pages/ProductFilterPage/index.tsx b/packages/content-compliance-checker/admin/src/pages/ProductFilterPage/index.tsx deleted file mode 100644 index 2f321f062..000000000 --- a/packages/content-compliance-checker/admin/src/pages/ProductFilterPage/index.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { Box, Flex, Typography } from '@strapi/design-system'; -import { auth } from '@strapi/helper-plugin'; -import React, { useEffect, useRef, useState } from 'react'; -import { EntityTable } from '../../components/EntityTable'; -import { ErrorPage } from '../../components/ErrorPage'; -import { LoadingPage } from '../../components/LoadingPage'; -import { PrintButton } from '../../components/PrintButton'; -import { useIntl } from 'react-intl'; -import getTrad from '../../utils/getTrad'; - -const ProductFilterPage = () => { - const token = auth.get('jwtToken'); - const [products, setProducts] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const contentRef = useRef(null); - const { formatMessage } = useIntl(); - - useEffect(() => { - const fetchProducts = async () => { - try { - const response = await fetch('/content-compliance-checker/products', { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - if (!response.ok) - throw new Error( - formatMessage({ - id: getTrad('product.error'), - defaultMessage: 'Fout bij het ophalen van product', - }), - ); - const data: any[] = await response.json(); - setProducts(data); - } catch (err) { - setError( - err instanceof Error - ? err.message - : formatMessage({ - id: getTrad('error.unknown'), - defaultMessage: 'Er is een onbekende fout opgetreden', - }), - ); - } finally { - setLoading(false); - } - }; - - fetchProducts(); - }, []); - - if (loading) return ; - if (error) - return ( - - {formatMessage( - { - id: getTrad('errorPage.message'), - defaultMessage: 'Fout: {error}', - }, - { error }, - )} - - ); - - return ( -
        - - - - - {formatMessage({ - id: getTrad('filterDashboardPage.title'), - defaultMessage: 'Dashboard voor inhoud naleving', - })} - - - {formatMessage({ - id: getTrad('productFilterPage.subtitle'), - defaultMessage: "Producten met blokken die niet gecategoriseerd zijn als 'kennisartikel'", - })} - - - - - {formatMessage({ id: getTrad('printButton.label'), defaultMessage: 'Afdrukken' })} - - - - - -
        - ); -}; - -export default ProductFilterPage; diff --git a/packages/content-compliance-checker/admin/src/pluginId.ts b/packages/content-compliance-checker/admin/src/pluginId.ts deleted file mode 100644 index e1537b84d..000000000 --- a/packages/content-compliance-checker/admin/src/pluginId.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginPkg from '../../package.json'; - -const pluginId = pluginPkg.strapi.name; - -export default pluginId; diff --git a/packages/content-compliance-checker/admin/src/styles.css b/packages/content-compliance-checker/admin/src/styles.css deleted file mode 100644 index b659e8c3d..000000000 --- a/packages/content-compliance-checker/admin/src/styles.css +++ /dev/null @@ -1,79 +0,0 @@ -:root { - --utrecht-space-around: 1; - --utrecht-spotlight-section-margin-block-start: 16px; - --utrecht-spotlight-section-margin-block-end: 16px; - - /* Advanced Link tokens */ - --utrecht-advanced-link-with-icon-text-decoration: none; - --utrecht-advanced-link-with-icon-text-decoration-thickness: 1px; - --utrecht-advanced-link-color-active-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-color-focus-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-color-hover-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-color-visited-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-color-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-icon-margin-inline-end: var(--utrecht-space-inline-xs); - --utrecht-advanced-link-icon-size: 14px; - - /* Multi columns button tokens */ - --utrecht-multi-columns-button-margin-block-start: var(--utrecht-space-block-md); - --utrecht-multi-columns-button-margin-block-end: var(--utrecht-space-block-md); - --utrecht-multi-columns-button-item-padding-inline-start: var(--utrecht-space-inline-lg); - --utrecht-multi-columns-button-item-padding-inline-end: var(--utrecht-space-inline-lg); - --utrecht-multi-columns-button-item-padding-block-start: var(--utrecht-space-block-lg); - --utrecht-multi-columns-button-item-padding-block-end: var(--utrecht-space-block-lg); - --utrecht-multi-columns-button-divider-color: var(--utrecht-color-grey-90); - --utrecht-multi-columns-buttons-divider-width: 1px; - --utrecht-multi-columns-button-item-mobile-padding-inline-start: var(--utrecht-space-inline-xs); - --utrecht-multi-columns-button-item-mobile-padding-inline-end: var(--utrecht-space-inline-xs); - --utrecht-multi-columns-button-item-mobile-padding-block-start: var(--utrecht-space-block-xs); - --utrecht-multi-columns-button-item-mobile-padding-block-end: var(--utrecht-space-block-xs); - - /* Logo button tokens */ - --utrecht-color-magenta: #bc3983; - --utrecht-button-link-magenta-focus-border-color: var(--utrecht-color-grey-10); - --utrecht-button-link-magenta-active-border-color: var(--utrecht-color-grey-10); - --utrecht-button-link-magenta-active-color: var(--utrecht-color-white); - --utrecht-button-link-magenta-background-color: var(--utrecht-color-magenta); - --utrecht-button-link-magenta-active-background-color: var(--utrecht-color-magenta); - --utrecht-button-link-magenta-hover-background-color: var(--utrecht-color-magenta); - --utrecht-button-link-magenta-focus-background-color: var(--utrecht-color-magenta); - --utrecht-button-link-magenta-pressed-background-color: var(--utrecht-color-magenta); - - /* image & caption tokens */ - - --utrecht-figure-margin-inline-start: 0; - --utrecht-figure-margin-inline-end: 0; - --utrecht-figure-margin-block-start: var(--utrecht-space-block-md); - --utrecht-figure-margin-block-end: var(--utrecht-space-block-md); - --utrecht-figure--figcaption-color: var(--utrecht-color-grey-40); - --utrecht-figure--figcaption-font-size: var(--utrecht-typography-scale-sm-font-size); - --utrecht-figure-figcaption-margin-block-start: var(--utrecht-space-block-2xs); - - /* Button group */ - --utrecht-button-group-margin-block-start: var(--utrecht-space-block-xs); - --utrecht-button-group-margin-block-end: var(--utrecht-space-block-xs); -} - -@media print { - .utrecht-no-print { - display: none !important; - } - .utrecht-accordion__panel { - display: block; - } - .utrecht-accordion__button[aria-expanded="false"]::after { - display: none; - } -} -.utrecht-sr-only { - block-size: 1px; - border: 0; - clip: rect(0, 0, 0, 0); - inline-size: 1px; - margin-block: -1px; - margin-inline: -1px; - overflow: hidden; - padding-block: 0; - padding-inline: 0; - position: absolute; -} diff --git a/packages/content-compliance-checker/admin/src/translations/en.json b/packages/content-compliance-checker/admin/src/translations/en.json deleted file mode 100644 index adf8acc1b..000000000 --- a/packages/content-compliance-checker/admin/src/translations/en.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "content-compliance-checker.plugin.name": "Content compliance checker", - - "blockDetail.header": "Block {index} — Type: {type}", - "blockDetail.missingCategory": "Missing knowledge article category", - - "entityTable.headers.title": "Title", - "entityTable.headers.missingBlocks": "Missing blocks for knowledge article categories", - "entityTable.redirectLabel": "View details", - "entityTable.actionHeader": "Details", - - "navigation.ariaLabel": "Content compliance checker navigation", - "navigation.header": "Content compliance checker", - "navigation.section.filters": "Filters", - "navigation.link.productFilters": "Product filters", - "navigation.link.additionalInfoFilters": "Additional information filters", - - "blocksWithoutCategory": "Blocks without \"knowledge article category\" ({count})", - - "filterDashboardPage.title": "Content Compliance Dashboard", - - "additionalInformationFilterPage.subtitle": "Additional information with blocks not categorized as 'knowledge article'", - "additionalInformationPage.error": "Error fetching additional information", - "additionalInformationDetailPage.notFound": "Additional information not found", - - "productFilterPage.subtitle": "Products with blocks not categorized as 'knowledge article'", - "product.error": "Error fetching products", - "product.notFound": "Product not found", - - "printButton.label": "Print", - - "backToBDashboardButton.text": "Back to Dashboard", - - "updateButton.text": "Update", - - "error.unknown": "Unknown error occurred", - "errorPage.message": "Error: {error}", - - "loadingPage.loadingText": "Bezig met laden, even geduld a.u.b.…" -} diff --git a/packages/content-compliance-checker/admin/src/translations/nl.json b/packages/content-compliance-checker/admin/src/translations/nl.json deleted file mode 100644 index 323adeed4..000000000 --- a/packages/content-compliance-checker/admin/src/translations/nl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "content-compliance-checker.plugin.name": "Controle op inhoudsnaleving", - - "blockDetail.header": "Blok {index} — Type: {type}", - "blockDetail.missingCategory": "Ontbrekende kennisartikelcategorie", - - "entityTable.headers.title": "Titel", - "entityTable.headers.missingBlocks": "Ontbrekende blokken voor kennisartikelcategorieën", - "entityTable.redirectLabel": "Bekijk details", - "entityTable.actionHeader": "Details", - - "blocksWithoutCategory": "Blokken zonder \"kennisartikelCategorie\" ({count})", - - "filterDashboardPage.title": "Dashboard voor inhoud naleving", - - "navigation.ariaLabel": "Navigatie van de content compliance checker", - "navigation.header": "Controle op inhoudsnaleving", - "navigation.section.filters": "Filters", - "navigation.link.productFilters": "Productfilters", - "navigation.link.additionalInfoFilters": "Aanvullende informatiefilters", - - "additionalInformationFilterPage.subtitle": "Aanvullende informatie met blokken die niet gecategoriseerd zijn als 'kennisartikel'", - "additionalInformationPage.error": "Fout bij het ophalen van aanvullende informatie", - "additionalInformationDetailPage.notFound": "Aanvullende informatie niet gevonden", - - "productFilterPage.subtitle": "Producten met blokken die niet gecategoriseerd zijn als 'kennisartikel'", - "product.error": "Fout bij het ophalen van product", - "product.notFound": "Product niet gevonden", - - "printButton.label": "Afdrukken", - "backToBDashboardButton.text": "Terug naar Dashboard", - "updateButton.text": "Bijwerken", - "error.unknown": "Er is een onbekende fout opgetreden", - "errorPage.message": "Fout: {error}", - - "loadingPage.loadingText": "Loading, please wait…" -} diff --git a/packages/content-compliance-checker/admin/src/utils/getTrad.ts b/packages/content-compliance-checker/admin/src/utils/getTrad.ts deleted file mode 100644 index a539a5015..000000000 --- a/packages/content-compliance-checker/admin/src/utils/getTrad.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginId from '../pluginId'; - -const getTrad = (id: string) => `${pluginId}.${id}`; - -export default getTrad; diff --git a/packages/content-compliance-checker/custom.d.ts b/packages/content-compliance-checker/custom.d.ts deleted file mode 100644 index 321f3c0d1..000000000 --- a/packages/content-compliance-checker/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; diff --git a/packages/content-compliance-checker/package.json b/packages/content-compliance-checker/package.json deleted file mode 100644 index 62969f657..000000000 --- a/packages/content-compliance-checker/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "@frameless/content-compliance-checker", - "version": "0.0.0", - "description": "A Strapi plugin that audits content blocks for compliance with category requirements. Specifically checks for blocks that don't have the 'kennisartikel' category assigned, helping maintain content standards across products.", - "strapi": { - "name": "content-compliance-checker", - "description": "Dashboard for identifying content blocks that don't meet category requirements.", - "kind": "plugin" - }, - "keywords": [ - "strapi", - "plugin", - "content", - "compliance", - "checker", - "kennisartikel", - "category", - "requirements", - "dashboard", - "block", - "audit" - ], - "dependencies": { - "@frameless/ui": "0.1.2", - "@strapi/design-system": "1.19.0", - "@strapi/helper-plugin": "4.25.12", - "@strapi/icons": "1.19.0", - "@utrecht/component-library-css": "7.2.2", - "@utrecht/component-library-react": "10.2.0", - "@utrecht/design-tokens": "3.2.0", - "is-absolute-url": "4.0.1", - "react-icons": "5.5.0", - "react-to-print": "3.1.0" - }, - "devDependencies": { - "@strapi/typescript-utils": "4.25.22", - "@types/react-router-dom": "5.3.3", - "@types/react": "18.3.12", - "@types/react-dom": "18.3.1", - "@types/styled-components": "5.1.34", - "react-dom": "18.3.1", - "react-router-dom": "5.3.4", - "react": "18.3.1", - "styled-components": "5.3.11", - "typescript": "5.8.3" - }, - "peerDependencies": { - "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" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-flo-legal-embed" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "author": { - "name": "" - }, - "engines": { - "node": "20.x.x" - }, - "scripts": { - "develop": "tsc -p tsconfig.server.json -w", - "build": "tsc -p tsconfig.server.json", - "lint-build": "tsc --noEmit --project tsconfig.json" - }, - "license": "EUPL-1.2" -} diff --git a/packages/content-compliance-checker/server/config/index.ts b/packages/content-compliance-checker/server/config/index.ts deleted file mode 100644 index d51850754..000000000 --- a/packages/content-compliance-checker/server/config/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default { - default: {}, - validator() {}, -}; diff --git a/packages/content-compliance-checker/server/content-types/index.ts b/packages/content-compliance-checker/server/content-types/index.ts deleted file mode 100644 index ff8b4c563..000000000 --- a/packages/content-compliance-checker/server/content-types/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default {}; diff --git a/packages/content-compliance-checker/server/controllers/content-compliance-checker.ts b/packages/content-compliance-checker/server/controllers/content-compliance-checker.ts deleted file mode 100644 index 8e2076b14..000000000 --- a/packages/content-compliance-checker/server/controllers/content-compliance-checker.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import { Context } from 'koa'; - -export default ({ strapi }: { strapi: Strapi }) => ({ - async getProducts(ctx: Context) { - try { - const products = await strapi - .plugin('content-compliance-checker') - .service('content-compliance-checker') - .findProductsWithNoneKennisartikelBlocks(); - - ctx.body = products; - } catch (error) { - ctx.throw(500, error instanceof Error ? error.message : String(error)); - } - }, - async getProductBlocks(ctx: Context) { - try { - const { id } = ctx.params; - const productBlocks = await strapi - .plugin('content-compliance-checker') - .service('content-compliance-checker') - .getProductBlocks(id); - - if (!productBlocks[0]) { - ctx.notFound('Product not found'); - return; - } - ctx.body = productBlocks[0]; - } catch (error) { - ctx.throw(500, error instanceof Error ? error.message : String(error)); - } - }, - async getAdditionalInformation(ctx: Context) { - try { - const additionalInformation = await strapi - .plugin('content-compliance-checker') - .service('content-compliance-checker') - .findAdditionalInformationWithNoneKennisartikelBlocks(); - - ctx.body = additionalInformation; - } catch (error) { - ctx.throw(500, error instanceof Error ? error.message : String(error)); - } - }, - async getAdditionalInformationBlocks(ctx: Context) { - try { - const { id } = ctx.params; - const additionalInfo = await strapi - .plugin('content-compliance-checker') - .service('content-compliance-checker') - .getAdditionalInformationBlocks(id); - - if (!additionalInfo[0]) { - ctx.notFound('Additional information not found'); - return; - } - ctx.body = additionalInfo[0]; - } catch (error) { - ctx.throw(500, error instanceof Error ? error.message : String(error)); - } - }, -}); diff --git a/packages/content-compliance-checker/server/controllers/index.ts b/packages/content-compliance-checker/server/controllers/index.ts deleted file mode 100644 index 6b02e0ada..000000000 --- a/packages/content-compliance-checker/server/controllers/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import contentComplianceChecker from './content-compliance-checker'; - -export default { - 'content-compliance-checker': contentComplianceChecker, -}; diff --git a/packages/content-compliance-checker/server/index.ts b/packages/content-compliance-checker/server/index.ts deleted file mode 100644 index 2a7f35faf..000000000 --- a/packages/content-compliance-checker/server/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import config from './config'; -import contentTypes from './content-types'; -import controllers from './controllers'; -import routes from './routes'; -import services from './services'; - -export default { - config, - controllers, - routes, - services, - contentTypes, -}; diff --git a/packages/content-compliance-checker/server/routes/index.ts b/packages/content-compliance-checker/server/routes/index.ts deleted file mode 100644 index 674264e21..000000000 --- a/packages/content-compliance-checker/server/routes/index.ts +++ /dev/null @@ -1,46 +0,0 @@ -export default [ - { - method: 'GET', - path: '/products', - handler: 'plugin::content-compliance-checker.content-compliance-checker.getProducts', - config: { - policies: [], - auth: { - scope: ['authenticated'], - }, - }, - }, - { - method: 'GET', - path: '/products/:id', - handler: 'plugin::content-compliance-checker.content-compliance-checker.getProductBlocks', - config: { - policies: [], - auth: { - scope: ['authenticated'], - }, - }, - }, - { - method: 'GET', - path: '/additional-information', - handler: 'plugin::content-compliance-checker.content-compliance-checker.getAdditionalInformation', - config: { - policies: [], - auth: { - scope: ['authenticated'], - }, - }, - }, - { - method: 'GET', - path: '/additional-information/:id', - handler: 'plugin::content-compliance-checker.content-compliance-checker.getAdditionalInformationBlocks', - config: { - policies: [], - auth: { - scope: ['authenticated'], - }, - }, - }, -]; diff --git a/packages/content-compliance-checker/server/services/content-compliance-checker.ts b/packages/content-compliance-checker/server/services/content-compliance-checker.ts deleted file mode 100644 index b679d7678..000000000 --- a/packages/content-compliance-checker/server/services/content-compliance-checker.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { Strapi } from '@strapi/strapi'; - -type Section = { - kennisartikelCategorie: string | null; - [key: string]: any; -}; - -type Product = { - sections?: Section[]; - [key: string]: any; -}; -type ContentBlock = { - kennisartikelCategorie: string | null; - [key: string]: any; -}; - -type AdditionalInformation = { - content?: { - contentBlock?: ContentBlock[]; - [key: string]: any; - }; - [key: string]: any; -}; - -const filterAdditionalInformationWithNoneKennisartikelBlocks = ( - additionalInformation: AdditionalInformation[], -): AdditionalInformation[] => { - return additionalInformation.reduce((acc, info) => { - const contentBlock = info.content?.contentBlock; - const filteredBlocks = contentBlock?.filter((block) => block.kennisartikelCategorie === null); - - if (filteredBlocks && filteredBlocks.length > 0) { - acc.push({ - ...info, - content: { - ...info.content, - contentBlock: filteredBlocks, - }, - }); - } - - return acc; - }, []); -}; - -const filterProductsWithNoneKennisartikelBlocks = (products: Product[]): Product[] => { - return products.reduce((filtered, product) => { - const filteredSections = product.sections?.filter((section) => section.kennisartikelCategorie === null); - - if (filteredSections && filteredSections.length > 0) { - filtered.push({ - ...product, - sections: filteredSections, - }); - } - - return filtered; - }, []); -}; -export default ({ strapi }: { strapi: Strapi }) => ({ - async findProductsWithNoneKennisartikelBlocks() { - // fetch all products with their blocks - const products = await strapi.entityService?.findMany('api::product.product', { - populate: '*', - sort: 'title:asc', - }); - // filter products that have at least one block without kennisartikel category - const filteredProducts = filterProductsWithNoneKennisartikelBlocks(products as Product[]); - return filteredProducts; - }, - async getProductBlocks(id: string) { - const product = (await strapi.entityService?.findOne('api::product.product', id, { - populate: { - sections: { - populate: { - item: true, - kennisartikelCategorie: true, - imageData: true, - logoButton: true, - pdc_faq: { - populate: { - faq: true, - }, - }, - column: { - populate: { - logoButton: true, - }, - }, - }, - }, - }, - })) as Product | null; - if (!product) { - return null; - } - - const filteredSections = filterProductsWithNoneKennisartikelBlocks([product]); - return filteredSections; - }, - async findAdditionalInformationWithNoneKennisartikelBlocks() { - // fetch all additional information with their blocks - const additionalInformation = await strapi.entityService?.findMany( - 'api::additional-information.additional-information', - { - populate: { - content: { - populate: { - contentBlock: true, - }, - }, - }, - sort: 'title:asc', - }, - ); - const filteredAdditionalInformation = filterAdditionalInformationWithNoneKennisartikelBlocks( - additionalInformation as AdditionalInformation[], - ); - return filteredAdditionalInformation; - }, - async getAdditionalInformationBlocks(id: string) { - const additionalInfo = await strapi.entityService?.findOne( - 'api::additional-information.additional-information', - id, - { - populate: { - content: { - populate: { - contentBlock: true, - }, - }, - }, - }, - ); - - const filteredAdditionalInfo = filterAdditionalInformationWithNoneKennisartikelBlocks([ - additionalInfo, - ] as AdditionalInformation[]); - return filteredAdditionalInfo; - }, -}); diff --git a/packages/content-compliance-checker/server/services/index.ts b/packages/content-compliance-checker/server/services/index.ts deleted file mode 100644 index 6b02e0ada..000000000 --- a/packages/content-compliance-checker/server/services/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import contentComplianceChecker from './content-compliance-checker'; - -export default { - 'content-compliance-checker': contentComplianceChecker, -}; diff --git a/packages/content-compliance-checker/strapi-admin.js b/packages/content-compliance-checker/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/content-compliance-checker/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/content-compliance-checker/strapi-server.js b/packages/content-compliance-checker/strapi-server.js deleted file mode 100644 index bf5595886..000000000 --- a/packages/content-compliance-checker/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./dist/server'); diff --git a/packages/content-compliance-checker/tsconfig.json b/packages/content-compliance-checker/tsconfig.json deleted file mode 100644 index d2df620ad..000000000 --- a/packages/content-compliance-checker/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/admin", - "compilerOptions": { - "target": "ESNext", - "strict": true, - "jsx": "react-jsx", - "esModuleInterop": true, - "allowSyntheticDefaultImports": true - }, - "include": ["admin", "custom.d.ts"], - "exclude": ["node_modules/", "dist/", "server/", "**/*.test.ts"] -} diff --git a/packages/content-compliance-checker/tsconfig.server.json b/packages/content-compliance-checker/tsconfig.server.json deleted file mode 100644 index bd3b0df99..000000000 --- a/packages/content-compliance-checker/tsconfig.server.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/server", - - "compilerOptions": { - "outDir": "dist", - "rootDir": "." - }, - - "include": ["server", "server/**/*.json"], - - "exclude": ["node_modules/", "dist/", "admin/", "**/*.test.ts"] -} diff --git a/packages/editoria11y/README.md b/packages/editoria11y/README.md index eba246a87..1372d26c8 100644 --- a/packages/editoria11y/README.md +++ b/packages/editoria11y/README.md @@ -32,7 +32,7 @@ A StencilJS web component wrapper for [Editoria11y](https://github.com/itmaybejj 1. **Install the packages:** ```bash - yarn add @frameless/editoria11y @frameless/ui + pnpm add @frameless/editoria11y @frameless/ui ``` 2. **Use the reusable component:** @@ -86,7 +86,6 @@ This package was created using the original Editoria11y source with automated mo ``` 2. **Add ESM build support:** - - Copy `frameless/packages/lib/build-esm-script.mjs` to `scripts/build-esm-script.mjs` - Add to package.json: `"build:esm": "node scripts/build-esm-script.mjs"` - The script automatically handles: @@ -106,7 +105,7 @@ This package was created using the original Editoria11y source with automated mo 4. **Build the wrapper component:** ```bash - yarn build + pnpm build ``` ## Why This Approach? @@ -126,11 +125,11 @@ To test the build you can check the `src/index.html` example ```bash # Build the component -yarn build +pnpm build # Start development server -yarn start +pnpm start # Run tests -yarn test +pnpm test ``` diff --git a/packages/editoria11y/eslint.config.mjs b/packages/editoria11y/eslint.config.mjs new file mode 100644 index 000000000..5c8aafb62 --- /dev/null +++ b/packages/editoria11y/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from '@frameless/eslint-config/base'; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/packages/editoria11y/package.json b/packages/editoria11y/package.json index 93a62a55c..a404e2d8f 100644 --- a/packages/editoria11y/package.json +++ b/packages/editoria11y/package.json @@ -26,7 +26,10 @@ "build": "stencil build --docs", "start": "stencil build --dev --watch --serve", "generate": "stencil generate", - "clean": "rimraf dist .stencil" + "clean": "rimraf dist .stencil", + "lint": "eslint --report-unused-disable-directives .", + "lint:fix": "eslint --fix .", + "lint-build": "tsc --noEmit --project tsconfig.json" }, "repository": { "type": "git+ssh", @@ -40,15 +43,13 @@ "name": "@frameless" }, "engines": { - "node": "20.x.x" + "node": ">=22.0.0 <25", + "pnpm": "10.23.0" }, "license": "EUPL-1.2", "devDependencies": { + "@frameless/eslint-config": "1.2.0", "@stencil/core": "4.0.0", - "@types/jest": "27.0.3", - "jest": "27.0.3", - "jest-cli": "27.4.5", - "puppeteer": "21.0.0", - "rimraf": "5.0.0" + "rimraf": "6.1.3" } } diff --git a/packages/editoria11y/src/components/frameless-editoria11y/frameless-editoria11y.tsx b/packages/editoria11y/src/components/frameless-editoria11y/frameless-editoria11y.tsx index e5fb28ca9..177fa73da 100644 --- a/packages/editoria11y/src/components/frameless-editoria11y/frameless-editoria11y.tsx +++ b/packages/editoria11y/src/components/frameless-editoria11y/frameless-editoria11y.tsx @@ -1,4 +1,5 @@ import { Component, Element, Prop } from '@stencil/core'; + import Ed11y from '../../../lib/editoria11y.esm.mjs'; @Component({ diff --git a/packages/editoria11y/tsconfig.json b/packages/editoria11y/tsconfig.json index 836159240..04971ca8a 100644 --- a/packages/editoria11y/tsconfig.json +++ b/packages/editoria11y/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "allowSyntheticDefaultImports": true, "allowUnreachableCode": false, - "declaration": false, + "declaration": true, "experimentalDecorators": true, "lib": ["dom", "es6"], "moduleResolution": "node", diff --git a/packages/preview-button/CHANGELOG.md b/packages/preview-button/CHANGELOG.md deleted file mode 100644 index 093d75433..000000000 --- a/packages/preview-button/CHANGELOG.md +++ /dev/null @@ -1,83 +0,0 @@ -# @frameless/preview-button [1.3.0](https://github.com/frameless/strapi/compare/@frameless/preview-button@1.2.0...@frameless/preview-button@1.3.0) (2024-02-02) - -## 1.2.0 - -### Minor Changes - -- c79d241: Verbeter het visuele aspect van het blok met aanvullende informatie in het voorbeeldvenster van het Strapi-dashboard. - - Voeg een achtergrondkleur toe aan dit blok in de voorbeeldmodus. Wanneer de inhoud echter wordt gekopieerd en geplakt in Word, verschijnt er een horizontale lijn boven en onder het blok. - -### Patch Changes - -- Updated dependencies [f322de1] -- Updated dependencies [c79d241] -- Updated dependencies [111df39] - - @frameless/utils@0.1.0 - -## 1.1.1 - -### Patch Changes - -- d07b871: Codeverbetering: verplaats addHeadingOncePerCategory naar het util-pakket. -- Updated dependencies [d07b871] - - @frameless/utils@0.0.1 - -## 1.1.0 - -### Minor Changes - -- eae89b1: Zorg ervoor dat het eerste contentblok in het product wordt weergegeven onder de categorie 'inleiding' ([GitHub Issue frameless/strapi#1062](https://github.com/frameless/strapi/issues/1062)). -- 8af6fb1: Maak onderscheid tussen productinformatie en aanvullende informatie bij kopiëren en plakken in Word. Er wordt een `
        ` (horizontale streep) toegevoegd boven het kopje 'Aanvullende informatie' ([GitHub Issue frameless/strapi#1070](https://github.com/frameless/strapi/issues/1070)). - -### Patch Changes - -- 6bfbd34: Los de stijl van de genummerde opsomming in een uitklapmenu op ([GitHub Issue frameless/strapi#1071](https://github.com/frameless/strapi/issues/1071)). - -## 1.0.0 - -### Major Changes - -- eff0529: Voeg de mogelijkheid toe om een voorbeeld van de VAC en interne collectie in het dashboard te bekijken en de HTML te kopiëren en in een Word-bestand te plakken. - -### Minor Changes - -- a4aebab: Schakel de preview-plugin in om met de aanvullende-informatie collectie te werken. -- 7746862: Preview van interne veldgegevens binnen de productcollectie ([GitHub Issue frameless/strapi#1057](https://github.com/frameless/strapi/issues/1057)). -- 635eae1: Ondersteuning toegevoegd voor het bekijken van aanvullende info binnen de productcollectie. - -### Features - -- add Node.js 20 support ([7b5feb7](https://github.com/frameless/strapi/commit/7b5feb7f204e52566430e25ceb282a2a0d0fa86f)) - -# @frameless/preview-button [1.2.0](https://github.com/frameless/strapi/compare/@frameless/preview-button@1.1.0...@frameless/preview-button@1.2.0) (2023-11-21) - -### Features - -- **preview-button:** add support to signal type ([6b35a3f](https://github.com/frameless/strapi/commit/6b35a3f37261b0e761675173e3d40e1e304038bf)) - -# @frameless/preview-button [1.1.0](https://github.com/frameless/strapi/compare/@frameless/preview-button@1.0.1...@frameless/preview-button@1.1.0) (2023-03-24) - -### Bug Fixes - -- use strapi backend env variable ([895628d](https://github.com/frameless/strapi/commit/895628d25403a09a3dc80921c7a0364e9d33dd75)) - -### Features - -- make preview-button configurable from strapi dashboard ([924faa7](https://github.com/frameless/strapi/commit/924faa7a1576af955d58214f495202e721aadad2)) - -## @frameless/preview-button [1.0.1](https://github.com/frameless/strapi/compare/@frameless/preview-button@1.0.0...@frameless/preview-button@1.0.1) (2022-11-24) - -### Bug Fixes - -- disable plugin page in starpi preview button ([3d3d433](https://github.com/frameless/strapi/commit/3d3d43360d1d956e395639557452c20241ef8279)) - -# @frameless/preview-button 1.0.0 (2022-11-23) - -### Bug Fixes - -- extract path from env variable and added in the component ([4eec733](https://github.com/frameless/strapi/commit/4eec733bf35eb6c32b3a04693435bd4f70550b68)) - -### Features - -- create preview plugin for strapi dashboard ([0864c56](https://github.com/frameless/strapi/commit/0864c56a2142fa568e5c43f9db3963f75c65b823)) diff --git a/packages/preview-button/README.md b/packages/preview-button/README.md deleted file mode 100644 index 78c378e32..000000000 --- a/packages/preview-button/README.md +++ /dev/null @@ -1,207 +0,0 @@ -# Strapi Plugin Preview-Button - -## Integrate the Plugin into Strapi Dashboard - -Create or update the `./config/plugins.ts` or `.js` file: - -### **TypeScript:** - -```ts -export default ({ env }) => ({ - "preview-button": { - enabled: true, - config: { - domain: env("FRONTEND_PUBLIC_URL"), - token: env("PREVIEW_SECRET_TOKEN"), - contentTypes: [ - { - uid: "api::homepage.homepage", - query: { - type: "Homepage", - }, - preview: { - type: "page", // Preview by navigating to a page - }, - }, - { - uid: "api::product.product", - query: { - type: "products", - }, - preview: { - type: "both", // Supports both page navigation and dialog preview - }, - }, - { - uid: "api::vac.vac", - query: { - type: "vac", - }, - preview: { - type: "dialog", // Preview in a modal dialog - }, - }, - ], - }, - }, -}); -``` - -**Javascript**: - -```js -module.exports = ({ env }) => ({ - "preview-button": { - enabled: true, - config: { - domain: env("FRONTEND_PUBLIC_URL"), - token: env("PREVIEW_SECRET_TOKEN"), - contentTypes: [ - { - uid: "api::homepage.homepage", - query: { - type: "Homepage", - }, - preview: { - type: "page", - }, - }, - { - uid: "api::product.product", - query: { - type: "products", - }, - preview: { - type: "both", - }, - }, - { - uid: "api::vac.vac", - query: { - type: "vac", - }, - preview: { - type: "dialog", - }, - }, - ], - }, - }, -}); -``` - -After the plugin integration, you have to build the Strapi dashboard by using `strapi build && strapi develop` or you can use the `strapi develop --watch-admin` - -### Preview Modes - -The preview.type key allows you to configure how content types should be previewed. - -| Value | Behavior | -| ------ | ----------------------------------------------- | -| page | Navigates to the preview page | -| dialog | Opens a preview in a modal dialog | -| both | Enables both page navigation and dialog preview | - -#### Preview a Content Type by Navigating to the Preview Page - -To enable preview via page navigation, set `preview.type` to `"page"`: - -**Example**: - -```ts -module.exports = ({ env }) => ({ - "preview-button": { - enabled: true, - config: { - domain: env("FRONTEND_PUBLIC_URL"), - token: env("PREVIEW_SECRET_TOKEN"), - contentTypes: [ - { - uid: "api::product.product", - query: { - type: "products", - }, - preview: { - type: "page", - }, - }, - ], - }, - }, -}); -``` - -#### Preview a Content Type in a Dialog - -To preview a content type in a dialog, you need to add the dialog key to the content type configuration as well as you need to update the plugin implementation to support the dialog preview. Currently, the plugin implementation only supports the preview of the VAC, product and internal content types. - -To enable preview in a dialog, set preview.type to "dialog": - -**Example**: - -```ts -module.exports = ({ env }) => ({ - "preview-button": { - enabled: true, - config: { - domain: env("FRONTEND_PUBLIC_URL"), - token: env("PREVIEW_SECRET_TOKEN"), - contentTypes: [ - { - uid: "api::vac.vac", - query: { - type: "vac", - }, - preview: { - type: "dialog", - }, - }, - ], - }, - }, -}); -``` - -#### Enable Both Page Navigation and Dialog Preview - -If you want to support both preview options, set `preview.type` to `"both"`: - -```ts -module.exports = ({ env }) => ({ - "preview-button": { - enabled: true, - config: { - domain: env("FRONTEND_PUBLIC_URL"), - token: env("PREVIEW_SECRET_TOKEN"), - contentTypes: [ - { - uid: "api::product.product", - query: { - type: "products", - }, - preview: { - type: "both", - }, - }, - ], - }, - }, -}); -``` - -This will display two preview buttons: -✅ One for dialog preview -✅ One for navigating to the preview page - -## The preview button configuration - -| Property | Type | Description | Required | -| ------------ | ------------------------------------- | ------------------------------------------- | -------- | -| enabled | boolean | Enable or disable the preview button | Yes | -| config | object | Configuration object | Yes | -| domain | string (env("FRONTEND_PUBLIC_URL")) | URL of the frontend application | Yes | -| token | string (env("PREVIEW_SECRET_TOKEN")) | Secret token for preview authentication | Yes | -| contentTypes | array | List of content types | Yes | -| uid | string | Unique identifier (UID) of the content type | Yes | -| query.type | string | Type of the content | Yes | -| preview.type | string "`page` \| `dialog` \| `both`" | Type of preview behavior | Yes | diff --git a/packages/preview-button/admin/src/components/Content/index.jsx b/packages/preview-button/admin/src/components/Content/index.jsx deleted file mode 100644 index 287c3b673..000000000 --- a/packages/preview-button/admin/src/components/Content/index.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import { Markdown } from '../Markdown'; - -export const Content = ({ data, locale, priceData, priceZeroLabel = '¤ 0,00', title }) => { - const isData = Array.isArray(data); - return ( -
        - {title &&

        {title}

        } - {isData && - data.map( - (item, index) => - item?.content && ( - - {item.content} - - ), - )} -
        - ); -}; - -Content.propTypes = { - data: PropTypes.arrayOf( - PropTypes.shape({ - content: PropTypes.string, - }), - ), - priceData: PropTypes.arrayOf( - PropTypes.shape({ - label: PropTypes.string, - currency: PropTypes.oneOf(['EUR', 'USD']), - value: PropTypes.number, - uuid: PropTypes.string, - }), - ), - locale: PropTypes.string, - priceZeroLabel: PropTypes.string, - title: PropTypes.string, -}; diff --git a/packages/preview-button/admin/src/components/DialogPreviewButton/index.jsx b/packages/preview-button/admin/src/components/DialogPreviewButton/index.jsx deleted file mode 100644 index 169a18f53..000000000 --- a/packages/preview-button/admin/src/components/DialogPreviewButton/index.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import { Button } from '@strapi/design-system/Button'; -import Eye from '@strapi/icons/Eye'; -import PropTypes from 'prop-types'; -import React from 'react'; -import { Dialog } from '../Modal'; -export const DialogPreviewButton = ({ dialog, previewButton }) => ( -
        - - -
        {dialog?.body}
        -
        -
        -); - -DialogPreviewButton.propTypes = { - dialog: PropTypes.shape({ - ref: PropTypes.object, - title: PropTypes.string, - closeButton: PropTypes.shape({ - onClick: PropTypes.func, - }), - startAction: PropTypes.shape({ - onClick: PropTypes.func, - label: PropTypes.string, - }), - endAction: PropTypes.shape({ - onClick: PropTypes.func, - label: PropTypes.string, - }), - body: PropTypes.node, - }).isRequired, - previewButton: PropTypes.shape({ - onClick: PropTypes.func, - label: PropTypes.string, - }).isRequired, -}; diff --git a/packages/preview-button/admin/src/components/HTMLTemplate/index.jsx b/packages/preview-button/admin/src/components/HTMLTemplate/index.jsx deleted file mode 100644 index c8d63e48e..000000000 --- a/packages/preview-button/admin/src/components/HTMLTemplate/index.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import { getDirectionFromLanguageCode } from '@frameless/utils'; -import PropTypes from 'prop-types'; -import React from 'react'; - -export const HTMLTemplate = ({ lang = 'nl', title = 'Preview', children }) => ( - - - - {title} - - {children} - -); - -HTMLTemplate.propTypes = { - title: PropTypes.string, - children: PropTypes.string, - lang: PropTypes.string, -}; diff --git a/packages/preview-button/admin/src/components/Initializer/index.js b/packages/preview-button/admin/src/components/Initializer/index.js deleted file mode 100644 index 52c3e29d9..000000000 --- a/packages/preview-button/admin/src/components/Initializer/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * - * Initializer - * - */ - -import PropTypes from 'prop-types'; -import { useEffect, useRef } from 'react'; -import pluginId from '../../pluginId'; - -function Initializer({ setPlugin }) { - const ref = useRef(); - ref.current = setPlugin; - - useEffect(() => { - ref.current(pluginId); - }, []); - - return null; -} - -Initializer.propTypes = { - setPlugin: PropTypes.func.isRequired, -}; - -export default Initializer; diff --git a/packages/preview-button/admin/src/components/Markdown/index.jsx b/packages/preview-button/admin/src/components/Markdown/index.jsx deleted file mode 100644 index 10dce4009..000000000 --- a/packages/preview-button/admin/src/components/Markdown/index.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import { Markdown as BaseMarkdown, PriceWidget } from '@frameless/ui'; -import PropTypes from 'prop-types'; -import React from 'react'; - -export const Markdown = ({ children, locale, priceData, priceZeroLabel = '¤ 0,00' }) => { - const priceWidget = { - span: ({ node, children: spanChildren }) => { - if (node?.properties.dataStrapiCategory === 'price') { - return ( - - ); - } - delete node?.properties?.style; - return {spanChildren}; - }, - }; - - return {children}; -}; - -Markdown.propTypes = { - children: PropTypes.object, - locale: PropTypes.string, - priceData: PropTypes.arrayOf( - PropTypes.shape({ - label: PropTypes.string, - currency: PropTypes.oneOf(['EUR', 'USD']), - value: PropTypes.number, - uuid: PropTypes.string, - }), - ), - priceZeroLabel: PropTypes.string, -}; diff --git a/packages/preview-button/admin/src/components/Modal/index.jsx b/packages/preview-button/admin/src/components/Modal/index.jsx deleted file mode 100644 index e2ae9dd82..000000000 --- a/packages/preview-button/admin/src/components/Modal/index.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import { - ModalDialog, - ModalDialogBody, - ModalDialogCloseButton, - ModalDialogFooter, - ModalDialogHeader, -} from '@frameless/ui'; -import { Button, ButtonGroup, Heading } from '@utrecht/component-library-react'; -import React from 'react'; -import { forwardRef } from 'react'; - -export const Dialog = forwardRef(({ children, closeButton, endAction, startAction, title, ...restProps }, ref) => { - return ( - - - {title && {title}} - {closeButton?.label} - - {children && {children}} - - - {startAction && ( - - )} - {endAction && ( - - )} - - - - ); -}); -Dialog.displayName = 'Dialog'; diff --git a/packages/preview-button/admin/src/components/PluginIcon/index.js b/packages/preview-button/admin/src/components/PluginIcon/index.js deleted file mode 100644 index 5f6705538..000000000 --- a/packages/preview-button/admin/src/components/PluginIcon/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import Puzzle from '@strapi/icons/Puzzle'; -import React from 'react'; - -function PluginIcon() { - return ; -} - -export default PluginIcon; diff --git a/packages/preview-button/admin/src/components/PreviewLink/index.css b/packages/preview-button/admin/src/components/PreviewLink/index.css deleted file mode 100644 index fd8a767ff..000000000 --- a/packages/preview-button/admin/src/components/PreviewLink/index.css +++ /dev/null @@ -1,74 +0,0 @@ -.utrecht-modal-dialog { - --utrecht-modal-dialog-min-inline-size: 100%; - --utrecht-spotlight-section-margin-block-start: 16px; - --utrecht-spotlight-section-margin-block-end: 16px; - --utrecht-advanced-link-with-icon-text-decoration: none; - --utrecht-advanced-link-with-icon-text-decoration-thickness: 1px; - --utrecht-advanced-link-color-active-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-color-focus-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-color-hover-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-color-visited-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-color-color-red: var(--utrecht-color-red-40); - --utrecht-advanced-link-icon-margin-inline-end: var(--utrecht-space-inline-xs); - --utrecht-advanced-link-icon-size: 14px; - --utrecht-multi-columns-button-margin-block-start: var(--utrecht-space-block-md); - --utrecht-multi-columns-button-margin-block-end: var(--utrecht-space-block-md); - --utrecht-multi-columns-button-item-padding-inline-start: var(--utrecht-space-inline-lg); - --utrecht-multi-columns-button-item-padding-inline-end: var(--utrecht-space-inline-lg); - --utrecht-multi-columns-button-item-padding-block-start: var(--utrecht-space-block-lg); - --utrecht-multi-columns-button-item-padding-block-end: var(--utrecht-space-block-lg); - --utrecht-multi-columns-button-divider-color: var(--utrecht-color-grey-90); - --utrecht-multi-columns-buttons-divider-width: 1px; - --utrecht-multi-columns-button-item-mobile-padding-inline-start: var(--utrecht-space-inline-xs); - --utrecht-multi-columns-button-item-mobile-padding-inline-end: var(--utrecht-space-inline-xs); - --utrecht-multi-columns-button-item-mobile-padding-block-start: var(--utrecht-space-block-xs); - --utrecht-multi-columns-button-item-mobile-padding-block-end: var(--utrecht-space-block-xs); - --utrecht-color-magenta: #bc3983; - --utrecht-button-link-magenta-focus-border-color: var(--utrecht-color-grey-10); - --utrecht-button-link-magenta-active-border-color: var(--utrecht-color-grey-10); - --utrecht-button-link-magenta-active-color: var(--utrecht-color-white); - --utrecht-button-link-magenta-background-color: var(--utrecht-color-magenta); - --utrecht-button-link-magenta-active-background-color: var(--utrecht-color-magenta); - --utrecht-button-link-magenta-hover-background-color: var(--utrecht-color-magenta); - --utrecht-button-link-magenta-focus-background-color: var(--utrecht-color-magenta); - --utrecht-button-link-magenta-pressed-background-color: var(--utrecht-color-magenta); - --utrecht-figure-margin-inline-start: 0; - --utrecht-figure-margin-inline-end: 0; - --utrecht-figure-margin-block-start: var(--utrecht-space-block-md); - --utrecht-figure-margin-block-end: var(--utrecht-space-block-md); - --utrecht-figure--figcaption-color: var(--utrecht-color-grey-40); - --utrecht-figure--figcaption-font-size: var(--utrecht-typography-scale-sm-font-size); - --utrecht-figure-figcaption-margin-block-start: var(--utrecht-space-block-2xs); -} -.utrecht-modal-dialog::backdrop { - --utrecht-backdrop-background-color: rgb(0 0 0 / 30%) !important; -} -.utrecht-preview-button, -.utrecht-preview-link { - inline-size: 100%; - justify-content: center; - & svg { - height: 16px !important; - width: 16px !important; - } -} -.utrecht-preview-link { - text-decoration: none; -} - -.utrecht-button-group { - justify-content: space-between; -} -.utrecht-button-link { - --utrecht-link-color: #fff; -} - -img { - max-inline-size: 100%; -} - -.utrecht-additional-information { - & hr { - display: none; - } -} diff --git a/packages/preview-button/admin/src/components/PreviewLink/index.js b/packages/preview-button/admin/src/components/PreviewLink/index.js deleted file mode 100644 index 45ade6cc0..000000000 --- a/packages/preview-button/admin/src/components/PreviewLink/index.js +++ /dev/null @@ -1,284 +0,0 @@ -/* eslint-disable no-console */ -import { useDialog } from '@frameless/ui'; -import { addHeadingOncePerCategory } from '@frameless/utils'; -import { LinkButton } from '@strapi/design-system/LinkButton'; -import { useCMEditViewDataManager, useFetchClient } from '@strapi/helper-plugin'; -import Eye from '@strapi/icons/Eye'; -import React, { useEffect, useReducer, useState } from 'react'; -import { renderToString } from 'react-dom/server'; -import { useIntl } from 'react-intl'; -import '@utrecht/component-library-css/dist/html.css'; -import '@utrecht/component-library-css'; -import '@utrecht/design-tokens/dist/index.css'; -import '@frameless/ui/dist/bundle.css'; -import usePluginConfig from '../../hooks/use-plugin-config'; -import useCopyHTMLToClipboard from '../../hooks/useCopyHTMLToClipboard'; -import useFetchData from '../../hooks/useFetchData'; -import { - combineSimilarCategories, - concatenateFieldValues, - getContentByType, - getPreviewUrl, - getTrad, - getUrl, - processProductData, -} from '../../utils'; -import { DialogPreviewButton } from '../DialogPreviewButton'; -import { Content, HTMLTemplate } from '../index'; -import './index.css'; - -const PreviewLink = () => { - const data = useCMEditViewDataManager(); - const client = useFetchClient(); - const { openDialog, close, dialogRef } = useDialog(); - const { fetchData } = useFetchData(client); - const copyHTMLToClipboard = useCopyHTMLToClipboard(); - const { config } = usePluginConfig(); - const { formatMessage } = useIntl(); - - const contentTypes = config?.data?.contentTypes || []; - const isPreviewSupported = contentTypes.find((type) => type.uid === data?.layout?.uid); - - const type = isPreviewSupported?.query?.type; - const previewType = isPreviewSupported?.preview?.type || 'page'; - const showDialog = previewType === 'dialog' || previewType === 'both'; - const showPage = previewType === 'page' || previewType === 'both'; - - const [state, dispatch] = useReducer((state, action) => ({ ...state, ...action }), { - additionalInformationData: null, - vacData: null, - internalFieldData: null, - productData: null, - }); - - const [clipboardStatus, setClipboardStatus] = useState('button.copy'); - const previewInDialogButtonLabel = formatMessage({ - id: getTrad('button.dialogPreview'), - defaultMessage: 'Voorbeeld in dialoogvenster', - }); - const previewInPageButtonLabel = formatMessage({ - id: getTrad('button.pagePreview'), - defaultMessage: 'Voorbeeld op pagina', - }); - - const contentComponentProps = { - locale: 'nl', - priceZeroLabel: formatMessage({ id: getTrad('priceWidget.zeroLabel'), defaultMessage: '¤ 0,00' }), - }; - - const url = getUrl(config?.data?.domain); - - const isVacType = type === 'vac'; - const isInternalFieldType = type === 'internal-field'; - const isProductType = type === 'products'; - const isAdditionalInformationType = type === 'additional-information'; - const contentId = data.initialData?.id; - - useEffect(() => { - if (!isProductType || !contentId || !isPreviewSupported?.uid) return; - - const fetchProductData = async () => { - try { - const response = await fetchData(`/preview-button/product/${contentId}?uid=${isPreviewSupported.uid}`); - const productData = response.data.data; - dispatch({ productData }); - - // Set additional information from product data - if (productData?.additional_information?.content) { - dispatch({ - additionalInformationData: { - contentBlock: productData.additional_information.content.contentBlock, - }, - }); - } - } catch (error) { - console.error('Failed to fetch product data:', error); - } - }; - - fetchProductData(); - }, [isProductType, contentId, isPreviewSupported?.uid, fetchData, data.modifiedData]); - - useEffect(() => { - if (!isAdditionalInformationType || !contentId || !isPreviewSupported?.uid) return; - - const fetchAdditionalInfo = async () => { - try { - const response = await fetchData( - `/preview-button/additional-information/${contentId}?uid=${isPreviewSupported.uid}`, - ); - dispatch({ additionalInformationData: response.data.data }); - } catch (error) { - console.error('Failed to fetch additional information:', error); - } - }; - - fetchAdditionalInfo(); - }, [isAdditionalInformationType, contentId, isPreviewSupported?.uid, fetchData, data.modifiedData]); - - useEffect(() => { - if (!isVacType || !contentId || !isPreviewSupported?.uid) return; - - const fetchVacData = async () => { - try { - const response = await fetchData(`/preview-button/vac/${contentId}?uid=${isPreviewSupported.uid}`); - dispatch({ vacData: response.data.data }); - } catch (error) { - console.error('Failed to fetch VAC data:', error); - } - }; - - fetchVacData(); - }, [isVacType, contentId, isPreviewSupported?.uid, fetchData, data.modifiedData]); - - useEffect(() => { - if (!isInternalFieldType || !contentId || !isPreviewSupported?.uid) return; - - const fetchInternalFieldData = async () => { - try { - const response = await fetchData(`/preview-button/internal-field/${contentId}?uid=${isPreviewSupported.uid}`); - dispatch({ internalFieldData: response.data.data }); - } catch (error) { - console.error('Failed to fetch internal-field data:', error); - } - }; - - fetchInternalFieldData(); - }, [isInternalFieldType, contentId, isPreviewSupported?.uid, fetchData, data.modifiedData]); - - const productInternalData = state.productData?.internalFieldData?.content - ? { - content: `

        ${formatMessage({ - id: getTrad('productInternalFieldBlock.title'), - defaultMessage: 'Interne informatie', - })}

        ${concatenateFieldValues(state.productData.internalFieldData.content)}`, - } - : null; - - const processedData = processProductData({ - data: state.productData?.sections || [], - locale: 'nl', - priceData: state.productData?.price?.price, - url, - }); - - const additionalContent = addHeadingOncePerCategory({ - contentBlocks: combineSimilarCategories(state.additionalInformationData?.contentBlock || []), - title: 'Aanvullende informatie', - categoryKey: 'kennisartikelCategorie', - template: - '

        {title}

        {content}
        ', - }); - - const combinedContent = combineSimilarCategories([...processedData, ...additionalContent]); - - const content = getContentByType({ - vac: { - content: ( - - ), - }, - internalField: { - content: ( - - ), - id: data.initialData?.product?.[0]?.id, - }, - additionalInformation: { - content: ( - - ), - id: data.initialData?.product?.[0]?.id, - }, - products: { - content: ( - - ), - id: data.initialData?.id, - }, - type, - }); - - const onClickCopyHTMLToDocxHandler = () => { - setClipboardStatus('button.copied'); - copyHTMLToClipboard( - renderToString( - - {content?.data} - , - ), - ); - setTimeout(() => setClipboardStatus('button.copy'), 1000); - }; - - if (!isPreviewSupported) return null; - - const previewUrl = getPreviewUrl({ - url, - token: config.data.token, - type: isPreviewSupported.query.type, - slug: data.initialData.slug, - locale: data.initialData.locale, - }); - return ( - <> - {showDialog && ( - - )} - {showPage && ( - } - className="utrecht-preview-link" - href={previewUrl?.href} - target="_blank" - rel="noopener noreferrer" - title={previewInPageButtonLabel} - aria-label={previewInPageButtonLabel} - > - {previewInPageButtonLabel} - - )} - - ); -}; - -export default PreviewLink; diff --git a/packages/preview-button/admin/src/components/index.jsx b/packages/preview-button/admin/src/components/index.jsx deleted file mode 100644 index 59a7257e9..000000000 --- a/packages/preview-button/admin/src/components/index.jsx +++ /dev/null @@ -1,3 +0,0 @@ -export { Markdown } from './Markdown'; -export { HTMLTemplate } from './HTMLTemplate'; -export { Content } from './Content'; diff --git a/packages/preview-button/admin/src/constants.js b/packages/preview-button/admin/src/constants.js deleted file mode 100644 index 2a4622ef2..000000000 --- a/packages/preview-button/admin/src/constants.js +++ /dev/null @@ -1,3 +0,0 @@ -import { pluginId } from './utils'; - -export const RESOLVE_CONFIG = `${pluginId}/resolve-config`; diff --git a/packages/preview-button/admin/src/hooks/use-plugin-config.js b/packages/preview-button/admin/src/hooks/use-plugin-config.js deleted file mode 100644 index 89e5fc4f6..000000000 --- a/packages/preview-button/admin/src/hooks/use-plugin-config.js +++ /dev/null @@ -1,53 +0,0 @@ -import { useFetchClient, useNotification } from '@strapi/helper-plugin'; -import { useEffect } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import { RESOLVE_CONFIG } from '../constants'; -import { pluginId } from '../utils'; - -const usePluginConfig = () => { - const dispatch = useDispatch(); - const toggleNotification = useNotification(); - const { isLoading, config } = useSelector((state) => state[`${pluginId}_config`]); - const client = useFetchClient(); - - useEffect(() => { - // Do nothing if we have already loaded the config data. - if (!isLoading && !!config) { - return; - } - - const abortController = new AbortController(); - - // eslint-disable-next-line consistent-return - const fetchData = async () => { - try { - const endpoint = `/${pluginId}/config`; - const data = await client.get(endpoint, { - signal: abortController.signal, - }); - - return data ?? {}; - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - - if (!abortController.signal.aborted) { - toggleNotification({ - type: 'warning', - message: { id: 'notification.error' }, - }); - - return err; - } - } - }; - fetchData().then((data) => dispatch({ type: RESOLVE_CONFIG, data })); - - // eslint-disable-next-line consistent-return - return () => abortController.abort(); - }, [client, config, dispatch, isLoading, toggleNotification]); - - return { config, isLoading }; -}; - -export default usePluginConfig; diff --git a/packages/preview-button/admin/src/hooks/useCopyHTMLToClipboard.jsx b/packages/preview-button/admin/src/hooks/useCopyHTMLToClipboard.jsx deleted file mode 100644 index 45855f125..000000000 --- a/packages/preview-button/admin/src/hooks/useCopyHTMLToClipboard.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import { useNotification } from '@strapi/helper-plugin'; -import { getTrad } from '../utils'; -const useCopyHTMLToClipboard = () => { - const toggleNotification = useNotification(); - - const copyHTMLToClipboard = async (content = '') => { - // Validate the content - if (!content || typeof content !== 'string') { - throw new Error('Invalid content provided for copying'); - } - // Create a Blob and ClipboardItem for the HTML content - const blob = new Blob([content], { type: 'text/html' }); - const data = [new ClipboardItem({ 'text/html': blob })]; - try { - // Write to clipboard - await navigator.clipboard.write(data); - // Show success notification - toggleNotification({ - type: 'success', - message: { - id: getTrad('alert.htmlContentCopiedSuccess'), - defaultMessage: 'HTML content copied to clipboard! Paste into Word.', - }, - }); - } catch (error) { - // Log detailed error for debugging - // eslint-disable-next-line no-console - console.error('Failed to copy the HTML content:', error.message, error); - - // Show error notification - toggleNotification({ - type: 'warning', - message: { - id: getTrad('alert.htmlContentCopiedError'), - defaultMessage: 'Failed to copy the HTML content', - }, - }); - } - }; - - return copyHTMLToClipboard; -}; - -export default useCopyHTMLToClipboard; diff --git a/packages/preview-button/admin/src/hooks/useFetchData.jsx b/packages/preview-button/admin/src/hooks/useFetchData.jsx deleted file mode 100644 index 341a5da35..000000000 --- a/packages/preview-button/admin/src/hooks/useFetchData.jsx +++ /dev/null @@ -1,45 +0,0 @@ -import { useNotification } from '@strapi/helper-plugin'; -import { useCallback, useState } from 'react'; - -const useFetchData = (client) => { - const toggleNotification = useNotification(); - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(null); - - const fetchData = useCallback( - async (url) => { - const abortController = new AbortController(); - setIsLoading(true); - setError(null); - - try { - const data = await client.get(url, { - signal: abortController.signal, - }); - - return data ?? {}; - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - - if (!abortController.signal.aborted) { - toggleNotification({ - type: 'warning', - message: { id: 'notification.error' }, - }); - - setError(err); - return err; - } - } finally { - setIsLoading(false); - } - return null; - }, - [client, toggleNotification], - ); - - return { fetchData, isLoading, error }; -}; - -export default useFetchData; diff --git a/packages/preview-button/admin/src/index.js b/packages/preview-button/admin/src/index.js deleted file mode 100644 index 9703f8cb0..000000000 --- a/packages/preview-button/admin/src/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import Initializer from './components/Initializer'; -import PreviewLink from './components/PreviewLink'; -import pluginId from './pluginId'; -import reducers from './reducers'; -import pluginPkg from '../../package.json'; - -const name = pluginPkg.strapi.name; -export default { - register(app) { - app.addReducers(reducers); - app.registerPlugin({ - id: pluginId, - initializer: Initializer, - isReady: false, - name, - }); - }, - - bootstrap(app) { - app.injectContentManagerComponent('editView', 'right-links', { - name: 'preview-link', - Component: PreviewLink, - }); - }, - - async registerTrads({ locales }) { - const importedTrads = await Promise.all( - locales.map((locale) => { - return import(/* webpackChunkName: "translation-[request]" */ `./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/preview-button/admin/src/pages/App/index.js b/packages/preview-button/admin/src/pages/App/index.js deleted file mode 100644 index b56b97906..000000000 --- a/packages/preview-button/admin/src/pages/App/index.js +++ /dev/null @@ -1,5 +0,0 @@ -function App() { - return null; -} - -export default App; diff --git a/packages/preview-button/admin/src/pages/HomePage/index.js b/packages/preview-button/admin/src/pages/HomePage/index.js deleted file mode 100644 index 71834a38a..000000000 --- a/packages/preview-button/admin/src/pages/HomePage/index.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - * - * HomePage - * - */ - -function HomePage() { - return null; -} - -export default HomePage; diff --git a/packages/preview-button/admin/src/pluginId.js b/packages/preview-button/admin/src/pluginId.js deleted file mode 100644 index 695317c0b..000000000 --- a/packages/preview-button/admin/src/pluginId.js +++ /dev/null @@ -1,5 +0,0 @@ -import pluginPkg from '../../package.json'; - -const pluginId = pluginPkg.name.replace(/^(@[^-,.][\w,-]+\/|strapi-)plugin-/i, ''); - -export default pluginId; diff --git a/packages/preview-button/admin/src/reducers/config.js b/packages/preview-button/admin/src/reducers/config.js deleted file mode 100644 index c996ead61..000000000 --- a/packages/preview-button/admin/src/reducers/config.js +++ /dev/null @@ -1,26 +0,0 @@ -/* eslint-disable no-param-reassign */ -import produce from 'immer'; -import { RESOLVE_CONFIG } from '../constants'; - -const initialState = { - isLoading: true, - config: {}, -}; - -// eslint-disable-next-line default-param-last -const configReducer = produce((state = initialState, action) => { - switch (action.type) { - case RESOLVE_CONFIG: { - state.isLoading = false; - state.config = action.data; - break; - } - - default: - return state; - } - - return state; -}); - -export default configReducer; diff --git a/packages/preview-button/admin/src/reducers/index.js b/packages/preview-button/admin/src/reducers/index.js deleted file mode 100644 index f16366085..000000000 --- a/packages/preview-button/admin/src/reducers/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import config from './config'; -import { pluginId } from '../utils'; - -const reducers = { - [`${pluginId}_config`]: config, -}; - -export default reducers; diff --git a/packages/preview-button/admin/src/translations/en.json b/packages/preview-button/admin/src/translations/en.json deleted file mode 100644 index 65d1bea11..000000000 --- a/packages/preview-button/admin/src/translations/en.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "dialog.title": "Preview", - "button.dialogPreview": "Preview in Dialog", - "button.pagePreview": "Preview on Page", - "button.cancelPreview": "Cancel Preview", - "button.copy": "Copy", - "button.copied": "Copied", - "alert.htmlContentCopiedSuccess": "HTML content copied to clipboard! Paste into Word.", - "alert.htmlContentCopiedError": "Failed to copy the HTML content", - "priceWidget.zeroLabel": "Free", - "productInternalFieldBlock.title": "Internal information" -} diff --git a/packages/preview-button/admin/src/translations/nl.json b/packages/preview-button/admin/src/translations/nl.json deleted file mode 100644 index 823a0a51a..000000000 --- a/packages/preview-button/admin/src/translations/nl.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "dialog.title": "Bekijken", - "button.dialogPreview": "Voorbeeld in dialoogvenster", - "button.pagePreview": "Voorbeeld op pagina", - "button.cancelPreview": "Sluiten", - "button.copy": "Kopiëren", - "button.copied": "Gekopieerd", - "alert.htmlContentCopiedSuccess": "De inhoud is gekopieerd naar het klembord. Je kunt de tekst nu plakken in Word.", - "alert.htmlContentCopiedError": "Het kopiëren van de HTML-inhoud is mislukt", - "priceWidget.zeroLabel": "gratis", - "productInternalFieldBlock.title": "Interne informatie" -} diff --git a/packages/preview-button/admin/src/utils/axiosInstance.js b/packages/preview-button/admin/src/utils/axiosInstance.js deleted file mode 100644 index 63cef4aa9..000000000 --- a/packages/preview-button/admin/src/utils/axiosInstance.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * axios with a custom config. - */ - -import { auth } from '@strapi/helper-plugin'; -import axios from 'axios'; - -const instance = axios.create({ - baseURL: process.env.STRAPI_ADMIN_BACKEND_URL, -}); - -instance.interceptors.request.use( - async (config) => { - // eslint-disable-next-line no-param-reassign - config.headers = { - Authorization: `Bearer ${auth.getToken()}`, - Accept: 'application/json', - 'Content-Type': 'application/json', - }; - - return config; - }, - (error) => { - Promise.reject(error); - }, -); - -instance.interceptors.response.use( - (response) => response, - (error) => { - // whatever you want to do with the error - if (error.response?.status === 401) { - auth.clearAppStorage(); - window.location.reload(); - } - - throw error; - }, -); - -export default instance; diff --git a/packages/preview-button/admin/src/utils/combineSimilarCategories.js b/packages/preview-button/admin/src/utils/combineSimilarCategories.js deleted file mode 100644 index 103673407..000000000 --- a/packages/preview-button/admin/src/utils/combineSimilarCategories.js +++ /dev/null @@ -1,16 +0,0 @@ -export const combineSimilarCategories = (data) => { - const groupedData = data?.reduce((acc, curr) => { - const category = curr?.kennisartikelCategorie; - if (category) { - if (!acc[category]) { - acc[category] = { ...curr, content: curr.content }; - } else { - acc[category].content += curr.content; - } - } - return acc; - }, {}); - - // Convert object back to array - return Object.values(groupedData); -}; diff --git a/packages/preview-button/admin/src/utils/concatenateFieldValues.js b/packages/preview-button/admin/src/utils/concatenateFieldValues.js deleted file mode 100644 index cb8a19aa7..000000000 --- a/packages/preview-button/admin/src/utils/concatenateFieldValues.js +++ /dev/null @@ -1,4 +0,0 @@ -export const concatenateFieldValues = (data) => - data?.reduce((result, item) => { - return `${result}${item.content}`; - }, ''); diff --git a/packages/preview-button/admin/src/utils/getContentByType.js b/packages/preview-button/admin/src/utils/getContentByType.js deleted file mode 100644 index 84134d98c..000000000 --- a/packages/preview-button/admin/src/utils/getContentByType.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * @typedef {Object} ContentData - * @property {string} data - The content data. - * @property {string} id - The content id. - */ - -/** - * Gets the current content based on the type. - * - * @param {Object} params - The parameters for getting the current content. - * @param {string} params.type - The type of content. - * @param {Object} params.internalField - The internal content data. - * @param {JSX} params.internalField.content - The internal content data. - * @param {string} params.internalField.id - The internal content id. - * @param {Object} params.vac - The vac content data. - * @param {JSX} params.vac.content - The vac content data. - * @param {string} params.vac.id - The vac content id. - * @param {Object} params.additionalInformation - The additional information content data. - * @param {JSX} params.additionalInformation.content - The additional information content data. - * @param {string} params.additionalInformation.id - The additional information content id. - * @param {Object} params.products - The product content data. - * @param {JSX} params.products.content - The product content data. - * @param {string} params.products.id - The product content id. - * @returns {ContentData|null} The current content data or null. - */ - -export const getContentByType = ({ vac, internalField, additionalInformation, products, type }) => { - const dataMap = { - vac, - 'internal-field': internalField, - 'additional-information': additionalInformation, - products, - }; - - const contentData = dataMap[type]; - return contentData ? { data: contentData.content, id: contentData.id } : null; -}; diff --git a/packages/preview-button/admin/src/utils/getPreviewUrl.js b/packages/preview-button/admin/src/utils/getPreviewUrl.js deleted file mode 100644 index ee1fb68c3..000000000 --- a/packages/preview-button/admin/src/utils/getPreviewUrl.js +++ /dev/null @@ -1,10 +0,0 @@ -export const getPreviewUrl = ({ url, token, type, slug, locale }) => { - if (url) { - url.pathname = '/api/preview'; - url.searchParams.set('secret', token); - url.searchParams.set('type', type); - url.searchParams.set('slug', slug); - url.searchParams.set('locale', locale); - } - return url; -}; diff --git a/packages/preview-button/admin/src/utils/getTrad.js b/packages/preview-button/admin/src/utils/getTrad.js deleted file mode 100644 index 22f4b0fe0..000000000 --- a/packages/preview-button/admin/src/utils/getTrad.js +++ /dev/null @@ -1,3 +0,0 @@ -import pluginId from '../pluginId'; - -export const getTrad = (id) => `${pluginId}.${id}`; diff --git a/packages/preview-button/admin/src/utils/getUrl.js b/packages/preview-button/admin/src/utils/getUrl.js deleted file mode 100644 index 82d7336c5..000000000 --- a/packages/preview-button/admin/src/utils/getUrl.js +++ /dev/null @@ -1,8 +0,0 @@ -export const getUrl = (url) => { - try { - return new URL(url); - } catch (e) { - // eslint-disable-next-line no-console - return null; - } -}; diff --git a/packages/preview-button/admin/src/utils/index.js b/packages/preview-button/admin/src/utils/index.js deleted file mode 100644 index b823b872c..000000000 --- a/packages/preview-button/admin/src/utils/index.js +++ /dev/null @@ -1,8 +0,0 @@ -export { combineSimilarCategories } from './combineSimilarCategories'; -export { concatenateFieldValues } from './concatenateFieldValues'; -export { default as pluginId } from './plugin-id'; -export { getContentByType } from './getContentByType'; -export { getPreviewUrl } from './getPreviewUrl'; -export { getTrad } from './getTrad'; -export { getUrl } from './getUrl'; -export { processProductData } from './processProductData'; diff --git a/packages/preview-button/admin/src/utils/plugin-id.js b/packages/preview-button/admin/src/utils/plugin-id.js deleted file mode 100644 index bb3f17bd9..000000000 --- a/packages/preview-button/admin/src/utils/plugin-id.js +++ /dev/null @@ -1,3 +0,0 @@ -import pluginPkg from '../../../package.json'; - -export default pluginPkg.strapi.name; diff --git a/packages/preview-button/admin/src/utils/processProductData.jsx b/packages/preview-button/admin/src/utils/processProductData.jsx deleted file mode 100644 index 5042ac724..000000000 --- a/packages/preview-button/admin/src/utils/processProductData.jsx +++ /dev/null @@ -1,158 +0,0 @@ -import { AdvancedLink, Img, LogoButton, MultiColumnsButton } from '@frameless/ui'; -import { getDirectionFromLanguageCode } from '@frameless/utils'; -import { ButtonGroup, SpotlightSection } from '@utrecht/component-library-react'; -import React from 'react'; -import { renderToString } from 'react-dom/server'; -import { Markdown } from '../components'; - -const getParsOpenFormsEmbedData = (openFormsEmbed) => { - const parsOpenFormsEmbedData = new URLSearchParams(openFormsEmbed); - const slug = parsOpenFormsEmbedData.get('slug'); - const uuid = parsOpenFormsEmbedData.get('uuid'); - const label = parsOpenFormsEmbedData.get('label'); - return { slug, uuid, label }; -}; - -const processCTAColumns = ({ data, url }) => - data?.map((column) => { - return { - ...column, - logoButton: column?.logoButton?.map((button) => { - if (button?.openFormsEmbed) { - const { slug, label } = getParsOpenFormsEmbedData(button.openFormsEmbed); - return { - ...button, - href: `${url}/form/${slug}`, - textContent: label, - openFormsEmbed: null, - }; - } - return button; - }), - }; - }); - -const logoButton = ({ data, url }) => { - if (data?.openFormsEmbed) { - const { slug, uuid, label } = getParsOpenFormsEmbedData(data.openFormsEmbed); - return ( - - {data.textContent || label} - - ); - } - return ( - - {data.textContent} - - ); -}; - -export const processProductData = ({ data, priceData, locale, url }) => { - return Array.isArray(data) - ? data.map((section, index) => { - switch (section?.__component) { - case 'components.utrecht-rich-text': - return section; - case 'components.utrecht-logo-button': - return { - id: section?.id, - kennisartikelCategorie: section?.kennisartikelCategorie, - content: renderToString(logoButton({ data: section, url })), - }; - case 'components.utrecht-link': - return { - id: section?.id, - kennisartikelCategorie: section?.kennisartikelCategorie, - content: renderToString( - - - {section?.textContent} - - , - ), - }; - case 'components.utrecht-image': - return { - id: section?.id, - kennisartikelCategorie: section?.kennisartikelCategorie, - content: renderToString( - {section?.imageData?.alternativeText, - ), - }; - case 'components.utrecht-accordion': - return { - id: section?.id, - kennisartikelCategorie: section?.kennisartikelCategorie, - content: section?.item - ?.map((item) => { - return renderToString( -
        - {item?.label} - {item?.body && ( - - {item?.body} - - )} -
        , - ); - }) - .join(''), - }; - case 'components.utrecht-multi-columns-button': - return { - id: section?.id, - kennisartikelCategorie: section?.kennisartikelCategorie, - content: renderToString( - , - ), - }; - case 'components.utrecht-spotlight': - return { - id: section?.id, - kennisartikelCategorie: section?.kennisartikelCategorie, - content: renderToString( - - {section?.content && ( - - {section.content} - - )} - {section?.logoButton && - section?.logoButton.length > 0 && - section?.logoButton?.map((button) => button?.href && logoButton({ data: button, url }))} - , - ), - }; - default: - return null; - } - }) - : {}; -}; diff --git a/packages/preview-button/package.json b/packages/preview-button/package.json deleted file mode 100644 index ae2f7804f..000000000 --- a/packages/preview-button/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "@frameless/preview-button", - "version": "1.2.0", - "description": "A Strapi plugin that enable preview button", - "private": false, - "keywords": [], - "strapi": { - "name": "preview-button", - "description": "Description of Preview Button plugin", - "kind": "plugin", - "displayName": "Preview Button" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/preview-button" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "dependencies": { - "@strapi/design-system": "1.12.2", - "@strapi/icons": "1.12.2", - "@utrecht/component-library-css": "7.1.2", - "@utrecht/design-tokens": "2.5.0", - "@frameless/utils": "0.1.0" - }, - "author": { - "name": "@frameless" - }, - "engines": { - "node": "20.x.x" - }, - "license": "EUPL-1.2", - "peerDependencies": { - "@strapi/strapi": ">=4.0.0" - } -} diff --git a/packages/preview-button/server/bootstrap.js b/packages/preview-button/server/bootstrap.js deleted file mode 100644 index 529aa95af..000000000 --- a/packages/preview-button/server/bootstrap.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = () => {}; diff --git a/packages/preview-button/server/config/index.js b/packages/preview-button/server/config/index.js deleted file mode 100644 index f292319b9..000000000 --- a/packages/preview-button/server/config/index.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -const { ValidationError } = require('@strapi/utils').errors; - -module.exports = { - default: {}, - validator: (config) => { - const uid = config.contentTypes.every((contentType) => Object.prototype.hasOwnProperty.call(contentType, 'uid')); - const query = config.contentTypes.every((contentType) => - Object.prototype.hasOwnProperty.call(contentType, 'query'), - ); - const type = config.contentTypes.every((contentType) => - Object.prototype.hasOwnProperty.call(contentType.query, 'type'), - ); - if (!config) { - return; - } - if (!config?.domain) { - throw new ValidationError('Missing domain prop.'); - } - if (!config?.token) { - throw new ValidationError('Missing token prop.'); - } - if (!uid) { - throw new ValidationError('Missing uid prop.'); - } - if (!query) { - throw new ValidationError('Missing query prop.'); - } - if (!type) { - throw new ValidationError('Missing type prop.'); - } - }, -}; diff --git a/packages/preview-button/server/content-types/index.js b/packages/preview-button/server/content-types/index.js deleted file mode 100644 index 8b46fbbaa..000000000 --- a/packages/preview-button/server/content-types/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = {}; diff --git a/packages/preview-button/server/controllers/index.js b/packages/preview-button/server/controllers/index.js deleted file mode 100644 index 160254acc..000000000 --- a/packages/preview-button/server/controllers/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const previewButton = require('./preview-button'); - -module.exports = { - 'preview-button': previewButton, -}; diff --git a/packages/preview-button/server/controllers/preview-button.js b/packages/preview-button/server/controllers/preview-button.js deleted file mode 100644 index afe75943f..000000000 --- a/packages/preview-button/server/controllers/preview-button.js +++ /dev/null @@ -1,237 +0,0 @@ -'use strict'; - -const { getService } = require('../util'); - -module.exports = { - async config(ctx) { - try { - const config = await getService('plugin').getConfig(); - ctx.body = config; - } catch (error) { - ctx.badRequest('Something went wrong with the Preview button config'); - } - }, - - async getAdditionalInformationData(ctx) { - try { - const { id } = ctx.params; - const { uid } = ctx.query; - - if (!id || !uid) { - return ctx.badRequest('Missing id or uid parameter'); - } - - const entry = await strapi.entityService.findOne(uid, id, { - populate: { - product: { - populate: { - price: { - populate: { - price: { populate: '*' }, - }, - }, - }, - }, - content: { populate: { contentBlock: { populate: '*' } } }, - }, - }); - - ctx.body = { - data: { - ...entry, - contentBlock: entry.content?.contentBlock || [], - }, - }; - } catch (error) { - ctx.badRequest('Failed to fetch additional information data', { error: error.message }); - } - }, - - async getInternalFieldData(ctx) { - try { - const { id } = ctx.params; - const { uid } = ctx.query; - - if (!id || !uid) { - return ctx.badRequest('Missing id or uid parameter'); - } - - const entry = await strapi.entityService.findOne(uid, id, { - populate: { - product: { populate: { price: { populate: '*' } } }, - content: { populate: { contentBlock: { populate: '*' } } }, - contact_information_internal: { populate: { contentBlock: { populate: '*' } } }, - contact_information_public: { populate: { contentBlock: { populate: '*' } } }, - }, - }); - const mergedContactInformationInternal = entry?.contact_information_internal?.flatMap( - (item) => item?.contentBlock, - ); - // Merge contact information with content - const mergedData = [ - ...(entry.content?.contentBlock || []), - ...(entry.contact_information_public?.contentBlock || []), - ...(mergedContactInformationInternal || []), - ]; - - ctx.body = { - data: { - ...entry, - mergedContent: mergedData, - }, - }; - } catch (error) { - ctx.badRequest('Failed to fetch internal-field data', { error: error.message }); - } - }, - - async getVacData(ctx) { - try { - const { id } = ctx.params; - const { uid } = ctx.query; - - if (!id || !uid) { - return ctx.badRequest('Missing id or uid parameter'); - } - - const entry = await strapi.entityService.findOne(uid, id, { - populate: { - vac: { populate: '*' }, - contact_information_internal: { populate: { contentBlock: { populate: '*' } } }, - contact_information_public: { populate: { contentBlock: { populate: '*' } } }, - }, - }); - - const mergedContactInformationInternal = entry?.contact_information_internal?.flatMap( - (item) => item?.contentBlock, - ); - - // Merge contact information with VAC antwoord - const mergedData = [ - ...(entry.vac?.antwoord || []), - ...(entry.contact_information_public?.contentBlock || []), - ...(mergedContactInformationInternal || []), - ]; - - ctx.body = { - data: { - ...entry, - mergedContent: mergedData, - }, - }; - } catch (error) { - ctx.badRequest('Failed to fetch VAC data', { error: error.message }); - } - }, - - async getProductData(ctx) { - try { - const { id } = ctx.params; - const { uid } = ctx.query; - - if (!id || !uid) { - return ctx.badRequest('Missing id or uid parameter'); - } - - const entry = await strapi.entityService.findOne(uid, id, { - populate: { - sections: { - populate: { - internal_field: { - populate: { - content: { populate: '*' }, - contact_information_internal: { populate: { contentBlock: { populate: '*' } } }, - contact_information_public: { populate: { contentBlock: { populate: '*' } } }, - }, - }, - contact_information_public: { - populate: { contentBlock: { populate: '*' } }, - }, - }, - }, - price: { populate: '*' }, - additional_information: { - populate: { - content: { populate: { contentBlock: { populate: '*' } } }, - }, - }, - }, - }); - - // Process sections - let processedSections = entry.sections || []; - let internalFieldData = null; - - // Process sections: merge contact info in internal_field and handle contact_information_public - processedSections = processedSections.flatMap((section) => { - // Handle internal-block-content - if (section.__component === 'components.internal-block-content' && section.internal_field) { - const internalField = section.internal_field; - const mergedContactInformationInternal = internalField.contact_information_internal?.flatMap( - (item) => item?.contentBlock, - ); - const mergedContentBlock = [ - ...(internalField.content?.contentBlock || []), - ...(internalField.contact_information_public?.contentBlock || []), - ...(mergedContactInformationInternal || []), - ]; - // Store internal field data for later - internalFieldData = { - content: mergedContentBlock, - }; - - return { - ...section, - internal_field: { - ...internalField, - content: { - ...internalField.content, - contentBlock: mergedContentBlock, - }, - }, - }; - } - - // Handle contact-information-public component - flatten contentBlock into individual items - if (section.__component === 'components.contact-information-public' && section.contact_information_public) { - const contentBlocks = section.contact_information_public.contentBlock || []; - // Return array of flattened items as utrecht-rich-text so client processProductData handles them - return contentBlocks.map((block) => ({ - __component: 'components.utrecht-rich-text', - id: block.id, - content: block.content, - kennisartikelCategorie: 'contact', - label: block.label, - })); - } - - return section; - }); - - // Flatten any nested arrays (from contact_information_public transformation) - processedSections = processedSections.flat(); - - // Prepend content field as first section - if (entry.content) { - processedSections = [ - { - content: entry.content, - kennisartikelCategorie: 'inleiding', - __component: 'components.utrecht-rich-text', - }, - ...processedSections, - ]; - } - - ctx.body = { - data: { - ...entry, - sections: processedSections, - internalFieldData, - }, - }; - } catch (error) { - ctx.badRequest('Failed to fetch product data', { error: error.message }); - } - }, -}; diff --git a/packages/preview-button/server/destroy.js b/packages/preview-button/server/destroy.js deleted file mode 100644 index 26d7a4e9b..000000000 --- a/packages/preview-button/server/destroy.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = () => { - // destroy phase -}; diff --git a/packages/preview-button/server/index.js b/packages/preview-button/server/index.js deleted file mode 100644 index 98deaeb18..000000000 --- a/packages/preview-button/server/index.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -const bootstrap = require('./bootstrap'); -const config = require('./config'); -const contentTypes = require('./content-types'); -const controllers = require('./controllers'); -const destroy = require('./destroy'); -const middlewares = require('./middlewares'); -const policies = require('./policies'); -const register = require('./register'); -const routes = require('./routes'); -const services = require('./services'); - -module.exports = { - register, - bootstrap, - destroy, - config, - controllers, - routes, - services, - contentTypes, - policies, - middlewares, -}; diff --git a/packages/preview-button/server/middlewares/index.js b/packages/preview-button/server/middlewares/index.js deleted file mode 100644 index 8b46fbbaa..000000000 --- a/packages/preview-button/server/middlewares/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = {}; diff --git a/packages/preview-button/server/policies/index.js b/packages/preview-button/server/policies/index.js deleted file mode 100644 index 8b46fbbaa..000000000 --- a/packages/preview-button/server/policies/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = {}; diff --git a/packages/preview-button/server/register.js b/packages/preview-button/server/register.js deleted file mode 100644 index 01ff4ea35..000000000 --- a/packages/preview-button/server/register.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = () => { - // registeration phase -}; diff --git a/packages/preview-button/server/routes/admin-api.js b/packages/preview-button/server/routes/admin-api.js deleted file mode 100644 index 738dda290..000000000 --- a/packages/preview-button/server/routes/admin-api.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -module.exports = { - type: 'admin', - routes: [ - { - method: 'GET', - path: '/config', - handler: 'preview-button.config', - config: { - policies: ['admin::isAuthenticatedAdmin'], - }, - }, - { - method: 'GET', - path: '/additional-information/:id', - handler: 'preview-button.getAdditionalInformationData', - config: { - policies: ['admin::isAuthenticatedAdmin'], - }, - }, - { - method: 'GET', - path: '/internal-field/:id', - handler: 'preview-button.getInternalFieldData', - config: { - policies: ['admin::isAuthenticatedAdmin'], - }, - }, - { - method: 'GET', - path: '/vac/:id', - handler: 'preview-button.getVacData', - config: { - policies: ['admin::isAuthenticatedAdmin'], - }, - }, - { - method: 'GET', - path: '/product/:id', - handler: 'preview-button.getProductData', - config: { - policies: ['admin::isAuthenticatedAdmin'], - }, - }, - ], -}; diff --git a/packages/preview-button/server/routes/index.js b/packages/preview-button/server/routes/index.js deleted file mode 100644 index b3a688bc2..000000000 --- a/packages/preview-button/server/routes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const admin = require('./admin-api'); - -module.exports = { - 'admin-api': admin, -}; diff --git a/packages/preview-button/server/services/index.js b/packages/preview-button/server/services/index.js deleted file mode 100644 index 9775d8b28..000000000 --- a/packages/preview-button/server/services/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const plugin = require('./plugin'); - -module.exports = { - plugin, -}; diff --git a/packages/preview-button/server/services/plugin.js b/packages/preview-button/server/services/plugin.js deleted file mode 100644 index cf9f3cd20..000000000 --- a/packages/preview-button/server/services/plugin.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -const config = require('../config'); -const { pluginId } = require('../util'); - -module.exports = ({ strapi }) => ({ - async getConfig() { - const data = await strapi.config.get(`plugin.${pluginId}`, config.default); - return data; - }, -}); diff --git a/packages/preview-button/server/util/get-service.js b/packages/preview-button/server/util/get-service.js deleted file mode 100644 index ff7ea6abe..000000000 --- a/packages/preview-button/server/util/get-service.js +++ /dev/null @@ -1,8 +0,0 @@ -/* eslint-disable no-undef */ -'use strict'; - -const pluginId = require('./plugin-id'); - -const getService = (name) => strapi.plugin(pluginId).service(name); - -module.exports = getService; diff --git a/packages/preview-button/server/util/index.js b/packages/preview-button/server/util/index.js deleted file mode 100644 index ca06c02f1..000000000 --- a/packages/preview-button/server/util/index.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -const getService = require('./get-service'); -const pluginId = require('./plugin-id'); - -module.exports = { - getService, - pluginId, -}; diff --git a/packages/preview-button/server/util/plugin-id.js b/packages/preview-button/server/util/plugin-id.js deleted file mode 100644 index f16ceafa4..000000000 --- a/packages/preview-button/server/util/plugin-id.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const pluginPkg = require('../../package.json'); - -module.exports = pluginPkg.strapi.name; diff --git a/packages/preview-button/strapi-admin.js b/packages/preview-button/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/preview-button/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/preview-button/strapi-server.js b/packages/preview-button/strapi-server.js deleted file mode 100644 index 8a908be91..000000000 --- a/packages/preview-button/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./server'); diff --git a/packages/provider-upload-vercel/CHANGELOG.md b/packages/provider-upload-vercel/CHANGELOG.md deleted file mode 100644 index 64a5f1e20..000000000 --- a/packages/provider-upload-vercel/CHANGELOG.md +++ /dev/null @@ -1,21 +0,0 @@ -# @frameless/provider-upload-vercel [1.2.0](https://github.com/frameless/strapi/compare/@frameless/provider-upload-vercel@1.1.0...@frameless/provider-upload-vercel@1.2.0) (2024-02-08) - - -### Features - -* add Node.js 20 support ([7b5feb7](https://github.com/frameless/strapi/commit/7b5feb7f204e52566430e25ceb282a2a0d0fa86f)) - -# @frameless/provider-upload-vercel [1.1.0](https://github.com/frameless/strapi/compare/@frameless/provider-upload-vercel@1.0.0...@frameless/provider-upload-vercel@1.1.0) (2023-10-04) - - -### Features - -* **vth:** add grid ([8a52585](https://github.com/frameless/strapi/commit/8a525854ae8292deb612bbf87df30420403c3616)) -* **vth:** render themas with card ([81252b2](https://github.com/frameless/strapi/commit/81252b22670389e186695ac5c20c66849c578212)) - -# @frameless/provider-upload-vercel 1.0.0 (2023-09-26) - - -### Features - -* create provider upload vercel plugin ([e4bb551](https://github.com/frameless/strapi/commit/e4bb5511f89b59353d1e86158a60ccd4c7e82974)) diff --git a/packages/provider-upload-vercel/LICENSE b/packages/provider-upload-vercel/LICENSE deleted file mode 100644 index f21959c48..000000000 --- a/packages/provider-upload-vercel/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 Frameless - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/provider-upload-vercel/README.md b/packages/provider-upload-vercel/README.md deleted file mode 100644 index 79756e6c3..000000000 --- a/packages/provider-upload-vercel/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# @frameless/provider-upload-vercel - -## Description - -This Strapi plugin provides a Vercel provider for file uploads, allowing you to easily upload files to Vercel's Blob storage. It integrates with Strapi's upload functionality to store and manage files on Vercel's infrastructure. - -## Installation - -To install this Strapi plugin, you can use npm or yarn: - -```bash -yarn add @frameless/provider-upload-vercel -# or -npm install @frameless/provider-upload-vercel -``` - -## Configuration - -### Strapi Configuration - -To configure this plugin in your Strapi server, follow these steps: - -1. Navigate to your Strapi project directory. - -2. Locate the `/config/plugins.ts` file. - -3. Open the `plugins.ts` file for editing. - -4. Add the following configuration to set up the Vercel provider: - - ```ts - export default ({ env }) => ({ - upload: { - config: { - provider: "@frameless/provider-upload-vercel", - }, - }, - // ... other plugins and configurations - }); - ``` - -### Configuring Security Middleware for Thumbnail Previews - -To ensure that thumbnail previews in the Media Library function correctly, you need to make adjustments to the Strapi Security Middleware. Specifically, you should update the `contentSecurityPolicy` settings as outlined below, instead of using the default `strapi::security` string. Follow these steps to configure the middleware: - -1. Locate the `./config/middlewares.ts` file in your Strapi project. - -2. Open the `middlewares.ts` file for editing. - -3. Look for the section related to `contentSecurityPolicy` settings. - -4. Replace the default `strapi::security` string with the following object: - - ```ts - name: 'strapi::security', - config: { - contentSecurityPolicy: { - useDefaults: true, - directives: { - 'connect-src': ["'self'", 'https:'], - 'img-src': ["'self'", 'data:', 'blob:', 'https://your-domain.com'], - 'media-src': ["'self'", 'data:', 'blob:', 'https://your-domain.com'], - upgradeInsecureRequests: null, - }, - }, - }, - ``` - - Make sure to replace "" with the appropriate domains or sources you want to allow for image sources and connections. This configuration ensures that your Strapi application can display thumbnail previews as expected. Save the changes to the middlewares.ts file. - -5. Ensure that you have set the `BLOB_READ_WRITE_TOKEN` environment variable for the [Vercel Blob](https://vercel.com/docs/storage/vercel-blob/quickstart#prepare-your-local-project). - -6. build the strapi project by using `strapi build` or you can use `strapi develop --watch-admin` - -## License - -This plugin is released under the [MIT License](./LICENSE). - -## Author - -Created by [Frameless](https://github.com/frameless). - -## Development - -If you want to contribute to this plugin or build it locally, you can follow these development instructions: - -1. Clone the repository from GitHub. -2. Install the necessary development dependencies using `yarn install`. -3. Build the plugin using `yarn build`. diff --git a/packages/provider-upload-vercel/custom.d.ts b/packages/provider-upload-vercel/custom.d.ts deleted file mode 100644 index ce7570326..000000000 --- a/packages/provider-upload-vercel/custom.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; -declare module 'rollup-plugin-peer-deps-external'; diff --git a/packages/provider-upload-vercel/package.json b/packages/provider-upload-vercel/package.json deleted file mode 100644 index c56a28d91..000000000 --- a/packages/provider-upload-vercel/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "@frameless/provider-upload-vercel", - "version": "0.0.0", - "description": "Vercel provider for strapi upload", - "private": true, - "keywords": [ - "vercel", - "blob", - "upload", - "strapi", - "provider" - ], - "main": "./dist/index.cjs.js", - "module": "./dist/index.esm.js", - "types": "./dist/src/index.d.ts", - "license": "EUPL-1.2", - "files": [ - "dist/" - ], - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/provider-upload-vercel" - }, - "author": "Frameless", - "scripts": { - "prebuild": "yarn clean", - "build": "rollup --config rollup.config.ts --configPlugin typescript", - "watch": "rollup --config rollup.config.ts --configPlugin typescript -w", - "clean": "rimraf dist .rollup.cache", - "lint-build": "tsc --noEmit --project tsconfig.json" - }, - "dependencies": { - "@vercel/blob": "0.12.5", - "into-stream": "8.0.1" - }, - "devDependencies": { - "@types/fs-extra": "11.0.4", - "rollup-plugin-typescript2": "0.35.0", - "@rollup/plugin-typescript": "11.1.6", - "rollup": "3.29.4", - "@rollup/plugin-terser": "0.4.4", - "@rollup/plugin-commonjs": "25.0.7", - "@rollup/plugin-json": "6.0.1", - "@rollup/plugin-node-resolve": "15.2.3", - "rollup-plugin-peer-deps-external": "2.2.4", - "rollup-plugin-terser": "7.0.2" - }, - "engines": { - "node": "20.x.x" - } -} diff --git a/packages/provider-upload-vercel/rollup.config.ts b/packages/provider-upload-vercel/rollup.config.ts deleted file mode 100644 index a7508c9f0..000000000 --- a/packages/provider-upload-vercel/rollup.config.ts +++ /dev/null @@ -1,38 +0,0 @@ -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import { readFileSync } from 'fs'; -import { RollupOptions } from 'rollup'; -import peerDepsExternal from 'rollup-plugin-peer-deps-external'; -import { terser } from 'rollup-plugin-terser'; -import typescript from 'rollup-plugin-typescript2'; - -const packageJson = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8')); - -const config: RollupOptions = { - input: 'src/index.ts', // Entry point to your library - output: [ - { - file: packageJson.main, - format: 'cjs', // CommonJS format - exports: 'auto', // Automatic exports for CommonJS - }, - { - file: packageJson.module, - format: 'esm', // ES Module format - }, - ], - plugins: [ - typescript({ - tsconfig: 'tsconfig.json', - }), - nodeResolve(), - commonjs(), - terser(), // Minify the output - peerDepsExternal(), // Treat peer dependencies as externals - json(), - ], - external: ['@vercel/blob'], -}; - -export default config; diff --git a/packages/provider-upload-vercel/src/index.ts b/packages/provider-upload-vercel/src/index.ts deleted file mode 100644 index f95d2f4a9..000000000 --- a/packages/provider-upload-vercel/src/index.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { BlobAccessError, BlobUnknownError, del, put } from '@vercel/blob'; -import intoStream from 'into-stream'; -import { ReadStream } from 'node:fs'; - -class FileLocationConverter { - private config: { - directory?: string; - }; - constructor(config: { directory?: string }) { - this.config = config; - } - - getKey(file: File): string { - const filename = `${file.hash}${file.ext}`; - if (!this.config.directory) return filename; - return `${this.config.directory}/${filename}`; - } -} - -interface File { - name: string; - alternativeText?: string; - caption?: string; - width?: number; - height?: number; - formats?: Record; - hash: string; - ext?: string; - mime: string; - size: number; - url: string; - previewUrl?: string; - path?: string; - provider?: string; - provider_metadata?: Record; - stream?: ReadStream; - // eslint-disable-next-line no-undef - buffer: Buffer; -} - -export default { - init(config: any) { - const converter = new FileLocationConverter(config); - return { - async upload(file: File) { - try { - if (file.buffer) { - const bufferImage = intoStream(file.buffer); - const blob = await put(converter.getKey(file), bufferImage, { - access: 'public', - contentType: file.mime, - }); - file.url = blob.url; - } else { - throw new Error('buffer is not defined'); - } - } catch (error) { - if (error instanceof BlobAccessError) { - throw error; - } else if (error instanceof BlobUnknownError) { - throw error; - } else { - // throw the error again if it's unknown - throw error; - } - } - }, - async uploadStream(file: File) { - try { - if (file.stream) { - const blob = await put(converter.getKey(file), file.stream, { - access: 'public', - contentType: file.mime, - }); - file.url = blob.url; - } else { - throw new Error('stream is not defined'); - } - } catch (error) { - if (error instanceof BlobAccessError) { - throw error; - } else if (error instanceof BlobUnknownError) { - throw error; - } else { - // throw the error again if it's unknown - throw error; - } - } - }, - async delete(file: File) { - try { - await del(file.url); - } catch (error) { - if (error instanceof BlobAccessError) { - // handle a recognized error - throw error; - } else if (error instanceof BlobUnknownError) { - throw error; - } else { - // throw the error again if it's unknown - throw error; - } - } - }, - }; - }, -}; diff --git a/packages/provider-upload-vercel/tsconfig.json b/packages/provider-upload-vercel/tsconfig.json deleted file mode 100644 index 34c9a7c75..000000000 --- a/packages/provider-upload-vercel/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "allowJs": true, - "allowSyntheticDefaultImports": true, - "allowUnreachableCode": false, - "composite": true, - "declaration": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "incremental": true, - "isolatedModules": true, - "lib": ["es2020"], - "module": "es2020", - "moduleResolution": "node", - "noUnusedLocals": true, - "noUnusedParameters": true, - "outDir": "dist", - "resolveJsonModule": true, - "rootDir": ".", - "skipLibCheck": true, - "strict": true - }, - "include": ["src/**/*", "rollup.config.ts", "custom.d.ts"], - "exclude": ["node_modules", "**/*.test.ts"] -} diff --git a/packages/samenwerkende-catalogi/eslint.config.mjs b/packages/samenwerkende-catalogi/eslint.config.mjs new file mode 100644 index 000000000..5c8aafb62 --- /dev/null +++ b/packages/samenwerkende-catalogi/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from '@frameless/eslint-config/base'; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/packages/samenwerkende-catalogi/package.json b/packages/samenwerkende-catalogi/package.json index 587882139..561cb81a2 100644 --- a/packages/samenwerkende-catalogi/package.json +++ b/packages/samenwerkende-catalogi/package.json @@ -22,17 +22,23 @@ "registry": "https://npm.pkg.github.com/" }, "dependencies": { - "@frameless/catalogi-data": "0.0.0", - "xmlbuilder2": "3.0.2", - "@frameless/upl": "0.0.0" + "@frameless/catalogi-data": "0.0.1", + "@frameless/upl": "0.0.1", + "dotenv": "17.4.2", + "xmlbuilder2": "3.0.2" }, "scripts": { - "prebuild": "yarn clean", + "prebuild": "pnpm clean", "builds": "rollup -c ", - "build": "yarn build:browser && yarn build:node", + "build": "pnpm build:browser && pnpm build:node", "build:browser": "tsc -p ./tsconfig.browser.json", "build:node": "tsc -p ./tsconfig.node.json", "clean": "rimraf dist", + "lint": "eslint --report-unused-disable-directives .", + "lint:fix": "eslint --fix .", "lint-build": "tsc --noEmit --project tsconfig.json" + }, + "devDependencies": { + "@frameless/eslint-config": "1.2.0" } } diff --git a/packages/samenwerkende-catalogi/src/index.ts b/packages/samenwerkende-catalogi/src/index.ts index 5e03b9f90..79fdf1106 100644 --- a/packages/samenwerkende-catalogi/src/index.ts +++ b/packages/samenwerkende-catalogi/src/index.ts @@ -1,8 +1,9 @@ -import * as gemeente from '@frameless/catalogi-data'; +import gemeente from '@frameless/catalogi-data'; import { uplKeyValues } from '@frameless/upl'; import dotenv from 'dotenv'; import { mapKeys } from 'lodash'; import { create } from 'xmlbuilder2'; + import { createScheme, getPrefLabel, isValidURL } from './helpers'; dotenv.config(); @@ -50,6 +51,7 @@ type AudienceType = { }; type SamenWerkendeCatalogiAttributesTypes = { + documentId: string; catalogiMeta: CatalogiMetaType; pdc_metadata: PdcMetaType; locale: string; @@ -58,12 +60,7 @@ type SamenWerkendeCatalogiAttributesTypes = { updatedAt: string; }; -type SamenWerkendeCatalogiDataType = { - id: string; - attributes: SamenWerkendeCatalogiAttributesTypes; -}; - -export const convertJsonToXML = (data: SamenWerkendeCatalogiDataType[], frontend_url: string) => { +export const convertJsonToXML = (data: SamenWerkendeCatalogiAttributesTypes[], frontend_url: string) => { if (!frontend_url) { throw new Error('frontend_url is required'); } else if (!isValidURL(frontend_url)) { @@ -78,19 +75,18 @@ export const convertJsonToXML = (data: SamenWerkendeCatalogiDataType[], frontend 'xsi:schemaLocation': 'https://standaarden.overheid.nl/product/terms/sc.xsd', }); - const meta = data.map(({ attributes, id }) => { - const gemeenteSpatial = attributes.catalogiMeta?.spatial.resourceIdentifier; - const gemeenteAuthority = attributes.catalogiMeta?.authority.resourceIdentifier; - const uniformProductName = uplKeyValues.find(({ uri }) => uri === attributes.pdc_metadata?.uplProductNaam); - const prefLabelSpatial = getPrefLabel(gemeente.cv.value, attributes.catalogiMeta?.spatial.resourceIdentifier); - const prefLabelAuthority = getPrefLabel(gemeente.cv.value, attributes.catalogiMeta?.authority.resourceIdentifier); - - const schemeAuthority = createScheme(attributes.catalogiMeta?.authority?.scheme, prefixMap); - const schemeSpatial = createScheme(attributes.catalogiMeta?.spatial?.scheme, prefixMap); + const meta = data.map((item) => { + const gemeenteSpatial = item.catalogiMeta?.spatial.resourceIdentifier; + const gemeenteAuthority = item.catalogiMeta?.authority.resourceIdentifier; + const uniformProductName = uplKeyValues.find(({ uri }) => uri === item.pdc_metadata?.uplProductNaam); + const prefLabelSpatial = getPrefLabel(gemeente.cv.value, item.catalogiMeta?.spatial.resourceIdentifier); + const prefLabelAuthority = getPrefLabel(gemeente.cv.value, item.catalogiMeta?.authority.resourceIdentifier); + const schemeAuthority = createScheme(item.catalogiMeta?.authority?.scheme, prefixMap); + const schemeSpatial = createScheme(item.catalogiMeta?.spatial?.scheme, prefixMap); const path = 'products'; // can be from the CMS - const identifier = `${frontend_url.endsWith('/') ? frontend_url : `${frontend_url}/`}${ - attributes.locale - }/${path}/${attributes.slug}`; + const identifier = `${frontend_url.endsWith('/') ? frontend_url : `${frontend_url}/`}${item.locale}/${path}/${ + item.slug + }`; const spatial = { scheme: schemeSpatial, @@ -105,17 +101,17 @@ export const convertJsonToXML = (data: SamenWerkendeCatalogiDataType[], frontend }; const audiences = - attributes.catalogiMeta && attributes.catalogiMeta?.audience - ? attributes.catalogiMeta?.audience.map(({ id, type }) => ({ id, type, scheme: 'overheid:Doelgroep' })) + item.catalogiMeta && item.catalogiMeta?.audience + ? item.catalogiMeta?.audience.map(({ id, type }) => ({ id, type, scheme: 'overheid:Doelgroep' })) : []; return { - title: attributes.title, - language: attributes.locale, - modified: attributes.updatedAt, - productId: id, - abstract: attributes.catalogiMeta?.abstract, - onlineAanvragen: attributes.catalogiMeta?.onlineRequest.type, + productId: item.documentId, + title: item.title, + language: item.locale, + modified: item.updatedAt, + abstract: item.catalogiMeta?.abstract, + onlineAanvragen: item.catalogiMeta?.onlineRequest.type, identifier, spatial, authority, diff --git a/packages/samenwerkende-catalogi/tsconfig.json b/packages/samenwerkende-catalogi/tsconfig.json index daa457f44..ace7cd1c5 100644 --- a/packages/samenwerkende-catalogi/tsconfig.json +++ b/packages/samenwerkende-catalogi/tsconfig.json @@ -8,7 +8,8 @@ "esModuleInterop": true, "resolveJsonModule": true, "skipLibCheck": true, - "declaration": true + "declaration": true, + "module": "es2022" }, "include": ["src/**/*"], "exclude": ["node_modules", "**/*.test.ts"] diff --git a/packages/strapi-plugin-env-label/CHANGELOG.md b/packages/strapi-plugin-env-label/CHANGELOG.md deleted file mode 100644 index 2290de050..000000000 --- a/packages/strapi-plugin-env-label/CHANGELOG.md +++ /dev/null @@ -1,13 +0,0 @@ -# @frameless/strapi-plugin-env-label [1.1.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-env-label@1.0.0...@frameless/strapi-plugin-env-label@1.1.0) (2024-05-02) - - -### Features - -* **deps:** upgrade `@utrecht/` packages ([a835ad6](https://github.com/frameless/strapi/commit/a835ad66a0095e8d1d762677b380e89010225070)) - -# @frameless/strapi-plugin-env-label 1.0.0 (2024-05-02) - - -### Features - -* **strap-plugin-env-label:** create strap-plugin-env-label ([f8a3a22](https://github.com/frameless/strapi/commit/f8a3a228476edc41c5b98af5565eb4e730c4f235)) diff --git a/packages/strapi-plugin-env-label/README.md b/packages/strapi-plugin-env-label/README.md deleted file mode 100644 index 93d9bbc2a..000000000 --- a/packages/strapi-plugin-env-label/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# @frameless/strapi-plugin-env-label - -A Strapi plugin designed to visually represent the current environment. - -## Installation - -To install the plugin, navigate to your Strapi dashboard and execute the following command in your terminal: - -```shell -yarn add @frameless/strapi-plugin-env-label -# or -npm install @frameless/strapi-plugin-env-label - -``` - -## Configuration - -Update the `your-strapi-directory/config/plugin.ts` file by adding the following code: - -```ts - -export default ({ env }) => ({ - 'env-label': { - enabled: true, - config: { - env_label: // use env('USE_ENV_VARIABLE') or put the value here, // accepted values: development|acceptance - }, - }, -}); - -``` - -After making these changes, rebuild your Strapi dashboard and start the dashboard server. diff --git a/packages/strapi-plugin-env-label/admin/src/components/Initializer/index.tsx b/packages/strapi-plugin-env-label/admin/src/components/Initializer/index.tsx deleted file mode 100644 index 746a42b02..000000000 --- a/packages/strapi-plugin-env-label/admin/src/components/Initializer/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { useEffect, useRef } from 'react'; -import { pluginId } from '../../pluginId'; - -type InitializerProps = { - setPlugin: (id: string) => void; -}; - -export const Initializer = ({ setPlugin }: InitializerProps) => { - const ref = useRef(null); - ref.current = setPlugin; - useEffect(() => { - if (ref && ref?.current) { - ref?.current(pluginId); - } - }, [ref.current]); - - return null; -}; diff --git a/packages/strapi-plugin-env-label/admin/src/components/StatusBadge/index.tsx b/packages/strapi-plugin-env-label/admin/src/components/StatusBadge/index.tsx deleted file mode 100644 index 1a79ad8b4..000000000 --- a/packages/strapi-plugin-env-label/admin/src/components/StatusBadge/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Box } from '@strapi/design-system'; -import { StatusBadge as UtrechtStatusBadge } from '@utrecht/component-library-react'; -import type { StatusBadgeProps as UtrechtStatusBadgeProps } from '@utrecht/component-library-react'; -import React, { forwardRef } from 'react'; -import type { ForwardedRef, PropsWithChildren } from 'react'; -import { useIntl } from 'react-intl'; -import usePluginConfig from '../../hooks/use-plugin-config'; -import { getTrad } from '../../utils/getTrad'; - -interface StatusBadgeProps extends UtrechtStatusBadgeProps { - gap?: boolean; -} - -export const StatusBadge = forwardRef( - ({ gap, ...resProps }: PropsWithChildren, ref: ForwardedRef) => { - const { formatMessage } = useIntl(); - const { config } = usePluginConfig(); - - const regex = /^(development|acceptance)$/; - - if (!config?.env_label || !regex.test(config.env_label)) return null; - - return ( - - - {formatMessage({ - id: getTrad(`${config?.env_label}-env-label-message`), - })} - - - ); - }, -); - -StatusBadge.displayName = 'StatusBadge'; diff --git a/packages/strapi-plugin-env-label/admin/src/constants.ts b/packages/strapi-plugin-env-label/admin/src/constants.ts deleted file mode 100644 index ccc9514ef..000000000 --- a/packages/strapi-plugin-env-label/admin/src/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { pluginId } from './pluginId'; - -export const RESOLVE_CONFIG = `${pluginId}/resolve-config`; diff --git a/packages/strapi-plugin-env-label/admin/src/hooks/use-plugin-config.ts b/packages/strapi-plugin-env-label/admin/src/hooks/use-plugin-config.ts deleted file mode 100644 index 2c1473d88..000000000 --- a/packages/strapi-plugin-env-label/admin/src/hooks/use-plugin-config.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { useFetchClient, useNotification } from '@strapi/helper-plugin'; -import { useEffect } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import { RESOLVE_CONFIG } from '../constants'; -import { pluginId } from '../pluginId'; - -const usePluginConfig = () => { - const dispatch = useDispatch(); - const toggleNotification = useNotification(); - - const { isLoading, config } = useSelector((state: any) => state[`${pluginId}_config`]); - const client = useFetchClient(); - const abortController = new AbortController(); - - // eslint-disable-next-line consistent-return - const fetchData = async () => { - try { - const endpoint = `/${pluginId}/config`; - const { data } = await client.get(endpoint, { - signal: abortController.signal, - }); - dispatch({ type: RESOLVE_CONFIG, data: data ?? {} }); - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - - if (!abortController.signal.aborted) { - toggleNotification({ - type: 'warning', - message: { id: 'notification.error' }, - }); - return err; - } - } - }; - - useEffect(() => { - // Do nothing if we have already loaded the config data. - if (!isLoading && !!config) { - return; - } - fetchData(); - // eslint-disable-next-line consistent-return - return () => { - if (!abortController.signal.aborted) { - abortController.abort(); - } - }; - }, [abortController]); - - return { config, isLoading }; -}; - -export default usePluginConfig; diff --git a/packages/strapi-plugin-env-label/admin/src/index.tsx b/packages/strapi-plugin-env-label/admin/src/index.tsx deleted file mode 100644 index 231e30a38..000000000 --- a/packages/strapi-plugin-env-label/admin/src/index.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import { Initializer } from './components/Initializer'; -import { StatusBadge } from './components/StatusBadge'; -import { pluginId } from './pluginId'; -import reducers from './reducers'; -import pluginPkg from '../../package.json'; -import '@utrecht/component-library-css'; -import '@utrecht/design-tokens/dist/index.css'; - -const name = pluginPkg.strapi.name; - -export default { - register(app: any) { - app.addReducers(reducers); - app.registerPlugin({ - id: pluginId, - initializer: Initializer, - isReady: true, - name, - }); - }, - - bootstrap(app: any) { - app.injectContentManagerComponent('listView', 'actions', { - name: 'env-label', - Component: () => , - }); - app.injectContentManagerComponent('editView', 'informations', { - name: 'env-label', - Component: () => , - }); - app.injectContentManagerComponent('listView', 'deleteModalAdditionalInfos', { - name: 'env-label', - Component: () => , - }); - }, - - async registerTrads({ locales }: { locales: string[] }) { - const importedTrads = await Promise.all( - locales.map((locale) => { - return import(/* webpackChunkName: "translation-[request]" */ `./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/strapi-plugin-env-label/admin/src/pluginId.ts b/packages/strapi-plugin-env-label/admin/src/pluginId.ts deleted file mode 100644 index f3e6484e4..000000000 --- a/packages/strapi-plugin-env-label/admin/src/pluginId.ts +++ /dev/null @@ -1,3 +0,0 @@ -import pluginPkg from '../../package.json'; - -export const pluginId = pluginPkg.name.replace(/^@frameless\/(@[^-,.][\w,-]+\/|strapi-)plugin-/i, ''); diff --git a/packages/strapi-plugin-env-label/admin/src/reducers/config.ts b/packages/strapi-plugin-env-label/admin/src/reducers/config.ts deleted file mode 100644 index 899ca54de..000000000 --- a/packages/strapi-plugin-env-label/admin/src/reducers/config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import produce from 'immer'; -import { RESOLVE_CONFIG } from '../constants'; - -const initialState = { - isLoading: true, - config: {}, -}; - -const configReducer = produce((state = initialState, action) => { - switch (action.type) { - case RESOLVE_CONFIG: { - state.isLoading = false; - state.config = action.data; - break; - } - - default: - return state; - } - - return state; -}); - -export default configReducer; diff --git a/packages/strapi-plugin-env-label/admin/src/reducers/index.ts b/packages/strapi-plugin-env-label/admin/src/reducers/index.ts deleted file mode 100644 index 26be70bd6..000000000 --- a/packages/strapi-plugin-env-label/admin/src/reducers/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import config from './config'; -import { pluginId } from '../pluginId'; - -const reducers = { - [`${pluginId}_config`]: config, -}; - -export default reducers; diff --git a/packages/strapi-plugin-env-label/admin/src/translations/en.json b/packages/strapi-plugin-env-label/admin/src/translations/en.json deleted file mode 100644 index 49d7de6ff..000000000 --- a/packages/strapi-plugin-env-label/admin/src/translations/en.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "development-env-label-message": "Development", - "acceptance-env-label-message": "Acceptance" -} diff --git a/packages/strapi-plugin-env-label/admin/src/translations/nl.json b/packages/strapi-plugin-env-label/admin/src/translations/nl.json deleted file mode 100644 index d02ababf9..000000000 --- a/packages/strapi-plugin-env-label/admin/src/translations/nl.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "development-env-label-message": "Ontwikkeling", - "acceptance-env-label-message": "Acceptatie" -} diff --git a/packages/strapi-plugin-env-label/admin/src/utils/getTrad.ts b/packages/strapi-plugin-env-label/admin/src/utils/getTrad.ts deleted file mode 100644 index 7ff529163..000000000 --- a/packages/strapi-plugin-env-label/admin/src/utils/getTrad.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { pluginId } from '../pluginId'; - -export const getTrad = (id: string) => `${pluginId}.${id}`; diff --git a/packages/strapi-plugin-env-label/custom.d.ts b/packages/strapi-plugin-env-label/custom.d.ts deleted file mode 100644 index 321f3c0d1..000000000 --- a/packages/strapi-plugin-env-label/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; diff --git a/packages/strapi-plugin-env-label/package.json b/packages/strapi-plugin-env-label/package.json deleted file mode 100644 index 19ddec11d..000000000 --- a/packages/strapi-plugin-env-label/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@frameless/strapi-plugin-env-label", - "version": "0.0.0", - "description": "A Strapi plugin designed to visually represent the current environment.", - "keywords": [], - "private": false, - "strapi": { - "name": "env-label", - "description": "A helpful plugin for displaying the current environment.", - "kind": "plugin", - "displayName": "Display the current environment" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-env-label" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "author": { - "name": "" - }, - "license": "EUPL-1.2", - "peerDependencies": { - "@strapi/strapi": ">=4.0.0" - }, - "engines": { - "node": "20.x.x" - }, - "dependencies": { - "@strapi/design-system": "1.12.2", - "@strapi/icons": "1.12.2", - "@utrecht/component-library-css": "4.2.0", - "@utrecht/component-library-react": "5.0.0", - "@utrecht/design-tokens": "1.1.0" - }, - "devDependencies": { - "typescript": "5.0.4" - }, - "scripts": { - "develop": "tsc -p tsconfig.server.json -w", - "build": "tsc -p tsconfig.server.json", - "lint-build": "tsc --noEmit --project tsconfig.json" - } -} diff --git a/packages/strapi-plugin-env-label/server/controllers/index.ts b/packages/strapi-plugin-env-label/server/controllers/index.ts deleted file mode 100644 index d26be7c8e..000000000 --- a/packages/strapi-plugin-env-label/server/controllers/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { pluginId } from '../../admin/src/pluginId'; - -// eslint-disable-next-line no-undef -const getService = (name: string) => strapi.plugin(pluginId).service(name); -export default { - 'env-label': { - async config(ctx: any) { - try { - const config = await getService('plugin').getConfig(); - ctx.body = config; - } catch (error) { - ctx.badRequest(`Something went wrong with the ${pluginId} config`); - } - }, - }, -}; diff --git a/packages/strapi-plugin-env-label/server/index.ts b/packages/strapi-plugin-env-label/server/index.ts deleted file mode 100644 index de54b02ad..000000000 --- a/packages/strapi-plugin-env-label/server/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import controllers from './controllers'; -import register from './register'; -import routes from './routes'; -import services from './services'; - -export default { - controllers, - register, - routes, - services, -}; diff --git a/packages/strapi-plugin-env-label/server/register/index.ts b/packages/strapi-plugin-env-label/server/register/index.ts deleted file mode 100644 index 2afee7a0a..000000000 --- a/packages/strapi-plugin-env-label/server/register/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import { pluginId } from '../../admin/src/pluginId'; - -export default ({ strapi }: { strapi: Strapi }) => { - strapi.customFields.register({ - name: pluginId, - plugin: pluginId, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-env-label/server/routes/admin-api.ts b/packages/strapi-plugin-env-label/server/routes/admin-api.ts deleted file mode 100644 index 90d9a0a79..000000000 --- a/packages/strapi-plugin-env-label/server/routes/admin-api.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { pluginId } from '../../admin/src/pluginId'; - -export default { - type: 'admin', - routes: [ - { - method: 'GET', - path: '/config', - handler: `${pluginId}.config`, - config: { - policies: ['admin::isAuthenticatedAdmin'], - }, - }, - ], -}; diff --git a/packages/strapi-plugin-env-label/server/routes/index.ts b/packages/strapi-plugin-env-label/server/routes/index.ts deleted file mode 100644 index 6daa896e7..000000000 --- a/packages/strapi-plugin-env-label/server/routes/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import admin from './admin-api'; - -export default { - 'admin-api': admin, -}; diff --git a/packages/strapi-plugin-env-label/server/services/index.ts b/packages/strapi-plugin-env-label/server/services/index.ts deleted file mode 100644 index 49e38f63c..000000000 --- a/packages/strapi-plugin-env-label/server/services/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import plugin from './plugin'; - -export default { - plugin, -}; diff --git a/packages/strapi-plugin-env-label/server/services/plugin.ts b/packages/strapi-plugin-env-label/server/services/plugin.ts deleted file mode 100644 index de9d1f134..000000000 --- a/packages/strapi-plugin-env-label/server/services/plugin.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import { pluginId } from '../../admin/src/pluginId'; - -export default ({ strapi }: { strapi: Strapi }) => ({ - getConfig() { - const data = strapi.config.get(`plugin.${pluginId}`); - return data; - }, -}); diff --git a/packages/strapi-plugin-env-label/strapi-admin.js b/packages/strapi-plugin-env-label/strapi-admin.js deleted file mode 100644 index 69d1b3790..000000000 --- a/packages/strapi-plugin-env-label/strapi-admin.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -// eslint-disable-next-line no-undef -module.exports = require('./admin/src').default; diff --git a/packages/strapi-plugin-env-label/strapi-server.js b/packages/strapi-plugin-env-label/strapi-server.js deleted file mode 100644 index faa2a7f78..000000000 --- a/packages/strapi-plugin-env-label/strapi-server.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -// eslint-disable-next-line no-undef -module.exports = require('./dist/server'); diff --git a/packages/strapi-plugin-env-label/tsconfig.json b/packages/strapi-plugin-env-label/tsconfig.json deleted file mode 100644 index 29ffbbb4e..000000000 --- a/packages/strapi-plugin-env-label/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/admin", - "compilerOptions": { - "target": "ESNext", - "strict": true, - "lib": ["dom", "dom.iterable", "esnext"] - }, - "include": ["admin", "custom.d.ts"], - "exclude": ["node_modules/", "dist/", "server/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-env-label/tsconfig.server.json b/packages/strapi-plugin-env-label/tsconfig.server.json deleted file mode 100644 index 6f8591ad2..000000000 --- a/packages/strapi-plugin-env-label/tsconfig.server.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/server", - - "compilerOptions": { - "outDir": "dist", - "rootDir": "." - }, - - "include": ["server", "server/**/*.json"], - "exclude": ["node_modules/", "dist/", "admin/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-flo-legal-embed/CHANGELOG.md b/packages/strapi-plugin-flo-legal-embed/CHANGELOG.md deleted file mode 100644 index ec0a7997f..000000000 --- a/packages/strapi-plugin-flo-legal-embed/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ -# @frameless/strapi-plugin-flo-legal-embed - -## 1.0.0 - -### Major Changes - -- 5a20217: Nieuw embed-formulierveld voor 'Flo Legal' toegevoegd aan Strapi. diff --git a/packages/strapi-plugin-flo-legal-embed/README.md b/packages/strapi-plugin-flo-legal-embed/README.md deleted file mode 100644 index cd6be45ef..000000000 --- a/packages/strapi-plugin-flo-legal-embed/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Strapi Plugin: strapi-plugin-flo-legal-embed - -This custom field serves as a dropdown representation of available Flo Legal Embed within the Strapi dashboard. It retrieves the `identifier` through a fetch function that calls the Flo Legal API. - -## Installation - -```shell - -yarn install @frameless/strapi-plugin-flo-legal-embed - -``` - -## Usage - -Navigate to the Strapi dashboard's `config/plugins.ts`. - -```ts -export default ({ env }) => ({ - "flo-legal-embed": { - enabled: true, - config: { - api_url: env("FLO_LEGAL_API_URL"), - token: env("FLO_LEGAL_API_TOKEN"), - }, - }, -}); -``` - -**Build the dashboard**: - -```shell -yarn build - -``` diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/components/ComboboxIcon/index.tsx b/packages/strapi-plugin-flo-legal-embed/admin/src/components/ComboboxIcon/index.tsx deleted file mode 100644 index 73591cdd2..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/components/ComboboxIcon/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Flex } from '@strapi/design-system/Flex'; -import { Icon } from '@strapi/design-system/Icon'; -import { ManyWays } from '@strapi/icons'; -import React from 'react'; -import styled from 'styled-components'; - -const IconBox = styled(Flex)` - background-color: ${({ theme }) => theme.colors.primary100}; - border: 1px solid ${({ theme }) => theme.colors.primary200}; - - svg > path { - fill: ${({ theme }) => theme.colors.primary600}; - } -`; - -const ComboboxIcon = () => ( - - - -); - -export default ComboboxIcon; diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/components/CustomCombobox/index.tsx b/packages/strapi-plugin-flo-legal-embed/admin/src/components/CustomCombobox/index.tsx deleted file mode 100644 index 29eb69b74..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/components/CustomCombobox/index.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { Combobox, ComboboxOption, TextInput } from '@strapi/design-system'; -import { Stack } from '@strapi/design-system/Stack'; -import React from 'react'; -import { useIntl } from 'react-intl'; -import usePluginConfig from '../../hooks/use-plugin-config'; -import getTrad from '../../utils/getTrad'; - -interface CustomComboboxProps { - intlLabel: any; - // eslint-disable-next-line no-unused-vars - onChange: (param: any) => {}; - attribute: any; - name: string; - description: any; - disabled: boolean; - error: string; - labelAction: any; - required: boolean; - value: string; - placeholder: any; -} -type FloLegalData = { - identifier: string; - name?: string; -}; -type FloLegalDataParams = FloLegalData; -const generateFloLegalData = (params: FloLegalDataParams) => new URLSearchParams({ ...params }).toString(); - -const CustomCombobox = ({ - value, - onChange, - name, - intlLabel, - labelAction, - required, - attribute, - description, - placeholder, - disabled, - error, -}: CustomComboboxProps) => { - const { formatMessage } = useIntl(); - const { config: data, isLoading } = usePluginConfig(); - - if (!data?.config?.api_url || !data?.config?.token) { - return ( - - ); - } - - return ( - - onChange({ target: { name, value: url, type: attribute.type } })} - loading={isLoading} - > - {data?.checks?.length > 0 && - data?.checks?.map(({ identifier, name }: FloLegalData) => ( - - {name} - - ))} - - - ); -}; - -export default CustomCombobox; diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/constants.ts b/packages/strapi-plugin-flo-legal-embed/admin/src/constants.ts deleted file mode 100644 index f7429e72a..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { pluginConfig } from './utils/pluginConfig'; - -export const RESOLVE_CONFIG = `${pluginConfig.pluginId}/resolve-config`; diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/hooks/use-plugin-config.ts b/packages/strapi-plugin-flo-legal-embed/admin/src/hooks/use-plugin-config.ts deleted file mode 100644 index cb1e96503..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/hooks/use-plugin-config.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { useFetchClient, useNotification } from '@strapi/helper-plugin'; -import { useEffect } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import { RESOLVE_CONFIG } from '../constants'; -import { pluginConfig } from '../utils/pluginConfig'; - -const pluginId = pluginConfig.pluginId; -const usePluginConfig = () => { - const dispatch = useDispatch(); - const toggleNotification = useNotification(); - - const { isLoading, config } = useSelector((state: any) => state[`${pluginId}_config`]); - const client = useFetchClient(); - const abortController = new AbortController(); - - // eslint-disable-next-line consistent-return - const fetchData = async () => { - try { - const endpoint = `/${pluginId}/config`; - const { data } = await client.get(endpoint, { - signal: abortController.signal, - }); - dispatch({ type: RESOLVE_CONFIG, data: data ?? {} }); - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - - if (!abortController.signal.aborted) { - toggleNotification({ - type: 'warning', - message: { id: 'notification.error' }, - }); - - return err; - } - } - }; - - useEffect(() => { - // Do nothing if we have already loaded the config data. - if (!isLoading && !!config) { - return; - } - fetchData(); - // eslint-disable-next-line consistent-return - return () => { - if (!abortController.signal.aborted) { - abortController.abort(); - } - }; - }, [abortController]); - - return { config, isLoading }; -}; - -export default usePluginConfig; diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/index.ts b/packages/strapi-plugin-flo-legal-embed/admin/src/index.ts deleted file mode 100644 index 638d8dc07..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/index.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import ComboboxIcon from './components/ComboboxIcon'; -import reducers from './reducers'; -import getTrad from './utils/getTrad'; -import { pluginConfig } from './utils/pluginConfig'; - -const pluginId = pluginConfig.pluginId; - -export default { - register(app: any) { - app.addReducers(reducers); - app.customFields.register({ - name: pluginId, - pluginId, - type: 'string', - icon: ComboboxIcon, - intlLabel: { - id: getTrad('flo-legal-embed.label'), - defaultMessage: 'Choose an Embedded Flo Legal Form', - }, - intlDescription: { - id: getTrad('flo-legal-embed.description'), - defaultMessage: 'Saves the unique identifier of the selected decision tree in the database.', - }, - components: { - Input: async () => import('./components/CustomCombobox'), - }, - options: { - advanced: [ - { - sectionTitle: { - id: 'global.settings', - defaultMessage: 'Settings', - }, - items: [ - { - name: 'required', - type: 'checkbox', - intlLabel: { - id: 'form.attribute.item.requiredField', - defaultMessage: 'Required field', - }, - description: { - id: 'form.attribute.item.requiredField.description', - defaultMessage: "You won't be able to create an entry if this field is empty", - }, - }, - ], - }, - ], - }, - }); - }, - async registerTrads({ locales }: { locales: string[] }) { - const importedTrads = await Promise.all( - locales.map((locale: any) => { - return import(`./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/reducers/config.ts b/packages/strapi-plugin-flo-legal-embed/admin/src/reducers/config.ts deleted file mode 100644 index 899ca54de..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/reducers/config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import produce from 'immer'; -import { RESOLVE_CONFIG } from '../constants'; - -const initialState = { - isLoading: true, - config: {}, -}; - -const configReducer = produce((state = initialState, action) => { - switch (action.type) { - case RESOLVE_CONFIG: { - state.isLoading = false; - state.config = action.data; - break; - } - - default: - return state; - } - - return state; -}); - -export default configReducer; diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/reducers/index.ts b/packages/strapi-plugin-flo-legal-embed/admin/src/reducers/index.ts deleted file mode 100644 index ee5be1b88..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/reducers/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import config from './config'; -import { pluginConfig } from '../utils/pluginConfig'; - -const reducers = { - [`${pluginConfig.pluginId}_config`]: config, -}; - -export default reducers; diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/translations/en.json b/packages/strapi-plugin-flo-legal-embed/admin/src/translations/en.json deleted file mode 100644 index 3b4d6969a..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/translations/en.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "flo-legal-embed.label": "Choose an Embedded Flo Legal", - "flo-legal-embed.description": "Saves the unique identifier of the selected form in the database.", - "flo-legal-embed.disabled.placeholder": "This field is disabled until necessary settings are configured.", - "flo-legal-embed.disabled.hint": "Ensure FLO_LEGAL_API_URL and FLO_LEGAL_API_TOKEN are configured to enable this field." -} diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/translations/nl.json b/packages/strapi-plugin-flo-legal-embed/admin/src/translations/nl.json deleted file mode 100644 index d81c1de85..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/translations/nl.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "open-forms-embed.label": "Kies een ingebed Flo Legal formulier", - "open-forms-embed.description": "Slaat de unieke identificatie van het geselecteerde formulier op in de database.", - "open-forms-embed.disabled.placeholder": "Dit veld is uitgeschakeld totdat de vereiste instellingen zijn geconfigureerd.", - "open-forms-embed.disabled.hint": "Zorg ervoor dat de vereiste instellingen (FLO_LEGAL_API_URL en FLO_LEGAL_API_TOKEN) correct zijn geconfigureerd om dit veld in te schakelen." -} diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/utils/getTrad.ts b/packages/strapi-plugin-flo-legal-embed/admin/src/utils/getTrad.ts deleted file mode 100644 index 48df991f7..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/utils/getTrad.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { pluginConfig } from './pluginConfig'; - -const getTrad = (id: string): string => `${pluginConfig.pluginId}.${id}`; - -export default getTrad; diff --git a/packages/strapi-plugin-flo-legal-embed/admin/src/utils/pluginConfig.ts b/packages/strapi-plugin-flo-legal-embed/admin/src/utils/pluginConfig.ts deleted file mode 100644 index 79b30a72e..000000000 --- a/packages/strapi-plugin-flo-legal-embed/admin/src/utils/pluginConfig.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const pluginConfig = { - pluginId: 'flo-legal-embed', -}; diff --git a/packages/strapi-plugin-flo-legal-embed/custom.d.ts b/packages/strapi-plugin-flo-legal-embed/custom.d.ts deleted file mode 100644 index 321f3c0d1..000000000 --- a/packages/strapi-plugin-flo-legal-embed/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; diff --git a/packages/strapi-plugin-flo-legal-embed/package.json b/packages/strapi-plugin-flo-legal-embed/package.json deleted file mode 100644 index 7e37baad6..000000000 --- a/packages/strapi-plugin-flo-legal-embed/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@frameless/strapi-plugin-flo-legal-embed", - "version": "1.0.0", - "description": "A Strapi plugin that provides a custom field for selecting and embedding Flo Legal forms, enabling seamless integration and enhanced form management within Strapi projects.", - "keywords": [], - "private": false, - "strapi": { - "name": "flo-legal-embed", - "description": "Select and embed Flo Legal forms seamlessly within your Strapi project.", - "kind": "plugin", - "displayName": "Flo Legal Embed" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-flo-legal-embed" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "author": { - "name": "" - }, - "license": "EUPL-1.2", - "peerDependencies": { - "@strapi/strapi": ">=4.0.0" - }, - "engines": { - "node": "20.x.x" - }, - "dependencies": { - "@strapi/design-system": "1.12.2", - "@strapi/icons": "1.12.2" - }, - "scripts": { - "develop": "tsc -p tsconfig.server.json -w", - "build": "tsc -p tsconfig.server.json", - "lint-build": "tsc --noEmit --project tsconfig.json" - } -} diff --git a/packages/strapi-plugin-flo-legal-embed/server/config/index.ts b/packages/strapi-plugin-flo-legal-embed/server/config/index.ts deleted file mode 100644 index 95fcd127f..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/config/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface Config { - api_url: string; - token: string; -} - -export default { - default: {}, - validator: (config: Config) => { - if (!config) { - return; - } - if (!config?.api_url) { - // eslint-disable-next-line no-console - console.warn('strapi-plugin-flo-legal-embed: Warning: Missing api_url prop.'); - } - if (!config?.token) { - // eslint-disable-next-line no-console - console.warn('strapi-plugin-flo-legal-embed: Warning: Missing token prop.'); - } - }, -}; diff --git a/packages/strapi-plugin-flo-legal-embed/server/controllers/flo-legal-embed.ts b/packages/strapi-plugin-flo-legal-embed/server/controllers/flo-legal-embed.ts deleted file mode 100644 index e3db2cbce..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/controllers/flo-legal-embed.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { Context } from 'koa'; -import { pluginConfig } from '../../admin/src/utils/pluginConfig'; -import { getService } from '../util'; - -export default { - async config(ctx: Context) { - try { - const config = await getService('plugin').getConfig(); - - if (!config?.api_url || !config?.token) { - ctx.body = { config }; - return; - } - - const response = await fetch(`${config.api_url}/block-publications?type=CHECK`, { - headers: { - 'x-api-key': config.token, - }, - }); - - if (!response.ok) { - throw new Error(`API request failed with status ${response.status}`); - } - - const checks = await response.json(); - ctx.body = { config, checks }; - } catch (error: any) { - // eslint-disable-next-line no-console - console.error(error); - ctx.badRequest(`Failed to load ${pluginConfig.pluginId} config: ${error.message}`); - } - }, -}; diff --git a/packages/strapi-plugin-flo-legal-embed/server/controllers/index.ts b/packages/strapi-plugin-flo-legal-embed/server/controllers/index.ts deleted file mode 100644 index 9a44d4daf..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/controllers/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import floLegalEmbed from './flo-legal-embed'; - -export default { - 'flo-legal-embed': floLegalEmbed, -}; diff --git a/packages/strapi-plugin-flo-legal-embed/server/index.ts b/packages/strapi-plugin-flo-legal-embed/server/index.ts deleted file mode 100644 index 1c8ac4dee..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import config from './config'; -import controllers from './controllers'; -import { register } from './register'; -import routes from './routes'; -import services from './services'; - -export default { - config, - controllers, - routes, - services, - register, -}; diff --git a/packages/strapi-plugin-flo-legal-embed/server/register.ts b/packages/strapi-plugin-flo-legal-embed/server/register.ts deleted file mode 100644 index a5b25f344..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/register.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import { pluginConfig } from '../admin/src/utils/pluginConfig'; - -export const register = ({ strapi }: { strapi: Strapi }) => { - strapi.customFields.register({ - name: pluginConfig.pluginId, - plugin: pluginConfig.pluginId, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-flo-legal-embed/server/register/index.ts b/packages/strapi-plugin-flo-legal-embed/server/register/index.ts deleted file mode 100644 index 9e2d694e6..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/register/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import { pluginConfig } from '../../admin/src/utils/pluginConfig'; - -export const register = ({ strapi }: { strapi: Strapi }) => { - strapi.customFields.register({ - name: pluginConfig.pluginId, - plugin: pluginConfig.pluginId, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-flo-legal-embed/server/routes/admin-api.ts b/packages/strapi-plugin-flo-legal-embed/server/routes/admin-api.ts deleted file mode 100644 index 4e30f666f..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/routes/admin-api.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { pluginConfig } from '../../admin/src/utils/pluginConfig'; -export default { - type: 'admin', - routes: [ - { - method: 'GET', - path: '/config', - handler: `${pluginConfig.pluginId}.config`, - config: { - policies: ['admin::isAuthenticatedAdmin'], - }, - }, - ], -}; diff --git a/packages/strapi-plugin-flo-legal-embed/server/routes/index.ts b/packages/strapi-plugin-flo-legal-embed/server/routes/index.ts deleted file mode 100644 index 6daa896e7..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/routes/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import admin from './admin-api'; - -export default { - 'admin-api': admin, -}; diff --git a/packages/strapi-plugin-flo-legal-embed/server/services/index.ts b/packages/strapi-plugin-flo-legal-embed/server/services/index.ts deleted file mode 100644 index 49e38f63c..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/services/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import plugin from './plugin'; - -export default { - plugin, -}; diff --git a/packages/strapi-plugin-flo-legal-embed/server/services/plugin.ts b/packages/strapi-plugin-flo-legal-embed/server/services/plugin.ts deleted file mode 100644 index 98e8ccb70..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/services/plugin.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import { pluginConfig } from '../../admin/src/utils/pluginConfig'; -import config from '../config'; - -export default ({ strapi }: { strapi: Strapi }) => ({ - getConfig() { - const data = strapi.config.get(`plugin.${pluginConfig.pluginId}`, config.default); - return data; - }, -}); diff --git a/packages/strapi-plugin-flo-legal-embed/server/util/get-service.ts b/packages/strapi-plugin-flo-legal-embed/server/util/get-service.ts deleted file mode 100644 index 3713eb5ee..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/util/get-service.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { pluginConfig } from '../../admin/src/utils/pluginConfig'; - -// eslint-disable-next-line no-undef -export const getService = (name: string) => strapi.plugin(pluginConfig.pluginId).service(name); diff --git a/packages/strapi-plugin-flo-legal-embed/server/util/index.ts b/packages/strapi-plugin-flo-legal-embed/server/util/index.ts deleted file mode 100644 index 5b4174424..000000000 --- a/packages/strapi-plugin-flo-legal-embed/server/util/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { getService } from './get-service'; diff --git a/packages/strapi-plugin-flo-legal-embed/strapi-admin.js b/packages/strapi-plugin-flo-legal-embed/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/strapi-plugin-flo-legal-embed/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/strapi-plugin-flo-legal-embed/strapi-server.js b/packages/strapi-plugin-flo-legal-embed/strapi-server.js deleted file mode 100644 index bf5595886..000000000 --- a/packages/strapi-plugin-flo-legal-embed/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./dist/server'); diff --git a/packages/strapi-plugin-flo-legal-embed/tsconfig.json b/packages/strapi-plugin-flo-legal-embed/tsconfig.json deleted file mode 100644 index 29ffbbb4e..000000000 --- a/packages/strapi-plugin-flo-legal-embed/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/admin", - "compilerOptions": { - "target": "ESNext", - "strict": true, - "lib": ["dom", "dom.iterable", "esnext"] - }, - "include": ["admin", "custom.d.ts"], - "exclude": ["node_modules/", "dist/", "server/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-flo-legal-embed/tsconfig.server.json b/packages/strapi-plugin-flo-legal-embed/tsconfig.server.json deleted file mode 100644 index 6f8591ad2..000000000 --- a/packages/strapi-plugin-flo-legal-embed/tsconfig.server.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/server", - - "compilerOptions": { - "outDir": "dist", - "rootDir": "." - }, - - "include": ["server", "server/**/*.json"], - "exclude": ["node_modules/", "dist/", "admin/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-gemeente-select/CHANGELOG.md b/packages/strapi-plugin-gemeente-select/CHANGELOG.md deleted file mode 100644 index 4fdb49366..000000000 --- a/packages/strapi-plugin-gemeente-select/CHANGELOG.md +++ /dev/null @@ -1,40 +0,0 @@ -# @frameless/strapi-plugin-gemeente-select [1.2.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-gemeente-select@1.1.0...@frameless/strapi-plugin-gemeente-select@1.2.0) (2024-02-02) - - -### Features - -* add Node.js 20 support ([7b5feb7](https://github.com/frameless/strapi/commit/7b5feb7f204e52566430e25ceb282a2a0d0fa86f)) - -# @frameless/strapi-plugin-gemeente-select 1.0.0 (2023-12-01) - - -### Bug Fixes - -* integrate scheme custom field ([3ed0fcf](https://github.com/frameless/strapi/commit/3ed0fcfee2419c6cdf0ed425639a6a6e9a61f99c)) - - -### Features - -* create catalogi-data package ([e817b85](https://github.com/frameless/strapi/commit/e817b8555312809a75617ee4a19adecb3b071bea)) -* create select gemeente custom field for strapi ([c81f3aa](https://github.com/frameless/strapi/commit/c81f3aae853e23d4d43489847693b7e9cb7d0747)) -* **gemeente-select-plugin:** add configurable defaults value option ([b5d19cb](https://github.com/frameless/strapi/commit/b5d19cb8ace5cdda453367480514b8a58ae0b914)) - -# @frameless/strapi-plugin-gemeente-select [1.1.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-gemeente-select@1.0.0...@frameless/strapi-plugin-gemeente-select@1.1.0) (2023-11-08) - - -### Features - -* **gemeente-select-plugin:** add configurable defaults value option ([b5d19cb](https://github.com/frameless/strapi/commit/b5d19cb8ace5cdda453367480514b8a58ae0b914)) - -# @frameless/strapi-plugin-gemeente-select 1.0.0 (2022-11-23) - - -### Bug Fixes - -* integrate scheme custom field ([3ed0fcf](https://github.com/frameless/strapi/commit/3ed0fcfee2419c6cdf0ed425639a6a6e9a61f99c)) - - -### Features - -* create catalogi-data package ([e817b85](https://github.com/frameless/strapi/commit/e817b8555312809a75617ee4a19adecb3b071bea)) -* create select gemeente custom field for strapi ([c81f3aa](https://github.com/frameless/strapi/commit/c81f3aae853e23d4d43489847693b7e9cb7d0747)) diff --git a/packages/strapi-plugin-gemeente-select/README.md b/packages/strapi-plugin-gemeente-select/README.md deleted file mode 100644 index 03f18f71f..000000000 --- a/packages/strapi-plugin-gemeente-select/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Strapi plugin gemeente-select - -A strapi custom field for selecting a gemeente diff --git a/packages/strapi-plugin-gemeente-select/admin/src/components/ComboboxIcon/index.js b/packages/strapi-plugin-gemeente-select/admin/src/components/ComboboxIcon/index.js deleted file mode 100644 index fb9fedee3..000000000 --- a/packages/strapi-plugin-gemeente-select/admin/src/components/ComboboxIcon/index.js +++ /dev/null @@ -1,24 +0,0 @@ -import { Flex } from '@strapi/design-system/Flex'; -import { Icon } from '@strapi/design-system/Icon'; -import Globe from '@strapi/icons/Globe'; -import React from 'react'; -import styled from 'styled-components'; - -const IconBox = styled(Flex)` - background-color: #f0f0ff; /* primary100 */ - border: 1px solid #d9d8ff; /* primary200 */ - - svg > path { - fill: #4945ff; /* primary600 */ - } -`; - -function ComboboxIcon() { - return ( - - - - ); -} - -export default ComboboxIcon; diff --git a/packages/strapi-plugin-gemeente-select/admin/src/components/CustomCombobox/index.js b/packages/strapi-plugin-gemeente-select/admin/src/components/CustomCombobox/index.js deleted file mode 100644 index 2ffd8dcbc..000000000 --- a/packages/strapi-plugin-gemeente-select/admin/src/components/CustomCombobox/index.js +++ /dev/null @@ -1,75 +0,0 @@ -import gemeente from '@frameless/catalogi-data'; -import { Combobox, ComboboxOption } from '@strapi/design-system/Combobox'; -import { Field, FieldError, FieldHint, FieldLabel } from '@strapi/design-system/Field'; -import { Stack } from '@strapi/design-system/Stack'; -import PropTypes from 'prop-types'; -import React from 'react'; -import { useIntl } from 'react-intl'; - -function CustomCombobox({ - value, - onChange, - name, - intlLabel, - labelAction, - required, - attribute, - description, - placeholder, - disabled, - error, -}) { - const { formatMessage } = useIntl(); - - return ( - - - - {formatMessage(intlLabel)} - - - onChange({ target: { name, value: resourceIdentifier, type: attribute.type } }) - } - > - {gemeente.cv.value.map(({ prefLabel, resourceIdentifier }) => ( - - {prefLabel} - - ))} - - - - - - ); -} - -CustomCombobox.defaultProps = { - description: null, - disabled: false, - error: null, - labelAction: null, - required: false, - value: '', -}; - -CustomCombobox.propTypes = { - intlLabel: PropTypes.object.isRequired, - onChange: PropTypes.func.isRequired, - attribute: PropTypes.object.isRequired, - name: PropTypes.string.isRequired, - description: PropTypes.object, - disabled: PropTypes.bool, - error: PropTypes.string, - labelAction: PropTypes.object, - required: PropTypes.bool, - value: PropTypes.string, -}; - -export default CustomCombobox; diff --git a/packages/strapi-plugin-gemeente-select/admin/src/index.js b/packages/strapi-plugin-gemeente-select/admin/src/index.js deleted file mode 100644 index 47eca0c4b..000000000 --- a/packages/strapi-plugin-gemeente-select/admin/src/index.js +++ /dev/null @@ -1,108 +0,0 @@ -import gemeente from '@frameless/catalogi-data'; -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import ComboboxIcon from './components/ComboboxIcon'; -import pluginId from './pluginId'; -import getTrad from './utils/getTrad'; - -const options = gemeente.cv.value.map(({ prefLabel, resourceIdentifier }) => ({ - key: resourceIdentifier, - value: resourceIdentifier, - metadatas: { - intlLabel: { - id: `components.InputSelect.option.${resourceIdentifier}`, - defaultMessage: prefLabel, - }, - }, -})); - -export default { - register(app) { - app.customFields.register({ - name: 'gemeente', - pluginId: 'gemeente-select', - type: 'string', - icon: ComboboxIcon, - intlLabel: { - id: getTrad('gemeente-select.label'), - defaultMessage: 'Gemeente', - }, - intlDescription: { - id: getTrad('gemeente-select.description'), - defaultMessage: 'Select any gemeente', - }, - components: { - Input: async () => import('./components/CustomCombobox'), - }, - options: { - advanced: [ - { - sectionTitle: { - id: 'global.settings', - defaultMessage: 'Settings', - }, - items: [ - { - name: 'required', - type: 'checkbox', - intlLabel: { - id: 'form.attribute.item.requiredField', - defaultMessage: 'Required field', - }, - description: { - id: 'form.attribute.item.requiredField.description', - defaultMessage: "You won't be able to create an entry if this field is empty", - }, - }, - { - name: 'default', - type: 'select', - intlLabel: { - id: 'form.attribute.item.defaultField', - defaultMessage: 'Default Value', - }, - description: { - id: 'form.attribute.item.defaultField.description', - defaultMessage: 'A default value is a preset choice when no other is given', - }, - options: [ - { - key: '__null_reset_value__', - value: '', - metadatas: { - intlLabel: { - id: 'components.InputSelect.option.placeholder', - defaultMessage: 'Choose here', - }, - }, - }, - ...options, - ], - }, - ], - }, - ], - }, - }); - }, - async registerTrads({ locales }) { - const importedTrads = await Promise.all( - locales.map((locale) => { - return import(`./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/strapi-plugin-gemeente-select/admin/src/pluginId.js b/packages/strapi-plugin-gemeente-select/admin/src/pluginId.js deleted file mode 100644 index 15b29da95..000000000 --- a/packages/strapi-plugin-gemeente-select/admin/src/pluginId.js +++ /dev/null @@ -1,5 +0,0 @@ -const pluginPkg = require('../../package.json'); - -const pluginId = pluginPkg.name.replace(/^@frameless\/(@[^-,.][\w,-]+\/|strapi-)plugin-/i, ''); - -module.exports = pluginId; diff --git a/packages/strapi-plugin-gemeente-select/admin/src/translations/en.json b/packages/strapi-plugin-gemeente-select/admin/src/translations/en.json deleted file mode 100644 index 6eefd1838..000000000 --- a/packages/strapi-plugin-gemeente-select/admin/src/translations/en.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "gemeente-select.label": "Municipality", - "gemeente-select.description": "Select a Municipality" -} diff --git a/packages/strapi-plugin-gemeente-select/admin/src/translations/nl.json b/packages/strapi-plugin-gemeente-select/admin/src/translations/nl.json deleted file mode 100644 index 3966e1c1a..000000000 --- a/packages/strapi-plugin-gemeente-select/admin/src/translations/nl.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "gemeente-select.label": "Gemeente", - "gemeente-select.description": "Selecteer een gemeente" -} diff --git a/packages/strapi-plugin-gemeente-select/admin/src/utils/getTrad.js b/packages/strapi-plugin-gemeente-select/admin/src/utils/getTrad.js deleted file mode 100644 index d0a071b26..000000000 --- a/packages/strapi-plugin-gemeente-select/admin/src/utils/getTrad.js +++ /dev/null @@ -1,5 +0,0 @@ -import pluginId from '../pluginId'; - -const getTrad = (id) => `${pluginId}.${id}`; - -export default getTrad; diff --git a/packages/strapi-plugin-gemeente-select/package.json b/packages/strapi-plugin-gemeente-select/package.json deleted file mode 100644 index 36efe1fd6..000000000 --- a/packages/strapi-plugin-gemeente-select/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@frameless/strapi-plugin-gemeente-select", - "version": "0.0.0", - "description": "A strapi custom field for selecting gemeente", - "keywords": [], - "private": false, - "strapi": { - "name": "gemeente-select", - "description": "Gemeente Select custom field", - "kind": "plugin", - "displayName": "Gemeente Select" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-gemeente-select" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "author": { - "name": "" - }, - "license": "EUPL-1.2", - "peerDependencies": { - "@strapi/strapi": ">=4.0.0" - }, - "engines": { - "node": "20.x.x" - }, - "dependencies": { - "@strapi/design-system": "1.12.2", - "@strapi/icons": "1.12.2" - } -} diff --git a/packages/strapi-plugin-gemeente-select/server/index.js b/packages/strapi-plugin-gemeente-select/server/index.js deleted file mode 100644 index 419806335..000000000 --- a/packages/strapi-plugin-gemeente-select/server/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const register = require('./register'); - -module.exports = { - register, -}; diff --git a/packages/strapi-plugin-gemeente-select/server/register.js b/packages/strapi-plugin-gemeente-select/server/register.js deleted file mode 100644 index 70cd34769..000000000 --- a/packages/strapi-plugin-gemeente-select/server/register.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; -const plugin = require('../admin/src/pluginId'); - -module.exports = ({ strapi }) => { - strapi.customFields.register({ - name: 'gemeente', - plugin, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-gemeente-select/strapi-admin.js b/packages/strapi-plugin-gemeente-select/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/strapi-plugin-gemeente-select/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/strapi-plugin-gemeente-select/strapi-server.js b/packages/strapi-plugin-gemeente-select/strapi-server.js deleted file mode 100644 index 8a908be91..000000000 --- a/packages/strapi-plugin-gemeente-select/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./server'); diff --git a/packages/strapi-plugin-language/CHANGELOG.md b/packages/strapi-plugin-language/CHANGELOG.md deleted file mode 100644 index 87b78ecfb..000000000 --- a/packages/strapi-plugin-language/CHANGELOG.md +++ /dev/null @@ -1,11 +0,0 @@ -# @frameless/strapi-plugin-language 1.0.0 (2024-06-10) - -## 0.0.0 - -### Minor Changes - -- 82fa577: Wanneer een linktekst in een andere taal is geschreven, dan kun je nu in Strapi de taal instellen. Als je dit doet verbeter je de toegankelijkheid, want dan kan de tekst met de juiste taal voorgelezen worden. - -### Features - -- **strapi-plugin-language:** create strapi language plugin ([a6653d3](https://github.com/frameless/strapi/commit/a6653d37ede5d8300b7a10d6f70ceb12fdfa0703)) diff --git a/packages/strapi-plugin-language/README.md b/packages/strapi-plugin-language/README.md deleted file mode 100644 index 87a72563c..000000000 --- a/packages/strapi-plugin-language/README.md +++ /dev/null @@ -1 +0,0 @@ -# Strapi plugin language diff --git a/packages/strapi-plugin-language/admin/src/components/ComboboxIcon/index.tsx b/packages/strapi-plugin-language/admin/src/components/ComboboxIcon/index.tsx deleted file mode 100644 index 3f9dfb055..000000000 --- a/packages/strapi-plugin-language/admin/src/components/ComboboxIcon/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { Flex } from '@strapi/design-system/Flex'; -import { Icon } from '@strapi/design-system/Icon'; -import User from '@strapi/icons/User'; -import React from 'react'; -import styled from 'styled-components'; - -const IconBox = styled(Flex)` - background-color: #f0f0ff; /* primary100 */ - border: 1px solid #d9d8ff; /* primary200 */ - - svg > path { - fill: #4945ff; /* primary600 */ - } -`; - -function ComboboxIcon() { - return ( - - - - ); -} - -export default ComboboxIcon; diff --git a/packages/strapi-plugin-language/admin/src/components/CustomCombobox/index.tsx b/packages/strapi-plugin-language/admin/src/components/CustomCombobox/index.tsx deleted file mode 100644 index ad77f38a6..000000000 --- a/packages/strapi-plugin-language/admin/src/components/CustomCombobox/index.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import i18nLanguages from '@cospired/i18n-iso-languages'; -import { Combobox, ComboboxOption } from '@strapi/design-system/Combobox'; -import { Field, FieldError, FieldHint, FieldLabel } from '@strapi/design-system/Field'; -import { Stack } from '@strapi/design-system/Stack'; -import { useIntl } from 'react-intl'; -i18nLanguages.registerLocale(require('@cospired/i18n-iso-languages/langs/en.json')); -i18nLanguages.registerLocale(require('@cospired/i18n-iso-languages/langs/nl.json')); - -interface CustomComboboxProps { - intlLabel: any; - // eslint-disable-next-line no-unused-vars - onChange: (param: any) => {}; - attribute: any; - name: string; - description: any; - disabled: boolean; - error: string; - labelAction: any; - required: boolean; - value: string; - placeholder: any; -} - -function CustomCombobox({ - value, - onChange, - name, - intlLabel, - labelAction, - required, - attribute, - description, - placeholder, - disabled, - error, -}: CustomComboboxProps) { - const { formatMessage } = useIntl(); - - // TODO pull locale from strapi - - const locale = 'nl'; - - const languages = [ - { - name: i18nLanguages.getName('NL', locale), - code: 'nl', - }, - { - name: i18nLanguages.getName('EN', locale), - code: 'en', - }, - { - name: i18nLanguages.getName('AR', locale), - code: 'ar', - }, - { - name: i18nLanguages.getName('UK', locale), - code: 'uk', - }, - { - name: i18nLanguages.getName('TR', locale), - code: 'tr', - }, - ]; - - return ( - - - - {formatMessage(intlLabel)} - - onChange({ target: { name, value: code, type: attribute.type } })} - > - {languages.map(({ code, name }) => ( - - {name} - - ))} - - - - - - ); -} - -export default CustomCombobox; diff --git a/packages/strapi-plugin-language/admin/src/index.ts b/packages/strapi-plugin-language/admin/src/index.ts deleted file mode 100644 index 7072a85f2..000000000 --- a/packages/strapi-plugin-language/admin/src/index.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import ComboboxIcon from './components/ComboboxIcon'; -import pluginId from './pluginId'; -import getTrad from './utils/getTrad'; - -export default { - register(app: any) { - app.customFields.register({ - name: pluginId, - pluginId, - type: 'string', - icon: ComboboxIcon, - intlLabel: { - id: getTrad('language.label'), - defaultMessage: 'Select language', - }, - intlDescription: { - id: getTrad('language.description'), - defaultMessage: 'Select language', - }, - components: { - Input: async () => import('./components/CustomCombobox'), - }, - options: { - advanced: [ - { - sectionTitle: { - id: 'global.settings', - defaultMessage: 'Settings', - }, - items: [ - { - name: 'required', - type: 'checkbox', - intlLabel: { - id: 'form.attribute.item.requiredField', - defaultMessage: 'Required field', - }, - description: { - id: 'form.attribute.item.requiredField.description', - defaultMessage: "You won't be able to create an entry if this field is empty", - }, - }, - ], - }, - ], - }, - }); - }, - async registerTrads({ locales }: { locales: string[] }) { - const importedTrads = await Promise.all( - locales.map((locale: any) => { - return import(`./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/strapi-plugin-language/admin/src/pluginId.ts b/packages/strapi-plugin-language/admin/src/pluginId.ts deleted file mode 100644 index 9284b4fd9..000000000 --- a/packages/strapi-plugin-language/admin/src/pluginId.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginPkg from '../../package.json'; - -const pluginId = pluginPkg.name.replace(/^@frameless\/(@[^-,.][\w,-]+\/|strapi-)plugin-/i, ''); - -export default pluginId; diff --git a/packages/strapi-plugin-language/admin/src/translations/en.json b/packages/strapi-plugin-language/admin/src/translations/en.json deleted file mode 100644 index 5d1a6b245..000000000 --- a/packages/strapi-plugin-language/admin/src/translations/en.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "language.label": "Language", - "language.description": "Select a language" -} diff --git a/packages/strapi-plugin-language/admin/src/translations/nl.json b/packages/strapi-plugin-language/admin/src/translations/nl.json deleted file mode 100644 index a81eb0576..000000000 --- a/packages/strapi-plugin-language/admin/src/translations/nl.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "language.label": "Taal", - "language.description": "Kies een taal" -} diff --git a/packages/strapi-plugin-language/admin/src/utils/getTrad.ts b/packages/strapi-plugin-language/admin/src/utils/getTrad.ts deleted file mode 100644 index a539a5015..000000000 --- a/packages/strapi-plugin-language/admin/src/utils/getTrad.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginId from '../pluginId'; - -const getTrad = (id: string) => `${pluginId}.${id}`; - -export default getTrad; diff --git a/packages/strapi-plugin-language/admin/src/utils/localizeLanguagesNames.ts b/packages/strapi-plugin-language/admin/src/utils/localizeLanguagesNames.ts deleted file mode 100644 index 58f230435..000000000 --- a/packages/strapi-plugin-language/admin/src/utils/localizeLanguagesNames.ts +++ /dev/null @@ -1,10 +0,0 @@ -import i18nLanguages from '@cospired/i18n-iso-languages'; -import { LanguagesType } from './types'; -i18nLanguages.registerLocale(require('@cospired/i18n-iso-languages/langs/en.json')); -i18nLanguages.registerLocale(require('@cospired/i18n-iso-languages/langs/nl.json')); - -export const localizeLanguagesNames = (languages: LanguagesType[], locale: string = 'nl') => - languages?.map(({ code, name }) => ({ - code, - name: code ? i18nLanguages.getName(code, locale) : name, - })); diff --git a/packages/strapi-plugin-language/admin/src/utils/sortLanguagesAlphabetically.ts b/packages/strapi-plugin-language/admin/src/utils/sortLanguagesAlphabetically.ts deleted file mode 100644 index ffae74ba8..000000000 --- a/packages/strapi-plugin-language/admin/src/utils/sortLanguagesAlphabetically.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { LanguagesType } from './types'; - -export const sortLanguagesAlphabetically = (languages: LanguagesType[]) => - languages.sort((a, b) => (a.name && b.name ? a.name.localeCompare(b.name) : 0)); diff --git a/packages/strapi-plugin-language/admin/src/utils/types.d.ts b/packages/strapi-plugin-language/admin/src/utils/types.d.ts deleted file mode 100644 index b5e297383..000000000 --- a/packages/strapi-plugin-language/admin/src/utils/types.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -export type LanguagesType = { - name?: string; - code?: string; -}; - -export type PriceTypes = { - value: number; - label: string; - currency: string; - id: string; - uuid?: string; -}; - -export type PriceListTypes = { - title: string; - price: PriceTypes[]; -}; diff --git a/packages/strapi-plugin-language/custom.d.ts b/packages/strapi-plugin-language/custom.d.ts deleted file mode 100644 index 321f3c0d1..000000000 --- a/packages/strapi-plugin-language/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; diff --git a/packages/strapi-plugin-language/package.json b/packages/strapi-plugin-language/package.json deleted file mode 100644 index ed2d12b9f..000000000 --- a/packages/strapi-plugin-language/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@frameless/strapi-plugin-language", - "version": "0.0.0", - "description": "A strapi custom field for selecting a language attribute", - "keywords": [], - "private": false, - "strapi": { - "name": "language", - "description": "A strapi custom field for selecting a language attribute", - "kind": "plugin", - "displayName": "Select uniform product name" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-language" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "author": { - "name": "" - }, - "license": "EUPL-1.2", - "peerDependencies": { - "@strapi/strapi": ">=4.0.0" - }, - "engines": { - "node": "20.x.x" - }, - "dependencies": { - "@strapi/design-system": "1.12.2", - "@strapi/icons": "1.12.2", - "@cospired/i18n-iso-languages": "4.2.0" - }, - "scripts": { - "develop": "tsc -p tsconfig.server.json -w", - "build": "tsc -p tsconfig.server.json", - "lint-build": "tsc --noEmit --project tsconfig.json" - } -} diff --git a/packages/strapi-plugin-language/server/index.ts b/packages/strapi-plugin-language/server/index.ts deleted file mode 100644 index b7ffca92d..000000000 --- a/packages/strapi-plugin-language/server/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { register } from './register'; - -export default { - register, -}; diff --git a/packages/strapi-plugin-language/server/register.ts b/packages/strapi-plugin-language/server/register.ts deleted file mode 100644 index 57c9342bf..000000000 --- a/packages/strapi-plugin-language/server/register.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import plugin from '../admin/src/pluginId'; - -export const register = ({ strapi }: { strapi: Strapi }) => { - strapi.customFields.register({ - name: 'language', - plugin, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-language/strapi-admin.js b/packages/strapi-plugin-language/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/strapi-plugin-language/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/strapi-plugin-language/strapi-server.js b/packages/strapi-plugin-language/strapi-server.js deleted file mode 100644 index bf5595886..000000000 --- a/packages/strapi-plugin-language/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./dist/server'); diff --git a/packages/strapi-plugin-language/tsconfig.json b/packages/strapi-plugin-language/tsconfig.json deleted file mode 100644 index 29ffbbb4e..000000000 --- a/packages/strapi-plugin-language/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/admin", - "compilerOptions": { - "target": "ESNext", - "strict": true, - "lib": ["dom", "dom.iterable", "esnext"] - }, - "include": ["admin", "custom.d.ts"], - "exclude": ["node_modules/", "dist/", "server/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-language/tsconfig.server.json b/packages/strapi-plugin-language/tsconfig.server.json deleted file mode 100644 index 6f8591ad2..000000000 --- a/packages/strapi-plugin-language/tsconfig.server.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/server", - - "compilerOptions": { - "outDir": "dist", - "rootDir": "." - }, - - "include": ["server", "server/**/*.json"], - "exclude": ["node_modules/", "dist/", "admin/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-old-slugs/CHANGELOG.md b/packages/strapi-plugin-old-slugs/CHANGELOG.md deleted file mode 100644 index 1dcb74b3c..000000000 --- a/packages/strapi-plugin-old-slugs/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ -# @frameless/strapi-plugin-old-slugs - -## 1.0.0 - -### Major Changes - -- d026e85: Maak een tool om oude paginalinks op te slaan, zodat bezoekers correct worden doorgestuurd als de titel van een pagina verandert. diff --git a/packages/strapi-plugin-old-slugs/LICENSE.md b/packages/strapi-plugin-old-slugs/LICENSE.md deleted file mode 100644 index ed38ebab5..000000000 --- a/packages/strapi-plugin-old-slugs/LICENSE.md +++ /dev/null @@ -1,288 +0,0 @@ -# EUROPEAN UNION PUBLIC LICENCE v. 1.2 - -EUPL © the European Union 2007, 2016 - -This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined -below) which is provided under the terms of this Licence. Any use of the Work, -other than as authorised under this Licence is prohibited (to the extent such -use is covered by a right of the copyright holder of the Work). - -The Work is provided under the terms of this Licence when the Licensor (as -defined below) has placed the following notice immediately following the -copyright notice for the Work: - - Licensed under the EUPL - -or has expressed by any other means his willingness to license under the EUPL. - -## 1. Definitions - -In this Licence, the following terms have the following meaning: - -- ‘The Licence’: this Licence. - -- ‘The Original Work’: the work or software distributed or communicated by the - Licensor under this Licence, available as Source Code and also as Executable - Code as the case may be. - -- ‘Derivative Works’: the works or software that could be created by the - Licensee, based upon the Original Work or modifications thereof. This Licence - does not define the extent of modification or dependence on the Original Work - required in order to classify a work as a Derivative Work; this extent is - determined by copyright law applicable in the country mentioned in Article 15. - -- ‘The Work’: the Original Work or its Derivative Works. - -- ‘The Source Code’: the human-readable form of the Work which is the most - convenient for people to study and modify. - -- ‘The Executable Code’: any code which has generally been compiled and which is - meant to be interpreted by a computer as a program. - -- ‘The Licensor’: the natural or legal person that distributes or communicates - the Work under the Licence. - -- ‘Contributor(s)’: any natural or legal person who modifies the Work under the - Licence, or otherwise contributes to the creation of a Derivative Work. - -- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of - the Work under the terms of the Licence. - -- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending, - renting, distributing, communicating, transmitting, or otherwise making - available, online or offline, copies of the Work or providing access to its - essential functionalities at the disposal of any other natural or legal - person. - -## 2. Scope of the rights granted by the Licence - -The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, -sublicensable licence to do the following, for the duration of copyright vested -in the Original Work: - -- use the Work in any circumstance and for all usage, -- reproduce the Work, -- modify the Work, and make Derivative Works based upon the Work, -- communicate to the public, including the right to make available or display - the Work or copies thereof to the public and perform publicly, as the case may - be, the Work, -- distribute the Work or copies thereof, -- lend and rent the Work or copies thereof, -- sublicense rights in the Work or copies thereof. - -Those rights can be exercised on any media, supports and formats, whether now -known or later invented, as far as the applicable law permits so. - -In the countries where moral rights apply, the Licensor waives his right to -exercise his moral right to the extent allowed by law in order to make effective -the licence of the economic rights here above listed. - -The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to -any patents held by the Licensor, to the extent necessary to make use of the -rights granted on the Work under this Licence. - -## 3. Communication of the Source Code - -The Licensor may provide the Work either in its Source Code form, or as -Executable Code. If the Work is provided as Executable Code, the Licensor -provides in addition a machine-readable copy of the Source Code of the Work -along with each copy of the Work that the Licensor distributes or indicates, in -a notice following the copyright notice attached to the Work, a repository where -the Source Code is easily and freely accessible for as long as the Licensor -continues to distribute or communicate the Work. - -## 4. Limitations on copyright - -Nothing in this Licence is intended to deprive the Licensee of the benefits from -any exception or limitation to the exclusive rights of the rights owners in the -Work, of the exhaustion of those rights or of other applicable limitations -thereto. - -## 5. Obligations of the Licensee - -The grant of the rights mentioned above is subject to some restrictions and -obligations imposed on the Licensee. Those obligations are the following: - -Attribution right: The Licensee shall keep intact all copyright, patent or -trademarks notices and all notices that refer to the Licence and to the -disclaimer of warranties. The Licensee must include a copy of such notices and a -copy of the Licence with every copy of the Work he/she distributes or -communicates. The Licensee must cause any Derivative Work to carry prominent -notices stating that the Work has been modified and the date of modification. - -Copyleft clause: If the Licensee distributes or communicates copies of the -Original Works or Derivative Works, this Distribution or Communication will be -done under the terms of this Licence or of a later version of this Licence -unless the Original Work is expressly distributed only under this version of the -Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee -(becoming Licensor) cannot offer or impose any additional terms or conditions on -the Work or Derivative Work that alter or restrict the terms of the Licence. - -Compatibility clause: If the Licensee Distributes or Communicates Derivative -Works or copies thereof based upon both the Work and another work licensed under -a Compatible Licence, this Distribution or Communication can be done under the -terms of this Compatible Licence. For the sake of this clause, ‘Compatible -Licence’ refers to the licences listed in the appendix attached to this Licence. -Should the Licensee's obligations under the Compatible Licence conflict with -his/her obligations under this Licence, the obligations of the Compatible -Licence shall prevail. - -Provision of Source Code: When distributing or communicating copies of the Work, -the Licensee will provide a machine-readable copy of the Source Code or indicate -a repository where this Source will be easily and freely available for as long -as the Licensee continues to distribute or communicate the Work. - -Legal Protection: This Licence does not grant permission to use the trade names, -trademarks, service marks, or names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the copyright notice. - -## 6. Chain of Authorship - -The original Licensor warrants that the copyright in the Original Work granted -hereunder is owned by him/her or licensed to him/her and that he/she has the -power and authority to grant the Licence. - -Each Contributor warrants that the copyright in the modifications he/she brings -to the Work are owned by him/her or licensed to him/her and that he/she has the -power and authority to grant the Licence. - -Each time You accept the Licence, the original Licensor and subsequent -Contributors grant You a licence to their contributions to the Work, under the -terms of this Licence. - -## 7. Disclaimer of Warranty - -The Work is a work in progress, which is continuously improved by numerous -Contributors. It is not a finished work and may therefore contain defects or -‘bugs’ inherent to this type of development. - -For the above reason, the Work is provided under the Licence on an ‘as is’ basis -and without warranties of any kind concerning the Work, including without -limitation merchantability, fitness for a particular purpose, absence of defects -or errors, accuracy, non-infringement of intellectual property rights other than -copyright as stated in Article 6 of this Licence. - -This disclaimer of warranty is an essential part of the Licence and a condition -for the grant of any rights to the Work. - -## 8. Disclaimer of Liability - -Except in the cases of wilful misconduct or damages directly caused to natural -persons, the Licensor will in no event be liable for any direct or indirect, -material or moral, damages of any kind, arising out of the Licence or of the use -of the Work, including without limitation, damages for loss of goodwill, work -stoppage, computer failure or malfunction, loss of data or any commercial -damage, even if the Licensor has been advised of the possibility of such damage. -However, the Licensor will be liable under statutory product liability laws as -far such laws apply to the Work. - -## 9. Additional agreements - -While distributing the Work, You may choose to conclude an additional agreement, -defining obligations or services consistent with this Licence. However, if -accepting obligations, You may act only on your own behalf and on your sole -responsibility, not on behalf of the original Licensor or any other Contributor, -and only if You agree to indemnify, defend, and hold each Contributor harmless -for any liability incurred by, or claims asserted against such Contributor by -the fact You have accepted any warranty or additional liability. - -## 10. Acceptance of the Licence - -The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ -placed under the bottom of a window displaying the text of this Licence or by -affirming consent in any other similar way, in accordance with the rules of -applicable law. Clicking on that icon indicates your clear and irrevocable -acceptance of this Licence and all of its terms and conditions. - -Similarly, you irrevocably accept this Licence and all of its terms and -conditions by exercising any rights granted to You by Article 2 of this Licence, -such as the use of the Work, the creation by You of a Derivative Work or the -Distribution or Communication by You of the Work or copies thereof. - -## 11. Information to the public - -In case of any Distribution or Communication of the Work by means of electronic -communication by You (for example, by offering to download the Work from a -remote location) the distribution channel or media (for example, a website) must -at least provide to the public the information requested by the applicable law -regarding the Licensor, the Licence and the way it may be accessible, concluded, -stored and reproduced by the Licensee. - -## 12. Termination of the Licence - -The Licence and the rights granted hereunder will terminate automatically upon -any breach by the Licensee of the terms of the Licence. - -Such a termination will not terminate the licences of any person who has -received the Work from the Licensee under the Licence, provided such persons -remain in full compliance with the Licence. - -## 13. Miscellaneous - -Without prejudice of Article 9 above, the Licence represents the complete -agreement between the Parties as to the Work. - -If any provision of the Licence is invalid or unenforceable under applicable -law, this will not affect the validity or enforceability of the Licence as a -whole. Such provision will be construed or reformed so as necessary to make it -valid and enforceable. - -The European Commission may publish other linguistic versions or new versions of -this Licence or updated versions of the Appendix, so far this is required and -reasonable, without reducing the scope of the rights granted by the Licence. New -versions of the Licence will be published with a unique version number. - -All linguistic versions of this Licence, approved by the European Commission, -have identical value. Parties can take advantage of the linguistic version of -their choice. - -## 14. Jurisdiction - -Without prejudice to specific agreement between parties, - -- any litigation resulting from the interpretation of this License, arising - between the European Union institutions, bodies, offices or agencies, as a - Licensor, and any Licensee, will be subject to the jurisdiction of the Court - of Justice of the European Union, as laid down in article 272 of the Treaty on - the Functioning of the European Union, - -- any litigation arising between other parties and resulting from the - interpretation of this License, will be subject to the exclusive jurisdiction - of the competent court where the Licensor resides or conducts its primary - business. - -## 15. Applicable Law - -Without prejudice to specific agreement between parties, - -- this Licence shall be governed by the law of the European Union Member State - where the Licensor has his seat, resides or has his registered office, - -- this licence shall be governed by Belgian law if the Licensor has no seat, - residence or registered office inside a European Union Member State. - -## Appendix - -‘Compatible Licences’ according to Article 5 EUPL are: - -- GNU General Public License (GPL) v. 2, v. 3 -- GNU Affero General Public License (AGPL) v. 3 -- Open Software License (OSL) v. 2.1, v. 3.0 -- Eclipse Public License (EPL) v. 1.0 -- CeCILL v. 2.0, v. 2.1 -- Mozilla Public Licence (MPL) v. 2 -- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 -- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for - works other than software -- European Union Public Licence (EUPL) v. 1.1, v. 1.2 -- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong - Reciprocity (LiLiQ-R+). - -The European Commission may update this Appendix to later versions of the above -licences without producing a new version of the EUPL, as long as they provide -the rights granted in Article 2 of this Licence and protect the covered Source -Code from exclusive appropriation. - -All other changes or additions to this Appendix require the production of a new -EUPL version. diff --git a/packages/strapi-plugin-old-slugs/README.md b/packages/strapi-plugin-old-slugs/README.md deleted file mode 100644 index b053fe1cd..000000000 --- a/packages/strapi-plugin-old-slugs/README.md +++ /dev/null @@ -1,159 +0,0 @@ -# Strapi Plugin: strapi-plugin-old-slugs - -**⚠️ This plugin is compatible with Strapi v4 only.** - -A Strapi plugin that keeps track of previous slugs when they change in the CMS. It stores them in a JSON field called `oldSlugs` within the content type. - -## ✨ Features - -- Automatically saves previous slugs when a slug field is updated. -- Helps maintain URL history for redirects or SEO purposes. -- Configurable to work with specific content types. - -## 🚀 Installation - -You can install the plugin using **yarn** or **npm**: - -```sh -# Using yarn -yarn add @frameless/strapi-plugin-old-slugs - -# Using npm -npm install @frameless/strapi-plugin-old-slugs - -``` - -## 🔧 Configuration - -1. **Add the `oldSlugs` Field** - - To store the previous slugs, you need to add a field of type **JSON** with the name **oldSlugs** in the content types where you want to track slug changes. - - **Option 1: Using Strapi Content-Type Builder** - You can add the oldSlugs field using the Strapi Content-Type Builder in the Strapi Admin panel: - - 1. Open your Strapi Dashboard. - - 2. Navigate to Content-Type Builder. - - 3. Select the content type you want to modify (e.g., Product). - - 4. Add a new field with the following settings: - - - Field Name: oldSlugs - - - Type: JSON - - 5. Save the changes and restart the server. - - For more details, refer to the [Strapi Content-Type Builder documentation](https://docs-v4.strapi.io/user-docs/content-type-builder/creating-new-content-type). - - **Option 2: Editing the Model File Manually** - If you prefer, you can manually modify the model file. - - **Path**: `src/api/product/content-types/product/schema.json` - - ```json - { - "kind": "collectionType", - "collectionName": "products", - "info": { - "singularName": "product", - "pluralName": "products", - "displayName": "Product" - }, - "options": { - "draftAndPublish": true - }, - "attributes": { - "title": { - "type": "string", - "required": true - }, - "slug": { - "type": "string", - "required": true, - "unique": true - }, - "oldSlugs": { - "type": "json", - "default": [] - } - } - } - ``` - -2. **Enable and Configure the Plugin** - - After installing the plugin, enable and configure it in your **Strapi dashboard**. - - 1. Navigate to the configuration file: - `/config/plugins.ts` (or `/config/plugins.js` if using JavaScript). - 2. Add the following configuration: - - ```ts - export default ({ env }) => ({ - "old-slugs": { - enabled: true, - config: { - contentTypes: [ - { - uid: "api::product.product", - }, - ], - }, - }, - }); - ``` - -## Configuration Options - -| Option | Type | Description | -| -------------- | ----- | ----------------------------------------------------------- | -| `contentTypes` | Array | List of content types where slug history should be tracked. | - -## 📌 Usage - -Once enabled, the plugin will automatically store previous slugs in the oldSlugs JSON field of the specified content types whenever the slug changes. - -Example of a product entry with old slugs: - -```json -{ - "id": 1, - "title": "New Product Name", - "slug": "new-product-name", - "oldSlugs": ["old-product-name", "very-old-product-name"] -} -``` - -## 🛠️ Build the Strapi Dashboard - -After configuring the plugin and updating the content type, you need to **rebuild the Strapi dashboard** for the changes to take effect. - -Run the following command: - -```shell -yarn build && yarn develop - -``` - -Or if you're using npm: - -```shell -npm run build && npm run develop -``` - -## 💡 Why Use This Plugin? - -- Ensures old slugs are not lost when URLs change. -- Useful for setting up redirects or tracking changes. -- Helps maintain SEO rankings by preserving URL history. - -## 🔥 Contributing - -Feel free to submit issues or pull requests to improve this plugin! - -## 📜 License - -This plugin is licensed under the EUPL License. diff --git a/packages/strapi-plugin-old-slugs/admin/src/components/Initializer/index.tsx b/packages/strapi-plugin-old-slugs/admin/src/components/Initializer/index.tsx deleted file mode 100644 index 0d00bce3c..000000000 --- a/packages/strapi-plugin-old-slugs/admin/src/components/Initializer/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/** - * - * Initializer - * - */ - -import { useEffect, useRef } from 'react'; -import { pluginId } from '../../pluginId'; - -type InitializerProps = { - setPlugin: (id: string) => void; -}; - -const Initializer = ({ setPlugin }: InitializerProps) => { - const ref = useRef(setPlugin); - - useEffect(() => { - ref.current(pluginId); - }, []); - - return null; -}; - -export default Initializer; diff --git a/packages/strapi-plugin-old-slugs/admin/src/components/PluginIcon/index.tsx b/packages/strapi-plugin-old-slugs/admin/src/components/PluginIcon/index.tsx deleted file mode 100644 index e2bb2d592..000000000 --- a/packages/strapi-plugin-old-slugs/admin/src/components/PluginIcon/index.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/** - * - * PluginIcon - * - */ - -import React from 'react'; -import { Puzzle } from '@strapi/icons'; - -const PluginIcon = () => ; - -export default PluginIcon; diff --git a/packages/strapi-plugin-old-slugs/admin/src/index.tsx b/packages/strapi-plugin-old-slugs/admin/src/index.tsx deleted file mode 100644 index 30e494825..000000000 --- a/packages/strapi-plugin-old-slugs/admin/src/index.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import Initializer from './components/Initializer'; -import PluginIcon from './components/PluginIcon'; -import { pluginId } from './pluginId'; -import pluginPkg from '../../package.json'; - -const name = pluginPkg.strapi.name; - -export default { - register(app: any) { - const plugin = { - id: pluginId, - initializer: Initializer, - isReady: false, - name, - }; - - app.registerPlugin(plugin); - }, - - bootstrap(app: any) {}, - - async registerTrads(app: { locales: string[] }) { - const { locales } = app; - - const importedTrads = await Promise.all( - (locales as any[]).map((locale) => { - return import(`./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/strapi-plugin-old-slugs/admin/src/pluginId.ts b/packages/strapi-plugin-old-slugs/admin/src/pluginId.ts deleted file mode 100644 index f3e6484e4..000000000 --- a/packages/strapi-plugin-old-slugs/admin/src/pluginId.ts +++ /dev/null @@ -1,3 +0,0 @@ -import pluginPkg from '../../package.json'; - -export const pluginId = pluginPkg.name.replace(/^@frameless\/(@[^-,.][\w,-]+\/|strapi-)plugin-/i, ''); diff --git a/packages/strapi-plugin-old-slugs/admin/src/translations/en.json b/packages/strapi-plugin-old-slugs/admin/src/translations/en.json deleted file mode 100644 index 0967ef424..000000000 --- a/packages/strapi-plugin-old-slugs/admin/src/translations/en.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/strapi-plugin-old-slugs/admin/src/translations/fr.json b/packages/strapi-plugin-old-slugs/admin/src/translations/fr.json deleted file mode 100644 index 0967ef424..000000000 --- a/packages/strapi-plugin-old-slugs/admin/src/translations/fr.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/strapi-plugin-old-slugs/admin/src/utils/getPluginService.ts b/packages/strapi-plugin-old-slugs/admin/src/utils/getPluginService.ts deleted file mode 100644 index a415180bc..000000000 --- a/packages/strapi-plugin-old-slugs/admin/src/utils/getPluginService.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable no-undef */ -import { pluginId } from '../pluginId'; -interface GetPluginServiceProps { - name: string; - plugin: string; -} - -export const getPluginService = ({ name, plugin = pluginId }: GetPluginServiceProps) => - strapi.plugin(plugin).service(name); diff --git a/packages/strapi-plugin-old-slugs/admin/src/utils/getTrad.ts b/packages/strapi-plugin-old-slugs/admin/src/utils/getTrad.ts deleted file mode 100644 index 4667e9e6c..000000000 --- a/packages/strapi-plugin-old-slugs/admin/src/utils/getTrad.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { pluginId } from '../pluginId'; - -const getTrad = (id: string) => `${pluginId}.${id}`; - -export default getTrad; diff --git a/packages/strapi-plugin-old-slugs/custom.d.ts b/packages/strapi-plugin-old-slugs/custom.d.ts deleted file mode 100644 index 321f3c0d1..000000000 --- a/packages/strapi-plugin-old-slugs/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; diff --git a/packages/strapi-plugin-old-slugs/jest.config.ts b/packages/strapi-plugin-old-slugs/jest.config.ts deleted file mode 100644 index 7a4c54c31..000000000 --- a/packages/strapi-plugin-old-slugs/jest.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Config } from 'jest'; - -const config: Config = { - preset: 'ts-jest', - // to obtain access to the matchers. - moduleFileExtensions: ['ts', 'js', 'json', 'node'], - testEnvironment: 'node', - modulePaths: [''], - testPathIgnorePatterns: ['/node_modules/', '.tmp', '.cache'], - transform: { - '^.+\\.(ts|tsx)$': [ - 'ts-jest', - { - tsconfig: 'tsconfig.test.json', - }, - ], - }, -}; - -export default config; diff --git a/packages/strapi-plugin-old-slugs/package.json b/packages/strapi-plugin-old-slugs/package.json deleted file mode 100644 index 0e6886fdc..000000000 --- a/packages/strapi-plugin-old-slugs/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@frameless/strapi-plugin-old-slugs", - "version": "1.0.0", - "description": "This is a customField to store old slugs for content types", - "keywords": [ - "strapi", - "plugin", - "customField", - "old-slugs" - ], - "strapi": { - "name": "old-slugs", - "description": "This is a customField to store old slugs for content types", - "kind": "plugin" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-old-slugs" - }, - "dependencies": { - "@strapi/design-system": "1.19.0", - "@strapi/helper-plugin": "4.25.11", - "@strapi/icons": "1.19.0" - }, - "devDependencies": { - "@strapi/typescript-utils": "4.25.11", - "@types/jest": "29.5.12", - "@types/react": "18.3.12", - "@types/react-dom": "18.3.1", - "@types/react-router-dom": "5.3.3", - "jest": "29.7.0", - "react": "18.3.1", - "react-dom": "18.3.1", - "react-router-dom": "5.3.4", - "rimraf": "6.0.1", - "ts-jest": "29.2.5", - "ts-node": "10.9.2", - "typescript": "5.0.4" - }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0", - "react-router-dom": "^5.2.0" - }, - "author": { - "name": "@frameless" - }, - "engines": { - "node": "20.x.x" - }, - "scripts": { - "watch": "tsc -p tsconfig.server.json -w", - "build": "tsc -p tsconfig.server.json", - "clean": "rimraf dist", - "prebuild": "yarn clean", - "test": "jest --coverage", - "test:watch": "jest --watch" - }, - "license": "EUPL-1.2" -} diff --git a/packages/strapi-plugin-old-slugs/server/bootstrap.test.ts b/packages/strapi-plugin-old-slugs/server/bootstrap.test.ts deleted file mode 100644 index 5a8af5107..000000000 --- a/packages/strapi-plugin-old-slugs/server/bootstrap.test.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import plugin from './bootstrap'; // Import your plugin file - -const mockStrapi: any = { - db: { - lifecycles: { - subscribe: jest.fn(), - }, - query: jest.fn(), - }, - config: { - get: jest.fn(), - }, -}; - -describe('strapi-plugin-old-slugs', () => { - beforeEach(() => { - jest.clearAllMocks(); - }); - afterEach(() => { - jest.clearAllMocks(); - }); - - it('should return early if strapi.db is not defined', async () => { - const invalidStrapi = { ...mockStrapi, db: undefined }; - await plugin({ strapi: invalidStrapi as Strapi }); - expect(mockStrapi.db?.lifecycles.subscribe).not.toHaveBeenCalled(); - }); - - it('should subscribe to lifecycles if strapi.db is defined', async () => { - await plugin({ strapi: mockStrapi as Strapi }); - expect(mockStrapi.db?.lifecycles.subscribe).toHaveBeenCalled(); - }); - it('should subscribe to lifecycles only once', async () => { - await plugin({ strapi: mockStrapi as Strapi }); - expect(mockStrapi.db?.lifecycles.subscribe).toHaveBeenCalledTimes(1); - }); - describe('Lifecycle event handling', () => { - let lifecycleCallback: Function; - - beforeEach(async () => { - await plugin({ strapi: mockStrapi as Strapi }); - lifecycleCallback = (mockStrapi.db?.lifecycles.subscribe as jest.Mock).mock.calls[0][0]; - }); - - it('should return early if event model UID is not in config', async () => { - mockStrapi.config.get.mockReturnValue({ contentTypes: [{ uid: 'test.model' }] }); - const event = { model: { uid: 'not.in.config' }, action: 'beforeUpdate' }; - await lifecycleCallback(event); - expect(mockStrapi.db?.query).not.toHaveBeenCalled(); - }); - it('should return early if event action is not "beforeUpdate"', async () => { - mockStrapi.config.get.mockReturnValue({ contentTypes: [{ uid: 'test.model' }] }); - const event = { model: { uid: 'test.model' }, action: 'beforeCreate' }; - await lifecycleCallback(event); - expect(mockStrapi.db?.query).not.toHaveBeenCalled(); - }); - it('should query the database only for "beforeUpdate" events', async () => { - mockStrapi.config.get.mockReturnValue({ contentTypes: [{ uid: 'test.model' }] }); - const event = { - model: { uid: 'test.model' }, - action: 'beforeUpdate', - params: { data: {} } as any, - }; - (mockStrapi.db?.query as jest.Mock).mockReturnValue({ - findOne: jest.fn().mockResolvedValue({}), - }); - await lifecycleCallback(event); - expect(mockStrapi.db?.query).toHaveBeenCalled(); - }); - it('should query the database only for provided uid through config', async () => { - mockStrapi.config.get.mockReturnValue({ contentTypes: [{ uid: 'test.model' }] }); - const event = { model: { uid: 'test.model' }, action: 'beforeUpdate', params: { data: {} } as any }; - (mockStrapi.db?.query as jest.Mock).mockReturnValue({ - findOne: jest.fn().mockResolvedValue({}), - }); - await lifecycleCallback(event); - expect(mockStrapi.db?.query).toHaveBeenCalledWith('test.model'); - }); - it('should update oldSlugs when slug changes', async () => { - mockStrapi.config.get.mockReturnValue({ contentTypes: [{ uid: 'test.model' }] }); - const event = { - model: { uid: 'test.model' }, - action: 'beforeUpdate', - params: { data: { uuid: '123', slug: 'new-slug' } } as any, - }; - const existingEntry = { uuid: '123', slug: 'old-slug', oldSlugs: [] }; - (mockStrapi.db?.query as jest.Mock).mockReturnValue({ - findOne: jest.fn().mockResolvedValue(existingEntry), - }); - - await lifecycleCallback(event); - - expect(event.params.data.oldSlugs).toEqual(['old-slug']); - }); - - it('should not duplicate oldSlugs', async () => { - mockStrapi.config.get.mockReturnValue({ contentTypes: [{ uid: 'test.model' }] }); - const event = { - model: { uid: 'test.model' }, - action: 'beforeUpdate', - params: { data: { uuid: '123', slug: 'same-slug' } as any }, - }; - const existingEntry = { uuid: '123', slug: 'same-slug', oldSlugs: ['old-slug'] }; - (mockStrapi.db?.query as jest.Mock).mockReturnValue({ - findOne: jest.fn().mockResolvedValue(existingEntry), - }); - const product = await mockStrapi.db?.query('test.model').findOne({ where: { uuid: '123' } }); - await lifecycleCallback(event); - expect(product?.oldSlugs).toEqual(['old-slug']); - expect(event.params.data.oldSlugs).toBeUndefined(); - }); - }); -}); diff --git a/packages/strapi-plugin-old-slugs/server/bootstrap.ts b/packages/strapi-plugin-old-slugs/server/bootstrap.ts deleted file mode 100644 index 18dcdd4e6..000000000 --- a/packages/strapi-plugin-old-slugs/server/bootstrap.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { Strapi } from '@strapi/strapi'; -export type ContentTypes = { - uid: string; -}; -export interface Config { - contentTypes?: ContentTypes[]; -} - -export default async ({ strapi }: { strapi: Strapi }) => { - if (!strapi?.db) { - return; - } - strapi.db.lifecycles.subscribe(async (event) => { - if (!strapi?.db) return; - const config = strapi.config.get('plugin.old-slugs', []) as Config; - const isProvidedUID = config?.contentTypes?.some((ct) => ct?.uid === event.model.uid); - - if (!isProvidedUID) return; - - if (event.action === 'beforeUpdate' && isProvidedUID) { - const existingEntry = await strapi.db - .query(event.model.uid) - .findOne({ where: { uuid: event.params.data?.uuid } }); - - if (existingEntry && existingEntry.slug !== event.params.data.slug) { - const previousSlugs: any = existingEntry.oldSlugs || []; - // prevent duplication - if (!previousSlugs.includes(existingEntry.slug)) { - previousSlugs.push(existingEntry.slug); - event.params.data.oldSlugs = previousSlugs; - } - } - } - }); -}; diff --git a/packages/strapi-plugin-old-slugs/server/config/index.ts b/packages/strapi-plugin-old-slugs/server/config/index.ts deleted file mode 100644 index d51850754..000000000 --- a/packages/strapi-plugin-old-slugs/server/config/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default { - default: {}, - validator() {}, -}; diff --git a/packages/strapi-plugin-old-slugs/server/index.ts b/packages/strapi-plugin-old-slugs/server/index.ts deleted file mode 100644 index ac324b230..000000000 --- a/packages/strapi-plugin-old-slugs/server/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import bootstrap from './bootstrap'; -import config from './config'; -export default { - bootstrap, - config, -}; diff --git a/packages/strapi-plugin-old-slugs/strapi-admin.js b/packages/strapi-plugin-old-slugs/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/strapi-plugin-old-slugs/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/strapi-plugin-old-slugs/strapi-server.js b/packages/strapi-plugin-old-slugs/strapi-server.js deleted file mode 100644 index bf5595886..000000000 --- a/packages/strapi-plugin-old-slugs/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./dist/server'); diff --git a/packages/strapi-plugin-old-slugs/tsconfig.json b/packages/strapi-plugin-old-slugs/tsconfig.json deleted file mode 100644 index ea4dce498..000000000 --- a/packages/strapi-plugin-old-slugs/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/admin", - - "compilerOptions": { - "target": "ESNext", - "strict": true - }, - "include": ["admin", "custom.d.ts"], - "exclude": ["node_modules/", "dist/", "server/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-old-slugs/tsconfig.server.json b/packages/strapi-plugin-old-slugs/tsconfig.server.json deleted file mode 100644 index 2192ce7da..000000000 --- a/packages/strapi-plugin-old-slugs/tsconfig.server.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/server", - "compilerOptions": { - "outDir": "dist", - "rootDir": "." - }, - "include": ["server", "server/**/*.json"], - "exclude": ["node_modules/", "dist/", "admin/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-old-slugs/tsconfig.test.json b/packages/strapi-plugin-old-slugs/tsconfig.test.json deleted file mode 100644 index bdf798274..000000000 --- a/packages/strapi-plugin-old-slugs/tsconfig.test.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2016", - "module": "ES6", - "moduleResolution": "node", - "esModuleInterop": true, - "skipLibCheck": true, - "strict": true, - "types": ["jest"] - }, - "include": ["**/*.test.ts", "./jest.config.ts", "./tests"] -} diff --git a/packages/strapi-plugin-open-forms-embed/CHANGELOG.md b/packages/strapi-plugin-open-forms-embed/CHANGELOG.md deleted file mode 100644 index 974125874..000000000 --- a/packages/strapi-plugin-open-forms-embed/CHANGELOG.md +++ /dev/null @@ -1,39 +0,0 @@ -# @frameless/strapi-plugin-open-forms-embed [1.2.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-open-forms-embed@1.1.0...@frameless/strapi-plugin-open-forms-embed@1.2.0) (2024-06-03) - -## 0.0.0 - -### Patch Changes - -- 82fa577: Als je in Strapi een link maakt naar een formulier, dan hoef je niet meer zo lang te wachten tot de lijst met alle formulieren is geladen. - -### Features - -- use new open forms public api ([b8dcf4c](https://github.com/frameless/strapi/commit/b8dcf4c559b276a39ee3698c4899e0e510b580b8)) - -# @frameless/strapi-plugin-open-forms-embed [1.1.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-open-forms-embed@1.0.2...@frameless/strapi-plugin-open-forms-embed@1.1.0) (2024-03-28) - -### Bug Fixes - -- **plugin-open-forms-embed:** use correct syntax to ComboBox ([adaf0eb](https://github.com/frameless/strapi/commit/adaf0eb2eeddfd6e03747c78c3f2ed09e19978fb)) - -### Features - -- **plugin-open-forms-embed:** enable field with settings guidance ([71365a1](https://github.com/frameless/strapi/commit/71365a183b6c4cdcb38834b706673a49345797f3)) - -## @frameless/strapi-plugin-open-forms-embed [1.0.2](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-open-forms-embed@1.0.1...@frameless/strapi-plugin-open-forms-embed@1.0.2) (2024-03-12) - -### Bug Fixes - -- **plugin-open-forms-embed:** fix the infinity loop request issue ([5f69961](https://github.com/frameless/strapi/commit/5f69961217e499d5e6bfdc725f03965b195478fb)) - -## @frameless/strapi-plugin-open-forms-embed [1.0.1](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-open-forms-embed@1.0.0...@frameless/strapi-plugin-open-forms-embed@1.0.1) (2024-02-29) - -### Bug Fixes - -- **strapi-plugin-open-forms-embed:** fix cannot read api_url ([1f8ca5f](https://github.com/frameless/strapi/commit/1f8ca5f0011b09956e47ed29b5834ea793002f4a)) - -# @frameless/strapi-plugin-open-forms-embed 1.0.0 (2024-02-22) - -### Features - -- **open-forms-embed:** create strapi open-forms-embed field ([1941b14](https://github.com/frameless/strapi/commit/1941b140703d7585008d7705346a9c47769c2ae0)) diff --git a/packages/strapi-plugin-open-forms-embed/README.md b/packages/strapi-plugin-open-forms-embed/README.md deleted file mode 100644 index bab064dda..000000000 --- a/packages/strapi-plugin-open-forms-embed/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Strapi Plugin: strapi-plugin-open-forms-embed - -This custom field serves as a dropdown representation of available OpenForms within the Strapi dashboard. It retrieves the `name` and `uuid` through a fetch function that calls the OpenForms API. - -## Installation - -```shell - -yarn install @frameless/strapi-plugin-open-forms-embed - -``` - -## Usage - -Navigate to the Strapi dashboard's `config/plugins.ts`. - -```ts -export default ({ env }) => ({ - "open-forms-embed": { - enabled: true, - config: { - api_url: env("OPEN_FORMS_API_URL"), - token: env("OPEN_FORMS_API_TOKEN"), - }, - }, -}); -``` - -**Build the dashboard**: - -```shell -yarn build - -``` diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/components/ComboboxIcon/index.tsx b/packages/strapi-plugin-open-forms-embed/admin/src/components/ComboboxIcon/index.tsx deleted file mode 100644 index 3f9dfb055..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/components/ComboboxIcon/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { Flex } from '@strapi/design-system/Flex'; -import { Icon } from '@strapi/design-system/Icon'; -import User from '@strapi/icons/User'; -import React from 'react'; -import styled from 'styled-components'; - -const IconBox = styled(Flex)` - background-color: #f0f0ff; /* primary100 */ - border: 1px solid #d9d8ff; /* primary200 */ - - svg > path { - fill: #4945ff; /* primary600 */ - } -`; - -function ComboboxIcon() { - return ( - - - - ); -} - -export default ComboboxIcon; diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/components/CustomCombobox/index.tsx b/packages/strapi-plugin-open-forms-embed/admin/src/components/CustomCombobox/index.tsx deleted file mode 100644 index d88c23684..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/components/CustomCombobox/index.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import { Combobox, ComboboxOption, TextInput } from '@strapi/design-system'; -import { Stack } from '@strapi/design-system/Stack'; -import React, { useEffect, useState } from 'react'; -import { useIntl } from 'react-intl'; -import usePluginConfig from '../../hooks/use-plugin-config'; -import getTrad from '../../utils/getTrad'; - -interface CustomComboboxProps { - intlLabel: any; - // eslint-disable-next-line no-unused-vars - onChange: (param: any) => {}; - attribute: any; - name: string; - description: any; - disabled: boolean; - error: string; - labelAction: any; - required: boolean; - value: string; - placeholder: any; -} - -type OpenFormsDataParams = { - uuid: string; - slug: string; - label?: string; - embed_url: string; - name?: string; -}; - -function CustomCombobox({ - value, - onChange, - name, - intlLabel, - labelAction, - required, - attribute, - description, - placeholder, - disabled, - error, -}: CustomComboboxProps) { - const { formatMessage } = useIntl(); - const [openForms, setOpenForms] = useState([]); - const [isLoading, setIsLoading] = useState(false); - - const { config } = usePluginConfig(); - const apiUrl = config?.api_url?.endsWith('/') ? `${config?.api_url}public/forms` : `${config?.api_url}/public/forms`; - const fetchAllOpenForms = async () => { - setIsLoading(true); - try { - const response = await fetch(apiUrl, { - mode: 'cors', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - Authorization: `Token ${config.token}`, - }, - }); - const { results } = await response.json(); - setOpenForms(results); - setIsLoading(false); - } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - setIsLoading(false); - } - }; - - useEffect(() => { - if (config?.api_url && config?.token && apiUrl) { - fetchAllOpenForms(); - } - }, [config]); - - const generateOpenFormsData = (params: OpenFormsDataParams) => new URLSearchParams({ ...params }).toString(); - const parseFormValue = (query: string): Record => Object.fromEntries(new URLSearchParams(query)); - const selectedForm = parseFormValue(value); - const isValueInOptions = openForms - .map((form: OpenFormsDataParams) => - generateOpenFormsData({ - uuid: form.uuid, - slug: form.slug, - label: form?.label || form?.name, - embed_url: config.embed_url, - }), - ) - .some((optionValue: string) => optionValue === value); - - if (!config?.api_url || !config?.token) { - return ( - - ); - } - return ( - - onChange({ target: { name, value: url, type: attribute.type } })} - loading={isLoading} - > - {openForms?.length > 0 && - openForms?.map(({ uuid, name, slug }) => ( - - {name} - - ))} - {/* Render fallback option if current value isn't in loaded options yet */} - {!isValueInOptions && selectedForm?.label && ( - {selectedForm.label || selectedForm?.name} - )} - - - ); -} - -export default CustomCombobox; diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/constants.ts b/packages/strapi-plugin-open-forms-embed/admin/src/constants.ts deleted file mode 100644 index 3c8f11324..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -import pluginId from './pluginId'; - -export const RESOLVE_CONFIG = `${pluginId}/resolve-config`; diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/hooks/use-plugin-config.ts b/packages/strapi-plugin-open-forms-embed/admin/src/hooks/use-plugin-config.ts deleted file mode 100644 index daaae3f8d..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/hooks/use-plugin-config.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { useFetchClient, useNotification } from '@strapi/helper-plugin'; -import { useEffect } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import { RESOLVE_CONFIG } from '../constants'; -import pluginId from '../pluginId'; - -const usePluginConfig = () => { - const dispatch = useDispatch(); - const toggleNotification = useNotification(); - - const { isLoading, config } = useSelector((state: any) => state[`${pluginId}_config`]); - const client = useFetchClient(); - const abortController = new AbortController(); - - // eslint-disable-next-line consistent-return - const fetchData = async () => { - try { - const endpoint = `/${pluginId}/config`; - const { data } = await client.get(endpoint, { - signal: abortController.signal, - }); - dispatch({ type: RESOLVE_CONFIG, data: data ?? {} }); - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - - if (!abortController.signal.aborted) { - toggleNotification({ - type: 'warning', - message: { id: 'notification.error' }, - }); - - return err; - } - } - }; - - useEffect(() => { - // Do nothing if we have already loaded the config data. - if (!isLoading && !!config) { - return; - } - fetchData(); - // eslint-disable-next-line consistent-return - return () => { - if (!abortController.signal.aborted) { - abortController.abort(); - } - }; - }, [abortController]); - - return { config, isLoading }; -}; - -export default usePluginConfig; diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/index.ts b/packages/strapi-plugin-open-forms-embed/admin/src/index.ts deleted file mode 100644 index 10db590a9..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/index.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import ComboboxIcon from './components/ComboboxIcon'; -import pluginId from './pluginId'; -import reducers from './reducers'; -import getTrad from './utils/getTrad'; - -export default { - register(app: any) { - app.addReducers(reducers); - app.customFields.register({ - name: pluginId, - pluginId, - type: 'string', - icon: ComboboxIcon, - intlLabel: { - id: getTrad('open-forms-embed.label'), - defaultMessage: 'Choose an Embedded Open Form', - }, - intlDescription: { - id: getTrad('open-forms-embed.description'), - defaultMessage: - 'Upon selecting a form, its unique identifier (UUID) will be stored in the database for future reference.', - }, - components: { - Input: async () => import('./components/CustomCombobox'), - }, - options: { - advanced: [ - { - sectionTitle: { - id: 'global.settings', - defaultMessage: 'Settings', - }, - items: [ - { - name: 'required', - type: 'checkbox', - intlLabel: { - id: 'form.attribute.item.requiredField', - defaultMessage: 'Required field', - }, - description: { - id: 'form.attribute.item.requiredField.description', - defaultMessage: "You won't be able to create an entry if this field is empty", - }, - }, - ], - }, - ], - }, - }); - }, - async registerTrads({ locales }: { locales: string[] }) { - const importedTrads = await Promise.all( - locales.map((locale: any) => { - return import(`./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/pluginId.ts b/packages/strapi-plugin-open-forms-embed/admin/src/pluginId.ts deleted file mode 100644 index 9284b4fd9..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/pluginId.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginPkg from '../../package.json'; - -const pluginId = pluginPkg.name.replace(/^@frameless\/(@[^-,.][\w,-]+\/|strapi-)plugin-/i, ''); - -export default pluginId; diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/reducers/config.ts b/packages/strapi-plugin-open-forms-embed/admin/src/reducers/config.ts deleted file mode 100644 index 899ca54de..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/reducers/config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import produce from 'immer'; -import { RESOLVE_CONFIG } from '../constants'; - -const initialState = { - isLoading: true, - config: {}, -}; - -const configReducer = produce((state = initialState, action) => { - switch (action.type) { - case RESOLVE_CONFIG: { - state.isLoading = false; - state.config = action.data; - break; - } - - default: - return state; - } - - return state; -}); - -export default configReducer; diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/reducers/index.ts b/packages/strapi-plugin-open-forms-embed/admin/src/reducers/index.ts deleted file mode 100644 index 3531e99d7..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/reducers/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import config from './config'; -import pluginId from '../pluginId'; - -const reducers = { - [`${pluginId}_config`]: config, -}; - -export default reducers; diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/translations/en.json b/packages/strapi-plugin-open-forms-embed/admin/src/translations/en.json deleted file mode 100644 index 8ab839168..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/translations/en.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "open-forms-embed.label": "Choose an Embedded Open Form", - "open-forms-embed.description": "Upon selecting a form, its unique identifier (UUID) will be stored in the database for future reference.", - "open-forms-embed.disabled.placeholder": "This field is disabled until necessary settings are configured.", - "open-forms-embed.disabled.hint": "Please ensure the required settings (OPEN_FORMS_API_URL and OPEN_FORMS_API_TOKEN) are properly configured to enable this field." -} diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/translations/nl.json b/packages/strapi-plugin-open-forms-embed/admin/src/translations/nl.json deleted file mode 100644 index 6e1ec70cb..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/translations/nl.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "open-forms-embed.label": "Kies een ingebed open formulier", - "open-forms-embed.description": "Bij het selecteren van een formulier wordt de unieke identificatie (UUID) ervan opgeslagen in de database voor toekomstige referentie.", - "open-forms-embed.disabled.placeholder": "Dit veld is uitgeschakeld totdat de vereiste instellingen zijn geconfigureerd.", - "open-forms-embed.disabled.hint": "Zorg ervoor dat de vereiste instellingen (OPEN_FORMS_API_URL en OPEN_FORMS_API_TOKEN) correct zijn geconfigureerd om dit veld in te schakelen." -} diff --git a/packages/strapi-plugin-open-forms-embed/admin/src/utils/getTrad.ts b/packages/strapi-plugin-open-forms-embed/admin/src/utils/getTrad.ts deleted file mode 100644 index a539a5015..000000000 --- a/packages/strapi-plugin-open-forms-embed/admin/src/utils/getTrad.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginId from '../pluginId'; - -const getTrad = (id: string) => `${pluginId}.${id}`; - -export default getTrad; diff --git a/packages/strapi-plugin-open-forms-embed/custom.d.ts b/packages/strapi-plugin-open-forms-embed/custom.d.ts deleted file mode 100644 index 321f3c0d1..000000000 --- a/packages/strapi-plugin-open-forms-embed/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; diff --git a/packages/strapi-plugin-open-forms-embed/package.json b/packages/strapi-plugin-open-forms-embed/package.json deleted file mode 100644 index ea3dff430..000000000 --- a/packages/strapi-plugin-open-forms-embed/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@frameless/strapi-plugin-open-forms-embed", - "version": "0.0.0", - "description": "A strapi custom field for selecting uniform product name", - "keywords": [], - "private": false, - "strapi": { - "name": "open-forms-embed", - "description": "Select uniform product name custom field", - "kind": "plugin", - "displayName": "Select uniform product name" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-open-forms-embed" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "author": { - "name": "" - }, - "license": "EUPL-1.2", - "peerDependencies": { - "@strapi/strapi": ">=4.0.0" - }, - "engines": { - "node": "20.x.x" - }, - "dependencies": { - "@strapi/design-system": "1.12.2", - "@strapi/icons": "1.12.2" - }, - "scripts": { - "develop": "tsc -p tsconfig.server.json -w", - "build": "tsc -p tsconfig.server.json", - "lint-build": "tsc --noEmit --project tsconfig.json" - } -} diff --git a/packages/strapi-plugin-open-forms-embed/server/config/index.ts b/packages/strapi-plugin-open-forms-embed/server/config/index.ts deleted file mode 100644 index bb0a0d0ac..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/config/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -// import { errors } from '@strapi/utils'; - -// const { ValidationError } = errors; -export type Config = { - api_url: string; - token: string; -}; - -export default { - default: {}, - // TODO Activate this validation once Gemeente Utrecht is prepared to enable openForms in the production environment. - // validator: (config: Config) => { - // if (!config) { - // return; - // } - // if (!config?.api_url) { - // throw new ValidationError('Missing api_url prop.'); - // } - // if (!config?.token) { - // throw new ValidationError('Missing token prop.'); - // } - // }, -}; diff --git a/packages/strapi-plugin-open-forms-embed/server/controllers/index.ts b/packages/strapi-plugin-open-forms-embed/server/controllers/index.ts deleted file mode 100644 index c8e618381..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/controllers/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import previewButton from './open-forms-embed'; - -export default { - 'open-forms-embed': previewButton, -}; diff --git a/packages/strapi-plugin-open-forms-embed/server/controllers/open-forms-embed.ts b/packages/strapi-plugin-open-forms-embed/server/controllers/open-forms-embed.ts deleted file mode 100644 index c64756cc2..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/controllers/open-forms-embed.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { getService } from '../util'; - -export default { - async config(ctx) { - try { - const config = await getService('plugin').getConfig(); - ctx.body = config; - } catch (error) { - ctx.badRequest('Something went wrong with the open-forms-embed config'); - } - }, -}; diff --git a/packages/strapi-plugin-open-forms-embed/server/index.ts b/packages/strapi-plugin-open-forms-embed/server/index.ts deleted file mode 100644 index 1c8ac4dee..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import config from './config'; -import controllers from './controllers'; -import { register } from './register'; -import routes from './routes'; -import services from './services'; - -export default { - config, - controllers, - routes, - services, - register, -}; diff --git a/packages/strapi-plugin-open-forms-embed/server/register.ts b/packages/strapi-plugin-open-forms-embed/server/register.ts deleted file mode 100644 index 0c40e9c4a..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/register.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import plugin from '../admin/src/pluginId'; - -export const register = ({ strapi }: { strapi: Strapi }) => { - strapi.customFields.register({ - name: 'open-forms-embed', - plugin, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-open-forms-embed/server/register/index.ts b/packages/strapi-plugin-open-forms-embed/server/register/index.ts deleted file mode 100644 index 8312be973..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/register/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import { pluginId } from '../util/plugin-id'; - -export const register = ({ strapi }: { strapi: Strapi }) => { - strapi.customFields.register({ - name: pluginId, - plugin: pluginId, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-open-forms-embed/server/routes/admin-api.ts b/packages/strapi-plugin-open-forms-embed/server/routes/admin-api.ts deleted file mode 100644 index 9859cbba6..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/routes/admin-api.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default { - type: 'admin', - routes: [ - { - method: 'GET', - path: '/config', - handler: 'open-forms-embed.config', - config: { - policies: ['admin::isAuthenticatedAdmin'], - }, - }, - ], -}; diff --git a/packages/strapi-plugin-open-forms-embed/server/routes/index.ts b/packages/strapi-plugin-open-forms-embed/server/routes/index.ts deleted file mode 100644 index 6daa896e7..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/routes/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import admin from './admin-api'; - -export default { - 'admin-api': admin, -}; diff --git a/packages/strapi-plugin-open-forms-embed/server/services/index.ts b/packages/strapi-plugin-open-forms-embed/server/services/index.ts deleted file mode 100644 index 49e38f63c..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/services/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import plugin from './plugin'; - -export default { - plugin, -}; diff --git a/packages/strapi-plugin-open-forms-embed/server/services/plugin.ts b/packages/strapi-plugin-open-forms-embed/server/services/plugin.ts deleted file mode 100644 index fba53d35b..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/services/plugin.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import config from '../config'; -import { pluginId } from '../util'; - -export default ({ strapi }: { strapi: Strapi }) => ({ - getConfig() { - const data = strapi.config.get(`plugin.${pluginId}`, config.default); - return data; - }, -}); diff --git a/packages/strapi-plugin-open-forms-embed/server/util/get-service.ts b/packages/strapi-plugin-open-forms-embed/server/util/get-service.ts deleted file mode 100644 index 0726c40bc..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/util/get-service.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { pluginId } from './plugin-id'; - -// eslint-disable-next-line no-undef -export const getService = (name: string) => strapi.plugin(pluginId).service(name); diff --git a/packages/strapi-plugin-open-forms-embed/server/util/index.ts b/packages/strapi-plugin-open-forms-embed/server/util/index.ts deleted file mode 100644 index e2d031554..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/util/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { getService } from './get-service'; -export { pluginId } from './plugin-id'; diff --git a/packages/strapi-plugin-open-forms-embed/server/util/plugin-id.ts b/packages/strapi-plugin-open-forms-embed/server/util/plugin-id.ts deleted file mode 100644 index ade3cfcb2..000000000 --- a/packages/strapi-plugin-open-forms-embed/server/util/plugin-id.ts +++ /dev/null @@ -1,3 +0,0 @@ -import pluginPkg from '../../package.json'; - -export const pluginId = pluginPkg.strapi.name; diff --git a/packages/strapi-plugin-open-forms-embed/strapi-admin.js b/packages/strapi-plugin-open-forms-embed/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/strapi-plugin-open-forms-embed/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/strapi-plugin-open-forms-embed/strapi-server.js b/packages/strapi-plugin-open-forms-embed/strapi-server.js deleted file mode 100644 index bf5595886..000000000 --- a/packages/strapi-plugin-open-forms-embed/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./dist/server'); diff --git a/packages/strapi-plugin-open-forms-embed/tsconfig.json b/packages/strapi-plugin-open-forms-embed/tsconfig.json deleted file mode 100644 index 29ffbbb4e..000000000 --- a/packages/strapi-plugin-open-forms-embed/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/admin", - "compilerOptions": { - "target": "ESNext", - "strict": true, - "lib": ["dom", "dom.iterable", "esnext"] - }, - "include": ["admin", "custom.d.ts"], - "exclude": ["node_modules/", "dist/", "server/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-open-forms-embed/tsconfig.server.json b/packages/strapi-plugin-open-forms-embed/tsconfig.server.json deleted file mode 100644 index 6f8591ad2..000000000 --- a/packages/strapi-plugin-open-forms-embed/tsconfig.server.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/server", - - "compilerOptions": { - "outDir": "dist", - "rootDir": "." - }, - - "include": ["server", "server/**/*.json"], - "exclude": ["node_modules/", "dist/", "admin/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-scheme-select/CHANGELOG.md b/packages/strapi-plugin-scheme-select/CHANGELOG.md deleted file mode 100644 index 84112c198..000000000 --- a/packages/strapi-plugin-scheme-select/CHANGELOG.md +++ /dev/null @@ -1,20 +0,0 @@ -# @frameless/strapi-plugin-scheme-select [1.2.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-scheme-select@1.1.0...@frameless/strapi-plugin-scheme-select@1.2.0) (2024-02-02) - - -### Features - -* add Node.js 20 support ([7b5feb7](https://github.com/frameless/strapi/commit/7b5feb7f204e52566430e25ceb282a2a0d0fa86f)) - -# @frameless/strapi-plugin-scheme-select [1.1.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-scheme-select@1.0.0...@frameless/strapi-plugin-scheme-select@1.1.0) (2023-11-08) - - -### Features - -* **scheme-select-plugin:** add configurable defaults value option ([1c4dc67](https://github.com/frameless/strapi/commit/1c4dc6738d4568d8ac98bfa274dcb3c93d618cd8)) - -# @frameless/strapi-plugin-scheme-select 1.0.0 (2022-11-22) - - -### Features - -* create strapi-plugin-scheme-select ([cf3d953](https://github.com/frameless/strapi/commit/cf3d9537daf06046e6f47dec164ba20347860916)) diff --git a/packages/strapi-plugin-scheme-select/README.md b/packages/strapi-plugin-scheme-select/README.md deleted file mode 100644 index 53cdec32c..000000000 --- a/packages/strapi-plugin-scheme-select/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Strapi plugin scheme-select - -A strapi custom field for selecting a scheme diff --git a/packages/strapi-plugin-scheme-select/admin/src/components/ComboboxIcon/index.js b/packages/strapi-plugin-scheme-select/admin/src/components/ComboboxIcon/index.js deleted file mode 100644 index b95b17b10..000000000 --- a/packages/strapi-plugin-scheme-select/admin/src/components/ComboboxIcon/index.js +++ /dev/null @@ -1,24 +0,0 @@ -import { Flex } from '@strapi/design-system/Flex'; -import { Icon } from '@strapi/design-system/Icon'; -import ManyToMany from '@strapi/icons/ManyToMany'; -import React from 'react'; -import styled from 'styled-components'; - -const IconBox = styled(Flex)` - background-color: #f0f0ff; /* primary100 */ - border: 1px solid #d9d8ff; /* primary200 */ - - svg > path { - fill: #4945ff; /* primary600 */ - } -`; - -function ComboboxIcon() { - return ( - - - - ); -} - -export default ComboboxIcon; diff --git a/packages/strapi-plugin-scheme-select/admin/src/components/CustomCombobox/index.js b/packages/strapi-plugin-scheme-select/admin/src/components/CustomCombobox/index.js deleted file mode 100644 index 48ae7b436..000000000 --- a/packages/strapi-plugin-scheme-select/admin/src/components/CustomCombobox/index.js +++ /dev/null @@ -1,77 +0,0 @@ -import { Combobox, ComboboxOption } from '@strapi/design-system/Combobox'; -import { Field, FieldError, FieldHint, FieldLabel } from '@strapi/design-system/Field'; -import { Stack } from '@strapi/design-system/Stack'; -import PropTypes from 'prop-types'; -import React from 'react'; -import { useIntl } from 'react-intl'; - -export const schemeData = [ - { resourceIdentifier: '{http://standaarden.overheid.nl/owms/terms/}Gemeente', prefLabel: 'Gemeente' }, -]; -function CustomCombobox({ - value, - onChange, - name, - intlLabel, - labelAction, - required, - attribute, - description, - placeholder, - disabled, - error, -}) { - const { formatMessage } = useIntl(); - - return ( - - - - {formatMessage(intlLabel)} - - - onChange({ target: { name, value: resourceIdentifier, type: attribute.type } }) - } - > - {schemeData.map(({ prefLabel, resourceIdentifier }) => ( - - {prefLabel} - - ))} - - - - - - ); -} - -CustomCombobox.defaultProps = { - description: null, - disabled: false, - error: null, - labelAction: null, - required: false, - value: '', -}; - -CustomCombobox.propTypes = { - intlLabel: PropTypes.object.isRequired, - onChange: PropTypes.func.isRequired, - attribute: PropTypes.object.isRequired, - name: PropTypes.string.isRequired, - description: PropTypes.object, - disabled: PropTypes.bool, - error: PropTypes.string, - labelAction: PropTypes.object, - required: PropTypes.bool, - value: PropTypes.string, -}; - -export default CustomCombobox; diff --git a/packages/strapi-plugin-scheme-select/admin/src/index.js b/packages/strapi-plugin-scheme-select/admin/src/index.js deleted file mode 100644 index d3c717d18..000000000 --- a/packages/strapi-plugin-scheme-select/admin/src/index.js +++ /dev/null @@ -1,108 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import ComboboxIcon from './components/ComboboxIcon'; -import { schemeData } from './components/CustomCombobox'; -import pluginId from './pluginId'; -import getTrad from './utils/getTrad'; - -const options = schemeData?.map(({ prefLabel, resourceIdentifier }) => ({ - key: resourceIdentifier, - value: resourceIdentifier, - metadatas: { - intlLabel: { - id: `components.InputSelect.option.${resourceIdentifier}`, - defaultMessage: prefLabel, - }, - }, -})); - -export default { - register(app) { - app.customFields.register({ - name: 'scheme', - pluginId: 'scheme-select', - type: 'string', - icon: ComboboxIcon, - intlLabel: { - id: getTrad('scheme-select.label'), - defaultMessage: 'Scheme', - }, - intlDescription: { - id: getTrad('scheme-select.description'), - defaultMessage: 'Select any scheme', - }, - components: { - Input: async () => import('./components/CustomCombobox'), - }, - options: { - advanced: [ - { - sectionTitle: { - id: 'global.settings', - defaultMessage: 'Settings', - }, - items: [ - { - name: 'required', - type: 'checkbox', - intlLabel: { - id: 'form.attribute.item.requiredField', - defaultMessage: 'Required field', - }, - description: { - id: 'form.attribute.item.requiredField.description', - defaultMessage: "You won't be able to create an entry if this field is empty", - }, - }, - { - name: 'default', - type: 'select', - intlLabel: { - id: 'form.attribute.item.defaultField', - defaultMessage: 'Default Value', - }, - description: { - id: 'form.attribute.item.defaultField.description', - defaultMessage: 'A default value is a preset choice when no other is given', - }, - options: [ - { - key: '__null_reset_value__', - value: '', - metadatas: { - intlLabel: { - id: 'components.InputSelect.option.placeholder', - defaultMessage: 'Choose here', - }, - }, - }, - ...options, - ], - }, - ], - }, - ], - }, - }); - }, - async registerTrads({ locales }) { - const importedTrads = await Promise.all( - locales.map((locale) => { - return import(`./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/strapi-plugin-scheme-select/admin/src/pluginId.js b/packages/strapi-plugin-scheme-select/admin/src/pluginId.js deleted file mode 100644 index 15b29da95..000000000 --- a/packages/strapi-plugin-scheme-select/admin/src/pluginId.js +++ /dev/null @@ -1,5 +0,0 @@ -const pluginPkg = require('../../package.json'); - -const pluginId = pluginPkg.name.replace(/^@frameless\/(@[^-,.][\w,-]+\/|strapi-)plugin-/i, ''); - -module.exports = pluginId; diff --git a/packages/strapi-plugin-scheme-select/admin/src/translations/en.json b/packages/strapi-plugin-scheme-select/admin/src/translations/en.json deleted file mode 100644 index 2dc4351b3..000000000 --- a/packages/strapi-plugin-scheme-select/admin/src/translations/en.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "scheme-select.label": "Scheme", - "scheme-select.description": "Select a Scheme" -} diff --git a/packages/strapi-plugin-scheme-select/admin/src/translations/nl.json b/packages/strapi-plugin-scheme-select/admin/src/translations/nl.json deleted file mode 100644 index 73effb3e5..000000000 --- a/packages/strapi-plugin-scheme-select/admin/src/translations/nl.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "scheme-select.label": "Scheme", - "scheme-select.description": "Selecteer een scheme" -} diff --git a/packages/strapi-plugin-scheme-select/admin/src/utils/getTrad.js b/packages/strapi-plugin-scheme-select/admin/src/utils/getTrad.js deleted file mode 100644 index d0a071b26..000000000 --- a/packages/strapi-plugin-scheme-select/admin/src/utils/getTrad.js +++ /dev/null @@ -1,5 +0,0 @@ -import pluginId from '../pluginId'; - -const getTrad = (id) => `${pluginId}.${id}`; - -export default getTrad; diff --git a/packages/strapi-plugin-scheme-select/package.json b/packages/strapi-plugin-scheme-select/package.json deleted file mode 100644 index ca8d33b30..000000000 --- a/packages/strapi-plugin-scheme-select/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@frameless/strapi-plugin-scheme-select", - "version": "0.0.0", - "description": "A strapi custom field for selecting scheme", - "keywords": [], - "private": false, - "strapi": { - "name": "scheme-select", - "description": "Scheme Select custom field", - "kind": "plugin", - "displayName": "Scheme Select" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-scheme-select" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "author": { - "name": "" - }, - "license": "EUPL-1.2", - "peerDependencies": { - "@strapi/strapi": ">=4.0.0" - }, - "engines": { - "node": "20.x.x" - }, - "dependencies": { - "@strapi/design-system": "1.12.2", - "@strapi/icons": "1.12.2" - } -} diff --git a/packages/strapi-plugin-scheme-select/server/index.js b/packages/strapi-plugin-scheme-select/server/index.js deleted file mode 100644 index 419806335..000000000 --- a/packages/strapi-plugin-scheme-select/server/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const register = require('./register'); - -module.exports = { - register, -}; diff --git a/packages/strapi-plugin-scheme-select/server/register.js b/packages/strapi-plugin-scheme-select/server/register.js deleted file mode 100644 index e96815d8f..000000000 --- a/packages/strapi-plugin-scheme-select/server/register.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; -const plugin = require('../admin/src/pluginId'); - -module.exports = ({ strapi }) => { - strapi.customFields.register({ - name: 'scheme', - plugin, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-scheme-select/strapi-admin.js b/packages/strapi-plugin-scheme-select/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/strapi-plugin-scheme-select/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/strapi-plugin-scheme-select/strapi-server.js b/packages/strapi-plugin-scheme-select/strapi-server.js deleted file mode 100644 index 8a908be91..000000000 --- a/packages/strapi-plugin-scheme-select/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./server'); diff --git a/packages/strapi-plugin-uniform-product-name/CHANGELOG.md b/packages/strapi-plugin-uniform-product-name/CHANGELOG.md deleted file mode 100644 index 3f7d648a0..000000000 --- a/packages/strapi-plugin-uniform-product-name/CHANGELOG.md +++ /dev/null @@ -1,54 +0,0 @@ -# @frameless/strapi-plugin-uniform-product-name [1.3.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-uniform-product-name@1.2.0...@frameless/strapi-plugin-uniform-product-name@1.3.0) (2024-02-05) - - -### Features - -* add Node.js 20 support ([7b5feb7](https://github.com/frameless/strapi/commit/7b5feb7f204e52566430e25ceb282a2a0d0fa86f)) - -# @frameless/strapi-plugin-uniform-product-name [1.2.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-uniform-product-name@1.1.1...@frameless/strapi-plugin-uniform-product-name@1.2.0) (2023-10-04) - - -### Features - -* **vth:** add grid ([8a52585](https://github.com/frameless/strapi/commit/8a525854ae8292deb612bbf87df30420403c3616)) -* **vth:** render themas with card ([81252b2](https://github.com/frameless/strapi/commit/81252b22670389e186695ac5c20c66849c578212)) - - - - - -### Dependencies - -* **@frameless/upl:** upgraded to 1.2.0 - -## @frameless/strapi-plugin-uniform-product-name [1.1.1](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-uniform-product-name@1.1.0...@frameless/strapi-plugin-uniform-product-name@1.1.1) (2023-09-14) - - - - - -### Dependencies - -* **@frameless/upl:** upgraded to 1.1.1 - -# @frameless/strapi-plugin-uniform-product-name [1.1.0](https://github.com/frameless/strapi/compare/@frameless/strapi-plugin-uniform-product-name@1.0.0...@frameless/strapi-plugin-uniform-product-name@1.1.0) (2023-08-22) - - -### Features - -* **vth:** add vth-dashboard app ([#152](https://github.com/frameless/strapi/issues/152)) ([869e8bd](https://github.com/frameless/strapi/commit/869e8bdd0457a3d748254a27ac6c617d5d36ab6c)) - - - - - -### Dependencies - -* **@frameless/upl:** upgraded to 1.1.0 - -# @frameless/strapi-plugin-uniform-product-name 1.0.0 (2023-08-01) - - -### Features - -* create uniform-product-name package ([0dca5d9](https://github.com/frameless/strapi/commit/0dca5d9cb8e15573bd9f53cae145a94ca7200f88)) diff --git a/packages/strapi-plugin-uniform-product-name/README.md b/packages/strapi-plugin-uniform-product-name/README.md deleted file mode 100644 index c957d21dc..000000000 --- a/packages/strapi-plugin-uniform-product-name/README.md +++ /dev/null @@ -1 +0,0 @@ -# Strapi plugin uniform-product-name diff --git a/packages/strapi-plugin-uniform-product-name/admin/src/components/ComboboxIcon/index.tsx b/packages/strapi-plugin-uniform-product-name/admin/src/components/ComboboxIcon/index.tsx deleted file mode 100644 index 3f9dfb055..000000000 --- a/packages/strapi-plugin-uniform-product-name/admin/src/components/ComboboxIcon/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { Flex } from '@strapi/design-system/Flex'; -import { Icon } from '@strapi/design-system/Icon'; -import User from '@strapi/icons/User'; -import React from 'react'; -import styled from 'styled-components'; - -const IconBox = styled(Flex)` - background-color: #f0f0ff; /* primary100 */ - border: 1px solid #d9d8ff; /* primary200 */ - - svg > path { - fill: #4945ff; /* primary600 */ - } -`; - -function ComboboxIcon() { - return ( - - - - ); -} - -export default ComboboxIcon; diff --git a/packages/strapi-plugin-uniform-product-name/admin/src/components/CustomCombobox/index.tsx b/packages/strapi-plugin-uniform-product-name/admin/src/components/CustomCombobox/index.tsx deleted file mode 100644 index 9c5e52fe2..000000000 --- a/packages/strapi-plugin-uniform-product-name/admin/src/components/CustomCombobox/index.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { uplKeyValues } from '@frameless/upl'; -import { Combobox, ComboboxOption } from '@strapi/design-system/Combobox'; -import { Field, FieldError, FieldHint, FieldLabel } from '@strapi/design-system/Field'; -import { Stack } from '@strapi/design-system/Stack'; -import React from 'react'; -import { useIntl } from 'react-intl'; - -interface CustomComboboxProps { - intlLabel: any; - // eslint-disable-next-line no-unused-vars - onChange: (param: any) => {}; - attribute: any; - name: string; - description: any; - disabled: boolean; - error: string; - labelAction: any; - required: boolean; - value: string; - placeholder: any; -} - -function CustomCombobox({ - value, - onChange, - name, - intlLabel, - labelAction, - required, - attribute, - description, - placeholder, - disabled, - error, -}: CustomComboboxProps) { - const { formatMessage } = useIntl(); - - return ( - - - - {formatMessage(intlLabel)} - - onChange({ target: { name, value: url, type: attribute.type } })} - > - {uplKeyValues.map(({ uri, uuid, value }) => ( - - {value} - - ))} - - - - - - ); -} - -export default CustomCombobox; diff --git a/packages/strapi-plugin-uniform-product-name/admin/src/index.ts b/packages/strapi-plugin-uniform-product-name/admin/src/index.ts deleted file mode 100644 index 600fd4e23..000000000 --- a/packages/strapi-plugin-uniform-product-name/admin/src/index.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import ComboboxIcon from './components/ComboboxIcon'; -import pluginId from './pluginId'; -import getTrad from './utils/getTrad'; - -export default { - register(app: any) { - app.customFields.register({ - name: pluginId, - pluginId, - type: 'string', - icon: ComboboxIcon, - intlLabel: { - id: getTrad('uniform-product-name.label'), - defaultMessage: 'Select uniform product name', - }, - intlDescription: { - id: getTrad('uniform-product-name.description'), - defaultMessage: 'Select uniform product name', - }, - components: { - Input: async () => import('./components/CustomCombobox'), - }, - options: { - advanced: [ - { - sectionTitle: { - id: 'global.settings', - defaultMessage: 'Settings', - }, - items: [ - { - name: 'required', - type: 'checkbox', - intlLabel: { - id: 'form.attribute.item.requiredField', - defaultMessage: 'Required field', - }, - description: { - id: 'form.attribute.item.requiredField.description', - defaultMessage: "You won't be able to create an entry if this field is empty", - }, - }, - ], - }, - ], - }, - }); - }, - async registerTrads({ locales }: { locales: string[] }) { - const importedTrads = await Promise.all( - locales.map((locale: any) => { - return import(`./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/strapi-plugin-uniform-product-name/admin/src/pluginId.ts b/packages/strapi-plugin-uniform-product-name/admin/src/pluginId.ts deleted file mode 100644 index 9284b4fd9..000000000 --- a/packages/strapi-plugin-uniform-product-name/admin/src/pluginId.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginPkg from '../../package.json'; - -const pluginId = pluginPkg.name.replace(/^@frameless\/(@[^-,.][\w,-]+\/|strapi-)plugin-/i, ''); - -export default pluginId; diff --git a/packages/strapi-plugin-uniform-product-name/admin/src/translations/en.json b/packages/strapi-plugin-uniform-product-name/admin/src/translations/en.json deleted file mode 100644 index 774e0a9ad..000000000 --- a/packages/strapi-plugin-uniform-product-name/admin/src/translations/en.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "gemeente-select.label": "Uniform product name", - "gemeente-select.description": "Select a uniform product name" -} diff --git a/packages/strapi-plugin-uniform-product-name/admin/src/translations/nl.json b/packages/strapi-plugin-uniform-product-name/admin/src/translations/nl.json deleted file mode 100644 index f645baeb8..000000000 --- a/packages/strapi-plugin-uniform-product-name/admin/src/translations/nl.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "gemeente-select.label": "Uniforme Productnaam", - "gemeente-select.description": "Kies een uniforme productnaam" -} diff --git a/packages/strapi-plugin-uniform-product-name/admin/src/utils/getTrad.ts b/packages/strapi-plugin-uniform-product-name/admin/src/utils/getTrad.ts deleted file mode 100644 index a539a5015..000000000 --- a/packages/strapi-plugin-uniform-product-name/admin/src/utils/getTrad.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginId from '../pluginId'; - -const getTrad = (id: string) => `${pluginId}.${id}`; - -export default getTrad; diff --git a/packages/strapi-plugin-uniform-product-name/custom.d.ts b/packages/strapi-plugin-uniform-product-name/custom.d.ts deleted file mode 100644 index 321f3c0d1..000000000 --- a/packages/strapi-plugin-uniform-product-name/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; diff --git a/packages/strapi-plugin-uniform-product-name/package.json b/packages/strapi-plugin-uniform-product-name/package.json deleted file mode 100644 index 2e9651740..000000000 --- a/packages/strapi-plugin-uniform-product-name/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@frameless/strapi-plugin-uniform-product-name", - "version": "0.0.0", - "description": "A strapi custom field for selecting uniform product name", - "keywords": [], - "private": false, - "strapi": { - "name": "uniform-product-name", - "description": "Select uniform product name custom field", - "kind": "plugin", - "displayName": "Select uniform product name" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-uniform-product-name" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "author": { - "name": "" - }, - "license": "EUPL-1.2", - "peerDependencies": { - "@strapi/strapi": ">=4.0.0" - }, - "engines": { - "node": "20.x.x" - }, - "dependencies": { - "@strapi/design-system": "1.12.2", - "@strapi/icons": "1.12.2", - "@frameless/upl": "0.0.0" - }, - "scripts": { - "develop": "tsc -p tsconfig.server.json -w", - "build": "tsc -p tsconfig.server.json", - "lint-build": "tsc --noEmit --project tsconfig.json" - } -} diff --git a/packages/strapi-plugin-uniform-product-name/server/index.ts b/packages/strapi-plugin-uniform-product-name/server/index.ts deleted file mode 100644 index b7ffca92d..000000000 --- a/packages/strapi-plugin-uniform-product-name/server/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { register } from './register'; - -export default { - register, -}; diff --git a/packages/strapi-plugin-uniform-product-name/server/register.ts b/packages/strapi-plugin-uniform-product-name/server/register.ts deleted file mode 100644 index 8b8d503a5..000000000 --- a/packages/strapi-plugin-uniform-product-name/server/register.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import plugin from '../admin/src/pluginId'; - -export const register = ({ strapi }: { strapi: Strapi }) => { - strapi.customFields.register({ - name: 'uniform-product-name', - plugin, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-uniform-product-name/strapi-admin.js b/packages/strapi-plugin-uniform-product-name/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/strapi-plugin-uniform-product-name/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/strapi-plugin-uniform-product-name/strapi-server.js b/packages/strapi-plugin-uniform-product-name/strapi-server.js deleted file mode 100644 index bf5595886..000000000 --- a/packages/strapi-plugin-uniform-product-name/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./dist/server'); diff --git a/packages/strapi-plugin-uniform-product-name/tsconfig.json b/packages/strapi-plugin-uniform-product-name/tsconfig.json deleted file mode 100644 index 29ffbbb4e..000000000 --- a/packages/strapi-plugin-uniform-product-name/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/admin", - "compilerOptions": { - "target": "ESNext", - "strict": true, - "lib": ["dom", "dom.iterable", "esnext"] - }, - "include": ["admin", "custom.d.ts"], - "exclude": ["node_modules/", "dist/", "server/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-uniform-product-name/tsconfig.server.json b/packages/strapi-plugin-uniform-product-name/tsconfig.server.json deleted file mode 100644 index 6f8591ad2..000000000 --- a/packages/strapi-plugin-uniform-product-name/tsconfig.server.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/server", - - "compilerOptions": { - "outDir": "dist", - "rootDir": "." - }, - - "include": ["server", "server/**/*.json"], - "exclude": ["node_modules/", "dist/", "admin/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-uuid-field/CHANGELOG.md b/packages/strapi-plugin-uuid-field/CHANGELOG.md deleted file mode 100644 index eea82d861..000000000 --- a/packages/strapi-plugin-uuid-field/CHANGELOG.md +++ /dev/null @@ -1,6 +0,0 @@ -# @frameless/strapi-plugin-uuid-field 1.0.0 (2024-04-15) - - -### Features - -* **strapi-plugin-uuid-field:** create strapi uuid field ([81839a9](https://github.com/frameless/strapi/commit/81839a91a9585b467b178a820ae2f7e2036a126b)) diff --git a/packages/strapi-plugin-uuid-field/README.md b/packages/strapi-plugin-uuid-field/README.md deleted file mode 100644 index 358a94f3a..000000000 --- a/packages/strapi-plugin-uuid-field/README.md +++ /dev/null @@ -1 +0,0 @@ -# Strapi plugin uuid-field diff --git a/packages/strapi-plugin-uuid-field/admin/src/components/Input/index.tsx b/packages/strapi-plugin-uuid-field/admin/src/components/Input/index.tsx deleted file mode 100644 index 2da38c7db..000000000 --- a/packages/strapi-plugin-uuid-field/admin/src/components/Input/index.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import { TextInput } from '@strapi/design-system'; -import React, { forwardRef, useEffect } from 'react'; -import type { ForwardedRef, PropsWithChildren } from 'react'; -import { useIntl } from 'react-intl'; -import { v4 } from 'uuid'; - -type AttributesOptionTypes = { - id?: string; - defaultMessage?: string; -}; - -type Attributes = { - type: string; - customField: string; - pluginOptions: { - i18n: { localized: boolean }; - }; -}; - -type Target = { - name: string; - value: string; - type: string; -}; - -type OnChangeParamTypes = { - target: Target; -}; -interface UUIDInputProps { - intlLabel: AttributesOptionTypes; - // eslint-disable-next-line no-unused-vars - onChange: (param: OnChangeParamTypes) => {}; - attribute: Attributes; - name: string; - description: AttributesOptionTypes; - disabled: boolean; - error: string; - labelAction: string; - required: boolean; - value: string; - placeholder: AttributesOptionTypes; -} - -const UUIDInput = forwardRef( - ( - { - value: initialValue, - onChange, - name, - intlLabel, - required, - attribute, - description, - placeholder, - error, - }: PropsWithChildren, - ref: ForwardedRef, - ) => { - const { formatMessage } = useIntl(); - useEffect(() => { - if (!initialValue) { - onChange({ target: { name, value: v4(), type: attribute.type } }); - } - }, [initialValue]); - - return ( - - ); - }, -); -UUIDInput.displayName = 'UUIDInput'; -export default UUIDInput; diff --git a/packages/strapi-plugin-uuid-field/admin/src/index.ts b/packages/strapi-plugin-uuid-field/admin/src/index.ts deleted file mode 100644 index e286fa89d..000000000 --- a/packages/strapi-plugin-uuid-field/admin/src/index.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import { Uid } from '@strapi/icons'; -import pluginId from './pluginId'; -import getTrad from './utils/getTrad'; -export default { - register(app: any) { - app.customFields.register({ - name: pluginId, - pluginId, - type: 'string', - icon: Uid, - intlLabel: { - id: getTrad('uuid-field.label'), - defaultMessage: 'UUID', - }, - intlDescription: { - id: getTrad('uuid-field.description'), - defaultMessage: 'Generate UUID', - }, - components: { - Input: async () => import('./components/Input'), - }, - options: { - advanced: [ - { - sectionTitle: { - id: 'global.settings', - defaultMessage: 'Settings', - }, - items: [ - { - name: 'required', - type: 'checkbox', - intlLabel: { - id: 'form.attribute.item.requiredField', - defaultMessage: 'Required field', - }, - description: { - id: 'form.attribute.item.requiredField.description', - defaultMessage: "You won't be able to create an entry if this field is empty", - }, - }, - ], - }, - ], - }, - }); - }, - async registerTrads({ locales }: { locales: string[] }) { - const importedTrads = await Promise.all( - locales.map((locale: any) => { - return import(`./translations/${locale}.json`) - .then(({ default: data }) => { - return { - data: prefixPluginTranslations(data, pluginId), - locale, - }; - }) - .catch(() => { - return { - data: {}, - locale, - }; - }); - }), - ); - - return Promise.resolve(importedTrads); - }, -}; diff --git a/packages/strapi-plugin-uuid-field/admin/src/pluginId.ts b/packages/strapi-plugin-uuid-field/admin/src/pluginId.ts deleted file mode 100644 index 9284b4fd9..000000000 --- a/packages/strapi-plugin-uuid-field/admin/src/pluginId.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginPkg from '../../package.json'; - -const pluginId = pluginPkg.name.replace(/^@frameless\/(@[^-,.][\w,-]+\/|strapi-)plugin-/i, ''); - -export default pluginId; diff --git a/packages/strapi-plugin-uuid-field/admin/src/translations/en.json b/packages/strapi-plugin-uuid-field/admin/src/translations/en.json deleted file mode 100644 index bc59af015..000000000 --- a/packages/strapi-plugin-uuid-field/admin/src/translations/en.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "uuid-field.label": "UUID", - "uuid-field.description": "Generate a UUID" -} diff --git a/packages/strapi-plugin-uuid-field/admin/src/translations/nl.json b/packages/strapi-plugin-uuid-field/admin/src/translations/nl.json deleted file mode 100644 index 442a0f17c..000000000 --- a/packages/strapi-plugin-uuid-field/admin/src/translations/nl.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "uuid-field.label": "UUID", - "uuid-field.description": "Genereer UUID" -} diff --git a/packages/strapi-plugin-uuid-field/admin/src/utils/getTrad.ts b/packages/strapi-plugin-uuid-field/admin/src/utils/getTrad.ts deleted file mode 100644 index a539a5015..000000000 --- a/packages/strapi-plugin-uuid-field/admin/src/utils/getTrad.ts +++ /dev/null @@ -1,5 +0,0 @@ -import pluginId from '../pluginId'; - -const getTrad = (id: string) => `${pluginId}.${id}`; - -export default getTrad; diff --git a/packages/strapi-plugin-uuid-field/custom.d.ts b/packages/strapi-plugin-uuid-field/custom.d.ts deleted file mode 100644 index 321f3c0d1..000000000 --- a/packages/strapi-plugin-uuid-field/custom.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@strapi/design-system/*'; -declare module '@strapi/design-system'; -declare module '@strapi/icons'; -declare module '@strapi/icons/*'; -declare module '@strapi/helper-plugin'; diff --git a/packages/strapi-plugin-uuid-field/package.json b/packages/strapi-plugin-uuid-field/package.json deleted file mode 100644 index 05c661952..000000000 --- a/packages/strapi-plugin-uuid-field/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@frameless/strapi-plugin-uuid-field", - "version": "0.0.0", - "description": "A strapi custom field for generating an UUID for each document", - "keywords": [], - "private": false, - "strapi": { - "name": "uuid-field", - "description": "Generate UUID", - "kind": "plugin", - "displayName": "Generate UUID" - }, - "repository": { - "type": "git+ssh", - "url": "git@github.com:frameless/strapi.git", - "directory": "packages/strapi-plugin-uuid-field" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - }, - "author": { - "name": "" - }, - "license": "EUPL-1.2", - "peerDependencies": { - "@strapi/strapi": ">=4.0.0" - }, - "engines": { - "node": "20.x.x" - }, - "dependencies": { - "@strapi/design-system": "1.12.2", - "@strapi/icons": "1.12.2", - "uuid": "9.0.1" - }, - "devDependencies": { - "@types/uuid": "9.0.8", - "rimraf": "5.0.5" - }, - "scripts": { - "build": "tsc -p tsconfig.server.json", - "clean": "rimraf dist", - "prebuild": "yarn clean", - "watch": "tsc -p tsconfig.server.json -w", - "lint-build": "tsc --noEmit --project tsconfig.json" - } -} diff --git a/packages/strapi-plugin-uuid-field/server/index.ts b/packages/strapi-plugin-uuid-field/server/index.ts deleted file mode 100644 index b7ffca92d..000000000 --- a/packages/strapi-plugin-uuid-field/server/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { register } from './register'; - -export default { - register, -}; diff --git a/packages/strapi-plugin-uuid-field/server/register.ts b/packages/strapi-plugin-uuid-field/server/register.ts deleted file mode 100644 index 6c2149be5..000000000 --- a/packages/strapi-plugin-uuid-field/server/register.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Strapi } from '@strapi/strapi'; -import plugin from '../admin/src/pluginId'; - -export const register = ({ strapi }: { strapi: Strapi }) => { - strapi.customFields.register({ - name: plugin, - plugin, - type: 'string', - }); -}; diff --git a/packages/strapi-plugin-uuid-field/strapi-admin.js b/packages/strapi-plugin-uuid-field/strapi-admin.js deleted file mode 100644 index 2d1a3d93a..000000000 --- a/packages/strapi-plugin-uuid-field/strapi-admin.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./admin/src').default; diff --git a/packages/strapi-plugin-uuid-field/strapi-server.js b/packages/strapi-plugin-uuid-field/strapi-server.js deleted file mode 100644 index bf5595886..000000000 --- a/packages/strapi-plugin-uuid-field/strapi-server.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./dist/server'); diff --git a/packages/strapi-plugin-uuid-field/tsconfig.json b/packages/strapi-plugin-uuid-field/tsconfig.json deleted file mode 100644 index 29ffbbb4e..000000000 --- a/packages/strapi-plugin-uuid-field/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/admin", - "compilerOptions": { - "target": "ESNext", - "strict": true, - "lib": ["dom", "dom.iterable", "esnext"] - }, - "include": ["admin", "custom.d.ts"], - "exclude": ["node_modules/", "dist/", "server/", "**/*.test.ts"] -} diff --git a/packages/strapi-plugin-uuid-field/tsconfig.server.json b/packages/strapi-plugin-uuid-field/tsconfig.server.json deleted file mode 100644 index 6f8591ad2..000000000 --- a/packages/strapi-plugin-uuid-field/tsconfig.server.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@strapi/typescript-utils/tsconfigs/server", - - "compilerOptions": { - "outDir": "dist", - "rootDir": "." - }, - - "include": ["server", "server/**/*.json"], - "exclude": ["node_modules/", "dist/", "admin/", "**/*.test.ts"] -} diff --git a/packages/strapi-tiptap-editor/.npmignore b/packages/strapi-tiptap-editor/.npmignore deleted file mode 100644 index caf01ec97..000000000 --- a/packages/strapi-tiptap-editor/.npmignore +++ /dev/null @@ -1 +0,0 @@ -dev/ \ No newline at end of file diff --git a/packages/strapi-tiptap-editor/CHANGELOG.md b/packages/strapi-tiptap-editor/CHANGELOG.md deleted file mode 100644 index 69af010a8..000000000 --- a/packages/strapi-tiptap-editor/CHANGELOG.md +++ /dev/null @@ -1,290 +0,0 @@ -# @frameless/strapi-tiptap-editor [2.3.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@2.2.0...@frameless/strapi-tiptap-editor@2.3.0) (2024-06-12) - -## 0.3.2 - -### Patch Changes - -- 8b2df3c: Los het probleem op met de sticky positie van de werkbalk met inhoudsblokken ([GitHub Issue Frameless/strapi#1135](https://github.com/frameless/strapi/issues/1135)). -- Updated dependencies [f322de1] -- Updated dependencies [c79d241] -- Updated dependencies [111df39] - - @frameless/utils@0.1.0 - -## 0.3.1 - -### Patch Changes - -- Updated dependencies [d07b871] - - @frameless/utils@0.0.1 - -## 0.3.0 - -### Minor Changes - -- d96fe22: Voeg Rich Text Voorbeeldfunctionaliteit toe - - - Nieuwe functionaliteit toegevoegd voor rich text voorbeeld. - - Correcte behandeling van spaties en nieuwe regels. - - Label wordt dynamisch bijgewerkt bij wijziging van de inhoud. - -- 3b6b5b8: Integreer het kostenveld in de aanvullende informatiecollectie. - - Wanneer een kostenveld aan een product wordt gekoppeld, wordt de kostengegevens beschikbaar in het gekoppelde aanvullende-informatieveld. - -## 0.2.0 - -### Minor Changes - -- ed4d2a4: Kostenveld geïntegreerd in het interne veld - - Wanneer het kostenveld aan een product is gekoppeld, wordt deze waarde nu automatisch beschikbaar in het interne veld dat al aan het product is gekoppeld. - -## 0.1.1 - -### Patch Changes - -- f40ac6b: Los het probleem op waarbij de Strapi rich text editor niet goed zichtbaar is in dark mode. - -## 0.1.0 - -### Minor Changes - -- 06c52b9: Add Title to YouTube Video via Strapi Dashboard ([GitHub Issue frameless/strapi#859](https://github.com/frameless/strapi/issues/859)) - -## 0.0.0 - -### Minor Changes - -- 82fa577: Wanneer je een tabel maakt in Strapi, is het nu makkelijker om tekst voor of na de tabel toe te voegen. Klik op de knop boven de tabel om daar een lege regel toe te voegen, of klik op de knop onder de tabel om erna een lege regel te maken. -- 82fa577: Er zijn nu Nederlandse labels voor de toolbar buttons van de rich text editor in Strapi. - -### Features - -- improved Dutch labels of rich text editor ([7bd1d81](https://github.com/frameless/strapi/commit/7bd1d8128e157416ad3a2024b23da1420f35389c)) - -# @frameless/strapi-tiptap-editor [2.2.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@2.1.0...@frameless/strapi-tiptap-editor@2.2.0) (2024-06-04) - -### Features - -- **strapi-tiptap-editor:** add missing i18n labels to the Toolbar ([edff4f2](https://github.com/frameless/strapi/commit/edff4f280abcdbb0405b21b3b7236f4aa89fd6c1)) -- **strapi-tiptap-editor:** improve table cursor positioning ([ef602db](https://github.com/frameless/strapi/commit/ef602dbf72c39228546a5899e75e1b0f955fa0d9)) - -# @frameless/strapi-tiptap-editor [2.1.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@2.0.2...@frameless/strapi-tiptap-editor@2.1.0) (2024-05-02) - -### Features - -- **deps:** upgrade `@utrecht/` packages ([a835ad6](https://github.com/frameless/strapi/commit/a835ad66a0095e8d1d762677b380e89010225070)) - -## @frameless/strapi-tiptap-editor [2.0.2](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@2.0.1...@frameless/strapi-tiptap-editor@2.0.2) (2024-04-26) - -### Bug Fixes - -- **strapi-tiptap-editor:** use `onUpdate` instead of `useEffect` ([39f5102](https://github.com/frameless/strapi/commit/39f5102b4b42083929c0890ef702438faa98b5da)) -- **tiptap-strapi-editor:** disable the saveJson option from tiptap settings ([1ab0f8b](https://github.com/frameless/strapi/commit/1ab0f8b5e939cffc1b545e9f31a6076b4e34f125)) - -## @frameless/strapi-tiptap-editor [2.0.1](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@2.0.0...@frameless/strapi-tiptap-editor@2.0.1) (2024-04-25) - -### Bug Fixes - -- **strapi-tiptap-editor:** fix tiptap duplication content issue ([7309d46](https://github.com/frameless/strapi/commit/7309d468050882f073f88dd9dd70be5e7c3c51c0)) - -# @frameless/strapi-tiptap-editor [2.0.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.12.0...@frameless/strapi-tiptap-editor@2.0.0) (2024-04-16) - -### Bug Fixes - -- **strapi-tiptap-editor:** fix the price-widget issue ([8e5ef8a](https://github.com/frameless/strapi/commit/8e5ef8a0830235e1e6c0c7de4e190eda16338319)) - -### BREAKING CHANGES - -- **strapi-tiptap-editor:** use UUID instead of incremental ID - -# @frameless/strapi-tiptap-editor [1.12.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.11.0...@frameless/strapi-tiptap-editor@1.12.0) (2024-04-11) - -### Features - -- **strapi-tiptap-editor:** make the language extension configurable ([f28d13a](https://github.com/frameless/strapi/commit/f28d13a30f8efa4e0bcc7db8d61a2dbf1b53cf71)) - -# @frameless/strapi-tiptap-editor [1.11.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.10.5...@frameless/strapi-tiptap-editor@1.11.0) (2024-04-09) - -### Features - -- **strapi-tiptap-editor:** create anchor extension ([b056a27](https://github.com/frameless/strapi/commit/b056a2725a115c4b903c9795ac66488582f90003)) -- **strapi-tiptap-editor:** enable to use non-URLs ([9230298](https://github.com/frameless/strapi/commit/923029878a14e0ef54c9dd00f3356c68ac0db0d4)) - -## @frameless/strapi-tiptap-editor [1.10.5](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.10.4...@frameless/strapi-tiptap-editor@1.10.5) (2024-04-04) - -### Bug Fixes - -- **strapi-tiptap-editor:** increase the pice API limit ([3bf193a](https://github.com/frameless/strapi/commit/3bf193ad6860a1059c2e0c39699d984e94e07b30)) - -## @frameless/strapi-tiptap-editor [1.10.4](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.10.3...@frameless/strapi-tiptap-editor@1.10.4) (2024-04-03) - -### Bug Fixes - -- all paragraphs incorrectly default to lead ([309aa25](https://github.com/frameless/strapi/commit/309aa25a9afd39ee029e715594542de49781c0b6)) - -## @frameless/strapi-tiptap-editor [1.10.3](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.10.2...@frameless/strapi-tiptap-editor@1.10.3) (2024-04-03) - -### Bug Fixes - -- lead paragraph not rendering properly in tip-tap ([557669b](https://github.com/frameless/strapi/commit/557669b80208a68ebecbe868da0d23c54c50bc4c)) -- support changing back to paragraph from leadParagraph ([8c62cb9](https://github.com/frameless/strapi/commit/8c62cb97914ce3fc00b46169dba74a87bc67f97e)) - -## @frameless/strapi-tiptap-editor [1.10.2](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.10.1...@frameless/strapi-tiptap-editor@1.10.2) (2024-03-29) - -### Bug Fixes - -- **strapi-tiptap-editor:** fix the price widget issue ([8e58661](https://github.com/frameless/strapi/commit/8e5866174e22b3cb2987550f1c57830c732dd751)) - -## @frameless/strapi-tiptap-editor [1.10.1](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.10.0...@frameless/strapi-tiptap-editor@1.10.1) (2024-03-26) - -### Bug Fixes - -- **tiptap-editor:** improve the price tiptap extension ([511e46b](https://github.com/frameless/strapi/commit/511e46b1ad6d370fd48b580095a285a34d2f7767)) - -# @frameless/strapi-tiptap-editor [1.10.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.9.1...@frameless/strapi-tiptap-editor@1.10.0) (2024-02-08) - -### Features - -- add Node.js 20 support ([7b5feb7](https://github.com/frameless/strapi/commit/7b5feb7f204e52566430e25ceb282a2a0d0fa86f)) - -# @frameless/strapi-tiptap-editor 1.0.0 (2023-12-04) - -### Bug Fixes - -- build error for experimental feature ([6d53cc7](https://github.com/frameless/strapi/commit/6d53cc710398d64233b638bce91e165b217adcc5)) -- **strapi-tiptap-editor:** enable i18n settings ([c59c51a](https://github.com/frameless/strapi/commit/c59c51ad52b0c95e12e5e391911886115b2b2556)) -- **strapi-tiptap-editor:** fix the i18n issue ([a4f9d99](https://github.com/frameless/strapi/commit/a4f9d992d87c8ea88b1f0e32b2f987f025bdedb5)) -- **strapi-tiptap-editor:** fix the ordered-list style ([23c0f22](https://github.com/frameless/strapi/commit/23c0f2273eb8eae42425419c075c0eee4f945161)) -- **strapi-tiptap-editor:** fix types issue ([c388569](https://github.com/frameless/strapi/commit/c388569b9271ddab94def5ac9459c8b37f24e232)) -- **strapi-tiptap-editor:** remove color extension en adjust highlight ([877ab5a](https://github.com/frameless/strapi/commit/877ab5ac02745167b48dbf89fb0771535cd3f990)) -- **strapi-tiptap-editor:** resolve table Menubar option issue ([0f9633a](https://github.com/frameless/strapi/commit/0f9633a8b9453f9e5435f522f64b3fa97f33c2fc)) -- **strapi-tiptap-editor:** return image source only ([70d719f](https://github.com/frameless/strapi/commit/70d719fd64e9df4fe28a6dad4407b6cebc49faac)) -- **strapi-tiptap-editor:** use `classnames` ([968189c](https://github.com/frameless/strapi/commit/968189c08063207319fa71156e18906066a23116)) -- **tiptap:** display price list based on save instead of refresh ([ff4fa47](https://github.com/frameless/strapi/commit/ff4fa47c471a0ddfd7112fb4c8d893901a727551)) - -### Features - -- create tiptap language extension ([2076ad1](https://github.com/frameless/strapi/commit/2076ad133cc474bf4c435fd7f0a3f9c277adfb60)) -- **deps:** update @utrecht/\* packages ([768213e](https://github.com/frameless/strapi/commit/768213e60dbc9e4803fb2ff7ba3090fe24cd8ee7)) -- enable bubble-menu when double click on a link ([2271540](https://github.com/frameless/strapi/commit/22715407467a74278d769583265ebd9d3b5cf784)) -- replace ckeditor with tiptap editor ([8da48eb](https://github.com/frameless/strapi/commit/8da48ebfc3731481c63517e09076e899353a52d9)) -- **strapi-tiptap-editor:** enable `figcaption` as property ([4402c42](https://github.com/frameless/strapi/commit/4402c420d1b22597c62786becc7358d4e589b237)) -- **strapi-tiptap:** add validation to the lint ([c4c45d3](https://github.com/frameless/strapi/commit/c4c45d33389dfa4ba1aedb8b45497af8b726ea1c)) -- **tiptap-editor:** enable to display free | gratis when the price 0 ([6e46f8b](https://github.com/frameless/strapi/commit/6e46f8bd72377983f9a81ad94d1b02edf47ee90b)) -- **tiptap-editor:** improve the strapi-tiptap ([ecba121](https://github.com/frameless/strapi/commit/ecba1219122bc0790e69a7a6ccd3151c1f7d6c3e)) -- **vth:** add vth-dashboard app ([#152](https://github.com/frameless/strapi/issues/152)) ([869e8bd](https://github.com/frameless/strapi/commit/869e8bdd0457a3d748254a27ac6c617d5d36ab6c)) -- **vth:** render themas with card ([81252b2](https://github.com/frameless/strapi/commit/81252b22670389e186695ac5c20c66849c578212)) - -## @frameless/strapi-tiptap-editor [1.9.1](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.9.0...@frameless/strapi-tiptap-editor@1.9.1) (2023-11-15) - -### Bug Fixes - -- **tiptap:** display price list based on save instead of refresh ([ff4fa47](https://github.com/frameless/strapi/commit/ff4fa47c471a0ddfd7112fb4c8d893901a727551)) - -# @frameless/strapi-tiptap-editor [1.9.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.8.3...@frameless/strapi-tiptap-editor@1.9.0) (2023-11-09) - -### Features - -- **strapi-tiptap:** add validation to the lint ([c4c45d3](https://github.com/frameless/strapi/commit/c4c45d33389dfa4ba1aedb8b45497af8b726ea1c)) - -## @frameless/strapi-tiptap-editor [1.8.3](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.8.2...@frameless/strapi-tiptap-editor@1.8.3) (2023-11-02) - -### Bug Fixes - -- **strapi-tiptap-editor:** resolve table Menubar option issue ([0f9633a](https://github.com/frameless/strapi/commit/0f9633a8b9453f9e5435f522f64b3fa97f33c2fc)) - -## @frameless/strapi-tiptap-editor [1.8.2](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.8.1...@frameless/strapi-tiptap-editor@1.8.2) (2023-10-31) - -### Bug Fixes - -- **strapi-tiptap-editor:** return image source only ([70d719f](https://github.com/frameless/strapi/commit/70d719fd64e9df4fe28a6dad4407b6cebc49faac)) - -## @frameless/strapi-tiptap-editor [1.8.1](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.8.0...@frameless/strapi-tiptap-editor@1.8.1) (2023-10-26) - -### Bug Fixes - -- **strapi-tiptap-editor:** fix the ordered-list style ([23c0f22](https://github.com/frameless/strapi/commit/23c0f2273eb8eae42425419c075c0eee4f945161)) - -# @frameless/strapi-tiptap-editor [1.8.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.7.1...@frameless/strapi-tiptap-editor@1.8.0) (2023-10-26) - -### Features - -- **tiptap-editor:** improve the strapi-tiptap ([ecba121](https://github.com/frameless/strapi/commit/ecba1219122bc0790e69a7a6ccd3151c1f7d6c3e)) - -## @frameless/strapi-tiptap-editor [1.7.1](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.7.0...@frameless/strapi-tiptap-editor@1.7.1) (2023-10-17) - -### Bug Fixes - -- build error for experimental feature ([6d53cc7](https://github.com/frameless/strapi/commit/6d53cc710398d64233b638bce91e165b217adcc5)) - -# @frameless/strapi-tiptap-editor [1.7.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.6.0...@frameless/strapi-tiptap-editor@1.7.0) (2023-10-11) - -### Features - -- **deps:** update @utrecht/\* packages ([768213e](https://github.com/frameless/strapi/commit/768213e60dbc9e4803fb2ff7ba3090fe24cd8ee7)) - -# @frameless/strapi-tiptap-editor [1.6.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.5.0...@frameless/strapi-tiptap-editor@1.6.0) (2023-10-04) - -### Features - -- **vth:** render themas with card ([81252b2](https://github.com/frameless/strapi/commit/81252b22670389e186695ac5c20c66849c578212)) - -# @frameless/strapi-tiptap-editor [1.5.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.4.0...@frameless/strapi-tiptap-editor@1.5.0) (2023-09-27) - -### Features - -- **strapi-tiptap-editor:** enable `figcaption` as property ([4402c42](https://github.com/frameless/strapi/commit/4402c420d1b22597c62786becc7358d4e589b237)) - -# @frameless/strapi-tiptap-editor [1.4.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.3.1...@frameless/strapi-tiptap-editor@1.4.0) (2023-08-30) - -### Features - -- **tiptap-editor:** enable to display free | gratis when the price 0 ([6e46f8b](https://github.com/frameless/strapi/commit/6e46f8bd72377983f9a81ad94d1b02edf47ee90b)) - -## @frameless/strapi-tiptap-editor [1.3.1](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.3.0...@frameless/strapi-tiptap-editor@1.3.1) (2023-08-24) - -### Bug Fixes - -- **strapi-tiptap-editor:** fix types issue ([c388569](https://github.com/frameless/strapi/commit/c388569b9271ddab94def5ac9459c8b37f24e232)) - -# @frameless/strapi-tiptap-editor [1.3.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.2.2...@frameless/strapi-tiptap-editor@1.3.0) (2023-08-22) - -### Features - -- **vth:** add vth-dashboard app ([#152](https://github.com/frameless/strapi/issues/152)) ([869e8bd](https://github.com/frameless/strapi/commit/869e8bdd0457a3d748254a27ac6c617d5d36ab6c)) - -## @frameless/strapi-tiptap-editor [1.2.2](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.2.1...@frameless/strapi-tiptap-editor@1.2.2) (2023-08-11) - -### Bug Fixes - -- **strapi-tiptap-editor:** remove color extension en adjust highlight ([877ab5a](https://github.com/frameless/strapi/commit/877ab5ac02745167b48dbf89fb0771535cd3f990)) -- **strapi-tiptap-editor:** use `classnames` ([968189c](https://github.com/frameless/strapi/commit/968189c08063207319fa71156e18906066a23116)) - -## @frameless/strapi-tiptap-editor [1.2.1](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.2.0...@frameless/strapi-tiptap-editor@1.2.1) (2023-08-11) - -### Bug Fixes - -- **strapi-tiptap-editor:** fix the i18n issue ([a4f9d99](https://github.com/frameless/strapi/commit/a4f9d992d87c8ea88b1f0e32b2f987f025bdedb5)) - -# @frameless/strapi-tiptap-editor [1.2.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.1.0...@frameless/strapi-tiptap-editor@1.2.0) (2023-08-11) - -### Bug Fixes - -- **strapi-tiptap-editor:** enable i18n settings ([c59c51a](https://github.com/frameless/strapi/commit/c59c51ad52b0c95e12e5e391911886115b2b2556)) - -### Features - -- create tiptap language extension ([2076ad1](https://github.com/frameless/strapi/commit/2076ad133cc474bf4c435fd7f0a3f9c277adfb60)) - -# @frameless/strapi-tiptap-editor [1.1.0](https://github.com/frameless/strapi/compare/@frameless/strapi-tiptap-editor@1.0.0...@frameless/strapi-tiptap-editor@1.1.0) (2023-05-05) - -### Features - -- enable bubble-menu when double click on a link ([2271540](https://github.com/frameless/strapi/commit/22715407467a74278d769583265ebd9d3b5cf784)) - -# @frameless/strapi-tiptap-editor 1.0.0 (2023-04-28) - -### Features - -- replace ckeditor with tiptap editor ([8da48eb](https://github.com/frameless/strapi/commit/8da48ebfc3731481c63517e09076e899353a52d9)) diff --git a/packages/strapi-tiptap-editor/LICENSE.md b/packages/strapi-tiptap-editor/LICENSE.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/strapi-tiptap-editor/README.md b/packages/strapi-tiptap-editor/README.md deleted file mode 100644 index 272a943aa..000000000 --- a/packages/strapi-tiptap-editor/README.md +++ /dev/null @@ -1 +0,0 @@ -# Strapi TipTap Editor diff --git a/packages/strapi-tiptap-editor/admin/src/components/Editor/BubbleMenuComponent.tsx b/packages/strapi-tiptap-editor/admin/src/components/Editor/BubbleMenuComponent.tsx deleted file mode 100644 index 68d6277ee..000000000 --- a/packages/strapi-tiptap-editor/admin/src/components/Editor/BubbleMenuComponent.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Flex } from '@strapi/design-system/Flex'; -import { BubbleMenu } from '@tiptap/react'; -import type { Editor as EditorTypes } from '@tiptap/react'; -import React from 'react'; -import { TableMenuBar } from './TableMenuBar'; - -export interface BubbleMenuComponentProps { - editor: EditorTypes; -} -export const BubbleMenuComponent = ({ editor }: BubbleMenuComponentProps) => { - if (!editor) { - return null; - } - - const menuBars = editor.isActive('table') ? [] : []; - - return ( - - {menuBars.length > 0 && ( - - {/* Render menu bars */} - {menuBars} - - )} - - ); -}; diff --git a/packages/strapi-tiptap-editor/admin/src/components/Editor/LanguagesList.tsx b/packages/strapi-tiptap-editor/admin/src/components/Editor/LanguagesList.tsx deleted file mode 100644 index 2825f259a..000000000 --- a/packages/strapi-tiptap-editor/admin/src/components/Editor/LanguagesList.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { Option, Select } from '@strapi/design-system/Select'; -import type { Editor as EditorTypes } from '@tiptap/react'; -import React from 'react'; - -interface LanguagesListProps { - editor: EditorTypes; - languages: { name?: string; code?: string }[]; - selectField: { - placeholder?: string; - removeLanguageOption: string; - }; -} - -export const LanguagesList = ({ editor, languages, selectField }: LanguagesListProps) => ( - -); diff --git a/packages/strapi-tiptap-editor/admin/src/components/Editor/PriceList.tsx b/packages/strapi-tiptap-editor/admin/src/components/Editor/PriceList.tsx deleted file mode 100644 index 51d1f0063..000000000 --- a/packages/strapi-tiptap-editor/admin/src/components/Editor/PriceList.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { Option, Select } from '@strapi/design-system/Select'; -import React from 'react'; -import { useIntl } from 'react-intl'; -import { PriceListTypes, PriceTypes } from '../../types'; -import { formatCurrency, getTrad, isFreeProduct } from '../../utils'; -interface PriceListProps { - productPrice: PriceListTypes; - // eslint-disable-next-line no-unused-vars - onPriceChange: (selectedPrice: PriceTypes) => void; - value: string; -} - -export const PriceList = ({ productPrice, onPriceChange, value }: PriceListProps) => { - const { formatMessage } = useIntl(); - if (productPrice && productPrice.price && productPrice.price.length === 0) { - return null; - } - - const handlePriceChange = (id: string) => { - const selectedPrice = productPrice.price?.find((price) => price?.uuid === id); - if (selectedPrice) { - onPriceChange(selectedPrice); - } - }; - const isPriceHasUUID = productPrice?.price?.every((price) => price?.uuid); - - return ( - - ); -}; diff --git a/packages/strapi-tiptap-editor/admin/src/components/Editor/TableMenuBar.tsx b/packages/strapi-tiptap-editor/admin/src/components/Editor/TableMenuBar.tsx deleted file mode 100644 index e698fc6f6..000000000 --- a/packages/strapi-tiptap-editor/admin/src/components/Editor/TableMenuBar.tsx +++ /dev/null @@ -1,304 +0,0 @@ -import { Button, Dialog, DialogBody, DialogFooter, Flex, Grid, GridItem, Typography } from '@strapi/design-system'; -import type { Editor as EditorTypes } from '@tiptap/react'; -import { Document, FormField, FormLabel, Select, SelectOption } from '@utrecht/component-library-react'; -import React, { ChangeEvent, useState } from 'react'; -import { AiOutlineDelete } from 'react-icons/ai'; -import { ImWarning } from 'react-icons/im'; -import { useIntl } from 'react-intl'; -import { getTrad } from '../../utils'; - -type TableEventTypes = - | 'addRowAfter' - | 'addRowBefore' - | 'deleteRow' - | 'addColumnAfter' - | 'addColumnBefore' - | 'deleteColumn' - | 'toggleHeaderRow' - | 'toggleHeaderColumn' - | 'toggleHeaderCell' - | 'mergeCells' - | 'splitCell' - | 'mergeOrSplit'; - -export const TableMenuBar = ({ editor }: { editor: EditorTypes }) => { - const [isVisibleDeleteTable, setIsVisibleDeleteTable] = useState({ visible: false, type: '' }); - const { formatMessage } = useIntl(); - - const onTableMenubarChange = (event: ChangeEvent) => { - switch (event.target.value as TableEventTypes) { - case 'addRowAfter': - editor.chain().focus().addRowAfter().run(); - break; - case 'addRowBefore': - editor.chain().focus().addRowBefore().run(); - break; - case 'deleteRow': - editor.chain().focus().deleteRow().run(); - break; - case 'addColumnAfter': - editor.chain().focus().addColumnAfter().run(); - break; - case 'addColumnBefore': - editor.chain().focus().addColumnBefore().run(); - break; - case 'deleteColumn': - editor.chain().focus().deleteColumn().run(); - break; - case 'toggleHeaderRow': - editor.chain().focus().toggleHeaderRow().run(); - break; - case 'toggleHeaderColumn': - editor.chain().focus().toggleHeaderColumn().run(); - break; - case 'toggleHeaderCell': - editor.chain().focus().toggleHeaderCell().run(); - break; - case 'mergeCells': - editor.chain().focus().mergeCells().run(); - break; - case 'splitCell': - editor.chain().focus().splitCell().run(); - break; - case 'mergeOrSplit': - editor.chain().focus().mergeOrSplit().run(); - break; - } - }; - const isCapturedTable = editor.can().deleteNode('capturedTable'); - const deleteButtonText = isCapturedTable - ? formatMessage({ - id: getTrad('components.tableMenuBar.deleteButtonTableWithCaption'), - defaultMessage: 'Delete table with caption', - }) - : formatMessage({ - id: getTrad('components.tableMenuBar.deleteButtonTable'), - defaultMessage: 'Delete table', - }); - const dialogDescription = isCapturedTable - ? formatMessage({ - id: getTrad('components.tableMenuBar.dialog.descriptionTableWithCaption'), - defaultMessage: 'Are you sure you want to delete the table with the caption?', - }) - : formatMessage({ - id: getTrad('components.tableMenuBar.dialog.descriptionTable'), - defaultMessage: 'Are you sure you want to delete the table?', - }); - return ( - - - - - - {formatMessage({ - id: getTrad('components.tableMenuBar.select.row.label'), - defaultMessage: 'Row', - })} - - - - - - - - {formatMessage({ - id: getTrad('components.tableMenuBar.select.column.label'), - defaultMessage: 'Column', - })} - - - - - - - - {formatMessage({ - id: getTrad('components.tableMenuBar.select.header.label'), - defaultMessage: 'Header', - })} - - - - - - - - {formatMessage({ - id: getTrad('components.tableMenuBar.select.cell.label'), - defaultMessage: 'Cell', - })} - - - - - - - - - setIsVisibleDeleteTable({ visible: !isVisibleDeleteTable.visible, type: '' })} - title={formatMessage({ - id: getTrad('components.tableMenuBar.dialog.title'), - defaultMessage: 'Confirmation', - })} - isOpen={isVisibleDeleteTable.visible} - > - }> - - - {dialogDescription} - - - - setIsVisibleDeleteTable({ visible: false, type: '' })} variant="tertiary"> - {formatMessage({ - id: getTrad('common.action.cancel'), - defaultMessage: 'Cancel', - })} - - } - endAction={ - - } - /> - - - ); -}; diff --git a/packages/strapi-tiptap-editor/admin/src/components/Editor/Toolbar.tsx b/packages/strapi-tiptap-editor/admin/src/components/Editor/Toolbar.tsx deleted file mode 100644 index 2ac6c13b2..000000000 --- a/packages/strapi-tiptap-editor/admin/src/components/Editor/Toolbar.tsx +++ /dev/null @@ -1,803 +0,0 @@ -import { Box, Button, Dialog, DialogBody, DialogFooter, Flex, Stack } from '@strapi/design-system'; -import { Field, FieldLabel } from '@strapi/design-system/Field'; -import { IconButton, IconButtonGroup } from '@strapi/design-system/IconButton'; -import { Option, Select } from '@strapi/design-system/Select'; -import { TextInput } from '@strapi/design-system/TextInput'; -import { Textarea } from '@strapi/design-system/Textarea'; -import { auth } from '@strapi/helper-plugin'; -import Bold from '@strapi/icons/Bold'; -import BulletList from '@strapi/icons/BulletList'; -import Code from '@strapi/icons/Code'; -import Italic from '@strapi/icons/Italic'; -import Landscape from '@strapi/icons/Landscape'; -import LinkIcon from '@strapi/icons/Link'; -import NumberList from '@strapi/icons/NumberList'; -import Pencil from '@strapi/icons/Pencil'; -import Strikethrough from '@strapi/icons/StrikeThrough'; -import Underline from '@strapi/icons/Underline'; -import { Level } from '@tiptap/extension-heading'; -import type { Editor as EditorTypes } from '@tiptap/react'; -import classnames from 'classnames'; -import React, { useState } from 'react'; -import './accordion.scss'; - -import { - AiFillYoutube, - AiOutlineAlignCenter, - AiOutlineAlignLeft, - AiOutlineAlignRight, - AiOutlineLine, - AiOutlineTable, -} from 'react-icons/ai'; -import { FaImage } from 'react-icons/fa'; -import { GrBlockQuote } from 'react-icons/gr'; -import { VscTable } from 'react-icons/vsc'; -import { useIntl } from 'react-intl'; -import { LanguagesList } from './LanguagesList'; -import { PriceList } from './PriceList'; -import { ToolbarItemHeadingWithID } from './ToolbarItems/HeadingWithID'; -import defaultSettings from '../../../../utils/defaults'; -import { useLink } from '../../hooks/useLink'; -import { PriceListTypes } from '../../types'; -import getTrad from '../../utils/getTrad'; -import { localizeLanguagesNames } from '../../utils/localizeLanguagesNames'; -import { LinkDialog } from '../LinkDialog'; -import initialTableWithCaption from '../extensions/schema/initialTableWithCaptionData'; - -type SetYouTubeVideoOptions = { src: string; width?: number; height?: number; start?: number; 'data-title': string }; -type HeadingEventsTypes = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'paragraph' | 'leadParagraph'; -type DetailsEventsTypes = 'details' | 'unsetDetails'; - -interface ToolbarProps { - editor: EditorTypes; - settings: typeof defaultSettings; - toggleMediaLib: () => void; - productPrice?: PriceListTypes; -} - -interface LinkToolbarProps { - editor: EditorTypes; - onClick: (_event: React.MouseEvent) => void; - label?: string; -} - -export const LinkToolbar = ({ editor, onClick, label }: LinkToolbarProps) => { - return ( - } - label={label} - className={classnames('medium-icon', { 'is-active': editor.isActive('link') })} - onClick={onClick} - /> - ); -}; - -const onHeadingChange = (editor: EditorTypes, type: HeadingEventsTypes) => { - switch (type) { - case 'h1': - case 'h2': - case 'h3': - case 'h4': - case 'h5': - case 'h6': - editor - .chain() - .focus() - .toggleHeading({ level: Number((type as any).replace('h', '')) as Level }) - .run(); - break; - case 'paragraph': - editor.chain().focus().setParagraph().run(); - break; - case 'leadParagraph': - editor.chain().focus().setLeadParagraph().run(); - break; - default: - } -}; - -export const Toolbar = ({ editor, toggleMediaLib, settings, productPrice }: ToolbarProps) => { - const { - isVisibleLinkDialog, - onCloseLinkDialog, - linkInput, - onLinkUrlInputChange, - openLinkDialog, - onInsertLink, - error, - } = useLink(editor); - // YouTube - const [isVisibleYouTubeDialog, setIsVisibleYouTubeDialog] = useState(false); - const user = auth.getUserInfo(); - const locale = user.preferedLanguage || 'nl'; - const [youTubeInput, setYouTubeInput] = useState(''); - const [youTubeHeightInput, setYouTubeHeightInput] = useState(settings.youtube.height); - const [youTubeWidthInput, setYouTubeWidthInput] = useState(settings.youtube.width); - const [youTubeTitleInput, setYouTubeTitleInput] = useState(''); - const { formatMessage } = useIntl(); - - const onInsertYouTubeEmbed = () => { - editor - .chain() - .focus() - .setYoutubeVideo({ - src: youTubeInput, - width: youTubeWidthInput, - height: youTubeHeightInput, - 'data-title': youTubeTitleInput, - } as SetYouTubeVideoOptions) - .run(); - setYouTubeInput(''); - setIsVisibleYouTubeDialog(false); - setYouTubeTitleInput(''); - }; - // Base64 Image dialog - const [base64MediaLibVisible, setBase64MediaLibVisible] = useState(false); - const [base64Input, setBase64Input] = useState(''); - // const handleToggleBase54MediaLib = () => setBase64MediaLibVisible(prev => !prev); - - // const base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/ - // const isValidBase64String = base64regex.test(base64Input); - - const openBase64Dialog = () => { - if (editor.getAttributes('image').src && editor.getAttributes('image').src.includes(';base64')) - setBase64Input(editor.getAttributes('image').src); - setBase64MediaLibVisible(true); - }; - - const onDetailsChange = (editor: EditorTypes, type: DetailsEventsTypes) => { - switch (type) { - case 'details': - editor.chain().focus().setDetails().run(); - break; - case 'unsetDetails': - if (editor.isActive('details')) { - editor.chain().focus().unsetDetails().run(); - } - break; - default: - } - }; - - const onInsertBase64Image = () => { - editor.chain().focus().setImage({ src: base64Input }).run(); - setBase64Input(''); - setBase64MediaLibVisible(false); - }; - - if (!editor) { - return null; - } - - let selectedTextStyle = 'none'; - - if (editor.isActive('heading', { level: 1 })) selectedTextStyle = 'h1'; - - if (editor.isActive('heading', { level: 2 })) selectedTextStyle = 'h2'; - - if (editor.isActive('heading', { level: 3 })) selectedTextStyle = 'h3'; - - if (editor.isActive('heading', { level: 4 })) selectedTextStyle = 'h4'; - - if (editor.isActive('heading', { level: 5 })) selectedTextStyle = 'h5'; - - if (editor.isActive('heading', { level: 6 })) selectedTextStyle = 'h6'; - - if (editor.isActive('paragraph')) selectedTextStyle = 'paragraph'; - - if (editor.isActive('paragraph', { 'data-lead': true })) selectedTextStyle = 'leadParagraph'; - - return ( -
        - - - - {productPrice && productPrice?.price?.length > 0 && productPrice.title && ( - - { - if (price && editor) { - editor.chain().focus().insertReactComponent(price).run(); - } - }} - productPrice={productPrice} - /> - - )} - {settings.other.language.enabled && ( - - - - )} - - {settings.bold ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.bold'), - defaultMessage: 'Bold', - })} - className={classnames('large-icon', { 'is-active': editor.isActive('bold') })} - onClick={() => editor.chain().focus().toggleBold().run()} - /> - ) : null} - {settings.italic ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.italic'), - defaultMessage: 'Italic', - })} - className={classnames('large-icon', { 'is-active': editor.isActive('italic') })} - onClick={() => editor.chain().focus().toggleItalic().run()} - /> - ) : null} - {settings.strikethrough ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.strikethrough'), - defaultMessage: 'Strikethrough', - })} - className={classnames('large-icon', { 'is-active': editor.isActive('strike') })} - onClick={() => editor.chain().focus().toggleStrike().run()} - /> - ) : null} - {settings.underline ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.underline'), - defaultMessage: 'Underline', - })} - className={classnames('large-icon', { 'is-active': editor.isActive('underline') })} - onClick={() => editor.chain().focus().toggleUnderline().run()} - /> - ) : null} - {settings.highlight ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.highlight'), - defaultMessage: 'Highlight', - })} - onClick={() => editor.chain().focus().toggleHighlight().run()} - className={classnames('large-icon', { 'is-active': editor.isActive('highlight') })} - /> - ) : null} - - - - {settings.align.includes('left') ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.alignLeft'), - defaultMessage: 'Align left', - })} - className={classnames('large-icon', { 'is-active': editor.isActive({ textAlign: 'left' }) })} - onClick={() => editor.chain().focus().setTextAlign('left').run()} - /> - ) : null} - {settings.align.includes('center') ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.alignCenter'), - defaultMessage: 'Align center', - })} - className={classnames('large-icon', { 'is-active': editor.isActive({ textAlign: 'center' }) })} - onClick={() => editor.chain().focus().setTextAlign('center').run()} - /> - ) : null} - {settings.align.includes('right') ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.alignRight'), - defaultMessage: 'Align right', - })} - className={classnames('large-icon', { 'is-active': editor.isActive({ textAlign: 'right' }) })} - onClick={() => editor.chain().focus().setTextAlign('right').run()} - /> - ) : null} - - - - {settings.lists.includes('ul') ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.bulletList'), - defaultMessage: 'Bullet List', - })} - className={classnames('large-icon', { 'is-active': editor.isActive('bulletList') })} - onClick={() => editor.chain().focus().toggleBulletList().run()} - /> - ) : null} - {settings.lists.includes('ol') ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.orderedList'), - defaultMessage: 'Ordered List', - })} - className={classnames('large-icon', { 'is-active': editor.isActive('orderedList') })} - onClick={() => editor.chain().focus().toggleOrderedList().run()} - /> - ) : null} - - - {settings.code ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.code'), - defaultMessage: 'Code', - })} - className={classnames('large-icon', { 'is-active': editor.isActive('codeBlock') })} - onClick={() => editor.chain().focus().toggleCodeBlock().run()} - /> - ) : null} - {settings.blockquote ? ( - } - label={formatMessage({ - id: getTrad('components.toolbar.blockquote'), - defaultMessage: 'Block Quote', - })} - className={classnames('large-icon', { 'is-active': editor.isActive('blockquote') })} - onClick={() => editor.chain().focus().toggleBlockquote().run()} - /> - ) : null} - onLinkUrlInputChange(e.target.value), - value: linkInput, - ariaLabel: 'URL', - hint: formatMessage({ - id: getTrad('components.toolbar.linkDialog.textInput.hint'), - defaultMessage: - "URLs should start with 'https://' or 'http://', for example: https://www.example.com or https://example.com", - }), - error: error - ? formatMessage({ - id: getTrad('components.toolbar.linkDialog.textInput.error'), - defaultMessage: - "Invalid URL. Ensure it starts with 'https://' or 'http://', for example: https://www.example.com or https://example.com", - }) - : undefined, - }} - startActionButtonProps={{ - onClick: onCloseLinkDialog, - text: formatMessage({ - id: getTrad('components.toolbar.linkDialog.startActionButtonText'), - defaultMessage: 'Cancel', - }), - }} - endActionButtonProps={{ - onClick: onInsertLink, - text: formatMessage({ - id: getTrad('components.toolbar.linkDialog.endActionButtonText'), - defaultMessage: 'Insert URL', - }), - disabled: Boolean(error), - }} - /> - - {settings.links.enabled ? ( - - ) : null} - - {settings.image.enabled ? ( - } - label={ - editor.isActive('image') - ? formatMessage({ - id: getTrad('components.toolbar.image.change'), - defaultMessage: 'Change image', - }) - : formatMessage({ - id: getTrad('components.toolbar.image.insert'), - defaultMessage: 'Insert image', - }) - } - className={classnames('large-icon', { - 'is-active': editor.isActive('image') && !editor.getAttributes('image').src.includes(';base64'), - })} - onClick={toggleMediaLib} - /> - ) : null} - - setBase64MediaLibVisible(false)} - title={formatMessage({ - id: getTrad('components.toolbar.base64Dialog.title'), - defaultMessage: 'Insert base64 image', - })} - isOpen={base64MediaLibVisible} - > - - -