Merged in feature/strengthen_lint_rules (pull request #77)
Strengthen lint rules * Strengthen lint rules * Fix linting errors # Conflicts: # client/src/components/learningPath/LearningPathDiagram.vue # client/src/components/learningPath/LearningPathViewVertical.vue * Add no-required-prop-with-default rule # Conflicts: # client/src/components/learningPath/LearningPathDiagram.vue * Fix typechecks * Reformat eslintrc
This commit is contained in:
parent
2e974dc323
commit
f3c599c344
|
|
@ -1,10 +1,13 @@
|
||||||
/* eslint-env node */
|
/* eslint-env node */
|
||||||
|
/* Vue ESLint Rules: https://eslint.vuejs.org/rules/ */
|
||||||
|
/* TS ESLint Rules: https://typescript-eslint.io/rules/ */
|
||||||
require("@rushstack/eslint-patch/modern-module-resolution");
|
require("@rushstack/eslint-patch/modern-module-resolution");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
root: true,
|
root: true,
|
||||||
|
parser: "vue-eslint-parser",
|
||||||
extends: [
|
extends: [
|
||||||
"plugin:vue/vue3-recommended",
|
|
||||||
"eslint:recommended",
|
"eslint:recommended",
|
||||||
|
"plugin:vue/vue3-recommended",
|
||||||
"@vue/eslint-config-typescript/recommended",
|
"@vue/eslint-config-typescript/recommended",
|
||||||
"@vue/eslint-config-prettier",
|
"@vue/eslint-config-prettier",
|
||||||
"plugin:storybook/recommended",
|
"plugin:storybook/recommended",
|
||||||
|
|
@ -14,8 +17,12 @@ module.exports = {
|
||||||
},
|
},
|
||||||
ignorePatterns: ["versionize.js", "tailwind.config.js", "postcss.config.js"],
|
ignorePatterns: ["versionize.js", "tailwind.config.js", "postcss.config.js"],
|
||||||
rules: {
|
rules: {
|
||||||
"@typescript-eslint/no-unused-vars": ["warn"],
|
"@typescript-eslint/ban-ts-comment": "warn",
|
||||||
"@typescript-eslint/ban-ts-comment": ["warn"],
|
"@typescript-eslint/no-explicit-any": "warn",
|
||||||
"prefer-const": ["warn"],
|
"@typescript-eslint/no-unused-vars": "error",
|
||||||
|
"@typescript-eslint/no-non-null-asserted-optional-chain": "error",
|
||||||
|
"@typescript-eslint/no-this-alias": "error",
|
||||||
|
"vue/no-v-html": "error",
|
||||||
|
"vue/no-required-prop-with-default": "error",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -82,9 +82,10 @@
|
||||||
"storybook-tailwind-foundations": "^1.1.2",
|
"storybook-tailwind-foundations": "^1.1.2",
|
||||||
"storybook-vue3-router": "^3.0.0-next.1",
|
"storybook-vue3-router": "^3.0.0-next.1",
|
||||||
"tailwindcss": "^3.1.8",
|
"tailwindcss": "^3.1.8",
|
||||||
"typescript": "^5.0.3",
|
"typescript": "^5.0.4",
|
||||||
"vite": "^4.2.1",
|
"vite": "^4.2.1",
|
||||||
"vitest": "^0.29.8",
|
"vitest": "^0.29.8",
|
||||||
|
"vue-eslint-parser": "^9.2.1",
|
||||||
"vue-tsc": "^1.0.9"
|
"vue-tsc": "^1.0.9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -6708,15 +6709,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.5.tgz",
|
||||||
"integrity": "sha512-itag0qpN6q2UMM6Xgk6xoHa0D0/P+M17THnr4SVgqn9Rgam5k/He33MA7/D7QoJcdMxHFyX7U9imaBonAX/6qA==",
|
"integrity": "sha512-feA9xbVRWJZor+AnLNAr7A8JRWeZqHUf4T9tlP+TN04b05pFVhO5eN7/O93Y/1OUlLMHKbnJisgDURs/qvtqdg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/regexpp": "^4.4.0",
|
"@eslint-community/regexpp": "^4.4.0",
|
||||||
"@typescript-eslint/scope-manager": "5.57.0",
|
"@typescript-eslint/scope-manager": "5.59.5",
|
||||||
"@typescript-eslint/type-utils": "5.57.0",
|
"@typescript-eslint/type-utils": "5.59.5",
|
||||||
"@typescript-eslint/utils": "5.57.0",
|
"@typescript-eslint/utils": "5.59.5",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"grapheme-splitter": "^1.0.4",
|
"grapheme-splitter": "^1.0.4",
|
||||||
"ignore": "^5.2.0",
|
"ignore": "^5.2.0",
|
||||||
|
|
@ -6775,14 +6776,14 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/parser": {
|
"node_modules/@typescript-eslint/parser": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.5.tgz",
|
||||||
"integrity": "sha512-orrduvpWYkgLCyAdNtR1QIWovcNZlEm6yL8nwH/eTxWLd8gsP+25pdLHYzL2QdkqrieaDwLpytHqycncv0woUQ==",
|
"integrity": "sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "5.57.0",
|
"@typescript-eslint/scope-manager": "5.59.5",
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"@typescript-eslint/typescript-estree": "5.57.0",
|
"@typescript-eslint/typescript-estree": "5.59.5",
|
||||||
"debug": "^4.3.4"
|
"debug": "^4.3.4"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
@ -6802,13 +6803,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/scope-manager": {
|
"node_modules/@typescript-eslint/scope-manager": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.5.tgz",
|
||||||
"integrity": "sha512-NANBNOQvllPlizl9LatX8+MHi7bx7WGIWYjPHDmQe5Si/0YEYfxSljJpoTyTWFTgRy3X8gLYSE4xQ2U+aCozSw==",
|
"integrity": "sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"@typescript-eslint/visitor-keys": "5.57.0"
|
"@typescript-eslint/visitor-keys": "5.59.5"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
|
|
@ -6819,13 +6820,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/type-utils": {
|
"node_modules/@typescript-eslint/type-utils": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.5.tgz",
|
||||||
"integrity": "sha512-kxXoq9zOTbvqzLbdNKy1yFrxLC6GDJFE2Yuo3KqSwTmDOFjUGeWSakgoXT864WcK5/NAJkkONCiKb1ddsqhLXQ==",
|
"integrity": "sha512-4eyhS7oGym67/pSxA2mmNq7X164oqDYNnZCUayBwJZIRVvKpBCMBzFnFxjeoDeShjtO6RQBHBuwybuX3POnDqg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/typescript-estree": "5.57.0",
|
"@typescript-eslint/typescript-estree": "5.59.5",
|
||||||
"@typescript-eslint/utils": "5.57.0",
|
"@typescript-eslint/utils": "5.59.5",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"tsutils": "^3.21.0"
|
"tsutils": "^3.21.0"
|
||||||
},
|
},
|
||||||
|
|
@ -6846,9 +6847,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/types": {
|
"node_modules/@typescript-eslint/types": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.5.tgz",
|
||||||
"integrity": "sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ==",
|
"integrity": "sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
|
|
@ -6859,13 +6860,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree": {
|
"node_modules/@typescript-eslint/typescript-estree": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.5.tgz",
|
||||||
"integrity": "sha512-LTzQ23TV82KpO8HPnWuxM2V7ieXW8O142I7hQTxWIHDcCEIjtkat6H96PFkYBQqGFLW/G/eVVOB9Z8rcvdY/Vw==",
|
"integrity": "sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"@typescript-eslint/visitor-keys": "5.57.0",
|
"@typescript-eslint/visitor-keys": "5.59.5",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"globby": "^11.1.0",
|
"globby": "^11.1.0",
|
||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
|
|
@ -6898,9 +6899,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
|
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
|
||||||
"version": "7.3.8",
|
"version": "7.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz",
|
||||||
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
|
"integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lru-cache": "^6.0.0"
|
"lru-cache": "^6.0.0"
|
||||||
|
|
@ -6919,17 +6920,17 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/utils": {
|
"node_modules/@typescript-eslint/utils": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.5.tgz",
|
||||||
"integrity": "sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw==",
|
"integrity": "sha512-sCEHOiw+RbyTii9c3/qN74hYDPNORb8yWCoPLmB7BIflhplJ65u2PBpdRla12e3SSTJ2erRkPjz7ngLHhUegxA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.2.0",
|
"@eslint-community/eslint-utils": "^4.2.0",
|
||||||
"@types/json-schema": "^7.0.9",
|
"@types/json-schema": "^7.0.9",
|
||||||
"@types/semver": "^7.3.12",
|
"@types/semver": "^7.3.12",
|
||||||
"@typescript-eslint/scope-manager": "5.57.0",
|
"@typescript-eslint/scope-manager": "5.59.5",
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"@typescript-eslint/typescript-estree": "5.57.0",
|
"@typescript-eslint/typescript-estree": "5.59.5",
|
||||||
"eslint-scope": "^5.1.1",
|
"eslint-scope": "^5.1.1",
|
||||||
"semver": "^7.3.7"
|
"semver": "^7.3.7"
|
||||||
},
|
},
|
||||||
|
|
@ -6978,12 +6979,12 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/visitor-keys": {
|
"node_modules/@typescript-eslint/visitor-keys": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.5.tgz",
|
||||||
"integrity": "sha512-ery2g3k0hv5BLiKpPuwYt9KBkAp2ugT6VvyShXdLOkax895EC55sP0Tx5L0fZaQueiK3fBLvHVvEl3jFS5ia+g==",
|
"integrity": "sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"eslint-visitor-keys": "^3.3.0"
|
"eslint-visitor-keys": "^3.3.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
@ -18377,9 +18378,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/typescript": {
|
"node_modules/typescript": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
|
||||||
"integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==",
|
"integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
|
|
@ -19099,9 +19100,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue-eslint-parser": {
|
"node_modules/vue-eslint-parser": {
|
||||||
"version": "9.1.1",
|
"version": "9.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.2.1.tgz",
|
||||||
"integrity": "sha512-C2aI/r85Q6tYcz4dpgvrs4wH/MqVrRAVIdpYedrxnATDHHkb+TroeRcDpKWGZCx/OcECMWfz7tVwQ8e+Opy6rA==",
|
"integrity": "sha512-tPOex4n6jit4E7h68auOEbDMwE58XiP4dylfaVTCOVCouR45g+QFDBjgIdEU52EXJxKyjgh91dLfN2rxUcV0bQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
|
|
@ -24751,15 +24752,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@typescript-eslint/eslint-plugin": {
|
"@typescript-eslint/eslint-plugin": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.5.tgz",
|
||||||
"integrity": "sha512-itag0qpN6q2UMM6Xgk6xoHa0D0/P+M17THnr4SVgqn9Rgam5k/He33MA7/D7QoJcdMxHFyX7U9imaBonAX/6qA==",
|
"integrity": "sha512-feA9xbVRWJZor+AnLNAr7A8JRWeZqHUf4T9tlP+TN04b05pFVhO5eN7/O93Y/1OUlLMHKbnJisgDURs/qvtqdg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@eslint-community/regexpp": "^4.4.0",
|
"@eslint-community/regexpp": "^4.4.0",
|
||||||
"@typescript-eslint/scope-manager": "5.57.0",
|
"@typescript-eslint/scope-manager": "5.59.5",
|
||||||
"@typescript-eslint/type-utils": "5.57.0",
|
"@typescript-eslint/type-utils": "5.59.5",
|
||||||
"@typescript-eslint/utils": "5.57.0",
|
"@typescript-eslint/utils": "5.59.5",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"grapheme-splitter": "^1.0.4",
|
"grapheme-splitter": "^1.0.4",
|
||||||
"ignore": "^5.2.0",
|
"ignore": "^5.2.0",
|
||||||
|
|
@ -24795,53 +24796,53 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@typescript-eslint/parser": {
|
"@typescript-eslint/parser": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.5.tgz",
|
||||||
"integrity": "sha512-orrduvpWYkgLCyAdNtR1QIWovcNZlEm6yL8nwH/eTxWLd8gsP+25pdLHYzL2QdkqrieaDwLpytHqycncv0woUQ==",
|
"integrity": "sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@typescript-eslint/scope-manager": "5.57.0",
|
"@typescript-eslint/scope-manager": "5.59.5",
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"@typescript-eslint/typescript-estree": "5.57.0",
|
"@typescript-eslint/typescript-estree": "5.59.5",
|
||||||
"debug": "^4.3.4"
|
"debug": "^4.3.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@typescript-eslint/scope-manager": {
|
"@typescript-eslint/scope-manager": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.5.tgz",
|
||||||
"integrity": "sha512-NANBNOQvllPlizl9LatX8+MHi7bx7WGIWYjPHDmQe5Si/0YEYfxSljJpoTyTWFTgRy3X8gLYSE4xQ2U+aCozSw==",
|
"integrity": "sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"@typescript-eslint/visitor-keys": "5.57.0"
|
"@typescript-eslint/visitor-keys": "5.59.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@typescript-eslint/type-utils": {
|
"@typescript-eslint/type-utils": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.5.tgz",
|
||||||
"integrity": "sha512-kxXoq9zOTbvqzLbdNKy1yFrxLC6GDJFE2Yuo3KqSwTmDOFjUGeWSakgoXT864WcK5/NAJkkONCiKb1ddsqhLXQ==",
|
"integrity": "sha512-4eyhS7oGym67/pSxA2mmNq7X164oqDYNnZCUayBwJZIRVvKpBCMBzFnFxjeoDeShjtO6RQBHBuwybuX3POnDqg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@typescript-eslint/typescript-estree": "5.57.0",
|
"@typescript-eslint/typescript-estree": "5.59.5",
|
||||||
"@typescript-eslint/utils": "5.57.0",
|
"@typescript-eslint/utils": "5.59.5",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"tsutils": "^3.21.0"
|
"tsutils": "^3.21.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@typescript-eslint/types": {
|
"@typescript-eslint/types": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.5.tgz",
|
||||||
"integrity": "sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ==",
|
"integrity": "sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@typescript-eslint/typescript-estree": {
|
"@typescript-eslint/typescript-estree": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.5.tgz",
|
||||||
"integrity": "sha512-LTzQ23TV82KpO8HPnWuxM2V7ieXW8O142I7hQTxWIHDcCEIjtkat6H96PFkYBQqGFLW/G/eVVOB9Z8rcvdY/Vw==",
|
"integrity": "sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"@typescript-eslint/visitor-keys": "5.57.0",
|
"@typescript-eslint/visitor-keys": "5.59.5",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"globby": "^11.1.0",
|
"globby": "^11.1.0",
|
||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
|
|
@ -24859,9 +24860,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "7.3.8",
|
"version": "7.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz",
|
||||||
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
|
"integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"lru-cache": "^6.0.0"
|
"lru-cache": "^6.0.0"
|
||||||
|
|
@ -24876,17 +24877,17 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@typescript-eslint/utils": {
|
"@typescript-eslint/utils": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.5.tgz",
|
||||||
"integrity": "sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw==",
|
"integrity": "sha512-sCEHOiw+RbyTii9c3/qN74hYDPNORb8yWCoPLmB7BIflhplJ65u2PBpdRla12e3SSTJ2erRkPjz7ngLHhUegxA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@eslint-community/eslint-utils": "^4.2.0",
|
"@eslint-community/eslint-utils": "^4.2.0",
|
||||||
"@types/json-schema": "^7.0.9",
|
"@types/json-schema": "^7.0.9",
|
||||||
"@types/semver": "^7.3.12",
|
"@types/semver": "^7.3.12",
|
||||||
"@typescript-eslint/scope-manager": "5.57.0",
|
"@typescript-eslint/scope-manager": "5.59.5",
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"@typescript-eslint/typescript-estree": "5.57.0",
|
"@typescript-eslint/typescript-estree": "5.59.5",
|
||||||
"eslint-scope": "^5.1.1",
|
"eslint-scope": "^5.1.1",
|
||||||
"semver": "^7.3.7"
|
"semver": "^7.3.7"
|
||||||
},
|
},
|
||||||
|
|
@ -24918,12 +24919,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@typescript-eslint/visitor-keys": {
|
"@typescript-eslint/visitor-keys": {
|
||||||
"version": "5.57.0",
|
"version": "5.59.5",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.5.tgz",
|
||||||
"integrity": "sha512-ery2g3k0hv5BLiKpPuwYt9KBkAp2ugT6VvyShXdLOkax895EC55sP0Tx5L0fZaQueiK3fBLvHVvEl3jFS5ia+g==",
|
"integrity": "sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@typescript-eslint/types": "5.57.0",
|
"@typescript-eslint/types": "5.59.5",
|
||||||
"eslint-visitor-keys": "^3.3.0"
|
"eslint-visitor-keys": "^3.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -33507,9 +33508,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"typescript": {
|
"typescript": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
|
||||||
"integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==",
|
"integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ua-parser-js": {
|
"ua-parser-js": {
|
||||||
|
|
@ -33990,9 +33991,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vue-eslint-parser": {
|
"vue-eslint-parser": {
|
||||||
"version": "9.1.1",
|
"version": "9.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.2.1.tgz",
|
||||||
"integrity": "sha512-C2aI/r85Q6tYcz4dpgvrs4wH/MqVrRAVIdpYedrxnATDHHkb+TroeRcDpKWGZCx/OcECMWfz7tVwQ8e+Opy6rA==",
|
"integrity": "sha512-tPOex4n6jit4E7h68auOEbDMwE58XiP4dylfaVTCOVCouR45g+QFDBjgIdEU52EXJxKyjgh91dLfN2rxUcV0bQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
|
|
|
||||||
|
|
@ -93,9 +93,10 @@
|
||||||
"storybook-tailwind-foundations": "^1.1.2",
|
"storybook-tailwind-foundations": "^1.1.2",
|
||||||
"storybook-vue3-router": "^3.0.0-next.1",
|
"storybook-vue3-router": "^3.0.0-next.1",
|
||||||
"tailwindcss": "^3.1.8",
|
"tailwindcss": "^3.1.8",
|
||||||
"typescript": "^5.0.3",
|
"typescript": "^5.0.4",
|
||||||
"vite": "^4.2.1",
|
"vite": "^4.2.1",
|
||||||
"vitest": "^0.29.8",
|
"vitest": "^0.29.8",
|
||||||
|
"vue-eslint-parser": "^9.2.1",
|
||||||
"vue-tsc": "^1.0.9"
|
"vue-tsc": "^1.0.9"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,25 +6,25 @@ import { useRouter } from "vue-router";
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const props = defineProps<{
|
defineProps<{
|
||||||
show: boolean;
|
show: boolean;
|
||||||
courseSession: CourseSession | undefined;
|
courseSession: CourseSession | undefined;
|
||||||
mediaUrl: string | undefined;
|
mediaUrl: string | undefined;
|
||||||
user: UserState | undefined;
|
user: UserState | undefined;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const emits = defineEmits(["closemodal", "logout"]);
|
const emit = defineEmits(["closemodal", "logout"]);
|
||||||
|
|
||||||
const clickLink = (to: string | undefined) => {
|
const clickLink = (to: string | undefined) => {
|
||||||
if (to) {
|
if (to) {
|
||||||
router.push(to);
|
router.push(to);
|
||||||
emits("closemodal");
|
emit("closemodal");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ItFullScreenModal :show="show" @closemodal="$emit('closemodal')">
|
<ItFullScreenModal :show="show" @closemodal="emit('closemodal')">
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<div v-if="user?.loggedIn" class="-mx-4 border-b px-8 pb-4">
|
<div v-if="user?.loggedIn" class="-mx-4 border-b px-8 pb-4">
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,14 @@ import MediaLink from "@/components/mediaLibrary/MediaLink.vue";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
description: string;
|
description?: string;
|
||||||
linkText: string;
|
linkText: string;
|
||||||
url: string;
|
url: string;
|
||||||
icon: string;
|
icon?: string;
|
||||||
openWindow?: boolean;
|
openWindow?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
withDefaults(defineProps<Props>(), {
|
||||||
icon: "",
|
icon: "",
|
||||||
description: "",
|
description: "",
|
||||||
openWindow: false,
|
openWindow: false,
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,10 @@ export interface Props {
|
||||||
description: string;
|
description: string;
|
||||||
call2Action: string;
|
call2Action: string;
|
||||||
link: string;
|
link: string;
|
||||||
icon: string;
|
icon?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
withDefaults(defineProps<Props>(), {
|
||||||
icon: "",
|
icon: "",
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<Dialog :open="true" class="relative z-50" @close="close">
|
<Dialog :open="true" class="relative z-50" @close="close">
|
||||||
<div class="fixed inset-0 bg-black/30" aria-hidden="true"></div>
|
<div class="fixed inset-0 bg-black/30" aria-hidden="true"></div>
|
||||||
<div class="fixed inset-0 flex items-center justify-center p-4">
|
<div class="fixed inset-0 flex items-center justify-center p-4">
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@
|
||||||
import { computed } from "vue";
|
import { computed } from "vue";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
variant: "primary" | "secondary" | "blue" | "text";
|
variant?: "primary" | "secondary" | "blue" | "text";
|
||||||
size: "normal" | "large";
|
size?: "normal" | "large";
|
||||||
disabled: boolean;
|
disabled?: boolean;
|
||||||
href?: string;
|
href?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ const input = (e: Event) => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<div
|
<div
|
||||||
:class="{
|
:class="{
|
||||||
'opacity-50': disabled,
|
'opacity-50': disabled,
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
import type { DropdownListItem } from "@/types";
|
import type { DropdownListItem } from "@/types";
|
||||||
import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/vue";
|
import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/vue";
|
||||||
|
|
||||||
const props = defineProps<{
|
defineProps<{
|
||||||
buttonClasses: [string] | [];
|
buttonClasses: [string] | [];
|
||||||
listItems: DropdownListItem[];
|
listItems: DropdownListItem[];
|
||||||
align: "left" | "right";
|
align: "left" | "right";
|
||||||
|
|
@ -37,7 +37,7 @@ const emit = defineEmits<{
|
||||||
<MenuItem>
|
<MenuItem>
|
||||||
<button
|
<button
|
||||||
class="group flex w-full items-center px-0 py-2 text-sm text-black"
|
class="group flex w-full items-center px-0 py-2 text-sm text-black"
|
||||||
@click="$emit('select', item.data)"
|
@click="emit('select', item.data)"
|
||||||
>
|
>
|
||||||
<span class="inline-block pr-2">
|
<span class="inline-block pr-2">
|
||||||
<component :is="item.icon" v-if="item.icon"></component>
|
<component :is="item.icon" v-if="item.icon"></component>
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,11 @@ import { computed } from "vue";
|
||||||
|
|
||||||
// https://stackoverflow.com/questions/64775876/vue-3-pass-reactive-object-to-component-with-two-way-binding
|
// https://stackoverflow.com/questions/64775876/vue-3-pass-reactive-object-to-component-with-two-way-binding
|
||||||
interface Props {
|
interface Props {
|
||||||
modelValue: {
|
modelValue?: {
|
||||||
id: string | number;
|
id: string | number;
|
||||||
name: string;
|
name: string;
|
||||||
};
|
};
|
||||||
items: DropdownSelectable[];
|
items?: DropdownSelectable[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
import { Dialog, DialogPanel, DialogTitle } from "@headlessui/vue";
|
import { Dialog, DialogPanel, DialogTitle } from "@headlessui/vue";
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
modelValue: boolean;
|
modelValue?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
withDefaults(defineProps<Props>(), {
|
withDefaults(defineProps<Props>(), {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import ItRow from "@/components/ui/ItRow.vue";
|
import ItRow from "@/components/ui/ItRow.vue";
|
||||||
|
|
||||||
const props = defineProps<{
|
defineProps<{
|
||||||
avatarUrl: string;
|
avatarUrl: string;
|
||||||
name: string;
|
name: string;
|
||||||
}>();
|
}>();
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ import { RadioGroup, RadioGroupLabel, RadioGroupOption } from "@headlessui/vue";
|
||||||
interface Props {
|
interface Props {
|
||||||
modelValue: any;
|
modelValue: any;
|
||||||
items: RadioItem<any>[];
|
items: RadioItem<any>[];
|
||||||
label: string | undefined;
|
label?: string | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
withDefaults(defineProps<Props>(), {
|
withDefaults(defineProps<Props>(), {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ export interface Props {
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
withDefaults(defineProps<Props>(), {
|
||||||
label: undefined,
|
label: undefined,
|
||||||
cyKey: "",
|
cyKey: "",
|
||||||
placeholder: "",
|
placeholder: "",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
interface Props {
|
interface Props {
|
||||||
isOpen: boolean;
|
isOpen?: boolean;
|
||||||
small?: boolean;
|
small?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { Switch } from "@headlessui/vue";
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
initiallySwitchedLeft: boolean;
|
initiallySwitchedLeft?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
|
|
||||||
|
|
@ -86,19 +86,6 @@ const satisfaction = ref(satisfactionValues[1].value);
|
||||||
const satisfactionText =
|
const satisfactionText =
|
||||||
'Wie zufrieden bist du mit dem Kurs "Überbetriebliche Kurse" allgemein?';
|
'Wie zufrieden bist du mit dem Kurs "Überbetriebliche Kurse" allgemein?';
|
||||||
|
|
||||||
const sourceLabel = "Wie bist du auf das Kursangebot aufmerksam geworden?";
|
|
||||||
const sourceValues = ref([]);
|
|
||||||
const sourceItems = [
|
|
||||||
{
|
|
||||||
name: "Internet",
|
|
||||||
value: "I",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "TV",
|
|
||||||
value: "T",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const textValue = ref("abc");
|
const textValue = ref("abc");
|
||||||
|
|
||||||
const barChartItems = [
|
const barChartItems = [
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ onMounted(async () => {
|
||||||
state.assignment = await assignmentStore.loadAssignment(Number(props.assignmentId));
|
state.assignment = await assignmentStore.loadAssignment(Number(props.assignmentId));
|
||||||
await assignmentStore.loadAssignmentCompletion(
|
await assignmentStore.loadAssignmentCompletion(
|
||||||
Number(props.assignmentId),
|
Number(props.assignmentId),
|
||||||
courseSessionsStore.currentCourseSession!.id,
|
courseSessionsStore.currentCourseSession?.id ?? 0,
|
||||||
props.userId
|
props.userId
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,7 @@ function finishButtonEnabled() {
|
||||||
:disabled="!finishButtonEnabled()"
|
:disabled="!finishButtonEnabled()"
|
||||||
class="btn-secondary z-10"
|
class="btn-secondary z-10"
|
||||||
data-cy="next-step"
|
data-cy="next-step"
|
||||||
@click="$emit('close')"
|
@click="emit('close')"
|
||||||
>
|
>
|
||||||
<span class="flex items-center">
|
<span class="flex items-center">
|
||||||
Bewertung abschliessen
|
Bewertung abschliessen
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ async function submitEvaluation() {
|
||||||
await assignmentStore.evaluateAssignmentCompletion({
|
await assignmentStore.evaluateAssignmentCompletion({
|
||||||
assignment_user_id: Number(props.assignmentUser.user_id),
|
assignment_user_id: Number(props.assignmentUser.user_id),
|
||||||
assignment_id: props.assignment.id,
|
assignment_id: props.assignment.id,
|
||||||
course_session_id: courseSessionsStore.currentCourseSession!.id,
|
course_session_id: courseSessionsStore?.currentCourseSession?.id ?? 0,
|
||||||
completion_data: {},
|
completion_data: {},
|
||||||
completion_status: "evaluation_submitted",
|
completion_status: "evaluation_submitted",
|
||||||
evaluation_grade: grade.value ?? undefined,
|
evaluation_grade: grade.value ?? undefined,
|
||||||
|
|
@ -89,6 +89,7 @@ const evaluationUser = computed(() => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<div>
|
<div>
|
||||||
<h3 v-if="evaluationUser && props.showEvaluationUser" class="mb-6">
|
<h3 v-if="evaluationUser && props.showEvaluationUser" class="mb-6">
|
||||||
Bewertung von {{ evaluationUser.first_name }} {{ evaluationUser.last_name }}
|
Bewertung von {{ evaluationUser.first_name }} {{ evaluationUser.last_name }}
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ function changePoints(points: number) {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function onUpdateText(value: string) {
|
function onUpdateText(value: string) {
|
||||||
// log.debug("onUpdateText", value);
|
// log.debug("onUpdateText", value);
|
||||||
evaluateAssignmentCompletionDebounced({
|
evaluateAssignmentCompletionDebounced({
|
||||||
|
|
@ -61,7 +62,7 @@ async function evaluateAssignmentCompletion(completionData: AssignmentCompletion
|
||||||
return assignmentStore.evaluateAssignmentCompletion({
|
return assignmentStore.evaluateAssignmentCompletion({
|
||||||
assignment_user_id: Number(props.assignmentUser.user_id),
|
assignment_user_id: Number(props.assignmentUser.user_id),
|
||||||
assignment_id: props.assignment.id,
|
assignment_id: props.assignment.id,
|
||||||
course_session_id: courseSessionsStore.currentCourseSession!.id,
|
course_session_id: courseSessionsStore?.currentCourseSession?.id ?? 0,
|
||||||
completion_data: completionData,
|
completion_data: completionData,
|
||||||
completion_status: "evaluation_in_progress",
|
completion_status: "evaluation_in_progress",
|
||||||
});
|
});
|
||||||
|
|
@ -74,6 +75,7 @@ const evaluateAssignmentCompletionDebounced = useDebounceFn(
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<div>
|
<div>
|
||||||
<div class="text-bold mb-4 text-sm">
|
<div class="text-bold mb-4 text-sm">
|
||||||
Beurteilungskriterium {{ taskIndex + 1 }} /
|
Beurteilungskriterium {{ taskIndex + 1 }} /
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import * as log from "loglevel";
|
||||||
|
|
||||||
import LearningContentContainer from "@/pages/learningPath/learningContentPage/LearningContentContainer.vue";
|
import LearningContentContainer from "@/pages/learningPath/learningContentPage/LearningContentContainer.vue";
|
||||||
import { computed } from "vue";
|
import { computed } from "vue";
|
||||||
import { useRoute, useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
courseSlug: string;
|
courseSlug: string;
|
||||||
|
|
@ -17,7 +17,6 @@ log.debug("SinglePerformanceCriteriaPage.vue setup");
|
||||||
const competenceStore = useCompetenceStore();
|
const competenceStore = useCompetenceStore();
|
||||||
const circleStore = useCircleStore();
|
const circleStore = useCircleStore();
|
||||||
|
|
||||||
const route = useRoute();
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const singleCriteria = computed(() => {
|
const singleCriteria = computed(() => {
|
||||||
|
|
@ -25,10 +24,6 @@ const singleCriteria = computed(() => {
|
||||||
return criteria.slug === props.criteriaSlug;
|
return criteria.slug === props.criteriaSlug;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function close() {
|
|
||||||
router.push(`/course/${props.courseSlug}/competence`);
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { showIcon } from "@/pages/learningPath/circlePage/learningSequenceUtils";
|
|
||||||
import { useCircleStore } from "@/stores/circle";
|
import { useCircleStore } from "@/stores/circle";
|
||||||
import type { DefaultArcObject } from "d3";
|
|
||||||
import * as d3 from "d3";
|
import * as d3 from "d3";
|
||||||
import pick from "lodash/pick";
|
import pick from "lodash/pick";
|
||||||
import * as log from "loglevel";
|
import * as log from "loglevel";
|
||||||
|
|
@ -155,6 +153,7 @@ function render() {
|
||||||
.attr("role", "button")
|
.attr("role", "button")
|
||||||
.attr("fill", colors.gray[300]);
|
.attr("fill", colors.gray[300]);
|
||||||
|
|
||||||
|
/* eslint-disable */
|
||||||
learningSequences
|
learningSequences
|
||||||
.on("mouseover", function (d, i) {
|
.on("mouseover", function (d, i) {
|
||||||
d3.select(this)
|
d3.select(this)
|
||||||
|
|
@ -188,40 +187,7 @@ function render() {
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
learningSequences.append("path").attr("d", wedgeGenerator);
|
learningSequences.append("path").attr("d", wedgeGenerator);
|
||||||
|
/* eslint-enable */
|
||||||
const learningSequenceText = learningSequences
|
|
||||||
.append("text")
|
|
||||||
.attr("fill", colors.blue[900])
|
|
||||||
.style("font-size", "15px")
|
|
||||||
.text((d) => {
|
|
||||||
return d.title;
|
|
||||||
})
|
|
||||||
.attr("transform", function (d) {
|
|
||||||
let translate = wedgeGenerator.centroid(d as unknown as DefaultArcObject);
|
|
||||||
translate = [translate[0], translate[1] + 20];
|
|
||||||
return "translate(" + translate + ")";
|
|
||||||
})
|
|
||||||
.attr("class", "circlesText text-large font-bold")
|
|
||||||
.style("text-anchor", "middle");
|
|
||||||
|
|
||||||
const iconWidth = 25;
|
|
||||||
|
|
||||||
const learningSequenceIcon = learningSequences
|
|
||||||
.append("svg:image")
|
|
||||||
.attr("xlink:href", (d) => {
|
|
||||||
if (showIcon(d.icon)) {
|
|
||||||
return "/static/icons/" + d.icon.replace("it-", "") + ".svg";
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
})
|
|
||||||
.attr("width", iconWidth)
|
|
||||||
.attr("height", iconWidth)
|
|
||||||
.attr("transform", function (d) {
|
|
||||||
let translate = wedgeGenerator.centroid(d as unknown as DefaultArcObject);
|
|
||||||
translate = [translate[0] - iconWidth / 2, translate[1] - iconWidth];
|
|
||||||
return "translate(" + translate + ")";
|
|
||||||
})
|
|
||||||
.attr("class", "filter-blue-900");
|
|
||||||
|
|
||||||
// Create Arrows
|
// Create Arrows
|
||||||
const arrow = d3
|
const arrow = d3
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,17 @@
|
||||||
import ItFullScreenModal from "@/components/ui/ItFullScreenModal.vue";
|
import ItFullScreenModal from "@/components/ui/ItFullScreenModal.vue";
|
||||||
import type { Circle } from "@/services/circle";
|
import type { Circle } from "@/services/circle";
|
||||||
|
|
||||||
const props = defineProps<{
|
defineProps<{
|
||||||
circle: Circle | undefined;
|
circle: Circle | undefined;
|
||||||
show: boolean;
|
show: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
// const emits = defineEmits(['closemodal'])
|
const emit = defineEmits(["closemodal"]);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ItFullScreenModal :show="show" @closemodal="$emit('closemodal')">
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
|
<ItFullScreenModal :show="show" @closemodal="emit('closemodal')">
|
||||||
<div v-if="circle" class="container-medium">
|
<div v-if="circle" class="container-medium">
|
||||||
<h1 class="">Überblick: Circle «{{ circle.title }}»</h1>
|
<h1 class="">Überblick: Circle «{{ circle.title }}»</h1>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,9 @@ import { reactive } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
learningSequences: DropdownSelectable[];
|
learningSequences?: DropdownSelectable[];
|
||||||
showUploadErrorMessage: boolean;
|
showUploadErrorMessage?: boolean;
|
||||||
isUploading: boolean;
|
isUploading?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
@ -59,7 +59,7 @@ function validateForm() {
|
||||||
formErrors.learningSequence = formData.learningSequence.id === -1;
|
formErrors.learningSequence = formData.learningSequence.id === -1;
|
||||||
formErrors.name = formData.name === "";
|
formErrors.name = formData.name === "";
|
||||||
|
|
||||||
for (const [_name, value] of Object.entries(formErrors)) {
|
for (const [, value] of Object.entries(formErrors)) {
|
||||||
if (value) {
|
if (value) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -68,8 +68,8 @@ function validateForm() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetFormErrors() {
|
function resetFormErrors() {
|
||||||
for (let [_name, value] of Object.entries(formErrors)) {
|
for (let [, value] of Object.entries(formErrors)) {
|
||||||
value = false;
|
value = false; // eslint-disable-line
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,9 @@ const props = withDefaults(defineProps<Props>(), {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<h3 class="mt-8">{{ $t("assignment.initialSituationTitle") }}</h3>
|
<h3 class="mt-8">{{ $t("assignment.initialSituationTitle") }}</h3>
|
||||||
|
|
||||||
<p
|
<p
|
||||||
v-if="props.assignment.starting_position"
|
v-if="props.assignment.starting_position"
|
||||||
class="default-wagtail-rich-text text-large"
|
class="default-wagtail-rich-text text-large"
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ const emit = defineEmits<{
|
||||||
}>();
|
}>();
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<div
|
<div
|
||||||
v-for="task in props.assignment.tasks ?? []"
|
v-for="task in props.assignment.tasks ?? []"
|
||||||
:key="task.id"
|
:key="task.id"
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,7 @@ const completionStatus = computed(() => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<div class="flex flex-col space-y-10">
|
<div class="flex flex-col space-y-10">
|
||||||
<div v-for="(block, index) in props.task.value.content" :key="block.id">
|
<div v-for="(block, index) in props.task.value.content" :key="block.id">
|
||||||
<div v-if="block.type === 'explanation'">
|
<div v-if="block.type === 'explanation'">
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<div class="container-medium">
|
<div class="container-medium">
|
||||||
<div class="lg:mt-8">
|
<div class="lg:mt-8">
|
||||||
<p class="text-large my-4">{{ value.description }}</p>
|
<p class="text-large my-4">{{ value.description }}</p>
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ interface Value {
|
||||||
description: string;
|
description: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<{
|
defineProps<{
|
||||||
value: Value;
|
value: Value;
|
||||||
content: LearningContent;
|
content: LearningContent;
|
||||||
}>();
|
}>();
|
||||||
|
|
|
||||||
|
|
@ -24,13 +24,13 @@
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
interface Props {
|
interface Props {
|
||||||
avatarUrl: string;
|
avatarUrl?: string;
|
||||||
title: string;
|
title?: string;
|
||||||
description: string;
|
description?: string;
|
||||||
feedbackSent: boolean;
|
feedbackSent?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const _props = withDefaults(defineProps<Props>(), {
|
withDefaults(defineProps<Props>(), {
|
||||||
avatarUrl: "",
|
avatarUrl: "",
|
||||||
title: "",
|
title: "",
|
||||||
description: "",
|
description: "",
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import type { LearningContentType } from "@/types";
|
||||||
import { learningContentTypeData } from "@/utils/typeMaps";
|
import { learningContentTypeData } from "@/utils/typeMaps";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string | undefined;
|
title?: string;
|
||||||
subtitle: string;
|
subtitle: string;
|
||||||
learningContentType: LearningContentType;
|
learningContentType: LearningContentType;
|
||||||
showStartButton: boolean;
|
showStartButton: boolean;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import type { LearningContentType } from "@/types";
|
||||||
import { learningContentTypeData } from "@/utils/typeMaps";
|
import { learningContentTypeData } from "@/utils/typeMaps";
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
title: string;
|
title?: string;
|
||||||
learningContentType: LearningContentType;
|
learningContentType: LearningContentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { CircleSectorData } from "@/pages/learningPath/learningPathPage/LearningPathCircle.vue";
|
|
||||||
import LearningPathCircle from "@/pages/learningPath/learningPathPage/LearningPathCircle.vue";
|
import LearningPathCircle from "@/pages/learningPath/learningPathPage/LearningPathCircle.vue";
|
||||||
import LearningPathContinueButton from "@/pages/learningPath/learningPathPage/LearningPathContinueButton.vue";
|
import LearningPathContinueButton from "@/pages/learningPath/learningPathPage/LearningPathContinueButton.vue";
|
||||||
import { calculateCircleSectorData } from "@/pages/learningPath/learningPathPage/utils";
|
import { calculateCircleSectorData } from "@/pages/learningPath/learningPathPage/utils";
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
interface Props {
|
interface Props {
|
||||||
hasProgress: boolean;
|
hasProgress?: boolean;
|
||||||
url: string;
|
url?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { CircleSectorData } from "@/pages/learningPath/learningPathPage/LearningPathCircle.vue";
|
|
||||||
import LearningPathCircleListTile from "@/pages/learningPath/learningPathPage/LearningPathCircleListTile.vue";
|
import LearningPathCircleListTile from "@/pages/learningPath/learningPathPage/LearningPathCircleListTile.vue";
|
||||||
import type { Circle } from "@/services/circle";
|
import type { Circle } from "@/services/circle";
|
||||||
import type { LearningPath } from "@/services/learningPath";
|
import type { LearningPath } from "@/services/learningPath";
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { CircleSectorData } from "@/pages/learningPath/learningPathPage/LearningPathCircle.vue";
|
|
||||||
import LearningPathCircleColumn from "@/pages/learningPath/learningPathPage/LearningPathCircleColumn.vue";
|
import LearningPathCircleColumn from "@/pages/learningPath/learningPathPage/LearningPathCircleColumn.vue";
|
||||||
import LearningPathScrollButton from "@/pages/learningPath/learningPathPage/LearningPathScrollButton.vue";
|
import LearningPathScrollButton from "@/pages/learningPath/learningPathPage/LearningPathScrollButton.vue";
|
||||||
import type { Circle } from "@/services/circle";
|
import type { Circle } from "@/services/circle";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue