diff --git a/NOTICE b/NOTICE index ffdea1d200b..39bd766e568 100644 --- a/NOTICE +++ b/NOTICE @@ -7,9 +7,9 @@ The following 3rd-party software packages may be used by or distributed with gooddata-ui-sdk. Any information relevant to third-party vendors listed below are collected using common, reasonable means. -Date generated: 2025-12-13 +Date generated: 2026-1-5 -Revision ID: c6d8ebbaa2624e5db3975ea13248bd231ead2b4d +Revision ID: 22b75f31e0d2730f300e9445fd06681255a06c86 ================================================================================ ================================================================================ @@ -194,7 +194,7 @@ Revision ID: c6d8ebbaa2624e5db3975ea13248bd231ead2b4d - @mapbox/unitbezier (0.0.1) [BSD-2-Clause] - @mapbox/vector-tile (1.3.1) [BSD-3-Clause] - @mapbox/whoots-js (3.1.0) [ISC] -- @maplibre/maplibre-gl-style-spec (20.4.0) [BSD-3-Clause, MIT, ISC] +- @maplibre/maplibre-gl-style-spec (20.4.0) [MIT, BSD-3-Clause, ISC] - @marijn/find-cluster-break (1.0.2) [MIT] - @nodelib/fs.scandir (2.1.5) [MIT] - @nodelib/fs.stat (2.0.5) [MIT] @@ -3059,7 +3059,7 @@ Package Depth: Transitive -------------------------------------------------------------------------------- * Declared Licenses * -BSD-3-Clause, MIT, ISC +MIT, BSD-3-Clause, ISC -------------------------------------------------------------------------------- @@ -35462,4 +35462,4 @@ POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -Report Generated by FOSSA on 2025-12-13 +Report Generated by FOSSA on 2026-1-5 diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json index e408c518e23..a9950c08883 100644 --- a/common/config/rush/browser-approved-packages.json +++ b/common/config/rush/browser-approved-packages.json @@ -1166,6 +1166,10 @@ "name": "reselect", "allowedCategories": [ "production" ] }, + { + "name": "rollup", + "allowedCategories": [ "production" ] + }, { "name": "sass", "allowedCategories": [ "examples", "production" ] diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index c9f5fa24844..022e0c00d69 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -6068,6 +6068,9 @@ importers: react-dom: specifier: 19.1.1 version: 19.1.1(react@19.1.1) + rollup: + specifier: ^4.51.0 + version: 4.54.0 typescript: specifier: 5.8.3 version: 5.8.3 @@ -10370,148 +10373,155 @@ packages: picomatch: 4.0.3 dev: true - /@rollup/rollup-android-arm-eabi@4.50.2: - resolution: {integrity: sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==} + /@rollup/rollup-android-arm-eabi@4.54.0: + resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} cpu: [arm] os: [android] requiresBuild: true optional: true - /@rollup/rollup-android-arm64@4.50.2: - resolution: {integrity: sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==} + /@rollup/rollup-android-arm64@4.54.0: + resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} cpu: [arm64] os: [android] requiresBuild: true optional: true - /@rollup/rollup-darwin-arm64@4.50.2: - resolution: {integrity: sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==} + /@rollup/rollup-darwin-arm64@4.54.0: + resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-darwin-x64@4.50.2: - resolution: {integrity: sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==} + /@rollup/rollup-darwin-x64@4.54.0: + resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-freebsd-arm64@4.50.2: - resolution: {integrity: sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==} + /@rollup/rollup-freebsd-arm64@4.54.0: + resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} cpu: [arm64] os: [freebsd] requiresBuild: true optional: true - /@rollup/rollup-freebsd-x64@4.50.2: - resolution: {integrity: sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==} + /@rollup/rollup-freebsd-x64@4.54.0: + resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} cpu: [x64] os: [freebsd] requiresBuild: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.50.2: - resolution: {integrity: sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==} + /@rollup/rollup-linux-arm-gnueabihf@4.54.0: + resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.50.2: - resolution: {integrity: sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==} + /@rollup/rollup-linux-arm-musleabihf@4.54.0: + resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.50.2: - resolution: {integrity: sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==} + /@rollup/rollup-linux-arm64-gnu@4.54.0: + resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-musl@4.50.2: - resolution: {integrity: sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==} + /@rollup/rollup-linux-arm64-musl@4.54.0: + resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-loong64-gnu@4.50.2: - resolution: {integrity: sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==} + /@rollup/rollup-linux-loong64-gnu@4.54.0: + resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-ppc64-gnu@4.50.2: - resolution: {integrity: sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==} + /@rollup/rollup-linux-ppc64-gnu@4.54.0: + resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.50.2: - resolution: {integrity: sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==} + /@rollup/rollup-linux-riscv64-gnu@4.54.0: + resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-riscv64-musl@4.50.2: - resolution: {integrity: sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==} + /@rollup/rollup-linux-riscv64-musl@4.54.0: + resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.50.2: - resolution: {integrity: sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==} + /@rollup/rollup-linux-s390x-gnu@4.54.0: + resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-gnu@4.50.2: - resolution: {integrity: sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==} + /@rollup/rollup-linux-x64-gnu@4.54.0: + resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-musl@4.50.2: - resolution: {integrity: sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==} + /@rollup/rollup-linux-x64-musl@4.54.0: + resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-openharmony-arm64@4.50.2: - resolution: {integrity: sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==} + /@rollup/rollup-openharmony-arm64@4.54.0: + resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} cpu: [arm64] os: [openharmony] requiresBuild: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.50.2: - resolution: {integrity: sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==} + /@rollup/rollup-win32-arm64-msvc@4.54.0: + resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.50.2: - resolution: {integrity: sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==} + /@rollup/rollup-win32-ia32-msvc@4.54.0: + resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-x64-msvc@4.50.2: - resolution: {integrity: sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==} + /@rollup/rollup-win32-x64-gnu@4.54.0: + resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.54.0: + resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} cpu: [x64] os: [win32] requiresBuild: true @@ -19369,34 +19379,35 @@ packages: glob: 7.2.3 dev: true - /rollup@4.50.2: - resolution: {integrity: sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==} + /rollup@4.54.0: + resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.50.2 - '@rollup/rollup-android-arm64': 4.50.2 - '@rollup/rollup-darwin-arm64': 4.50.2 - '@rollup/rollup-darwin-x64': 4.50.2 - '@rollup/rollup-freebsd-arm64': 4.50.2 - '@rollup/rollup-freebsd-x64': 4.50.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.50.2 - '@rollup/rollup-linux-arm-musleabihf': 4.50.2 - '@rollup/rollup-linux-arm64-gnu': 4.50.2 - '@rollup/rollup-linux-arm64-musl': 4.50.2 - '@rollup/rollup-linux-loong64-gnu': 4.50.2 - '@rollup/rollup-linux-ppc64-gnu': 4.50.2 - '@rollup/rollup-linux-riscv64-gnu': 4.50.2 - '@rollup/rollup-linux-riscv64-musl': 4.50.2 - '@rollup/rollup-linux-s390x-gnu': 4.50.2 - '@rollup/rollup-linux-x64-gnu': 4.50.2 - '@rollup/rollup-linux-x64-musl': 4.50.2 - '@rollup/rollup-openharmony-arm64': 4.50.2 - '@rollup/rollup-win32-arm64-msvc': 4.50.2 - '@rollup/rollup-win32-ia32-msvc': 4.50.2 - '@rollup/rollup-win32-x64-msvc': 4.50.2 + '@rollup/rollup-android-arm-eabi': 4.54.0 + '@rollup/rollup-android-arm64': 4.54.0 + '@rollup/rollup-darwin-arm64': 4.54.0 + '@rollup/rollup-darwin-x64': 4.54.0 + '@rollup/rollup-freebsd-arm64': 4.54.0 + '@rollup/rollup-freebsd-x64': 4.54.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 + '@rollup/rollup-linux-arm-musleabihf': 4.54.0 + '@rollup/rollup-linux-arm64-gnu': 4.54.0 + '@rollup/rollup-linux-arm64-musl': 4.54.0 + '@rollup/rollup-linux-loong64-gnu': 4.54.0 + '@rollup/rollup-linux-ppc64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-musl': 4.54.0 + '@rollup/rollup-linux-s390x-gnu': 4.54.0 + '@rollup/rollup-linux-x64-gnu': 4.54.0 + '@rollup/rollup-linux-x64-musl': 4.54.0 + '@rollup/rollup-openharmony-arm64': 4.54.0 + '@rollup/rollup-win32-arm64-msvc': 4.54.0 + '@rollup/rollup-win32-ia32-msvc': 4.54.0 + '@rollup/rollup-win32-x64-gnu': 4.54.0 + '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 /run-applescript@7.1.0: @@ -21351,7 +21362,7 @@ packages: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.50.2 + rollup: 4.54.0 sass: 1.70.0 tinyglobby: 0.2.15 optionalDependencies: diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json index 02c9b4a1192..3fb99710109 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -12,14 +12,14 @@ { "definitionName": "lockStepVersion", "policyName": "sdk", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "nextBump": "prerelease", "mainProject": "@gooddata/sdk-ui-all" }, { "definitionName": "lockStepVersion", "policyName": "sdk-examples", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "nextBump": "prerelease", "mainProject": "@gooddata/sdk-ui-all" } diff --git a/examples/playground/package.json b/examples/playground/package.json index b6f0c5a8149..1b2613fa7a6 100644 --- a/examples/playground/package.json +++ b/examples/playground/package.json @@ -24,8 +24,8 @@ "eslint": "eslint -c .eslintrc.cjs src/", "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__,examples/server/src,examples/src,examples/test}/**/*.{ts,js,tsx,jsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__,examples/server/src,examples/src,examples/test}/**/*.{ts,js,tsx,jsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__,examples/server/src,examples/src,examples/test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__,examples/server/src,examples/src,examples/test}/**/*.{json,scss,md,yaml,html}'", "refresh-md": "./scripts/refresh-md.sh && npm run build", "validate": "npm run eslint && npm run prettier-check" }, diff --git a/examples/sdk-interactive-examples/examples-template/package.json b/examples/sdk-interactive-examples/examples-template/package.json index d0bcb21426a..cdf857ae7ad 100644 --- a/examples/sdk-interactive-examples/examples-template/package.json +++ b/examples/sdk-interactive-examples/examples-template/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-examples-template", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "GoodData interactive example template", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-attributefilter/package.json b/examples/sdk-interactive-examples/examples/example-attributefilter/package.json index 43c45f1b8b2..a58e39e4a54 100644 --- a/examples/sdk-interactive-examples/examples/example-attributefilter/package.json +++ b/examples/sdk-interactive-examples/examples/example-attributefilter/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-attributefilter", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "This example demonstrates how to use the AttributeFilter component to filter data in a visualization.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-chartconfig/package.json b/examples/sdk-interactive-examples/examples/example-chartconfig/package.json index ff80df8ef0e..ffc819678cf 100644 --- a/examples/sdk-interactive-examples/examples/example-chartconfig/package.json +++ b/examples/sdk-interactive-examples/examples/example-chartconfig/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-chartconfig", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "This interactive example demonstrates how to manipulate the chart config.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-columnchart/package.json b/examples/sdk-interactive-examples/examples/example-columnchart/package.json index 268faf8d8d3..8354747ad13 100644 --- a/examples/sdk-interactive-examples/examples/example-columnchart/package.json +++ b/examples/sdk-interactive-examples/examples/example-columnchart/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-columnchart", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "This example demonstrates the usage of the ColumnChart component with the viewBy and stackBy properties.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-combochart/package.json b/examples/sdk-interactive-examples/examples/example-combochart/package.json index 37afd817690..9df57b6309f 100644 --- a/examples/sdk-interactive-examples/examples/example-combochart/package.json +++ b/examples/sdk-interactive-examples/examples/example-combochart/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-combochart", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "Example demonstrates ComboChart secondaryMeasures definition. ", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-dashboard/package.json b/examples/sdk-interactive-examples/examples/example-dashboard/package.json index 0d96181c964..edad1ffcc29 100644 --- a/examples/sdk-interactive-examples/examples/example-dashboard/package.json +++ b/examples/sdk-interactive-examples/examples/example-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-dashboard", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "This example shows how to use the Dashboard component.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-datefilter/package.json b/examples/sdk-interactive-examples/examples/example-datefilter/package.json index ec87e364a95..5d1d4ddd7d6 100644 --- a/examples/sdk-interactive-examples/examples/example-datefilter/package.json +++ b/examples/sdk-interactive-examples/examples/example-datefilter/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-datefilter", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "Example demonstrates usage of Date Filter component.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-dependentfilters/package.json b/examples/sdk-interactive-examples/examples/example-dependentfilters/package.json index 71443de2b54..fbf97c18d63 100644 --- a/examples/sdk-interactive-examples/examples/example-dependentfilters/package.json +++ b/examples/sdk-interactive-examples/examples/example-dependentfilters/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-dependentfilters", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "This example demonstrates how to use multiple attribute filters linked together to filter data in a visualization.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-execute/package.json b/examples/sdk-interactive-examples/examples/example-execute/package.json index 1ad916d901e..c9e943ea8ed 100644 --- a/examples/sdk-interactive-examples/examples/example-execute/package.json +++ b/examples/sdk-interactive-examples/examples/example-execute/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-execute", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "This example demonstrates using Execute component and build custom visualization.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-granularity/package.json b/examples/sdk-interactive-examples/examples/example-granularity/package.json index 242577edee8..157db8cb907 100644 --- a/examples/sdk-interactive-examples/examples/example-granularity/package.json +++ b/examples/sdk-interactive-examples/examples/example-granularity/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-granularity", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "This example exmplains DateFilter granularity ", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-headline/package.json b/examples/sdk-interactive-examples/examples/example-headline/package.json index d0f67648da3..ea9adef2112 100644 --- a/examples/sdk-interactive-examples/examples/example-headline/package.json +++ b/examples/sdk-interactive-examples/examples/example-headline/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-headline", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "This example shows how to use the Headline component.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-pivottable/package.json b/examples/sdk-interactive-examples/examples/example-pivottable/package.json index 71ec44c9fd7..5694f331c8d 100644 --- a/examples/sdk-interactive-examples/examples/example-pivottable/package.json +++ b/examples/sdk-interactive-examples/examples/example-pivottable/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-pivottable", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "Basic PivotTable manipulation.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-relativedatefilter/package.json b/examples/sdk-interactive-examples/examples/example-relativedatefilter/package.json index c4f2c354283..767a4ab747d 100644 --- a/examples/sdk-interactive-examples/examples/example-relativedatefilter/package.json +++ b/examples/sdk-interactive-examples/examples/example-relativedatefilter/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-relativedatefilter", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "Example demonstrates how to set relative DateFilter for visualization.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/examples/example-repeater/package.json b/examples/sdk-interactive-examples/examples/example-repeater/package.json index 18c133594e1..27371507ed4 100644 --- a/examples/sdk-interactive-examples/examples/example-repeater/package.json +++ b/examples/sdk-interactive-examples/examples/example-repeater/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-example-repeater", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "This example demonstrates how to use Repeater component.", "license": "LicenseRef-LICENSE", @@ -15,8 +15,8 @@ "clean": "rm -rf esm dist *.log", "eslint": "eslint -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "preview": "vite preview", "refresh-md": "gdc-catalog-export && npm run prettier-write", "start": "vite serve", diff --git a/examples/sdk-interactive-examples/package.json b/examples/sdk-interactive-examples/package.json index 21d29d2734b..d1f2d83557b 100644 --- a/examples/sdk-interactive-examples/package.json +++ b/examples/sdk-interactive-examples/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-interactive-examples", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "private": false, "description": "GoodData React interactive examples", "license": "LicenseRef-LICENSE", diff --git a/libs/.eslintignore b/libs/.eslintignore new file mode 100644 index 00000000000..19ae95b9515 --- /dev/null +++ b/libs/.eslintignore @@ -0,0 +1,34 @@ +# (C) 2025 GoodData Corporation + +# Build outputs +dist +esm +**/build + +# Dependencies +node_modules + +# CI results +ci/results + +# Generated files +__version.ts +*.generated.stories.tsx + +# Storybook (sdk-ui-tests) +dist-storybook +backstop/stories.json +backstop/output/** +report*.json +!.storybook + +# E2E (sdk-ui-tests-e2e) +cypress/results +cypress/screenshots +cypress/videos + +# Web components (sdk-ui-web-components) +vite.config.ts +debug/index.js + +temp/ diff --git a/libs/api-client-tiger/.eslintignore b/libs/api-client-tiger/.eslintignore deleted file mode 100644 index e54cfec027f..00000000000 --- a/libs/api-client-tiger/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -# (C) 2025 GoodData Corporation -__version.ts diff --git a/libs/api-client-tiger/package.json b/libs/api-client-tiger/package.json index ab0c807a75a..4ea616a9d40 100644 --- a/libs/api-client-tiger/package.json +++ b/libs/api-client-tiger/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/api-client-tiger", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "API Client for GoodData Cloud and GoodData.CN", "repository": { "type": "git", @@ -51,17 +51,17 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "generate-client": "npm run openapi-generate && fix-esm-import-path ./src && npm run prettier-write", "openapi-generate": "./scripts/generate.js", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", - "validate": "npm run dep-cruiser && npm run eslint && npm run prettier-check", + "validate": "tsc && npm run dep-cruiser && npm run eslint && npm run prettier-check", "validate-esm": "node --input-type=module --eval 'import \"@gooddata/api-client-tiger\"' " }, "dependencies": { diff --git a/libs/api-client-tiger/scripts/build.sh b/libs/api-client-tiger/scripts/build.sh index a9f603afdf5..36ce59b2af7 100644 --- a/libs/api-client-tiger/scripts/build.sh +++ b/libs/api-client-tiger/scripts/build.sh @@ -14,7 +14,7 @@ build() { _common-build if [[ $1 != "--genFilesOnly" ]]; then - tsc -p tsconfig.json + tsc -p tsconfig.build.json npm run api-extractor fi } diff --git a/libs/api-client-tiger/smoke.test.ts b/libs/api-client-tiger/smoke.test.ts index b7b15a3cd95..4baa4844138 100644 --- a/libs/api-client-tiger/smoke.test.ts +++ b/libs/api-client-tiger/smoke.test.ts @@ -1,5 +1,5 @@ // (C) 2019 GoodData Corporation -import { it, expect } from "vitest"; +import { expect, it } from "vitest"; it("smokes", () => { expect(1).toEqual(1); diff --git a/libs/api-client-tiger/tsconfig.build.json b/libs/api-client-tiger/tsconfig.build.json new file mode 100644 index 00000000000..08685e584a6 --- /dev/null +++ b/libs/api-client-tiger/tsconfig.build.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.base.json", + "include": ["src/**/*"], + "compilerOptions": { + "baseUrl": ".", + "rootDir": "./src", + "outDir": "./esm", + "strict": true + } +} diff --git a/libs/api-client-tiger/tsconfig.json b/libs/api-client-tiger/tsconfig.json index 3d1972b59c7..7836e95e227 100644 --- a/libs/api-client-tiger/tsconfig.json +++ b/libs/api-client-tiger/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../tsconfig.base.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], "compilerOptions": { - "baseUrl": ".", - "rootDir": "./src", - "outDir": "./esm", - "strict": true + "noEmit": true, + "skipLibCheck": true } } diff --git a/libs/api-client-tiger/vitest.config.ts b/libs/api-client-tiger/vitest.config.ts index bc3487d292a..0f60e876e39 100644 --- a/libs/api-client-tiger/vitest.config.ts +++ b/libs/api-client-tiger/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { setupFiles: "./vitest.setup.ts", diff --git a/libs/api-client-tiger/vitest.setup.ts b/libs/api-client-tiger/vitest.setup.ts index e9c310f283d..41ce7f8d0d5 100644 --- a/libs/api-client-tiger/vitest.setup.ts +++ b/libs/api-client-tiger/vitest.setup.ts @@ -3,6 +3,8 @@ // Fail test on console error (react proptypes validation etc.) const consoleError = console.error; console.error = (err, ...args) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument consoleError(err, ...args); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument throw new Error(err); }; diff --git a/libs/sdk-backend-base/package.json b/libs/sdk-backend-base/package.json index fb0d7cd709b..99afc68e2c0 100644 --- a/libs/sdk-backend-base/package.json +++ b/libs/sdk-backend-base/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-backend-base", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData.UI SDK - Base for backend implementations", "repository": { "type": "git", @@ -29,11 +29,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/libs/sdk-backend-base/tsconfig.build.json b/libs/sdk-backend-base/tsconfig.build.json index 16f78785951..cd9d69b6380 100644 --- a/libs/sdk-backend-base/tsconfig.build.json +++ b/libs/sdk-backend-base/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts", "**/*.fixtures.ts"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-backend-base/tsconfig.json b/libs/sdk-backend-base/tsconfig.json index 39d5d472fd4..7836e95e227 100644 --- a/libs/sdk-backend-base/tsconfig.json +++ b/libs/sdk-backend-base/tsconfig.json @@ -1,9 +1,6 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.base.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, "skipLibCheck": true } diff --git a/libs/sdk-backend-base/vitest.config.ts b/libs/sdk-backend-base/vitest.config.ts index bc3487d292a..0f60e876e39 100644 --- a/libs/sdk-backend-base/vitest.config.ts +++ b/libs/sdk-backend-base/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { setupFiles: "./vitest.setup.ts", diff --git a/libs/sdk-backend-base/vitest.setup.ts b/libs/sdk-backend-base/vitest.setup.ts index e9c310f283d..41ce7f8d0d5 100644 --- a/libs/sdk-backend-base/vitest.setup.ts +++ b/libs/sdk-backend-base/vitest.setup.ts @@ -3,6 +3,8 @@ // Fail test on console error (react proptypes validation etc.) const consoleError = console.error; console.error = (err, ...args) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument consoleError(err, ...args); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument throw new Error(err); }; diff --git a/libs/sdk-backend-mockingbird/package.json b/libs/sdk-backend-mockingbird/package.json index 77509f3dd14..00647c46812 100644 --- a/libs/sdk-backend-mockingbird/package.json +++ b/libs/sdk-backend-mockingbird/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-backend-mockingbird", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "Mock GoodData Backend SPI implementation", "repository": { "type": "git", @@ -29,11 +29,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/libs/sdk-backend-mockingbird/src/recordedBackend/execution.ts b/libs/sdk-backend-mockingbird/src/recordedBackend/execution.ts index 7db7523fb1c..b39d03eb27d 100644 --- a/libs/sdk-backend-mockingbird/src/recordedBackend/execution.ts +++ b/libs/sdk-backend-mockingbird/src/recordedBackend/execution.ts @@ -456,13 +456,14 @@ function preprocessTotalHeaderItems( const columnIdentifiers = columns.map((item) => isAttribute(item) && item.attribute?.localIdentifier); const measuresIdentifiers = measures.map((m) => m.measure.localIdentifier); - columnTotals.sort( + // Sort column totals by measure identifier order for consistent measureIndex assignment + const sortedColumnTotals = [...columnTotals].sort( (a, b) => measuresIdentifiers.indexOf(a.measureIdentifier) - measuresIdentifiers.indexOf(b.measureIdentifier), ); - const lookups = columnTotals + const lookups = sortedColumnTotals .filter((total) => { return columnIdentifiers.includes(total.attributeIdentifier); }) @@ -474,28 +475,36 @@ function preprocessTotalHeaderItems( return headerItems.map((topHeaderItems) => { return topHeaderItems.map((items) => { - // process only header items with measures - let count = 0; - if (items.find(isResultMeasureHeader)) { - return items.map((item) => { - if (isTotalDescriptor(item)) { - const result = { - ...item, - totalHeaderItem: { - ...item?.totalHeaderItem, - measureIndex: uniqueLookups[count % uniqueLookups.length], - }, - }; + // Only add measureIndex when measure headers are present in the same header level + // For transposed tables, measures are in rows (not columns), so column totals + // should NOT have measureIndex - they should display "Sum", "Median" etc. + if (!items.find(isResultMeasureHeader)) { + return items; + } + let count = 0; + return items.map((item) => { + if (isTotalDescriptor(item)) { + // Skip if measureIndex already present (from Tiger backend) + if (item.totalHeaderItem.measureIndex !== undefined) { count++; - return result; + return item; } - return item; - }); - } + const result = { + ...item, + totalHeaderItem: { + ...item?.totalHeaderItem, + measureIndex: uniqueLookups[count % uniqueLookups.length], + }, + }; - return items; + count++; + return result; + } + + return item; + }); }); }); } diff --git a/libs/sdk-backend-mockingbird/tsconfig.build.json b/libs/sdk-backend-mockingbird/tsconfig.build.json index 16f78785951..2541f432f49 100644 --- a/libs/sdk-backend-mockingbird/tsconfig.build.json +++ b/libs/sdk-backend-mockingbird/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-backend-mockingbird/tsconfig.json b/libs/sdk-backend-mockingbird/tsconfig.json index 39d5d472fd4..7836e95e227 100644 --- a/libs/sdk-backend-mockingbird/tsconfig.json +++ b/libs/sdk-backend-mockingbird/tsconfig.json @@ -1,9 +1,6 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.base.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, "skipLibCheck": true } diff --git a/libs/sdk-backend-mockingbird/vitest.config.ts b/libs/sdk-backend-mockingbird/vitest.config.ts index bc3487d292a..0f60e876e39 100644 --- a/libs/sdk-backend-mockingbird/vitest.config.ts +++ b/libs/sdk-backend-mockingbird/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { setupFiles: "./vitest.setup.ts", diff --git a/libs/sdk-backend-spi/package.json b/libs/sdk-backend-spi/package.json index f679104e3a9..7982b0b43f0 100644 --- a/libs/sdk-backend-spi/package.json +++ b/libs/sdk-backend-spi/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-backend-spi", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData Backend SPI abstraction interfaces", "repository": { "type": "git", @@ -29,11 +29,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/libs/sdk-backend-spi/tsconfig.build.json b/libs/sdk-backend-spi/tsconfig.build.json index 16f78785951..2541f432f49 100644 --- a/libs/sdk-backend-spi/tsconfig.build.json +++ b/libs/sdk-backend-spi/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-backend-spi/tsconfig.json b/libs/sdk-backend-spi/tsconfig.json index 39d5d472fd4..7836e95e227 100644 --- a/libs/sdk-backend-spi/tsconfig.json +++ b/libs/sdk-backend-spi/tsconfig.json @@ -1,9 +1,6 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.base.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, "skipLibCheck": true } diff --git a/libs/sdk-backend-spi/vitest.config.ts b/libs/sdk-backend-spi/vitest.config.ts index bc3487d292a..0f60e876e39 100644 --- a/libs/sdk-backend-spi/vitest.config.ts +++ b/libs/sdk-backend-spi/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { setupFiles: "./vitest.setup.ts", diff --git a/libs/sdk-backend-spi/vitest.setup.ts b/libs/sdk-backend-spi/vitest.setup.ts index e9c310f283d..41ce7f8d0d5 100644 --- a/libs/sdk-backend-spi/vitest.setup.ts +++ b/libs/sdk-backend-spi/vitest.setup.ts @@ -3,6 +3,8 @@ // Fail test on console error (react proptypes validation etc.) const consoleError = console.error; console.error = (err, ...args) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument consoleError(err, ...args); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument throw new Error(err); }; diff --git a/libs/sdk-backend-tiger/.eslintignore b/libs/sdk-backend-tiger/.eslintignore deleted file mode 100644 index e54cfec027f..00000000000 --- a/libs/sdk-backend-tiger/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -# (C) 2025 GoodData Corporation -__version.ts diff --git a/libs/sdk-backend-tiger/integrated-test.setup.js b/libs/sdk-backend-tiger/integrated-test.setup.js index 5b4c2e75ff1..21ee8f3f0d7 100644 --- a/libs/sdk-backend-tiger/integrated-test.setup.js +++ b/libs/sdk-backend-tiger/integrated-test.setup.js @@ -66,9 +66,12 @@ https.request = function cookieRewritingRequestFactory(req) { const responseCookies = res.headers["set-cookie"]; if (responseCookies) { - res.headers["set-cookie"] = stripDomain(responseCookies, "staging.dev-latest.stg11.panther.intgdc.com"); + res.headers["set-cookie"] = stripDomain( + responseCookies, + "staging.dev-latest.stg11.panther.intgdc.com", + ); } }); return newRequest; -}; \ No newline at end of file +}; diff --git a/libs/sdk-backend-tiger/package.json b/libs/sdk-backend-tiger/package.json index e1dffb2cda6..fd1001cca21 100644 --- a/libs/sdk-backend-tiger/package.json +++ b/libs/sdk-backend-tiger/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-backend-tiger", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData Backend SPI implementation for GoodData Cloud and GoodData.CN", "repository": { "type": "git", @@ -34,16 +34,16 @@ "delete-ref-workspaces": "node ./tests/reference_workspace/delete_test_workspaces.mjs", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "integrated-test": "./scripts/integrated-test.sh", "integrated-test-live-backend": "./scripts/integrated-test-live-backend.sh", "isolated-test-rec": "GD_TIGER_REC=true NODE_TLS_REJECT_UNAUTHORIZED=0 vitest --config vitest.integrated.config.ts run", "isolated-test-rec-snapshots": "GD_TIGER_REC=true NODE_TLS_REJECT_UNAUTHORIZED=0 vitest -u --config vitest.integrated.config.ts run", "isolated-test-run": "NODE_TLS_REJECT_UNAUTHORIZED=0 vitest --config vitest.integrated.config.ts run", - "prettier-check": "prettier --check '{src,tests}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,tests}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,tests}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,tests}/**/*.{json,scss,md,yaml,html}'", "refresh-md": "./scripts/refresh-md.sh && npm run build", "remove-sensitive-data": "./tests/wiremock/remove_sensitive_data.sh", "test": "vitest watch", diff --git a/libs/sdk-backend-tiger/tests/integrated/backend.ts b/libs/sdk-backend-tiger/tests/integrated/backend.ts index e0f62d1b1d2..c13e6835aac 100644 --- a/libs/sdk-backend-tiger/tests/integrated/backend.ts +++ b/libs/sdk-backend-tiger/tests/integrated/backend.ts @@ -1,14 +1,16 @@ // (C) 2022-2024 GoodData Corporation +import { config } from "dotenv"; +import { invariant } from "ts-invariant"; + import { - IAuthenticatedPrincipal, - IAuthenticationContext, - IAnalyticalBackend, - IAuthenticationProvider, + type IAnalyticalBackend, + type IAuthenticatedPrincipal, + type IAuthenticationContext, + type IAuthenticationProvider, } from "@gooddata/sdk-backend-spi"; + import tigerFactory, { TigerAuthProviderBase, TigerTokenAuthProvider } from "../../src/index.js"; -import { config } from "dotenv"; -import { invariant } from "ts-invariant"; let GlobalBackend: IAnalyticalBackend | undefined; @@ -36,25 +38,25 @@ function createBackend(): IAnalyticalBackend { * Does not work without the protocol within the `localhost` value. */ - let hostname = (process.env.CI && "https://tiger") ?? "https://localhost"; - if (process.env.HOST) { - hostname = process.env.HOST; + let hostname = (process.env["CI"] && "https://tiger") ?? "https://localhost"; + if (process.env["HOST"]) { + hostname = process.env["HOST"]; } - const port = process.env.HOST ? "" : ":8442"; + const port = process.env["HOST"] ? "" : ":8442"; const backend = tigerFactory({ hostname: `${hostname}${port}` }); let authProvider; - if (process.env.GD_TIGER_REC) { + if (process.env["GD_TIGER_REC"]) { const credentials = config(); invariant( - credentials.parsed?.TIGER_API_TOKEN, + credentials.parsed?.["TIGER_API_TOKEN"], "You have started integrated tests in recording mode - this mode requires " + "credentials in order to log into platform. The credentials must be stored in .env file located " + "in sdk-backend-tiger directory. This a dotenv file and should contain TIGER_API_TOKEN.", ); - authProvider = new TigerTokenAuthProvider(credentials.parsed.TIGER_API_TOKEN); - } else if (process.env.TIGER_API_TOKEN) { - authProvider = new TigerTokenAuthProvider(process.env.TIGER_API_TOKEN); + authProvider = new TigerTokenAuthProvider(credentials.parsed["TIGER_API_TOKEN"]); + } else if (process.env["TIGER_API_TOKEN"]) { + authProvider = new TigerTokenAuthProvider(process.env["TIGER_API_TOKEN"]); } else { authProvider = new NoLoginAuthProvider(); } @@ -72,8 +74,7 @@ export function testBackend(): IAnalyticalBackend { export function testWorkspace(): string { // UI SDK Reference workspace ID - const workspace: string = process.env.WORKSPACE_ID ?? getRecordingsWorkspaceId(); - return workspace; + return process.env["WORKSPACE_ID"] ?? getRecordingsWorkspaceId(); } function getRecordingsWorkspaceId() { @@ -86,8 +87,8 @@ export function sanitizeKeyWithNewValue(result: object, key: string, newValue: s } function sanitizeWorkspaceId(result: object) { - if (process.env.WORKSPACE_ID) { - const workspace: string = process.env.WORKSPACE_ID; + if (process.env["WORKSPACE_ID"]) { + const workspace: string = process.env["WORKSPACE_ID"]; const dataString = JSON.stringify(result, null, 2).replace( new RegExp(workspace, "g"), getRecordingsWorkspaceId(), diff --git a/libs/sdk-backend-tiger/tests/integrated/catalog.test.ts b/libs/sdk-backend-tiger/tests/integrated/catalog.test.ts index 83840e29b15..52dfff1dcc8 100644 --- a/libs/sdk-backend-tiger/tests/integrated/catalog.test.ts +++ b/libs/sdk-backend-tiger/tests/integrated/catalog.test.ts @@ -1,8 +1,9 @@ // (C) 2022 GoodData Corporation -import { describe, beforeAll, expect, it } from "vitest"; -import { testBackend, testWorkspace, sanitizeWorkspace, sortToOrder } from "./backend.js"; +import { beforeAll, describe, expect, it } from "vitest"; + import { measureLocalId, newArithmeticMeasure, newPopMeasure } from "@gooddata/sdk-model"; +import { sanitizeWorkspace, sortToOrder, testBackend, testWorkspace } from "./backend.js"; import * as Md from "../../src/fixtures/full.js"; const backend = testBackend(); diff --git a/libs/sdk-backend-tiger/tests/integrated/dateFilterConfigs.test.ts b/libs/sdk-backend-tiger/tests/integrated/dateFilterConfigs.test.ts index 58af52398e8..e1773ca471e 100644 --- a/libs/sdk-backend-tiger/tests/integrated/dateFilterConfigs.test.ts +++ b/libs/sdk-backend-tiger/tests/integrated/dateFilterConfigs.test.ts @@ -1,5 +1,6 @@ // (C) 2022-2025 GoodData Corporation -import { describe, beforeAll, expect, it } from "vitest"; +import { beforeAll, describe, expect, it } from "vitest"; + import { testBackend, testWorkspace } from "./backend.js"; const backend = testBackend(); diff --git a/libs/sdk-backend-tiger/tests/integrated/elements.test.ts b/libs/sdk-backend-tiger/tests/integrated/elements.test.ts index 45c10bac459..69f92b281ae 100644 --- a/libs/sdk-backend-tiger/tests/integrated/elements.test.ts +++ b/libs/sdk-backend-tiger/tests/integrated/elements.test.ts @@ -1,16 +1,17 @@ // (C) 2022-2024 GoodData Corporation -import { testBackend, testWorkspace } from "./backend.js"; +import { omit } from "lodash-es"; +import { beforeAll, describe, expect, it } from "vitest"; + import { + type IAttributeElement, attributeDisplayFormRef, newNegativeAttributeFilter, newPositiveAttributeFilter, - IAttributeElement, } from "@gooddata/sdk-model"; -import { omit } from "lodash-es"; +import { testBackend, testWorkspace } from "./backend.js"; import * as Md from "../../src/fixtures/full.js"; import * as ReferenceRecords from "../../src/fixtures/referenceObjects.js"; -import { describe, expect, it, beforeAll } from "vitest"; const backend = testBackend(); diff --git a/libs/sdk-backend-tiger/tests/integrated/entitlements.test.ts b/libs/sdk-backend-tiger/tests/integrated/entitlements.test.ts index a4f3defc2b0..baf901090ef 100644 --- a/libs/sdk-backend-tiger/tests/integrated/entitlements.test.ts +++ b/libs/sdk-backend-tiger/tests/integrated/entitlements.test.ts @@ -1,5 +1,6 @@ // (C) 2022 GoodData Corporation -import { describe, beforeAll, expect, it } from "vitest"; +import { beforeAll, describe, expect, it } from "vitest"; + import { testBackend } from "./backend.js"; const backend = testBackend(); diff --git a/libs/sdk-backend-tiger/tests/integrated/insights.test.ts b/libs/sdk-backend-tiger/tests/integrated/insights.test.ts index 92a4b40395c..f295236ef1e 100644 --- a/libs/sdk-backend-tiger/tests/integrated/insights.test.ts +++ b/libs/sdk-backend-tiger/tests/integrated/insights.test.ts @@ -1,6 +1,7 @@ // (C) 2022 GoodData Corporation -import { describe, beforeAll, expect, it } from "vitest"; -import { testBackend, testWorkspace, doSanitizeCommon } from "./backend.js"; +import { beforeAll, describe, expect, it } from "vitest"; + +import { doSanitizeCommon, testBackend, testWorkspace } from "./backend.js"; const backend = testBackend(); beforeAll(async () => { diff --git a/libs/sdk-backend-tiger/tsconfig.build.json b/libs/sdk-backend-tiger/tsconfig.build.json index 16f78785951..fcd08c6ef4c 100644 --- a/libs/sdk-backend-tiger/tsconfig.build.json +++ b/libs/sdk-backend-tiger/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts", "**/*.fixture.ts", "**/*.fixtures.ts", "**/fixtures/**"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-backend-tiger/tsconfig.json b/libs/sdk-backend-tiger/tsconfig.json index 39d5d472fd4..7836e95e227 100644 --- a/libs/sdk-backend-tiger/tsconfig.json +++ b/libs/sdk-backend-tiger/tsconfig.json @@ -1,9 +1,6 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.base.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, "skipLibCheck": true } diff --git a/libs/sdk-backend-tiger/vitest.config.ts b/libs/sdk-backend-tiger/vitest.config.ts index c618dccd054..7cfa7598308 100644 --- a/libs/sdk-backend-tiger/vitest.config.ts +++ b/libs/sdk-backend-tiger/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { setupFiles: "./vitest.setup.ts", diff --git a/libs/sdk-backend-tiger/vitest.integrated.config.ts b/libs/sdk-backend-tiger/vitest.integrated.config.ts index 7b54d3db1e2..89aa9aebf85 100644 --- a/libs/sdk-backend-tiger/vitest.integrated.config.ts +++ b/libs/sdk-backend-tiger/vitest.integrated.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { include: ["**/tests/integrated/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], diff --git a/libs/sdk-embedding/package.json b/libs/sdk-embedding/package.json index cebd9a16a7e..901eff37a7f 100644 --- a/libs/sdk-embedding/package.json +++ b/libs/sdk-embedding/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-embedding", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData Embedding APIs", "repository": { "type": "git", @@ -34,11 +34,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/libs/sdk-embedding/tsconfig.build.json b/libs/sdk-embedding/tsconfig.build.json index 16f78785951..2541f432f49 100644 --- a/libs/sdk-embedding/tsconfig.build.json +++ b/libs/sdk-embedding/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-embedding/tsconfig.json b/libs/sdk-embedding/tsconfig.json index 39d5d472fd4..7836e95e227 100644 --- a/libs/sdk-embedding/tsconfig.json +++ b/libs/sdk-embedding/tsconfig.json @@ -1,9 +1,6 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.base.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, "skipLibCheck": true } diff --git a/libs/sdk-embedding/vitest.config.ts b/libs/sdk-embedding/vitest.config.ts index bc3487d292a..0f60e876e39 100644 --- a/libs/sdk-embedding/vitest.config.ts +++ b/libs/sdk-embedding/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { setupFiles: "./vitest.setup.ts", diff --git a/libs/sdk-model/__mocks__/catalog.ts b/libs/sdk-model/__mocks__/catalog.ts index e42c1f679ee..aa452bd7fd9 100644 --- a/libs/sdk-model/__mocks__/catalog.ts +++ b/libs/sdk-model/__mocks__/catalog.ts @@ -1,11 +1,11 @@ // (C) 2019 GoodData Corporation -import { ICatalogAttribute } from "../src/ldm/catalog/attribute/index.js"; -import { ICatalogMeasure } from "../src/ldm/catalog/measure/index.js"; -import { ICatalogFact } from "../src/ldm/catalog/fact/index.js"; -import { ICatalogDateDataset } from "../src/ldm/catalog/dateDataset/index.js"; -import { IAttributeDisplayFormMetadataObject } from "../src/ldm/metadata/attributeDisplayForm/index.js"; import { idRef } from "../src/index.js"; +import { type ICatalogAttribute } from "../src/ldm/catalog/attribute/index.js"; +import { type ICatalogDateDataset } from "../src/ldm/catalog/dateDataset/index.js"; +import { type ICatalogFact } from "../src/ldm/catalog/fact/index.js"; +import { type ICatalogMeasure } from "../src/ldm/catalog/measure/index.js"; +import { type IAttributeDisplayFormMetadataObject } from "../src/ldm/metadata/attributeDisplayForm/index.js"; const catalogDisplayForm: IAttributeDisplayFormMetadataObject = { type: "displayForm", diff --git a/libs/sdk-model/__mocks__/insights.ts b/libs/sdk-model/__mocks__/insights.ts index 618bae0b4ef..c75d8cf9658 100644 --- a/libs/sdk-model/__mocks__/insights.ts +++ b/libs/sdk-model/__mocks__/insights.ts @@ -1,17 +1,16 @@ // (C) 2019 GoodData Corporation -import { identity } from "lodash-es"; -import { IBucket } from "../src/execution/buckets/index.js"; -import { IFilter } from "../src/execution/filter/index.js"; -import { ISortItem, VisualizationProperties, uriRef } from "../src/index.js"; -import { IInsight } from "../src/insight/index.js"; +import { type IBucket } from "../src/execution/buckets/index.js"; +import { type IFilter } from "../src/execution/filter/index.js"; +import { type ISortItem, type VisualizationProperties, uriRef } from "../src/index.js"; +import { type IInsight } from "../src/insight/index.js"; /* * Factory & builder for insight instances. Keeping it in test infrastructure for now, will see later on * whether we should move it to prod code and expose on public API. */ -export function newInsight(visClassId: string, modifications: InsightsModifications = identity): IInsight { +export function newInsight(visClassId: string, modifications: InsightsModifications = (i) => i): IInsight { const builder = new InsightBuilder(visClassId); return modifications(builder).build(); diff --git a/libs/sdk-model/__mocks__/model.ts b/libs/sdk-model/__mocks__/model.ts index 9ad1291c59e..f15fb087f21 100644 --- a/libs/sdk-model/__mocks__/model.ts +++ b/libs/sdk-model/__mocks__/model.ts @@ -2,12 +2,12 @@ // THIS FILE WAS AUTO-GENERATED USING CATALOG EXPORTER; YOU SHOULD NOT EDIT THIS FILE; GENERATE TIME: 2019-10-17T14:42:41.833Z; import { + type IAttribute, + type IMeasure, + type IMeasureDefinition, + modifySimpleMeasure, newAttribute, newMeasure, - IAttribute, - IMeasure, - IMeasureDefinition, - modifySimpleMeasure, newNegativeAttributeFilter, } from "../src/index.js"; diff --git a/libs/sdk-model/package.json b/libs/sdk-model/package.json index e856b5f5aa7..b24d17107f6 100644 --- a/libs/sdk-model/package.json +++ b/libs/sdk-model/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-model", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData Model definitions used by UI components and Backend SPI", "repository": { "type": "git", @@ -33,11 +33,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/libs/sdk-model/tsconfig.build.json b/libs/sdk-model/tsconfig.build.json index 16f78785951..cd9d69b6380 100644 --- a/libs/sdk-model/tsconfig.build.json +++ b/libs/sdk-model/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts", "**/*.fixtures.ts"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-model/tsconfig.json b/libs/sdk-model/tsconfig.json index f6ae8005d4c..bb76f7af3b5 100644 --- a/libs/sdk-model/tsconfig.json +++ b/libs/sdk-model/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.base.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-model/vitest-matchers.d.ts b/libs/sdk-model/vitest-matchers.d.ts index a4ef0c112cc..cfe0c048f07 100644 --- a/libs/sdk-model/vitest-matchers.d.ts +++ b/libs/sdk-model/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-model/vitest.config.ts b/libs/sdk-model/vitest.config.ts index bc3487d292a..0f60e876e39 100644 --- a/libs/sdk-model/vitest.config.ts +++ b/libs/sdk-model/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { setupFiles: "./vitest.setup.ts", diff --git a/libs/sdk-ui-all/package.json b/libs/sdk-ui-all/package.json index 969c39357b0..670a6fe2e4a 100644 --- a/libs/sdk-ui-all/package.json +++ b/libs/sdk-ui-all/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-all", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK - All-In-One", "repository": { "type": "git", @@ -26,17 +26,17 @@ "_phase:build": "npm run build", "_phase:validate": "npm run validate", "api-extractor": "mkdir -p api && [ -z \"${CI}\" ] && (api-extractor run -l) || (api-extractor run)", - "build": "tsc -p tsconfig.json && npm run api-extractor", + "build": "tsc -p tsconfig.build.json && npm run api-extractor", "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "mkdir -p ci/results && depcruise --validate .dependency-cruiser.cjs --output-type err-html src/ >./ci/results/dep-cruiser.html", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "prepack": "cp -f ../../NOTICE ./NOTICE", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "validate": "export BROWSERSLIST_IGNORE_OLD_DATA=true && npm run dep-cruiser && npm run eslint && npm run prettier-check" + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", + "validate": "tsc && export BROWSERSLIST_IGNORE_OLD_DATA=true && npm run dep-cruiser && npm run eslint && npm run prettier-check" }, "dependencies": { "@gooddata/sdk-backend-spi": "workspace:*", diff --git a/libs/sdk-ui-all/tsconfig.build.json b/libs/sdk-ui-all/tsconfig.build.json new file mode 100644 index 00000000000..8ece933ac5b --- /dev/null +++ b/libs/sdk-ui-all/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.base.json", + "include": ["src/**/*"], + "compilerOptions": { + "baseUrl": ".", + "rootDir": "./src", + "outDir": "./esm" + } +} diff --git a/libs/sdk-ui-all/tsconfig.json b/libs/sdk-ui-all/tsconfig.json index 3d1972b59c7..70fa84567a8 100644 --- a/libs/sdk-ui-all/tsconfig.json +++ b/libs/sdk-ui-all/tsconfig.json @@ -1,11 +1,6 @@ { "extends": "../tsconfig.base.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], "compilerOptions": { - "baseUrl": ".", - "rootDir": "./src", - "outDir": "./esm", - "strict": true + "noEmit": true } } diff --git a/libs/sdk-ui-catalog/package.json b/libs/sdk-ui-catalog/package.json index 5d7c764c4dd..4b6be5c62d8 100644 --- a/libs/sdk-ui-catalog/package.json +++ b/libs/sdk-ui-catalog/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-catalog", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK - Analytics Catalog", "repository": { "type": "git", @@ -40,11 +40,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint $npm_package_config_eslint", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml $npm_package_config_eslint", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --load-path=node_modules styles/scss:styles/css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", @@ -58,9 +58,6 @@ "validate-locales-ci": "i18n-toolkit", "validate-theming": "npm run scss && node scripts/validateCss.js" }, - "config": { - "eslint": "-c .eslintrc.cjs --ext ts,tsx src/" - }, "dependencies": { "@gooddata/sdk-backend-spi": "workspace:*", "@gooddata/sdk-model": "workspace:*", diff --git a/libs/sdk-ui-catalog/scripts/validateCss.js b/libs/sdk-ui-catalog/scripts/validateCss.js index 69259a2904c..831159dd716 100644 --- a/libs/sdk-ui-catalog/scripts/validateCss.js +++ b/libs/sdk-ui-catalog/scripts/validateCss.js @@ -1,5 +1,7 @@ // (C) 2024-2025 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-catalog/src/catalogDetail/CatalogDetailMetricSettings.tsx b/libs/sdk-ui-catalog/src/catalogDetail/CatalogDetailMetricSettings.tsx index f5fd9d67983..47f251cee2e 100644 --- a/libs/sdk-ui-catalog/src/catalogDetail/CatalogDetailMetricSettings.tsx +++ b/libs/sdk-ui-catalog/src/catalogDetail/CatalogDetailMetricSettings.tsx @@ -1,4 +1,4 @@ -// (C) 2025 GoodData Corporation +// (C) 2025-2026 GoodData Corporation import { memo, useCallback } from "react"; @@ -23,8 +23,10 @@ const metricTypeMessages = defineMessages({ currency: { id: "metricComponent.metricType.currency" }, }); +const DEFAULT_METRIC_TYPE_OPTION = { value: undefined, message: metricTypeMessages.unspecified }; + const METRIC_TYPE_OPTIONS: Array<{ value: MetricType | undefined; message: MessageDescriptor }> = [ - { value: undefined, message: metricTypeMessages.unspecified }, + DEFAULT_METRIC_TYPE_OPTION, { value: "CURRENCY", message: metricTypeMessages.currency }, ]; @@ -136,8 +138,8 @@ const MetricTypeDropdown = memo(function MetricTypeDropdown({ onMetricTypeChange, }: MetricTypeDropdownProps) { const intl = useIntl(); - const selectedOption = (METRIC_TYPE_OPTIONS.find((option) => option.value === metricType) ?? - METRIC_TYPE_OPTIONS[0])!; + const selectedOption = + METRIC_TYPE_OPTIONS.find((option) => option.value === metricType) ?? DEFAULT_METRIC_TYPE_OPTION; return ( Promise const resolveMessagesInternal = async (locale: string): Promise => { const catalogLoader = asyncCatalogTranslations[locale] || asyncCatalogTranslations["en-US"]; const [catalogTranslations, sdkUiTranslations] = await Promise.all([ + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion catalogLoader!(), resolveMessagesSdkUi(locale), ]); diff --git a/libs/sdk-ui-catalog/tsconfig.build.json b/libs/sdk-ui-catalog/tsconfig.build.json index 484a9e4c8ae..829f6bfa2b1 100644 --- a/libs/sdk-ui-catalog/tsconfig.build.json +++ b/libs/sdk-ui-catalog/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json", "scripts/validateCss.js"], + "exclude": ["**/*.test.ts", "**/*.test.tsx"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-catalog/tsconfig.json b/libs/sdk-ui-catalog/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-catalog/tsconfig.json +++ b/libs/sdk-ui-catalog/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-catalog/vitest-matchers.d.ts b/libs/sdk-ui-catalog/vitest-matchers.d.ts index a4ef0c112cc..12836cacf58 100644 --- a/libs/sdk-ui-catalog/vitest-matchers.d.ts +++ b/libs/sdk-ui-catalog/vitest-matchers.d.ts @@ -4,9 +4,11 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers - interface Assertion extends TestingLibraryMatchers {} + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers - interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } // This ensures the file is treated as a module diff --git a/libs/sdk-ui-catalog/vitest.config.ts b/libs/sdk-ui-catalog/vitest.config.ts index 5c2e5a4b1e5..c11040cdf67 100644 --- a/libs/sdk-ui-catalog/vitest.config.ts +++ b/libs/sdk-ui-catalog/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { environment: "happy-dom", diff --git a/libs/sdk-ui-catalog/vitest.setup.ts b/libs/sdk-ui-catalog/vitest.setup.ts index f8e682afd90..d937c19f234 100644 --- a/libs/sdk-ui-catalog/vitest.setup.ts +++ b/libs/sdk-ui-catalog/vitest.setup.ts @@ -1,24 +1,18 @@ // (C) 2023-2025 GoodData Corporation -import { cleanup } from "@testing-library/react"; -import { expect, afterEach, vi } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ -// eslint-disable-next-line import/no-extraneous-dependencies +import { cleanup } from "@testing-library/react"; +import { afterEach, expect, vi } from "vitest"; import * as matchers from "vitest-dom/dist/matchers.js"; -// eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // @ts-expect-error This is correct + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + interface Assertion extends TestingLibraryMatchers {} + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } @@ -69,7 +63,7 @@ global.IntersectionObserver = class IntersectionObserver { return null; } takeRecords() { - return null; + return []; } root = null; rootMargin = ""; diff --git a/libs/sdk-ui-charts/__mocks__/fixtures.ts b/libs/sdk-ui-charts/__mocks__/fixtures.ts index a422d7fdb78..251aad0d3bc 100644 --- a/libs/sdk-ui-charts/__mocks__/fixtures.ts +++ b/libs/sdk-ui-charts/__mocks__/fixtures.ts @@ -1,8 +1,8 @@ // (C) 2007-2019 GoodData Corporation -import { LegacyExecutionRecording, legacyRecordedDataView } from "@gooddata/sdk-backend-mockingbird"; +import { type LegacyExecutionRecording, legacyRecordedDataView } from "@gooddata/sdk-backend-mockingbird"; +import { DataViewFacade } from "@gooddata/sdk-ui"; import * as rec from "./recordings/playlist.js"; -import { DataViewFacade } from "@gooddata/sdk-ui"; function legacyRecordedDataFacade(rec: LegacyExecutionRecording): DataViewFacade { return DataViewFacade.for(legacyRecordedDataView(rec)); diff --git a/libs/sdk-ui-charts/__mocks__/recordings.ts b/libs/sdk-ui-charts/__mocks__/recordings.ts index 4968e241665..9ec2c1f582f 100644 --- a/libs/sdk-ui-charts/__mocks__/recordings.ts +++ b/libs/sdk-ui-charts/__mocks__/recordings.ts @@ -1,7 +1,7 @@ // (C) 2020 GoodData Corporation +import { type ScenarioRecording, recordedDataView } from "@gooddata/sdk-backend-mockingbird"; import { DataViewFacade } from "@gooddata/sdk-ui"; -import { ScenarioRecording, recordedDataView } from "@gooddata/sdk-backend-mockingbird"; export function recordedDataFacade(rec: ScenarioRecording): DataViewFacade { return DataViewFacade.for(recordedDataView(rec)); diff --git a/libs/sdk-ui-charts/package.json b/libs/sdk-ui-charts/package.json index debc6778091..bb38f85da9b 100644 --- a/libs/sdk-ui-charts/package.json +++ b/libs/sdk-ui-charts/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-charts", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData.UI SDK - Charts", "repository": { "type": "git", @@ -59,12 +59,12 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage styles/css *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "prepack": "cp -f ../../NOTICE ./NOTICE", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --load-path=node_modules styles/scss:styles/css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", diff --git a/libs/sdk-ui-charts/scripts/validateCss.js b/libs/sdk-ui-charts/scripts/validateCss.js index 4ef05e7b669..84063627df7 100644 --- a/libs/sdk-ui-charts/scripts/validateCss.js +++ b/libs/sdk-ui-charts/scripts/validateCss.js @@ -1,5 +1,7 @@ // (C) 2024 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-charts/tsconfig.build.json b/libs/sdk-ui-charts/tsconfig.build.json index 58a138245fc..e90b10a44a9 100644 --- a/libs/sdk-ui-charts/tsconfig.build.json +++ b/libs/sdk-ui-charts/tsconfig.build.json @@ -1,7 +1,15 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json", "scripts/validateCss.js", "src/highcharts.d.ts"], + "exclude": [ + "**/*.test.ts", + "**/*.test.tsx", + "**/*.fixture.ts", + "**/*.fixtures.ts", + "**/test/helper.ts", + "**/tests/MockProvider.ts", + "**/tests/*Mock.ts" + ], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-charts/tsconfig.json b/libs/sdk-ui-charts/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-charts/tsconfig.json +++ b/libs/sdk-ui-charts/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-charts/vitest-matchers.d.ts b/libs/sdk-ui-charts/vitest-matchers.d.ts index a4ef0c112cc..9da53bff975 100644 --- a/libs/sdk-ui-charts/vitest-matchers.d.ts +++ b/libs/sdk-ui-charts/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-charts/vitest.config.ts b/libs/sdk-ui-charts/vitest.config.ts index ff816ae9994..8d6490faa94 100644 --- a/libs/sdk-ui-charts/vitest.config.ts +++ b/libs/sdk-ui-charts/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { // Use happy-dom for faster performance than jsdom @@ -9,13 +10,13 @@ export default defineConfig({ pool: "threads", poolOptions: { threads: { - maxThreads: 8, // Thread count for CI + maxThreads: 8, // Thread count for CI minThreads: 4, }, }, // Improve performance with these options isolate: true, - maxConcurrency: 8, // Concurrency for CI + maxConcurrency: 8, // Concurrency for CI // Disable slow operations when not needed globals: false, // Speed up test runs by avoiding unnecessary operations @@ -26,9 +27,9 @@ export default defineConfig({ features: { FetchAPI: false, WebSocket: false, - ProcessExternalResources: false - } + ProcessExternalResources: false, + }, }, - } + }, }, }); diff --git a/libs/sdk-ui-charts/vitest.setup.ts b/libs/sdk-ui-charts/vitest.setup.ts index 3832fca3768..d02db954e07 100644 --- a/libs/sdk-ui-charts/vitest.setup.ts +++ b/libs/sdk-ui-charts/vitest.setup.ts @@ -1,24 +1,16 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; -import { expect, afterEach } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - -// eslint-disable-next-line import/no-extraneous-dependencies +import { afterEach, expect } from "vitest"; import * as matchers from "vitest-dom/dist/matchers.js"; -// eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-dashboard/.eslintignore b/libs/sdk-ui-dashboard/.eslintignore deleted file mode 100644 index e54cfec027f..00000000000 --- a/libs/sdk-ui-dashboard/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -# (C) 2025 GoodData Corporation -__version.ts diff --git a/libs/sdk-ui-dashboard/package.json b/libs/sdk-ui-dashboard/package.json index 52df61290f0..20254613003 100644 --- a/libs/sdk-ui-dashboard/package.json +++ b/libs/sdk-ui-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-dashboard", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK - Dashboard Component", "repository": { "type": "git", @@ -44,13 +44,13 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "prepack": "cp -f ../../NOTICE ./NOTICE", "prepublishOnly": "npm run build", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --load-path=node_modules styles/scss:styles/css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", diff --git a/libs/sdk-ui-dashboard/scripts/validateCss.js b/libs/sdk-ui-dashboard/scripts/validateCss.js index 4ef05e7b669..84063627df7 100644 --- a/libs/sdk-ui-dashboard/scripts/validateCss.js +++ b/libs/sdk-ui-dashboard/scripts/validateCss.js @@ -1,5 +1,7 @@ // (C) 2024 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-dashboard/src/_staging/layout/test/coordinates.test.ts b/libs/sdk-ui-dashboard/src/_staging/layout/test/coordinates.test.ts index 8014207667d..0dbc7257ca9 100644 --- a/libs/sdk-ui-dashboard/src/_staging/layout/test/coordinates.test.ts +++ b/libs/sdk-ui-dashboard/src/_staging/layout/test/coordinates.test.ts @@ -4,9 +4,8 @@ import { describe, expect, it } from "vitest"; import { type IDashboardLayout } from "@gooddata/sdk-model"; -import { type ExtendedDashboardWidget } from "src/model/index.js"; - import { NESTED_LAYOUT } from "./coordinates.mock.js"; +import { type ExtendedDashboardWidget } from "../../../model/index.js"; import { type ILayoutItemPath, type ILayoutSectionPath } from "../../../types.js"; import { areItemsInSameSection, diff --git a/libs/sdk-ui-dashboard/tsconfig.build.json b/libs/sdk-ui-dashboard/tsconfig.build.json index 5befbbac081..ab3e0ce4e24 100644 --- a/libs/sdk-ui-dashboard/tsconfig.build.json +++ b/libs/sdk-ui-dashboard/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json", "scripts/validateCss.js"], + "exclude": ["**/test", "**/tests"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-dashboard/tsconfig.json b/libs/sdk-ui-dashboard/tsconfig.json index f6ae8005d4c..a7e5c43372a 100644 --- a/libs/sdk-ui-dashboard/tsconfig.json +++ b/libs/sdk-ui-dashboard/tsconfig.json @@ -1,9 +1,6 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, "types": ["./vitest-matchers.d.ts"], "skipLibCheck": true diff --git a/libs/sdk-ui-dashboard/vitest-matchers.d.ts b/libs/sdk-ui-dashboard/vitest-matchers.d.ts index a4ef0c112cc..9da53bff975 100644 --- a/libs/sdk-ui-dashboard/vitest-matchers.d.ts +++ b/libs/sdk-ui-dashboard/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-dashboard/vitest.config.ts b/libs/sdk-ui-dashboard/vitest.config.ts index 2eb94d5513f..8d6490faa94 100644 --- a/libs/sdk-ui-dashboard/vitest.config.ts +++ b/libs/sdk-ui-dashboard/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { // Use happy-dom for faster performance than jsdom @@ -9,13 +10,13 @@ export default defineConfig({ pool: "threads", poolOptions: { threads: { - maxThreads: 8, // Thread count for CI + maxThreads: 8, // Thread count for CI minThreads: 4, }, }, // Improve performance with these options isolate: true, - maxConcurrency: 8, // Concurrency for CI + maxConcurrency: 8, // Concurrency for CI // Disable slow operations when not needed globals: false, // Speed up test runs by avoiding unnecessary operations @@ -26,10 +27,9 @@ export default defineConfig({ features: { FetchAPI: false, WebSocket: false, - ProcessExternalResources: false - } + ProcessExternalResources: false, + }, }, - } + }, }, }); - diff --git a/libs/sdk-ui-dashboard/vitest.setup.ts b/libs/sdk-ui-dashboard/vitest.setup.ts index f834a5611f7..8a1c569c1c3 100644 --- a/libs/sdk-ui-dashboard/vitest.setup.ts +++ b/libs/sdk-ui-dashboard/vitest.setup.ts @@ -1,24 +1,16 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; import { afterEach, expect } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - -// eslint-disable-next-line import/no-extraneous-dependencies import * as matchers from "vitest-dom/dist/matchers.js"; -// eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-interface,@typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-interface,@typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-ext/package.json b/libs/sdk-ui-ext/package.json index 83407db9da9..8295a8b840c 100644 --- a/libs/sdk-ui-ext/package.json +++ b/libs/sdk-ui-ext/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-ext", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData.UI SDK - Extensions", "repository": { "type": "git", @@ -45,12 +45,12 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "prepack": "cp -f ../../NOTICE ./NOTICE", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --load-path=node_modules styles/internal/scss:styles/internal/css && sass --load-path=node_modules styles/scss:styles/css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", diff --git a/libs/sdk-ui-ext/scripts/validateCss.js b/libs/sdk-ui-ext/scripts/validateCss.js index 20df3bc6bd2..b5fb31e3fd7 100644 --- a/libs/sdk-ui-ext/scripts/validateCss.js +++ b/libs/sdk-ui-ext/scripts/validateCss.js @@ -1,5 +1,7 @@ // (C) 2024 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile, validateThemingInCssFolder } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-ext/src/internal/components/pluggableVisualizations/scatterPlot/tests/PluggableScatterPlot.test.tsx b/libs/sdk-ui-ext/src/internal/components/pluggableVisualizations/scatterPlot/tests/PluggableScatterPlot.test.tsx index cafa295b14f..c22f14e56c4 100644 --- a/libs/sdk-ui-ext/src/internal/components/pluggableVisualizations/scatterPlot/tests/PluggableScatterPlot.test.tsx +++ b/libs/sdk-ui-ext/src/internal/components/pluggableVisualizations/scatterPlot/tests/PluggableScatterPlot.test.tsx @@ -4,8 +4,7 @@ import { afterEach, describe, expect, it, vi } from "vitest"; import { dummyBackend } from "@gooddata/sdk-backend-mockingbird"; -import { type IVisConstruct } from "src/internal/interfaces/Visualization.js"; - +import { type IVisConstruct } from "../../../../interfaces/Visualization.js"; import * as referencePointMocks from "../../../../tests/mocks/referencePointMocks.js"; import * as testMocks from "../../../../tests/mocks/testMocks.js"; import { DEFAULT_LANGUAGE, DEFAULT_MESSAGES } from "../../../../utils/translations.js"; diff --git a/libs/sdk-ui-ext/src/internal/components/tests/__snapshots__/VisualizationCatalog.test.ts.snap b/libs/sdk-ui-ext/src/internal/components/tests/__snapshots__/VisualizationCatalog.test.ts.snap index e7532bd6be4..34a27e61723 100644 --- a/libs/sdk-ui-ext/src/internal/components/tests/__snapshots__/VisualizationCatalog.test.ts.snap +++ b/libs/sdk-ui-ext/src/internal/components/tests/__snapshots__/VisualizationCatalog.test.ts.snap @@ -48751,6 +48751,48 @@ export function MyComponent() { " `; +exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - cell text wrapping enabled 1`] = ` +"import React from "react"; +import { IAttribute, IAttributeOrMeasure, idRef, newAttribute, newMeasure } from "@gooddata/sdk-model"; +import { IPivotTableConfig, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; + +const measures: IAttributeOrMeasure[] = [ + newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), + newMeasure(idRef("e519fa2a-86c3-4e32-8313-0c03062348j3", "measure"), m => m.localId("m_e519fa2a_86c3_4e32_8313_0c03062348j3")) +]; +const rows: IAttribute[] = [ + newAttribute(idRef("label.f_product.product.name", "displayForm"), a => a.alias("Product Name With Very Long Title For Wrapping").localId("a_label.f_product.product.name")) +]; +const config: IPivotTableConfig = { + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAttributeColumn("a_label.f_product.product.name", 60) + ] + }, + menu: { + aggregations: true, + aggregationsSubMenu: true, + aggregationsSubMenuForRows: true + }, + separators: {decimal: ".", thousand: ","} +}; +const style = {height: 400}; + +export function MyComponent() { + return ( +
+ +
+ ); +} +" +`; + exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - empty values 1`] = ` "import React from "react"; import { IAttribute, IAttributeOrMeasure, idRef, newAttribute, newMeasure } from "@gooddata/sdk-model"; @@ -48793,6 +48835,276 @@ export function MyComponent() { " `; +exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - grand totals at bottom (not pinned) 1`] = ` +"import React from "react"; +import { IAttribute, IAttributeOrMeasure, idRef, ITotal, newAttribute, newMeasure, newTotal } from "@gooddata/sdk-model"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; + +const measures: IAttributeOrMeasure[] = [ + newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), + newMeasure(idRef("e519fa2a-86c3-4e32-8313-0c03062348j3", "measure"), m => m.localId("m_e519fa2a_86c3_4e32_8313_0c03062348j3")) +]; +const rows: IAttribute[] = [ + newAttribute(idRef("label.f_product.product.name", "displayForm"), a => a.localId("a_label.f_product.product.name")), + newAttribute(idRef("f_owner.department_id", "displayForm"), a => a.localId("a_f_owner.department_id")) +]; +const columns: IAttribute[] = [ + newAttribute(idRef("f_opportunitysnapshot.forecastcategory_id", "displayForm"), a => a.localId("a_f_opportunitysnapshot.forecastcategory_id")), + newAttribute(idRef("f_owner.region_id", "displayForm"), a => a.localId("a_f_owner.region_id")) +]; +const totals: ITotal[] = [ + newTotal("sum", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_label.f_product.product.name"), + newTotal("sum", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name") +]; +const config: IPivotTableConfig = { + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120), + newWidthForAttributeColumn("a_f_owner.department_id", 120) + ] + }, + menu: { + aggregations: true, + aggregationsSubMenu: true, + aggregationsSubMenuForRows: true + }, + separators: {decimal: ".", thousand: ","} +}; +const style = {height: 400}; + +export function MyComponent() { + return ( +
+ +
+ ); +} +" +`; + +exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - grand totals at top (not pinned) 1`] = ` +"import React from "react"; +import { IAttribute, IAttributeOrMeasure, idRef, ITotal, newAttribute, newMeasure, newTotal } from "@gooddata/sdk-model"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; + +const measures: IAttributeOrMeasure[] = [ + newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), + newMeasure(idRef("e519fa2a-86c3-4e32-8313-0c03062348j3", "measure"), m => m.localId("m_e519fa2a_86c3_4e32_8313_0c03062348j3")) +]; +const rows: IAttribute[] = [ + newAttribute(idRef("label.f_product.product.name", "displayForm"), a => a.localId("a_label.f_product.product.name")), + newAttribute(idRef("f_owner.department_id", "displayForm"), a => a.localId("a_f_owner.department_id")) +]; +const columns: IAttribute[] = [ + newAttribute(idRef("f_opportunitysnapshot.forecastcategory_id", "displayForm"), a => a.localId("a_f_opportunitysnapshot.forecastcategory_id")), + newAttribute(idRef("f_owner.region_id", "displayForm"), a => a.localId("a_f_owner.region_id")) +]; +const totals: ITotal[] = [ + newTotal("sum", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_label.f_product.product.name"), + newTotal("sum", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name") +]; +const config: IPivotTableConfig = { + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120), + newWidthForAttributeColumn("a_f_owner.department_id", 120) + ] + }, + menu: { + aggregations: true, + aggregationsSubMenu: true, + aggregationsSubMenuForRows: true + }, + separators: {decimal: ".", thousand: ","} +}; +const style = {height: 400}; + +export function MyComponent() { + return ( +
+ +
+ ); +} +" +`; + +exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - grand totals pinned at bottom (default) 1`] = ` +"import React from "react"; +import { IAttribute, IAttributeOrMeasure, idRef, ITotal, newAttribute, newMeasure, newTotal } from "@gooddata/sdk-model"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; + +const measures: IAttributeOrMeasure[] = [ + newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), + newMeasure(idRef("e519fa2a-86c3-4e32-8313-0c03062348j3", "measure"), m => m.localId("m_e519fa2a_86c3_4e32_8313_0c03062348j3")) +]; +const rows: IAttribute[] = [ + newAttribute(idRef("label.f_product.product.name", "displayForm"), a => a.localId("a_label.f_product.product.name")), + newAttribute(idRef("f_owner.department_id", "displayForm"), a => a.localId("a_f_owner.department_id")) +]; +const columns: IAttribute[] = [ + newAttribute(idRef("f_opportunitysnapshot.forecastcategory_id", "displayForm"), a => a.localId("a_f_opportunitysnapshot.forecastcategory_id")), + newAttribute(idRef("f_owner.region_id", "displayForm"), a => a.localId("a_f_owner.region_id")) +]; +const totals: ITotal[] = [ + newTotal("sum", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_label.f_product.product.name"), + newTotal("sum", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name") +]; +const config: IPivotTableConfig = { + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120), + newWidthForAttributeColumn("a_f_owner.department_id", 120) + ] + }, + menu: { + aggregations: true, + aggregationsSubMenu: true, + aggregationsSubMenuForRows: true + }, + separators: {decimal: ".", thousand: ","} +}; +const style = {height: 400}; + +export function MyComponent() { + return ( +
+ +
+ ); +} +" +`; + +exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - grand totals pinned at top 1`] = ` +"import React from "react"; +import { IAttribute, IAttributeOrMeasure, idRef, ITotal, newAttribute, newMeasure, newTotal } from "@gooddata/sdk-model"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; + +const measures: IAttributeOrMeasure[] = [ + newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), + newMeasure(idRef("e519fa2a-86c3-4e32-8313-0c03062348j3", "measure"), m => m.localId("m_e519fa2a_86c3_4e32_8313_0c03062348j3")) +]; +const rows: IAttribute[] = [ + newAttribute(idRef("label.f_product.product.name", "displayForm"), a => a.localId("a_label.f_product.product.name")), + newAttribute(idRef("f_owner.department_id", "displayForm"), a => a.localId("a_f_owner.department_id")) +]; +const columns: IAttribute[] = [ + newAttribute(idRef("f_opportunitysnapshot.forecastcategory_id", "displayForm"), a => a.localId("a_f_opportunitysnapshot.forecastcategory_id")), + newAttribute(idRef("f_owner.region_id", "displayForm"), a => a.localId("a_f_owner.region_id")) +]; +const totals: ITotal[] = [ + newTotal("sum", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_label.f_product.product.name"), + newTotal("sum", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name") +]; +const config: IPivotTableConfig = { + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120), + newWidthForAttributeColumn("a_f_owner.department_id", 120) + ] + }, + menu: { + aggregations: true, + aggregationsSubMenu: true, + aggregationsSubMenuForRows: true + }, + separators: {decimal: ".", thousand: ","} +}; +const style = {height: 400}; + +export function MyComponent() { + return ( +
+ +
+ ); +} +" +`; + +exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - header text wrapping enabled 1`] = ` +"import React from "react"; +import { IAttribute, IAttributeOrMeasure, idRef, newAttribute, newMeasure } from "@gooddata/sdk-model"; +import { IPivotTableConfig, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; + +const measures: IAttributeOrMeasure[] = [ + newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), + newMeasure(idRef("e519fa2a-86c3-4e32-8313-0c03062348j3", "measure"), m => m.localId("m_e519fa2a_86c3_4e32_8313_0c03062348j3")) +]; +const rows: IAttribute[] = [ + newAttribute(idRef("label.f_product.product.name", "displayForm"), a => a.alias("Product Name With Very Long Title For Wrapping").localId("a_label.f_product.product.name")) +]; +const config: IPivotTableConfig = { + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAttributeColumn("a_label.f_product.product.name", 60) + ] + }, + menu: { + aggregations: true, + aggregationsSubMenu: true, + aggregationsSubMenuForRows: true + }, + separators: {decimal: ".", thousand: ","} +}; +const style = {height: 400}; + +export function MyComponent() { + return ( +
+ +
+ ); +} +" +`; + exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - multiple measures and no columns, with totals 1`] = ` "import React from "react"; import { IAttribute, IAttributeOrMeasure, idRef, ITotal, newAttribute, newMeasure, newTotal } from "@gooddata/sdk-model"; @@ -48975,6 +49287,115 @@ export function MyComponent() { " `; +exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - pagination with 5 rows per page 1`] = ` +"import React from "react"; +import { IAttribute, IAttributeOrMeasure, idRef, newAttribute, newMeasure } from "@gooddata/sdk-model"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; + +const measures: IAttributeOrMeasure[] = [ + newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), + newMeasure(idRef("e519fa2a-86c3-4e32-8313-0c03062348j3", "measure"), m => m.localId("m_e519fa2a_86c3_4e32_8313_0c03062348j3")) +]; +const rows: IAttribute[] = [ + newAttribute(idRef("label.f_product.product.name", "displayForm"), a => a.localId("a_label.f_product.product.name")), + newAttribute(idRef("f_owner.department_id", "displayForm"), a => a.localId("a_f_owner.department_id")) +]; +const columns: IAttribute[] = [ + newAttribute(idRef("f_opportunitysnapshot.forecastcategory_id", "displayForm"), a => a.localId("a_f_opportunitysnapshot.forecastcategory_id")), + newAttribute(idRef("f_owner.region_id", "displayForm"), a => a.localId("a_f_owner.region_id")) +]; +const config: IPivotTableConfig = { + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120), + newWidthForAttributeColumn("a_f_owner.department_id", 120) + ] + }, + menu: { + aggregations: true, + aggregationsSubMenu: true, + aggregationsSubMenuForRows: true + }, + separators: {decimal: ".", thousand: ","} +}; +const style = {height: 400}; + +export function MyComponent() { + return ( +
+ +
+ ); +} +" +`; + +exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - pagination with 5 rows per page and totals 1`] = ` +"import React from "react"; +import { IAttribute, IAttributeOrMeasure, idRef, ITotal, newAttribute, newMeasure, newTotal } from "@gooddata/sdk-model"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; + +const measures: IAttributeOrMeasure[] = [ + newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), + newMeasure(idRef("e519fa2a-86c3-4e32-8313-0c03062348j3", "measure"), m => m.localId("m_e519fa2a_86c3_4e32_8313_0c03062348j3")) +]; +const rows: IAttribute[] = [ + newAttribute(idRef("label.f_product.product.name", "displayForm"), a => a.localId("a_label.f_product.product.name")), + newAttribute(idRef("f_owner.department_id", "displayForm"), a => a.localId("a_f_owner.department_id")) +]; +const columns: IAttribute[] = [ + newAttribute(idRef("f_opportunitysnapshot.forecastcategory_id", "displayForm"), a => a.localId("a_f_opportunitysnapshot.forecastcategory_id")), + newAttribute(idRef("f_owner.region_id", "displayForm"), a => a.localId("a_f_owner.region_id")) +]; +const totals: ITotal[] = [ + newTotal("sum", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_label.f_product.product.name"), + newTotal("sum", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name") +]; +const config: IPivotTableConfig = { + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120), + newWidthForAttributeColumn("a_f_owner.department_id", 120) + ] + }, + menu: { + aggregations: true, + aggregationsSubMenu: true, + aggregationsSubMenuForRows: true + }, + separators: {decimal: ".", thousand: ","} +}; +const style = {height: 400}; + +export function MyComponent() { + return ( +
+ +
+ ); +} +" +`; + exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - simple table with attribute and metric column size 1`] = ` "import React from "react"; import { IAttribute, IAttributeOrMeasure, idRef, newAttribute, newMeasure } from "@gooddata/sdk-model"; @@ -49901,7 +50322,7 @@ export function MyComponent() { exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - single measure pivot sorted by first and second row attr 1`] = ` "import React from "react"; import { IAttribute, IAttributeOrMeasure, idRef, ISortItem, newAttribute, newAttributeSort, newMeasure } from "@gooddata/sdk-model"; -import { IPivotTableConfig, PivotTable } from "@gooddata/sdk-ui-pivot"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; const measures: IAttributeOrMeasure[] = [ newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")) @@ -49919,7 +50340,16 @@ const sortBy: ISortItem[] = [ newAttributeSort("a_f_owner.department_id", "desc") ]; const config: IPivotTableConfig = { - columnSizing: {defaultWidth: "autoresizeAll"}, + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120), + newWidthForAttributeColumn("a_f_owner.department_id", 120) + ] + }, menu: { aggregations: true, aggregationsSubMenu: true, @@ -49948,7 +50378,7 @@ export function MyComponent() { exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - single measure pivot sorted by first row attr 1`] = ` "import React from "react"; import { IAttribute, IAttributeOrMeasure, idRef, ISortItem, newAttribute, newAttributeSort, newMeasure } from "@gooddata/sdk-model"; -import { IPivotTableConfig, PivotTable } from "@gooddata/sdk-ui-pivot"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; const measures: IAttributeOrMeasure[] = [ newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")) @@ -49965,7 +50395,16 @@ const sortBy: ISortItem[] = [ newAttributeSort("a_label.f_product.product.name", "desc") ]; const config: IPivotTableConfig = { - columnSizing: {defaultWidth: "autoresizeAll"}, + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120), + newWidthForAttributeColumn("a_f_owner.department_id", 120) + ] + }, menu: { aggregations: true, aggregationsSubMenu: true, @@ -49994,7 +50433,7 @@ export function MyComponent() { exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - single measure pivot sorted by second row attr 1`] = ` "import React from "react"; import { IAttribute, IAttributeOrMeasure, idRef, ISortItem, newAttribute, newAttributeSort, newMeasure } from "@gooddata/sdk-model"; -import { IPivotTableConfig, PivotTable } from "@gooddata/sdk-ui-pivot"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; const measures: IAttributeOrMeasure[] = [ newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")) @@ -50011,7 +50450,16 @@ const sortBy: ISortItem[] = [ newAttributeSort("a_f_owner.department_id", "desc") ]; const config: IPivotTableConfig = { - columnSizing: {defaultWidth: "autoresizeAll"}, + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120), + newWidthForAttributeColumn("a_f_owner.department_id", 120) + ] + }, menu: { aggregations: true, aggregationsSubMenu: true, @@ -50715,7 +51163,9 @@ const totals: ITotal[] = [ newTotal("max", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name"), newTotal("min", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_label.f_product.product.name"), newTotal("med", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_f_owner.department_id"), - newTotal("med", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_f_owner.department_id") + newTotal("med", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_f_owner.department_id"), + newTotal("nat", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name"), + newTotal("nat", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_f_owner.department_id") ]; const config: IPivotTableConfig = { columnSizing: { @@ -52115,7 +52565,7 @@ export function MyComponent() { exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - two measures with single row attr sorted by first measure 1`] = ` "import React from "react"; import { IAttribute, IAttributeOrMeasure, idRef, ISortItem, newAttribute, newMeasure, newMeasureSort } from "@gooddata/sdk-model"; -import { IPivotTableConfig, PivotTable } from "@gooddata/sdk-ui-pivot"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; const measures: IAttributeOrMeasure[] = [ newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), @@ -52128,7 +52578,15 @@ const sortBy: ISortItem[] = [ newMeasureSort("m_87a053b0_3947_49f3_b0c5_de53fd01f050", "desc") ]; const config: IPivotTableConfig = { - columnSizing: {defaultWidth: "autoresizeAll"}, + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120) + ] + }, menu: { aggregations: true, aggregationsSubMenu: true, @@ -52156,7 +52614,7 @@ export function MyComponent() { exports[`getEmbeddingCode functionality > should generate code for PivotTableNext - two measures with single row attr sorted by second measure 1`] = ` "import React from "react"; import { IAttribute, IAttributeOrMeasure, idRef, ISortItem, newAttribute, newMeasure, newMeasureSort } from "@gooddata/sdk-model"; -import { IPivotTableConfig, PivotTable } from "@gooddata/sdk-ui-pivot"; +import { IPivotTableConfig, newWidthForAllColumnsForMeasure, newWidthForAttributeColumn, PivotTable } from "@gooddata/sdk-ui-pivot"; const measures: IAttributeOrMeasure[] = [ newMeasure(idRef("87a053b0-3947-49f3-b0c5-de53fd01f050", "measure"), m => m.localId("m_87a053b0_3947_49f3_b0c5_de53fd01f050")), @@ -52169,7 +52627,15 @@ const sortBy: ISortItem[] = [ newMeasureSort("m_e519fa2a_86c3_4e32_8313_0c03062348j3", "desc") ]; const config: IPivotTableConfig = { - columnSizing: {defaultWidth: "autoresizeAll"}, + columnSizing: { + defaultWidth: "autoresizeAll", + columnWidths: [ + newWidthForAllColumnsForMeasure("m_87a053b0_3947_49f3_b0c5_de53fd01f050", 100), + newWidthForAllColumnsForMeasure("m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa", 100), + newWidthForAllColumnsForMeasure("m_e519fa2a_86c3_4e32_8313_0c03062348j3", 100), + newWidthForAttributeColumn("a_label.f_product.product.name", 120) + ] + }, menu: { aggregations: true, aggregationsSubMenu: true, @@ -52704,7 +53170,9 @@ const totals: ITotal[] = [ newTotal("max", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name"), newTotal("min", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_label.f_product.product.name"), newTotal("med", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_f_owner.department_id"), - newTotal("med", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_f_owner.department_id") + newTotal("med", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_f_owner.department_id"), + newTotal("nat", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name"), + newTotal("nat", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_f_owner.department_id") ]; const config: IPivotTableConfig = { columnSizing: {defaultWidth: "autoresizeAll"}, @@ -52756,7 +53224,9 @@ const totals: ITotal[] = [ newTotal("max", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name"), newTotal("min", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_label.f_product.product.name"), newTotal("med", "m_87a053b0_3947_49f3_b0c5_de53fd01f050", "a_f_owner.department_id"), - newTotal("med", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_f_owner.department_id") + newTotal("med", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_f_owner.department_id"), + newTotal("nat", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_label.f_product.product.name"), + newTotal("nat", "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "a_f_owner.department_id") ]; const config: IPivotTableConfig = { columnSizing: {defaultWidth: "autoresizeAll"}, diff --git a/libs/sdk-ui-ext/src/notificationsPanel/Notification/Notification.tsx b/libs/sdk-ui-ext/src/notificationsPanel/Notification/Notification.tsx index 3b15a023ed1..3e1b4f5d42f 100644 --- a/libs/sdk-ui-ext/src/notificationsPanel/Notification/Notification.tsx +++ b/libs/sdk-ui-ext/src/notificationsPanel/Notification/Notification.tsx @@ -140,7 +140,7 @@ export function Notification({ }; return ( - +
string; -} - -export type TestingLibraryMatchers<_E, R> = { - toBeInTheDocument(): R; - toBeVisible(): R; - toBeEmptyDOMElement(): R; - toBeDisabled(): R; - toBeEnabled(): R; - toBeInvalid(): R; - toBeRequired(): R; - toBeValid(): R; - toContainElement(element: HTMLElement | SVGElement | null): R; - toContainHTML(html: string): R; - toHaveAccessibleDescription(expectedDescription?: string): R; - toHaveAccessibleName(expectedName?: string): R; - toHaveAttribute(attribute: string, value?: string): R; - toHaveClass(...classes: string[]): R; - toHaveFocus(): R; - toHaveFormValues(expectedValues: Record): R; - toHaveStyle(css: string | Record): R; - toHaveTextContent(text: string | RegExp, options?: { normalizeWhitespace?: boolean }): R; - toHaveValue(value?: string | string[] | number): R; - toHaveDisplayValue(value?: string | string[]): R; - toBeChecked(): R; - toBePartiallyChecked(): R; - toHaveErrorMessage(message?: string): R; -}; +import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers diff --git a/libs/sdk-ui-ext/vitest.config.ts b/libs/sdk-ui-ext/vitest.config.ts index ff816ae9994..8d6490faa94 100644 --- a/libs/sdk-ui-ext/vitest.config.ts +++ b/libs/sdk-ui-ext/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { // Use happy-dom for faster performance than jsdom @@ -9,13 +10,13 @@ export default defineConfig({ pool: "threads", poolOptions: { threads: { - maxThreads: 8, // Thread count for CI + maxThreads: 8, // Thread count for CI minThreads: 4, }, }, // Improve performance with these options isolate: true, - maxConcurrency: 8, // Concurrency for CI + maxConcurrency: 8, // Concurrency for CI // Disable slow operations when not needed globals: false, // Speed up test runs by avoiding unnecessary operations @@ -26,9 +27,9 @@ export default defineConfig({ features: { FetchAPI: false, WebSocket: false, - ProcessExternalResources: false - } + ProcessExternalResources: false, + }, }, - } + }, }, }); diff --git a/libs/sdk-ui-ext/vitest.setup.ts b/libs/sdk-ui-ext/vitest.setup.ts index 7056bfb89cd..d233ed889f6 100644 --- a/libs/sdk-ui-ext/vitest.setup.ts +++ b/libs/sdk-ui-ext/vitest.setup.ts @@ -1,45 +1,39 @@ // (C) 2023-2025 GoodData Corporation + import { cleanup } from "@testing-library/react"; import { afterEach, expect } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - -// eslint-disable-next-line import/no-extraneous-dependencies import * as matchers from "vitest-dom/dist/matchers.js"; // Type declarations moved to vitest-matchers.d.ts global.ResizeObserver = class ResizeObserver { - observe() { + observe(): null { return null; } - unobserve() { + unobserve(): null { return null; } - disconnect() { + disconnect(): null { return null; } }; global.IntersectionObserver = class IntersectionObserver { - observe() { + observe(): null { return null; } - unobserve() { + unobserve(): null { return null; } - disconnect() { + disconnect(): null { return null; } - takeRecords() { - return null; + takeRecords(): any[] { + return []; } - root = null; + root: null = null; rootMargin = ""; - thresholds = []; + thresholds: any[] = []; }; expect.extend(matchers); diff --git a/libs/sdk-ui-filters/package.json b/libs/sdk-ui-filters/package.json index 1653ebb40aa..e72756be5b3 100644 --- a/libs/sdk-ui-filters/package.json +++ b/libs/sdk-ui-filters/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-filters", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData.UI SDK - Filter Components", "repository": { "type": "git", @@ -40,11 +40,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --load-path=node_modules --load-path=node_modules/fixed-data-table-2/dist styles/scss:styles/css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", diff --git a/libs/sdk-ui-filters/scripts/validateCss.js b/libs/sdk-ui-filters/scripts/validateCss.js index 4ef05e7b669..84063627df7 100644 --- a/libs/sdk-ui-filters/scripts/validateCss.js +++ b/libs/sdk-ui-filters/scripts/validateCss.js @@ -1,5 +1,7 @@ // (C) 2024 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-filters/tsconfig.build.json b/libs/sdk-ui-filters/tsconfig.build.json index ef905716857..ab3e0ce4e24 100644 --- a/libs/sdk-ui-filters/tsconfig.build.json +++ b/libs/sdk-ui-filters/tsconfig.build.json @@ -1,11 +1,11 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json", "scripts/validateCss.js"], + "exclude": ["**/test", "**/tests"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", "outDir": "./esm", - "composite": false, + "composite": false } } diff --git a/libs/sdk-ui-filters/tsconfig.json b/libs/sdk-ui-filters/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-filters/tsconfig.json +++ b/libs/sdk-ui-filters/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-filters/vitest-matchers.d.ts b/libs/sdk-ui-filters/vitest-matchers.d.ts index a4ef0c112cc..9da53bff975 100644 --- a/libs/sdk-ui-filters/vitest-matchers.d.ts +++ b/libs/sdk-ui-filters/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-filters/vitest.config.ts b/libs/sdk-ui-filters/vitest.config.ts index ff816ae9994..8d6490faa94 100644 --- a/libs/sdk-ui-filters/vitest.config.ts +++ b/libs/sdk-ui-filters/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { // Use happy-dom for faster performance than jsdom @@ -9,13 +10,13 @@ export default defineConfig({ pool: "threads", poolOptions: { threads: { - maxThreads: 8, // Thread count for CI + maxThreads: 8, // Thread count for CI minThreads: 4, }, }, // Improve performance with these options isolate: true, - maxConcurrency: 8, // Concurrency for CI + maxConcurrency: 8, // Concurrency for CI // Disable slow operations when not needed globals: false, // Speed up test runs by avoiding unnecessary operations @@ -26,9 +27,9 @@ export default defineConfig({ features: { FetchAPI: false, WebSocket: false, - ProcessExternalResources: false - } + ProcessExternalResources: false, + }, }, - } + }, }, }); diff --git a/libs/sdk-ui-filters/vitest.setup.ts b/libs/sdk-ui-filters/vitest.setup.ts index a3fdf8f8250..f53c7898225 100644 --- a/libs/sdk-ui-filters/vitest.setup.ts +++ b/libs/sdk-ui-filters/vitest.setup.ts @@ -1,24 +1,16 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; import { afterEach, expect } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - -// eslint-disable-next-line import/no-extraneous-dependencies import * as matchers from "vitest-dom/dist/matchers.js"; -// eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } @@ -47,7 +39,7 @@ global.IntersectionObserver = class IntersectionObserver { return null; } takeRecords() { - return null; + return []; } root = null; rootMargin = ""; diff --git a/libs/sdk-ui-gen-ai/package.json b/libs/sdk-ui-gen-ai/package.json index ed734f75c07..4a770f651e0 100644 --- a/libs/sdk-ui-gen-ai/package.json +++ b/libs/sdk-ui-gen-ai/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-gen-ai", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData GenAI SDK", "repository": { "type": "git", @@ -43,13 +43,13 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.js --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.js --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "prepack": "cp -f ../../NOTICE ./NOTICE", "prepublishOnly": "npm run build", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --load-path=node_modules styles/scss:styles/css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", diff --git a/libs/sdk-ui-gen-ai/scripts/validateCss.js b/libs/sdk-ui-gen-ai/scripts/validateCss.js index 4ef05e7b669..84063627df7 100644 --- a/libs/sdk-ui-gen-ai/scripts/validateCss.js +++ b/libs/sdk-ui-gen-ai/scripts/validateCss.js @@ -1,5 +1,7 @@ // (C) 2024 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-gen-ai/tsconfig.build.json b/libs/sdk-ui-gen-ai/tsconfig.build.json index 5befbbac081..74344e83147 100644 --- a/libs/sdk-ui-gen-ai/tsconfig.build.json +++ b/libs/sdk-ui-gen-ai/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json", "scripts/validateCss.js"], + "exclude": ["**/*.test.ts", "**/*.test.tsx"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-gen-ai/tsconfig.json b/libs/sdk-ui-gen-ai/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-gen-ai/tsconfig.json +++ b/libs/sdk-ui-gen-ai/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-gen-ai/vitest-matchers.d.ts b/libs/sdk-ui-gen-ai/vitest-matchers.d.ts index a4ef0c112cc..9da53bff975 100644 --- a/libs/sdk-ui-gen-ai/vitest-matchers.d.ts +++ b/libs/sdk-ui-gen-ai/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-gen-ai/vitest.config.ts b/libs/sdk-ui-gen-ai/vitest.config.ts index ff816ae9994..8d6490faa94 100644 --- a/libs/sdk-ui-gen-ai/vitest.config.ts +++ b/libs/sdk-ui-gen-ai/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { // Use happy-dom for faster performance than jsdom @@ -9,13 +10,13 @@ export default defineConfig({ pool: "threads", poolOptions: { threads: { - maxThreads: 8, // Thread count for CI + maxThreads: 8, // Thread count for CI minThreads: 4, }, }, // Improve performance with these options isolate: true, - maxConcurrency: 8, // Concurrency for CI + maxConcurrency: 8, // Concurrency for CI // Disable slow operations when not needed globals: false, // Speed up test runs by avoiding unnecessary operations @@ -26,9 +27,9 @@ export default defineConfig({ features: { FetchAPI: false, WebSocket: false, - ProcessExternalResources: false - } + ProcessExternalResources: false, + }, }, - } + }, }, }); diff --git a/libs/sdk-ui-gen-ai/vitest.setup.ts b/libs/sdk-ui-gen-ai/vitest.setup.ts index f8e682afd90..c92bb8eb060 100644 --- a/libs/sdk-ui-gen-ai/vitest.setup.ts +++ b/libs/sdk-ui-gen-ai/vitest.setup.ts @@ -1,24 +1,16 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; -import { expect, afterEach, vi } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - -// eslint-disable-next-line import/no-extraneous-dependencies +import { afterEach, expect, vi } from "vitest"; import * as matchers from "vitest-dom/dist/matchers.js"; -// eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } @@ -69,7 +61,7 @@ global.IntersectionObserver = class IntersectionObserver { return null; } takeRecords() { - return null; + return []; } root = null; rootMargin = ""; diff --git a/libs/sdk-ui-geo/package.json b/libs/sdk-ui-geo/package.json index 044b86117a1..ddbc396e806 100644 --- a/libs/sdk-ui-geo/package.json +++ b/libs/sdk-ui-geo/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-geo", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData.UI SDK - Geo Charts", "repository": { "type": "git", @@ -40,11 +40,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm styles/css coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "mkdir -p ci/results && depcruise --validate .dependency-cruiser.cjs --output-type err-html src/ >./ci/results/dep-cruiser.html", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --load-path=node_modules --load-path=node_modules/mapbox-gl/dist --load-path=node_modules/maplibre-gl/dist styles/scss/main.scss:styles/css/main.css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", diff --git a/libs/sdk-ui-geo/scripts/validateCss.js b/libs/sdk-ui-geo/scripts/validateCss.js index 4ef05e7b669..fcd85c23454 100644 --- a/libs/sdk-ui-geo/scripts/validateCss.js +++ b/libs/sdk-ui-geo/scripts/validateCss.js @@ -1,5 +1,8 @@ // (C) 2024 GoodData Corporation + import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-geo/src/next/hooks/dataLoading/useNormalizedLayerExecutions.ts b/libs/sdk-ui-geo/src/next/hooks/dataLoading/useNormalizedLayerExecutions.ts index 474ba057324..07b56f6111b 100644 --- a/libs/sdk-ui-geo/src/next/hooks/dataLoading/useNormalizedLayerExecutions.ts +++ b/libs/sdk-ui-geo/src/next/hooks/dataLoading/useNormalizedLayerExecutions.ts @@ -1,4 +1,4 @@ -// (C) 2025 GoodData Corporation +// (C) 2025-2026 GoodData Corporation import { useMemo } from "react"; @@ -8,7 +8,7 @@ import { type IDataVisualizationProps } from "@gooddata/sdk-ui"; import { hasGeoLayerContext } from "../../layers/execution/layerContext.js"; import { type GeoLayerType, type IGeoLayer } from "../../types/layers/index.js"; import { type ILayerExecutionRecord } from "../../types/props/geoChartNext/internal.js"; -import { isRecord } from "../../utils/guards.js"; +import { createExecutionBucketsFingerprint } from "../../utils/fingerprint.js"; type WithoutExecutions = Omit; @@ -19,6 +19,24 @@ interface IPropsWithLayerType { type?: GeoLayerType; } +function executionContextFingerprint(execution: IPreparedExecution): string { + if (!hasGeoLayerContext(execution)) { + return ""; + } + + const { id, type, name } = execution.context; + return `${type}:${id}:${name ?? ""}`; +} + +function executionNormalizationFingerprint(execution: IPreparedExecution, index: number): string { + return [ + index, + execution.fingerprint(), + createExecutionBucketsFingerprint(execution), + executionContextFingerprint(execution), + ].join("|"); +} + /** * Result of normalizing layer executions * @@ -82,42 +100,18 @@ function ensureUniqueLayerId(layer: IGeoLayer, usedIds: Set, index: numb /** * Tries to extract a layer definition from an execution's context. - * Even if the context is not a complete IGeoLayer, we try to preserve - * as much information as possible (type, properties, etc). + * Unsupported context shapes are ignored; a minimal fallback layer is created. * * @internal */ function extractLayerFromContext( - execution: IPreparedExecution, + _execution: IPreparedExecution, index: number, fallbackType: GeoLayerType, usedIds: Set, ): IGeoLayer { - const context = execution.context; - - // If no context at all, create minimal fallback - if (!isRecord(context)) { - const id = generateUniqueId(`${fallbackType}-layer-${index}`, usedIds); - return createMinimalLayer(id, fallbackType); - } - - // Extract type from context if available - const contextType = context["type"]; - const layerType: GeoLayerType = - contextType === "pushpin" || contextType === "area" ? contextType : fallbackType; - - // Generate or fix the ID - const contextId = context["id"]; - const hasValidId = typeof contextId === "string" && contextId.length > 0 && !usedIds.has(contextId); - const id = hasValidId ? contextId : generateUniqueId(`${layerType}-layer-${index}`, usedIds); - - // Preserve all context properties and ensure required fields are set - // This maintains layer configuration (filters, sortBy, etc.) even if some fields were missing - return { - ...context, - id, - type: layerType, - } as IGeoLayer; + const id = generateUniqueId(`${fallbackType}-layer-${index}`, usedIds); + return createMinimalLayer(id, fallbackType); } /** @@ -157,14 +151,27 @@ function createMinimalLayer(id: string, type: GeoLayerType): IGeoLayer { * @internal */ export function useNormalizedLayerExecutions< - TCoreProps extends IDataVisualizationProps & IPropsWithLayerType, + TCoreProps extends IDataVisualizationProps & IPropsWithLayerType & { backend?: unknown }, >(props: TCoreProps): INormalizedLayerExecutions> { - const { execution, executions, type: rootLayerType, ...coreProps } = props; + const { execution, executions, type: rootLayerType } = props; + + const normalizationFingerprint = [ + rootLayerType ?? "", + executionNormalizationFingerprint(execution, 0), + ...(executions ?? []).map((e, index) => executionNormalizationFingerprint(e, index + 1)), + ].join("||"); + + const layerExecutionsCache = useMemo(() => new Map(), []); + + const layerExecutions = useMemo(() => { + const cached = layerExecutionsCache.get(normalizationFingerprint); + if (cached) { + return cached; + } - return useMemo(() => { const allExecutions = [execution, ...(executions ?? [])]; - const layerExecutions: ILayerExecutionRecord[] = []; + const normalizedLayerExecutions: ILayerExecutionRecord[] = []; const usedIds = new Set(); allExecutions.forEach((candidate, index) => { @@ -187,20 +194,32 @@ export function useNormalizedLayerExecutions< usedIds.add(layer.id); - layerExecutions.push({ + normalizedLayerExecutions.push({ layerId: layer.id, layer, execution: candidate, }); }); - const layers = layerExecutions.map((record) => record.layer); + // Prevent unbounded growth in case the fingerprint changes frequently. + // The cache is only used to stabilize outputs and avoid flicker. + if (layerExecutionsCache.size > 20) { + layerExecutionsCache.clear(); + } + layerExecutionsCache.set(normalizationFingerprint, normalizedLayerExecutions); + + return normalizedLayerExecutions; + }, [layerExecutionsCache, normalizationFingerprint, execution, executions, rootLayerType]); - const propsWithLayers = { - ...coreProps, + const layers = useMemo(() => layerExecutions.map((record) => record.layer), [layerExecutions]); + + const propsWithLayers = useMemo(() => { + const { execution: _execution, executions: _executions, type: _type, ...rest } = props; + return { + ...rest, layers, } as WithoutExecutions & { layers: IGeoLayer[] }; + }, [props, layers]); - return { layerExecutions, propsWithLayers }; - }, [execution, executions, rootLayerType, coreProps]); + return { layerExecutions, propsWithLayers }; } diff --git a/libs/sdk-ui-geo/src/next/hooks/props/useResolvedGeoChartNextProps.ts b/libs/sdk-ui-geo/src/next/hooks/props/useResolvedGeoChartNextProps.ts index 037afbaaf47..03585e22e23 100644 --- a/libs/sdk-ui-geo/src/next/hooks/props/useResolvedGeoChartNextProps.ts +++ b/libs/sdk-ui-geo/src/next/hooks/props/useResolvedGeoChartNextProps.ts @@ -1,4 +1,4 @@ -// (C) 2025 GoodData Corporation +// (C) 2025-2026 GoodData Corporation import { useMemo } from "react"; @@ -27,7 +27,7 @@ export function useResolvedGeoChartNextProps(props: IGeoChartNextProps): IGeoCha const resolvedFilters = useResolveValueWithPlaceholders(props.filters ?? EMPTY_FILTERS); const resolvedType = props.type ?? resolvedLayers[0]?.type ?? props.layers[0]?.type ?? "pushpin"; - const config = applyGeoChartNextConfigDefaults(props.config); + const config = useMemo(() => applyGeoChartNextConfigDefaults(props.config), [props.config]); return useMemo( () => ({ diff --git a/libs/sdk-ui-geo/src/next/utils/fingerprint.ts b/libs/sdk-ui-geo/src/next/utils/fingerprint.ts index 951e138ee89..3df0f153260 100644 --- a/libs/sdk-ui-geo/src/next/utils/fingerprint.ts +++ b/libs/sdk-ui-geo/src/next/utils/fingerprint.ts @@ -1,5 +1,6 @@ -// (C) 2025 GoodData Corporation +// (C) 2025-2026 GoodData Corporation +import type { IPreparedExecution } from "@gooddata/sdk-backend-spi"; import type { IBucket } from "@gooddata/sdk-model"; import type { DataViewFacade } from "@gooddata/sdk-ui"; @@ -81,6 +82,19 @@ function bucketStructureFingerprint(bucket: IBucket): string { return `${bucket.localIdentifier}[${itemIds.join(",")}]`; } +/** + * Creates a fingerprint from a single prepared execution's bucket structure. + * + * @remarks + * This is useful when you need a stable dependency key that captures bucket meaning, + * even in situations where `execution.fingerprint()` might not fully reflect bucket structure. + * + * @internal + */ +export function createExecutionBucketsFingerprint(execution: IPreparedExecution): string { + return execution.definition.buckets.map(bucketStructureFingerprint).join(";"); +} + /** * Creates a fingerprint from layer execution records that captures bucket structure. * diff --git a/libs/sdk-ui-geo/tsconfig.build.json b/libs/sdk-ui-geo/tsconfig.build.json index b821ce7068a..525d1641629 100644 --- a/libs/sdk-ui-geo/tsconfig.build.json +++ b/libs/sdk-ui-geo/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/tests/**/*", "**/test", "**/test/**/*", "**/*.test.ts", "**/*.test.tsx"], - "include": ["src/**/*", "src/**/*.json", "scripts/validateCss.js"], + "exclude": ["**/*.test.ts", "**/*.test.tsx"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-geo/tsconfig.json b/libs/sdk-ui-geo/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-geo/tsconfig.json +++ b/libs/sdk-ui-geo/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-geo/vitest-matchers.d.ts b/libs/sdk-ui-geo/vitest-matchers.d.ts index a4ef0c112cc..ad959e90ddc 100644 --- a/libs/sdk-ui-geo/vitest-matchers.d.ts +++ b/libs/sdk-ui-geo/vitest-matchers.d.ts @@ -3,9 +3,9 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { - // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-geo/vitest.config.ts b/libs/sdk-ui-geo/vitest.config.ts index 5c2e5a4b1e5..c11040cdf67 100644 --- a/libs/sdk-ui-geo/vitest.config.ts +++ b/libs/sdk-ui-geo/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { environment: "happy-dom", diff --git a/libs/sdk-ui-geo/vitest.setup.ts b/libs/sdk-ui-geo/vitest.setup.ts index 3db08f6680f..257ab361bdb 100644 --- a/libs/sdk-ui-geo/vitest.setup.ts +++ b/libs/sdk-ui-geo/vitest.setup.ts @@ -1,24 +1,16 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; import { afterEach, expect } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - -// eslint-disable-next-line import/no-extraneous-dependencies import * as matchers from "vitest-dom/dist/matchers.js"; -// eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-kit/package.json b/libs/sdk-ui-kit/package.json index 50ac9e68829..7c110803b6b 100644 --- a/libs/sdk-ui-kit/package.json +++ b/libs/sdk-ui-kit/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-kit", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK - UI Building Components", "repository": { "type": "git", @@ -44,12 +44,12 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage styles/css *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "generate-theme": "node scripts/generateDefaultThemeScss.js && prettier --write ./src/@ui/defaultTheme.scss", - "prettier-check": "prettier --check '{src,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "generate-theme": "node scripts/generateDefaultThemeScss.js && prettier --no-error-on-unmatched-pattern --write ./src/@ui/defaultTheme.scss", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --load-path=node_modules --load-path=node_modules/fixed-data-table-2/dist styles/scss:styles/css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", diff --git a/libs/sdk-ui-kit/scripts/generateDefaultThemeScss.js b/libs/sdk-ui-kit/scripts/generateDefaultThemeScss.js index b30244878ad..7d5c50adfe1 100644 --- a/libs/sdk-ui-kit/scripts/generateDefaultThemeScss.js +++ b/libs/sdk-ui-kit/scripts/generateDefaultThemeScss.js @@ -1,5 +1,7 @@ // (C) 2024 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { generateDefaultScssThemeFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToGeneratedScssFile = path.resolve("src/@ui/defaultTheme.scss"); diff --git a/libs/sdk-ui-kit/scripts/validateCss.js b/libs/sdk-ui-kit/scripts/validateCss.js index 4ef05e7b669..84063627df7 100644 --- a/libs/sdk-ui-kit/scripts/validateCss.js +++ b/libs/sdk-ui-kit/scripts/validateCss.js @@ -1,5 +1,7 @@ // (C) 2024 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-kit/tsconfig.build.json b/libs/sdk-ui-kit/tsconfig.build.json index 9c252decd4d..ab3e0ce4e24 100644 --- a/libs/sdk-ui-kit/tsconfig.build.json +++ b/libs/sdk-ui-kit/tsconfig.build.json @@ -1,13 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": [ - "src/**/*", - "src/**/*.json", - "scripts/validateCss.js", - "scripts/generateDefaultThemeScss.js", - "scripts/validateUiComponents.js" - ], + "exclude": ["**/test", "**/tests"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-kit/tsconfig.json b/libs/sdk-ui-kit/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-kit/tsconfig.json +++ b/libs/sdk-ui-kit/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-kit/vitest-matchers.d.ts b/libs/sdk-ui-kit/vitest-matchers.d.ts index a4ef0c112cc..9da53bff975 100644 --- a/libs/sdk-ui-kit/vitest-matchers.d.ts +++ b/libs/sdk-ui-kit/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-kit/vitest.config.ts b/libs/sdk-ui-kit/vitest.config.ts index ff816ae9994..8d6490faa94 100644 --- a/libs/sdk-ui-kit/vitest.config.ts +++ b/libs/sdk-ui-kit/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { // Use happy-dom for faster performance than jsdom @@ -9,13 +10,13 @@ export default defineConfig({ pool: "threads", poolOptions: { threads: { - maxThreads: 8, // Thread count for CI + maxThreads: 8, // Thread count for CI minThreads: 4, }, }, // Improve performance with these options isolate: true, - maxConcurrency: 8, // Concurrency for CI + maxConcurrency: 8, // Concurrency for CI // Disable slow operations when not needed globals: false, // Speed up test runs by avoiding unnecessary operations @@ -26,9 +27,9 @@ export default defineConfig({ features: { FetchAPI: false, WebSocket: false, - ProcessExternalResources: false - } + ProcessExternalResources: false, + }, }, - } + }, }, }); diff --git a/libs/sdk-ui-kit/vitest.setup.ts b/libs/sdk-ui-kit/vitest.setup.ts index 0ff26906ce8..3a0c5a59712 100644 --- a/libs/sdk-ui-kit/vitest.setup.ts +++ b/libs/sdk-ui-kit/vitest.setup.ts @@ -1,24 +1,18 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; -import { expect, afterEach, vi } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - +import { afterEach, expect, vi } from "vitest"; // eslint-disable-next-line import/no-extraneous-dependencies import * as matchers from "vitest-dom/dist/matchers.js"; // eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } @@ -72,7 +66,7 @@ global.IntersectionObserver = class IntersectionObserver { return null; } takeRecords() { - return null; + return []; } root = null; rootMargin = ""; diff --git a/libs/sdk-ui-loaders/package.json b/libs/sdk-ui-loaders/package.json index 7f339c41b6b..309714320d1 100644 --- a/libs/sdk-ui-loaders/package.json +++ b/libs/sdk-ui-loaders/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-loaders", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK Runtime Component Loaders", "repository": { "type": "git", @@ -33,12 +33,12 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "prepack": "cp -f ../../NOTICE ./NOTICE", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "validate": "tsc && export BROWSERSLIST_IGNORE_OLD_DATA=true && npm run dep-cruiser && npm run eslint && npm run prettier-check", "validate-esm": "node --input-type=module --eval 'import \"@gooddata/sdk-ui-loaders\"'" }, diff --git a/libs/sdk-ui-loaders/tsconfig.build.json b/libs/sdk-ui-loaders/tsconfig.build.json index 963aa30c674..525d1641629 100644 --- a/libs/sdk-ui-loaders/tsconfig.build.json +++ b/libs/sdk-ui-loaders/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts", "**/*.test.tsx"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-loaders/tsconfig.json b/libs/sdk-ui-loaders/tsconfig.json index 39d5d472fd4..3d4c2987174 100644 --- a/libs/sdk-ui-loaders/tsconfig.json +++ b/libs/sdk-ui-loaders/tsconfig.json @@ -1,9 +1,6 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, "skipLibCheck": true } diff --git a/libs/sdk-ui-pivot/__mocks__/recordings.ts b/libs/sdk-ui-pivot/__mocks__/recordings.ts index fdf584d2f52..fd4ede1959f 100644 --- a/libs/sdk-ui-pivot/__mocks__/recordings.ts +++ b/libs/sdk-ui-pivot/__mocks__/recordings.ts @@ -1,7 +1,7 @@ // (C) 2020 GoodData Corporation +import { DataViewAll, type ScenarioRecording, recordedDataView } from "@gooddata/sdk-backend-mockingbird"; import { DataViewFacade } from "@gooddata/sdk-ui"; -import { ScenarioRecording, recordedDataView, DataViewAll } from "@gooddata/sdk-backend-mockingbird"; export function recordedDataFacade(rec: ScenarioRecording, dataViewId: string = DataViewAll): DataViewFacade { return DataViewFacade.for(recordedDataView(rec, dataViewId)); diff --git a/libs/sdk-ui-pivot/package.json b/libs/sdk-ui-pivot/package.json index 2a98e361422..eddd705cd75 100644 --- a/libs/sdk-ui-pivot/package.json +++ b/libs/sdk-ui-pivot/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-pivot", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData.UI SDK - Pivot Table", "repository": { "type": "git", @@ -40,11 +40,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --quiet-deps --load-path=node_modules --load-path=node_modules/fixed-data-table-2/dist styles/scss:styles/css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", diff --git a/libs/sdk-ui-pivot/scripts/validateCss.js b/libs/sdk-ui-pivot/scripts/validateCss.js index 4ef05e7b669..84063627df7 100644 --- a/libs/sdk-ui-pivot/scripts/validateCss.js +++ b/libs/sdk-ui-pivot/scripts/validateCss.js @@ -1,5 +1,7 @@ // (C) 2024 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-pivot/src/impl/cell/cellUtils.ts b/libs/sdk-ui-pivot/src/impl/cell/cellUtils.ts index 086984c77e7..b126080e769 100644 --- a/libs/sdk-ui-pivot/src/impl/cell/cellUtils.ts +++ b/libs/sdk-ui-pivot/src/impl/cell/cellUtils.ts @@ -8,8 +8,7 @@ import cx from "classnames"; import { ClientFormatterFacade, type IFormattedResult } from "@gooddata/number-formatter"; import { type DataValue, type ISeparators, isResultTotalHeader } from "@gooddata/sdk-model"; -import { type ColumnHeadersPosition } from "src/publicTypes.js"; - +import { type ColumnHeadersPosition } from "../../publicTypes.js"; import { COLUMN_SUBTOTAL, COLUMN_TOTAL } from "../base/constants.js"; import { type IGridRow } from "../data/resultTypes.js"; import { type AnyCol, isMixedValuesCol, isScopeCol } from "../structure/tableDescriptorTypes.js"; diff --git a/libs/sdk-ui-pivot/src/next/components/Header/utils/common.ts b/libs/sdk-ui-pivot/src/next/components/Header/utils/common.ts index 7b4c34b1e79..4f60bf8fa01 100644 --- a/libs/sdk-ui-pivot/src/next/components/Header/utils/common.ts +++ b/libs/sdk-ui-pivot/src/next/components/Header/utils/common.ts @@ -6,6 +6,7 @@ import { type ITableDataHeaderScope, type ITableRowDefinition, isMeasureGroupHeaderColumnDefinition, + isSubtotalRowDefinition, isValueColumnDefinition, isValueRowDefinition, } from "@gooddata/sdk-ui"; @@ -62,6 +63,9 @@ export const getRowScope = (rowDefinition: ITableRowDefinition | undefined) => { if (rowDefinition && isValueRowDefinition(rowDefinition)) { return rowDefinition.rowScope; } + if (rowDefinition && isSubtotalRowDefinition(rowDefinition)) { + return rowDefinition.rowScope; + } return []; }; diff --git a/libs/sdk-ui-pivot/tsconfig.build.json b/libs/sdk-ui-pivot/tsconfig.build.json index 5befbbac081..dd6c058b178 100644 --- a/libs/sdk-ui-pivot/tsconfig.build.json +++ b/libs/sdk-ui-pivot/tsconfig.build.json @@ -1,7 +1,13 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json", "scripts/validateCss.js"], + "exclude": [ + "**/*.test.ts", + "**/*.test.tsx", + "**/*.fixture.ts", + "**/*.fixtures.ts", + "**/tests/dataSourceUtils.ts" + ], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-pivot/tsconfig.json b/libs/sdk-ui-pivot/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-pivot/tsconfig.json +++ b/libs/sdk-ui-pivot/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-pivot/vitest-matchers.d.ts b/libs/sdk-ui-pivot/vitest-matchers.d.ts index a4ef0c112cc..9da53bff975 100644 --- a/libs/sdk-ui-pivot/vitest-matchers.d.ts +++ b/libs/sdk-ui-pivot/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-pivot/vitest.config.ts b/libs/sdk-ui-pivot/vitest.config.ts index ff816ae9994..8d6490faa94 100644 --- a/libs/sdk-ui-pivot/vitest.config.ts +++ b/libs/sdk-ui-pivot/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { // Use happy-dom for faster performance than jsdom @@ -9,13 +10,13 @@ export default defineConfig({ pool: "threads", poolOptions: { threads: { - maxThreads: 8, // Thread count for CI + maxThreads: 8, // Thread count for CI minThreads: 4, }, }, // Improve performance with these options isolate: true, - maxConcurrency: 8, // Concurrency for CI + maxConcurrency: 8, // Concurrency for CI // Disable slow operations when not needed globals: false, // Speed up test runs by avoiding unnecessary operations @@ -26,9 +27,9 @@ export default defineConfig({ features: { FetchAPI: false, WebSocket: false, - ProcessExternalResources: false - } + ProcessExternalResources: false, + }, }, - } + }, }, }); diff --git a/libs/sdk-ui-pivot/vitest.setup.ts b/libs/sdk-ui-pivot/vitest.setup.ts index 3db08f6680f..65fd9618ae3 100644 --- a/libs/sdk-ui-pivot/vitest.setup.ts +++ b/libs/sdk-ui-pivot/vitest.setup.ts @@ -1,24 +1,18 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; import { afterEach, expect } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - // eslint-disable-next-line import/no-extraneous-dependencies import * as matchers from "vitest-dom/dist/matchers.js"; // eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-semantic-search/package.json b/libs/sdk-ui-semantic-search/package.json index ba9c7eb7736..9facac1cee4 100644 --- a/libs/sdk-ui-semantic-search/package.json +++ b/libs/sdk-ui-semantic-search/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-semantic-search", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK TypeScript & React skeleton", "repository": { "type": "git", @@ -41,11 +41,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint $npm_package_config_eslint", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml $npm_package_config_eslint", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "scss": "sass --load-path=node_modules styles/scss:styles/css", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", @@ -59,9 +59,6 @@ "validate-locales-ci": "i18n-toolkit", "validate-theming": "npm run scss && node scripts/validateCss.js" }, - "config": { - "eslint": "-c .eslintrc.cjs --ext ts,tsx src/" - }, "dependencies": { "@gooddata/sdk-backend-spi": "workspace:*", "@gooddata/sdk-model": "workspace:*", diff --git a/libs/sdk-ui-semantic-search/scripts/validateCss.js b/libs/sdk-ui-semantic-search/scripts/validateCss.js index 4ef05e7b669..84063627df7 100644 --- a/libs/sdk-ui-semantic-search/scripts/validateCss.js +++ b/libs/sdk-ui-semantic-search/scripts/validateCss.js @@ -1,5 +1,7 @@ // (C) 2024 GoodData Corporation import path from "path"; + +// eslint-disable-next-line import/no-unresolved import { validateThemingInCssFile } from "@gooddata/sdk-ui-theme-provider/node"; const pathToCss = path.resolve("styles/css/main.css"); diff --git a/libs/sdk-ui-semantic-search/tsconfig.build.json b/libs/sdk-ui-semantic-search/tsconfig.build.json index 9abb8a9d52c..525d1641629 100644 --- a/libs/sdk-ui-semantic-search/tsconfig.build.json +++ b/libs/sdk-ui-semantic-search/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json", "scripts/validateCss.js"], + "exclude": ["**/*.test.ts", "**/*.test.tsx"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-semantic-search/tsconfig.json b/libs/sdk-ui-semantic-search/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-semantic-search/tsconfig.json +++ b/libs/sdk-ui-semantic-search/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-semantic-search/vitest-matchers.d.ts b/libs/sdk-ui-semantic-search/vitest-matchers.d.ts index a4ef0c112cc..ce90c658ed8 100644 --- a/libs/sdk-ui-semantic-search/vitest-matchers.d.ts +++ b/libs/sdk-ui-semantic-search/vitest-matchers.d.ts @@ -3,9 +3,9 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { - // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-semantic-search/vitest.config.ts b/libs/sdk-ui-semantic-search/vitest.config.ts index 31b03570c23..2e341130cd8 100644 --- a/libs/sdk-ui-semantic-search/vitest.config.ts +++ b/libs/sdk-ui-semantic-search/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { environment: "happy-dom", @@ -8,13 +9,13 @@ export default defineConfig({ pool: "threads", poolOptions: { threads: { - maxThreads: 8, // Thread count for CI + maxThreads: 8, // Thread count for CI minThreads: 4, }, }, // Improve performance with these options isolate: true, - maxConcurrency: 8, // Concurrency for CI + maxConcurrency: 8, // Concurrency for CI // Disable slow operations when not needed globals: false, // Speed up test runs by avoiding unnecessary operations @@ -25,9 +26,9 @@ export default defineConfig({ features: { FetchAPI: false, WebSocket: false, - ProcessExternalResources: false - } + ProcessExternalResources: false, + }, }, - } + }, }, }); diff --git a/libs/sdk-ui-semantic-search/vitest.setup.ts b/libs/sdk-ui-semantic-search/vitest.setup.ts index f8e682afd90..c92bb8eb060 100644 --- a/libs/sdk-ui-semantic-search/vitest.setup.ts +++ b/libs/sdk-ui-semantic-search/vitest.setup.ts @@ -1,24 +1,16 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; -import { expect, afterEach, vi } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - -// eslint-disable-next-line import/no-extraneous-dependencies +import { afterEach, expect, vi } from "vitest"; import * as matchers from "vitest-dom/dist/matchers.js"; -// eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } @@ -69,7 +61,7 @@ global.IntersectionObserver = class IntersectionObserver { return null; } takeRecords() { - return null; + return []; } root = null; rootMargin = ""; diff --git a/libs/sdk-ui-tests-e2e/.eslintignore b/libs/sdk-ui-tests-e2e/.eslintignore deleted file mode 100644 index ba37edd1830..00000000000 --- a/libs/sdk-ui-tests-e2e/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -# (C) 2022 GoodData Corporation -node_modules -dist -esm -cypress/results -cypress/screenshots -cypress/videos -**/build \ No newline at end of file diff --git a/libs/sdk-ui-tests-e2e/package.json b/libs/sdk-ui-tests-e2e/package.json index b1f13fca653..68ac1025817 100644 --- a/libs/sdk-ui-tests-e2e/package.json +++ b/libs/sdk-ui-tests-e2e/package.json @@ -45,9 +45,9 @@ "dev": "bash scripts/build.sh --dev-watch", "docker-build": "docker build --file Dockerfile -t gooddata-ui-sdk .", "docker-build-local": "docker build --file Dockerfile_local -t gooddata-ui-sdk .", - "eslint": "eslint -c .eslintrc.cjs --ext js,jsx,ts,tsx ./", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ext js,jsx,ts,tsx ./", - "eslint-fix": "eslint -c .eslintrc.cjs --ext js,jsx,ts,tsx ./ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "export-fixture": "node ./reference_workspace/export_workspace_fixture.js", "local-dev-test-visual": "node ./scripts/run_local_dev_isolated.js", "local-dev-test-visual-recordings": "node ./scripts/run_local_dev_isolated.js --with-recordings", @@ -55,8 +55,8 @@ "local-dev-wiremock-proxy": "node ./scripts/run_local_dev_wiremock.js --proxy", "local-dev-wiremock-proxy-verbose": "node ./scripts/run_local_dev_wiremock.js --proxy --verbose", "prepare-recording-workspace-id": "node ./reference_workspace/prepareRecordingWorkspaceId.js", - "prettier-check": "prettier --check './**/*.{ts,js,cjs,tsx,jsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write './**/*.{ts,js,cjs,tsx,jsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check './**/*.{cjs,json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write './**/*.{cjs,json,scss,md,yaml,html}'", "run-integrated": "node ./scripts/run_integrated.js", "run-isolated": "docker compose -f docker-compose-isolated.yaml up --abort-on-container-exit --exit-code-from isolated-tests --force-recreate --always-recreate-deps --renew-anon-volumes", "run-isolated-ci": "npm run prepare-recording-workspace-id && npm run docker-build && IMAGE_ID=gooddata-ui-sdk npm run run-isolated", @@ -67,9 +67,6 @@ "update-ref-workspace": "npm run delete-ref-workspace && npm run create-ref-workspace", "validate": "export BROWSERSLIST_IGNORE_OLD_DATA=true && npm run dep-cruiser && npm run eslint && npm run prettier-check" }, - "config": { - "eslint": "-c .eslintrc.cjs --ext js,jsx,ts,tsx ./" - }, "devDependencies": { "@babel/core": "^7.23.5", "@cypress/grep": "^3.1.5", diff --git a/libs/sdk-ui-tests/.eslintignore b/libs/sdk-ui-tests/.eslintignore deleted file mode 100644 index eb84f066004..00000000000 --- a/libs/sdk-ui-tests/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -dist-storybook -backstop/stories.json -backstop/output/** -report*.json -*.generated.stories.tsx -!.storybook diff --git a/libs/sdk-ui-tests/.storybook/main.js b/libs/sdk-ui-tests/.storybook/main.js index cee1222b2cf..28f1fc503da 100644 --- a/libs/sdk-ui-tests/.storybook/main.js +++ b/libs/sdk-ui-tests/.storybook/main.js @@ -59,6 +59,7 @@ function makePackageStylesAlias(packageName) { }; } +// eslint-disable-next-line no-restricted-exports export default { stories: ["../stories/**/*.stories.@(ts|tsx)"], addons: ["@storybook/addon-a11y"], diff --git a/libs/sdk-ui-tests/.storybook/preview.js b/libs/sdk-ui-tests/.storybook/preview.js index 6c3e972e23d..012fd025862 100644 --- a/libs/sdk-ui-tests/.storybook/preview.js +++ b/libs/sdk-ui-tests/.storybook/preview.js @@ -9,4 +9,5 @@ export const preview = { }, }; +// eslint-disable-next-line no-restricted-exports export default preview; diff --git a/libs/sdk-ui-tests/backstop/backstop_data/engine_scripts/puppet/clickAndHoverHelper.js b/libs/sdk-ui-tests/backstop/backstop_data/engine_scripts/puppet/clickAndHoverHelper.js deleted file mode 100644 index 5ee33c95971..00000000000 --- a/libs/sdk-ui-tests/backstop/backstop_data/engine_scripts/puppet/clickAndHoverHelper.js +++ /dev/null @@ -1,104 +0,0 @@ -/* eslint-disable no-console,header/header */ - -const debug = process.env.BACKSTOP_DEBUG; - -async function withVisibleSelector(page, scenario, selector, fun) { - if (debug) { - console.log("DEBUG >", scenario.label, "| Waiting for selector to be visible", selector); - } - - await page.waitForSelector(selector, { visible: true }); - - try { - await fun(); - } catch (e) { - if (e.message.indexOf("not visible") === -1) { - throw e; - } - - console.warn( - "FLAKYNESS >", - scenario.label, - "| seems to use some fishy React components. Elements may be momentarily flashing in and out of visibility.", - ); - - await page.waitForSelector(selector, { visible: true, timeout: 50 }); - await fun(); - } -} - -module.exports = async (page, scenario) => { - const hoverSelectors = scenario.hoverSelectors || scenario.hoverSelector; - const clickSelectors = scenario.clickSelectors || scenario.clickSelector; - const keyPressSelectors = scenario.keyPressSelectors || scenario.keyPressSelector; - const scrollToSelector = scenario.scrollToSelector; - const postInteractionWait = scenario.postInteractionWait; // selector [str] | ms [int] - - if (keyPressSelectors) { - for (const keyPressSelector of [].concat(keyPressSelectors)) { - await page.waitForTimeout(keyPressSelector.selector); - await page.type(keyPressSelector.selector, keyPressSelector.keyPress); - } - } - - if (hoverSelectors) { - for (const hoverSelector of [].concat(hoverSelectors)) { - if (typeof hoverSelector === "string") { - await withVisibleSelector(page, scenario, hoverSelector, () => { - return page.hover(hoverSelector); - }); - } else { - if (debug) { - console.log("DEBUG >", scenario.label, "| Waiting for ", hoverSelector, "millis"); - } - - await page.waitForTimeout(hoverSelector); - } - } - } - - if (clickSelectors) { - for (const clickSelector of [].concat(clickSelectors)) { - if (typeof clickSelector === "string") { - await withVisibleSelector(page, scenario, clickSelector, () => { - return page.click(clickSelector); - }); - } else { - if (debug) { - console.log("DEBUG >", scenario.label, "| Waiting for ", clickSelector, "millis"); - } - - await page.waitForTimeout(clickSelector); - } - } - } - - if (postInteractionWait) { - if (typeof postInteractionWait === "string") { - if (debug) { - console.log( - "DEBUG >", - scenario.label, - "| Waiting for selector to be visible ", - postInteractionWait, - ); - } - - await page.waitForSelector(postInteractionWait, { visible: true }); - } else { - if (debug) { - console.log("DEBUG >", scenario.label, "| Waiting for ", postInteractionWait, "millis"); - } - - await page.waitForTimeout(postInteractionWait); - } - } - - if (scrollToSelector) { - await page.waitForSelector(scrollToSelector); - - await page.evaluate((scrollToSelector) => { - document.querySelector(scrollToSelector).scrollIntoView(); - }, scrollToSelector); - } -}; diff --git a/libs/sdk-ui-tests/backstop/backstop_data/engine_scripts/puppet/onBefore.js b/libs/sdk-ui-tests/backstop/backstop_data/engine_scripts/puppet/onBefore.js deleted file mode 100644 index 56c1bcac38e..00000000000 --- a/libs/sdk-ui-tests/backstop/backstop_data/engine_scripts/puppet/onBefore.js +++ /dev/null @@ -1,98 +0,0 @@ -// (C) 2024 GoodData Corporation - -module.exports = async (page, scenario, vp) => { - // Backstop does not show error body, so complex log messages need to be serialized. - // This does serialization of more complex message objects - e.g. errors. - try { - page.on("console", async (msg) => { - const args = await msg.args(); - args.forEach(async (arg) => { - const val = await arg.jsonValue(); - // value is serializable - if (JSON.stringify(val) !== JSON.stringify({})) console.log(val); - // value is unserializable (or an empty oject) - else { - const { type, subtype, description } = arg._remoteObject; - console.log(`type: ${type}, subtype: ${subtype}, description:\n ${description}`); - } - }); - }); - } catch (e) { - console.log("Message serialization was not successful", e); - } - - // Patch querySelector to tolerate CSS4 :not() selector lists in older Chromium versions used by Backstop - // This is needed for ag-Grid which uses selectors like :not(title, meta) - try { - await page.evaluateOnNewDocument(() => { - const sanitizeSelector = (sel) => { - if (typeof sel !== "string") return sel; - - // Only patch specific problematic selectors that ag-Grid uses - // Preserve our own CSS selectors by being more selective - const agGridProblematicSelectors = [ - ':not(title, meta)', - ':not(script, style)', - ':not(link, meta)', - ]; - - // Check if this is one of the known problematic ag-Grid selectors - for (const problematic of agGridProblematicSelectors) { - if (sel.includes(problematic)) { - // Replace only the specific problematic part - const match = problematic.match(/:not\(([^,]+)/); - const first = match && match[1]; - if (first) { - return sel.replace(problematic, `:not(${first.trim()})`); - } - } - } - - // Fallback: only patch :not() selectors that contain commas AND are likely from ag-Grid - // (avoid patching our own CSS selectors that might use &.class syntax) - if (sel.includes(':not(') && sel.includes(',') && !sel.includes('&.')) { - return sel.replace(/:not\(([^)]+)\)/g, (m, group) => { - if (group.indexOf(",") === -1) return m; - const first = group.split(",")[0].trim(); - return `:not(${first})`; - }); - } - - return sel; - }; - - const patchProto = (proto) => { - const origQS = proto.querySelector; - const origQSA = proto.querySelectorAll; - if (origQS) { - proto.querySelector = function (sel) { - try { - return origQS.call(this, sel); - } catch (e) { - const safe = sanitizeSelector(sel); - return origQS.call(this, safe); - } - }; - } - if (origQSA) { - proto.querySelectorAll = function (sel) { - try { - return origQSA.call(this, sel); - } catch (e) { - const safe = sanitizeSelector(sel); - return origQSA.call(this, safe); - } - }; - } - }; - - patchProto(Document.prototype); - patchProto(Element.prototype); - }); - } catch (e) { - console.log("Selector patching failed", e); - } - - // This was not used before. In case we need it in the future, uncomment it. - // await require("./loadCookies")(page, scenario); -}; diff --git a/libs/sdk-ui-tests/backstop/backstop_data/engine_scripts/puppet/overrideCSS.js b/libs/sdk-ui-tests/backstop/backstop_data/engine_scripts/puppet/overrideCSS.js deleted file mode 100644 index fe7f963029b..00000000000 --- a/libs/sdk-ui-tests/backstop/backstop_data/engine_scripts/puppet/overrideCSS.js +++ /dev/null @@ -1,15 +0,0 @@ -const BACKSTOP_TEST_CSS_OVERRIDE = `html {background-image: none;}`; - -module.exports = function(page, scenario) { - // inject arbitrary css to override styles - page.evaluate(`window._styleData = '${BACKSTOP_TEST_CSS_OVERRIDE}'`); - page.evaluate(() => { - const style = document.createElement("style"); - style.type = "text/css"; - const styleNode = document.createTextNode(window._styleData); - style.appendChild(styleNode); - document.head.appendChild(style); - }); - - console.log("BACKSTOP_TEST_CSS_OVERRIDE injected for: " + scenario.label); -}; diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_0_document_0_desktop.png index eea9d9bc57c..c26fab38b3a 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_and_grow_to_fit_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_and_grow_to_fit_0_document_0_desktop.png index e2ac1655ffb..4fd443992df 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_and_grow_to_fit_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_and_grow_to_fit_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_at_bottom_not_pinned_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_at_bottom_not_pinned_0_document_0_desktop.png new file mode 100644 index 00000000000..41ac828507d Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_at_bottom_not_pinned_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_at_top_not_pinned_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_at_top_not_pinned_0_document_0_desktop.png new file mode 100644 index 00000000000..15c28577d86 Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_at_top_not_pinned_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_pinned_at_bottom_default_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_pinned_at_bottom_default_0_document_0_desktop.png new file mode 100644 index 00000000000..2cd9a434c09 Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_pinned_at_bottom_default_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_pinned_at_top_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_pinned_at_top_0_document_0_desktop.png new file mode 100644 index 00000000000..ab8997ce101 Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_grand_totals_position_-_grand_totals_pinned_at_top_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_pagination_-_pagination_with_5_rows_per_page_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_pagination_-_pagination_with_5_rows_per_page_0_document_0_desktop.png new file mode 100644 index 00000000000..70a4e01de7e Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_pagination_-_pagination_with_5_rows_per_page_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_pagination_-_pagination_with_5_rows_per_page_and_totals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_pagination_-_pagination_with_5_rows_per_page_and_totals_0_document_0_desktop.png new file mode 100644 index 00000000000..300b1bf6ae9 Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_pagination_-_pagination_with_5_rows_per_page_and_totals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_text_wrapping_-_cell_text_wrapping_enabled_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_text_wrapping_-_cell_text_wrapping_enabled_0_document_0_desktop.png new file mode 100644 index 00000000000..f76ba07106c Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_text_wrapping_-_cell_text_wrapping_enabled_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_text_wrapping_-_header_text_wrapping_enabled_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_text_wrapping_-_header_text_wrapping_enabled_0_document_0_desktop.png new file mode 100644 index 00000000000..f004a3956aa Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_config_text_wrapping_-_header_text_wrapping_enabled_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_sorting_-_single_measure_pivot_sorted_by_first_and_second_row_attr_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_sorting_-_single_measure_pivot_sorted_by_first_and_second_row_attr_0_document_0_desktop.png new file mode 100644 index 00000000000..0b8e36466c1 Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_sorting_-_single_measure_pivot_sorted_by_first_and_second_row_attr_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_sorting_-_single_measure_pivot_sorted_by_first_row_attr_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_sorting_-_single_measure_pivot_sorted_by_first_row_attr_0_document_0_desktop.png new file mode 100644 index 00000000000..02bdb2a98ce Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_sorting_-_single_measure_pivot_sorted_by_first_row_attr_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_sorting_-_single_measure_pivot_sorted_by_second_row_attr_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_sorting_-_single_measure_pivot_sorted_by_second_row_attr_0_document_0_desktop.png new file mode 100644 index 00000000000..fb88b5b44e8 Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_sorting_-_single_measure_pivot_sorted_by_second_row_attr_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index 34dcefbbe08..5d181771e2c 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_column_single_grand_total_sorted_by_second_attribute_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_column_single_grand_total_sorted_by_second_attribute_0_document_0_desktop.png new file mode 100644 index 00000000000..0e981d057f4 Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_column_single_grand_total_sorted_by_second_attribute_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png index ac43681abcf..f4b32d355db 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_single_column_grand_total_and_single_subtotal_sorted_by_second_attribute_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_single_column_grand_total_and_single_subtotal_sorted_by_second_attribute_0_document_0_desktop.png new file mode 100644 index 00000000000..7c44714774b Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_columns_-_two_measures_and_single_column_grand_total_and_single_subtotal_sorted_by_second_attribute_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows_-_two_measures_and_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows_-_two_measures_and_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index 40be7e43428..c742ffb3c77 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows_-_two_measures_and_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows_-_two_measures_and_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows_-_two_measures_and_single_grand_total_sorted_by_second_attribute_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows_-_two_measures_and_single_grand_total_sorted_by_second_attribute_0_document_0_desktop.png new file mode 100644 index 00000000000..d146e247ca5 Binary files /dev/null and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows_-_two_measures_and_single_grand_total_sorted_by_second_attribute_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index e6459482221..997cbca72b3 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png index 2e14f835c75..186d460b07e 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png index 26d99a5a5d1..6142596eb5c 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTableNext_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index 54a50e595f1..efac3bed5d4 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png index 06f20e120f7..b37fdcf3b89 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index 857974a570f..63735d593b8 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png index 4fd25ac1f68..b5cde2d7bce 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png index 969f863648e..75b1cdbeba5 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_01_Stories_From_Test_Scenarios_PivotTable_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_0_document_0_desktop.png index ba6a661fbc2..c37ae0f474d 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_and_grow_to_fit_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_and_grow_to_fit_0_document_0_desktop.png index f36246bd408..52203df3386 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_and_grow_to_fit_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_auto-resizing_-_with_two_measures_grand_totals_and_subtotals_with_auto-resizing_and_grow_to_fit_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_manual-resizing_no_other_options_-_simple_table_with_attribute_and_metric_column_size_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_manual-resizing_no_other_options_-_simple_table_with_attribute_and_metric_column_size_0_document_0_desktop.png deleted file mode 100644 index d5f8945af2e..00000000000 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_manual-resizing_no_other_options_-_simple_table_with_attribute_and_metric_column_size_0_document_0_desktop.png and /dev/null differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_sorting_-_two_measures_with_single_row_attr_sorted_by_first_measure_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_sorting_-_two_measures_with_single_row_attr_sorted_by_first_measure_0_document_0_desktop.png index a2325e06017..689fd083e80 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_sorting_-_two_measures_with_single_row_attr_sorted_by_first_measure_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_sorting_-_two_measures_with_single_row_attr_sorted_by_first_measure_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_sorting_-_two_measures_with_single_row_attr_sorted_by_second_measure_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_sorting_-_two_measures_with_single_row_attr_sorted_by_second_measure_0_document_0_desktop.png index 4640fe91925..190ee2ee14f 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_sorting_-_two_measures_with_single_row_attr_sorted_by_second_measure_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_sorting_-_two_measures_with_single_row_attr_sorted_by_second_measure_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index d7304b8670d..52f146c2ef1 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png index 0db220c0bca..76e66626a59 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows_-_two_measures_and_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows_-_two_measures_and_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index 9c282edce0b..2def2ee77e7 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows_-_two_measures_and_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows_-_two_measures_and_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index 24c3a960c4f..833e7afa534 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png index 92ae79fec6d..6c230cab623 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png index 4585bfd62ba..d72fb3203cc 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTableNext_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index f5de61ae972..e37c8c17895 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_columns_-_two_measures_and_column_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png index 7c29b322d55..555ccdf076c 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_columns_-_two_measures_and_multiple_column_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png index eb54c0daf1f..2583beda358 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_rows__columns_-_two_measures_and_column_row_grand_totals_and_multiple_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png index 179fb861bf9..03e8fbb56f0 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_totals_rows__columns_-_two_measures_and_multiple_column_row_subtotals_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png index 1a31935ec16..6db9078c05f 100644 Binary files a/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png and b/libs/sdk-ui-tests/neobackstop/output/reference/storybook_chromium_04_Stories_For_Pluggable_Vis_PivotTable_transposition_-_two_measures_and_multiple_column_row_subtotals_with_metrics_in_rows_0_document_0_desktop.png differ diff --git a/libs/sdk-ui-tests/neobackstop/scenario-extractor.ts b/libs/sdk-ui-tests/neobackstop/scenario-extractor.ts index fce7ef1306d..cba3e716a17 100644 --- a/libs/sdk-ui-tests/neobackstop/scenario-extractor.ts +++ b/libs/sdk-ui-tests/neobackstop/scenario-extractor.ts @@ -1,36 +1,36 @@ // (C) 2025 GoodData Corporation -import { createServer } from "vite"; import { writeFileSync } from "fs"; import { resolve } from "path"; -import storiesToScenarios from "./scenarios.config"; + +import { createServer } from "vite"; + +import { storiesToScenarios } from "./scenarios.config.js"; import "./mockWindow.js"; -(async () => { - // Create vite server in middleware mode for SSR - const server = await createServer({ - server: { middlewareMode: true }, - configFile: "./vite.config.ts", - }); - - try { - // Import your existing toBackstopJson function via Vite's SSR loader - const modulePath = resolve(__dirname, "../stories/_infra/toBackstop.ts"); - const toBackstop = await server.ssrLoadModule(modulePath); - - // Call the function exactly as before - const stories = await toBackstop.toBackstopJson(); - - const scenarios = storiesToScenarios(stories); - - writeFileSync("./neobackstop/scenarios.json", JSON.stringify(scenarios, null, 4), "utf-8"); - - await server.close(); - process.exit(0); - } catch (err) { - console.error("❌ Failed to extract stories to JSON:", err); - await server.close(); - process.exit(1); - } -})(); +// Create vite server in middleware mode for SSR +const server = await createServer({ + server: { middlewareMode: true }, + configFile: "./vite.config.ts", +}); + +try { + // Import your existing toBackstopJson function via Vite's SSR loader + const modulePath = resolve(__dirname, "../stories/_infra/toBackstop.ts"); + const toBackstop = await server.ssrLoadModule(modulePath); + + // Call the function exactly as before + const stories = await toBackstop["toBackstopJson"](); + + const scenarios = storiesToScenarios(stories); + + writeFileSync("./neobackstop/scenarios.json", JSON.stringify(scenarios, null, 4), "utf-8"); + + await server.close(); + process.exit(0); +} catch (err) { + console.error("❌ Failed to extract stories to JSON:", err); + await server.close(); + process.exit(1); +} diff --git a/libs/sdk-ui-tests/neobackstop/scenarios.config.ts b/libs/sdk-ui-tests/neobackstop/scenarios.config.ts index 65fd16f29e4..510d85449e9 100644 --- a/libs/sdk-ui-tests/neobackstop/scenarios.config.ts +++ b/libs/sdk-ui-tests/neobackstop/scenarios.config.ts @@ -1,3 +1,5 @@ +// (C) 2025 GoodData Corporation + /* * BackstopJS global configuration for scenarios created for storybook stories. * @@ -19,7 +21,7 @@ * If no config matches the scenario ID, then the scenario will not be tested using BackstopJS */ -import { IStoryInfo } from "../stories/_infra/toBackstop"; +import { type IStoryInfo } from "../stories/_infra/toBackstop.js"; const ScenarioConfig = [ { @@ -111,15 +113,15 @@ const ScenarioConfig = [ // there should be no need to touch these when customizing backstop scenarios config for stories // -------------------------------------------------------------------- -function scenarioLabel(storyKind: string, storyName: string, scenarioName: string) { +function scenarioLabel(storyKind: string, storyName: string, scenarioName?: string) { const storyDerivedName = `${storyKind} - ${storyName}`; - return scenarioName !== undefined ? `${storyDerivedName} - ${scenarioName}` : storyDerivedName; + return scenarioName === undefined ? storyDerivedName : `${storyDerivedName} - ${scenarioName}`; } function scenarioUrlForId(id: string) { // see docker-compose-neobackstop.yaml for the network name, to hide watermark in tests we need localhost or ag-grid.com - return `http://${process.env.DOCKER === "true" ? "ag-grid.com" : "localhost"}:8080/iframe.html?id=${encodeURIComponent(id)}`; + return `http://${process.env["DOCKER"] === "true" ? "ag-grid.com" : "localhost"}:8080/iframe.html?id=${encodeURIComponent(id)}`; } /** @@ -127,10 +129,10 @@ function scenarioUrlForId(id: string) { * to associate to scenarios automatically created for storybook stories. The association is done based on * story kind & name regex match. * - * @param kind story kind - * @param name story name + * @param kind - story kind + * @param name - story name */ -function scenarioGlobalConfig(kind, name) { +function scenarioGlobalConfig(kind: string, name: string) { const id = `${kind}_${name}`; const configurations = ScenarioConfig.filter(({ idRegex }) => { @@ -147,7 +149,7 @@ function scenarioGlobalConfig(kind, name) { return object; } -export default (stories: IStoryInfo[]) => { +export function storiesToScenarios(stories: IStoryInfo[]) { return stories .map((story) => { const { storyId, storyKind, storyName, scenarioName, scenarioConfig: localConfig } = story; @@ -182,4 +184,4 @@ export default (stories: IStoryInfo[]) => { }; }) .filter((scenario) => scenario !== undefined); -}; +} diff --git a/libs/sdk-ui-tests/neobackstop/story-generator.ts b/libs/sdk-ui-tests/neobackstop/story-generator.ts index bbe4b2a4cb9..fd2aac7342a 100644 --- a/libs/sdk-ui-tests/neobackstop/story-generator.ts +++ b/libs/sdk-ui-tests/neobackstop/story-generator.ts @@ -1,27 +1,25 @@ // (C) 2025 GoodData Corporation -import { createServer } from "vite"; -import { writeFileSync } from "fs"; import { resolve } from "path"; +import { createServer } from "vite"; + import "./mockWindow.js"; -(async () => { - // Create vite server in middleware mode for SSR - const server = await createServer({ - server: { middlewareMode: true }, - configFile: "./vite.config.ts", - }); +// Create vite server in middleware mode for SSR +const server = await createServer({ + server: { middlewareMode: true }, + configFile: "./vite.config.ts", +}); - try { - await server.ssrLoadModule(resolve(__dirname, "../stories/_infra/generateInsightStories")); - await server.ssrLoadModule(resolve(__dirname, "../stories/_infra/generateScenarioStories")); +try { + await server.ssrLoadModule(resolve(__dirname, "../stories/_infra/generateInsightStories")); + await server.ssrLoadModule(resolve(__dirname, "../stories/_infra/generateScenarioStories")); - await server.close(); - process.exit(0); - } catch (err) { - console.error("❌ Failed to generate stories:", err); - await server.close(); - process.exit(1); - } -})(); + await server.close(); + process.exit(0); +} catch (err) { + console.error("❌ Failed to generate stories:", err); + await server.close(); + process.exit(1); +} diff --git a/libs/sdk-ui-tests/package.json b/libs/sdk-ui-tests/package.json index 68eeeca6a1f..8b6291892fa 100644 --- a/libs/sdk-ui-tests/package.json +++ b/libs/sdk-ui-tests/package.json @@ -31,9 +31,9 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci esm dist coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs stories tests src scenarios", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs stories tests src scenarios --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "neobackstop-approve-docker": "npm run neobackstop-prepare-docker && bash neobackstop/run-neobackstop-compose.sh approve", "neobackstop-approve-local": "npm run neobackstop-prepare-local && bash neobackstop/run-neobackstop-compose.sh approve", "neobackstop-prepare-docker": "npm run story-generator && npm run build-storybook && npm run scenario-extractor-docker", @@ -41,9 +41,9 @@ "neobackstop-test-docker": "npm run neobackstop-prepare-docker && bash neobackstop/run-neobackstop-compose.sh test", "neobackstop-test-local": "npm run neobackstop-prepare-local && bash neobackstop/run-neobackstop-compose.sh test", "populate-ref": "GDC_STORE_DEFS=\"../../tools\" vitest run tests/smoke-and-capture/", - "prettier-check": "prettier --check '{src,stories,scenarios,tests,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,scenarios,tests,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write-generated": "prettier --write --ignore-path=\"\" 'stories/visual-regression/**/*.generated.stories.tsx' > /dev/null 2>&1", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,scenarios,tests,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,scenarios,tests,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write-generated": "prettier --no-error-on-unmatched-pattern --write --ignore-path=\"\" 'stories/visual-regression/**/*.generated.stories.tsx' > /dev/null 2>&1", "scenario-extractor-docker": "DOCKER=true vite-node neobackstop/scenario-extractor.ts", "scenario-extractor-local": "vite-node neobackstop/scenario-extractor.ts", "story-generator": "vite-node neobackstop/story-generator.ts && npm run prettier-write-generated", diff --git a/libs/sdk-ui-tests/scenarios/pivotTableNext/config.tsx b/libs/sdk-ui-tests/scenarios/pivotTableNext/config.tsx new file mode 100644 index 00000000000..3452f0e5ef3 --- /dev/null +++ b/libs/sdk-ui-tests/scenarios/pivotTableNext/config.tsx @@ -0,0 +1,152 @@ +// (C) 2007-2025 GoodData Corporation + +import { ReferenceMd } from "@gooddata/reference-workspace"; +import { modifyAttribute, newTotal } from "@gooddata/sdk-model"; +import { + type IPivotTableNextProps, + PivotTableNext, + newWidthForAttributeColumn, +} from "@gooddata/sdk-ui-pivot/next"; + +import { + PivotTableWithTwoMeasuresAndSingleRowAttr, + PivotTableWithTwoMeasuresAndTwoRowsAndCols, + getCommonPivotTableSizingConfig, +} from "./base.js"; +import { scenariosFor } from "../../src/index.js"; + +// Attribute with long alias to demonstrate header wrapping +const ProductNameWithLongAlias = modifyAttribute(ReferenceMd.Product.Name, (m) => + m.alias("Product Name With Very Long Title For Wrapping"), +); + +// ============================================================================= +// Text Wrapping Scenarios +// ============================================================================= + +const textWrapping = scenariosFor("PivotTableNext", PivotTableNext) + .withGroupNames("config", "text wrapping") + .withDefaultTags("no-plug-viz-tests") + .withVisualTestConfig({ + screenshotSize: { width: 1000, height: 600 }, + viewports: [{ label: "desktop", width: 1464, height: 768 }], + misMatchThreshold: 0.01, + }) + .addScenario("cell text wrapping enabled", { + ...PivotTableWithTwoMeasuresAndSingleRowAttr, + rows: [ProductNameWithLongAlias], + config: { + columnSizing: { + columnWidths: [newWidthForAttributeColumn(ProductNameWithLongAlias, 60)], + defaultWidth: "unset", + growToFit: false, + }, + textWrapping: { + wrapText: true, + }, + }, + }) + .addScenario("header text wrapping enabled", { + ...PivotTableWithTwoMeasuresAndSingleRowAttr, + rows: [ProductNameWithLongAlias], + config: { + columnSizing: { + columnWidths: [newWidthForAttributeColumn(ProductNameWithLongAlias, 60)], + defaultWidth: "unset", + growToFit: false, + }, + textWrapping: { + wrapHeaderText: true, + }, + }, + }); + +// ============================================================================= +// Pagination Scenarios +// ============================================================================= + +const pagination = scenariosFor("PivotTableNext", PivotTableNext) + .withGroupNames("config", "pagination") + .withDefaultTags("no-plug-viz-tests") + .withVisualTestConfig({ + screenshotSize: { width: 1000, height: 600 }, + viewports: [{ label: "desktop", width: 1464, height: 768 }], + misMatchThreshold: 0.01, + }) + .addScenario("pagination with 5 rows per page", { + ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, + config: { + ...getCommonPivotTableSizingConfig([ReferenceMd.Product.Name, ReferenceMd.Department.Default]), + enablePivotTablePagination: true, + pagination: { + enabled: true, + }, + }, + pageSize: 5, + }) + .addScenario("pagination with 5 rows per page and totals", { + ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, + totals: [ + newTotal("sum", ReferenceMd.Amount, ReferenceMd.Product.Name), + newTotal("sum", ReferenceMd.Won, ReferenceMd.Product.Name), + ], + config: { + ...getCommonPivotTableSizingConfig([ReferenceMd.Product.Name, ReferenceMd.Department.Default]), + enablePivotTablePagination: true, + pagination: { + enabled: true, + }, + }, + pageSize: 5, + }); + +// ============================================================================= +// Grand Totals Position Scenarios +// ============================================================================= + +const PivotTableWithGrandTotals = { + ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, + totals: [ + newTotal("sum", ReferenceMd.Amount, ReferenceMd.Product.Name), + newTotal("sum", ReferenceMd.Won, ReferenceMd.Product.Name), + ], +}; + +const grandTotalsPosition = scenariosFor("PivotTableNext", PivotTableNext) + .withGroupNames("config", "grand totals position") + .withDefaultTags("no-plug-viz-tests") + .withVisualTestConfig({ + screenshotSize: { width: 1000, height: 600 }, + viewports: [{ label: "desktop", width: 1464, height: 768 }], + misMatchThreshold: 0.01, + }) + .addScenario("grand totals pinned at bottom (default)", { + ...PivotTableWithGrandTotals, + config: { + ...getCommonPivotTableSizingConfig([ReferenceMd.Product.Name, ReferenceMd.Department.Default]), + grandTotalsPosition: "pinnedBottom", + }, + }) + .addScenario("grand totals pinned at top", { + ...PivotTableWithGrandTotals, + config: { + ...getCommonPivotTableSizingConfig([ReferenceMd.Product.Name, ReferenceMd.Department.Default]), + grandTotalsPosition: "pinnedTop", + }, + }) + .addScenario("grand totals at bottom (not pinned)", { + ...PivotTableWithGrandTotals, + config: { + ...getCommonPivotTableSizingConfig([ReferenceMd.Product.Name, ReferenceMd.Department.Default]), + grandTotalsPosition: "bottom", + }, + }) + .addScenario("grand totals at top (not pinned)", { + ...PivotTableWithGrandTotals, + config: { + ...getCommonPivotTableSizingConfig([ReferenceMd.Product.Name, ReferenceMd.Department.Default]), + grandTotalsPosition: "top", + }, + }); + +export const config = [textWrapping, pagination, grandTotalsPosition]; diff --git a/libs/sdk-ui-tests/scenarios/pivotTableNext/index.tsx b/libs/sdk-ui-tests/scenarios/pivotTableNext/index.tsx index e8d140e5d7b..f658d628e9b 100644 --- a/libs/sdk-ui-tests/scenarios/pivotTableNext/index.tsx +++ b/libs/sdk-ui-tests/scenarios/pivotTableNext/index.tsx @@ -2,6 +2,7 @@ import { autoresize } from "./autoresize.js"; import { base } from "./base.js"; +import { config } from "./config.js"; import { drilling } from "./drilling.js"; import { manualSizing } from "./manualSizing.js"; import { sorting } from "./sorting.js"; @@ -11,6 +12,7 @@ import { transposition } from "./transposition.js"; export const pivotTableNextScenarios = [ base, autoresize, + ...config, ...manualSizing, transposition, sorting, diff --git a/libs/sdk-ui-tests/scenarios/pivotTableNext/manualSizing.tsx b/libs/sdk-ui-tests/scenarios/pivotTableNext/manualSizing.tsx index 605d11e7859..2910aa2da0d 100644 --- a/libs/sdk-ui-tests/scenarios/pivotTableNext/manualSizing.tsx +++ b/libs/sdk-ui-tests/scenarios/pivotTableNext/manualSizing.tsx @@ -50,16 +50,20 @@ const justManualResizing = scenariosFor("PivotTableNext", }, }, }) - .addScenario("simple table with attribute and metric column size", { - ...PivotTableWithTwoMeasuresAndSingleRowAttr, - config: { - columnSizing: { - columnWidths: [attributeColumnWidthItem, measureColumnWidthItemSimple], - defaultWidth: "unset", - growToFit: false, + .addScenario( + "simple table with attribute and metric column size", + { + ...PivotTableWithTwoMeasuresAndSingleRowAttr, + config: { + columnSizing: { + columnWidths: [attributeColumnWidthItem, measureColumnWidthItemSimple], + defaultWidth: "unset", + growToFit: false, + }, }, }, - }) + (m) => m.withTags("no-plug-viz-tests"), // skip pluggable due to flaky sizing + ) .addScenario( "table with multiple measure columns and weak measure size", { diff --git a/libs/sdk-ui-tests/scenarios/pivotTableNext/sorting.tsx b/libs/sdk-ui-tests/scenarios/pivotTableNext/sorting.tsx index f4cbc2f5a8d..58589e11ddf 100644 --- a/libs/sdk-ui-tests/scenarios/pivotTableNext/sorting.tsx +++ b/libs/sdk-ui-tests/scenarios/pivotTableNext/sorting.tsx @@ -1,14 +1,16 @@ // (C) 2007-2025 GoodData Corporation import { ReferenceMd } from "@gooddata/reference-workspace"; -import { newMeasureSort } from "@gooddata/sdk-model"; +import { newAttributeSort, newMeasureSort } from "@gooddata/sdk-model"; import { type IPivotTableNextProps, PivotTableNext } from "@gooddata/sdk-ui-pivot/next"; -import { PivotTableWithTwoMeasuresAndSingleRowAttr, getCommonPivotTableSizingConfig } from "./base.js"; +import { + PivotTableWithSingleMeasureAndTwoRowsAndCols, + PivotTableWithTwoMeasuresAndSingleRowAttr, + getCommonPivotTableSizingConfig, +} from "./base.js"; import { scenariosFor } from "../../src/index.js"; -// todo: some scenarios were commented out during neobackstop creation, make an option to disable only their adding to 04 - export const sorting = scenariosFor("PivotTableNext", PivotTableNext) .withGroupNames("sorting") .withVisualTestConfig({ @@ -16,16 +18,24 @@ export const sorting = scenariosFor("PivotTableNext", Pivo viewports: [{ label: "desktop", width: 1464, height: 768 }], misMatchThreshold: 0.01, }) - // .addScenario("single measure pivot sorted by first row attr", { - // ...PivotTableWithSingleMeasureAndTwoRowsAndCols, - // sortBy: [newAttributeSort(ReferenceMd.Product.Name, "desc")], - // config: getCommonPivotTableSizingConfig(PivotTableWithSingleMeasureAndTwoRowsAndCols.rows), - // }) - // .addScenario("single measure pivot sorted by second row attr", { - // ...PivotTableWithSingleMeasureAndTwoRowsAndCols, - // sortBy: [newAttributeSort(ReferenceMd.Department.Default, "desc")], - // config: getCommonPivotTableSizingConfig(PivotTableWithSingleMeasureAndTwoRowsAndCols.rows), - // }) + .addScenario( + "single measure pivot sorted by first row attr", + { + ...PivotTableWithSingleMeasureAndTwoRowsAndCols, + sortBy: [newAttributeSort(ReferenceMd.Product.Name, "desc")], + config: getCommonPivotTableSizingConfig(PivotTableWithSingleMeasureAndTwoRowsAndCols.rows), + }, + (m) => m.withTags("no-plug-viz-tests"), // skip pluggable due to flaky sizing + ) + .addScenario( + "single measure pivot sorted by second row attr", + { + ...PivotTableWithSingleMeasureAndTwoRowsAndCols, + sortBy: [newAttributeSort(ReferenceMd.Department.Default, "desc")], + config: getCommonPivotTableSizingConfig(PivotTableWithSingleMeasureAndTwoRowsAndCols.rows), + }, + (m) => m.withTags("no-plug-viz-tests"), // skip pluggable due to flaky sizing + ) .addScenario("two measures with single row attr sorted by first measure", { ...PivotTableWithTwoMeasuresAndSingleRowAttr, sortBy: [newMeasureSort(ReferenceMd.Amount, "desc")], @@ -35,12 +45,16 @@ export const sorting = scenariosFor("PivotTableNext", Pivo ...PivotTableWithTwoMeasuresAndSingleRowAttr, sortBy: [newMeasureSort(ReferenceMd.Won, "desc")], config: getCommonPivotTableSizingConfig(PivotTableWithTwoMeasuresAndSingleRowAttr.rows), - }); -// .addScenario("single measure pivot sorted by first and second row attr", { -// ...PivotTableWithSingleMeasureAndTwoRowsAndCols, -// sortBy: [ -// newAttributeSort(ReferenceMd.Product.Name, "asc"), -// newAttributeSort(ReferenceMd.Department.Default, "desc"), -// ], -// config: getCommonPivotTableSizingConfig(PivotTableWithSingleMeasureAndTwoRowsAndCols.rows), -// }); + }) + .addScenario( + "single measure pivot sorted by first and second row attr", + { + ...PivotTableWithSingleMeasureAndTwoRowsAndCols, + sortBy: [ + newAttributeSort(ReferenceMd.Product.Name, "asc"), + newAttributeSort(ReferenceMd.Department.Default, "desc"), + ], + config: getCommonPivotTableSizingConfig(PivotTableWithSingleMeasureAndTwoRowsAndCols.rows), + }, + (m) => m.withTags("no-plug-viz-tests"), // skip pluggable due to flaky sizing + ); diff --git a/libs/sdk-ui-tests/scenarios/pivotTableNext/totals.tsx b/libs/sdk-ui-tests/scenarios/pivotTableNext/totals.tsx index bbc343bff61..57fcb8a060b 100644 --- a/libs/sdk-ui-tests/scenarios/pivotTableNext/totals.tsx +++ b/libs/sdk-ui-tests/scenarios/pivotTableNext/totals.tsx @@ -2,7 +2,12 @@ import { requestPages } from "@gooddata/mock-handling"; import { ReferenceMd } from "@gooddata/reference-workspace"; -import { newNegativeAttributeFilter, newPositiveAttributeFilter, newTotal } from "@gooddata/sdk-model"; +import { + newAttributeSort, + newNegativeAttributeFilter, + newPositiveAttributeFilter, + newTotal, +} from "@gooddata/sdk-model"; import { type IPivotTableNextProps, PivotTableNext } from "@gooddata/sdk-ui-pivot/next"; import { @@ -14,8 +19,6 @@ import { } from "./base.js"; import { scenariosFor } from "../../src/index.js"; -// todo: some scenarios were commented out during neobackstop creation, make an option to disable only their adding to 04 - export const PivotTableWithTwoMeasuresAndTotals = { ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, totals: [ @@ -31,12 +34,11 @@ export const PivotTableWithTwoMeasuresGrandTotalsAndSubtotals = { newTotal("sum", ReferenceMd.Amount, ReferenceMd.Product.Name), newTotal("min", ReferenceMd.Amount, ReferenceMd.Product.Name), newTotal("max", ReferenceMd.Won, ReferenceMd.Product.Name), - // newTotal("nat", ReferenceMd.Won, ReferenceMd.Product.Name), + newTotal("nat", ReferenceMd.Won, ReferenceMd.Product.Name), newTotal("sum", ReferenceMd.Amount, ReferenceMd.Department.Default), - // newTotal("med", ReferenceMd.Amount, ReferenceMd.Department.Default), newTotal("med", ReferenceMd.Won, ReferenceMd.Department.Default), - // newTotal("nat", ReferenceMd.Won, ReferenceMd.Department.Default), + newTotal("nat", ReferenceMd.Won, ReferenceMd.Department.Default), ], config: getCommonPivotTableSizingConfig([ReferenceMd.Product.Name, ReferenceMd.Department.Default]), }; @@ -149,19 +151,21 @@ const totalsForRows = scenariosFor("PivotTableNext", Pivot }) .addScenario("two measures and grand totals and multiple subtotals", { ...PivotTableWithTwoMeasuresGrandTotalsAndSubtotals, - }); -// .addScenario( -// "two measures and single grand total sorted by second attribute", -// { -// ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, -// totals: [newTotal("sum", ReferenceMd.Amount, ReferenceMd.Product.Name)], -// sortBy: [newAttributeSort(ReferenceMd.Department.Default, "desc")], -// }, -// (m) => -// m.withCustomDataCapture({ -// windows: [...requestPages([0, 0], [22, 1000], 1), ...requestPages([0, 0], [12, 1000], 1)], -// }), -// ); + }) + .addScenario( + "two measures and single grand total sorted by second attribute", + { + ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, + totals: [newTotal("sum", ReferenceMd.Amount, ReferenceMd.Product.Name)], + sortBy: [newAttributeSort(ReferenceMd.Department.Default, "desc")], + }, + (m) => + m + .withCustomDataCapture({ + windows: [...requestPages([0, 0], [22, 1000], 1), ...requestPages([0, 0], [12, 1000], 1)], + }) + .withTags("no-plug-viz-tests"), // skip pluggable due to flaky sizing + ); const totalsForColumns = scenariosFor("PivotTableNext", PivotTableNext) .withGroupNames("totals", "columns") @@ -225,33 +229,41 @@ const totalsForColumns = scenariosFor("PivotTableNext", Pi ...PivotTableWithTwoMeasuresColumnGrandTotalsAndSubtotals, filters: [newPositiveAttributeFilter(ReferenceMd.Region.Default, ["West Coast"])], config: getCommonPivotTableSizingConfig([ReferenceMd.Product.Name, ReferenceMd.Department.Default]), - }); -// .addScenario("two measures and column single grand total sorted by second attribute", { -// ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, -// totals: [newTotal("sum", ReferenceMd.Amount, ReferenceMd.ForecastCategory)], -// sortBy: [newAttributeSort(ReferenceMd.Department.Default, "desc")], -// filters: [newPositiveAttributeFilter(ReferenceMd.Region.Default, ["West Coast"])], -// config: getCommonPivotTableSizingConfig([ReferenceMd.Product.Name, ReferenceMd.Department.Default]), -// }); -// .addScenario( -// "two measures and single column grand total and single subtotal sorted by second attribute", -// // The expected behaviour is that the subtotal will be removed and the scenario will be reduced to -// // the scenario "two measures and single grand total sorted by second attribute" -// // The requested windows also get affected so the base scenario requires multiple recorded responses -// { -// ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, -// totals: [ -// newTotal("sum", ReferenceMd.Amount, ReferenceMd.ForecastCategory), -// newTotal("sum", ReferenceMd.Amount, ReferenceMd.Region.Default), -// ], -// sortBy: [newAttributeSort(ReferenceMd.Department.Default, "desc")], -// filters: [newPositiveAttributeFilter(ReferenceMd.Region.Default, ["West Coast"])], -// config: getCommonPivotTableSizingConfig([ -// ReferenceMd.Product.Name, -// ReferenceMd.Department.Default, -// ]), -// }, -// ); + }) + .addScenario( + "two measures and column single grand total sorted by second attribute", + { + ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, + totals: [newTotal("sum", ReferenceMd.Amount, ReferenceMd.ForecastCategory)], + sortBy: [newAttributeSort(ReferenceMd.Department.Default, "desc")], + filters: [newPositiveAttributeFilter(ReferenceMd.Region.Default, ["West Coast"])], + config: getCommonPivotTableSizingConfig([ + ReferenceMd.Product.Name, + ReferenceMd.Department.Default, + ]), + }, + (m) => m.withTags("no-plug-viz-tests"), // skip pluggable due to flaky sizing + ) + .addScenario( + "two measures and single column grand total and single subtotal sorted by second attribute", + // The expected behaviour is that the subtotal will be removed and the scenario will be reduced to + // the scenario "two measures and single grand total sorted by second attribute" + // The requested windows also get affected so the base scenario requires multiple recorded responses + { + ...PivotTableWithTwoMeasuresAndTwoRowsAndCols, + totals: [ + newTotal("sum", ReferenceMd.Amount, ReferenceMd.ForecastCategory), + newTotal("sum", ReferenceMd.Amount, ReferenceMd.Region.Default), + ], + sortBy: [newAttributeSort(ReferenceMd.Department.Default, "desc")], + filters: [newPositiveAttributeFilter(ReferenceMd.Region.Default, ["West Coast"])], + config: getCommonPivotTableSizingConfig([ + ReferenceMd.Product.Name, + ReferenceMd.Department.Default, + ]), + }, + (m) => m.withTags("no-plug-viz-tests"), // skip pluggable due to flaky sizing + ); const totalsForRowsAndColumns = scenariosFor("PivotTableNext", PivotTableNext) .withGroupNames("totals", "rows & columns") diff --git a/libs/sdk-ui-tests/stories/visual-regression/kit/RecurrenceForm/RecurrenceForm.stories.tsx b/libs/sdk-ui-tests/stories/visual-regression/kit/RecurrenceForm/RecurrenceForm.stories.tsx index 8567d7c4ecd..9a341039f2b 100644 --- a/libs/sdk-ui-tests/stories/visual-regression/kit/RecurrenceForm/RecurrenceForm.stories.tsx +++ b/libs/sdk-ui-tests/stories/visual-regression/kit/RecurrenceForm/RecurrenceForm.stories.tsx @@ -91,7 +91,7 @@ const screenshotProps: INeobackstopConfig = { readySelector: { selector: ".screenshot-target", state: State.Attached }, clickSelector: "#first-example .s-recurrence-form-type", delay: { - postOperation: 200, // element has transition + postOperation: 200, // element has .2s transition }, }, }; diff --git a/libs/sdk-ui-tests/stories/visual-regression/visualizations/pivotTable/index.stories.tsx b/libs/sdk-ui-tests/stories/visual-regression/visualizations/pivotTable/index.stories.tsx index 9644b3a4db9..400fa9b2f67 100644 --- a/libs/sdk-ui-tests/stories/visual-regression/visualizations/pivotTable/index.stories.tsx +++ b/libs/sdk-ui-tests/stories/visual-regression/visualizations/pivotTable/index.stories.tsx @@ -177,13 +177,12 @@ AutoResizingOfVisibleColumns.parameters = { this scroll is done to check if virtualized hidden cells are correctly resized after scroll - ag-grid has a problem with programatically scrolled header + ag-grid has a problem with programmatically scrolled header so we used a cell in the body to scroll instead */ readySelector: { selector: ".screenshot-ready-wrapper-done", state: State.Attached }, misMatchThreshold: 0.01, scrollToSelector: ".s-cell-0-9", - postInteractionWait: { delay: 1000 }, }, }, } satisfies IStoryParameters; diff --git a/libs/sdk-ui-tests/tsconfig.build.json b/libs/sdk-ui-tests/tsconfig.build.json index 9c281c64832..cb67aa0af26 100644 --- a/libs/sdk-ui-tests/tsconfig.build.json +++ b/libs/sdk-ui-tests/tsconfig.build.json @@ -1,14 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": [ - "src/**/*", - "src/**/*.json", - "scenarios/**/*", - "scenarios/**/*.json", - "stories/**/*", - "stories/**/*.json" - ], + "exclude": ["**/*.test.ts", "**/*.test.tsx"], + "include": ["src/**/*", "scenarios/**/*", "stories/**/*"], "compilerOptions": { "baseUrl": ".", "rootDirs": ["./src", "./scenarios", "./stories"], diff --git a/libs/sdk-ui-tests/tsconfig.json b/libs/sdk-ui-tests/tsconfig.json index 5b6eb18d618..b49d0b0af08 100644 --- a/libs/sdk-ui-tests/tsconfig.json +++ b/libs/sdk-ui-tests/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["stories/**/*", "src/**/*", "tests/**/*", "scenarios/**/*"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-tests/vite.config.ts b/libs/sdk-ui-tests/vite.config.ts index e35edf70d6c..67f3de5b120 100644 --- a/libs/sdk-ui-tests/vite.config.ts +++ b/libs/sdk-ui-tests/vite.config.ts @@ -1,15 +1,18 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vite"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ plugins: [ { name: "mock-css-modules", enforce: "pre", - transform(code, id) { - if (id.match(/\.module\.(css|scss)$/)) { + transform(_code, id) { + if (id.match(/\.module\.(?:css|scss)$/)) { return { code: "export default {};", map: null }; } + + return undefined; }, }, ], diff --git a/libs/sdk-ui-tests/vitest-matchers.d.ts b/libs/sdk-ui-tests/vitest-matchers.d.ts index a4ef0c112cc..9da53bff975 100644 --- a/libs/sdk-ui-tests/vitest-matchers.d.ts +++ b/libs/sdk-ui-tests/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-tests/vitest.config.ts b/libs/sdk-ui-tests/vitest.config.ts index c6fb85e2885..db22193f3fb 100644 --- a/libs/sdk-ui-tests/vitest.config.ts +++ b/libs/sdk-ui-tests/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { environment: "happy-dom", @@ -9,12 +10,12 @@ export default defineConfig({ pool: "threads", poolOptions: { threads: { - maxThreads: 8, // Thread count for CI + maxThreads: 8, // Thread count for CI minThreads: 4, }, }, isolate: true, - maxConcurrency: 8, // Concurrency for CI + maxConcurrency: 8, // Concurrency for CI // Disable slow operations when not needed globals: false, // Speed up test runs by avoiding unnecessary operations @@ -25,10 +26,9 @@ export default defineConfig({ features: { FetchAPI: false, WebSocket: false, - ProcessExternalResources: false - } + ProcessExternalResources: false, + }, }, - } - + }, }, }); diff --git a/libs/sdk-ui-theme-provider/package.json b/libs/sdk-ui-theme-provider/package.json index 9fdcdfd7bdf..5fad680eaa9 100644 --- a/libs/sdk-ui-theme-provider/package.json +++ b/libs/sdk-ui-theme-provider/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-theme-provider", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK - Theme provider", "repository": { "type": "git", @@ -32,11 +32,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/libs/sdk-ui-theme-provider/tsconfig.build.json b/libs/sdk-ui-theme-provider/tsconfig.build.json index 963aa30c674..525d1641629 100644 --- a/libs/sdk-ui-theme-provider/tsconfig.build.json +++ b/libs/sdk-ui-theme-provider/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts", "**/*.test.tsx"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-theme-provider/tsconfig.json b/libs/sdk-ui-theme-provider/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-theme-provider/tsconfig.json +++ b/libs/sdk-ui-theme-provider/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-theme-provider/vitest-matchers.d.ts b/libs/sdk-ui-theme-provider/vitest-matchers.d.ts index a4ef0c112cc..ad959e90ddc 100644 --- a/libs/sdk-ui-theme-provider/vitest-matchers.d.ts +++ b/libs/sdk-ui-theme-provider/vitest-matchers.d.ts @@ -3,9 +3,9 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { - // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-theme-provider/vitest.config.ts b/libs/sdk-ui-theme-provider/vitest.config.ts index 73b3c00394c..32744f7c839 100644 --- a/libs/sdk-ui-theme-provider/vitest.config.ts +++ b/libs/sdk-ui-theme-provider/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { environment: "happy-dom", diff --git a/libs/sdk-ui-vis-commons/__mocks__/recordings.ts b/libs/sdk-ui-vis-commons/__mocks__/recordings.ts index 4968e241665..9ec2c1f582f 100644 --- a/libs/sdk-ui-vis-commons/__mocks__/recordings.ts +++ b/libs/sdk-ui-vis-commons/__mocks__/recordings.ts @@ -1,7 +1,7 @@ // (C) 2020 GoodData Corporation +import { type ScenarioRecording, recordedDataView } from "@gooddata/sdk-backend-mockingbird"; import { DataViewFacade } from "@gooddata/sdk-ui"; -import { ScenarioRecording, recordedDataView } from "@gooddata/sdk-backend-mockingbird"; export function recordedDataFacade(rec: ScenarioRecording): DataViewFacade { return DataViewFacade.for(recordedDataView(rec)); diff --git a/libs/sdk-ui-vis-commons/package.json b/libs/sdk-ui-vis-commons/package.json index 16aaeb192fd..7c2ca9f0651 100644 --- a/libs/sdk-ui-vis-commons/package.json +++ b/libs/sdk-ui-vis-commons/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui-vis-commons", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData.UI SDK - common functionality for different types of visualizations", "repository": { "type": "git", @@ -37,11 +37,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage styles/css *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "mkdir -p ci/results && depcruise --validate .dependency-cruiser.cjs --output-type err-html src/ >./ci/results/dep-cruiser.html", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", "stylelint-fix": "stylelint '**/*.scss' --fix", diff --git a/libs/sdk-ui-vis-commons/tsconfig.build.json b/libs/sdk-ui-vis-commons/tsconfig.build.json index 963aa30c674..c41fe7c0493 100644 --- a/libs/sdk-ui-vis-commons/tsconfig.build.json +++ b/libs/sdk-ui-vis-commons/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts", "**/*.test.tsx", "**/test/helper.ts"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-vis-commons/tsconfig.json b/libs/sdk-ui-vis-commons/tsconfig.json index f6ae8005d4c..b49d0b0af08 100644 --- a/libs/sdk-ui-vis-commons/tsconfig.json +++ b/libs/sdk-ui-vis-commons/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui-vis-commons/vitest-matchers.d.ts b/libs/sdk-ui-vis-commons/vitest-matchers.d.ts index a4ef0c112cc..ce90c658ed8 100644 --- a/libs/sdk-ui-vis-commons/vitest-matchers.d.ts +++ b/libs/sdk-ui-vis-commons/vitest-matchers.d.ts @@ -3,9 +3,9 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { - // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-vis-commons/vitest.config.ts b/libs/sdk-ui-vis-commons/vitest.config.ts index 5c2e5a4b1e5..c11040cdf67 100644 --- a/libs/sdk-ui-vis-commons/vitest.config.ts +++ b/libs/sdk-ui-vis-commons/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { environment: "happy-dom", diff --git a/libs/sdk-ui-vis-commons/vitest.setup.ts b/libs/sdk-ui-vis-commons/vitest.setup.ts index 3db08f6680f..7929e2f958c 100644 --- a/libs/sdk-ui-vis-commons/vitest.setup.ts +++ b/libs/sdk-ui-vis-commons/vitest.setup.ts @@ -1,24 +1,16 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; import { afterEach, expect } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - -// eslint-disable-next-line import/no-extraneous-dependencies import * as matchers from "vitest-dom/dist/matchers.js"; -// eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui-web-components/.eslintignore b/libs/sdk-ui-web-components/.eslintignore deleted file mode 100644 index 8a6f5ef3f31..00000000000 --- a/libs/sdk-ui-web-components/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -vite.config.ts -./debug/index.js diff --git a/libs/sdk-ui-web-components/package.json b/libs/sdk-ui-web-components/package.json index 8b195a0f208..d78853327c3 100644 --- a/libs/sdk-ui-web-components/package.json +++ b/libs/sdk-ui-web-components/package.json @@ -39,12 +39,12 @@ "dep-cruiser": "depcruise --validate .dependency-cruiser.js --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.js --output-type err-long src/", "dev": "vite", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", "pack-build": "tar -czf sdk-ui-web-components.tgz -C esm .", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "proxy": "node ./scripts/proxy.js", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", @@ -100,6 +100,7 @@ "raf": "^3.4.1", "react": "19.1.1", "react-dom": "19.1.1", + "rollup": "^4.51.0", "typescript": "5.8.3", "vite": "^6.3.6", "vite-plugin-css-injected-by-js": "3.1.1", diff --git a/libs/sdk-ui-web-components/scripts/copy-dts.js b/libs/sdk-ui-web-components/scripts/copy-dts.js index 7dbbd768d93..86431e14855 100644 --- a/libs/sdk-ui-web-components/scripts/copy-dts.js +++ b/libs/sdk-ui-web-components/scripts/copy-dts.js @@ -1,6 +1,6 @@ // (C) 2022-2025 GoodData Corporation -import fs from 'fs'; -import path from 'path'; +import fs from "fs"; +import path from "path"; // Create the directory structure if it doesn't exist const ensureDirectoryExists = (dirPath) => { @@ -11,10 +11,10 @@ const ensureDirectoryExists = (dirPath) => { // Copy TypeScript declaration files from temp directory to esm directory const copyDeclarationFiles = () => { - const srcDir = path.resolve('./temp'); - const destDir = path.resolve('./esm'); + const srcDir = path.resolve("./temp"); + const destDir = path.resolve("./esm"); - const filesToCopy = ['index.d.ts', 'tigerBackend.d.ts']; + const filesToCopy = ["index.d.ts", "tigerBackend.d.ts"]; // Ensure the destination directory exists ensureDirectoryExists(destDir); @@ -25,7 +25,6 @@ const copyDeclarationFiles = () => { // eslint-disable-next-line no-console console.log(`Copied ${file} to esm directory`); } else { - // eslint-disable-next-line no-console console.error(`${file} not found in temp directory`); } }); diff --git a/libs/sdk-ui-web-components/tsconfig.build.json b/libs/sdk-ui-web-components/tsconfig.build.json index 963aa30c674..525d1641629 100644 --- a/libs/sdk-ui-web-components/tsconfig.build.json +++ b/libs/sdk-ui-web-components/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts", "**/*.test.tsx"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui-web-components/tsconfig.json b/libs/sdk-ui-web-components/tsconfig.json index 39d5d472fd4..3d4c2987174 100644 --- a/libs/sdk-ui-web-components/tsconfig.json +++ b/libs/sdk-ui-web-components/tsconfig.json @@ -1,9 +1,6 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, "skipLibCheck": true } diff --git a/libs/sdk-ui-web-components/vite.config.ts b/libs/sdk-ui-web-components/vite.config.ts index bebc9c378eb..736820d518a 100644 --- a/libs/sdk-ui-web-components/vite.config.ts +++ b/libs/sdk-ui-web-components/vite.config.ts @@ -4,6 +4,7 @@ import { createRequire } from "node:module"; import { fileURLToPath } from "node:url"; import { dirname, resolve } from "node:path"; import environment from "vite-plugin-environment"; +import { OutputChunk } from "rollup"; import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js"; const require = createRequire(import.meta.url); @@ -42,7 +43,7 @@ export default defineConfig(({ command, mode }) => { VITE_WORKSPACE: JSON.stringify(env["VITE_WORKSPACE"]), VITE_INSIGHT: JSON.stringify(env["VITE_INSIGHT"]), VITE_AUTH_TOKEN: JSON.stringify(env["VITE_AUTH_TOKEN"]), - 'process.env': {NODE_ENV:mode}, + "process.env": { NODE_ENV: mode }, }, root: debugDir, publicDir: false, @@ -67,17 +68,17 @@ export default defineConfig(({ command, mode }) => { TEST_PSEUDOMAP: "", }), cssInjectedByJsPlugin({ - jsAssetsFilterFunction: (chunk) => /^index\.js$/.test(chunk.fileName), + jsAssetsFilterFunction: (chunk: OutputChunk) => /^index\.js$/.test(chunk.fileName), }), ], define: { NPM_PACKAGE_NAME: JSON.stringify(npmPackage.name), NPM_PACKAGE_VERSION: JSON.stringify(sdkModelVersion), - 'process.env': {NODE_ENV:mode}, + "process.env": { NODE_ENV: mode }, }, build: { - minify: mode === "production" ? true : false, - sourcemap: mode === "development" ? true : false, + minify: mode === "production", + sourcemap: mode === "development", lib: { entry: { index: resolve(projectDir, "src", "index.ts"), diff --git a/libs/sdk-ui-web-components/vitest.config.ts b/libs/sdk-ui-web-components/vitest.config.ts index bc3487d292a..0f60e876e39 100644 --- a/libs/sdk-ui-web-components/vitest.config.ts +++ b/libs/sdk-ui-web-components/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { setupFiles: "./vitest.setup.ts", diff --git a/libs/sdk-ui/__mocks__/fixtures.ts b/libs/sdk-ui/__mocks__/fixtures.ts index 5e74d496ee1..e2b646b138b 100644 --- a/libs/sdk-ui/__mocks__/fixtures.ts +++ b/libs/sdk-ui/__mocks__/fixtures.ts @@ -1,9 +1,11 @@ // (C) 2007-2019 GoodData Corporation -import { LegacyExecutionRecording, legacyRecordedDataView } from "@gooddata/sdk-backend-mockingbird"; -import { IInsight, uriRef } from "@gooddata/sdk-model"; -import { DataViewFacade } from "../src/base/results/facade.js"; import { createRequire } from "module"; +import { type LegacyExecutionRecording, legacyRecordedDataView } from "@gooddata/sdk-backend-mockingbird"; +import { type IInsight, uriRef } from "@gooddata/sdk-model"; + +import { DataViewFacade } from "../src/base/results/facade.js"; + export const testWorkspace = "testWorkspace"; const require = createRequire(import.meta.url); diff --git a/libs/sdk-ui/package.json b/libs/sdk-ui/package.json index 77905a21b97..378e52e84b0 100644 --- a/libs/sdk-ui/package.json +++ b/libs/sdk-ui/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/sdk-ui", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData.UI SDK - Core", "repository": { "type": "git", @@ -41,11 +41,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "stylelint": "stylelint '**/*.scss'", "stylelint-ci": "stylelint '**/*.scss' --custom-formatter=node_modules/stylelint-checkstyle-formatter > ./ci/results/stylelint-results.xml", "stylelint-fix": "stylelint '**/*.scss' --fix", diff --git a/libs/sdk-ui/src/execution/tests/Execute.test.tsx b/libs/sdk-ui/src/execution/tests/Execute.test.tsx index cade45a8469..8c160f9b79c 100644 --- a/libs/sdk-ui/src/execution/tests/Execute.test.tsx +++ b/libs/sdk-ui/src/execution/tests/Execute.test.tsx @@ -8,10 +8,7 @@ import { dummyBackend, dummyBackendEmptyData } from "@gooddata/sdk-backend-mocki import { type IAnalyticalBackend } from "@gooddata/sdk-backend-spi"; import { newAttributeSort, newPositiveAttributeFilter, newTotal } from "@gooddata/sdk-model"; -import { type AttributeMeasureOrPlaceholder } from "src/base/index.js"; - -import { LoadingComponent } from "../../base/react/LoadingComponent.js"; -import { DataViewFacade } from "../../base/results/facade.js"; +import { type AttributeMeasureOrPlaceholder, DataViewFacade, LoadingComponent } from "../../base/index.js"; import { type CreateExecutionOptions, createExecution } from "../createExecution.js"; import { Execute, type IExecuteProps } from "../Execute.js"; import { type IExecuteErrorComponentProps } from "../interfaces.js"; diff --git a/libs/sdk-ui/tsconfig.build.json b/libs/sdk-ui/tsconfig.build.json index 963aa30c674..79f64ece387 100644 --- a/libs/sdk-ui/tsconfig.build.json +++ b/libs/sdk-ui/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.react.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts", "**/*.test.tsx", "**/*.fixtures.ts", "**/tests/toolkit.ts"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/sdk-ui/tsconfig.json b/libs/sdk-ui/tsconfig.json index f6ae8005d4c..8e06f137308 100644 --- a/libs/sdk-ui/tsconfig.json +++ b/libs/sdk-ui/tsconfig.json @@ -1,11 +1,9 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.react.json", "compilerOptions": { "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/sdk-ui/vitest-matchers.d.ts b/libs/sdk-ui/vitest-matchers.d.ts index a4ef0c112cc..9da53bff975 100644 --- a/libs/sdk-ui/vitest-matchers.d.ts +++ b/libs/sdk-ui/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/sdk-ui/vitest.config.ts b/libs/sdk-ui/vitest.config.ts index 5c2e5a4b1e5..c11040cdf67 100644 --- a/libs/sdk-ui/vitest.config.ts +++ b/libs/sdk-ui/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { environment: "happy-dom", diff --git a/libs/sdk-ui/vitest.setup.ts b/libs/sdk-ui/vitest.setup.ts index b45963daea4..c5132dbef90 100644 --- a/libs/sdk-ui/vitest.setup.ts +++ b/libs/sdk-ui/vitest.setup.ts @@ -1,24 +1,18 @@ // (C) 2023-2025 GoodData Corporation import { cleanup } from "@testing-library/react"; -import { expect, afterEach } from "vitest"; - -/** - * In order to be able to use extended matchers like "toBeInDocument", we use vitest-dom instead of testing-library/jest-dom. - * The reason for that is that there were type conflicts between vitest and types/jest as dependency of testing-library/jest-dom. - */ - +import { afterEach, expect } from "vitest"; // eslint-disable-next-line import/no-extraneous-dependencies import * as matchers from "vitest-dom/dist/matchers.js"; // eslint-disable-next-line import/no-extraneous-dependencies -import { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; +import { type TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; /** * Exports of types and matchers of vitest-dom is currently broken we need export matchers from dist and define types manually */ declare module "vitest" { - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-interface,@typescript-eslint/no-empty-object-type interface Assertion extends TestingLibraryMatchers {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-interface,@typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/tsconfig.base.json b/libs/tsconfig.base.json index 75897cdbca8..4491faf8c2c 100644 --- a/libs/tsconfig.base.json +++ b/libs/tsconfig.base.json @@ -1,5 +1,6 @@ { "extends": "../tsconfig.strict.json", + "exclude": ["**/node_modules", "**/esm", "**/dist", "**/temp", "**/dist-storybook"], "compilerOptions": { "target": "ES2022", "lib": ["ES2022", "dom"], diff --git a/libs/util/package.json b/libs/util/package.json index 67275c64039..811dbd44b38 100644 --- a/libs/util/package.json +++ b/libs/util/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/util", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData Utility Functions", "repository": { "type": "git", @@ -29,11 +29,11 @@ "clean": "../../common/scripts/clean-command-state.sh && rm -rf ci dist esm coverage *.log tsconfig.tsbuildinfo", "dep-cruiser": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.cjs --output-type err-long src/", - "eslint": "eslint -c .eslintrc.cjs src/", - "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", - "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "eslint": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs --ignore-path ../.eslintignore .", + "eslint-fix": "eslint -c .eslintrc.cjs --ignore-path ../.eslintignore . --fix", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/libs/util/tsconfig.build.json b/libs/util/tsconfig.build.json index 16f78785951..2541f432f49 100644 --- a/libs/util/tsconfig.build.json +++ b/libs/util/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", - "exclude": ["**/tests", "**/test"], - "include": ["src/**/*", "src/**/*.json"], + "exclude": ["**/*.test.ts"], + "include": ["src/**/*"], "compilerOptions": { "baseUrl": ".", "rootDir": "./src", diff --git a/libs/util/tsconfig.json b/libs/util/tsconfig.json index f6ae8005d4c..bb76f7af3b5 100644 --- a/libs/util/tsconfig.json +++ b/libs/util/tsconfig.json @@ -1,11 +1,8 @@ { - "extends": "./tsconfig.build.json", - "exclude": ["node_modules", "../../common/temp"], - "include": ["src/**/*", "*.{ts,tsx}"], + "extends": "../tsconfig.base.json", "compilerOptions": { - "rootDir": "./", "noEmit": true, - "types": ["./vitest-matchers.d.ts"], - "skipLibCheck": true + "skipLibCheck": true, + "types": ["./vitest-matchers.d.ts"] } } diff --git a/libs/util/vitest-matchers.d.ts b/libs/util/vitest-matchers.d.ts index a4ef0c112cc..e7fdcb9ddd6 100644 --- a/libs/util/vitest-matchers.d.ts +++ b/libs/util/vitest-matchers.d.ts @@ -4,8 +4,10 @@ import type { TestingLibraryMatchers } from "vitest-dom/dist/matchers.js"; declare module "vitest" { // Extend Vitest's Assertion interface with vitest-dom matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type,@typescript-eslint/naming-convention interface Assertion extends TestingLibraryMatchers {} // Extend AsymmetricMatchersContaining for asymmetric matchers + // eslint-disable-next-line @typescript-eslint/no-empty-object-type,@typescript-eslint/naming-convention interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} } diff --git a/libs/util/vitest.config.ts b/libs/util/vitest.config.ts index bc3487d292a..0f60e876e39 100644 --- a/libs/util/vitest.config.ts +++ b/libs/util/vitest.config.ts @@ -1,6 +1,7 @@ // (C) 2023-2025 GoodData Corporation import { defineConfig } from "vitest/config"; +// eslint-disable-next-line no-restricted-exports export default defineConfig({ test: { setupFiles: "./vitest.setup.ts", diff --git a/skel/sdk-skel-ts/package.json b/skel/sdk-skel-ts/package.json index bc82edbd7c4..b4666057559 100644 --- a/skel/sdk-skel-ts/package.json +++ b/skel/sdk-skel-ts/package.json @@ -35,8 +35,8 @@ "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.js --output-type err-long src/", "eslint": "eslint $npm_package_config_eslint", "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml $npm_package_config_eslint", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/skel/sdk-skel-tsx/package.json b/skel/sdk-skel-tsx/package.json index 574c875b220..3db4e1e7e46 100644 --- a/skel/sdk-skel-tsx/package.json +++ b/skel/sdk-skel-tsx/package.json @@ -40,8 +40,8 @@ "dep-cruiser-ci": "depcruise --validate .dependency-cruiser.js --output-type err-long src/", "eslint": "eslint $npm_package_config_eslint", "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml $npm_package_config_eslint", - "prettier-check": "prettier --check '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,stories,styles,__mocks__}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,stories,styles,__mocks__}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/tools/app-toolkit/package.json b/tools/app-toolkit/package.json index 453aa913c1f..ccf898d49e2 100644 --- a/tools/app-toolkit/package.json +++ b/tools/app-toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/app-toolkit", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "CLI with useful tools for creating and maintaining GoodData web applications.", "repository": { "type": "git", @@ -39,8 +39,8 @@ "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", "prepack": "cp -f ../../NOTICE ./NOTICE", "prepublishOnly": "npm run build", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch --passWithNoTests", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml --passWithNoTests", "test-once": "vitest run --passWithNoTests", diff --git a/tools/applink/package.json b/tools/applink/package.json index a2e650c0033..50d52d5d427 100644 --- a/tools/applink/package.json +++ b/tools/applink/package.json @@ -34,8 +34,8 @@ "eslint": "eslint $npm_package_config_eslint", "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml $npm_package_config_eslint", "eslint-fix": "eslint $npm_package_config_eslint --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/tools/catalog-export/package.json b/tools/catalog-export/package.json index 536b2cea646..48717cbc7f2 100644 --- a/tools/catalog-export/package.json +++ b/tools/catalog-export/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/catalog-export", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK Catalog Export tooling", "repository": { "type": "git", @@ -34,8 +34,8 @@ "eslint": "eslint -c .eslintrc.cjs src/", "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/tools/dashboard-plugin-template/package.json b/tools/dashboard-plugin-template/package.json index 1cc32d735bc..f2c182d2b7d 100644 --- a/tools/dashboard-plugin-template/package.json +++ b/tools/dashboard-plugin-template/package.json @@ -40,8 +40,8 @@ "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", "gdc-plugins": "gdc-plugins", "link-plugin": "gdc-plugins dashboard-plugin link", - "prettier-check": "prettier --check \"{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}\"", - "prettier-write": "prettier --write \"{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}\"", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check \"{src,test}/**/*.{json,scss,md,yaml,html}\"", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write \"{src,test}/**/*.{json,scss,md,yaml,html}\"", "refresh-md": "node ./scripts/refresh-md.js", "remove-plugin-params": "gdc-plugins dashboard-plugin remove-params", "start": "webpack-cli serve --config-name harness", diff --git a/tools/eslint-config/package.json b/tools/eslint-config/package.json index 3a36d27a0cf..d2efe7041a0 100644 --- a/tools/eslint-config/package.json +++ b/tools/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/eslint-config", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "repository": { "type": "git", "url": "https://github.com/gooddata/gooddata-ui-sdk.git", diff --git a/tools/i18n-toolkit/package.json b/tools/i18n-toolkit/package.json index 5a53195370f..1a00e3dffc1 100644 --- a/tools/i18n-toolkit/package.json +++ b/tools/i18n-toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/i18n-toolkit", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "Localization validator to validate localization complexity and intl and html format.", "repository": { "type": "git", @@ -34,8 +34,8 @@ "eslint": "eslint $npm_package_config_eslint", "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml $npm_package_config_eslint", "eslint-fix": "eslint $npm_package_config_eslint --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "run": "node ./esm/index.js", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", diff --git a/tools/mock-handling/package.json b/tools/mock-handling/package.json index c6ca5e8c196..e022a51faf4 100644 --- a/tools/mock-handling/package.json +++ b/tools/mock-handling/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/mock-handling", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK Mock data capture and management tool", "repository": { "type": "git", @@ -34,8 +34,8 @@ "eslint": "eslint -c .eslintrc.cjs src/", "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/tools/plugin-toolkit/package.json b/tools/plugin-toolkit/package.json index 13834619463..df6d6a285cf 100644 --- a/tools/plugin-toolkit/package.json +++ b/tools/plugin-toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/plugin-toolkit", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData Set of Tools for working with Plugins", "repository": { "type": "git", @@ -40,8 +40,8 @@ "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", "prepack": "cp -f ../../NOTICE ./NOTICE", "prepublishOnly": "npm run build", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml", "test-once": "vitest run", diff --git a/tools/react-app-template/package.json b/tools/react-app-template/package.json index 3ebb65e50b2..536c324f102 100644 --- a/tools/react-app-template/package.json +++ b/tools/react-app-template/package.json @@ -34,8 +34,8 @@ "eslint": "eslint -c .eslintrc.cjs src/", "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml -c .eslintrc.cjs src/", "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", - "prettier-check": "prettier --check \"{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}\"", - "prettier-write": "prettier --write \"{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}\"", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check \"{src,test}/**/*.{json,scss,md,yaml,html}\"", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write \"{src,test}/**/*.{json,scss,md,yaml,html}\"", "refresh-md": "gdc-catalog-export", "start": "webpack-cli serve", "validate": "npm run dep-cruiser && npm run eslint && npm run prettier-check" diff --git a/tools/reference-workspace-mgmt/package.json b/tools/reference-workspace-mgmt/package.json index 6601da1c8c2..14ae840a744 100644 --- a/tools/reference-workspace-mgmt/package.json +++ b/tools/reference-workspace-mgmt/package.json @@ -30,8 +30,8 @@ "eslint-ci": "mkdir -p ./ci/results && eslint -f checkstyle -o ci/results/eslint-results.xml $npm_package_config_eslint", "export-ref-workspace": "node ./bin/export_ref_workspace.js && npm run prettier-write", "import-ref-workspace": "node ./bin/import_ref_workspace.js", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test,fixtures}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test,fixtures}/**/*.{json,scss,md,yaml,html}'", "test": "vitest watch --passWithNoTests", "test-ci": "vitest run --reporter=junit --outputFile=./ci/results/test-results.xml --passWithNoTests", "test-once": "vitest run --passWithNoTests", diff --git a/tools/reference-workspace/package.json b/tools/reference-workspace/package.json index 508394eea31..1cceb37db1a 100644 --- a/tools/reference-workspace/package.json +++ b/tools/reference-workspace/package.json @@ -1,6 +1,6 @@ { "name": "@gooddata/reference-workspace", - "version": "11.15.0-alpha.12", + "version": "11.15.0-alpha.13", "description": "GoodData SDK - Reference Workspace for tests", "repository": { "type": "git", @@ -32,8 +32,8 @@ "eslint-fix": "eslint -c .eslintrc.cjs src/ --fix", "export-ref-workspace": "cd ../reference-workspace-mgmt && npm run export-ref-workspace", "import-ref-workspace": "cd ../reference-workspace-mgmt && npm run import-ref-workspace", - "prettier-check": "prettier --check '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", - "prettier-write": "prettier --write '{src,test}/**/*.{ts,tsx,json,scss,md,yaml,html}'", + "prettier-check": "prettier --no-error-on-unmatched-pattern --check '{src,test}/**/*.{json,scss,md,yaml,html}'", + "prettier-write": "prettier --no-error-on-unmatched-pattern --write '{src,test}/**/*.{json,scss,md,yaml,html}'", "refresh-md": "../reference-workspace-mgmt/bin/refresh-md.sh && npm run build", "refresh-recordings": "../reference-workspace-mgmt/bin/refresh-recordings.sh && npm run prettier-write && npm run build", "validate": "npm run dep-cruiser && npm run eslint && npm run prettier-check" diff --git a/tools/reference-workspace/src/recordings/dataSample.ts b/tools/reference-workspace/src/recordings/dataSample.ts index 0b487d6dd02..9b34b04766d 100644 --- a/tools/reference-workspace/src/recordings/dataSample.ts +++ b/tools/reference-workspace/src/recordings/dataSample.ts @@ -1,7 +1,7 @@ // (C) 2025 GoodData Corporation /* eslint-disable import/order */ -/* THIS FILE WAS AUTO-GENERATED USING MOCK HANDLING TOOL; YOU SHOULD NOT EDIT THIS FILE; GENERATE TIME: 2025-12-08T12:36:48.130Z; */ +/* THIS FILE WAS AUTO-GENERATED USING MOCK HANDLING TOOL; YOU SHOULD NOT EDIT THIS FILE; GENERATE TIME: 2025-12-26T19:14:53.550Z; */ import df_label_f_activity_subject from "./metadata/displayForms/label.f_activity.subject/elements.json" with { type: "json" }; import df_label_f_product_product_name from "./metadata/displayForms/label.f_product.product.name/elements.json" with { type: "json" }; diff --git a/tools/reference-workspace/src/recordings/index.ts b/tools/reference-workspace/src/recordings/index.ts index fc86c7e2008..aaf8a9c58a5 100644 --- a/tools/reference-workspace/src/recordings/index.ts +++ b/tools/reference-workspace/src/recordings/index.ts @@ -1,7 +1,7 @@ // (C) 2025 GoodData Corporation /* eslint-disable import/order */ -/* THIS FILE WAS AUTO-GENERATED USING MOCK HANDLING TOOL; YOU SHOULD NOT EDIT THIS FILE; GENERATE TIME: 2025-12-08T12:36:48.130Z; */ +/* THIS FILE WAS AUTO-GENERATED USING MOCK HANDLING TOOL; YOU SHOULD NOT EDIT THIS FILE; GENERATE TIME: 2025-12-26T19:14:53.550Z; */ import fp_004031cbc9081950b7284311b004fe11_definition from "./uiTestScenarios/executions/004031cbc9081950b7284311b004fe11/definition.json" with { type: "json" }; import fp_004031cbc9081950b7284311b004fe11_executionResult from "./uiTestScenarios/executions/004031cbc9081950b7284311b004fe11/executionResult.json" with { type: "json" }; @@ -21,6 +21,16 @@ const fp_005a4c2e17417f0c5780fb84d4bb7490 = { executionResult: fp_005a4c2e17417f0c5780fb84d4bb7490_executionResult, dataView_o0_0s100_1000: fp_005a4c2e17417f0c5780fb84d4bb7490_dataView_o0_0s100_1000, }; +import fp_0087d8270a7e1f41ada5177a2f88205e_definition from "./uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/definition.json" with { type: "json" }; +import fp_0087d8270a7e1f41ada5177a2f88205e_executionResult from "./uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/executionResult.json" with { type: "json" }; +import fp_0087d8270a7e1f41ada5177a2f88205e_dataView_o0_0s100_1000 from "./uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/dataView_o0_0s100_1000.json" with { type: "json" }; +import fp_0087d8270a7e1f41ada5177a2f88205e_scenarios from "./uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/scenarios.json" with { type: "json" }; +const fp_0087d8270a7e1f41ada5177a2f88205e = { + definition: fp_0087d8270a7e1f41ada5177a2f88205e_definition, + executionResult: fp_0087d8270a7e1f41ada5177a2f88205e_executionResult, + dataView_o0_0s100_1000: fp_0087d8270a7e1f41ada5177a2f88205e_dataView_o0_0s100_1000, + scenarios: fp_0087d8270a7e1f41ada5177a2f88205e_scenarios, +}; import fp_0095badec8cf82cef537c0075a4329d8_definition from "./uiTestScenarios/executions/0095badec8cf82cef537c0075a4329d8/definition.json" with { type: "json" }; import fp_0095badec8cf82cef537c0075a4329d8_executionResult from "./uiTestScenarios/executions/0095badec8cf82cef537c0075a4329d8/executionResult.json" with { type: "json" }; import fp_0095badec8cf82cef537c0075a4329d8_dataView_o0_0s100_1000 from "./uiTestScenarios/executions/0095badec8cf82cef537c0075a4329d8/dataView_o0_0s100_1000.json" with { type: "json" }; @@ -1100,12 +1110,14 @@ const fp_798df950f4dbb5d1df536bb33ba80a11 = { import fp_7aacee42d5804a99f3dab100b0a5669e_definition from "./uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/definition.json" with { type: "json" }; import fp_7aacee42d5804a99f3dab100b0a5669e_executionResult from "./uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/executionResult.json" with { type: "json" }; import fp_7aacee42d5804a99f3dab100b0a5669e_dataView_o0_0s100_1000 from "./uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s100_1000.json" with { type: "json" }; +import fp_7aacee42d5804a99f3dab100b0a5669e_dataView_o0_0s5_1000 from "./uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s5_1000.json" with { type: "json" }; import fp_7aacee42d5804a99f3dab100b0a5669e_dataView_o0_0s22_1000 from "./uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s22_1000.json" with { type: "json" }; import fp_7aacee42d5804a99f3dab100b0a5669e_scenarios from "./uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/scenarios.json" with { type: "json" }; const fp_7aacee42d5804a99f3dab100b0a5669e = { definition: fp_7aacee42d5804a99f3dab100b0a5669e_definition, executionResult: fp_7aacee42d5804a99f3dab100b0a5669e_executionResult, dataView_o0_0s100_1000: fp_7aacee42d5804a99f3dab100b0a5669e_dataView_o0_0s100_1000, + dataView_o0_0s5_1000: fp_7aacee42d5804a99f3dab100b0a5669e_dataView_o0_0s5_1000, dataView_o0_0s22_1000: fp_7aacee42d5804a99f3dab100b0a5669e_dataView_o0_0s22_1000, scenarios: fp_7aacee42d5804a99f3dab100b0a5669e_scenarios, }; @@ -1739,12 +1751,14 @@ const fp_c2b850d7baff511e45e237d6707d5f7c = { }; import fp_c2ed90caa1677729885f2f90df6bdd73_definition from "./uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/definition.json" with { type: "json" }; import fp_c2ed90caa1677729885f2f90df6bdd73_executionResult from "./uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/executionResult.json" with { type: "json" }; +import fp_c2ed90caa1677729885f2f90df6bdd73_dataView_o0_0s5_1000 from "./uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/dataView_o0_0s5_1000.json" with { type: "json" }; import fp_c2ed90caa1677729885f2f90df6bdd73_dataView_o0_0s100_1000 from "./uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/dataView_o0_0s100_1000.json" with { type: "json" }; import fp_c2ed90caa1677729885f2f90df6bdd73_dataView_o0_0s22_1000 from "./uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/dataView_o0_0s22_1000.json" with { type: "json" }; import fp_c2ed90caa1677729885f2f90df6bdd73_scenarios from "./uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/scenarios.json" with { type: "json" }; const fp_c2ed90caa1677729885f2f90df6bdd73 = { definition: fp_c2ed90caa1677729885f2f90df6bdd73_definition, executionResult: fp_c2ed90caa1677729885f2f90df6bdd73_executionResult, + dataView_o0_0s5_1000: fp_c2ed90caa1677729885f2f90df6bdd73_dataView_o0_0s5_1000, dataView_o0_0s100_1000: fp_c2ed90caa1677729885f2f90df6bdd73_dataView_o0_0s100_1000, dataView_o0_0s22_1000: fp_c2ed90caa1677729885f2f90df6bdd73_dataView_o0_0s22_1000, scenarios: fp_c2ed90caa1677729885f2f90df6bdd73_scenarios, @@ -2322,6 +2336,245 @@ export const Scenarios = { execution: fp_fa9ce8aba21b38cbed227af04fbaa1e7, }, }, + PivotTableNext: { + TwoMeasuresAndGrandTotalsAndMultipleSubtotals: { + scenarioIndex: 0, + execution: fp_6ef5731c63a579f03fde4a9b01f7c607, + }, + SingleMeasureAndSingleColumnGrandTotal: { + scenarioIndex: 1, + execution: fp_08a6c636ea0d007de91e886fc9fbd1bb, + }, + TwoMeasuresAndOneSubtotal: { scenarioIndex: 1, execution: fp_10a1791bf91af3f9d71fec403da50bfc }, + TwoMeasuresWithThreeRowsAndTwoColumnAttributes: { + scenarioIndex: 1, + execution: fp_12d1eb593ce811011cea335d45b4e7d9, + }, + TwoMeasuresAndSingleGrandTotalSortedBySecondAttribute: { + scenarioIndex: 1, + execution: fp_17e1400e22cf959015e4be5bdb618c37, + }, + WithTwoSameDates: { scenarioIndex: 1, execution: fp_1dee8e67d6f87c8f37dce28126fc893e }, + TwoMeasuresAndMultipleGrandTotalsForEach: { + scenarioIndex: 1, + execution: fp_b15be8f3c2c0e721956f0563e80f2e07, + }, + SingleAttribute: { scenarioIndex: 1, execution: fp_245cabd1fb1f98e24cd680cc9c52254b }, + MultipleMeasuresAndNoColumnsWithTotals: { + scenarioIndex: 0, + execution: fp_dcaded12a70ed9c7556c96b4d4d54763, + }, + SingleMeasurePivotSortedByFirstAndSecondRowAttr: { + scenarioIndex: 0, + execution: fp_300c0b908199156a328388972230be9a, + }, + TwoMeasuresAndMultipleColumnRowGrandTotalsForEach: { + scenarioIndex: 1, + execution: fp_6d744aacff949cf033683d86262b4e77, + }, + MultipleMeasuresAndRowAttributesWithMetricsInRowsWithDrilling: { + scenarioIndex: 1, + execution: fp_38b3cbb3e3c8b075d1b11de44c78a01e, + }, + WithDateFilter: { scenarioIndex: 1, execution: fp_4765fcec9e0cf6a0f6474dfcc89346f9 }, + SingleMeasure: { scenarioIndex: 10, execution: fp_48d6b389940c3f7522eddc93458a0b0b }, + SingleMeasureAndMultipleGrandTotals: { + scenarioIndex: 1, + execution: fp_93b4400696ea330b3d49c0506eb90538, + }, + SingleMeasureAndMultipleColumnGrandTotals: { + scenarioIndex: 0, + execution: fp_50c6b990ee6e7496159726ebb00e82e7, + }, + TwoMeasuresAndMultipleColumnGrandTotalsForEach: { + scenarioIndex: 1, + execution: fp_b30b06df758636e35e03b96a9662e53f, + }, + TwoMeasuresInRowsAndColumnAttrsOnLeftWithTotals: { + scenarioIndex: 1, + execution: fp_55a6a5d0f818f5a7676513e4378a2868, + }, + TwoMeasuresAndColumnRowGrandTotalsAndMultipleSubtotals: { + scenarioIndex: 0, + execution: fp_f1e4efd7d700c6c819fa3568fc9bcae8, + }, + MultipleMeasuresAndNoRowsWithTotals: { + scenarioIndex: 2, + execution: fp_568f6f8fe45127977df23f1e7c16c3e0, + }, + TwoMeasuresInRowsAndOnlyColumnAttrsOnLeftWithTotals: { + scenarioIndex: 3, + execution: fp_568f6f8fe45127977df23f1e7c16c3e0, + }, + TwoMeasuresAndOneColumnRowSubtotal: { + scenarioIndex: 1, + execution: fp_57e4abf06e14ca7c6ca589f5ba620932, + }, + TwoMeasuresWithSingleRowAttrWithMetricsInRows: { + scenarioIndex: 1, + execution: fp_628456d9adb09d97807468db6d357f34, + }, + TwoMeasuresAndColumnSingleGrandTotalSortedBySecondAttribute: { + scenarioIndex: 1, + execution: fp_63e53a643477c7f0a1e4b96443d1a072, + }, + TwoMeasures: { scenarioIndex: 6, execution: fp_681fd174545bf5e693b9b0df873870cb }, + SingleMeasurePivotSortedBySecondRowAttr: { + scenarioIndex: 1, + execution: fp_6ad17cce441c93f0c1f6c5cfffb7d7af, + }, + TwoMeasuresWithColumnAttribute: { scenarioIndex: 1, execution: fp_6b38289e3de520261ba662868a3bc5ba }, + ArithmeticMeasures: { scenarioIndex: 1, execution: fp_70330fa367d33c4c428d5d3e54df8eb9 }, + TwoMeasuresAndMultipleSubtotals: { scenarioIndex: 1, execution: fp_743dad3dce349764d1e2617b3e87026f }, + TwoMeasuresAndMultipleColumnSubtotals: { + scenarioIndex: 1, + execution: fp_77f869ae69c392717c13b188e2074842, + }, + TwoMeasuresAndSingleGrandTotalForEach: { + scenarioIndex: 1, + execution: fp_7aacee42d5804a99f3dab100b0a5669e, + }, + PaginationWith5RowsPerPageAndTotals: { + scenarioIndex: 2, + execution: fp_7aacee42d5804a99f3dab100b0a5669e, + }, + GrandTotalsPinnedAtBottomDefault: { + scenarioIndex: 3, + execution: fp_7aacee42d5804a99f3dab100b0a5669e, + }, + GrandTotalsPinnedAtTop: { scenarioIndex: 4, execution: fp_7aacee42d5804a99f3dab100b0a5669e }, + GrandTotalsAtBottomNotPinned: { scenarioIndex: 5, execution: fp_7aacee42d5804a99f3dab100b0a5669e }, + GrandTotalsAtTopNotPinned: { scenarioIndex: 6, execution: fp_7aacee42d5804a99f3dab100b0a5669e }, + TwoMeasuresAndMultipleColumnRowSubtotalsWithMetricsInRows: { + scenarioIndex: 0, + execution: fp_dfeebd400b7a16d1e3c434152fc9dd09, + }, + SingleMeasureWithRowAndColumnAttributes: { + scenarioIndex: 1, + execution: fp_8c58de518b0e42711e9379cce480a63b, + }, + TwoMeasuresWithRowAndColumnAttributes: { + scenarioIndex: 1, + execution: fp_8eaf6e86ea212a22493eb7c06370a1b1, + }, + WithAttributesWithoutMeasures: { scenarioIndex: 1, execution: fp_956c1be097a9bb7880556e5ba651ad33 }, + SingleMeasurePivotSortedByFirstRowAttr: { + scenarioIndex: 1, + execution: fp_9bbaf756a6a44325dc1a9315de17d0fb, + }, + SingleMeasureWithColumnAttribute: { + scenarioIndex: 1, + execution: fp_9bcc3db7967bd54930a357186a0d39f9, + }, + SingleMeasureAndSingleGrandTotal: { + scenarioIndex: 1, + execution: fp_a49032eb49179fa4f6f56427072f88bf, + }, + SingleMeasureWithTwoRowAndTwoColumnAttributes: { + scenarioIndex: 4, + execution: fp_aea45a374b1f55e749275b328e30d94d, + }, + EmptyValues: { scenarioIndex: 5, execution: fp_aea45a374b1f55e749275b328e30d94d }, + TableWithMultipleMeasureColumnsAndWeakMeasureSize: { + scenarioIndex: 6, + execution: fp_aea45a374b1f55e749275b328e30d94d, + }, + TwoMeasuresAndSingleColumnGrandTotalAndSingleSubtotalSortedBySecondAttribute: { + scenarioIndex: 1, + execution: fp_b01bccbf9167508268b7a901b4ccd063, + }, + TwoMeasuresWithTwoRowAndOneColumnAttributes: { + scenarioIndex: 1, + execution: fp_b034871dc7b2c8d7d9fc10a81b1b5fae, + }, + SingleMeasureAndMultipleColumnRowGrandTotals: { + scenarioIndex: 1, + execution: fp_b3727c142e53427d1ac555b048019f88, + }, + TwoMeasuresAndSingleColumnGrandTotalForOne: { + scenarioIndex: 1, + execution: fp_b8402b07097387493122f955cdae5e61, + }, + TwoMeasuresAndOneColumnSubtotal: { scenarioIndex: 1, execution: fp_ba1ccbfca6ce3c9311d8becc13b28093 }, + SingleMeasureWithRowAttribute: { scenarioIndex: 4, execution: fp_ba8c7b4230cdc8e9271694befe40abf4 }, + SingleMeasureWithTwoRowAndOneColumnAttributes: { + scenarioIndex: 1, + execution: fp_bd4b4956516e1f429c2344f9b263c8df, + }, + TwoMeasuresAndColumnGrandTotalsAndMultipleSubtotals: { + scenarioIndex: 0, + execution: fp_e2854c55ab10a6e23413a2322183ae8b, + }, + OneMeasureAndRepeatingRowAttributesOnDifferentPositions: { + scenarioIndex: 1, + execution: fp_c1444f217c8e0aecfb14f64996bd7b7e, + }, + TwoMeasuresWithTwoRowAndTwoColumnAttributes: { + scenarioIndex: 1, + execution: fp_c2ed90caa1677729885f2f90df6bdd73, + }, + PaginationWith5RowsPerPage: { scenarioIndex: 2, execution: fp_c2ed90caa1677729885f2f90df6bdd73 }, + TwoMeasuresAndSingleGrandTotalForOne: { + scenarioIndex: 1, + execution: fp_c32086d6716aa4b42b64be41f1dbdd04, + }, + SingleColumn: { scenarioIndex: 1, execution: fp_c4c31413a7b65502296aba901f6b50f8 }, + TwoMeasuresAndSingleColumnRowGrandTotalForEach: { + scenarioIndex: 1, + execution: fp_cd90f05d3866c307575d70866a88b1de, + }, + TwoMeasuresAndSingleColumnRowGrandTotalForOne: { + scenarioIndex: 1, + execution: fp_d7a8d8ff7ac29c8223bb3ed015131833, + }, + TwoMeasuresAndSingleColumnGrandTotalForEach: { + scenarioIndex: 1, + execution: fp_d7a98fc9b39a99b72c72f135740f2e54, + }, + TwoMeasuresWithSingleRowAttrSortedBySecondMeasure: { + scenarioIndex: 1, + execution: fp_f304c0180efbca32eeccaa096410dc8f, + }, + SingleMeasurePivotWithBothAttributesAndMetricsInRows: { + scenarioIndex: 1, + execution: fp_f46be32e6d2334de1d485921c52cc8e4, + }, + TwoMeasuresWithSingleRowAttrSortedByFirstMeasure: { + scenarioIndex: 1, + execution: fp_f5008c073c235b861044fc2ec3f4b0bc, + }, + TwoMeasuresInRowsAndOnlyColumnAttrsOnLeft: { + scenarioIndex: 4, + execution: fp_f57b0aa05b172c7db09c6fc0e29d3198, + }, + TwoMeasuresInRowsAndOnlyColumnAttrsOnLeftWithDrilling: { + scenarioIndex: 5, + execution: fp_f57b0aa05b172c7db09c6fc0e29d3198, + }, + TwoMeasuresInRowsAndColumnAttrsOnTopWithInvalidDrillingOnAttributes: { + scenarioIndex: 6, + execution: fp_f57b0aa05b172c7db09c6fc0e29d3198, + }, + TwoMeasuresInRowsAndColumnAttrsOnTopWithDrillingOnMetrics: { + scenarioIndex: 7, + execution: fp_f57b0aa05b172c7db09c6fc0e29d3198, + }, + TwoMeasuresWithRowAttribute: { scenarioIndex: 1, execution: fp_f6db2dc71e518b432dd21209ebdd0521 }, + CellTextWrappingEnabled: { scenarioIndex: 2, execution: fp_f6db2dc71e518b432dd21209ebdd0521 }, + HeaderTextWrappingEnabled: { scenarioIndex: 3, execution: fp_f6db2dc71e518b432dd21209ebdd0521 }, + SimpleTableWithAttributeAndMetricColumnSize: { + scenarioIndex: 4, + execution: fp_f6db2dc71e518b432dd21209ebdd0521, + }, + SingleMeasureAndSingleColumnRowGrandTotal: { + scenarioIndex: 1, + execution: fp_f997d8a8ee1a67def6bb63d28708cbc3, + }, + TwoMeasuresAndMultipleColumnRowSubtotals: { + scenarioIndex: 1, + execution: fp_fe9b7d7da26bca841ea91d1f0b83b67e, + }, + }, Repeater: { OneAttributeAndOneVisualisation: { scenarioIndex: 0, execution: fp_013e1b802f58fb8ec4e3d1d116f74116 }, Themed: { scenarioIndex: 1, execution: fp_013e1b802f58fb8ec4e3d1d116f74116 }, @@ -2631,223 +2884,6 @@ export const Scenarios = { execution: fp_f1fcc87ce7a6cb76e0e0d1bfa7f17e50, }, }, - PivotTableNext: { - SingleMeasureAndSingleColumnGrandTotal: { - scenarioIndex: 1, - execution: fp_08a6c636ea0d007de91e886fc9fbd1bb, - }, - TwoMeasuresAndGrandTotalsAndMultipleSubtotals: { - scenarioIndex: 0, - execution: fp_6ef5731c63a579f03fde4a9b01f7c607, - }, - TwoMeasuresAndOneSubtotal: { scenarioIndex: 1, execution: fp_10a1791bf91af3f9d71fec403da50bfc }, - TwoMeasuresWithThreeRowsAndTwoColumnAttributes: { - scenarioIndex: 1, - execution: fp_12d1eb593ce811011cea335d45b4e7d9, - }, - TwoMeasuresAndSingleGrandTotalSortedBySecondAttribute: { - scenarioIndex: 1, - execution: fp_17e1400e22cf959015e4be5bdb618c37, - }, - WithTwoSameDates: { scenarioIndex: 1, execution: fp_1dee8e67d6f87c8f37dce28126fc893e }, - TwoMeasuresAndMultipleGrandTotalsForEach: { - scenarioIndex: 1, - execution: fp_b15be8f3c2c0e721956f0563e80f2e07, - }, - SingleAttribute: { scenarioIndex: 1, execution: fp_245cabd1fb1f98e24cd680cc9c52254b }, - MultipleMeasuresAndNoColumnsWithTotals: { - scenarioIndex: 0, - execution: fp_dcaded12a70ed9c7556c96b4d4d54763, - }, - SingleMeasurePivotSortedByFirstAndSecondRowAttr: { - scenarioIndex: 0, - execution: fp_300c0b908199156a328388972230be9a, - }, - TwoMeasuresAndMultipleColumnRowGrandTotalsForEach: { - scenarioIndex: 1, - execution: fp_6d744aacff949cf033683d86262b4e77, - }, - MultipleMeasuresAndRowAttributesWithMetricsInRowsWithDrilling: { - scenarioIndex: 1, - execution: fp_38b3cbb3e3c8b075d1b11de44c78a01e, - }, - WithDateFilter: { scenarioIndex: 1, execution: fp_4765fcec9e0cf6a0f6474dfcc89346f9 }, - SingleMeasure: { scenarioIndex: 10, execution: fp_48d6b389940c3f7522eddc93458a0b0b }, - SingleMeasureAndMultipleGrandTotals: { - scenarioIndex: 1, - execution: fp_93b4400696ea330b3d49c0506eb90538, - }, - SingleMeasureAndMultipleColumnGrandTotals: { - scenarioIndex: 0, - execution: fp_50c6b990ee6e7496159726ebb00e82e7, - }, - TwoMeasuresAndMultipleColumnGrandTotalsForEach: { - scenarioIndex: 1, - execution: fp_b30b06df758636e35e03b96a9662e53f, - }, - TwoMeasuresInRowsAndColumnAttrsOnLeftWithTotals: { - scenarioIndex: 1, - execution: fp_55a6a5d0f818f5a7676513e4378a2868, - }, - TwoMeasuresAndColumnRowGrandTotalsAndMultipleSubtotals: { - scenarioIndex: 0, - execution: fp_f1e4efd7d700c6c819fa3568fc9bcae8, - }, - MultipleMeasuresAndNoRowsWithTotals: { - scenarioIndex: 2, - execution: fp_568f6f8fe45127977df23f1e7c16c3e0, - }, - TwoMeasuresInRowsAndOnlyColumnAttrsOnLeftWithTotals: { - scenarioIndex: 3, - execution: fp_568f6f8fe45127977df23f1e7c16c3e0, - }, - TwoMeasuresAndOneColumnRowSubtotal: { - scenarioIndex: 1, - execution: fp_57e4abf06e14ca7c6ca589f5ba620932, - }, - TwoMeasuresWithSingleRowAttrWithMetricsInRows: { - scenarioIndex: 1, - execution: fp_628456d9adb09d97807468db6d357f34, - }, - TwoMeasuresAndColumnSingleGrandTotalSortedBySecondAttribute: { - scenarioIndex: 1, - execution: fp_63e53a643477c7f0a1e4b96443d1a072, - }, - TwoMeasures: { scenarioIndex: 6, execution: fp_681fd174545bf5e693b9b0df873870cb }, - SingleMeasurePivotSortedBySecondRowAttr: { - scenarioIndex: 1, - execution: fp_6ad17cce441c93f0c1f6c5cfffb7d7af, - }, - TwoMeasuresWithColumnAttribute: { scenarioIndex: 1, execution: fp_6b38289e3de520261ba662868a3bc5ba }, - ArithmeticMeasures: { scenarioIndex: 1, execution: fp_70330fa367d33c4c428d5d3e54df8eb9 }, - TwoMeasuresAndMultipleSubtotals: { scenarioIndex: 1, execution: fp_743dad3dce349764d1e2617b3e87026f }, - TwoMeasuresAndMultipleColumnSubtotals: { - scenarioIndex: 1, - execution: fp_77f869ae69c392717c13b188e2074842, - }, - TwoMeasuresAndSingleGrandTotalForEach: { - scenarioIndex: 1, - execution: fp_7aacee42d5804a99f3dab100b0a5669e, - }, - TwoMeasuresAndMultipleColumnRowSubtotalsWithMetricsInRows: { - scenarioIndex: 0, - execution: fp_dfeebd400b7a16d1e3c434152fc9dd09, - }, - SingleMeasureWithRowAndColumnAttributes: { - scenarioIndex: 1, - execution: fp_8c58de518b0e42711e9379cce480a63b, - }, - TwoMeasuresWithRowAndColumnAttributes: { - scenarioIndex: 1, - execution: fp_8eaf6e86ea212a22493eb7c06370a1b1, - }, - WithAttributesWithoutMeasures: { scenarioIndex: 1, execution: fp_956c1be097a9bb7880556e5ba651ad33 }, - SingleMeasurePivotSortedByFirstRowAttr: { - scenarioIndex: 1, - execution: fp_9bbaf756a6a44325dc1a9315de17d0fb, - }, - SingleMeasureWithColumnAttribute: { - scenarioIndex: 1, - execution: fp_9bcc3db7967bd54930a357186a0d39f9, - }, - SingleMeasureAndSingleGrandTotal: { - scenarioIndex: 1, - execution: fp_a49032eb49179fa4f6f56427072f88bf, - }, - SingleMeasureWithTwoRowAndTwoColumnAttributes: { - scenarioIndex: 4, - execution: fp_aea45a374b1f55e749275b328e30d94d, - }, - EmptyValues: { scenarioIndex: 5, execution: fp_aea45a374b1f55e749275b328e30d94d }, - TwoMeasuresAndSingleColumnGrandTotalAndSingleSubtotalSortedBySecondAttribute: { - scenarioIndex: 1, - execution: fp_b01bccbf9167508268b7a901b4ccd063, - }, - TwoMeasuresWithTwoRowAndOneColumnAttributes: { - scenarioIndex: 1, - execution: fp_b034871dc7b2c8d7d9fc10a81b1b5fae, - }, - SingleMeasureAndMultipleColumnRowGrandTotals: { - scenarioIndex: 1, - execution: fp_b3727c142e53427d1ac555b048019f88, - }, - TwoMeasuresAndSingleColumnGrandTotalForOne: { - scenarioIndex: 1, - execution: fp_b8402b07097387493122f955cdae5e61, - }, - TwoMeasuresAndOneColumnSubtotal: { scenarioIndex: 1, execution: fp_ba1ccbfca6ce3c9311d8becc13b28093 }, - SingleMeasureWithRowAttribute: { scenarioIndex: 4, execution: fp_ba8c7b4230cdc8e9271694befe40abf4 }, - SingleMeasureWithTwoRowAndOneColumnAttributes: { - scenarioIndex: 1, - execution: fp_bd4b4956516e1f429c2344f9b263c8df, - }, - TwoMeasuresAndColumnGrandTotalsAndMultipleSubtotals: { - scenarioIndex: 0, - execution: fp_e2854c55ab10a6e23413a2322183ae8b, - }, - OneMeasureAndRepeatingRowAttributesOnDifferentPositions: { - scenarioIndex: 1, - execution: fp_c1444f217c8e0aecfb14f64996bd7b7e, - }, - TwoMeasuresWithTwoRowAndTwoColumnAttributes: { - scenarioIndex: 1, - execution: fp_c2ed90caa1677729885f2f90df6bdd73, - }, - TwoMeasuresAndSingleGrandTotalForOne: { - scenarioIndex: 1, - execution: fp_c32086d6716aa4b42b64be41f1dbdd04, - }, - SingleColumn: { scenarioIndex: 1, execution: fp_c4c31413a7b65502296aba901f6b50f8 }, - TwoMeasuresAndSingleColumnRowGrandTotalForEach: { - scenarioIndex: 1, - execution: fp_cd90f05d3866c307575d70866a88b1de, - }, - TwoMeasuresAndSingleColumnRowGrandTotalForOne: { - scenarioIndex: 1, - execution: fp_d7a8d8ff7ac29c8223bb3ed015131833, - }, - TwoMeasuresAndSingleColumnGrandTotalForEach: { - scenarioIndex: 1, - execution: fp_d7a98fc9b39a99b72c72f135740f2e54, - }, - TwoMeasuresWithSingleRowAttrSortedBySecondMeasure: { - scenarioIndex: 1, - execution: fp_f304c0180efbca32eeccaa096410dc8f, - }, - SingleMeasurePivotWithBothAttributesAndMetricsInRows: { - scenarioIndex: 1, - execution: fp_f46be32e6d2334de1d485921c52cc8e4, - }, - TwoMeasuresWithSingleRowAttrSortedByFirstMeasure: { - scenarioIndex: 1, - execution: fp_f5008c073c235b861044fc2ec3f4b0bc, - }, - TwoMeasuresInRowsAndOnlyColumnAttrsOnLeft: { - scenarioIndex: 4, - execution: fp_f57b0aa05b172c7db09c6fc0e29d3198, - }, - TwoMeasuresInRowsAndOnlyColumnAttrsOnLeftWithDrilling: { - scenarioIndex: 5, - execution: fp_f57b0aa05b172c7db09c6fc0e29d3198, - }, - TwoMeasuresInRowsAndColumnAttrsOnTopWithInvalidDrillingOnAttributes: { - scenarioIndex: 6, - execution: fp_f57b0aa05b172c7db09c6fc0e29d3198, - }, - TwoMeasuresInRowsAndColumnAttrsOnTopWithDrillingOnMetrics: { - scenarioIndex: 7, - execution: fp_f57b0aa05b172c7db09c6fc0e29d3198, - }, - TwoMeasuresWithRowAttribute: { scenarioIndex: 1, execution: fp_f6db2dc71e518b432dd21209ebdd0521 }, - SingleMeasureAndSingleColumnRowGrandTotal: { - scenarioIndex: 1, - execution: fp_f997d8a8ee1a67def6bb63d28708cbc3, - }, - TwoMeasuresAndMultipleColumnRowSubtotals: { - scenarioIndex: 1, - execution: fp_fe9b7d7da26bca841ea91d1f0b83b67e, - }, - }, LineChart: { WithOneMeasureAndTrendByDateAndSegmentByDate: { scenarioIndex: 0, @@ -7401,6 +7437,10 @@ import i_PivotTableNext_19f38ddb24bcba523a23b5d0208fbbe0_obj from "./uiTestScena const i_PivotTableNext_19f38ddb24bcba523a23b5d0208fbbe0 = { obj: i_PivotTableNext_19f38ddb24bcba523a23b5d0208fbbe0_obj, }; +import i_PivotTableNext_1c9b7faf46629983f73e2f3b8b6300cc_obj from "./uiTestScenarios/insights/PivotTableNext.1c9b7faf46629983f73e2f3b8b6300cc/obj.json" with { type: "json" }; +const i_PivotTableNext_1c9b7faf46629983f73e2f3b8b6300cc = { + obj: i_PivotTableNext_1c9b7faf46629983f73e2f3b8b6300cc_obj, +}; import i_PivotTableNext_1f92031de9e10dafdf0b0318799334ef_obj from "./uiTestScenarios/insights/PivotTableNext.1f92031de9e10dafdf0b0318799334ef/obj.json" with { type: "json" }; const i_PivotTableNext_1f92031de9e10dafdf0b0318799334ef = { obj: i_PivotTableNext_1f92031de9e10dafdf0b0318799334ef_obj, @@ -7409,6 +7449,10 @@ import i_PivotTableNext_1fc9a36652046d654165c3ca9681e728_obj from "./uiTestScena const i_PivotTableNext_1fc9a36652046d654165c3ca9681e728 = { obj: i_PivotTableNext_1fc9a36652046d654165c3ca9681e728_obj, }; +import i_PivotTableNext_1fe7c93076c78d3a4878b5e584e4f685_obj from "./uiTestScenarios/insights/PivotTableNext.1fe7c93076c78d3a4878b5e584e4f685/obj.json" with { type: "json" }; +const i_PivotTableNext_1fe7c93076c78d3a4878b5e584e4f685 = { + obj: i_PivotTableNext_1fe7c93076c78d3a4878b5e584e4f685_obj, +}; import i_PivotTableNext_237307ab4326ca12ccebd4725f0dce14_obj from "./uiTestScenarios/insights/PivotTableNext.237307ab4326ca12ccebd4725f0dce14/obj.json" with { type: "json" }; const i_PivotTableNext_237307ab4326ca12ccebd4725f0dce14 = { obj: i_PivotTableNext_237307ab4326ca12ccebd4725f0dce14_obj, @@ -7465,6 +7509,10 @@ import i_PivotTableNext_50a00c5c98085613d6669432ffb74b73_obj from "./uiTestScena const i_PivotTableNext_50a00c5c98085613d6669432ffb74b73 = { obj: i_PivotTableNext_50a00c5c98085613d6669432ffb74b73_obj, }; +import i_PivotTableNext_54066f10a13954b47db9920efe3a035d_obj from "./uiTestScenarios/insights/PivotTableNext.54066f10a13954b47db9920efe3a035d/obj.json" with { type: "json" }; +const i_PivotTableNext_54066f10a13954b47db9920efe3a035d = { + obj: i_PivotTableNext_54066f10a13954b47db9920efe3a035d_obj, +}; import i_PivotTableNext_5474330193a9ae4d54971b79dd16f7f5_obj from "./uiTestScenarios/insights/PivotTableNext.5474330193a9ae4d54971b79dd16f7f5/obj.json" with { type: "json" }; const i_PivotTableNext_5474330193a9ae4d54971b79dd16f7f5 = { obj: i_PivotTableNext_5474330193a9ae4d54971b79dd16f7f5_obj, @@ -7525,6 +7573,10 @@ import i_PivotTableNext_80f6060fe0b4437d8efa3d714ee8e4ef_obj from "./uiTestScena const i_PivotTableNext_80f6060fe0b4437d8efa3d714ee8e4ef = { obj: i_PivotTableNext_80f6060fe0b4437d8efa3d714ee8e4ef_obj, }; +import i_PivotTableNext_83514b83a226a7871c7231076b317528_obj from "./uiTestScenarios/insights/PivotTableNext.83514b83a226a7871c7231076b317528/obj.json" with { type: "json" }; +const i_PivotTableNext_83514b83a226a7871c7231076b317528 = { + obj: i_PivotTableNext_83514b83a226a7871c7231076b317528_obj, +}; import i_PivotTableNext_83c2cadca4ae3cd0444ea2e4d3a55a16_obj from "./uiTestScenarios/insights/PivotTableNext.83c2cadca4ae3cd0444ea2e4d3a55a16/obj.json" with { type: "json" }; const i_PivotTableNext_83c2cadca4ae3cd0444ea2e4d3a55a16 = { obj: i_PivotTableNext_83c2cadca4ae3cd0444ea2e4d3a55a16_obj, @@ -7541,6 +7593,10 @@ import i_PivotTableNext_8d4f990d7e3765eb6ee64a1886939d93_obj from "./uiTestScena const i_PivotTableNext_8d4f990d7e3765eb6ee64a1886939d93 = { obj: i_PivotTableNext_8d4f990d7e3765eb6ee64a1886939d93_obj, }; +import i_PivotTableNext_908325936ba6b439a7a579d7fe746017_obj from "./uiTestScenarios/insights/PivotTableNext.908325936ba6b439a7a579d7fe746017/obj.json" with { type: "json" }; +const i_PivotTableNext_908325936ba6b439a7a579d7fe746017 = { + obj: i_PivotTableNext_908325936ba6b439a7a579d7fe746017_obj, +}; import i_PivotTableNext_971af631f188c59bd80221fdaef2468f_obj from "./uiTestScenarios/insights/PivotTableNext.971af631f188c59bd80221fdaef2468f/obj.json" with { type: "json" }; const i_PivotTableNext_971af631f188c59bd80221fdaef2468f = { obj: i_PivotTableNext_971af631f188c59bd80221fdaef2468f_obj, @@ -7625,6 +7681,10 @@ import i_PivotTableNext_c3e7f11e6d421d17f7e754185717aba4_obj from "./uiTestScena const i_PivotTableNext_c3e7f11e6d421d17f7e754185717aba4 = { obj: i_PivotTableNext_c3e7f11e6d421d17f7e754185717aba4_obj, }; +import i_PivotTableNext_c6ff6fc2578297f71ef831108a55fe52_obj from "./uiTestScenarios/insights/PivotTableNext.c6ff6fc2578297f71ef831108a55fe52/obj.json" with { type: "json" }; +const i_PivotTableNext_c6ff6fc2578297f71ef831108a55fe52 = { + obj: i_PivotTableNext_c6ff6fc2578297f71ef831108a55fe52_obj, +}; import i_PivotTableNext_c73c0198e33870a238c49d127f763b02_obj from "./uiTestScenarios/insights/PivotTableNext.c73c0198e33870a238c49d127f763b02/obj.json" with { type: "json" }; const i_PivotTableNext_c73c0198e33870a238c49d127f763b02 = { obj: i_PivotTableNext_c73c0198e33870a238c49d127f763b02_obj, @@ -7649,6 +7709,14 @@ import i_PivotTableNext_d878bab8cca1f7fb55a801204e730681_obj from "./uiTestScena const i_PivotTableNext_d878bab8cca1f7fb55a801204e730681 = { obj: i_PivotTableNext_d878bab8cca1f7fb55a801204e730681_obj, }; +import i_PivotTableNext_d9273a9e68b191b7dbd096341a868b5f_obj from "./uiTestScenarios/insights/PivotTableNext.d9273a9e68b191b7dbd096341a868b5f/obj.json" with { type: "json" }; +const i_PivotTableNext_d9273a9e68b191b7dbd096341a868b5f = { + obj: i_PivotTableNext_d9273a9e68b191b7dbd096341a868b5f_obj, +}; +import i_PivotTableNext_da2a8ac003b9ccc5ef48b09bb7f8dd10_obj from "./uiTestScenarios/insights/PivotTableNext.da2a8ac003b9ccc5ef48b09bb7f8dd10/obj.json" with { type: "json" }; +const i_PivotTableNext_da2a8ac003b9ccc5ef48b09bb7f8dd10 = { + obj: i_PivotTableNext_da2a8ac003b9ccc5ef48b09bb7f8dd10_obj, +}; import i_PivotTableNext_df98d53c1649c7bba56762edd1ce8015_obj from "./uiTestScenarios/insights/PivotTableNext.df98d53c1649c7bba56762edd1ce8015/obj.json" with { type: "json" }; const i_PivotTableNext_df98d53c1649c7bba56762edd1ce8015 = { obj: i_PivotTableNext_df98d53c1649c7bba56762edd1ce8015_obj, @@ -9141,7 +9209,9 @@ export const Insights = { TwoMeasuresInRowsAndOnlyColumnAttrsOnLeftWithDrilling: i_PivotTableNext_15aecb6ecdf61eebe7c1acc21c97329f, TwoMeasuresAndSingleColumnGrandTotalForEach: i_PivotTableNext_19f38ddb24bcba523a23b5d0208fbbe0, + PaginationWith5RowsPerPage: i_PivotTableNext_1c9b7faf46629983f73e2f3b8b6300cc, SingleMeasurePivotSortedBySecondRowAttr: i_PivotTableNext_1fc9a36652046d654165c3ca9681e728, + GrandTotalsPinnedAtBottomDefault: i_PivotTableNext_1fe7c93076c78d3a4878b5e584e4f685, TwoMeasuresAndMultipleGrandTotalsForEach: i_PivotTableNext_237307ab4326ca12ccebd4725f0dce14, TwoMeasuresWithThreeRowsAndTwoColumnAttributes: i_PivotTableNext_27fe9e555b6b9c111bd318e15a041396, SingleMeasureAndSingleColumnGrandTotal: i_PivotTableNext_28ffb3523a88a0f57103c9c48035439f, @@ -9156,6 +9226,7 @@ export const Insights = { SingleMeasureWithRowAndColumnAttributes: i_PivotTableNext_4bb4d26177c41122762db47541e1cd5f, TwoMeasuresAndColumnSingleGrandTotalSortedBySecondAttribute: i_PivotTableNext_4ca0d781598309a73bfd4b4ae9d5c65f, + CellTextWrappingEnabled: i_PivotTableNext_54066f10a13954b47db9920efe3a035d, TwoMeasuresInRowsAndColumnAttrsOnLeftWithTotals: i_PivotTableNext_5474330193a9ae4d54971b79dd16f7f5, TwoMeasuresAndMultipleColumnGrandTotalsForEach: i_PivotTableNext_54d5c31ea9db99b6f6f4948dc668b1b4, MultipleMeasuresAndNoColumnsWithTotals: i_PivotTableNext_56cec4491a707a7e6e547e548be163b1, @@ -9166,9 +9237,11 @@ export const Insights = { TwoMeasuresAndSingleColumnGrandTotalAndSingleSubtotalSortedBySecondAttribute: i_PivotTableNext_7ecc17bce808d7267f47b3d4905b1a4a, TwoMeasuresAndGrandTotalsAndMultipleSubtotals: i_PivotTableNext_80f6060fe0b4437d8efa3d714ee8e4ef, + PaginationWith5RowsPerPageAndTotals: i_PivotTableNext_83514b83a226a7871c7231076b317528, WithDateFilter: i_PivotTableNext_83c2cadca4ae3cd0444ea2e4d3a55a16, TwoMeasuresWithTwoRowAndTwoColumnAttributes: i_PivotTableNext_88491bde1be3096cbe296086ada2c053, WithAttributesWithoutMeasures: i_PivotTableNext_8d4f990d7e3765eb6ee64a1886939d93, + HeaderTextWrappingEnabled: i_PivotTableNext_908325936ba6b439a7a579d7fe746017, EmptyValues: i_PivotTableNext_98d19fbc15b9096896b18480d2c91a25, TwoMeasuresAndSingleGrandTotalForEach: i_PivotTableNext_9ea726d4eaa0ed17421b93c478da6005, TwoMeasuresAndColumnGrandTotalsAndMultipleSubtotals: @@ -9185,9 +9258,13 @@ export const Insights = { TwoMeasuresWithSingleRowAttrWithMetricsInRows: i_PivotTableNext_bd8de61c4c2180f924e6861d46271ce5, TwoMeasuresWithColumnAttribute: i_PivotTableNext_bf593826c1e38745a8df19a181720ebf, TwoMeasuresAndMultipleColumnSubtotals: i_PivotTableNext_c0d95bb5d60068a1048f1e7079f9856c, + GrandTotalsPinnedAtTop: i_PivotTableNext_c6ff6fc2578297f71ef831108a55fe52, SingleAttribute: i_PivotTableNext_c96c0c862b7a3f84da7b1b656b8f203b, TwoMeasuresAndSingleGrandTotalForOne: i_PivotTableNext_d046d6ce6f4e610533e297d53fee57a2, + SimpleTableWithAttributeAndMetricColumnSize: i_PivotTableNext_d1fad21b44d4f428c6fa759fcbd8b2f8, SingleMeasureAndMultipleColumnGrandTotals: i_PivotTableNext_d878bab8cca1f7fb55a801204e730681, + GrandTotalsAtBottomNotPinned: i_PivotTableNext_d9273a9e68b191b7dbd096341a868b5f, + GrandTotalsAtTopNotPinned: i_PivotTableNext_da2a8ac003b9ccc5ef48b09bb7f8dd10, SingleMeasureAndSingleColumnRowGrandTotal: i_PivotTableNext_df98d53c1649c7bba56762edd1ce8015, MultipleMeasuresAndNoRowsWithTotals: i_PivotTableNext_e12bd90b45dd2e2a36c632b811114510, SingleMeasureWithRowAttribute: i_PivotTableNext_e68ec082d5a2e42b6a08b6d986d08056, @@ -9195,6 +9272,7 @@ export const Insights = { TwoMeasuresAndSingleColumnGrandTotalForOne: i_PivotTableNext_e963b4949bd2066f6be27a2ad81f2769, ArithmeticMeasures: i_PivotTableNext_eb9b41ddc1f75996ee16ffda0753475c, SingleMeasurePivotSortedByFirstAndSecondRowAttr: i_PivotTableNext_eecaed208a29cbbcf2646114c82ee809, + TableWithMultipleMeasureColumnsAndWeakMeasureSize: i_PivotTableNext_f40a038fb7394d7ad8ed16714cd49a81, TwoMeasuresAndColumnRowGrandTotalsAndMultipleSubtotals: i_PivotTableNext_f5b0513a34d046a3297225b71d6f321d, TwoMeasuresAndMultipleColumnRowGrandTotalsForEach: i_PivotTableNext_f7426a38f1f2ffd6ccad7ead71390ac6, @@ -9355,6 +9433,7 @@ export const Recordings: RecordingIndex = { executions: { fp_004031cbc9081950b7284311b004fe11, fp_005a4c2e17417f0c5780fb84d4bb7490, + fp_0087d8270a7e1f41ada5177a2f88205e, fp_0095badec8cf82cef537c0075a4329d8, fp_013e1b802f58fb8ec4e3d1d116f74116, fp_016b56ca4717dd774265c039a39234cd, @@ -10767,8 +10846,10 @@ export const Recordings: RecordingIndex = { i_PivotTableNext_15312b5cfb6071696fa331e3a9269388, i_PivotTableNext_15aecb6ecdf61eebe7c1acc21c97329f, i_PivotTableNext_19f38ddb24bcba523a23b5d0208fbbe0, + i_PivotTableNext_1c9b7faf46629983f73e2f3b8b6300cc, i_PivotTableNext_1f92031de9e10dafdf0b0318799334ef, i_PivotTableNext_1fc9a36652046d654165c3ca9681e728, + i_PivotTableNext_1fe7c93076c78d3a4878b5e584e4f685, i_PivotTableNext_237307ab4326ca12ccebd4725f0dce14, i_PivotTableNext_27fe9e555b6b9c111bd318e15a041396, i_PivotTableNext_28ffb3523a88a0f57103c9c48035439f, @@ -10783,6 +10864,7 @@ export const Recordings: RecordingIndex = { i_PivotTableNext_4bb4d26177c41122762db47541e1cd5f, i_PivotTableNext_4ca0d781598309a73bfd4b4ae9d5c65f, i_PivotTableNext_50a00c5c98085613d6669432ffb74b73, + i_PivotTableNext_54066f10a13954b47db9920efe3a035d, i_PivotTableNext_5474330193a9ae4d54971b79dd16f7f5, i_PivotTableNext_54d5c31ea9db99b6f6f4948dc668b1b4, i_PivotTableNext_56cec4491a707a7e6e547e548be163b1, @@ -10798,10 +10880,12 @@ export const Recordings: RecordingIndex = { i_PivotTableNext_7c2369cee8cb4d2e16e2f11ff014953f, i_PivotTableNext_7ecc17bce808d7267f47b3d4905b1a4a, i_PivotTableNext_80f6060fe0b4437d8efa3d714ee8e4ef, + i_PivotTableNext_83514b83a226a7871c7231076b317528, i_PivotTableNext_83c2cadca4ae3cd0444ea2e4d3a55a16, i_PivotTableNext_88491bde1be3096cbe296086ada2c053, i_PivotTableNext_89a771aac8adf21f03a517f63c997216, i_PivotTableNext_8d4f990d7e3765eb6ee64a1886939d93, + i_PivotTableNext_908325936ba6b439a7a579d7fe746017, i_PivotTableNext_971af631f188c59bd80221fdaef2468f, i_PivotTableNext_98d19fbc15b9096896b18480d2c91a25, i_PivotTableNext_9ea726d4eaa0ed17421b93c478da6005, @@ -10823,12 +10907,15 @@ export const Recordings: RecordingIndex = { i_PivotTableNext_bf593826c1e38745a8df19a181720ebf, i_PivotTableNext_c0d95bb5d60068a1048f1e7079f9856c, i_PivotTableNext_c3e7f11e6d421d17f7e754185717aba4, + i_PivotTableNext_c6ff6fc2578297f71ef831108a55fe52, i_PivotTableNext_c73c0198e33870a238c49d127f763b02, i_PivotTableNext_c96c0c862b7a3f84da7b1b656b8f203b, i_PivotTableNext_d046d6ce6f4e610533e297d53fee57a2, i_PivotTableNext_d1fad21b44d4f428c6fa759fcbd8b2f8, i_PivotTableNext_d2a50f7e4d593ba8db08c0c9e7a5d8e5, i_PivotTableNext_d878bab8cca1f7fb55a801204e730681, + i_PivotTableNext_d9273a9e68b191b7dbd096341a868b5f, + i_PivotTableNext_da2a8ac003b9ccc5ef48b09bb7f8dd10, i_PivotTableNext_df98d53c1649c7bba56762edd1ce8015, i_PivotTableNext_e12bd90b45dd2e2a36c632b811114510, i_PivotTableNext_e677c39239daf020d379a1fe43aedafa, diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/dataView_o0_0s100_1000.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/dataView_o0_0s100_1000.json new file mode 100644 index 00000000000..d606b9f1c75 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/dataView_o0_0s100_1000.json @@ -0,0 +1,164 @@ +{ + "count": [30, 8], + "data": [ + [2174478.26, 883793.08, 5917286.73, 2370306.08, 1989393.54, 817756.22, 5501537.16, 2039952.64], + [405767.14, 194123.92, 3156945.21, 1270431.27, 529670.6, 219798.78, 7547821, 1441807.88], + [2580245.4, null, 9074231.940000001, null, 2519064.14, null, 13049358.16, null], + [ + 1290122.6999999997, 538958.5, 4537115.970000001, 1820368.675, 1259532.0699999998, 518777.5, + 6524679.08, 1740880.2599999998 + ], + [null, 1077917, null, 3640737.35, null, 1037555, null, 3481760.52], + [2008366.85, 754830.5, 4088621.31, 1350035.81, 3467615.16, 1160639.56, 6623534.92, 2612041.49], + [590536.1, 283569.17, 3053141.34, 1746096.06, 547704.36, 108422.01, 2567375.43, 841972.46], + [2598902.95, null, 7141762.65, null, 4015319.52, null, 9190910.35, null], + [ + 1299451.475, 519199.83499999996, 3570881.325, 1548065.935, 2007659.7600000002, 634530.785, + 4595455.175, 1727006.975 + ], + [null, 1038399.67, null, 3096131.87, null, 1269061.57, null, 3454013.95], + [2610784.51, 989426.6, 6011398.61, 2305188, 2935008.02, 1106550.62, 18472467, 2097915.19], + [793939.81, 430585.96, 3135777.62, 1226965.38, 1929950.34, 223202.05, 2706868.95, 867705.82], + [3404724.32, null, 9147176.23, null, 4864958.36, null, 21179335.95, null], + [ + 1702362.16, 710006.28, 4573588.115, 1766076.69, 2432479.18, 664876.335, 10589667.975000001, + 1482810.505 + ], + [null, 1420012.56, null, 3532153.38, null, 1329752.67, null, 2965621.01], + [1964931.93, 826188.69, 1060976.15, 389910.95, 361332.16, 259178.39, 2476731.94, 1434946.69], + [268112.52, 167291.74, 877547.53, 510727.21, 167554.65, 148902.34, 864845.04, 236060.2], + [2233044.45, null, 1938523.68, null, 528886.8099999999, null, 3341576.98, null], + [ + 1116522.225, 496740.21499999997, 969261.84, 450319.08, 264443.40499999997, 204040.365, 1670788.49, + 835503.4450000001 + ], + [null, 993480.43, null, 900638.16, null, 408080.73, null, 1671006.89], + [1827108.25, 229646.4, 1980712.38, 1150517.74, 536526.06, 329035.25, 1418895.61, 583354.19], + [120416.22, 87001.62, 1358755.87, 272152.06, 180781.87, 158881.03, 2102661.65, 563803.9], + [1947524.47, null, 3339468.25, null, 717307.93, null, 3521557.26, null], + [ + 973762.235, 158324.01, 1669734.125, 711334.8999999999, 358653.965, 243958.14, 1760778.63, + 573579.0449999999 + ], + [null, 316648.02, null, 1422669.8, null, 487916.28, null, 1147158.09], + [1374944.56, 550627.31, 2542872.97, 1109596.41, 728206.16, 476598.4, 2332594.72, 676823.87], + [278916.58, 119311.53, 1330301.14, 398431.88, 225050.77, 17398.48, 1478689.84, 271250.62], + [1653861.1400000001, null, 3873174.1100000003, null, 953256.93, null, 3811284.5600000005, null], + [ + 826930.5700000001, 334969.42000000004, 1936587.0550000002, 754014.145, 476628.46499999997, + 246998.44000000003, 1905642.2800000003, 474037.245 + ], + [null, 669938.84, null, 1508028.29, null, 493996.88, null, 948074.49] + ], + "headerItems": [ + [ + [ + { "attributeHeaderItem": { "name": "CompuSci", "uri": "CompuSci" } }, + { "attributeHeaderItem": { "name": "CompuSci", "uri": "CompuSci" } }, + { "attributeHeaderItem": { "name": "CompuSci", "uri": "CompuSci" } }, + { "attributeHeaderItem": { "name": "CompuSci", "uri": "CompuSci" } }, + { "attributeHeaderItem": { "name": "CompuSci", "uri": "CompuSci" } }, + { "attributeHeaderItem": { "name": "Educationly", "uri": "Educationly" } }, + { "attributeHeaderItem": { "name": "Educationly", "uri": "Educationly" } }, + { "attributeHeaderItem": { "name": "Educationly", "uri": "Educationly" } }, + { "attributeHeaderItem": { "name": "Educationly", "uri": "Educationly" } }, + { "attributeHeaderItem": { "name": "Educationly", "uri": "Educationly" } }, + { "attributeHeaderItem": { "name": "Explorer", "uri": "Explorer" } }, + { "attributeHeaderItem": { "name": "Explorer", "uri": "Explorer" } }, + { "attributeHeaderItem": { "name": "Explorer", "uri": "Explorer" } }, + { "attributeHeaderItem": { "name": "Explorer", "uri": "Explorer" } }, + { "attributeHeaderItem": { "name": "Explorer", "uri": "Explorer" } }, + { "attributeHeaderItem": { "name": "Grammar Plus", "uri": "Grammar Plus" } }, + { "attributeHeaderItem": { "name": "Grammar Plus", "uri": "Grammar Plus" } }, + { "attributeHeaderItem": { "name": "Grammar Plus", "uri": "Grammar Plus" } }, + { "attributeHeaderItem": { "name": "Grammar Plus", "uri": "Grammar Plus" } }, + { "attributeHeaderItem": { "name": "Grammar Plus", "uri": "Grammar Plus" } }, + { "attributeHeaderItem": { "name": "PhoenixSoft", "uri": "PhoenixSoft" } }, + { "attributeHeaderItem": { "name": "PhoenixSoft", "uri": "PhoenixSoft" } }, + { "attributeHeaderItem": { "name": "PhoenixSoft", "uri": "PhoenixSoft" } }, + { "attributeHeaderItem": { "name": "PhoenixSoft", "uri": "PhoenixSoft" } }, + { "attributeHeaderItem": { "name": "PhoenixSoft", "uri": "PhoenixSoft" } }, + { "attributeHeaderItem": { "name": "WonderKid", "uri": "WonderKid" } }, + { "attributeHeaderItem": { "name": "WonderKid", "uri": "WonderKid" } }, + { "attributeHeaderItem": { "name": "WonderKid", "uri": "WonderKid" } }, + { "attributeHeaderItem": { "name": "WonderKid", "uri": "WonderKid" } }, + { "attributeHeaderItem": { "name": "WonderKid", "uri": "WonderKid" } } + ], + [ + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "totalHeaderItem": { "name": "sum", "type": "SUM" } }, + { "totalHeaderItem": { "name": "med", "type": "MED" } }, + { "totalHeaderItem": { "name": "nat", "type": "NAT" } }, + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "totalHeaderItem": { "name": "sum", "type": "SUM" } }, + { "totalHeaderItem": { "name": "med", "type": "MED" } }, + { "totalHeaderItem": { "name": "nat", "type": "NAT" } }, + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "totalHeaderItem": { "name": "sum", "type": "SUM" } }, + { "totalHeaderItem": { "name": "med", "type": "MED" } }, + { "totalHeaderItem": { "name": "nat", "type": "NAT" } }, + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "totalHeaderItem": { "name": "sum", "type": "SUM" } }, + { "totalHeaderItem": { "name": "med", "type": "MED" } }, + { "totalHeaderItem": { "name": "nat", "type": "NAT" } }, + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "totalHeaderItem": { "name": "sum", "type": "SUM" } }, + { "totalHeaderItem": { "name": "med", "type": "MED" } }, + { "totalHeaderItem": { "name": "nat", "type": "NAT" } }, + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "totalHeaderItem": { "name": "sum", "type": "SUM" } }, + { "totalHeaderItem": { "name": "med", "type": "MED" } }, + { "totalHeaderItem": { "name": "nat", "type": "NAT" } } + ] + ], + [ + [ + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } } + ], + [ + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } }, + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } } + ], + [ + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } }, + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } }, + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } }, + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } } + ] + ] + ], + "offset": [0, 0], + "totalCount": [30, 8], + "totals": [ + [ + [14418302.73, null, 34514336.86, null, 13598793.69, null, 54094023.26, null], + [null, 989426.6, null, 2370306.08, null, 1160639.56, null, 2612041.49], + [120416.22, null, 877547.53, null, 167554.65, null, 864845.04, null], + [null, 5516396.52, null, 14100358.85, null, 5026363.13, null, 13667634.95] + ], + [] + ] +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/definition.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/definition.json new file mode 100644 index 00000000000..c31b1037cf3 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/definition.json @@ -0,0 +1,228 @@ +{ + "attributes": [ + { + "attribute": { + "displayForm": { "identifier": "label.f_product.product.name", "type": "displayForm" }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "max" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "min" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "med" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "med" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "dimensions": [ + { + "itemIdentifiers": ["a_label.f_product.product.name", "a_f_owner.department_id"], + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "max" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "min" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "med" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "med" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + } + ] + }, + { + "itemIdentifiers": [ + "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.region_id", + "measureGroup" + ], + "totals": [] + } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", "type": "measure" } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", "type": "measure" } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "sortBy": [], + "workspace": "reference-workspace" +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/executionResult.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/executionResult.json new file mode 100644 index 00000000000..13d1f31ee07 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/executionResult.json @@ -0,0 +1,98 @@ +{ + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "formOf": { "identifier": "attr.f_product.product", "name": "Product", "uri": "" }, + "granularity": null, + "identifier": "label.f_product.product.name", + "localIdentifier": "a_label.f_product.product.name", + "name": "Product Name", + "primaryLabel": { "identifier": "attr.f_product.product", "type": "displayForm" }, + "totalItems": [ + { "totalHeaderItem": { "name": "sum" } }, + { "totalHeaderItem": { "name": "max" } }, + { "totalHeaderItem": { "name": "min" } }, + { "totalHeaderItem": { "name": "nat" } } + ], + "uri": "" + } + }, + { + "attributeHeader": { + "formOf": { "identifier": "f_owner.department_id", "name": "Department", "uri": "" }, + "granularity": null, + "identifier": "f_owner.department_id", + "localIdentifier": "a_f_owner.department_id", + "name": "Department", + "primaryLabel": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "totalItems": [ + { "totalHeaderItem": { "name": "sum" } }, + { "totalHeaderItem": { "name": "med" } }, + { "totalHeaderItem": { "name": "nat" } } + ], + "uri": "" + } + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "formOf": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "name": "Forecast Category", + "uri": "" + }, + "granularity": null, + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id", + "name": "Forecast Category", + "primaryLabel": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "totalItems": [], + "uri": "" + } + }, + { + "attributeHeader": { + "formOf": { "identifier": "f_owner.region_id", "name": "Region", "uri": "" }, + "granularity": null, + "identifier": "f_owner.region_id", + "localIdentifier": "a_f_owner.region_id", + "name": "Region", + "primaryLabel": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "totalItems": [], + "uri": "" + } + }, + { + "measureGroupHeader": { + "items": [ + { + "measureHeaderItem": { + "format": "$#,##0.00", + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "name": "Amount" + } + }, + { + "measureHeaderItem": { + "format": "$#,##0.00", + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "name": "Won" + } + } + ] + } + } + ] + } + ] +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/requests.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/requests.json new file mode 100644 index 00000000000..2d33f155e04 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/requests.json @@ -0,0 +1 @@ +{ "allData": false, "windows": [{ "offset": [0, 0], "size": [100, 1000] }] } diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/scenarios.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/scenarios.json new file mode 100644 index 00000000000..9cbdad7695c --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/0087d8270a7e1f41ada5177a2f88205e/scenarios.json @@ -0,0 +1,255 @@ +[ + { + "n2oMap": { + "a_f_opportunitysnapshot.forecastcategory_id": "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.department_id": "a_f_owner.department_id", + "a_f_owner.region_id": "a_f_owner.region_id", + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_owner.department_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "max" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "min" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "med" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "med" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "dimensions": [ + { + "itemIdentifiers": ["a_label.f_product.product.name", "a_f_owner.department_id"], + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "max" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "min" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "med" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "med" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + } + ] + }, + { + "itemIdentifiers": [ + "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.region_id", + "measureGroup" + ], + "totals": [] + } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "two measures and grand totals and multiple subtotals", + "vis": "PivotTableNext" + } +] diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s100_1000.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s100_1000.json index 200fbe1c3c7..504bdbd0218 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s100_1000.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s100_1000.json @@ -83,8 +83,8 @@ "totals": [ [ [ - 14418302.73, 5516396.52, 34514336.86, 14100358.85, 13598793.69, 5026363.13, - 54094023.260000005, 13667634.95 + 14418302.73, 5516396.52, 34514336.86, 14100358.85, 13598793.69, 5026363.13, 54094023.26, + 13667634.95 ] ], [] diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s22_1000.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s22_1000.json index 200fbe1c3c7..504bdbd0218 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s22_1000.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s22_1000.json @@ -83,8 +83,8 @@ "totals": [ [ [ - 14418302.73, 5516396.52, 34514336.86, 14100358.85, 13598793.69, 5026363.13, - 54094023.260000005, 13667634.95 + 14418302.73, 5516396.52, 34514336.86, 14100358.85, 13598793.69, 5026363.13, 54094023.26, + 13667634.95 ] ], [] diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s5_1000.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s5_1000.json new file mode 100644 index 00000000000..a7be79fd773 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/dataView_o0_0s5_1000.json @@ -0,0 +1,71 @@ +{ + "count": [5, 8], + "data": [ + [2174478.26, 883793.08, 5917286.73, 2370306.08, 1989393.54, 817756.22, 5501537.16, 2039952.64], + [405767.14, 194123.92, 3156945.21, 1270431.27, 529670.6, 219798.78, 7547821, 1441807.88], + [2008366.85, 754830.5, 4088621.31, 1350035.81, 3467615.16, 1160639.56, 6623534.92, 2612041.49], + [590536.1, 283569.17, 3053141.34, 1746096.06, 547704.36, 108422.01, 2567375.43, 841972.46], + [2610784.51, 989426.6, 6011398.61, 2305188, 2935008.02, 1106550.62, 18472467, 2097915.19] + ], + "headerItems": [ + [ + [ + { "attributeHeaderItem": { "name": "CompuSci", "uri": "CompuSci" } }, + { "attributeHeaderItem": { "name": "CompuSci", "uri": "CompuSci" } }, + { "attributeHeaderItem": { "name": "Educationly", "uri": "Educationly" } }, + { "attributeHeaderItem": { "name": "Educationly", "uri": "Educationly" } }, + { "attributeHeaderItem": { "name": "Explorer", "uri": "Explorer" } } + ], + [ + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } } + ] + ], + [ + [ + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } } + ], + [ + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } }, + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } } + ], + [ + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } }, + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } }, + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } }, + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } } + ] + ] + ], + "offset": [0, 0], + "totalCount": [12, 8], + "totals": [ + [ + [ + 14418302.73, 5516396.52, 34514336.86, 14100358.85, 13598793.69, 5026363.13, 54094023.26, + 13667634.95 + ] + ], + [] + ] +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/requests.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/requests.json index 5dabe5ee01d..4c255ba4d0a 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/requests.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/requests.json @@ -2,6 +2,7 @@ "allData": false, "windows": [ { "offset": [0, 0], "size": [100, 1000] }, + { "offset": [0, 0], "size": [5, 1000] }, { "offset": [0, 0], "size": [22, 1000] } ] } diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/scenarios.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/scenarios.json index 348f9bc6660..e4bbba2adff 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/scenarios.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/7aacee42d5804a99f3dab100b0a5669e/scenarios.json @@ -381,5 +381,970 @@ }, "scenario": "two measures and single grand total for each", "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_f_opportunitysnapshot.forecastcategory_id": "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.department_id": "a_f_owner.department_id", + "a_f_owner.region_id": "a_f_owner.region_id", + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_owner.department_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "dimensions": [ + { + "itemIdentifiers": ["a_label.f_product.product.name", "a_f_owner.department_id"], + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "itemIdentifiers": [ + "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.region_id", + "measureGroup" + ], + "totals": [] + } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "pagination with 5 rows per page and totals", + "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_f_opportunitysnapshot.forecastcategory_id": "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.department_id": "a_f_owner.department_id", + "a_f_owner.region_id": "a_f_owner.region_id", + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_owner.department_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "dimensions": [ + { + "itemIdentifiers": ["a_label.f_product.product.name", "a_f_owner.department_id"], + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "itemIdentifiers": [ + "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.region_id", + "measureGroup" + ], + "totals": [] + } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "grand totals pinned at bottom (default)", + "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_f_opportunitysnapshot.forecastcategory_id": "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.department_id": "a_f_owner.department_id", + "a_f_owner.region_id": "a_f_owner.region_id", + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_owner.department_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "dimensions": [ + { + "itemIdentifiers": ["a_label.f_product.product.name", "a_f_owner.department_id"], + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "itemIdentifiers": [ + "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.region_id", + "measureGroup" + ], + "totals": [] + } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "grand totals pinned at top", + "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_f_opportunitysnapshot.forecastcategory_id": "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.department_id": "a_f_owner.department_id", + "a_f_owner.region_id": "a_f_owner.region_id", + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_owner.department_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "dimensions": [ + { + "itemIdentifiers": ["a_label.f_product.product.name", "a_f_owner.department_id"], + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "itemIdentifiers": [ + "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.region_id", + "measureGroup" + ], + "totals": [] + } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "grand totals at bottom (not pinned)", + "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_f_opportunitysnapshot.forecastcategory_id": "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.department_id": "a_f_owner.department_id", + "a_f_owner.region_id": "a_f_owner.region_id", + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_owner.department_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "dimensions": [ + { + "itemIdentifiers": ["a_label.f_product.product.name", "a_f_owner.department_id"], + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "itemIdentifiers": [ + "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.region_id", + "measureGroup" + ], + "totals": [] + } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "grand totals at top (not pinned)", + "vis": "PivotTableNext" } ] diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/aea45a374b1f55e749275b328e30d94d/scenarios.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/aea45a374b1f55e749275b328e30d94d/scenarios.json index e7dc0492634..e94a39008e8 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/aea45a374b1f55e749275b328e30d94d/scenarios.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/aea45a374b1f55e749275b328e30d94d/scenarios.json @@ -768,5 +768,134 @@ }, "scenario": "empty values", "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_attr.f_stage.stagename": "a_attr.f_stage.stagename", + "a_f_owner.department_id": "a_f_owner.department_id", + "a_f_owner.region_id": "a_f_owner.region_id", + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "attr.f_stage.stagename", "type": "displayForm" }, + "localIdentifier": "a_attr.f_stage.stagename" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_owner.department_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "attr.f_stage.stagename", + "type": "displayForm" + }, + "localIdentifier": "a_attr.f_stage.stagename" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns" + } + ], + "dimensions": [ + { "itemIdentifiers": ["a_label.f_product.product.name", "a_f_owner.department_id"] }, + { "itemIdentifiers": ["a_attr.f_stage.stagename", "a_f_owner.region_id", "measureGroup"] } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "table with multiple measure columns and weak measure size", + "vis": "PivotTableNext" } ] diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/dataView_o0_0s5_1000.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/dataView_o0_0s5_1000.json new file mode 100644 index 00000000000..1549c20bf35 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/dataView_o0_0s5_1000.json @@ -0,0 +1,62 @@ +{ + "count": [5, 8], + "data": [ + [2174478.26, 883793.08, 5917286.73, 2370306.08, 1989393.54, 817756.22, 5501537.16, 2039952.64], + [405767.14, 194123.92, 3156945.21, 1270431.27, 529670.6, 219798.78, 7547821, 1441807.88], + [2008366.85, 754830.5, 4088621.31, 1350035.81, 3467615.16, 1160639.56, 6623534.92, 2612041.49], + [590536.1, 283569.17, 3053141.34, 1746096.06, 547704.36, 108422.01, 2567375.43, 841972.46], + [2610784.51, 989426.6, 6011398.61, 2305188, 2935008.02, 1106550.62, 18472467, 2097915.19] + ], + "headerItems": [ + [ + [ + { "attributeHeaderItem": { "name": "CompuSci", "uri": "CompuSci" } }, + { "attributeHeaderItem": { "name": "CompuSci", "uri": "CompuSci" } }, + { "attributeHeaderItem": { "name": "Educationly", "uri": "Educationly" } }, + { "attributeHeaderItem": { "name": "Educationly", "uri": "Educationly" } }, + { "attributeHeaderItem": { "name": "Explorer", "uri": "Explorer" } } + ], + [ + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } }, + { "attributeHeaderItem": { "name": "Inside Sales", "uri": "Inside Sales" } }, + { "attributeHeaderItem": { "name": "Direct Sales", "uri": "Direct Sales" } } + ] + ], + [ + [ + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Exclude", "uri": "Exclude" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } }, + { "attributeHeaderItem": { "name": "Include", "uri": "Include" } } + ], + [ + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } }, + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "East Coast", "uri": "East Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } }, + { "attributeHeaderItem": { "name": "West Coast", "uri": "West Coast" } } + ], + [ + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } }, + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } }, + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } }, + { "measureHeaderItem": { "name": "Amount", "order": 0 } }, + { "measureHeaderItem": { "name": "Won", "order": 1 } } + ] + ] + ], + "offset": [0, 0], + "totalCount": [12, 8] +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/requests.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/requests.json index 5dabe5ee01d..ec128b169df 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/requests.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/requests.json @@ -1,6 +1,7 @@ { "allData": false, "windows": [ + { "offset": [0, 0], "size": [5, 1000] }, { "offset": [0, 0], "size": [100, 1000] }, { "offset": [0, 0], "size": [22, 1000] } ] diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/scenarios.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/scenarios.json index 24ffb21ae96..aec9de98bf3 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/scenarios.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/c2ed90caa1677729885f2f90df6bdd73/scenarios.json @@ -327,5 +327,170 @@ }, "scenario": "two measures with two row and two column attributes", "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_f_opportunitysnapshot.forecastcategory_id": "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.department_id": "a_f_owner.department_id", + "a_f_owner.region_id": "a_f_owner.region_id", + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { + "identifier": "f_owner.department_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns" + } + ], + "dimensions": [ + { "itemIdentifiers": ["a_label.f_product.product.name", "a_f_owner.department_id"] }, + { + "itemIdentifiers": [ + "a_f_opportunitysnapshot.forecastcategory_id", + "a_f_owner.region_id", + "measureGroup" + ] + } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "pagination with 5 rows per page", + "vis": "PivotTableNext" } ] diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/f6db2dc71e518b432dd21209ebdd0521/scenarios.json b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/f6db2dc71e518b432dd21209ebdd0521/scenarios.json index 76883805c32..5a2bbcc9b13 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/executions/f6db2dc71e518b432dd21209ebdd0521/scenarios.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/executions/f6db2dc71e518b432dd21209ebdd0521/scenarios.json @@ -211,5 +211,330 @@ }, "scenario": "two measures with row attribute", "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "alias": "Product Name With Very Long Title For Wrapping", + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "alias": "Product Name With Very Long Title For Wrapping", + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + } + ], + "localIdentifier": "attribute" + }, + { "items": [], "localIdentifier": "columns" } + ], + "dimensions": [ + { "itemIdentifiers": ["a_label.f_product.product.name"] }, + { "itemIdentifiers": ["measureGroup"] } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "cell text wrapping enabled", + "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "alias": "Product Name With Very Long Title For Wrapping", + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "alias": "Product Name With Very Long Title For Wrapping", + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + } + ], + "localIdentifier": "attribute" + }, + { "items": [], "localIdentifier": "columns" } + ], + "dimensions": [ + { "itemIdentifiers": ["a_label.f_product.product.name"] }, + { "itemIdentifiers": ["measureGroup"] } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "header text wrapping enabled", + "vis": "PivotTableNext" + }, + { + "n2oMap": { + "a_label.f_product.product.name": "a_label.f_product.product.name", + "m_87a053b0_3947_49f3_b0c5_de53fd01f050": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "m_e519fa2a_86c3_4e32_8313_0c03062348j3": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + }, + "originalExecution": { + "attributes": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + } + ], + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + } + ], + "localIdentifier": "attribute" + }, + { "items": [], "localIdentifier": "columns" } + ], + "dimensions": [ + { "itemIdentifiers": ["a_label.f_product.product.name"] }, + { "itemIdentifiers": ["measureGroup"] } + ], + "executionConfig": {}, + "filters": [], + "measures": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "postProcessing": {}, + "sortBy": [], + "workspace": "reference-workspace" + }, + "scenario": "simple table with attribute and metric column size", + "vis": "PivotTableNext" } ] diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.024009c936ed73ce9f78c31f9610922c/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.024009c936ed73ce9f78c31f9610922c/obj.json index 35786f998dc..88db4c69d4b 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.024009c936ed73ce9f78c31f9610922c/obj.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.024009c936ed73ce9f78c31f9610922c/obj.json @@ -50,7 +50,48 @@ ], "filters": [], "identifier": "PivotTableNext.024009c936ed73ce9f78c31f9610922c", - "properties": { "controls": {} }, + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + } + ] + } + }, "sorts": [ { "measureSortItem": { diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.03402d49a1a4ee909a0f839253891d15/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.03402d49a1a4ee909a0f839253891d15/obj.json index 71fb20227c1..75250458fb9 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.03402d49a1a4ee909a0f839253891d15/obj.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.03402d49a1a4ee909a0f839253891d15/obj.json @@ -50,7 +50,48 @@ ], "filters": [], "identifier": "PivotTableNext.03402d49a1a4ee909a0f839253891d15", - "properties": { "controls": {} }, + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + } + ] + } + }, "sorts": [ { "measureSortItem": { diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1c9b7faf46629983f73e2f3b8b6300cc/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1c9b7faf46629983f73e2f3b8b6300cc/obj.json new file mode 100644 index 00000000000..4f2b5074490 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1c9b7faf46629983f73e2f3b8b6300cc/obj.json @@ -0,0 +1,131 @@ +{ + "insight": { + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns" + } + ], + "filters": [], + "identifier": "PivotTableNext.1c9b7faf46629983f73e2f3b8b6300cc", + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_f_owner.department_id", + "width": { "value": 120 } + } + } + ] + } + }, + "sorts": [], + "title": "PivotTableNext - pagination with 5 rows per page", + "uri": "PivotTableNext.1c9b7faf46629983f73e2f3b8b6300cc", + "visualizationUrl": "local:table" + } +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1fc9a36652046d654165c3ca9681e728/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1fc9a36652046d654165c3ca9681e728/obj.json index edba3bbc86d..c59a055494d 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1fc9a36652046d654165c3ca9681e728/obj.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1fc9a36652046d654165c3ca9681e728/obj.json @@ -59,7 +59,54 @@ ], "filters": [], "identifier": "PivotTableNext.1fc9a36652046d654165c3ca9681e728", - "properties": { "controls": {} }, + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_f_owner.department_id", + "width": { "value": 120 } + } + } + ] + } + }, "sorts": [ { "attributeSortItem": { "attributeIdentifier": "a_f_owner.department_id", "direction": "desc" } } ], diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1fe7c93076c78d3a4878b5e584e4f685/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1fe7c93076c78d3a4878b5e584e4f685/obj.json new file mode 100644 index 00000000000..3226a8e3671 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.1fe7c93076c78d3a4878b5e584e4f685/obj.json @@ -0,0 +1,144 @@ +{ + "insight": { + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "filters": [], + "identifier": "PivotTableNext.1fe7c93076c78d3a4878b5e584e4f685", + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_f_owner.department_id", + "width": { "value": 120 } + } + } + ] + } + }, + "sorts": [], + "title": "PivotTableNext - grand totals pinned at bottom (default)", + "uri": "PivotTableNext.1fe7c93076c78d3a4878b5e584e4f685", + "visualizationUrl": "local:table" + } +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.460f35ddd6bfbc6d32f6aa28bf70c343/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.460f35ddd6bfbc6d32f6aa28bf70c343/obj.json index 6dbb7bc5384..aca09171068 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.460f35ddd6bfbc6d32f6aa28bf70c343/obj.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.460f35ddd6bfbc6d32f6aa28bf70c343/obj.json @@ -59,7 +59,54 @@ ], "filters": [], "identifier": "PivotTableNext.460f35ddd6bfbc6d32f6aa28bf70c343", - "properties": { "controls": {} }, + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_f_owner.department_id", + "width": { "value": 120 } + } + } + ] + } + }, "sorts": [ { "attributeSortItem": { diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.54066f10a13954b47db9920efe3a035d/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.54066f10a13954b47db9920efe3a035d/obj.json new file mode 100644 index 00000000000..ee56f1a48fa --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.54066f10a13954b47db9920efe3a035d/obj.json @@ -0,0 +1,71 @@ +{ + "insight": { + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "alias": "Product Name With Very Long Title For Wrapping", + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + } + ], + "localIdentifier": "attribute" + }, + { "items": [], "localIdentifier": "columns" } + ], + "filters": [], + "identifier": "PivotTableNext.54066f10a13954b47db9920efe3a035d", + "properties": { + "controls": { + "columnWidths": [ + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 60 } + } + } + ] + } + }, + "sorts": [], + "title": "PivotTableNext - cell text wrapping enabled", + "uri": "PivotTableNext.54066f10a13954b47db9920efe3a035d", + "visualizationUrl": "local:table" + } +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.80f6060fe0b4437d8efa3d714ee8e4ef/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.80f6060fe0b4437d8efa3d714ee8e4ef/obj.json index 3374432463c..be421da693a 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.80f6060fe0b4437d8efa3d714ee8e4ef/obj.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.80f6060fe0b4437d8efa3d714ee8e4ef/obj.json @@ -81,6 +81,16 @@ "attributeIdentifier": "a_f_owner.department_id", "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "type": "med" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" } ] }, diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.83514b83a226a7871c7231076b317528/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.83514b83a226a7871c7231076b317528/obj.json new file mode 100644 index 00000000000..6f1fc59ef1d --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.83514b83a226a7871c7231076b317528/obj.json @@ -0,0 +1,144 @@ +{ + "insight": { + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "filters": [], + "identifier": "PivotTableNext.83514b83a226a7871c7231076b317528", + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_f_owner.department_id", + "width": { "value": 120 } + } + } + ] + } + }, + "sorts": [], + "title": "PivotTableNext - pagination with 5 rows per page and totals", + "uri": "PivotTableNext.83514b83a226a7871c7231076b317528", + "visualizationUrl": "local:table" + } +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.908325936ba6b439a7a579d7fe746017/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.908325936ba6b439a7a579d7fe746017/obj.json new file mode 100644 index 00000000000..80f2f4d9392 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.908325936ba6b439a7a579d7fe746017/obj.json @@ -0,0 +1,71 @@ +{ + "insight": { + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "alias": "Product Name With Very Long Title For Wrapping", + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + } + ], + "localIdentifier": "attribute" + }, + { "items": [], "localIdentifier": "columns" } + ], + "filters": [], + "identifier": "PivotTableNext.908325936ba6b439a7a579d7fe746017", + "properties": { + "controls": { + "columnWidths": [ + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 60 } + } + } + ] + } + }, + "sorts": [], + "title": "PivotTableNext - header text wrapping enabled", + "uri": "PivotTableNext.908325936ba6b439a7a579d7fe746017", + "visualizationUrl": "local:table" + } +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.b5fd23e1ea28bae50bf25a683c51f4ea/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.b5fd23e1ea28bae50bf25a683c51f4ea/obj.json index 20020deae5c..3247730382b 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.b5fd23e1ea28bae50bf25a683c51f4ea/obj.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.b5fd23e1ea28bae50bf25a683c51f4ea/obj.json @@ -81,6 +81,16 @@ "attributeIdentifier": "a_f_owner.department_id", "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "type": "med" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" } ] }, diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.c6ff6fc2578297f71ef831108a55fe52/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.c6ff6fc2578297f71ef831108a55fe52/obj.json new file mode 100644 index 00000000000..5e3ce368ef6 --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.c6ff6fc2578297f71ef831108a55fe52/obj.json @@ -0,0 +1,144 @@ +{ + "insight": { + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "filters": [], + "identifier": "PivotTableNext.c6ff6fc2578297f71ef831108a55fe52", + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_f_owner.department_id", + "width": { "value": 120 } + } + } + ] + } + }, + "sorts": [], + "title": "PivotTableNext - grand totals pinned at top", + "uri": "PivotTableNext.c6ff6fc2578297f71ef831108a55fe52", + "visualizationUrl": "local:table" + } +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.d2a50f7e4d593ba8db08c0c9e7a5d8e5/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.d2a50f7e4d593ba8db08c0c9e7a5d8e5/obj.json index eb974b5491f..ca7f167b0ad 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.d2a50f7e4d593ba8db08c0c9e7a5d8e5/obj.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.d2a50f7e4d593ba8db08c0c9e7a5d8e5/obj.json @@ -81,6 +81,16 @@ "attributeIdentifier": "a_f_owner.department_id", "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", "type": "med" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" + }, + { + "attributeIdentifier": "a_f_owner.department_id", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "nat" } ] }, diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.d9273a9e68b191b7dbd096341a868b5f/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.d9273a9e68b191b7dbd096341a868b5f/obj.json new file mode 100644 index 00000000000..c92b9ff51db --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.d9273a9e68b191b7dbd096341a868b5f/obj.json @@ -0,0 +1,144 @@ +{ + "insight": { + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "filters": [], + "identifier": "PivotTableNext.d9273a9e68b191b7dbd096341a868b5f", + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_f_owner.department_id", + "width": { "value": 120 } + } + } + ] + } + }, + "sorts": [], + "title": "PivotTableNext - grand totals at bottom (not pinned)", + "uri": "PivotTableNext.d9273a9e68b191b7dbd096341a868b5f", + "visualizationUrl": "local:table" + } +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.da2a8ac003b9ccc5ef48b09bb7f8dd10/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.da2a8ac003b9ccc5ef48b09bb7f8dd10/obj.json new file mode 100644 index 00000000000..d6357a530dd --- /dev/null +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.da2a8ac003b9ccc5ef48b09bb7f8dd10/obj.json @@ -0,0 +1,144 @@ +{ + "insight": { + "buckets": [ + { + "items": [ + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "87a053b0-3947-49f3-b0c5-de53fd01f050", + "type": "measure" + } + } + }, + "localIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + { + "measure": { + "definition": { + "measureDefinition": { + "item": { + "identifier": "e519fa2a-86c3-4e32-8313-0c03062348j3", + "type": "measure" + } + } + }, + "localIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + } + ], + "localIdentifier": "measures" + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "label.f_product.product.name", + "type": "displayForm" + }, + "localIdentifier": "a_label.f_product.product.name" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.department_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.department_id" + } + } + ], + "localIdentifier": "attribute", + "totals": [ + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050", + "type": "sum" + }, + { + "attributeIdentifier": "a_label.f_product.product.name", + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3", + "type": "sum" + } + ] + }, + { + "items": [ + { + "attribute": { + "displayForm": { + "identifier": "f_opportunitysnapshot.forecastcategory_id", + "type": "displayForm" + }, + "localIdentifier": "a_f_opportunitysnapshot.forecastcategory_id" + } + }, + { + "attribute": { + "displayForm": { "identifier": "f_owner.region_id", "type": "displayForm" }, + "localIdentifier": "a_f_owner.region_id" + } + } + ], + "localIdentifier": "columns", + "totals": [] + } + ], + "filters": [], + "identifier": "PivotTableNext.da2a8ac003b9ccc5ef48b09bb7f8dd10", + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_f_owner.department_id", + "width": { "value": 120 } + } + } + ] + } + }, + "sorts": [], + "title": "PivotTableNext - grand totals at top (not pinned)", + "uri": "PivotTableNext.da2a8ac003b9ccc5ef48b09bb7f8dd10", + "visualizationUrl": "local:table" + } +} diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.eecaed208a29cbbcf2646114c82ee809/obj.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.eecaed208a29cbbcf2646114c82ee809/obj.json index 92e39a246a2..a9fb1ac96d2 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.eecaed208a29cbbcf2646114c82ee809/obj.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/PivotTableNext.eecaed208a29cbbcf2646114c82ee809/obj.json @@ -59,7 +59,54 @@ ], "filters": [], "identifier": "PivotTableNext.eecaed208a29cbbcf2646114c82ee809", - "properties": { "controls": {} }, + "properties": { + "controls": { + "columnWidths": [ + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_87a053b0_3947_49f3_b0c5_de53fd01f050" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_b4e3e3c7_ead3_4d69_8be4_23bcfe5ff7aa" + } + }, + "width": { "value": 100 } + } + }, + { + "measureColumnWidthItem": { + "locator": { + "measureLocatorItem": { + "measureIdentifier": "m_e519fa2a_86c3_4e32_8313_0c03062348j3" + } + }, + "width": { "value": 100 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_label.f_product.product.name", + "width": { "value": 120 } + } + }, + { + "attributeColumnWidthItem": { + "attributeIdentifier": "a_f_owner.department_id", + "width": { "value": 120 } + } + } + ] + } + }, "sorts": [ { "attributeSortItem": { diff --git a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/insights.json b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/insights.json index c44f1771d4c..f961e4c9440 100644 --- a/tools/reference-workspace/src/recordings/uiTestScenarios/insights/insights.json +++ b/tools/reference-workspace/src/recordings/uiTestScenarios/insights/insights.json @@ -3963,6 +3963,11 @@ "scenarioName": "two measures and single column grand total for each", "visName": "PivotTableNext" }, + "PivotTableNext.1c9b7faf46629983f73e2f3b8b6300cc": { + "comment": "Auto-generated insight for test scenario PivotTableNext - pagination with 5 rows per page.", + "scenarioName": "pagination with 5 rows per page", + "visName": "PivotTableNext" + }, "PivotTableNext.1f92031de9e10dafdf0b0318799334ef": { "comment": "Auto-generated insight for test scenario PivotTableNext - simple table with custom attribute column size." }, @@ -3971,6 +3976,11 @@ "scenarioName": "single measure pivot sorted by second row attr", "visName": "PivotTableNext" }, + "PivotTableNext.1fe7c93076c78d3a4878b5e584e4f685": { + "comment": "Auto-generated insight for test scenario PivotTableNext - grand totals pinned at bottom (default).", + "scenarioName": "grand totals pinned at bottom (default)", + "visName": "PivotTableNext" + }, "PivotTableNext.237307ab4326ca12ccebd4725f0dce14": { "comment": "Auto-generated insight for test scenario PivotTableNext - two measures and multiple grand totals for each.", "scenarioName": "two measures and multiple grand totals for each", @@ -4037,6 +4047,11 @@ "PivotTableNext.50a00c5c98085613d6669432ffb74b73": { "comment": "Auto-generated insight for test scenario PivotTableNext - simple table with attribute and metric column size." }, + "PivotTableNext.54066f10a13954b47db9920efe3a035d": { + "comment": "Auto-generated insight for test scenario PivotTableNext - cell text wrapping enabled.", + "scenarioName": "cell text wrapping enabled", + "visName": "PivotTableNext" + }, "PivotTableNext.5474330193a9ae4d54971b79dd16f7f5": { "comment": "Auto-generated insight for test scenario PivotTableNext - two measures in rows and column attrs on left, with totals.", "scenarioName": "two measures in rows and column attrs on left, with totals", @@ -4100,6 +4115,11 @@ "scenarioName": "two measures and grand totals and multiple subtotals", "visName": "PivotTableNext" }, + "PivotTableNext.83514b83a226a7871c7231076b317528": { + "comment": "Auto-generated insight for test scenario PivotTableNext - pagination with 5 rows per page and totals.", + "scenarioName": "pagination with 5 rows per page and totals", + "visName": "PivotTableNext" + }, "PivotTableNext.83c2cadca4ae3cd0444ea2e4d3a55a16": { "comment": "Auto-generated insight for test scenario PivotTableNext - with date filter.", "scenarioName": "with date filter", @@ -4118,6 +4138,11 @@ "scenarioName": "with attributes without measures", "visName": "PivotTableNext" }, + "PivotTableNext.908325936ba6b439a7a579d7fe746017": { + "comment": "Auto-generated insight for test scenario PivotTableNext - header text wrapping enabled.", + "scenarioName": "header text wrapping enabled", + "visName": "PivotTableNext" + }, "PivotTableNext.971af631f188c59bd80221fdaef2468f": { "comment": "Auto-generated insight for test scenario PivotTableNext - simple table with custom metric column size." }, @@ -4207,6 +4232,11 @@ "PivotTableNext.c3e7f11e6d421d17f7e754185717aba4": { "comment": "Auto-generated insight for test scenario PivotTableNext - simple table with custom metric column size." }, + "PivotTableNext.c6ff6fc2578297f71ef831108a55fe52": { + "comment": "Auto-generated insight for test scenario PivotTableNext - grand totals pinned at top.", + "scenarioName": "grand totals pinned at top", + "visName": "PivotTableNext" + }, "PivotTableNext.c73c0198e33870a238c49d127f763b02": { "comment": "Auto-generated insight for test scenario PivotTableNext - with two measures and row attribute with auto-resizing." }, @@ -4221,7 +4251,9 @@ "visName": "PivotTableNext" }, "PivotTableNext.d1fad21b44d4f428c6fa759fcbd8b2f8": { - "comment": "Auto-generated insight for test scenario PivotTableNext - simple table with attribute and metric column size." + "comment": "Auto-generated insight for test scenario PivotTableNext - simple table with attribute and metric column size.", + "scenarioName": "simple table with attribute and metric column size", + "visName": "PivotTableNext" }, "PivotTableNext.d2a50f7e4d593ba8db08c0c9e7a5d8e5": { "comment": "Auto-generated insight for test scenario PivotTableNext - with two measures, grand totals and subtotals with auto-resizing and grow to fit." @@ -4231,6 +4263,16 @@ "scenarioName": "single measure and multiple column grand totals", "visName": "PivotTableNext" }, + "PivotTableNext.d9273a9e68b191b7dbd096341a868b5f": { + "comment": "Auto-generated insight for test scenario PivotTableNext - grand totals at bottom (not pinned).", + "scenarioName": "grand totals at bottom (not pinned)", + "visName": "PivotTableNext" + }, + "PivotTableNext.da2a8ac003b9ccc5ef48b09bb7f8dd10": { + "comment": "Auto-generated insight for test scenario PivotTableNext - grand totals at top (not pinned).", + "scenarioName": "grand totals at top (not pinned)", + "visName": "PivotTableNext" + }, "PivotTableNext.df98d53c1649c7bba56762edd1ce8015": { "comment": "Auto-generated insight for test scenario PivotTableNext - single measure and single column/row grand total.", "scenarioName": "single measure and single column/row grand total", @@ -4270,7 +4312,9 @@ "visName": "PivotTableNext" }, "PivotTableNext.f40a038fb7394d7ad8ed16714cd49a81": { - "comment": "Auto-generated insight for test scenario PivotTableNext - table with multiple measure columns and weak measure size." + "comment": "Auto-generated insight for test scenario PivotTableNext - table with multiple measure columns and weak measure size.", + "scenarioName": "table with multiple measure columns and weak measure size", + "visName": "PivotTableNext" }, "PivotTableNext.f5b0513a34d046a3297225b71d6f321d": { "comment": "Auto-generated insight for test scenario PivotTableNext - two measures and column/row grand totals and multiple subtotals.",