From 706e9e268b7ba2f9dff8315ba5705b7d7b6b2e64 Mon Sep 17 00:00:00 2001 From: Kyle Date: Tue, 19 Mar 2024 13:07:17 -0700 Subject: [PATCH 01/25] initial commit --- src/components/GameTabs.vue | 9 +- src/components/VideoPlayer.vue | 4 +- src/components/tasks/TaskFluency.vue | 6 +- src/components/tasks/TaskLetter.vue | 4 +- src/components/tasks/TaskLevante.vue | 5 +- src/components/tasks/TaskMultichoice.vue | 4 +- src/components/tasks/TaskPA.vue | 4 +- src/components/tasks/TaskSRE.vue | 4 +- src/components/tasks/TaskSWR-ES.vue | 109 ----------------------- src/components/tasks/TaskSWR.vue | 13 ++- src/components/tasks/TaskVocab.vue | 5 +- src/main.js | 10 ++- src/pages/HomeParticipant.vue | 8 +- src/pages/HomeSelector.vue | 9 +- src/pages/ScoreReport.vue | 11 ++- src/router/index.js | 4 +- src/sentry.js | 2 +- vite.config.js | 19 ++++ 18 files changed, 91 insertions(+), 139 deletions(-) delete mode 100644 src/components/tasks/TaskSWR-ES.vue diff --git a/src/components/GameTabs.vue b/src/components/GameTabs.vue index c104e3872..792513143 100644 --- a/src/components/GameTabs.vue +++ b/src/components/GameTabs.vue @@ -72,7 +72,7 @@ - diff --git a/src/components/tasks/TaskSWR.vue b/src/components/tasks/TaskSWR.vue index 2d2a6d78d..796cc85ec 100644 --- a/src/components/tasks/TaskSWR.vue +++ b/src/components/tasks/TaskSWR.vue @@ -6,7 +6,6 @@ diff --git a/src/router/index.js b/src/router/index.js index ee80b34b4..8defd5c49 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -41,12 +41,14 @@ const routes = [ path: '/game/swr', name: 'SWR', component: () => import('../components/tasks/TaskSWR.vue'), + props: { taskId: 'swr', language: 'en' }, meta: { pageTitle: 'SWR' }, }, { path: '/game/swr-es', name: 'SWR-ES', - component: () => import('../components/tasks/TaskSWR-ES.vue'), + component: () => import('../components/tasks/TaskSWR.vue'), + props: { taskId: 'swr-es', language: 'es' }, meta: { pageTitle: 'SWR (ES)' }, }, { diff --git a/src/sentry.js b/src/sentry.js index c68249a0e..8a1a9222a 100644 --- a/src/sentry.js +++ b/src/sentry.js @@ -16,7 +16,7 @@ export function initSentry(app) { }), Sentry.browserTracingIntegration(), captureConsoleIntegration({ - levels: ['warning', 'error', 'debug', 'assert'], + levels: ['error'], }), contextLinesIntegration(), extraErrorDataIntegration(), diff --git a/vite.config.js b/vite.config.js index ce89cb045..22afe52bb 100644 --- a/vite.config.js +++ b/vite.config.js @@ -33,6 +33,25 @@ export default defineConfig({ build: { cssCodeSplit: true, sourcemap: true, + rollupOptions: { + output: { + manualChunks: { + lodash: ['lodash'], + tanstack: ['@tanstack/vue-query'], + chartJs: ['chart.js'], + sentry: ['@sentry/browser', '@sentry/integrations', '@sentry/vue', '@sentry/wasm'], + fluency: ['@bdelab/roam-fluency'], + firekit: ['@bdelab/roar-firekit'], + letter: ['@bdelab/roar-letter'], + multichoice: ['@bdelab/roar-multichoice'], + phoneme: ['@bdelab/roar-pa'], + sre: ['@bdelab/roar-sre'], + swr: ['@bdelab/roar-swr'], + utils: ['@bdelab/roar-utils'], + vocab: ['@bdelab/roar-vocab'], + }, + }, + }, }, optimizeDeps: { include: ['@bdelab/roar-firekit', 'vue-google-maps-community-fork', 'fast-deep-equal'], From fc8c336beff5a4bb19dbda19288194e351e78ec4 Mon Sep 17 00:00:00 2001 From: Kyle Date: Tue, 19 Mar 2024 14:11:45 -0700 Subject: [PATCH 02/25] remove increased memory limit from workflows and format. --- .github/workflows/deploy-firebase-test-cypress.yml | 4 ++-- .github/workflows/firebase-hosting-production.yml | 4 ++-- .github/workflows/firebase-hosting-staging.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy-firebase-test-cypress.yml b/.github/workflows/deploy-firebase-test-cypress.yml index cabb95f28..724536754 100644 --- a/.github/workflows/deploy-firebase-test-cypress.yml +++ b/.github/workflows/deploy-firebase-test-cypress.yml @@ -18,8 +18,8 @@ jobs: with: node-version: 'lts/*' - name: 'vite build' - env: - NODE_OPTIONS: '--max_old_space_size=8192' + # env: + # NODE_OPTIONS: '--max_old_space_size=8192' run: npm ci && npm run build - name: Deploy to Firebase Hosting Channel id: firebase-deploy diff --git a/.github/workflows/firebase-hosting-production.yml b/.github/workflows/firebase-hosting-production.yml index ab9abd649..e2f047fe8 100644 --- a/.github/workflows/firebase-hosting-production.yml +++ b/.github/workflows/firebase-hosting-production.yml @@ -18,8 +18,8 @@ jobs: with: node-version: 'lts/*' - name: 'vite production build' - env: - NODE_OPTIONS: '--max_old_space_size=8192' + # env: + # NODE_OPTIONS: '--max_old_space_size=8192' run: npm ci && npm run build - uses: FirebaseExtended/action-hosting-deploy@v0 with: diff --git a/.github/workflows/firebase-hosting-staging.yml b/.github/workflows/firebase-hosting-staging.yml index 88ab7facb..4d241082d 100644 --- a/.github/workflows/firebase-hosting-staging.yml +++ b/.github/workflows/firebase-hosting-staging.yml @@ -15,8 +15,8 @@ jobs: with: node-version: 'lts/*' - name: 'vite staging build' - env: - NODE_OPTIONS: '--max_old_space_size=8192' + # env: + # NODE_OPTIONS: '--max_old_space_size=8192' run: export VITE_STAGING_BUILD=true && npm ci && npm run build - uses: FirebaseExtended/action-hosting-deploy@v0 with: From c564117591117655440cb264d5e27af98b8cdf9a Mon Sep 17 00:00:00 2001 From: Kyle Date: Tue, 19 Mar 2024 15:33:31 -0700 Subject: [PATCH 03/25] fix cypress tests, add sentry user feedback widget, format --- .../default-tests/viewIndividualReport.cy.js | 14 +- .../default-tests/viewScoreReports.spec.cy.js | 2 +- package-lock.json | 695 +++++------------- package.json | 8 +- src/main.js | 8 +- src/sentry.js | 19 +- 6 files changed, 199 insertions(+), 547 deletions(-) diff --git a/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js b/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js index e77c34888..ab98b2b21 100644 --- a/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js +++ b/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js @@ -6,7 +6,7 @@ const testPartnerAdminPassword = Cypress.env('partnerAdminPassword'); const timeout = Cypress.env('timeout'); const baseUrl = Cypress.env('baseUrl'); const testUserList = Cypress.env('testUserList'); -const testAssignments = ['vocab', 'Multichoice']; +const testAssignments = ['Vocabulary', 'Multichoice', 'Written-Vocab']; function checkUrl() { cy.login(testPartnerAdminUsername, testPartnerAdminPassword); @@ -39,10 +39,14 @@ describe('The partner admin can view score reports for a given administration.', clickScoreButton(); cy.checkUserList(testUserList); checkAssignmentColumns(testAssignments); - cy.get('button').contains('Report').click(); + cy.get('button', { timeout: 3 * timeout }) + .contains('Report') + .click(); cy.get('div', { timeout: 3 * timeout }).contains('Individual Score Report'); - cy.get('button').contains('Expand All Sections').click(); - cy.get('button').contains('Export to PDF'); - cy.get('div').contains('The ROAR assessements return 3 kinds of scores'); + cy.get('button', { timeout: 3 * timeout }) + .contains('Expand All Sections') + .click(); + cy.get('button', { timeout: 3 * timeout }).contains('Export to PDF'); + cy.get('div', { timeout: 3 * timeout }).contains('The ROAR assessements return 3 kinds of scores'); }); }); diff --git a/cypress/e2e/partner-admin/default-tests/viewScoreReports.spec.cy.js b/cypress/e2e/partner-admin/default-tests/viewScoreReports.spec.cy.js index 69290e994..a0113aef1 100644 --- a/cypress/e2e/partner-admin/default-tests/viewScoreReports.spec.cy.js +++ b/cypress/e2e/partner-admin/default-tests/viewScoreReports.spec.cy.js @@ -6,7 +6,7 @@ const testPartnerAdminPassword = Cypress.env('partnerAdminPassword'); const timeout = Cypress.env('timeout'); const baseUrl = Cypress.env('baseUrl'); const testUserList = Cypress.env('testUserList'); -const testAssignments = ['vocab', 'Multichoice']; +const testAssignments = ['Vocabulary', 'Multichoice', 'Written-Vocab']; function checkUrl() { cy.login(testPartnerAdminUsername, testPartnerAdminPassword); diff --git a/package-lock.json b/package-lock.json index 6477241b6..bcb4c79ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,11 +17,11 @@ "@bdelab/roar-swr": "^1.9.0", "@bdelab/roar-utils": "^1.1.0", "@bdelab/roar-vocab": "^1.6.11", - "@sentry/browser": "^7.103.0", - "@sentry/integrations": "^7.103.0", + "@sentry/browser": "^7.107.0", + "@sentry/integrations": "^7.107.0", "@sentry/vite-plugin": "^2.14.2", - "@sentry/vue": "^7.103.0", - "@sentry/wasm": "^7.103.0", + "@sentry/vue": "^7.107.0", + "@sentry/wasm": "^7.107.0", "@tanstack/vue-query": "^4.35.7", "@vuelidate/core": "^2.0.0-alpha.40", "@vuelidate/validators": "^2.0.0-alpha.28", @@ -5306,89 +5306,40 @@ "license": "MIT" }, "node_modules/@sentry-internal/feedback": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.103.0.tgz", - "integrity": "sha512-2nYoCfP7FpiUR+xxO5y5BL2ajHrhM4fL7HSup6QKNn7gI7vLyllYOOuYFNHhSmsXCD0i00U8DBClGLcn+6DQqw==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.107.0.tgz", + "integrity": "sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA==", "dependencies": { - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" }, "engines": { "node": ">=12" } }, - "node_modules/@sentry-internal/feedback/node_modules/@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "dependencies": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry-internal/feedback/node_modules/@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry-internal/feedback/node_modules/@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "dependencies": { - "@sentry/types": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@sentry-internal/replay-canvas": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.103.0.tgz", - "integrity": "sha512-EyDRMdlSqtwY8zGFhOWwl+nwwo98hlhJz+bpF5PQ6VmFpbplh6Wqfx2p+cPXQr40TGMMC4+vPFlSWTOMjcO9zQ==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.107.0.tgz", + "integrity": "sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow==", "dependencies": { - "@sentry/core": "7.103.0", - "@sentry/replay": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" + "@sentry/core": "7.107.0", + "@sentry/replay": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" }, "engines": { "node": ">=12" } }, - "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "dependencies": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", + "node_modules/@sentry-internal/tracing": { + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.107.0.tgz", + "integrity": "sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ==", "dependencies": { - "@sentry/types": "7.103.0" + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" }, "engines": { "node": ">=8" @@ -5403,61 +5354,17 @@ } }, "node_modules/@sentry/browser": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.103.0.tgz", - "integrity": "sha512-lP3Oplnwo1lY8ltk8SWzQURbxnSfVhYA099mVs1T95sdwXS16Za6SX7Ld/9T506ZW/WyoU4VCq7eKtG2kPFhMQ==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.107.0.tgz", + "integrity": "sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g==", "dependencies": { - "@sentry-internal/feedback": "7.103.0", - "@sentry-internal/replay-canvas": "7.103.0", - "@sentry-internal/tracing": "7.103.0", - "@sentry/core": "7.103.0", - "@sentry/replay": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/browser/node_modules/@sentry-internal/tracing": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.103.0.tgz", - "integrity": "sha512-sZ/Wao8HOvGaBs7WlOdflMpHGAFkOBWL6hBiirHaOy5d+IDm7n7et5U6zhvcfiyYBO4nY36gy1Tg5mw+aNO0Vw==", - "dependencies": { - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/browser/node_modules/@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "dependencies": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/browser/node_modules/@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/browser/node_modules/@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "dependencies": { - "@sentry/types": "7.103.0" + "@sentry-internal/feedback": "7.107.0", + "@sentry-internal/replay-canvas": "7.107.0", + "@sentry-internal/tracing": "7.107.0", + "@sentry/core": "7.107.0", + "@sentry/replay": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" }, "engines": { "node": ">=8" @@ -5605,124 +5512,80 @@ "node": ">=10" } }, - "node_modules/@sentry/integrations": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.103.0.tgz", - "integrity": "sha512-jS1vQqBBF776xFpht4xS5cJRztbpskFELeZX57pELzy/J7PNjbO0/oypP1qK7budMxxkazJhkcNwJw9eUFT0pg==", - "dependencies": { - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0", - "localforage": "^1.8.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/integrations/node_modules/@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", + "node_modules/@sentry/core": { + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.107.0.tgz", + "integrity": "sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw==", "dependencies": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" }, "engines": { "node": ">=8" } }, - "node_modules/@sentry/integrations/node_modules/@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/integrations/node_modules/@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", + "node_modules/@sentry/integrations": { + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.107.0.tgz", + "integrity": "sha512-0h2sZcjcdptS2pju1KSF4+sXaRaFTlmAN1ZokFfmfnVTs6cVtIFttUFxTYrwQUEE2knpAV05pz87zg1yfPAfYg==", "dependencies": { - "@sentry/types": "7.103.0" + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0", + "localforage": "^1.8.1" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/replay": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.103.0.tgz", - "integrity": "sha512-I37komyb+DruQG8lPPPOFxLLbOijNXeTxiWLsIn+KFZqRtKqxxQWdNnk56V4YSTpFzxnMEFMRCpXhncuTWu4LA==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.107.0.tgz", + "integrity": "sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA==", "dependencies": { - "@sentry-internal/tracing": "7.103.0", - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" + "@sentry-internal/tracing": "7.107.0", + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" }, "engines": { "node": ">=12" } }, - "node_modules/@sentry/replay/node_modules/@sentry-internal/tracing": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.103.0.tgz", - "integrity": "sha512-sZ/Wao8HOvGaBs7WlOdflMpHGAFkOBWL6hBiirHaOy5d+IDm7n7et5U6zhvcfiyYBO4nY36gy1Tg5mw+aNO0Vw==", + "node_modules/@sentry/rollup-plugin": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/@sentry/rollup-plugin/-/rollup-plugin-2.14.2.tgz", + "integrity": "sha512-6cnU3RM35ED3vRkTO2pCHYGXWXkIYGTqHB75O1kMdLfSXKElY5u9bKVApC/8oIJuXg7b/l5j7reBMB5bAlsG+w==", "dependencies": { - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" + "@sentry/bundler-plugin-core": "2.14.2", + "unplugin": "1.0.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/replay/node_modules/@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "dependencies": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" + "node": ">= 14" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "rollup": ">=3.2.0" } }, - "node_modules/@sentry/replay/node_modules/@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==", + "node_modules/@sentry/types": { + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.107.0.tgz", + "integrity": "sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w==", "engines": { "node": ">=8" } }, - "node_modules/@sentry/replay/node_modules/@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", + "node_modules/@sentry/utils": { + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.107.0.tgz", + "integrity": "sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw==", "dependencies": { - "@sentry/types": "7.103.0" + "@sentry/types": "7.107.0" }, "engines": { "node": ">=8" } }, - "node_modules/@sentry/rollup-plugin": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/@sentry/rollup-plugin/-/rollup-plugin-2.14.2.tgz", - "integrity": "sha512-6cnU3RM35ED3vRkTO2pCHYGXWXkIYGTqHB75O1kMdLfSXKElY5u9bKVApC/8oIJuXg7b/l5j7reBMB5bAlsG+w==", - "dependencies": { - "@sentry/bundler-plugin-core": "2.14.2", - "unplugin": "1.0.1" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "rollup": ">=3.2.0" - } - }, "node_modules/@sentry/vite-plugin": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.14.2.tgz", @@ -5846,14 +5709,14 @@ } }, "node_modules/@sentry/vue": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.103.0.tgz", - "integrity": "sha512-o5DlC+B6Yq39KY8SguyX2LWM+daPmjzv5teIx+Vj/MOXRb84gooEqgGvHTO/dlR7qhP89aSw7GRdnjyV+WO5WQ==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.107.0.tgz", + "integrity": "sha512-nUUaa5s2W7UmgjavoksoBlduc6mePZmo4k3y5lXPhSvZ92FcidLZItRUkwubaUBHgu8zvRxkTeXGhbqfWN4Ukg==", "dependencies": { - "@sentry/browser": "7.103.0", - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" + "@sentry/browser": "7.107.0", + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" }, "engines": { "node": ">=8" @@ -5862,77 +5725,15 @@ "vue": "2.x || 3.x" } }, - "node_modules/@sentry/vue/node_modules/@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "dependencies": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/vue/node_modules/@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/vue/node_modules/@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "dependencies": { - "@sentry/types": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@sentry/wasm": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/wasm/-/wasm-7.103.0.tgz", - "integrity": "sha512-ztjYiXqE84X7MWSVWsI8MIFi/JyFV40DFvbGGGYhj9OpnfDep760nPPgXzGeIr1sTIKl1nSKZc4EGNv0H7Zcvg==", - "dependencies": { - "@sentry/browser": "7.103.0", - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/wasm/node_modules/@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "dependencies": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/wasm/node_modules/@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/wasm/node_modules/@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/wasm/-/wasm-7.107.0.tgz", + "integrity": "sha512-THIWzfz12/ODq6jARwTEoEK1aGml/m4T4xQtm9rSrwM/QUPJP1FdseMHWqm2umPw8T6iOJXiLPWbQ70Hgal7iA==", "dependencies": { - "@sentry/types": "7.103.0" + "@sentry/browser": "7.107.0", + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" }, "engines": { "node": ">=8" @@ -30115,72 +29916,34 @@ } }, "@sentry-internal/feedback": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.103.0.tgz", - "integrity": "sha512-2nYoCfP7FpiUR+xxO5y5BL2ajHrhM4fL7HSup6QKNn7gI7vLyllYOOuYFNHhSmsXCD0i00U8DBClGLcn+6DQqw==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.107.0.tgz", + "integrity": "sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA==", "requires": { - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "dependencies": { - "@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "requires": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - } - }, - "@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==" - }, - "@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "requires": { - "@sentry/types": "7.103.0" - } - } + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" } }, "@sentry-internal/replay-canvas": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.103.0.tgz", - "integrity": "sha512-EyDRMdlSqtwY8zGFhOWwl+nwwo98hlhJz+bpF5PQ6VmFpbplh6Wqfx2p+cPXQr40TGMMC4+vPFlSWTOMjcO9zQ==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.107.0.tgz", + "integrity": "sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow==", "requires": { - "@sentry/core": "7.103.0", - "@sentry/replay": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "dependencies": { - "@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "requires": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - } - }, - "@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==" - }, - "@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "requires": { - "@sentry/types": "7.103.0" - } - } + "@sentry/core": "7.107.0", + "@sentry/replay": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" + } + }, + "@sentry-internal/tracing": { + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.107.0.tgz", + "integrity": "sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ==", + "requires": { + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" } }, "@sentry/babel-plugin-component-annotate": { @@ -30189,51 +29952,17 @@ "integrity": "sha512-mFBVnIZmdMrpxo61rG5yf0WFt5VrRpy8cpIpJtT3mYkX9vDmcUZaZaD1ctv73iZF3QwaieVdn05Na5mWzZ8h/A==" }, "@sentry/browser": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.103.0.tgz", - "integrity": "sha512-lP3Oplnwo1lY8ltk8SWzQURbxnSfVhYA099mVs1T95sdwXS16Za6SX7Ld/9T506ZW/WyoU4VCq7eKtG2kPFhMQ==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.107.0.tgz", + "integrity": "sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g==", "requires": { - "@sentry-internal/feedback": "7.103.0", - "@sentry-internal/replay-canvas": "7.103.0", - "@sentry-internal/tracing": "7.103.0", - "@sentry/core": "7.103.0", - "@sentry/replay": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "dependencies": { - "@sentry-internal/tracing": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.103.0.tgz", - "integrity": "sha512-sZ/Wao8HOvGaBs7WlOdflMpHGAFkOBWL6hBiirHaOy5d+IDm7n7et5U6zhvcfiyYBO4nY36gy1Tg5mw+aNO0Vw==", - "requires": { - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - } - }, - "@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "requires": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - } - }, - "@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==" - }, - "@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "requires": { - "@sentry/types": "7.103.0" - } - } + "@sentry-internal/feedback": "7.107.0", + "@sentry-internal/replay-canvas": "7.107.0", + "@sentry-internal/tracing": "7.107.0", + "@sentry/core": "7.107.0", + "@sentry/replay": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" } }, "@sentry/bundler-plugin-core": { @@ -30340,84 +30069,35 @@ "integrity": "sha512-KRf0VvTltHQ5gA7CdbUkaIp222LAk/f1+KqpDzO6nB/jC/tL4sfiy6YyM4uiH6IbVEudB8WpHCECiatmyAqMBA==", "optional": true }, + "@sentry/core": { + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.107.0.tgz", + "integrity": "sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw==", + "requires": { + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" + } + }, "@sentry/integrations": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.103.0.tgz", - "integrity": "sha512-jS1vQqBBF776xFpht4xS5cJRztbpskFELeZX57pELzy/J7PNjbO0/oypP1qK7budMxxkazJhkcNwJw9eUFT0pg==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.107.0.tgz", + "integrity": "sha512-0h2sZcjcdptS2pju1KSF4+sXaRaFTlmAN1ZokFfmfnVTs6cVtIFttUFxTYrwQUEE2knpAV05pz87zg1yfPAfYg==", "requires": { - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0", + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0", "localforage": "^1.8.1" - }, - "dependencies": { - "@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "requires": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - } - }, - "@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==" - }, - "@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "requires": { - "@sentry/types": "7.103.0" - } - } } }, "@sentry/replay": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.103.0.tgz", - "integrity": "sha512-I37komyb+DruQG8lPPPOFxLLbOijNXeTxiWLsIn+KFZqRtKqxxQWdNnk56V4YSTpFzxnMEFMRCpXhncuTWu4LA==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.107.0.tgz", + "integrity": "sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA==", "requires": { - "@sentry-internal/tracing": "7.103.0", - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "dependencies": { - "@sentry-internal/tracing": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.103.0.tgz", - "integrity": "sha512-sZ/Wao8HOvGaBs7WlOdflMpHGAFkOBWL6hBiirHaOy5d+IDm7n7et5U6zhvcfiyYBO4nY36gy1Tg5mw+aNO0Vw==", - "requires": { - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - } - }, - "@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "requires": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - } - }, - "@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==" - }, - "@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "requires": { - "@sentry/types": "7.103.0" - } - } + "@sentry-internal/tracing": "7.107.0", + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" } }, "@sentry/rollup-plugin": { @@ -30429,6 +30109,19 @@ "unplugin": "1.0.1" } }, + "@sentry/types": { + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.107.0.tgz", + "integrity": "sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w==" + }, + "@sentry/utils": { + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.107.0.tgz", + "integrity": "sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw==", + "requires": { + "@sentry/types": "7.107.0" + } + }, "@sentry/vite-plugin": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.14.2.tgz", @@ -30523,73 +30216,25 @@ } }, "@sentry/vue": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.103.0.tgz", - "integrity": "sha512-o5DlC+B6Yq39KY8SguyX2LWM+daPmjzv5teIx+Vj/MOXRb84gooEqgGvHTO/dlR7qhP89aSw7GRdnjyV+WO5WQ==", + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.107.0.tgz", + "integrity": "sha512-nUUaa5s2W7UmgjavoksoBlduc6mePZmo4k3y5lXPhSvZ92FcidLZItRUkwubaUBHgu8zvRxkTeXGhbqfWN4Ukg==", "requires": { - "@sentry/browser": "7.103.0", - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "dependencies": { - "@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "requires": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - } - }, - "@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==" - }, - "@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "requires": { - "@sentry/types": "7.103.0" - } - } + "@sentry/browser": "7.107.0", + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" } }, "@sentry/wasm": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/wasm/-/wasm-7.103.0.tgz", - "integrity": "sha512-ztjYiXqE84X7MWSVWsI8MIFi/JyFV40DFvbGGGYhj9OpnfDep760nPPgXzGeIr1sTIKl1nSKZc4EGNv0H7Zcvg==", - "requires": { - "@sentry/browser": "7.103.0", - "@sentry/core": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - }, - "dependencies": { - "@sentry/core": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.103.0.tgz", - "integrity": "sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==", - "requires": { - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0" - } - }, - "@sentry/types": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.103.0.tgz", - "integrity": "sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==" - }, - "@sentry/utils": { - "version": "7.103.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.103.0.tgz", - "integrity": "sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==", - "requires": { - "@sentry/types": "7.103.0" - } - } + "version": "7.107.0", + "resolved": "https://registry.npmjs.org/@sentry/wasm/-/wasm-7.107.0.tgz", + "integrity": "sha512-THIWzfz12/ODq6jARwTEoEK1aGml/m4T4xQtm9rSrwM/QUPJP1FdseMHWqm2umPw8T6iOJXiLPWbQ70Hgal7iA==", + "requires": { + "@sentry/browser": "7.107.0", + "@sentry/core": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0" } }, "@sentry/webpack-plugin": { diff --git a/package.json b/package.json index a21490aa7..2e763fcff 100644 --- a/package.json +++ b/package.json @@ -33,11 +33,11 @@ "@bdelab/roar-swr": "^1.9.0", "@bdelab/roar-utils": "^1.1.0", "@bdelab/roar-vocab": "^1.6.11", - "@sentry/browser": "^7.103.0", - "@sentry/integrations": "^7.103.0", + "@sentry/browser": "^7.107.0", + "@sentry/integrations": "^7.107.0", "@sentry/vite-plugin": "^2.14.2", - "@sentry/vue": "^7.103.0", - "@sentry/wasm": "^7.103.0", + "@sentry/vue": "^7.107.0", + "@sentry/wasm": "^7.107.0", "@tanstack/vue-query": "^4.35.7", "@vuelidate/core": "^2.0.0-alpha.40", "@vuelidate/validators": "^2.0.0-alpha.28", diff --git a/src/main.js b/src/main.js index 608a193e7..94197caed 100644 --- a/src/main.js +++ b/src/main.js @@ -1,4 +1,4 @@ -import { createApp, onMounted } from 'vue'; +import { createApp } from 'vue'; import { createPinia } from 'pinia'; import { createHead } from '@vueuse/head'; import { initSentry } from '@/sentry'; @@ -94,11 +94,7 @@ const app = createApp(App); const pinia = createPinia(); pinia.use(piniaPluginPersistedState); -onMounted(() => { - if (window.location.origin === 'https://roar.education') { - initSentry(app); - } -}); +initSentry(app); app.use(PrimeVue, { ripple: true }); app.use(ToastService); diff --git a/src/sentry.js b/src/sentry.js index 8a1a9222a..f43790b23 100644 --- a/src/sentry.js +++ b/src/sentry.js @@ -8,7 +8,7 @@ export function initSentry(app) { if (process.env.NODE_ENV === 'production') { Sentry.init({ app, - dsn: 'https://f15e3ff866394e93e00514b42113d03d@o4505913837420544.ingest.sentry.io/4506820782129152', + dsn: 'https://f15e3ff866394e93e00514b42113d03d@o4505913837420544.ingest.us.sentry.io/4506820782129152', integrations: [ Sentry.replayIntegration({ maskAllText: true, @@ -18,20 +18,27 @@ export function initSentry(app) { captureConsoleIntegration({ levels: ['error'], }), + Sentry.feedbackIntegration({ + showBranding: false, + isNameRequired: true, + formTitle: 'Report an Issue to ROAR', + colorScheme: 'light', + themeLight: { + submitBackground: 'darkred', + submitBackgroundHover: 'red', + border: '2px solid darkred', + }, + }), contextLinesIntegration(), extraErrorDataIntegration(), ], attachStacktrace: true, // Performance Monitoring tracesSampleRate: 0.2, // Capture 20% of the transactions - tracePropagationTargets: ['localhost', 'https://roar.education/**/*', regex], + tracePropagationTargets: ['localhost:5173', 'https://roar.education/**/*', regex], // Session Replay replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. - - beforeSend(event) { - return event; - }, }); } } From 8448c4e96a1bae1569d58976552e35a2abc5170c Mon Sep 17 00:00:00 2001 From: Kyle Date: Tue, 19 Mar 2024 16:51:32 -0700 Subject: [PATCH 04/25] move bug report button to bottom left --- src/assets/styles/root/base.scss | 6 ++++++ src/sentry.js | 1 - .../en/us/en-us-componentTranslations.json | 12 ++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/assets/styles/root/base.scss b/src/assets/styles/root/base.scss index 0642a1fc4..32e5809cc 100644 --- a/src/assets/styles/root/base.scss +++ b/src/assets/styles/root/base.scss @@ -12,6 +12,12 @@ body { -moz-osx-font-smoothing: grayscale; } +// Sentry feedback widget +#sentry-feedback { + --bottom: 1rem; + --left: 1rem; +} + // Placeholder ::-webkit-input-placeholder { color: var(--text-color-secondary); diff --git a/src/sentry.js b/src/sentry.js index f43790b23..9ea13f2fe 100644 --- a/src/sentry.js +++ b/src/sentry.js @@ -20,7 +20,6 @@ export function initSentry(app) { }), Sentry.feedbackIntegration({ showBranding: false, - isNameRequired: true, formTitle: 'Report an Issue to ROAR', colorScheme: 'light', themeLight: { diff --git a/src/translations/en/us/en-us-componentTranslations.json b/src/translations/en/us/en-us-componentTranslations.json index c1396688c..98233357b 100644 --- a/src/translations/en/us/en-us-componentTranslations.json +++ b/src/translations/en/us/en-us-componentTranslations.json @@ -61,5 +61,17 @@ }, "tasks": { "preparing": "Preparing your game!" + }, + "sentryForm": { + "buttonLabel": "Report a Bug", + "formTitle": "Report an Issue to ROAR", + "nameField": "Name", + "namePlaceholder": "Your name", + "emailField": "Email", + "emailPlaceholder": "your.email@example.org", + "descriptionField": "Description", + "descriptionPlaceholder": "Please describe the issue you encountered", + "submitButtonText": "Send Bug Report", + "cancelButtonText": "Cancel" } } From 33f23bb015a8a8a26f7d1e313693e6b48ddc705b Mon Sep 17 00:00:00 2001 From: Kyle Date: Tue, 19 Mar 2024 17:01:52 -0700 Subject: [PATCH 05/25] fix max width property --- src/assets/styles/root/base.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/assets/styles/root/base.scss b/src/assets/styles/root/base.scss index 32e5809cc..eb461b5bb 100644 --- a/src/assets/styles/root/base.scss +++ b/src/assets/styles/root/base.scss @@ -16,6 +16,7 @@ body { #sentry-feedback { --bottom: 1rem; --left: 1rem; + max-width: fit-content; } // Placeholder From 65587b93825c057de48e722d7f932c2625a91c35 Mon Sep 17 00:00:00 2001 From: Kyle Date: Wed, 20 Mar 2024 11:15:22 -0700 Subject: [PATCH 06/25] widget styling --- src/assets/styles/root/base.scss | 9 +++- src/sentry.js | 71 ++++++++++++++++---------------- 2 files changed, 44 insertions(+), 36 deletions(-) diff --git a/src/assets/styles/root/base.scss b/src/assets/styles/root/base.scss index eb461b5bb..d9fb5104b 100644 --- a/src/assets/styles/root/base.scss +++ b/src/assets/styles/root/base.scss @@ -14,9 +14,16 @@ body { // Sentry feedback widget #sentry-feedback { + max-width: fit-content; + opacity: 0.85; --bottom: 1rem; --left: 1rem; - max-width: fit-content; + --border: 1px solid var(--primary-color); + --background-hover: var(--red-100); + --submit-border: var(--primary-color); + --submit-background: var(--primary-color); + --submit-background-hover: var(--primary-color-hover); + --cancel-background-hover: var(--red-100); } // Placeholder diff --git a/src/sentry.js b/src/sentry.js index 9ea13f2fe..a5b484ff9 100644 --- a/src/sentry.js +++ b/src/sentry.js @@ -5,39 +5,40 @@ const regex = /https:\/\/roar-staging(--pr\d+-\w+)?\.web\.app/; export function initSentry(app) { // Only initialize Sentry in production - if (process.env.NODE_ENV === 'production') { - Sentry.init({ - app, - dsn: 'https://f15e3ff866394e93e00514b42113d03d@o4505913837420544.ingest.us.sentry.io/4506820782129152', - integrations: [ - Sentry.replayIntegration({ - maskAllText: true, - maskAllInputs: true, - }), - Sentry.browserTracingIntegration(), - captureConsoleIntegration({ - levels: ['error'], - }), - Sentry.feedbackIntegration({ - showBranding: false, - formTitle: 'Report an Issue to ROAR', - colorScheme: 'light', - themeLight: { - submitBackground: 'darkred', - submitBackgroundHover: 'red', - border: '2px solid darkred', - }, - }), - contextLinesIntegration(), - extraErrorDataIntegration(), - ], - attachStacktrace: true, - // Performance Monitoring - tracesSampleRate: 0.2, // Capture 20% of the transactions - tracePropagationTargets: ['localhost:5173', 'https://roar.education/**/*', regex], - // Session Replay - replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. - replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. - }); - } + // if (process.env.NODE_ENV === 'production') { + Sentry.init({ + app, + dsn: 'https://f15e3ff866394e93e00514b42113d03d@o4505913837420544.ingest.us.sentry.io/4506820782129152', + integrations: [ + Sentry.replayIntegration({ + maskAllText: true, + maskAllInputs: true, + }), + Sentry.browserTracingIntegration(), + captureConsoleIntegration({ + levels: ['error'], + }), + Sentry.feedbackIntegration({ + showBranding: false, + showName: false, + colorScheme: 'light', + formTitle: 'Report an Issue to ROAR', + buttonLabel: 'Report an Issue', + submitButtonLabel: 'Submit Issue Report', + namePlaceholder: 'Your Name (optional)', + emailPlaceholder: 'your.email@example.org (optional)', + messagePlaceholder: 'What is the issue? What did you want to experience instead? Thank you for sharing.', + }), + contextLinesIntegration(), + extraErrorDataIntegration(), + ], + attachStacktrace: true, + // Performance Monitoring + tracesSampleRate: 0.2, // Capture 20% of the transactions + tracePropagationTargets: ['localhost:5173', 'https://roar.education/**/*', regex], + // Session Replay + replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. + replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. + }); } +// } From 69f863301d216624a6f0ac9d3f0c18254ba30ed3 Mon Sep 17 00:00:00 2001 From: Kyle Date: Thu, 21 Mar 2024 09:11:18 -0700 Subject: [PATCH 07/25] standardize TaskComponent --- src/components/tasks/TaskFluency.vue | 16 ++++++++++----- src/components/tasks/TaskLetter.vue | 20 ++++++++++++------- src/components/tasks/TaskLevante.vue | 5 +++-- src/components/tasks/TaskMultichoice.vue | 20 +++++++++++++------ src/components/tasks/TaskPA.vue | 24 +++++++++++++++++------ src/components/tasks/TaskSRE.vue | 23 +++++++++++----------- src/components/tasks/TaskSWR.vue | 16 ++++++++++----- src/components/tasks/TaskVocab.vue | 25 +++++++++++++++++------- src/router/index.js | 7 +++++-- 9 files changed, 104 insertions(+), 52 deletions(-) diff --git a/src/components/tasks/TaskFluency.vue b/src/components/tasks/TaskFluency.vue index c923d0b5f..ea7b5c0ad 100644 --- a/src/components/tasks/TaskFluency.vue +++ b/src/components/tasks/TaskFluency.vue @@ -16,12 +16,13 @@ import _get from 'lodash/get'; import { fetchDocById } from '@/helpers/query/utils'; const props = defineProps({ - taskId: { type: String, required: true, default: 'fluency-arf' }, - language: { type: String, required: true, default: 'en' }, + taskId: { type: String, default: 'fluency-arf' }, + language: { type: String, default: 'en' }, }); let TaskLauncher; +const task = '@bdelab/roam-fluency'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -59,11 +60,11 @@ window.addEventListener( ); onMounted(async () => { + TaskLauncher = (await import(task)).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(); + await startTask(task); } - TaskLauncher = (await import('@bdelab/roam-fluency')).default; }); watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadingUserData]) => { @@ -72,7 +73,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask() { +async function startTask(_task) { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -86,6 +87,11 @@ async function startTask() { }; const gameParams = { ...appKit._taskInfo.variantParams }; + + if (TaskLauncher === undefined) { + TaskLauncher = (await import(_task)).default; + } + const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); gameStarted.value = true; diff --git a/src/components/tasks/TaskLetter.vue b/src/components/tasks/TaskLetter.vue index e8a510b2e..63932e58b 100644 --- a/src/components/tasks/TaskLetter.vue +++ b/src/components/tasks/TaskLetter.vue @@ -16,12 +16,13 @@ import _get from 'lodash/get'; import { fetchDocById } from '@/helpers/query/utils'; const props = defineProps({ - taskId: { type: String, required: true, default: 'letter' }, - language: { type: String, required: true, default: 'en' }, + taskId: { type: String, default: 'letter' }, + language: { type: String, default: 'en' }, }); -let RoarLetter; +let TaskLauncher; +const task = '@bdelab/roar-letter'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -59,11 +60,11 @@ window.addEventListener( ); onMounted(async () => { + TaskLauncher = (await import(task)).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(); + await startTask(task); } - RoarLetter = (await import('@bdelab/roar-letter')).default; }); watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadingUserData]) => { @@ -72,7 +73,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask() { +async function startTask(_task) { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -86,7 +87,12 @@ async function startTask() { }; const gameParams = { ...appKit._taskInfo.variantParams }; - const roarApp = new RoarLetter(appKit, gameParams, userParams, 'jspsych-target'); + + if (TaskLauncher === undefined) { + TaskLauncher = (await import(_task)).default; + } + + const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); gameStarted.value = true; await roarApp.run().then(async () => { diff --git a/src/components/tasks/TaskLevante.vue b/src/components/tasks/TaskLevante.vue index aa47cd45b..765c7c8b5 100644 --- a/src/components/tasks/TaskLevante.vue +++ b/src/components/tasks/TaskLevante.vue @@ -16,11 +16,12 @@ import { useGameStore } from '@/store/game'; import _get from 'lodash/get'; import { fetchDocById } from '@/helpers/query/utils'; const props = defineProps({ - taskId: { type: String, required: true, default: 'egma-math' }, + taskId: { type: String, default: 'egma-math' }, }); let TaskLauncher; +const task = 'core-tasks'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -53,11 +54,11 @@ window.addEventListener( { once: true }, ); onMounted(async () => { + TaskLauncher = (await import(task)).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { await startTask(); } - TaskLauncher = (await import('core-tasks')).default; }); watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadingUserData]) => { if (newFirekitInitValue && !newLoadingUserData) await startTask(); diff --git a/src/components/tasks/TaskMultichoice.vue b/src/components/tasks/TaskMultichoice.vue index d0eaf07a0..8ab88739b 100644 --- a/src/components/tasks/TaskMultichoice.vue +++ b/src/components/tasks/TaskMultichoice.vue @@ -16,11 +16,13 @@ import _get from 'lodash/get'; import { fetchDocById } from '@/helpers/query/utils'; const props = defineProps({ - taskId: { type: String, required: true, default: 'multichoice' }, + taskId: { type: String, default: 'multichoice' }, + language: { type: String, default: 'en' }, }); -let RoarMultichoice; +let TaskLauncher; +const task = '@bdelab/roar-multichoice'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -58,11 +60,11 @@ window.addEventListener( ); onMounted(async () => { + TaskLauncher = (await import(task)).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(); + await startTask(task); } - RoarMultichoice = (await import('@bdelab/roar-multichoice')).default; }); watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadingUserData]) => { @@ -71,7 +73,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask() { +async function startTask(_task) { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -81,10 +83,16 @@ async function startTask() { grade: _get(userData.value, 'studentData.grade'), birthMonth: userDateObj.getMonth() + 1, birthYear: userDateObj.getFullYear(), + language: props.language, }; const gameParams = { ...appKit._taskInfo.variantParams }; - const roarApp = new RoarMultichoice(appKit, gameParams, userParams, 'jspsych-target'); + + if (TaskLauncher === undefined) { + TaskLauncher = (await import(_task)).default; + } + + const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); gameStarted.value = true; await roarApp.run().then(async () => { diff --git a/src/components/tasks/TaskPA.vue b/src/components/tasks/TaskPA.vue index 2c067fd8b..310a4670a 100644 --- a/src/components/tasks/TaskPA.vue +++ b/src/components/tasks/TaskPA.vue @@ -15,9 +15,15 @@ import { useGameStore } from '@/store/game'; import _get from 'lodash/get'; import { fetchDocById } from '@/helpers/query/utils'; -let RoarPA; +const props = defineProps({ + taskId: { type: String, default: 'pa' }, + language: { type: String, default: 'en' }, +}); + +let TaskLauncher; -const taskId = 'pa'; +const task = '@bdelab/roar-pa'; +const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); const authStore = useAuthStore(); @@ -54,11 +60,11 @@ window.addEventListener( ); onMounted(async () => { + TaskLauncher = (await import(task)).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(); + await startTask(task); } - RoarPA = (await import('@bdelab/roar-pa')).default; }); watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadingUserData]) => { @@ -67,7 +73,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask() { +async function startTask(_task) { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -77,10 +83,16 @@ async function startTask() { grade: _get(userData.value, 'studentData.grade'), birthMonth: userDateObj.getMonth() + 1, birthYear: userDateObj.getFullYear(), + language: props.language, }; const gameParams = { ...appKit._taskInfo.variantParams }; - const roarApp = new RoarPA(appKit, gameParams, userParams, 'jspsych-target'); + + if (TaskLauncher === undefined) { + TaskLauncher = (await import(_task)).default; + } + + const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); gameStarted.value = true; await roarApp.run().then(async () => { diff --git a/src/components/tasks/TaskSRE.vue b/src/components/tasks/TaskSRE.vue index 70542426d..acfb436be 100644 --- a/src/components/tasks/TaskSRE.vue +++ b/src/components/tasks/TaskSRE.vue @@ -20,8 +20,9 @@ const props = defineProps({ language: { type: String, required: true, default: 'en' }, }); -let RoarSRE; +let TaskLauncher; +const task = '@bdelab/roar-sre'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -59,11 +60,11 @@ window.addEventListener( ); onMounted(async () => { + TaskLauncher = (await import(task)).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(); + await startTask(task); } - RoarSRE = (await import('@bdelab/roar-sre')).default; }); watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadingUserData]) => { @@ -72,7 +73,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask() { +async function startTask(_task) { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -86,22 +87,20 @@ async function startTask() { }; const gameParams = { ...appKit._taskInfo.variantParams }; - const roarApp = new RoarSRE(appKit, gameParams, userParams, 'jspsych-target'); + + if (TaskLauncher === undefined) { + TaskLauncher = (await import(_task)).default; + } + + const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); gameStarted.value = true; await roarApp.run().then(async () => { - console.log('Finished assessment'); // Handle any post-game actions. await authStore.completeAssessment(selectedAdmin.value.id, taskId); - console.log('Finished authStore.completeAssessment'); - // Navigate to home, but first set the refresh flag to true. gameStore.requireHomeRefresh(); - - console.log('Finished gameStore.requireHomeRefresh'); - - console.log('router.push Home'); router.push({ name: 'Home' }); }); } diff --git a/src/components/tasks/TaskSWR.vue b/src/components/tasks/TaskSWR.vue index 796cc85ec..7892506f8 100644 --- a/src/components/tasks/TaskSWR.vue +++ b/src/components/tasks/TaskSWR.vue @@ -20,8 +20,9 @@ const props = defineProps({ language: { type: String, required: true, default: 'en' }, }); -let RoarSWR; +let TaskLauncher; +const task = '@bdelab/roar-swr'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -59,11 +60,11 @@ window.addEventListener( ); onMounted(async () => { + TaskLauncher = (await import(task)).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(); + await startTask(task); } - RoarSWR = (await import('@bdelab/roar-swr')).default; }); watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadingUserData]) => { @@ -72,7 +73,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask() { +async function startTask(_task) { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -86,7 +87,12 @@ async function startTask() { }; const gameParams = { ...appKit._taskInfo.variantParams }; - const roarApp = new RoarSWR(appKit, gameParams, userParams, 'jspsych-target'); + + if (TaskLauncher === undefined) { + TaskLauncher = (await import(_task)).default; + } + + const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); gameStarted.value = true; await roarApp.run().then(async () => { diff --git a/src/components/tasks/TaskVocab.vue b/src/components/tasks/TaskVocab.vue index e97bd4a94..ae137967d 100644 --- a/src/components/tasks/TaskVocab.vue +++ b/src/components/tasks/TaskVocab.vue @@ -15,9 +15,15 @@ import { useGameStore } from '@/store/game'; import _get from 'lodash/get'; import { fetchDocById } from '@/helpers/query/utils'; -let RoarVocab; +const props = defineProps({ + taskId: { type: String, required: true, default: 'vocab' }, + language: { type: String, required: true, default: 'en' }, +}); + +let TaskLauncher; -const taskId = 'vocab'; +const task = '@bdelab/roar-vocab'; +const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); const authStore = useAuthStore(); @@ -54,12 +60,11 @@ window.addEventListener( ); onMounted(async () => { + TaskLauncher = (await import(task)).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(); + await startTask(task); } - // Dynamically import the RoarVocab module to reduce chunk size. - RoarVocab = (await import('@bdelab/roar-vocab')).default; }); watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadingUserData]) => { @@ -68,7 +73,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask() { +async function startTask(_task) { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -78,10 +83,16 @@ async function startTask() { grade: _get(userData.value, 'studentData.grade'), birthMonth: userDateObj.getMonth() + 1, birthYear: userDateObj.getFullYear(), + language: props.language, }; const gameParams = { ...appKit._taskInfo.variantParams }; - const roarApp = new RoarVocab(appKit, gameParams, userParams, 'jspsych-target'); + + if (TaskLauncher === undefined) { + TaskLauncher = (await import(_task)).default; + } + + const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); gameStarted.value = true; await roarApp.run().then(async () => { diff --git a/src/router/index.js b/src/router/index.js index 8defd5c49..1df1ead7c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -55,6 +55,7 @@ const routes = [ path: '/game/pa', name: 'PA', component: () => import('../components/tasks/TaskPA.vue'), + props: { taskId: 'pa', language: 'en' }, meta: { pageTitle: 'PA' }, }, { @@ -89,26 +90,28 @@ const routes = [ path: '/game/multichoice', name: 'Multichoice', component: () => import('../components/tasks/TaskMultichoice.vue'), + props: { taskId: 'multichoice', language: 'en' }, meta: { pageTitle: 'Multichoice' }, }, { path: '/game/morphology', name: 'Morphology', component: () => import('../components/tasks/TaskMultichoice.vue'), - props: { taskId: 'morphology' }, + props: { taskId: 'morphology', language: 'en' }, meta: { pageTitle: 'Morphology' }, }, { path: '/game/cva', name: 'Cva', component: () => import('../components/tasks/TaskMultichoice.vue'), - props: { taskId: 'cva' }, + props: { taskId: 'cva', language: 'en' }, meta: { pageTitle: 'CVA' }, }, { path: '/game/vocab', name: 'Vocab', component: () => import('../components/tasks/TaskVocab.vue'), + props: { taskId: 'vocab', language: 'en' }, meta: { pageTitle: 'Vocab' }, }, { From 87f3ea0453b1ec8c084ced453c8702d8dce6a6d4 Mon Sep 17 00:00:00 2001 From: Kyle Date: Thu, 21 Mar 2024 09:48:01 -0700 Subject: [PATCH 08/25] add translations to Sentry form --- src/sentry.js | 16 ++++++++++------ .../en/en-componentTranslations.json | 10 ++++++++++ .../en/us/en-us-componentTranslations.json | 16 +++++++--------- .../es/co/es-co-componentTranslations.json | 10 ++++++++++ .../es/es-componentTranslations.json | 10 ++++++++++ 5 files changed, 47 insertions(+), 15 deletions(-) diff --git a/src/sentry.js b/src/sentry.js index a5b484ff9..7dc426a9e 100644 --- a/src/sentry.js +++ b/src/sentry.js @@ -1,5 +1,6 @@ import * as Sentry from '@sentry/vue'; import { captureConsoleIntegration, contextLinesIntegration, extraErrorDataIntegration } from '@sentry/integrations'; +import { i18n } from './translations/i18n'; const regex = /https:\/\/roar-staging(--pr\d+-\w+)?\.web\.app/; @@ -21,13 +22,16 @@ export function initSentry(app) { Sentry.feedbackIntegration({ showBranding: false, showName: false, + showEmail: false, colorScheme: 'light', - formTitle: 'Report an Issue to ROAR', - buttonLabel: 'Report an Issue', - submitButtonLabel: 'Submit Issue Report', - namePlaceholder: 'Your Name (optional)', - emailPlaceholder: 'your.email@example.org (optional)', - messagePlaceholder: 'What is the issue? What did you want to experience instead? Thank you for sharing.', + formTitle: i18n.global.t('sentryForm.formTitle'), + buttonLabel: i18n.global.t('sentryForm.buttonLabel'), + cancelButtonLabel: i18n.global.t('sentryForm.cancelButtonLabel'), + submitButtonLabel: i18n.global.t('sentryForm.submitButtonLabel'), + namePlaceholder: i18n.global.t('sentryForm.namePlaceholder'), + emailPlaceholder: i18n.global.t('sentryForm.emailPlaceholder'), + messageLabel: i18n.global.t('sentryForm.messageLabel'), + messagePlaceholder: i18n.global.t('sentryForm.messagePlaceholder'), }), contextLinesIntegration(), extraErrorDataIntegration(), diff --git a/src/translations/en/en-componentTranslations.json b/src/translations/en/en-componentTranslations.json index c1396688c..24edb6e19 100644 --- a/src/translations/en/en-componentTranslations.json +++ b/src/translations/en/en-componentTranslations.json @@ -61,5 +61,15 @@ }, "tasks": { "preparing": "Preparing your game!" + }, + "sentryForm": { + "formTitle": "Report an Issue to ROAR", + "buttonLabel": "Report an Issue", + "submitButtonLabel": "Submit Issue Report", + "cancelButtonLabel": "Cancel", + "namePlaceholder": "Your Name (optional)", + "emailPlaceholder": "your.email@example.org (optional)", + "messageLabel": "Description", + "messagePlaceholder": "What is the issue? What did you want to experience instead? Thank you for sharing." } } diff --git a/src/translations/en/us/en-us-componentTranslations.json b/src/translations/en/us/en-us-componentTranslations.json index 98233357b..24edb6e19 100644 --- a/src/translations/en/us/en-us-componentTranslations.json +++ b/src/translations/en/us/en-us-componentTranslations.json @@ -63,15 +63,13 @@ "preparing": "Preparing your game!" }, "sentryForm": { - "buttonLabel": "Report a Bug", "formTitle": "Report an Issue to ROAR", - "nameField": "Name", - "namePlaceholder": "Your name", - "emailField": "Email", - "emailPlaceholder": "your.email@example.org", - "descriptionField": "Description", - "descriptionPlaceholder": "Please describe the issue you encountered", - "submitButtonText": "Send Bug Report", - "cancelButtonText": "Cancel" + "buttonLabel": "Report an Issue", + "submitButtonLabel": "Submit Issue Report", + "cancelButtonLabel": "Cancel", + "namePlaceholder": "Your Name (optional)", + "emailPlaceholder": "your.email@example.org (optional)", + "messageLabel": "Description", + "messagePlaceholder": "What is the issue? What did you want to experience instead? Thank you for sharing." } } diff --git a/src/translations/es/co/es-co-componentTranslations.json b/src/translations/es/co/es-co-componentTranslations.json index 6a9048ce0..abeebf850 100644 --- a/src/translations/es/co/es-co-componentTranslations.json +++ b/src/translations/es/co/es-co-componentTranslations.json @@ -62,5 +62,15 @@ }, "tasks": { "preparing": "¡Preparando tu juego!" + }, + "sentryForm": { + "formTitle": "Reportar un problema a ROAR", + "buttonLabel": "Reportar un problema", + "submitButtonLabel": "Enviar informe de problema", + "cancelButtonLabel": "Cancelar", + "namePlaceholder": "Tu nombre (opcional)", + "emailPlaceholder": "tu.email@example.org (opcional)", + "messageLabel": "Descripción", + "messagePlaceholder": "¿Cuál es el problema? ¿Qué querías experimentar en su lugar? Gracias por compartir." } } diff --git a/src/translations/es/es-componentTranslations.json b/src/translations/es/es-componentTranslations.json index 1d0e7dd22..dfdfb98c3 100644 --- a/src/translations/es/es-componentTranslations.json +++ b/src/translations/es/es-componentTranslations.json @@ -62,5 +62,15 @@ }, "tasks": { "preparing": "¡Preparando tu juego!" + }, + "sentryForm": { + "formTitle": "Reportar un problema a ROAR", + "buttonLabel": "Reportar un problema", + "submitButtonLabel": "Enviar informe de problema", + "cancelButtonLabel": "Cancelar", + "namePlaceholder": "Tu nombre (opcional)", + "emailPlaceholder": "tu.email@example.org (opcional)", + "messageLabel": "Descripción", + "messagePlaceholder": "¿Cuál es el problema? ¿Qué querías experimentar en su lugar? Gracias por compartir." } } From eeda2f0ad6a4a8f82f204b6e0d83c7e91be6388d Mon Sep 17 00:00:00 2001 From: Kyle Date: Thu, 21 Mar 2024 12:42:07 -0700 Subject: [PATCH 09/25] revert task component changes; format --- src/components/tasks/TaskFluency.vue | 9 ++- src/components/tasks/TaskLetter.vue | 9 ++- src/components/tasks/TaskLevante.vue | 8 ++- src/components/tasks/TaskMultichoice.vue | 9 ++- src/components/tasks/TaskPA.vue | 9 ++- src/components/tasks/TaskSRE.vue | 9 ++- src/components/tasks/TaskSWR.vue | 9 ++- src/components/tasks/TaskVocab.vue | 9 ++- src/sentry.js | 78 ++++++++++++------------ 9 files changed, 73 insertions(+), 76 deletions(-) diff --git a/src/components/tasks/TaskFluency.vue b/src/components/tasks/TaskFluency.vue index ea7b5c0ad..214b833e6 100644 --- a/src/components/tasks/TaskFluency.vue +++ b/src/components/tasks/TaskFluency.vue @@ -22,7 +22,6 @@ const props = defineProps({ let TaskLauncher; -const task = '@bdelab/roam-fluency'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -60,10 +59,10 @@ window.addEventListener( ); onMounted(async () => { - TaskLauncher = (await import(task)).default; + TaskLauncher = (await import('@bdelab/roam-fluency')).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(task); + await startTask(); } }); @@ -73,7 +72,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask(_task) { +async function startTask() { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -89,7 +88,7 @@ async function startTask(_task) { const gameParams = { ...appKit._taskInfo.variantParams }; if (TaskLauncher === undefined) { - TaskLauncher = (await import(_task)).default; + TaskLauncher = (await import('@bdelab/roam-fluency')).default; } const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); diff --git a/src/components/tasks/TaskLetter.vue b/src/components/tasks/TaskLetter.vue index 63932e58b..4cc963621 100644 --- a/src/components/tasks/TaskLetter.vue +++ b/src/components/tasks/TaskLetter.vue @@ -22,7 +22,6 @@ const props = defineProps({ let TaskLauncher; -const task = '@bdelab/roar-letter'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -60,10 +59,10 @@ window.addEventListener( ); onMounted(async () => { - TaskLauncher = (await import(task)).default; + TaskLauncher = (await import('@bdelab/roar-letter')).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(task); + await startTask(); } }); @@ -73,7 +72,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask(_task) { +async function startTask() { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -89,7 +88,7 @@ async function startTask(_task) { const gameParams = { ...appKit._taskInfo.variantParams }; if (TaskLauncher === undefined) { - TaskLauncher = (await import(_task)).default; + TaskLauncher = (await import('@bdelab/roar-letter')).default; } const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); diff --git a/src/components/tasks/TaskLevante.vue b/src/components/tasks/TaskLevante.vue index 765c7c8b5..f0ff06741 100644 --- a/src/components/tasks/TaskLevante.vue +++ b/src/components/tasks/TaskLevante.vue @@ -21,7 +21,6 @@ const props = defineProps({ let TaskLauncher; -const task = 'core-tasks'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -54,7 +53,7 @@ window.addEventListener( { once: true }, ); onMounted(async () => { - TaskLauncher = (await import(task)).default; + TaskLauncher = (await import('core-tasks')).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { await startTask(); @@ -74,6 +73,11 @@ async function startTask() { birthYear: userDateObj.getFullYear(), }; const gameParams = { ...appKit._taskInfo.variantParams }; + + if (TaskLauncher === undefined) { + TaskLauncher = (await import('core-tasks')).default; + } + const levanteTask = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); gameStarted.value = true; await levanteTask.run().then(async () => { diff --git a/src/components/tasks/TaskMultichoice.vue b/src/components/tasks/TaskMultichoice.vue index 8ab88739b..28fcd0962 100644 --- a/src/components/tasks/TaskMultichoice.vue +++ b/src/components/tasks/TaskMultichoice.vue @@ -22,7 +22,6 @@ const props = defineProps({ let TaskLauncher; -const task = '@bdelab/roar-multichoice'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -60,10 +59,10 @@ window.addEventListener( ); onMounted(async () => { - TaskLauncher = (await import(task)).default; + TaskLauncher = (await import('@bdelab/roar-multichoice')).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(task); + await startTask(); } }); @@ -73,7 +72,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask(_task) { +async function startTask() { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -89,7 +88,7 @@ async function startTask(_task) { const gameParams = { ...appKit._taskInfo.variantParams }; if (TaskLauncher === undefined) { - TaskLauncher = (await import(_task)).default; + TaskLauncher = (await import('@bdelab/roar-multichoice')).default; } const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); diff --git a/src/components/tasks/TaskPA.vue b/src/components/tasks/TaskPA.vue index 310a4670a..c6c2b1320 100644 --- a/src/components/tasks/TaskPA.vue +++ b/src/components/tasks/TaskPA.vue @@ -22,7 +22,6 @@ const props = defineProps({ let TaskLauncher; -const task = '@bdelab/roar-pa'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -60,10 +59,10 @@ window.addEventListener( ); onMounted(async () => { - TaskLauncher = (await import(task)).default; + TaskLauncher = (await import('@bdelab/roar-pa')).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(task); + await startTask(); } }); @@ -73,7 +72,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask(_task) { +async function startTask() { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -89,7 +88,7 @@ async function startTask(_task) { const gameParams = { ...appKit._taskInfo.variantParams }; if (TaskLauncher === undefined) { - TaskLauncher = (await import(_task)).default; + TaskLauncher = (await import('@bdelab/roar-pa')).default; } const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); diff --git a/src/components/tasks/TaskSRE.vue b/src/components/tasks/TaskSRE.vue index acfb436be..c9397486f 100644 --- a/src/components/tasks/TaskSRE.vue +++ b/src/components/tasks/TaskSRE.vue @@ -22,7 +22,6 @@ const props = defineProps({ let TaskLauncher; -const task = '@bdelab/roar-sre'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -60,10 +59,10 @@ window.addEventListener( ); onMounted(async () => { - TaskLauncher = (await import(task)).default; + TaskLauncher = (await import('@bdelab/roar-sre')).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(task); + await startTask(); } }); @@ -73,7 +72,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask(_task) { +async function startTask() { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -89,7 +88,7 @@ async function startTask(_task) { const gameParams = { ...appKit._taskInfo.variantParams }; if (TaskLauncher === undefined) { - TaskLauncher = (await import(_task)).default; + TaskLauncher = (await import('@bdelab/roar-sre')).default; } const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); diff --git a/src/components/tasks/TaskSWR.vue b/src/components/tasks/TaskSWR.vue index 7892506f8..776512d50 100644 --- a/src/components/tasks/TaskSWR.vue +++ b/src/components/tasks/TaskSWR.vue @@ -22,7 +22,6 @@ const props = defineProps({ let TaskLauncher; -const task = '@bdelab/roar-swr'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -60,10 +59,10 @@ window.addEventListener( ); onMounted(async () => { - TaskLauncher = (await import(task)).default; + TaskLauncher = (await import('@bdelab/roar-swr')).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(task); + await startTask(); } }); @@ -73,7 +72,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask(_task) { +async function startTask() { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -89,7 +88,7 @@ async function startTask(_task) { const gameParams = { ...appKit._taskInfo.variantParams }; if (TaskLauncher === undefined) { - TaskLauncher = (await import(_task)).default; + TaskLauncher = (await import('@bdelab/roar-swr')).default; } const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); diff --git a/src/components/tasks/TaskVocab.vue b/src/components/tasks/TaskVocab.vue index ae137967d..dc7508373 100644 --- a/src/components/tasks/TaskVocab.vue +++ b/src/components/tasks/TaskVocab.vue @@ -22,7 +22,6 @@ const props = defineProps({ let TaskLauncher; -const task = '@bdelab/roar-vocab'; const taskId = props.taskId; const router = useRouter(); const gameStarted = ref(false); @@ -60,10 +59,10 @@ window.addEventListener( ); onMounted(async () => { - TaskLauncher = (await import(task)).default; + TaskLauncher = (await import('@bdelab/roar-vocab')).default; if (roarfirekit.value.restConfig) init(); if (isFirekitInit.value && !isLoadingUserData.value) { - await startTask(task); + await startTask(); } }); @@ -73,7 +72,7 @@ watch([isFirekitInit, isLoadingUserData], async ([newFirekitInitValue, newLoadin const { selectedAdmin } = storeToRefs(gameStore); -async function startTask(_task) { +async function startTask() { const appKit = await authStore.roarfirekit.startAssessment(selectedAdmin.value.id, taskId); const userDob = _get(userData.value, 'studentData.dob'); @@ -89,7 +88,7 @@ async function startTask(_task) { const gameParams = { ...appKit._taskInfo.variantParams }; if (TaskLauncher === undefined) { - TaskLauncher = (await import(_task)).default; + TaskLauncher = (await import('@bdelab/roar-vocab')).default; } const roarApp = new TaskLauncher(appKit, gameParams, userParams, 'jspsych-target'); diff --git a/src/sentry.js b/src/sentry.js index 7dc426a9e..c4a9b2055 100644 --- a/src/sentry.js +++ b/src/sentry.js @@ -6,43 +6,43 @@ const regex = /https:\/\/roar-staging(--pr\d+-\w+)?\.web\.app/; export function initSentry(app) { // Only initialize Sentry in production - // if (process.env.NODE_ENV === 'production') { - Sentry.init({ - app, - dsn: 'https://f15e3ff866394e93e00514b42113d03d@o4505913837420544.ingest.us.sentry.io/4506820782129152', - integrations: [ - Sentry.replayIntegration({ - maskAllText: true, - maskAllInputs: true, - }), - Sentry.browserTracingIntegration(), - captureConsoleIntegration({ - levels: ['error'], - }), - Sentry.feedbackIntegration({ - showBranding: false, - showName: false, - showEmail: false, - colorScheme: 'light', - formTitle: i18n.global.t('sentryForm.formTitle'), - buttonLabel: i18n.global.t('sentryForm.buttonLabel'), - cancelButtonLabel: i18n.global.t('sentryForm.cancelButtonLabel'), - submitButtonLabel: i18n.global.t('sentryForm.submitButtonLabel'), - namePlaceholder: i18n.global.t('sentryForm.namePlaceholder'), - emailPlaceholder: i18n.global.t('sentryForm.emailPlaceholder'), - messageLabel: i18n.global.t('sentryForm.messageLabel'), - messagePlaceholder: i18n.global.t('sentryForm.messagePlaceholder'), - }), - contextLinesIntegration(), - extraErrorDataIntegration(), - ], - attachStacktrace: true, - // Performance Monitoring - tracesSampleRate: 0.2, // Capture 20% of the transactions - tracePropagationTargets: ['localhost:5173', 'https://roar.education/**/*', regex], - // Session Replay - replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. - replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. - }); + if (process.env.NODE_ENV === 'production') { + Sentry.init({ + app, + dsn: 'https://f15e3ff866394e93e00514b42113d03d@o4505913837420544.ingest.us.sentry.io/4506820782129152', + integrations: [ + Sentry.replayIntegration({ + maskAllText: true, + maskAllInputs: true, + }), + Sentry.browserTracingIntegration(), + captureConsoleIntegration({ + levels: ['error'], + }), + Sentry.feedbackIntegration({ + showBranding: false, + showName: false, + showEmail: false, + colorScheme: 'light', + formTitle: i18n.global.t('sentryForm.formTitle'), + buttonLabel: i18n.global.t('sentryForm.buttonLabel'), + cancelButtonLabel: i18n.global.t('sentryForm.cancelButtonLabel'), + submitButtonLabel: i18n.global.t('sentryForm.submitButtonLabel'), + namePlaceholder: i18n.global.t('sentryForm.namePlaceholder'), + emailPlaceholder: i18n.global.t('sentryForm.emailPlaceholder'), + messageLabel: i18n.global.t('sentryForm.messageLabel'), + messagePlaceholder: i18n.global.t('sentryForm.messagePlaceholder'), + }), + contextLinesIntegration(), + extraErrorDataIntegration(), + ], + attachStacktrace: true, + // Performance Monitoring + tracesSampleRate: 0.2, // Capture 20% of the transactions + tracePropagationTargets: ['localhost:5173', 'https://roar.education/**/*', regex], + // Session Replay + replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. + replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. + }); + } } -// } From 9cf8c56dfd764093f7e98b9e2c43591db2b13857 Mon Sep 17 00:00:00 2001 From: Kyle Date: Thu, 21 Mar 2024 12:53:47 -0700 Subject: [PATCH 10/25] fix tests --- .../default-tests/viewIndividualReport.cy.js | 24 +++++++++++-------- src/pages/IndividualReport.vue | 2 +- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js b/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js index ab98b2b21..c21369e8b 100644 --- a/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js +++ b/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js @@ -32,21 +32,25 @@ function checkAssignmentColumns() { }); } +function checkIndividualScoreReports() { + cy.get('button', { timeout: 3 * timeout }) + .contains('Report') + .click(); + cy.get('div', { timeout: 3 * timeout }).contains('Individual Score Report'); + cy.get('button', { timeout: 3 * timeout }) + .contains('Expand All Sections') + .click(); + cy.get('button', { timeout: 3 * timeout }).contains('Export to PDF'); + cy.get('div', { timeout: 3 * timeout }).contains('The ROAR assessments return 3 kinds of scores'); +} + describe('The partner admin can view score reports for a given administration.', () => { it('Selects an administration and views its score report.', () => { checkUrl(); cy.getAdministrationCard(testPartnerAdministrationName); clickScoreButton(); cy.checkUserList(testUserList); - checkAssignmentColumns(testAssignments); - cy.get('button', { timeout: 3 * timeout }) - .contains('Report') - .click(); - cy.get('div', { timeout: 3 * timeout }).contains('Individual Score Report'); - cy.get('button', { timeout: 3 * timeout }) - .contains('Expand All Sections') - .click(); - cy.get('button', { timeout: 3 * timeout }).contains('Export to PDF'); - cy.get('div', { timeout: 3 * timeout }).contains('The ROAR assessements return 3 kinds of scores'); + checkAssignmentColumns(); + checkIndividualScoreReports(); }); }); diff --git a/src/pages/IndividualReport.vue b/src/pages/IndividualReport.vue index adabe3c3a..070750028 100644 --- a/src/pages/IndividualReport.vue +++ b/src/pages/IndividualReport.vue @@ -84,7 +84,7 @@
-
The ROAR assessements return 3 kinds of scores:
+
The ROAR assessments return 3 kinds of scores:
  • Raw Score: A score that captures your students' general performance on the assessment, such as From ca1a279bb6cd8db68d1b7d3a6c5d23dea2e0aa39 Mon Sep 17 00:00:00 2001 From: Kyle Date: Thu, 21 Mar 2024 12:56:54 -0700 Subject: [PATCH 11/25] update function parameter --- .../partner-admin/default-tests/viewIndividualReport.cy.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js b/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js index 083da0702..a3d653b63 100644 --- a/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js +++ b/cypress/e2e/partner-admin/default-tests/viewIndividualReport.cy.js @@ -22,11 +22,11 @@ function clickScoreButton() { ); } -function checkAssignmentColumns(testAssignments) { +function checkAssignmentColumns(assignments) { cy.get('[data-cy="roar-data-table"] thead th').then(($header) => { const tableHeaders = $header.map((index, elem) => Cypress.$(elem).text()).get(); - testAssignments.forEach((assignment) => { + assignments.forEach((assignment) => { expect(tableHeaders).to.include(assignment); }); }); From 4611a0a089c060d624d18430e7458b58adb80a58 Mon Sep 17 00:00:00 2001 From: Kyle Date: Thu, 21 Mar 2024 13:13:09 -0700 Subject: [PATCH 12/25] format --- src/components/VariantCard.vue | 2 +- src/components/auth/SignIn.vue | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/VariantCard.vue b/src/components/VariantCard.vue index b76f945b6..edcca1989 100644 --- a/src/components/VariantCard.vue +++ b/src/components/VariantCard.vue @@ -69,8 +69,8 @@
diff --git a/src/components/auth/SignIn.vue b/src/components/auth/SignIn.vue index 16104c107..a11813d14 100644 --- a/src/components/auth/SignIn.vue +++ b/src/components/auth/SignIn.vue @@ -6,12 +6,12 @@ {{ $t('authSignIn.incorrectEmailOrPassword') }} @@ -27,8 +27,6 @@