From 7ac051e77999ef958ef8a8197acb9155b8ad0002 Mon Sep 17 00:00:00 2001 From: smuddyx Date: Sun, 25 Jul 2021 15:50:51 +0200 Subject: [PATCH] new role for members --- package-lock.json | 293 ++---------------- package.json | 2 + src/app/app-routing.module.ts | 2 +- .../presentation/remote/remote.component.ts | 2 +- .../modules/shows/list/list.component.html | 32 +- src/app/modules/shows/list/list.component.ts | 2 +- .../modules/shows/show/show.component.html | 63 ++-- src/app/modules/shows/shows.module.ts | 4 + src/app/modules/user/info/info.component.ts | 5 +- src/app/modules/user/info/role.pipe.ts | 5 +- .../user/info/users/users.component.html | 2 +- src/app/modules/user/user.module.ts | 2 + src/app/services/user/roles.ts | 4 +- .../navigation/navigation.component.html | 2 +- .../pipes/sort-by/sort-by.module.ts | 10 + .../pipes/sort-by/sort-by.pipe.spec.ts | 8 + .../pipes/sort-by/sort-by.pipe.ts | 23 ++ 17 files changed, 133 insertions(+), 328 deletions(-) create mode 100644 src/app/widget-modules/pipes/sort-by/sort-by.module.ts create mode 100644 src/app/widget-modules/pipes/sort-by/sort-by.pipe.spec.ts create mode 100644 src/app/widget-modules/pipes/sort-by/sort-by.pipe.ts diff --git a/package-lock.json b/package-lock.json index 0f642dd..c3e47a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "@fortawesome/free-solid-svg-icons": "^5.13.0", "docx": "^6.0.3", "firebase": "^8.7.0", + "lodash": "^4.17.21", "ngx-mat-select-search": "^3.3.0", "ngx-perfect-scrollbar": "^10.1.1", "ngx-swiper-wrapper": "^10.0.0", @@ -45,6 +46,7 @@ "@angular/language-service": "~12.0.1", "@types/jasmine": "~3.6.0", "@types/jasminewd2": "~2.0.3", + "@types/lodash": "^4.14.171", "@types/node": "^12.12.36", "@typescript-eslint/eslint-plugin": "4.23.0", "@typescript-eslint/parser": "4.23.0", @@ -386,12 +388,6 @@ "node": ">=8" } }, - "node_modules/@angular-devkit/build-angular/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "node_modules/@angular-devkit/build-angular/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -525,12 +521,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/build-optimizer/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, "node_modules/@angular-devkit/build-webpack": { "version": "0.1200.1", "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1200.1.tgz", @@ -776,11 +766,6 @@ "node": "^12.14.1 || ^14.0.0" } }, - "node_modules/@angular/animations/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, "node_modules/@angular/cdk": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.0.1.tgz", @@ -958,12 +943,6 @@ "node": ">=8" } }, - "node_modules/@angular/cli/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "node_modules/@angular/cli/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1079,11 +1058,6 @@ "node": "^12.14.1 || ^14.0.0" } }, - "node_modules/@angular/common/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, "node_modules/@angular/compiler": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.0.1.tgz", @@ -1247,12 +1221,6 @@ "node": ">=8" } }, - "node_modules/@angular/compiler-cli/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, "node_modules/@angular/compiler-cli/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -1303,11 +1271,6 @@ "node": ">=10" } }, - "node_modules/@angular/compiler/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, "node_modules/@angular/core": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.0.1.tgz", @@ -1319,11 +1282,6 @@ "node": "^12.14.1 || ^14.0.0" } }, - "node_modules/@angular/core/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, "node_modules/@angular/fire": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/@angular/fire/-/fire-6.1.5.tgz", @@ -1343,11 +1301,6 @@ "node": "^12.14.1 || ^14.0.0" } }, - "node_modules/@angular/forms/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, "node_modules/@angular/language-service": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-12.0.1.tgz", @@ -1387,16 +1340,6 @@ "node": "^12.14.1 || ^14.0.0" } }, - "node_modules/@angular/platform-browser-dynamic/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, - "node_modules/@angular/platform-browser/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, "node_modules/@angular/router": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.0.1.tgz", @@ -1408,11 +1351,6 @@ "node": "^12.14.1 || ^14.0.0" } }, - "node_modules/@angular/router/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, "node_modules/@angular/service-worker": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-12.0.1.tgz", @@ -1427,11 +1365,6 @@ "node": "^12.14.1 || ^14.0.0" } }, - "node_modules/@angular/service-worker/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, "node_modules/@babel/code-frame": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", @@ -4823,6 +4756,12 @@ "jszip": "*" } }, + "node_modules/@types/lodash": { + "version": "4.14.171", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", + "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", + "dev": true + }, "node_modules/@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", @@ -6153,16 +6092,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -6648,18 +6577,6 @@ "fsevents": "~2.1.2" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -7337,16 +7254,6 @@ "buffer": "^5.1.0" } }, - "node_modules/crc/node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, "node_modules/crc32-stream": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", @@ -9256,12 +9163,6 @@ "node": ">= 4" } }, - "node_modules/eslint/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "node_modules/eslint/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -13585,10 +13486,9 @@ } }, "node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash._isnative": { "version": "2.4.1", @@ -17929,18 +17829,6 @@ "node": ">=6.14.4" } }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/postcss/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -23105,11 +22993,6 @@ "dependencies": { "tslib": "^2.0.0" } - }, - "node_modules/zone.js/node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" } }, "dependencies": { @@ -23384,12 +23267,6 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -23492,14 +23369,6 @@ "source-map": "0.7.3", "tslib": "2.2.0", "typescript": "4.2.4" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - } } }, "@angular-devkit/build-webpack": { @@ -23722,13 +23591,6 @@ "integrity": "sha512-hgmM2pAxiwYgPzDeAFE2C1x43pHpD9tuVCeccL9SOMTMWmCvAuO8SeSaRYCQPP1Y8QQgL1YHqvYMoMfYuFM87Q==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } }, "@angular/cdk": { @@ -23870,12 +23732,6 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -23963,13 +23819,6 @@ "integrity": "sha512-Jfmc9nFO43dEJgSBd/We9XEosfdUTRzvjEEW4s9cL24TVb3bnNjqeb862VY20M6N44kJ8ayi5gt5L7UwmGLF6g==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } }, "@angular/compiler": { @@ -23978,13 +23827,6 @@ "integrity": "sha512-Bxt5FqTffiV4wIWsd3hTgpe82WWJcPRC1R1Q9fPqhMwilfGB7EPhMUyMMYBR1zoVT3cFLg4Q8R9CGiiPWA/UmQ==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } }, "@angular/compiler-cli": { @@ -24100,12 +23942,6 @@ "ansi-regex": "^5.0.0" } }, - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -24152,13 +23988,6 @@ "integrity": "sha512-DA5hl0Hl97KTWbktXg1O3+Pt34hwsF1iY2l+8fSexfsKawHhZQuBjGnm8JNuIvKbu70MqHX0OBf2vNTK/Z06HQ==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } }, "@angular/fire": { @@ -24175,13 +24004,6 @@ "integrity": "sha512-b4KfH9ABDkhi/A/F0twj9HbeBLbfZwKDOO2Y/BjuqWynt4yek+U+tH83VKYWZCmt/W2QwJ2CZgDztl0I4ds//g==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } }, "@angular/language-service": { @@ -24204,13 +24026,6 @@ "integrity": "sha512-Gly/QdvFBWLdXjrx2+4jp0Z4lqvGAkVndFa9jaFj3xIuPvbf1akNelTjRD42ww8juctTC1cek2mESXMqkFu8Hw==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } }, "@angular/platform-browser-dynamic": { @@ -24219,13 +24034,6 @@ "integrity": "sha512-CDVAeLD+4YPHIwHCBmARKsamNefb56GCytIV+r+hD/iOLbqIftrLpGYb6F0dkGIVsw4gxpo03UUDXBHfFBvLig==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } }, "@angular/router": { @@ -24234,13 +24042,6 @@ "integrity": "sha512-1T0WxnUlP7IsvhDCuQi0jCrni6GGtih96M/Hv7h4jl+UxLZO1VuVyar4In8yl0/FrgaA8TbZXSuzT2K+AjEKNw==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } }, "@angular/service-worker": { @@ -24249,13 +24050,6 @@ "integrity": "sha512-Slt3+iGI0UWHZJp0/6QZmEIP6PuSOthEsJB7Jy7PBuQpHL/wEyLclQM6RuGSZy7ruaMpa7A/6r/iDAJSInjHmQ==", "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } }, "@babel/code-frame": { @@ -27400,6 +27194,12 @@ "jszip": "*" } }, + "@types/lodash": { + "version": "4.14.171", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", + "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", + "dev": true + }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", @@ -28538,16 +28338,6 @@ "readable-stream": "^3.4.0" }, "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -28953,17 +28743,6 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.3.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } } }, "chownr": { @@ -29550,18 +29329,6 @@ "dev": true, "requires": { "buffer": "^5.1.0" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - } } }, "crc32-stream": { @@ -31127,12 +30894,6 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -34758,10 +34519,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash._isnative": { "version": "2.4.1", @@ -36703,12 +36463,6 @@ "source-map": "^0.6.1" }, "dependencies": { - "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -42626,13 +42380,6 @@ "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", "requires": { "tslib": "^2.0.0" - }, - "dependencies": { - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - } } } } diff --git a/package.json b/package.json index 8e6d827..23b29b3 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@fortawesome/free-solid-svg-icons": "^5.13.0", "docx": "^6.0.3", "firebase": "^8.7.0", + "lodash": "^4.17.21", "ngx-mat-select-search": "^3.3.0", "ngx-perfect-scrollbar": "^10.1.1", "ngx-swiper-wrapper": "^10.0.0", @@ -48,6 +49,7 @@ "@angular/language-service": "~12.0.1", "@types/jasmine": "~3.6.0", "@types/jasminewd2": "~2.0.3", + "@types/lodash": "^4.14.171", "@types/node": "^12.12.36", "@typescript-eslint/eslint-plugin": "4.23.0", "@typescript-eslint/parser": "4.23.0", diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index e73e6aa..b1bf8fb 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -24,7 +24,7 @@ const routes: Routes = [ canActivate: [AngularFireAuthGuard, RoleGuard], data: { authGuardPipe: () => redirectUnauthorizedTo(['user', 'login']), - requiredRoles: ['leader'], + requiredRoles: ['leader', 'member'], }, }, { diff --git a/src/app/modules/presentation/remote/remote.component.ts b/src/app/modules/presentation/remote/remote.component.ts index aa3e721..4a72785 100644 --- a/src/app/modules/presentation/remote/remote.component.ts +++ b/src/app/modules/presentation/remote/remote.component.ts @@ -51,7 +51,7 @@ export class RemoteComponent { private textRenderingService: TextRenderingService, private globalSettingsService: GlobalSettingsService ) { - this.shows$ = showService.list$(true); + this.shows$ = showService.list$(true).pipe(map(_ => _.sort((a, b) => (b.date < a.date ? -1 : b.date > a.date ? 1 : 0)))); songService.list$().subscribe(_ => (this.songs = _)); globalSettingsService.get$ diff --git a/src/app/modules/shows/list/list.component.html b/src/app/modules/shows/list/list.component.html index 77b3df1..8597d28 100644 --- a/src/app/modules/shows/list/list.component.html +++ b/src/app/modules/shows/list/list.component.html @@ -1,19 +1,21 @@
- + - - - - + + + + + + @@ -24,7 +26,7 @@ heading="veröffentlichte Veranstaltungen" > diff --git a/src/app/modules/shows/list/list.component.ts b/src/app/modules/shows/list/list.component.ts index 41c02d9..1cd3500 100644 --- a/src/app/modules/shows/list/list.component.ts +++ b/src/app/modules/shows/list/list.component.ts @@ -18,7 +18,7 @@ export class ListComponent { } public getPublicShows(songs: Show[]): Show[] { - return songs.filter(_ => _.published).sort((a, b) => (b.date < a.date ? -1 : b.date > a.date ? 1 : 0)); + return songs.filter(_ => _.published); } public getPrivateSongs(songs: Show[]): Show[] { diff --git a/src/app/modules/shows/show/show.component.html b/src/app/modules/shows/show/show.component.html index 9916c4b..cf84bd0 100644 --- a/src/app/modules/shows/show/show.component.html +++ b/src/app/modules/shows/show/show.component.html @@ -32,42 +32,45 @@ > - - - Archivieren - - - Wiederherstellen - - - Veröffentlichen - - - Veröffentlichung zurückziehen - + + + + Archivieren + + + Wiederherstellen + + + Veröffentlichen + + + Veröffentlichung zurückziehen + + + Herunterladen Ablauf für Lobpreisleiter + >Ablauf für Lobpreisgruppe Handout mit Copyright Infos diff --git a/src/app/modules/shows/shows.module.ts b/src/app/modules/shows/shows.module.ts index aef6167..583786c 100644 --- a/src/app/modules/shows/shows.module.ts +++ b/src/app/modules/shows/shows.module.ts @@ -29,6 +29,8 @@ import {OwnerModule} from '../../services/user/owner.module'; import {UserNameModule} from '../../services/user/user-name/user-name.module'; import {MatMenuModule} from '@angular/material/menu'; import {DragDropModule} from '@angular/cdk/drag-drop'; +import {RoleModule} from '../../services/user/role.module'; +import {SortByModule} from '../../widget-modules/pipes/sort-by/sort-by.module'; @NgModule({ declarations: [NewComponent, ListComponent, ListItemComponent, ShowComponent, SongComponent], @@ -58,6 +60,8 @@ import {DragDropModule} from '@angular/cdk/drag-drop'; UserNameModule, MatMenuModule, DragDropModule, + RoleModule, + SortByModule, ], }) export class ShowsModule {} diff --git a/src/app/modules/user/info/info.component.ts b/src/app/modules/user/info/info.component.ts index 6907dc6..fe12049 100644 --- a/src/app/modules/user/info/info.component.ts +++ b/src/app/modules/user/info/info.component.ts @@ -5,6 +5,7 @@ import {User} from '../../../services/user/user'; import {ChordMode} from '../../../widget-modules/components/song-text/song-text.component'; import {faSignOutAlt} from '@fortawesome/free-solid-svg-icons/faSignOutAlt'; import {RolePipe} from './role.pipe'; +import {roles} from '../../../services/user/roles'; @Component({ selector: 'app-info', @@ -25,8 +26,8 @@ export class InfoComponent implements OnInit { await this.userService.update$(uid, {chordMode: value}); } - public getUserRoles = (roles: string): string[] => roles?.split(';') ?? []; - public transdormUserRoles = (roles: string): string => + public getUserRoles = (roles: string): roles[] => (roles?.split(';') ?? []) as roles[]; + public transdormUserRoles = (roles: roles): string => this.getUserRoles(roles) .map(_ => new RolePipe().transform(_)) .join(', '); diff --git a/src/app/modules/user/info/role.pipe.ts b/src/app/modules/user/info/role.pipe.ts index 1a9df59..22398c2 100644 --- a/src/app/modules/user/info/role.pipe.ts +++ b/src/app/modules/user/info/role.pipe.ts @@ -1,10 +1,11 @@ import {Pipe, PipeTransform} from '@angular/core'; +import {roles} from '../../../services/user/roles'; @Pipe({ name: 'role', }) export class RolePipe implements PipeTransform { - public transform(role: string): string { + public transform(role: roles): string { switch (role) { case 'contributor': return 'Mitarbeiter'; @@ -16,6 +17,8 @@ export class RolePipe implements PipeTransform { return 'Benutzer'; case 'leader': return 'Lobpreisleiter'; + case 'member': + return 'Lobpreisgruppe'; case 'presenter': return 'Präsentator'; } diff --git a/src/app/modules/user/info/users/users.component.html b/src/app/modules/user/info/users/users.component.html index cc56766..59ed346 100644 --- a/src/app/modules/user/info/users/users.component.html +++ b/src/app/modules/user/info/users/users.component.html @@ -1,3 +1,3 @@ - + diff --git a/src/app/modules/user/user.module.ts b/src/app/modules/user/user.module.ts index e572c88..24b288a 100644 --- a/src/app/modules/user/user.module.ts +++ b/src/app/modules/user/user.module.ts @@ -22,6 +22,7 @@ import {NewComponent} from './new/new.component'; import {ButtonModule} from '../../widget-modules/components/button/button.module'; import {LogoModule} from '../../widget-modules/components/logo/logo.module'; import {FontAwesomeModule} from '@fortawesome/angular-fontawesome'; +import {SortByModule} from '../../widget-modules/pipes/sort-by/sort-by.module'; @NgModule({ declarations: [LoginComponent, AuthMessagePipe, InfoComponent, LogoutComponent, RolePipe, PasswordComponent, PasswordSendComponent, UsersComponent, UserComponent, NewComponent], @@ -40,6 +41,7 @@ import {FontAwesomeModule} from '@fortawesome/angular-fontawesome'; ButtonModule, LogoModule, FontAwesomeModule, + SortByModule, ], }) export class UserModule {} diff --git a/src/app/services/user/roles.ts b/src/app/services/user/roles.ts index c99ca90..4a67a9a 100644 --- a/src/app/services/user/roles.ts +++ b/src/app/services/user/roles.ts @@ -1,2 +1,2 @@ -export type roles = 'none' | 'admin' | 'user' | 'leader' | 'presenter' | 'contributor'; -export const ROLE_TYPES: roles[] = ['admin', 'user', 'leader', 'presenter', 'contributor']; +export type roles = 'none' | 'admin' | 'user' | 'leader' | 'presenter' | 'contributor' | 'member'; +export const ROLE_TYPES: roles[] = ['admin', 'user', 'member', 'leader', 'presenter', 'contributor']; diff --git a/src/app/widget-modules/components/application-frame/navigation/navigation.component.html b/src/app/widget-modules/components/application-frame/navigation/navigation.component.html index cdcaa12..14f4f56 100644 --- a/src/app/widget-modules/components/application-frame/navigation/navigation.component.html +++ b/src/app/widget-modules/components/application-frame/navigation/navigation.component.html @@ -8,7 +8,7 @@ text="Lieder" > { + it('create an instance', () => { + const pipe = new SortByPipe(); + expect(pipe).toBeTruthy(); + }); +}); diff --git a/src/app/widget-modules/pipes/sort-by/sort-by.pipe.ts b/src/app/widget-modules/pipes/sort-by/sort-by.pipe.ts new file mode 100644 index 0000000..d812998 --- /dev/null +++ b/src/app/widget-modules/pipes/sort-by/sort-by.pipe.ts @@ -0,0 +1,23 @@ +import {Pipe, PipeTransform} from '@angular/core'; +import {orderBy} from 'lodash'; + +@Pipe({name: 'sortBy'}) +export class SortByPipe implements PipeTransform { + public transform(value: unknown[] | null, order: 'asc' | 'desc' = 'asc', column = ''): unknown[] | null { + if (!value || !order) { + return value; + } // no array + if (!column || column === '') { + if (order === 'asc') { + return value.sort(); + } else { + return value.sort().reverse(); + } + } // sort 1d array + if (value.length <= 1) { + return value; + } // array with only one item + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + return orderBy(value, [column], [order]) as unknown[]; + } +}